Executando verificação de segurança...
5

Muito além dos boletos: Eu me divirto com PHP.

Uma aura de vergonha paira no ar quando alguém fala que programa em PHP. Alguém sempre solta um comentário como "Eu já paguei muito boleto com PHP". Meu amigo Matheus, manda sempre "O PHP me deu a minha moto". É Como se a linguagem de programação presente em mais de 70% dos websites do globo precisasse de algum endosso ou como se o programador não fosse talentoso e precisasse sacar a carta do "PHP dá dinheiro".

Eu sempre me pergunto se por ventura eu sou o último mortal que ainda se diverte programando em PHP.

Por ser uma linguagem muito fácil, sempre que eu quero testar uma ideia, vou direto pro PHP, simplesmente porque do zero à ter algo funcionando, não preciso fazer muita coisa. Acho que provavelmente este é o mesmo motivo que as pessoas usam Python.

Quando montei minha palestra para o DevPira, "Muito além dos boletos: PHP para quem quer gostar do que faz", trabalhei o conceito de 3 pilares: Propósito, Diversão e Recompensa, que chamei - na brincadeira - de "Framework Além dos Boletos".

Me divertindo com PHP

Pra ilustrar como eu me divirto com PHP, decidi implementar um Machine Learning BEM RUDIMENTAR com base em um vídeo do Matt Parker - top 3 na minha lista de youtubers favoritos - sobre o MANACE, um ML usando caixas de fósforo para jogar jogo da velha.

O conceito é bem simples: Cada caixinha guarda um estado possível e para cada estado existe um número de jogadas válidas. Cada jogada recebe uma quantidade de pedrinhas. Cada movimento da partida é registrado, e ao final do jogo, caso o jogador tenha ganho, as jogadas da partida são recompensadas adicionando mais pedrinhas ao movimento vencedor. Ou punidas removendo-se pedrinhas do movimento perdedor.

O Jogo.

Só eu ganho é um jogo de brincadeira onde, apesar das regras simples, quem sabe jogar tem uma vantagem absurda sobre quem não sabe.

O jogo começa com 3 linhas: uma com 3, outra com 4 e outra com 5 peças (sachês de condimentos, palitos de fósforo, bolinhas de papel, etc).

   x x x
  x x x x
 x x x x x

Você só pode retirar peças de uma única linha por vêz. Quantas peças quiser, desde que seja de uma única linha.

Ganha quem deixar somente uma peça no tabuleiro.

screenshot

A implementação

Criei a interface que pude pensar mais rapidamente - sou programador backend e não programo ainda em nenhum framework JS moderno.

Confesso que do lado do PHP fiz tudo muito rapido também (acho que não foram 4 horas no total, entre a ideia e a implementação que foi apresentada na palestra. Então tem muita coisa bem estranha por lá, mas tentei mantes o código mais limpo possível. Refatorou? Manda um PR =)

Base do jogo

A classe base do jogo SoEuGanho (lib/SoEuGanho/SoEuGanho.php) contem um único método relevante: getPossibleMoves(array $board), onde board é um array com o número de pedras em cada linnha. Ex: [3,4,5].

O aprendizado

Quem aprende mesmo é o ComputerPlayer (lib/SoEuGanho/ComputerPlayer.php).

O computador escolhe a jogada e salva o histórico (estado do board e jogada escolhida).

    public function play(array $board): array
    {
        $move = $this->learnedPlay($board); // Random play considering weight   
        $this->addHistory($board, $move); // The game history
        return $move;
    }

Ao final do jogo o computador aprende e limpa o histórico.

public function end(int $winnerPlayerNumber): void
{
    $win = $winnerPlayerNumber === $this->playerNumber;
    **$this->learn(win: $win);**
    $this->saveResult($win); // Stats
    $this->clearHistory();
}

O aprendizado varre todas as jogadas da partida e incrementa ou decrementa o rating de acordo com os pontos definidos nas constantes.

public function learn(bool $win): void
{

    $history = $this->getHistory() ?? [];
    $rating = $win ? self::REWARD_POINTS : self::PENALTY_POINTS;

    foreach($history as $move) {
        $this->updateMoveRating($move['board'], $move['move'], $rating);
    }

    $this->saveResult($win);
}

Mais sobre tudo isso

