Show HN: The Unix Pipe Card Game – teach kids basic Unix commands

3 years ago (punkx.org)

In the example.jpg image, we can see an example with sort -R "to shuffle the input (random sort)."

But sort -R does not randomise input if one is using NetBSD.

https://man.netbsd.org/sort.1

A POSIX-like sort has no -R option. See, .e.g, Plan9 sort or early versions of FreeBSD or OpenBSD. Early Linux did not have this non-POSIX option either. For example, look at Debian, RedHat, SuSE and other distributions in the mid-2000's. HP-UX, Minix, BusyBox, and so on have no -R option.

A different approach to teaching "basic" UNIX commands would be to focus on the portability and "lowest common denominator" and ignore non-ubiquitous options like -R. Ask the student what sequences of commands, i.e., scripts, will work on all UNIX/UNIX-like OS regardless of the age of system. From that "basic" foundation, one can then learn how the programs have evolved to become larger and more complicated (a side lesson about bloat) and all the OS-specific differences between them.

The photo at the bottom appears to be some small ergonomic keyboard (maybe an Atreus?) built into stained wood along with a screen. Perhaps it is a cyberdeck? Curious to know more.

  • Ah! I didnt mean to show it off, just my desk is a mess..

    Yea its a cyberdeck I am building with hardwired Atreus directly connected to pi zero gpios and using libuinput to make a software keyboard, which works amazing btw.

    I am making it to init directly into getty without login (with busybox init), so it boots directly in usable /bin/bash in only 2-3 seconds, and all the available programs are simple python programs (ls, cp, mv, a basic line editor, touchtyping game, hangman etc) and the keyboard itself is a simple python program that basically scans the matrix and emits events to uinput. The frame is from plywood.

    And I am trying to make it like a 'scavenger hunt' experience for my daughter, I will put special codes in various places in the programs or on the file system with different difficulty, and I can challenge her to find them.

    The goal is to have < 50$ scavenger hunt computer kit (thats why I cant afford teensy or something)

    This is just the prototype to see how it feels to write code using line editor, and also to test the effect of thinking of the keyboard as a program with a nested for loop, on her thinking about 'what happens when you press a key'

        for r in rows:
            send(r, 1)
            for c in cols:
                 v = read(c)
                 if v == 1:
                      # (r,c) is pressed
            send(r, 0)
    
    

    I just uploaded those to show you how it looks, but again, its just to test the software and the screens size:

    https://github.com/jackdoe/programming-for-kids/blob/master/... https://github.com/jackdoe/programming-for-kids/blob/master/...

    • >And I am trying to make it like a 'scavenger hunt' experience for my daughter, I will put special codes in various places in the programs or on the file system with different difficulty, and I can challenge her to find them.

      This is brilliant. I really admire the lengths you go to so that your kids can be engaged. Sounds like this has the potential to be quite fun and exciting.

      2 replies →

There's a typo on the instructions page. The example has 'rises' but the rest of the explanation uses 'raises'

I love this as a concept, though.

I think if I were to expand this I'd maybe have pre-defined strings for the greps, cards with results on, number pre-selected etc. This makes it more of a 'find the card' or 'matching' game than a problem solving game, but it would make it more kids-card-gamey

  • Oh! Because of the slow and costly printing process I read it like 50 times, and yet..

    Its amazing how your brain just sees what it wants to see.

Is the creator thinking of doing another printing? If not can someone recommend a service that will print a high quality card deck given the PDF?

I was able to complete everything that does not involve Random. I am working on a solution as a wrapper for the sort function, that involves the last digit of the seconds clock.

The amount of shells that run in the browser, amazing, the number of new shells that run well in the browser - amazing.

My first thought when I saw this was "stocking stuffer". It sounds a little bit pricey for DIY, though. The Python game sounded interesting, but my initial impression was that it would be way too advanced for beginners. Am I missing something?

Looks nice, though my guess is it would be more appealing to kids if it used more color, a bigger font size and a more "fun" font family like Comic Sans perhaps.

Nice work though, would definitely consider this for my own kids.

  • Please no. Doh’t feed bad typography to kids.

    (When I was a kid, I had access to good design examples. I hated fonts “for kids”. Also, because the essence of play is simulation, and childish fonts ruin the game)

I love Unix pipes and I love the immense computational power you can achieve through streaming pipelines. You hear stories of people processing terabytes of data faster and cheaper than a distributed cloud solution, by the virtue of Unix pies[1].

But I don’t really see them in any other environment. I can’t think of anything that uses something similar except for big, distributed data processing pipelines like Apache Beam.

Where’s the Python with streaming pipelines?

[1] https://livefreeordichotomize.com/posts/2019-06-04-using-awk...

  • This is one of the things that I think Perl (still) does really well. It has flags to allow for command-like one liners and has built in things (like the diamond operator) that make it very quick and easy to write 'filter' scripts that read STDIN and print to STDOUT.

    Python can do these things, but they aren't very pythonic and they don't feel as natural/intuitive.

I'm not saying that this isn't a great way for people to familiarize themselves with basic Unix shell commands. That said, why would you want to teach this to kids?

  • Now with everything on the cloud, kids are growing more and more disconnected with their computers, instead of the kid making the computer do something, they do some magic sequence of actions and sometimes things work, sometimes they dont.

    Being able to type a command, give it some input and see its output, I believe is the most fundamental way to interact with the computer.

    The basic concepts of files, folders, programs and processes are getting more and more murky with every new iOS and windows release, and yet, those are still the building blocks of everything, they are just hidden by some obscure interfaces and menus or are just plain inaccessible to the user.

    UNIX Pipes are the most pure and useful way I know of how the user interacts with the programs and how the programs interact with each other passing their output to the other program's input, and I think it illustrates how more complicated things can be built.