Blog October 2019

Personal blog for Mr. Rob Muhlestein for the month of October, 2019.

Wednesday, October 30, 2019, 10:48:41PM

Listening to Vince Gauraldi Trio Christmas Charlie Brown stuff. Been listening to it every year since SkilStak started. Lots of memories. I remember looking out our little windows in our classroom space in our town home and watching the snow flakes fall and light up as the cars passed by. I would go back to my warm desk and knock out whatever code or lesson was needed for the next day. I will never regret starting this little community. So much more rewarding than going big (and I definitely could have). Small is so much better in so many ways.

Tuesday, October 29, 2019, 4:24:38PM

Another massive freeCodeCamp fail. This time it blocked them from doing anything at all. As if I needed any more convincing that unnecessary edtech tools are bad for learning.

freeCodeCamp Freeze
freeCodeCamp Crash

Tuesday, October 29, 2019, 4:18:38PM

Out of sheer necessity used GitLab to replace freeCodeCamp after a number of crashes and other errors. Turns out the GUI on GitLab is all that is needed to initially help them learn web development when combined with the wicked fast auto deployment to Netlify.

This removes the dependency on terminal and vim for absolute beginners who we can learn terminal at the same time that they are doing web challenges at home creating directories and editing files using nothing but GitLab.

Not only does this teach them how to edit directly from GitLab but provides yet another way to visualize what they are doing and promotes real tools and workflows instead of just-for-education alternatives.

Tuesday, October 29, 2019, 4:01:22PM

During a series of thoughts while running I realized (again) how much of the #edtech movement is just going in the wrong direction. We should be breaking down the barriers to learning and focusing on helping everyone learn the art and skill of learning so that they can learn anything with or without assistive technology.

Something as simple as realizing that the only way anything can be stored in your brain is by repetition so that the current flows over the same neuron synapses over and over again is really key.

Learning to create your own exercises to learn something is essential as is learning to test yourself incrementally while you repeat exercises you have created for yourself.

These are things that are not obvious to everyone and yet they are the most important things any human can learn since all knowledge, skills, and abilities are inextricably bound to mastering them.

I’m feeling really inspired to create a series of lessons just on the art and skill of learning and making it required before doing anything else. It could include activities and projects where those learning have to identify some knowledge or skill that they want and create their own learning plan and content for it.

Getting a lot of ideas from Josh Waitzkin’s Art of Learning book.

Tuesday, October 29, 2019, 11:09:42AM

“If I had had more time I would have sent you a shorter letter.”

That’s the principle of editing and simplification that is so underappreciated. In my case the end result of hours of considerations, research, and weighed decisions will ultimately end up being someone so simply people will be like, “That’s it?!”

The good part is that because it seems so easy and intuitive people will be quick to see the value over any other approach. For example, using Hugo or another SSG will seem ridiculously over-complicated and over-engineered in comparison.

The part I need to focus on is how kids as young as nine-years-old can use the KnowlegeNet approach immediately to effortlessly publish high-quality content of all kinds to the Web. Creating a book report or essay actually becomes easier than using even Google docs and has all the power of a full progressive web app that can be added later.

Here’s some more sketches:

KNode Meta

Monday, October 28, 2019, 5:28:24PM

It is so critical that people not only learn to learn, but learn to apply the scientific method to everything they learn or the decision about what to learn. This saves time because it allows them to arrive at one-best-way or one-best-thing to learn rather than filtering through the mass of less relevant, even outdated content and practices.

The hard part is finding opportunities to apply the one-best-things because most companies are completely mired in technical debt without the money or will to get themselves out of it. You either have to get yourself dirty working with the old and busted stuff, or have the courage to forge ahead creating new and better versions for companies that are emerging.

It reminds me that the most important decision about one’s occupation is job satisfaction based on how what you are doing every day aligns with your goals and mission in life (once you have figured that part out). It will take courage to take the risks and do without in order to stick to your principles and life-goals.

I know I talk about him a lot, but on pseudo-famous technologist I really admire from afar is TJ Holowaychuk. He has a brilliant technical mind and amazing work ethic but also “makes less than a junior engineer” in order to do things on his terms including not accepting VC funding and throwing JavaScript essential out the window after inventing Express but later discovering the power of the Go language. He could care less what people thing. He follows his bliss, his goals, his principles, usually rather quietly. He’s just one person, but knowing he exists is confirmation that amazing human beings don’t have to play by the broken rules of society and industry trends and expectations. Each of us is in charge. I’m the boss of me. You’re the boss of you.

Let’s have the courage to remain authentic to ourselves while constantly challenging our own beliefs and status quo.

Sunday, October 27, 2019, 2:46:52PM

Just Ask

Sunday, October 27, 2019, 2:11:30PM

Started on the core requirements to achieve the Web Developer role acknowledgement:

  1. Complete a personal/professional web site.
  2. Complete one or more real web sites for someone else.
  3. Pass a one-week, take-home challenge.
  4. Pass the take-home challenge review interview.

The sites must match a list of minimum requirements specified as natural-language user stories captured in plain English (no tech jargon) as if resulting from a discussion between a business analyst and the “client.”

The work involving someone else will include a requirement for the potential Web Developer to conduct domain analysis and conversations to elicit the requirements from that person (who should be considered a client for all intents and purposes). Ultimately the client will also fill out a form (that I will provide) evaluating the work of the candidate on the project. This includes referrals and feedback that can be used in real job searches.

Saturday, October 26, 2019, 2:47:31PM

Finding the term “role acknowledgement” coming out of my mouth lately. Feels very right. It’s that thing a professional does for others seeking work in the same role. The criteria are specifics that fulfill a “role description”.

“Oh yeah, they’d be great in that role as Web Designer!”

“They are missing experience with concurrency to really fill the Go Programmer role.”

That’s how I imagine talking about this stuff would sound.

Saturday, October 26, 2019, 1:31:46PM

I’ve been really enjoying The Art of Learning by Josh Waitzkin. Today I particularly appreciated this passage:

“As I struggled for a more precise grasp of my own learning process, I was forced to retrace my steps and remember what had been internalized and forgotten.”

This is perhaps the biggest hurdle to becoming a professional mentor. You have the skills but aren’t quite certain how you got them let alone how to help others learn them.

This is why an academic approach to learning is still required even if the best way to learn a skill is from someone who has the same skill. It’s not that everyone needs to become a formally certified teacher. It’s just that anyone wishing to foster those skills in others must come to understand that best ways to help others acquire them as well. Pretty obvious stuff really, but worth mentioning.

“The problem is that if you want to write an instructional book for beginners, you have to dig up all the stuff that is buried in your unconscious.”

This also explains my extreme impatience and disdain for freeCodeCamp and Codecademy. There is nothing “buried in [their] unconscious” to “dig up” because they don’t actually have any real experience using the skills.

Friday, October 25, 2019, 8:37:34PM

Just saw a Hugo thread about Pandoc support via “external helper” but it looks pretty damn ugly. First of all you have to name the files with the .pandoc suffix. Then there is no optimization that kn allows to build multiple files concurrently. All around Hugo is rather sad. Tried really hard to get into in about four years ago and it is so blog-centric and bloated that despite its speed during compilation it is usually way more than is needed — especially if the goal is simple rendering of knowledge source written in predictable, modular ways.