Código-fonte: https://github.com/andreimosman/SoEuGanho/
Vídeo de Inspiração: MENACE: the pile of matchboxes which can learn

Embora tenha feito um treinador para facilitar os testes e acelerar o aprendizado, estou treinando o game só com humanos em https://soeuganho.com.br . Se alguém gerar um gráfico do aprendizado, crie um pool request, por favor. =)

Se alguém puder, jogue um pouco no meu site pro maquinão aprender.

Um pouco da minha história.

Programo desde os 14 anos. Comecei com DBase III Plus e depois Clipper. A primeira vez que alguém acreditou que eu era um programador e me contratou foi neste mesmo longíncuo 1994 (Sou de 80).

Instalei meu primeiro linux em algum momento entre o final de 1996 e o começo de 1997: Slackware. Comecei a programar em Perl e em 1999 comecei a programar no saudoso PHP3.

Assim, segui programando e me divertindo. Em várias linguagens, vários experimentos, mas sempre me divertindo.

LinkedIn
GitHub

Ah, tb sou voluntário na WebForest.

Carregando publicação patrocinada...
2

Muito top!

Aprendi PHP em 2008 e até hoje não consegui deixá-lo, simplesmente porque consigo resolver tudo que preciso.
Ainda não teve nada que me gerasse a necessidade de migrar para outra linguagem.

E comigo o PHP vai muito além de boletos e diversão...
A liberdade que tenho hoje é por conta da renda que tenho com o meu software (saas) feito em PHP + MYSQL, e que é minha renda principal.

Sou PHP Lovers total kkkk

1
2

É um sistema de pedidos online para delivery de comida.
No começo, realmente só dominava PHP e MYSQL para o back, no front utilizei o VueJS e dei os primeiros passos em uma hospedagem compartilhada.

bem básico...

já relatei um pouco da minha experiência neste meio, aqui no Tabnews, inclusive enfatizando que mesmo não preenchendo requisitos de vagas de emprego, sabia o suficiente para seguir solo, do eu e o PHP 😅:


v001 - Renda Mensal Recorrente com Software

v002 - Renda Mensal Recorrente com Software - Iniciando do zero aos primeiros R$2000 mensal

v003 - Renda Mensal Recorrente com Software - O que realmente precisei no começo, o que ajudou e o que não fez falta

2

Show de bola. Massa demais. +rep :)

Melhor abordagem: Se tem uma ideia, execute uma ideia :)

As habilidades você refina no processo.

Já li o primeiro. Inspirador. =)

1

É sobre isso...

E com nosso queridinho PHP, todas estas fases do processo são viáveis.

hoje não deixo de usar porque é o que mais domino e ainda não teve algo que eu não consegui resolver.

e ainda que um dia apareça, ainda tenho possibilidade de resolver com um micro serviço, na linguaguem necessária e sigo com o PHP em diante.

1

Acho que voce resumiu tudo. Eu sempre digo que transformei um hobby em profissão. Tambem programei no Dbase e no Clipper. Quando eu descobri que o PHP tinha apenas 2 diferenças com o Clipper ( ponto e virgula no final da linha e "$" no começo do nome da variavel, foi amor à primeira vista.

2

Eu acabei chegando no PHP depois do Perl e passei pelo ASP brevemente antes, então não cheguei a fazer essa associação do PHP com Clipper. Que legal, brother.

Quando fui pro Perl, achei inicialmente tudo muito diferente, pq quando olhei os primeiros códigos de terceiros vi coisas como $a =~s/(\s)([A-Za-z0-9])+/\2/g; e precisei dar uma estudada :)

Quando encontrei o PHP, achei que era um misto de Perl com ASP. Me pareceu super fácil :)

Só achei estranho não ter um operador pra expressões regulares, pq eu estava BEM acostumado com isso já.

0

Obrigado por compartilhar sua experiência com PHP e Machine Learning! É interessante ver como você usou PHP para criar algo divertido e ainda se inspirou em um vídeo sobre o MANACE. Fico feliz em saber que você se diverte programando em PHP e que a linguagem é fácil de usar para testar suas ideias. Continuarei acompanhando suas postagens e espero ver mais sobre suas experiências com PHP e Machine Learning no futuro!

Este comentário foi gerado por uma inteligência artificial. Para saber mais, leia esta publicação.