3 pontos por GN⁺ 2024-07-25 | 2 comentários | Compartilhar no WhatsApp
  • É um jogo em que crianças aprendem combinações com pipes ao conectar em cartas comandos UNIX básicos como cat, grep, tail, head, wc, sort e uniq
  • Parte do princípio de que os pais conheçam os comandos básicos e mostrem a execução real; se não houver um ambiente UNIX, é possível usar o jslinux no navegador
  • Os jogadores montam cadeias de comandos de acordo com o objetivo da carta de tarefa, usando como exemplo pipelines como cat 03.txt | sort | uniq -c | sort -n | tail -1
  • Em cada rodada, o jogador mais novo escolhe se vence a cadeia mais curta ou a cadeia mais longa, e quem completar a tarefa primeiro ganha pontos
  • Os PDFs das cartas e o código estão disponíveis para imprimir e usar, e também há uma expansão mais difícil de Process Substitution

Objetivo do jogo de cartas e materiais necessários

  • UNIX Pipe Card Game é um jogo de cartas para ensinar crianças a combinar comandos UNIX com pipes
  • Os comandos usados no jogo básico são cat, grep, tail, head, wc, sort e uniq
  • Os pais devem mostrar a execução real dos comandos no computador, e, se não houver um sistema UNIX, é possível usar o jslinux no navegador
  • Os materiais para impressão e o código estão disponíveis publicamente
  • A expansão de versão mais difícil, UNIX Pipe Game - Process Substitution, aborda substituição de processo e paste, tr, cut, bc

Exemplo de rodada e cadeia de comandos

  • No exemplo de rodada, o objetivo é imprimir a linha mais frequente de um arquivo
    • Ler o arquivo com cat
    • Ordenar as linhas com sort
    • Contar linhas duplicadas com uniq -c
    • Aplicar ordenação numérica com sort -n
    • Exibir a última linha com tail -1
  • A cadeia de comandos de exemplo para resolver esse objetivo é a seguinte
    • cat 03.txt | sort | uniq -c | sort -n | tail -1
  • O fluxo básico da partida segue esta ordem
    • O jogador mais novo escolhe o formato da rodada
      • Ganha quem montar a menor cadeia de pipes que complete a tarefa
      • Ganha quem montar a maior cadeia de pipes que complete a tarefa
    • O jogador mais novo escolhe uma tarefa da carta de tarefa, e a mesma tarefa não pode ser escolhida duas vezes
    • As cartas são embaralhadas e colocadas viradas para baixo sobre a mesa
    • Cada jogador compra a carta do topo do baralho no sentido horário e tenta completar a tarefa
    • O primeiro jogador a completar a tarefa ganha pontos
    • Quando não houver mais tarefas, o jogo termina

Problemas exigidos pelas cartas de tarefa

  • Os exemplos de tarefa consistem em objetivos que podem ser resolvidos com combinações de comandos UNIX, como seleção de linhas, busca de strings, contagem e controle de saída
    • Exibir a segunda linha
    • Exibir a penúltima linha
    • Exibir a 7ª linha
    • Exibir a linha mais frequente
    • Exibir a linha menos frequente
    • Contar quantas linhas contêm "rises"
    • Exibir a primeira linha que contém W
    • Contar quantas linhas contêm "in"
    • Mostrar duas linhas aleatórias
    • Contar o número de palavras das duas últimas linhas
    • Exibir a 7ª e a 8ª linhas
    • Contar quantas linhas contêm !
    • Contar quantas linhas não contêm !
    • Criar uma cadeia de comandos que não exiba nada