Friday, October 25, 2019, 7:49:56PM

I really love that a KNode is just a file with some other linked content in a directory.

I also completely forgot that because KnowledgeNet is based on Pandoc that every single KNode (that does not have dependent images and such) can also automatically become a man page. Seriously. Why aren’t more people building static site generation models around Pandoc? It makes so much sense.

Friday, October 25, 2019, 7:31:24PM

So this acknowledgements thing is really taking off as ideas go. After we get the occupation job descriptions done we have enough to create a Mentor Acknowledgement form that anyone could present to a professional matching the occupation description (or above) and ask them to fill out. The form will include a paragraph referral of particularly good things the person has accomplished during their work toward receiving it.

It is just a matter of putting together a list of professionals who match the different occupation descriptions and contacting them about the acknowledgement evaluation in advance and arranging for infrequent referrals of members who are learning.

An entire site for these activities is really needed. It would contain volunteer mentors who provide credentials for specific job descriptions. Then it would connect these volunteers with those wanting to master what the mentor is already employed doing.

The entire system would largely not be yet another learning management system, but a way for those who know to validate the work and learning of those managing their own learning.

I’ve seen mentorship sites before, but they lack specificity.

Friday, October 25, 2019, 6:50:53PM

KNodes are just Pandoc documents. The end.

So glad I’m giving the entire KNode source structure another look — specifically after reading through all the Pandoc documentation again. Pandoc already has all the meta data attributes standardized for pretty much every document format so there is really no reason not to just use them.

I came to this realization after accepting the fact that having the “front matter” YAML is just standard whether I like it or not. I can make a great case for keeping the meta data in a separate file. But the industry has overwhelmingly decided that including the meta data at the top of the file in YAML is standard. It would be foolish to go against that big of an adopted standard.

The good news is that al KNodes are just files in a directory. The directory name does not need to match the auto-identifier from the title, but who cares. In fact, the directory name doesn’t matter at all. It should be easy to remember and type. That is the most important. The title will be giving the KNode its SEO, not the words in the URL.

Friday, October 25, 2019, 1:11:00PM

