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:
>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.
I reformatted and uploaded the game to a US-based print on demand game publisher. If you can't print your own and need a copy before the author has them back in stock or don't want to ship from the UK, here you go:
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
I print with some professional card printing companies, the pricing goes something like 10 decks, 500$, 50 decks 800$, 100 decks 1200$, and 300 decks 1500$ and then it continues to drop
Since I printed only 50, I think the price is too high, so I would rather to give them for free than to charge unreasonable price. If you are willing to pay the shipping cost send me an email to b0000@fastmail.com, I still have few left.
For those kind of costs, I'd print 300 for $1500. That's just $5 a piece. Sell them for $10, and you can afford to give away half of them.
I think this project would make a great Kickstarter. I don't think it would be hard to get 300 people interested in backing this. Shipping is probably going to be the biggest issue; find people on other continents to help you distribute it there. That can save a lot of money.
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.
(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.
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.
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.
Is `shuf` a basic command on *BSD (or Unix)?
https://man.netbsd.org/shuffle.1
https://www.freebsd.org/cgi/man.cgi?query=shuffle
Looks a bit simulator to the online Unix Game, which I really like:
https://www.unixgame.io/unix50
This is amazing! Thanks for sharing, I will try it with my daughter.
More from the author: https://github.com/jackdoe/programming-for-kids
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'
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 →
Is there any way you could/would change the license from ND to something else allowing derivatives? I would love to see translations of these!
Sorry, I copied ND and NC by mistake, I just pushed https://github.com/jackdoe/programming-for-kids/commit/8d14a... to move to CC-BY-4.0 (removing NC and NC)
I would love a Kickstarter (or something similar) with this. Would totally buy a nice set.
I reformatted and uploaded the game to a US-based print on demand game publisher. If you can't print your own and need a copy before the author has them back in stock or don't want to ship from the UK, here you go:
https://www.thegamecrafter.com/games/the-unix-pipe-card-game
Full disclosure, I will make about a dollar from each purchase.
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.
Nice. Was trying to print out the programming set for my son, but its too hard to read.
Can anyone get these to printout larger, and where the grey comments are less washed out?
You can just generate the tiffs yourself with different colors, border_color is the color of the border and the comments https://github.com/jackdoe/programming-for-kids/blob/8d14a24...
(if you are talking about the programming time game)
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 print with some professional card printing companies, the pricing goes something like 10 decks, 500$, 50 decks 800$, 100 decks 1200$, and 300 decks 1500$ and then it continues to drop
Since I printed only 50, I think the price is too high, so I would rather to give them for free than to charge unreasonable price. If you are willing to pay the shipping cost send me an email to b0000@fastmail.com, I still have few left.
You can get the 50 deck rate for even a single deck (and there are often coupon codes) at https://www.printerstudio.com/unique-ideas/blank-playing-car... or https://www.artscow.com/photo-gifts/playingcards
Also, if you're trying to give this away, they both allow you to share a link to your design so other people can buy the cards direct.
----
edit: the sites may seem cheezy, but they're probably responsible for 95% of prototype card decks that professional designers print.
For other excellent non-Chinese, Buy America options, there are https://www.printplaygames.com/product-category/prototypes/c... , https://www.thegamecrafter.com/make/pricing#Cards and https://www.drivethrucards.com/joincards.php
For those kind of costs, I'd print 300 for $1500. That's just $5 a piece. Sell them for $10, and you can afford to give away half of them.
I think this project would make a great Kickstarter. I don't think it would be hard to get 300 people interested in backing this. Shipping is probably going to be the biggest issue; find people on other continents to help you distribute it there. That can save a lot of money.
Maybe you could run all the decks as a kit on kickstarter?
I would love to buy all of them as a set, and I believe a lot of others would as well.
2 replies →
A cheap laser engraver could work well here.
Would you need 2layered paper, with a different color underneath? Or would engraving the words directly onto card stock be legible?
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?
You should add this game to boardgamegeek. They will also host the files for you if you want.
Doesn't seem to be a problem for OP since the files are available on GitHub [1] but they choose to leave downloads up on their domain.
1: https://github.com/jackdoe/programming-for-kids/tree/master/...
I do that so there is no tracking, I want people to be able to download the pdfs without microsoft's knowledge :)
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)
Comic sans black on white is more readable than most copy produced in modern web products.
Designers love grey on grey. I’ll take comic sans any day.
10 replies →
While I wouldn’t advocate for Comic Sans, monospace isn’t exactly good typography either.
1 reply →
> When I was a kid, ... I hated fonts “for kids”
So you were a snob since you were a child. Got it.
Please stop gatekeeping subjective matters.
Kids don't like comics fonts?
1 reply →
And a mascot - Pipey
This is brilliant. Every office should have this!
Oh man! Love it. Great Idea!
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.
Kids are people too?
But yeah this type of thing was always fun for me when I was a little guy.