2 comentários

 
GN⁺ 2024-07-25
Opiniões no Hacker News
  • Criei esses baralhos de cartas (https://punkx.org/) para ensinar minha filha, e até agora eles têm funcionado muito bem
    Em especial, os de pipes Unix, linguagem de máquina 4917 (https://punkx.org/4917/) e ponteiros (https://punkx.org/c-pointer-game/) foram bons; o baralho de Python eu uso só umas 10 cartas
    Talvez você também goste do jogo de tabuleiro sobre buffer overflow em assembly RISC-V https://punkx.org/overflow/, e, dependendo do nível da criança, também dá para jogar uma versão de cobras e escadas com goto: https://punkx.org/overflow/build/snakes-and-ladders.pdf
    Se você tem filhos, recomendo imprimir também https://punkx.org/panic/. Ele traz pegadinhas que cabem em uma carta de pôquer, como pressionar backspace ou espaço aleatoriamente a cada 30 segundos, ou pressionar W aleatoriamente se o Minecraft estiver aberto
    Estou doando muitos baralhos para professores e escolas; se tiver interesse, é só me mandar um e-mail
    PS: vou ficar em London por mais uma semana, então, se você pedir agora, o envio vai atrasar, mas em compensação vou colocar mais 1 ou 2 baralhos no pacote
    Além disso, o baralho de expansão de pipes Unix é todo sobre substituição de processos; não acho que seja útil para crianças, mas acho os quebra-cabeças bons

    • Para quem gosta de ler comentários antigos, há também o thread Show HN de alguns anos atrás: https://news.ycombinator.com/item?id=33222687
    • Muito legal
      Uma coisa que me chamou a atenção é que o jogo tem tarefas como “imprimir a segunda linha” e “imprimir a sétima linha”, mas ambas as linhas estão vazias. Então, estritamente falando, um grep que não casa com nada também poderia ser uma resposta correta
    • Como comprador anterior, gostaria de pedir que você também fizesse um baralho de vieses cognitivos baseado em https://www.designhacks.co/products/cognitive-bias-codex-pos...
    • Vou encomendar alguns hoje à noite depois de terminar o retrabalho
      Fiquei curioso: queria saber como você lida com a impressão. Você mesmo produz, usa impressão sob demanda ou faz pedidos em volume e envia por conta própria? Sempre acho interessante ver como alguém opera a venda de produtos físicos em pequena escala
    • Alguns meses atrás, encomendei um de cada baralho à venda
      Minhas filhas ainda são novas demais para usá-los, mas acho os baralhos excelentes e estou ansioso pelo dia em que vou tirá-los da gaveta, daqui a uns 8 anos
  • Fico me perguntando se as crianças de hoje conseguem realmente entender esse tipo de coisa
    Não tenho filhos e não convivo com crianças, então espero que entendam como uma pergunta sincera

    • Acho que depende muito da criança e dos pais. Ensino minha filha desde que ela tinha 10 anos e tento fazer alguma coisa com ela todos os dias. Dá para ver o progresso aqui: https://github.com/jackdoe/programming-for-kids/blob/master/...
      A parte difícil é ter que competir com Snapchat e Google/Meta pela atenção dela. A escola também a deixa bastante cansada, e os streaks do Snapchat são realmente irritantes. Quanto mais amigos ela tem, mais streaks precisa manter; chega a precisar enviar umas 400 mensagens por dia, sem fim
      Ensinei a ela que 100.000 desenvolvedores, psicólogos, gerentes de produto etc. vão trabalhar todos os dias pensando em como extrair o máximo de valor da atenção dela. Por isso, ela precisa estar sempre consciente do que o “algoritmo” a leva a fazer
      Ela entendeu pipes Unix bem rápido, mas não os usa com frequência. Ainda assim, captou a ideia de que um programa lê a saída de outro, e entender a linha de comando também não foi tão difícil
      Usei vários truques, porém. Por exemplo, no PC Windows dela, troquei o shell de explorer para cmd.exe, para que ao inicializar aparecesse direto o prompt de comando, e deixei que ela explorasse e consertasse por conta própria. Também criei uma caça ao tesouro no sistema de arquivos, usando dir, cd etc. para encontrar arquivos, e no jogo Bandit de https://overthewire.org/wargames/bandit/ eu a recompensava com Robux a cada nível concluído
      Quero ensinar como os computadores funcionam e como fazer o computador executar o que você quer. O que é um registrador, o que é uma instrução, o que é um programa e um processo — em outras palavras, o básico do básico
      No processo, também ensino como dividir problemas, como pensar e, acima de tudo, como aprender. Tento ensinar a essência das coisas, para que não haja mistério entre o ato de apertar uma tecla e uma letra aparecer na tela, ou a forma como o ChatGPT prevê a próxima palavra. Agora estou fazendo um jogo de tabuleiro de rede neural recorrente com 3 neurônios, um jogo para ensiná-la a contar: https://punkx.org/move-37/rnn.pdf
      No fim das contas, não sei se importa tanto assim o que você ensina a uma criança
    • Não sei quanto às crianças, mas já vi universitários que literalmente não sabiam usar um dispositivo de computação que não fosse iOS
      Em uma aula, colegas tiveram que começar explicando conceitos como arquivos e pastas
      Sinceramente, não acho isso tão ruim. Acho que computadores vão seguir um caminho parecido com o dos carros. A maioria das pessoas vai saber só o mínimo necessário para operar a coisa, e o conhecimento mais profundo ficará para entusiastas e especialistas
      Então, mesmo que o interior dos computadores fique mais complexo, o modo comum de uso deve se tornar cada vez mais reduzido
  • Para jogar, definitivamente vou precisar corrigir o processamento de pipes em https://exaequos.com

  • Se você jogar o jogo do menor número de pipes com alguém que cresceu usando awk, perl etc., a dificuldade sobe na hora

    • Isso acontece porque o método de pontuação conta o número de pipes. Talvez fosse melhor contar o número de caracteres
      Ou então dá para jogar no espírito do jogo, aprendendo cada ferramenta para o propósito original dela
      Para processamentos rápidos e pontuais, usa-se muito awk/sed, geralmente com um modelo mental parecido. Algo como criar um fluxo de entrada, transformar os dados em registros com sed, processar os registros com awk e depois refinar a saída com sort/uniq
      Em muitos casos, sed e awk podem substituir um ao outro, mas fazer isso torna mais demorado visualizar a solução na cabeça e mais difícil reutilizá-la
  • Nas regras diz que o jogador que concluir a tarefa primeiro vence a rodada, mas fico curioso para saber como funciona o formato de cadeia de pipes mais longa

    • Nós jogamos até as cartas acabarem
  • Acho que o pessoal que dá prêmio de uuoc já já aparece
    Colocar cat na frente simplifica acrescentar algo no início do pipeline

  • Adoro o fato de poder imprimir por conta própria
    Estou pensando se imprimo agora mesmo na impressora do escritório

  • O bom desse jogo é que quem conhece UUoC ganha
    cat file.txt | tr a-z A-Z | sort é perdedor, e tr < file.txt a-z A-Z | sort é vencedor

  • O frete para o Canada ser US$ 19 parece meio exagerado
    Fico curioso se há alguém na região de Greater Vancouver querendo fazer um pedido em grupo

    • Desculpa :( Uso PostNL, mas na verdade custa mais caro, e na maioria dos envios para fora da UE eu fico no prejuízo
      Mesmo assim, cada baralho tem um PDF, então dá para imprimir por conta própria em uma gráfica local. Se não imprimir a caixa, deve sair mais barato
      Imprimir em papel A4 e recortar com tesoura também não é um grande problema. Na verdade, às vezes até ajuda ao explicar para alguém com caneta e papel
      Nesse caso, a caixa é https://punkx.org/unix-pipe-game/unix-pipe-box.pdf e as cartas são https://punkx.org/unix-pipe-game/unix-pipe-cards.pdf
    • É uma ideia bem curiosa pegar um ativo totalmente digital, imprimi-lo em papel na Europe e depois colocá-lo em um navio para enviá-lo lentamente até o Canada
    • 12 euros por correspondência intercontinental rastreável é um preço bastante padrão
    • Está claro também que, se quiser, você pode imprimir por conta própria, e que a esse preço, incluindo envio a partir da Europe, quase não sobra margem
 
unsure4000 2024-07-25

Está por 8.000₩. Se alguém tiver uma cópia, por favor compartilhe suas impressões.