Love how Wikipedia manages multiple languages. It uses a subdomain for each ( That’s what I’ll recommend for KnowledgeNet sites.

Also uncovered earlier notes from Essential Web and remembered the term bundle or package or module for the collection of nodes. So here’s the latest round of KnowledgeNet terms:

Node Atomic, flat, composable, base content unit.
Pointer URL pointing to specific location of node content.
Cluster Group of pointers without the content.
Module Group of nodes in one category with meta data.
Package Group of nodes and modules by category with meta data.
Network Group of interlinked nodes.
Site Node, module, or package rendered as site.

Friday, October 25, 2019, 10:02:30AM

Reading over old notes from 2014 back when doing labs instead of mentoring. I’m reminded that real learning happens two ways:

  1. In a loud, social, lab space.
  2. Quietly focused in flow state with mentor when needed.

The first five years of SkilStak were largely focused on the lab learning environment which might be why we gravitated toward more maker-space type of activities.

The last year and a half has been entirely focused with little to no social learning at all.

I have to confess the raw amount of learning seems to have sky-rocketed since moving to the focused learning model even though it meant some stopped coming or miss the social aspect of the lab.

One thing is for sure, moving to one-on-one has obliterated the following obstacles that constantly manifest themselves in my notes from that time:

I think the perfect approach is a 80/20 breakdown, 80% focused learning, 20% social lab learning organized in meetup style with a lot of show and tell and questions, like having mini-conferences once a month or so. Doing that would force members to consider what they want to have ready to show off regularly.

The stark similarity to piano recitals is certainly not lot on me. That is exactly what this is. The difference is that people in the audience are less formal and able to interact and ask questions.

The other obvious advantage is that this promotes speaking opportunities and learning to prepare presentations, two things that I have never prepared any member to do. I really do need to add something along those lines. I wonder how I could find a space to have such meetups. Once a quarter would be ideal, ten members each time, six minutes to present each.

Friday, October 25, 2019, 9:34:05AM

Rather than call them “miniprojects” we’ll use the more descriptive term exercises which are very different than challenges. A challenge is, well, a challenge. You do it once to see if you have mastered the skills. Exercises are repeated and the assumption is that you have not mastered the skills.

This also reminded me why freeCodeCamp and Codecademy do not work! They even call the thing they have the learner complete a challengenot an exercise. Challenge is just another word for test really. So they are giving mini-tests on each concept but provide all the explanation and “hints” with it. That’s not a fucking challenge! That’s purely repeating what is there to get it to pass.

If they had done it right they would have several exercises they would have several very similar problems to solve that emphasize repetition of applying the skill. Then, there would be one challenge separated from the exercises that brings it all together and possibly has a time limitation. You know, a test.

You would think former school teachers and “directors” would understand that shit before putting it into these massively broken “learning systems.” The need for repetition to map skills and knowledge onto neural pathways in the brain is very well established. Yet there is nothing in any of their sites that encourages the required levels of repetition for anything to actually be stored in their brains.

I have direct proof of this. After a month-long experiment with almost all my members completing all the “Responsive Web Design” certificate none of them could create a web page from scratch. I did the same test with one member who I had repeat my HTML5 document exercise more than 10 times three months ago and he practically did it flawlessly. The interesting thing is that he failed to put the <style> tags in the <head> because freeCodeCamp had indirectly obliterated that learning by not having an actual full HTML5 document in any most of the challenges promoting pieces of HTML and style sections just floating around with no context.

Once again, I’m just glad I’m moving more slowly and can be more agile to make such adjustments. FCC has codified into concrete a broken pedagogy. Just like corporations that do not adapt accrue technical debt, bad learning organizations accrue pedagogical debt.

I think I know why they didn’t do it right: simply because it was too complicated to automate. It’s like they got so hung up on having something “online” that they lost sight of the actual goal helping people really learn it. It wasn’t sexy enough to just do all of it with well written words that don’t have any automation and then have approved mentors personally check their work. No, they had edtech so far up their asses they couldn’t let it go. There are few objective examples of edtech being done so horribly wrong. No amount of automation will ever replace industry experience communicated through direct human connection.

Thursday, October 24, 2019, 8:22:40PM

That’s it. I’ve unfollowed freeCodeCamp and Codecademy on Twitter. I get so bent out of shape seeing how horrible the content and articles are — and worse, feeling like I have to do an “Adam ruins” on them every fucking time — that it affects my ability and focus to create solutions that based on objectively better real results. (NONE of their inflated claims can ever be measured or reviewed by anyone. That makes them worse than for-profit bootcamps which have been regularly sued for doing the same thing.)

You know when people mean well, try to help and end up hurting? Like giving CPR to someone with a stomach wound causing them to bleed out faster. That’s what many “educational” sites with zero industry experience are doing, yes like freeCodeCamp and Codecademy.

The solution is to find real professional mentors willing to help you, anyone with solid industry experience, and ask to pay them for their help integrating you, helping you network, validating learning materials, and mentoring your progress.

Thursday, October 24, 2019, 7:42:59PM

Going back to “miniprojects” (as one member calls them). They are great because they encapsulate only a few skills at a time and usually have a mnemonic theme. (Nyan cat for infinite loops, for example.) Without even planning it that way the fun of having a meme for it made the topic and skill learned something easy for them to recall and lookup later in their code repos on GitLab or GitHub.

In fact, once I tried to group some more skills into what was otherwise a very small, granular miniproject and he reminded me how valuable having them all very small was because he could zero in specifically on those skills associated with it.

Now that Web Developer is the default first target for everyone I’ll need to rework the miniprojects from Python for the web.

I’ve also decided no matter how difficult it is, I am going to require they do all of them with vim from the Linux terminal, which will provide the operations focus that Linux terminal mastery requires.

Thursday, October 24, 2019, 6:33:00PM

So fucking done with freeCodeCamp! Just had two members screw up their <style> section because all the FCC challenges do not actually have them make a real page, just a pseudo page containing a random <style> section. The people who made these materials are absolute fucking morons. I don’t care how many they claim to have helped get jobs, they have zero clue how to help others learn. I’m confident if I interviewed candidates who only did the FCC stuff that I would never pass them even on basic stuff.

Obviously this leaves me working 90+ hours a week trying to overcome all the shortcomings of this shit. I really sincerely want someone to make a quality educational resource online. But so far, nothing exists. I mean nothing.

I’m all about substance so I won’t get the marketing all the other shitty “tutorial” sites get. I don’t care. As long as the people I help get quality learning and not this absolute shit. Just so tired of it. Remember that $10k bootcamp that spelled AJAX AJACKS on their front page that a “teacher” had written on the whiteboard for an entire fucking class? It disgusts me. I know they mean well, but they are actually hurting people with this shit!

I mean, another “featured” How to become a web developer article from FCC did not even mention progressive web apps at all! And all it talked about was bloated Node.js and webpack with zero mention of Go, which companies are overwhelmingly migrating to for all their backend web APIs and such. GET A FUCKING CLUE PEOPLE!

The crux of the problem is these well-meaning morons have zero experience in the industry, not unlike a lot of other self-proclaimed educators. It infuriates me because I really, really care about the quality, so much that I have very little officially out there because my obsession with quality does not allow me to produce content without being able to immediately update it when needed. When it is finally out there a bunch of rock-solid content development and assessment tools will also be released with the first content. It might take another year, but it will blow away the horrendous shit out there right now. The rush to put stuff out is fostering zero quality control on the tools, the content, and ultimately the learning. Who gives a shit if you have 5000+ tutorials if they all suck as badly as most I have seen? YOU DON’T EVEN COVER MARKDOWN AND THE FUCKING <pre> an <code> ELEMENTS IN YOUR ENTIRE SET OF TUTORIALS! (I can scream because this is my fucking blog and this blows me away with frustration.)

Wednesday, October 23, 2019, 12:29:08PM

“It’s like learning to depend on GPS for navigation.”

That’s what Doris said after describing the foolishness that is highly complicated systems for checking “challenges” that pit the learner against the system rather than describing how to learner can evaluate themselves.

The freeCodeCamp and Codecademy systems are perfect examples of massive fails in this regard. All it takes is one bad automated check of a challenge for the person learning to hate the tool. But if you list out all the common checks and gotchas in plain English then the person catches themselves and internalizes it.

The extreme irony is that the simpler learning system that depends on words and good communication is cheaper and easier to implement and maintain AND better inline with solid science on the psychology of learning and mastery.

I swear the people who made Codecademy and freeCodeCamp have zero research or even experimentation behind their learning method. It’s pretty damn disturbing because so many of them have degrees in education and seem to have no fucking clue how learning actually works.

Wednesday, October 23, 2019, 11:34:57AM

Reading about pseudo-terminals contemplating an sksh educational shell that broadcasts the terminal locally over websockets so mentors and spectators can monitor. Also ran into this all-Go keylogger that requires root and captures all key strokes from everyone on the system. It uses /dev/events to do it.

The reason stems from wanting to be able to give direct, immediate feedback to those learning about things like Vi/m usage. Ideally it would be cross-platform.

I have already worked out (and been using) bash history monitoring for helping people learn about shell navigation.

The whole thought process led to two other trains of thought:

  1. Is there actual value in such granular hand-holding?
  2. How is the best way for hackers to edit files once they have access?

The answer to the first question is, “not much.” I have found that giving clear instructions and pushing those learning to really read and practice is best. This is how the effective (albeit dated) vimtutor application works. It describes what to do in detail without doing any specific monitoring. Granular monitoring is super difficult to implement and even harder to get right because of the infinite combinations to arrive at a proper result.

For example, rather than creating a complicated shell from which to run Vim just so a monitoring program can see the learner type ZZ to exit we can simply ask them to type in the key sequence to save and exit completely separately. That can easily be put into flashcards for memorization and quizzes and will translate into muscle memory as they are required to only edit in vim. I have seem this work successfully over and over. In fact, my most proficient terminal masters learned vim right after ssh and never learned anything else.

So that decision is made. No complicated pseudo-terminals until we are at the point where broadcasting everything on a learner’s terminal has value for monitoring and spectating both of which are secondary priorities.

The second question came up as I was trying to think through how such a monitoring shell would even work without Linux on Windows of Mac with the expectation that such would been to be cross-platform. Go certainly allows for this. I even read up on how to write your own cross-platform shell in Go, which is surprisingly easy.

That reminded me of the security Summer camp were we gained access to our honeypot’s terminal but without a visual TTY meaning not even vi worked. It was that moment that I realized just how valuable perl and even ed are in the hacker’s toolkit. Both are ubiquitous on UNIX/Linux and allow complicated text file manipulation without a visual TTY.

Then I indulged in a mental tangent about what I would do if I actually gained such access to a Windows system, a much more likely scenario given the Swiss cheese that is the Windows operating system. There is almost zero chance such a system would have an interactive terminal other than DOS (not even PowerShell). That is what got me thinking about writing a cross-platform minimal shell in Go that could be downloaded onto the exploited Windows machine to give Bash-like interactivity. It would be a single file. Such a shell would be highly specialized to obtain information from the system and do very specific things. It would not allow the altering of files directly, even text files.

It then became clear that any manipulation of files would have to take place off of the exploited system and then the changed/trojaned files could be easily transferred to the system. Hell, with Go you could even write specific programs to do things and cross-compile them from your attacking system so that they only run on the target system (yet another reason Go will dominate eventually in the security space). Working from a comfortable system instead of trying to upload all the tools to do such things on the remote system is not only easier, it is safer. You spend less time connected to the remote, compromised system and therefore are less likely to be detected. In fact, you should spend the least amount of time possible connected to the remote system because network connections are almost impossible to hide from router and system involved in the connection. Massive, effective network connection obfuscation (that Tor and others attempt) is still an unnecessary risk if you can create a payload offline and just make a momentary connection to make the transfer. No need to linger.

This last self-reminder confirms the direction of high specialization in Linux terminal since it is the most efficient way to do anything, period. The rest becomes a matter of understanding the targets. The greatest successes will come from being able to produce payloads as quickly as possible and knowing how to most efficiently and safely deliver them.

Tuesday, October 22, 2019, 8:21:31PM

It is time for a new content category classification registry focused on drop-dead intuitive simplicity.

The KnowledgeNet content categories are getting away from me a little. I realize that there actually needs to be a large registry of standard content category identifiers. Validation of new standard categories is really needed to ensure cross-content compatibility. (Plans are already in place to allow the black-listing of content that does not match its meta-data such as content category.)

One way to explain it is to think of a scenario where ever wikipedia page had a content category. For example, many people have pages and there is a specific policy for such content to be protected while they are alive. Another would be a book. The content would be about the book (including different places to buy it) but would not have the content of the book itself. Wikipedia provides a good base for creating such content organization ideas, but doesn’t have them at all currently. For example, you cannot pull up all the pages that are just about people, or limit a search to just the people category. Libraries have this, but Wikipedia does not.

Such simple category names would allow disambiguation to be built into the titles and URLs themselves: contact, film-contact, book-contact, Contact, Film: Contact, Book: Contact. This would be optional disambiguation but consistent when needed. (We really don’t want to go down the hierarchical directory path.) Of course the meta-data in the knode.json would have "Category": "Film" or "Category": "Book" in it as well making the title and URL ID prefixes optional for cataloging and searching systems. If someone insisted, they could even use contact-the-film as a title with the same category. Using the prefix is just a suggested convention that works universally with completion.

Tuesday, October 22, 2019, 7:51:58PM

Going back to the term cluster over map for a collection of knodes since it has more directly correlation to neurology. In fact, realized that at a very physical level knodes will be mapped to specific nodes of neurons in the human brain. I wonder if I will live long enough to see biomedical technology bridge that gap and connect artificial neural net clusters directly to “legacy” human neurons. We have been closer than ever before understanding how theoretically that could be done if not yet mechanically. The more machine learning maps to human neurological processes the closer the compatibility and possibility of doing a matrix-download of Kung Fu (or whatever).

Tuesday, October 22, 2019, 1:41:24PM

Learning is just coding the human brain. Skills are functions with parameters and methods. Tasks are calls to skill functions passed arguments. Projects are composed of tasks. Professions are composed of projects. Repetition flashes code onto our neurons.

Tuesday, October 22, 2019, 11:56:19AM

The more I get into this creation of categories and naming conventions the more I realize KnowledgeNet is a sort of a slimmed down, specification for a distributed Wikipedia.

I have been really torn over how much meta information to require in the titles but clearly some distinction is required. Putting such distinctions in the meta data is not sufficient because we want the distinction to show up on search results and URLs as well. I modified my entry on the 19th to illustrate this.

I am pretty sure not many people obsess about knowledge categorization as I have been — especially those facing work deadlines. Oh well. I’m just not going to throw hundreds of hours away reorganizing content again without having a super solid specification for how that content is organized and used.

Perhaps the biggest discovery is the distinction simply between skills and tasks. This was huge for me because it means that actions, recipes, projects, and even professions are all composed of tasks that can be broken down and associate with individual skills. A task is an application of a skill, plain and simple.

Skills and Tasks

It will be super important to distinguish between these types and categories of knowledge nodes because otherwise they might have the exact same name. This is something I have been wrestling with for a long time. At one point I had a challenge called “Create a Basic HTML5 Document” but it was also a description of how to do it with a specific example, in other words, a task applying that skill.

Perhaps the biggest difference between the two is that a task has specification with preconditions and postconditions, user stories, requirements and stuff. Tasks do not have the instructions for how to accomplish the task. Skill have only the instructions with no specific parameters.

In a very real sense, the skills and tasks of KnowledgeNet are a programming language for the human brain. A skill is like the written function with parameters for arguments in its signature. A task is the execution of that function with specific arguments passed to it. The comparison continue with the method by which that skill is implemented even though it does not seem practical to break that out further. For example, “delete a file” could be “from the command line” or “using the GUI”. Such distinctions about the method are best kept in the title of the knode because they are so relevant to searchability of the content.

In fact, as I kept thinking about the similarities of human brains to computers I can’t help notice that the only significant difference is that you cannot typing in code, you have to write the code into the human brain by reinforcing neural pathways and the only want to do that is simply repetition. “Povtarynia” really is the “mother of learning” as my Russian professors used to say.

This explains so much. For example, the reason freeCodeCamp and other online learning fails so completely is because it simply ignores these observable facts from cognitive science:

This is why tasks that are not real fail so fucking miserably. They do not create the actual neural pathways needed. It’s like doing heart surgery on a monkey v.s. an actual human.

The only conclusion is, therefore, that I need to really emphasize repetitive tasks, reading comprehension, and memorization for skills and creative application of those skills as they are learned (not some far of time in the future).

SKA Category Practice Assessment
Skills Skills Exercises, Projects Challenges
Knowledge Definitions Flashcards Quizes
Knowledge Memory Flashcards Quizes
Knowledge Slides Notes Review
Knowledge Articles Notes Review
Knowledge Papers Notes Review
Knowledge Logs Notes Review
Ability Behavior Roleplay Monitor

Exercises, projects and challenges are just composition of tasks in different forms and with different time constraints. The word “tutorials” is often used for projects by others. A tutorial, to me, is just a project with a tutor involved.

I cannot help but see even more parallels from what we are learning about neural nets from machine learning and the direct physical correlation to how human learning takes place. The entire academic field of education should be seriously watching what is happening with machine learning since it is modelled in most ways after human learning.

The process of discovering and applying needed learning and content therefore becomes:

  1. Identify the greatest human needs by profession.
  2. Write job descriptions for each profession.
  3. Identify work projects from the job description.
  4. Break down projects into tasks.
  5. Break down tasks into subtasks as necessary.
  6. Associate each task with a dependent skill.
  7. Break down subtasks into actions.
  8. Identify best method for each action.
  9. Create instructions for best method for each action.
  10. Roll up into learning projects composed of tasks.
  11. Have learners prepare for each project.
  12. Have learners execute each project repeatedly.
  13. Assess each project with a challenge each time.
  14. Document and date completion of challenges.
  15. Mark mastery of associated skills or reset entropy.

Hummm, maybe my book needs to be titled Programming Humans, a SkilStak Mémoire.

Monday, October 21, 2019, 8:15:02PM

Decided to get my OSCP. It’s $800 but the learning and content is worth it. Then I can construct my own infosec content that covers what I’m sure the OSCP will have left out. I like that it requires Linux knowledge, the equivalent of LPIC-0, which is what everyone learns here to begin with.

Monday, October 21, 2019, 3:30:30PM

DevOps is so overrated. It is the antithesis to #serverless. It’s based on the premise that those deploying DevOps architectures are good with creating and maintaining their own AWS, GCP, Azure, or even DigitalOcean. But even the fucking CIA is okay hosting a good chunk of its infrastructure on AWS.

I’m concerned about massive centralization for sure, but the fact is that it makes good business sense and therefore will continue whether it is a good thing or not.

Then consider how successful companies are smaller. Old, large, massive multi-national corporations are even restructuring themselves internally to be a bunch of smaller ones. There’s simply no question that small and mid-size companies will benefit most from IaaS and PaaS offerings. There’s already tons of objective data proving it. This is the very reason the biggest race in tech right now is cloud.

So where does that leave Docker/Kubernetes and the rest of the build-your-own-cloud stuff? No where really. All this mesh nonsense is just another take on internally hosted centralization akin to mainframe. For the companies that insist on rolling-their-own IT this is compelling, but the trend is away from hosting your own IT.

Like always that pendulum swings between internal and external and will continue to do so forever. But this time economic forces and competitive advantages will go to those who decentralize by default and centralize on IaaS offerings when needed.

I came to this realization as I was creating the Path to Full Stack Engineer and ran out of room for DevOps learning. It also didn’t naturally link to anything else. Truth is, there are not stats on DevOps positions to go on objectively. It is safe to say that becoming a Senior Software Engineer and Senior Systems Administrator/Engineer covers it when needed. The demand for DevOps specialists has to be relatively small and at the Architect level.

Therefore, it simply makes no sense for me (or most educational organizations) to focus on DevOps at all. Knowing how to put your app into a Docker container is about all so that it could be handed off easily to any DevOps team. And, of course, Go is the language of DevOps. Deploying a DevOps infrastructure is niche learning that I’m choosing not to focus on due to the very small opportunities it provides even if every other curriculum choice prepares them for DevOps when (and if) they decided to go with it.

Saturday, October 19, 2019, 2:40:15PM

More curriculum outlining anticipating more dependence on the actual standards themselves and projects covering them. So far this feels very right. Decided against including legacy content such as jQuery, Rails, Angular, PHP, Drupal, WordPress, MongoDB, Express, Webpack, and any Node-based backend stuff.

I mean, the guys who made Node and Express abandoned Node more than three years ago for Go and Rust. Massive companies like Salesforce have ported their entire codebase to Go. There is just to much to learn as it is. I want my people to know the latest as fast as possible without being bogged down supporting ancient stuff.

I decided to go ahead and put the curriculum outline as a knode of its own while fleshing it out.

[SkilStak Curriculum]

I will say that I hate the word curriculum, which is another that gets misused all the time but is commonly searched. It is normally associated with schools and universities, which I am not.

Saturday, October 19, 2019, 11:26:15AM

Did more domain modeling for the whole KnowledgeNet and SOIL thing (member pushed-out for break).

Realized there is a separation between the categories of content in a knode and the types of knode based on the specific format of the content. These are in addition to any tags that help identify what’s in the content itself. In fact, you see people put categories and types into their Medium tags all the time. For example, the “tutorial” tag is more of a category than a tag.

Tag Keywords that describe key content topics.
Category Grouping of the type of content in general.
Type Specification of the format of the content.

So far that means we have the following knode format types:

KnowledgeNet Node Types
Type Description
Plain Any possible format so long as compatible KNet markdown.
Log Chronological headings, most recent first.
Memory Cheat sheet/flashcard/quiz game format: thing, prompt, memonic.
Skill Description, prerequisites, instructions, related tasks.
Task Description, prerequisites, specification, solution, optional auto-validation.
Slides A set of slides akin to Map in result, but in document form.
Cluster A group of knodes by ID.
Redirect Just a pointer to another knode by URL.

And the content categories are what I initially thought were knode types (formerly “MTRAP”). I did notice there are some direct overlaps with types but this seems expected.

💢 Threw out the term “tutorial” completely. Project, primer, and challenge cover the same things to which “tutorial” refers but far more precisely. Tutorial has always been a fucking horribly misused, ambiguous word. Fuck search hits. If people don’t find this content because they are searching for “tutorial” then I they probably aren’t even ready to learn with me.

KnowledgeNet Node Content Categories
Category Type Title Type Sample ID
Article Plain any the-problem-with-college-board
Paper Plain any tensor-flow-analysis
Definition Plain simple noun just-in-time-learning
Resource Plain simple noun whatwg
Person Plain proper noun rob-pike
Film Plain proper noun film-contact
Book Plain proper noun book-lotr
Occupation Plain proper noun web-designer
Log Log dated noun blog-october-2019
CheatSheet Memory desc noun cheatsheet-vim
Primer Plain simple noun primer-linux
Skill Skill verb phrase skill-create-basic-html5-document
Task Task verb phrase task-create-tribute-web-page
Slides Slides any the-problem-with-college-board

Turns out that recipes, projects, and occupations are all ultimately composed of tasks, which are the application of skills.

Always put any qualifier at the beginning and not the end. This eliminates duplicates in other categories early when using completion.

Skills, tasks, and cheat sheets really need that extra descriptive work in the title to distinguish them from one another. Otherwise, it would be completely possible to have the same title for two knodes:

Same is true for primers. Without it the term with the same name could easily be confused with it. Primers make sense to keep in separate knodes because sometimes just the definition is wanted:

When necessary the same could be applied to resources and people and films:

Whew! Finally. If anyone actually reads this someday they will definitely think that this guy (me) overthinks everything — and they would be right. I’m a constant victim of analysis paralysis but when I finally finish something it’s fucking amazing. ;)

Saturday, October 19, 2019, 10:07:36AM

Over coffee I got to wondering more about the types of knodes and ultimate of writing.

Types of Writing
Describing terms, concepts, people
Instructing recipes, guides, tutorials
Telling stories, histories
Questioning scientific, challenging status quo
Reporting accurate recounting of events
Declaring requirements, rights, behavior
Ranting (reporting or describing) + anger
Discussing threaded, multiple authors
Informing notifications, email, notices

In this blog I do pretty much all of them. But I think there is value in distinguishing writing types when creating slightly more formal — and even most informal — writing in the world.

For example, when authoring a Tweet the writer can pick pretty much any type, but ranting rarely accomplishes anything because you are mostly writing it for yourself and hoping others agree. I am so guilty of this. It takes tremendous discipline to stick with the more productive writing types.

That said, I’m no fucking snowflake. The world is becoming filled with people afraid to disagree and hurt people’s feelings — the very source of scientific discovery. We need more respectful disagreement not less.

Friday, October 18, 2019, 7:29:04PM

It just occurred to me while explaining why we are moving off of freeCodeCamp as a community that there might be an implicit pace expectation to the material that they aren’t even aware of.

If you really go at the material intensively like a bootcamp you are more likely to retain the learning from the initial challenges by the time you get the final projects for that particular certificate.

However, if you only work on it a little every week and it takes you more than a month just to finish the first certificate and get to the projects you are very likely not to remember a damn thing from the first “challenges” when you get to the projects. This was exactly the case for everyone I tested over the last week.

At first I didn’t give a shit why freeCodeCamp failed our community so ridiculously I just wanted to focus on the replacement. But having this insight might help others to figure out why they might be struggling as well.

The fix, of course, is to start with a real project — something the learner wants to create that they completely own — and then link in the learning and concepts while working on the same ongoing project from beginning to end. This guided project approach has been used successfully for centuries in all learning domains. In fact, it is exactly how my wife helps others learn art as well.

I am really glad I realized this before going off the path too much further. Certification doesn’t mean shit without a real project and the learning behind it.

Friday, October 18, 2019, 6:34:18PM

I read someone who called journaling “mental masturbation.” I think they are right. It does feel so good to get the thoughts down. I’m sure fear is involved as well. My memory can’t keep up with the new stuff. Writing it down is the salvation.

Friday, October 18, 2019, 5:33:07PM

One of the key components of all the online learning systems and sites that is blatantly missing is a projection of completion based on current and history rate of progress. This is so crucial for independent learners (“bosses of their own learning”) to realize just how far behind or ahead of their learning goals they are. Why has no one thought to incorporate such things? Is is too much hassle? Inaccurate? Would love to hear what others have to say.

Friday, October 18, 2019, 4:36:45PM

Maybe it’s the linguist in me but I obsess about using the proper terms for things. I agree with Rob Pike that domain modeling and structures are more fundamental to software engineering than algorithms. I find him to be a genius on so many levels mostly because he actually thinks about things, a lot.

As I’ve been honing the domain model for all the SOIL and KnowledgeNet stuff the following terms have really needed some scrutiny given how rampantly and wildly they are used by every fucking education web site and institution in the world. For example, freeCodeCamp boasts “thousands of tutorials.” What the fuck does that even mean? Has anyone over there bothered to actually read the definition and origin of the word tutorial? Nope. If they did they would realize their “tutorials” are all over the place. I mean, they have a “Linux Tutorial” that is absolute shit mostly because you have no idea what to expect. This is why the Internet has invented the term “tutorial hell” because so much of this doesn’t focus on real solutions and projects using real tools.

It all makes me fucking crazy with frustration because I see the effect it is having on those diligently trying to learn on their own and yet struggle with the time and resources to do all of this the right way.

Here is a list of terms involved:

Term Definition
Instruction Chronologically describe how somthing is to be accomplished. This term is pretty general which is why no one seems to want to use it preferring the more speciic “recipe” or “tutorial” or “howto” instead, but it is definitely the best term in the group. A single instruction describes how to complete an action. Instructions describe how to apply a skill, do a task, or complete a project. This term has probably not been used a lot just because of how long and general it is, but is is usually the most accurate.
Action Something someone or something does to produce an effect. For example, remove a lightbulb from the socket. No learning or memorization is required.
Effect The measurable result of an action.
Skill The combination of several actions which can be learned and mastered to produce a desired effect. Performing an action does not mean you have acquired the skill involving that action. For example, playing the pentatonic scale on the guitar. You may do it once and never be able to do it again. Skills involve learning and memory.
Knowledge Knowledge generally refers to anything that be stored in the humain brain.
Ability More than a skill requiring innate or take regular, persistance focus to acquire. Shooting lasers out your eyes is an ability, not a skill. Leadership is an ability, not so much a skill. Building relationships of trust, a skill, would be something leadership would contain. One cannot write a set of instructions for an ability like could be done for any skill. Abilities are abstract and harder to measure but often more significant than skills.
Task The application of an action (unlearned) or skill (learned) to do something specific. For example, screw the 50w lightbulb into the bathroom light socket.
Project The combination of multiple tasks described by instructions be they general, specific, chronological, or not. Projects can have a deadline or not.
Challenge A project or task to be completed as a test of mastery.
Requirement A precise effect with specific parameters and metrics.
Check The pass or fail test that a requirement is achieved. The same check might have different methods (instructions) to achieve the same test result. This term is often interchanged with tests
Test A combination of checks sometimes accompanying a specification. While checks are pass/fail, tests can be a percentage.
Specification The documentation of one or more effects to be achieved. It can be general, such as that used in user stories or very specific, as with unit testing. Specifications are often implemented as tests that can be automated.
Guide Something that help you navigate a path through something about which you have little or no knowledge. A guide isn’t primarily interested in helping you understand why that path is the right one, only that you choose it. For example, a white-water river guide just wants you to live through the river, not help you learn to be a river guide, although they might say a little bit about it in passing.
Mentor Someone with knowledge primarily from experience who can help guide you and help you learn the same knowledge. When a river guide is put in charge of training new river guides on a specific river trip they become a mentor and not just a guide any longer.
Primer An introduction and overview of a topic. People often use tutorial when they mean primer. For example, the phrase Linux Tutorial is simply absurd. What they mean is undoubtedly Linux Primer but because the whole world is brain-dead illiterate and few have a desire to improve language usage we get the shit like Python Tutorial and the like. Linux Tutorial is like saying Climate Change Tutorial.
Tutorial A mentored project. Originally it was a meeting between assistants to the professor (tutors) to cover material related directly and indirectly to the main curriculum. It has come to mean anything from random videos, to step-by-step instructions about how to do something, to suggestions about how to complete a project. It is one of the most bastardized terms in the group and yet the most commonly searched. For me, a tutorial is distinguished from everything else by having an actual tutor/mentor involved. Otherwise it is just a bunch of instructions. This is usually accomplished by the person creating the tutorial putting their personality and experience into the content. You could call Bob Ross painting shows tutorials to some degree, even moreso if he focused on specific techniques.
Recipe Popularized by O’Reilly books and others but is confusing and unnecessary. You would never as for the “recipe” to install a light bulb. You would ask for the instructions though. However, a recipe for adding a search box to your web site makes sense, or changing all the permission on all files and directories recursively. Recipes obviously include instructions.
HowTo Another way to say recipe that makes better sense in different situations. For example, instructions for how to convert aan iKEA bookcase into a server rack is more of a HowTo than a recipe or tutorial. Then again, you would not ask for the “howto” on installing light bulbs. “What do the instructions say?” would be more common.

Part of the complexity of all of this is how it all can be further broken down. An action is made up of other actions, a skill is composed of other skills, and so on.

Friday, October 18, 2019, 12:44:51PM

Decided now that freeCodeCamp is finally back to have everyone currently complete the Responsive Web Design certificates and we’ll abandon use of freeCodeCamp after that. Now that the base knode challenge Markdown format is done I can get to work writing the challenges that I already needed to layer on top of freeCodeCamp due to it lacking a lot of critical coverage (like the pre and code elements for example).

In fact, this has all turned out to be for the best. After reviewing the excellent, authoritative content on I see no reason to involve any other site but that actual standard and where I can explain in extremely simple terms (as if to a young person who has just learned to read Harry Potter). I will make sure to hyperlink all terms to my plain definitions. People regularly compliment me on how simple and understandable stuff is on this site. I just need to get more of it done. One of the universal failures of all the tutorial sites and video services I have seen is that none of them define the demographic of their audience before making their content. There is simply no fucking target audience at all. I’m sorry. That’s just fucking stupid. How can you create hours and hours of content and not even know that first? It’s infuriating. It was the reason even my 12 year olds could not get through freeCodeCamp without getting stuck on terms and simple English language usage that would have been corrected if the writers of the content actually knew this stuff. Not me. I don’t care how long it takes to get stuff out. It will be quality with a priority on basic language usage and writing above all, even above the technical content.

Anyway, here are the current priorities:

Feels good to be back into Linux for everything. Frankly, the entire community regressed for a month while fucking around with the shitty web-editor doing freeCodeCamp challenges that have no relation to reality. Yeah, I’m pissed, but I corrected quickly and saved us all from losing further learning progress. Once again, the advantage of a small, agile learning communities over a behemoth organization wins the day.

Thursday, October 17, 2019, 7:30:11PM

Ever done something the right way to begin with and had everything else just fall into place because of it?

Well that totally just happened to me using Go to code the automated challenge checkers combined with the flat, wonderful KnowledgeNet site framework layout.

I documented the challenge knode type in previous post.

All that is needed to add a checker is to write a check.go (with optional check_test.go and testdata) inside the knode directory. The really great thing about that because of Go’s brilliant use of URLs for imports developers can leverage the naming convention of the site to also be a Go package! Yep, no separate source repo for the checks, just put it all in the knode directory.

Here’s the boilerplate for any knode challenge:

package check

func Check() (r []bool) {
  r = append(r, true) // TODO replace me

What is so amazing is that this provides solid testing of the checks themselves which are a common pain-point of any automated checking system. How many times have people been burned by the test checker being broken instead of actually testing the check accurately (not unlike the entire complaint against TDD in the first place)? There is no better way to make users learning with a system hate it.

Here’s boilerplate for a test of the checker itself:

package check

import "testing"

func Test(t *testing.T) {
  // TODO t.Log and t.Fail, etc.

I am blown away by the unintentional elegance of the whole thing. It must be completed.

Now need to figure out the best approach to compiling the binaries. I am inclined to compile on the endpoint rather than waste space with precompiled binaries for every target platform stored with the KnowledgeNet site itself. I may be looking at a go installation dependency, which would not be horrible. It would only be required for the sk tool. All knode challenges can be completed and verified without sk just by having someone review the work.

Besides, it is a trivial matter with 1.13 to go get the actual installation itself. I would then just store it under .sk so that the version of Go is dependably connected to the sk tool. It is a trivial amount of disk space and far better than doing the equivalent with something like a Python virtual environment.

Go’s amazing compilation speed kicks in even more. It means that compiling (and recompiling) a monolithic binary containing all the checks currently cached would be trivial. It also means that .sk directories could simply be seeded across an entire lab of systems from USB or scp or whatever.

OMG, I so love where this going.

Thursday, October 17, 2019, 5:13:29PM

Here’s my initial notes on how to use only Pandoc Markdown for pretty much any Knowledge Node Challenge.

KNode Challenge Notes

Here’s a cleaner version:

Tags: [one,two,three,four,five]
Type: challenge
UUID: en:1830e174-055d-4593-a1ac-60b3760d71df
SemV: v1.0.0

# Print Hello to the Terminal in Go

Build and install a simple Go program called `hellogo` that prints "Hello world!" to the terminal screen when executed.

I could write more here, but the paragraph previous to this one is the *Intro* common to all Knowledge Nodes. It needs to succintly describe the challenge and is often the only text required in this section. Other relevant reading is under the *Reading* section. There could be several other headings but the following names are reserved for challenge knode types:

* Reading
* Checks
* Hints
* Solution

As more languages are supported reserved words in all languages which are the equivalent will be identified and must match the language indicated in the UUID.

The primary goal of the `challenge` KNode type is to provide primarily a human experience accomplishing the challenge but in a way that pairs well with any possible system of automated validation. Nothing but this document (and its dependencies) should be required to complete the challenge and be validated by a human.

This section is required.

## Reading

Printing the simple greeting to the terminal has long been a tradition when getting started. 

This is stuff the learner should read and be familiar with before attempting the challenge. Links are opened in the preview frame/pane instead of taking over the challenge pane. Use *reference links* as much as possible to avoid redundancy, a big problem with most learning systems that find frequent referral to other knowledge source cumbersome.

[[*Open Linux Terminal*]](/open-a-linux-terminal/)  
[[*Setup Go Development Environment for Terminal*]](/setup-go-development-environment-for-terminal/)  
[[*Build and Install Go Program*]](/build-and-install-go-program/)  

Note that these links are all followed by two spaces (hard breaks).

This section is required.

## Checks

You can put text in this section, but probably should avoid it. The most important part is the following required ordered list. 

1. Program `hellogo` exists and is in system path.
1. Output is exactly `Hello world!` with a line return.

There is no limit to the length of text but shoot for less than 70 visible characters.

Make sure to keep the numbers exactly synced up with any automated checking utility. The only connection between this section and any automated checker are the numbers in order to preserve compatibility with all written languages.

Also note that the check text will be translated along with everything else in every challenge. There is no residual English for content developers to deal with.

Also be sure to increment the `Version` if any substantial change happens.

## Hints

**Here's a hint.** A hint is just a paragraph that can optionally start with bold text. In simple form the hints are simply at the bottom and therefore can be avoided. KSite themes can incorporate JavaScript that hides each paragraph such that it has to be clicked to see.

This section is optional.

## Solution

The solution section is a required explanation of what passing the challenge would look like with one or more examples. Combined with the *Checks* section this should be all anyone with a basic background in topic ever needs to validate the challenge has been passed.

***Automated challenge checkers must never build dependencies on any particular format of this section.* It's for humans.

I was particularly happy to realize I don’t even need to have any automated tests or checks to begin with, just a human to verify it. In fact, the checks are just a rubric by another name that is already well known to educators. This means that when code is eventually written to validate the challenge for pass or fail that the automation simply has to do what the human was already doing. In fact, this means that there are three return states for any single check:

  1. pass (1)
  2. fail (0)
  3. unknown (nil)

The validate state means that the specific check requires a human to validate it and sign off personally, which reminds me the sk system needs a localized way for mentors to “sign” the JSON results once submitted. A GPG key pair is as good as anything. I’m reminded that the results themselves need at least a minimal level of authentification. This is probably the only thing a centralized system has over decentralized. The automated validation of the tests is happening in a way that can more or less be controlled.

Preventing tampering is a slippery slope. At some point any system can be gamed beginning with just copying and pasting someone else’s work to pass. I remember blogging about this a while ago, any learning management system has an implicit level of trust assumed between the learner and those evaluating their progress, which is why the foundation of learning needs to begin with the person doing the learning. An adversarial relationship between the learner and “teacher” will never work. Even worse, often it becomes a contest to see how little actual learning the learner can get away with and game the system to give them the A. I can’t count how many times I’ve observed this among students over my life.

Thursday, October 17, 2019, 3:56:48PM

It is now the third day freeCodeCamp has been completely offline! This is completely unacceptable. This is supposed to be an organization that trains professions in full-stack web applications development. Clearly they have no fucking clue what they are doing. They can get away with it because they are non-profit. In the professional domain heads would roll over this. Imagine Amazon or Netflix being down for almost three full days. Unacceptable. I simply cannot use or promote it any longer.

So back to the four main components:

  1. kn - create, publish, manage learning content as knowledge source
  2. sl - manage an individual mentored SOIL community
  3. sk - learn locally and interactively, report, no net dependency
  4. qu - track and assess learning as quests

Focusing on sk and kn integration at the moment so that a challenge can be encapsulated as a type of knode with kn.

Tuesday, October 15, 2019, 6:03:21PM

Reading through my content and realizing I use italics far too frequently. Often just initial caps are fine for a title, package, or organization.

Tuesday, October 15, 2019, 4:01:28PM

The site is down! Never been more motivated to complete a system that is decentralized and doesn’t depend on the Internet. Members twiddling their thumbs and can’t show me the stuff they are stuck on.

I cannot believe how different the direction freeCodeCamp has taken from me having started around the same time. I started a year before.

Highly Different Paths and Priorities of SkilStak and freeCodeCamp
SkilStak freeCodeCamp
Started in May 2013. Started in 2014.
Focused entirely on individuals. Focused on getting learning to the masses.
Organic curriculum conforming to evolving needs of individuals and changes in the industry. Ivory tower material written by those with little industry experience.
Maintained by one person. Maintained by team and community.
CEO is also the only mentor. CEO completely disconnected from any mentoring.
Financed entirely from personal retirement funds. Grants and seed capital forcing focus on perceived success versus actual progress.
Immediately starts members creating their own projects as proof of their learning. Immediately develops a contrived system of learning challenges that require Internet access and produce no demonstratable value for those learning.
Focuses on the entirety of the tech industry helping members discover and navigate their own personal path. Duplicates the dubious focus on only Web using outdated methods and frameworks. Slowly decides to blog about other tech areas without any significant material or guided learning around them (Go, machine learning, etc.)
Encourages successful members to continue learning and then starting their own learning communities with their own personality and focus. Encourages successful members to get great jobs as soon as possible (mostly to brag about their success to keep grant money coming in). Begs them to contribute money and time specifically for only making freeCodeCamp better for everyone rather than encouraging them to start their own learning communities.
Creates original content and decentralized tools with non-profit initiative to promote localized learning tools. Creates highly JavaScript-centric system that requires Internet connection to even use. No plan for learning content and tools for anything but web-based challenges.

Tuesday, October 15, 2019, 11:00:15AM

Realized without planning it that KnowledgeNet nodes are very similar in design to the inodes from the UNIX/Linux file system pattern. I even started calling them “knodes” without realizing the similarity until just now.

The parallels run deeper when I started giving them meta types (similar to directory inodes) in addition to content types:

What is really crazy is after registering as the top level knowledge node that the entire KnowledgeNet could be thought of as one big UNIX/Linux file system. A new KNet reader could just cache all the new content needed while a person has Internet access and allow them to browse it offline. Caching will be explicitly directed by the user/reader. Want the latest from a ksite? Just tap update in your knet reader and only the changes will be synced to it.

Ironic how much of my original Essential Web design is returning here. More ironic that there is no way such an initiative will ever get Silicon Valley funding because of how directly it undermines Amazon and all the other for-profit content distribution forms.

Also realizing I can just make a KNet reader as a progressive web app that uses web assembly so that it is uniform. Unfortunately that means creating a simplified Pandoc Markdown AST parser in Go first, something I want to do anyway.

Saturday, October 12, 2019, 10:09:05AM

I keep focusing on the first major milestone, getting enough skills and projects to get a job. It is very clear from the objective research from the BLS that the fastest path to a tech career is becoming a Front-End Web Developer on Linux:

  1. Touch Type 40 Words Per Minute from Home Row
  2. Setup and Use a Linux Workstation
  3. Setup and Use Essential Services
  4. Become a Linux Terminal Master
  5. Learn Responsive Web Design with HTML/CSS
  6. Learn Static Site Generation and JAMstack Publishing
  7. Learn Modern JavaScript with Document Object Model
  8. Learn Progressive Web App Development with Vue, Workbox
  9. Get Good to Gig

All of that is entirely focused on the Web but with the path leading to full-stack web and native applications development and/or Linux systems work thereafter:

Software Developer will be focused on full-stack Web an Go applications development for command-line, terminal, and graphics user interfaces on everything from devices to mobile phones to desktops to servers. It will include use of and deployment to Google cloud services when needed but not depend on the cloud emphasizing instead stand-alone development. Notably SQLite and PostgreSQL will be the only databases emphasized (no MongoDB).

Linux Systems Administrator will be LPIC-2 plus “hands on” requirements including installing at least seven different Linux distributions on bare-metal and containers and virtual machines.

Possibly these specialties:

Other titles:

Saturday, October 12, 2019, 9:46:01AM

I’ve decided to simplify how everyone learns here into one sequential path — especially after the amazing change that has taken root in every single member since moving to all one-on-one. I’ve been reminded of several things from watching them proceed through the freeCodeCamp material:

A lot of this is what prompted my creation of SkilBots about two years ago, a challenge system with visual queues immediately when you get something right on each challenge. I definitely need to get that out again. In fact, now that more and more are using my material out in the world, I realize KnowledgeNet and SkilBots are the most effective way to reach them without being there one-on-one. This way I can eventually create videos to go with how to setup their Linux environment, for example, and then they can easily download the SkilBot they need to help them learn.

It is also imperative that any challenge system I create have zero dependency on the Internet. I am not aware of any such option at all. SkilBots can be distributed through USB sticks and CDs even where Internet access is spotty. This also allows a lot more possibilities since people can learn in places where there is no Internet such as remote locations and while travelling on buses and airplanes. A significant population still travels by bus and includes all social classes. I want to promote such options not make it impossible for people to do their learning in such places. These seem like small things to most, but they are huge to those who are affected by them.

By the way, that is also why I am all about Linux because restored old laptops can be repurposed with Linux and have the educational curriculum (bots) loaded onto them and distributed to those who are still in the digital divide.

My ultimate goal is to have a beginning to end program for fast employment that requires nothing but a 10 year old laptop running the latest Linux. Bots can also be run from Raspberry Pi with little effort.

In fact, I could make a Raspberry Pi distro with all the latest bot curriculum on it. Person doesn’t even have to pay for Internet to learn enough to get a job. Yet another reason Git/GitLab/GitHub are required learning. Say a dedicated learner does not have Internet at home. They could go to the library or school and git clone a project with boilerplate

Friday, October 11, 2019, 1:45:59PM

Finished first draft of Fast Track Tech Career after meeting with another adult seeking to up-skill into tech having worked for years in other industries.

Friday, October 11, 2019, 1:39:56PM

More reflection on the categorization of knowledge related specifically to stuff I think fits into a SkilStak I would hope to fully realize one day covering a wide-range of topics far beyond even those covered by “full-stack engineering.”

Sunday, October 6, 2019, 12:27:11PM

During breakfast realized there are actually seven large skill categories I feel compelled to help everyone learn. For the most part these can be learned separately but there are interdependent critical paths that I need to really hash out:

Category Description
Communications Reading, writing, typing, searching, emailing, chatting, following, cutting, pasting, screenshotting, storing, sharing, logging, illustrating, persenting, producing, streaming, publishing, debating, analyzing, marketing, and simple speaking and listening.
Learning Researching, practicing, recording, evaluating, hypothesizing, experimenting, seeking, deconstructing, exploring, examining, assessing, testing, problem solving, challenging.
Development Setting up a development environment, identifying needs, domain modeling, creating algorithems, coding, programming, testing, deploying, documenting, monitoring, maintaining, and publishing.
Operations Using a computer, setting up and maintaining a workstation, mastering the terminal, remotely accessing host systems, installing software, using containers, deploying to the cloud, auditing performance and security, root cause analysis, shell scripting and process automation, networking, architecting, diagramming.
Data Data modeling, diagraming, normalizing, storing, querying, structures, analysis, statistics.
AI Simulated algorithmic intelligence, conversational user interfaces, machine learning.
Electronics Understanding flow and resistance, transistors, designing, soldering, ordering boards, diagramming, flashing, Arduino, Raspberry Pi, MicroChip PIC, assemblers, sensors.

I’m confident having a strong grasp of all of these categories, skills, and tools will almost literally produce humans capable of doing almost anything.

Thursday, October 3, 2019, 4:41:55PM

Even though I’ve been blogging for the last six months none of it has been available to read because when the Summer started I decided to completely port my kn tool to Go from shell. I suppose that is sometimes the danger of knowing you can code anything given enough time. In this case it took back seat to several major projects including the following:

Here’s the massive amount of work still before me, but fun:

[Past Months]