Skip to content

Instantly share code, notes, and snippets.

View rg3915's full-sized avatar
🏠
Working from home

Regis Santos rg3915

🏠
Working from home
View GitHub Profile
@rg3915
rg3915 / index.html
Created November 8, 2024 22:18
Form Wizard + AlpineJS + State Machine
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="https://picocss.com/favicon.svg" type="image/svg+xml">
<title>Form Wizard - Máquina de Estado</title>
@rg3915
rg3915 / README.md
Created November 7, 2024 02:02
template method x state machine - Claude

Vou explicar os dois padrões de design e suas principais diferenças.

O Template Method é um padrão de design comportamental que define o esqueleto de um algoritmo em uma classe base, mas permite que subclasses sobrescrevam etapas específicas sem alterar a estrutura geral. Veja um exemplo:

from abc import ABC, abstractmethod

class Bebida(ABC):
@rg3915
rg3915 / README.md
Created November 7, 2024 02:00
template method x state machine - chatGPT

O Template Method é um padrão de projeto comportamental que define o esqueleto de um algoritmo em um método de uma classe base, permitindo que as subclasses substituam etapas específicas do algoritmo sem alterar a estrutura geral. Em outras palavras, o Template Method fornece uma forma de definir o fluxo de execução de um processo, enquanto delega a implementação de detalhes específicos para as subclasses.

Exemplo de Template Method em Python

Imagine que você tenha um sistema para processar diferentes tipos de documentos, e cada documento pode ter etapas específicas de processamento, mas o fluxo geral é o mesmo:

from abc import ABC, abstractmethod

class ProcessadorDocumento(ABC):
    def processar(self):
@rg3915
rg3915 / README.md
Created October 27, 2024 04:14
Design Patterns in Python

Além do State (Máquina de Estado), existem vários outros design patterns conhecidos. Aqui estão alguns dos mais populares, com uma breve explicação e exemplos em Python:

1. Singleton

Garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. Ideal para objetos que precisam ser únicos, como uma conexão de banco de dados.

Exemplo em Python:

class Singleton:
    _instance = None
@rg3915
rg3915 / README.md
Last active November 7, 2024 01:47
state machine

Uma máquina de estados é um modelo de design que organiza a lógica de um sistema em "estados" finitos, onde o sistema pode estar em apenas um estado por vez. Cada estado define o comportamento do sistema e permite transições para outros estados, geralmente com condições específicas. As máquinas de estado são usadas para representar fluxos e interações previsíveis, como etapas de um formulário, navegação em uma interface ou processos de login.

Exemplo com AlpineJS

Vamos criar um exemplo em que uma página exibe seções diferentes (<section>) com base em um estado. Vamos supor que temos três seções: Home, Sobre e Contato, e usaremos AlpineJS para controlar a exibição de cada seção com uma máquina de estado simples.

Estrutura HTML + AlpineJS

<div x-data="{ estado: 'home' }">
@rg3915
rg3915 / README.md
Last active October 13, 2024 06:14
SvelteKit + Landpage in PicoCSS + others pages in TailwindCSS

SvelteKit + Landpage in PicoCSS + others pages in TailwindCSS

Create

npm create svelte@latest landpage -y
cd landpage
@rg3915
rg3915 / README.md
Last active October 2, 2024 05:41
Svelte + PicoCSS + Photo Gallery + table
@rg3915
rg3915 / index.html
Created September 16, 2024 06:47 — forked from aaizemberg/index.html
xkcd font
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>xkcd font</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/webfont/1.6.28/webfontloader.js"></script>
<style>
@font-face {
font-family: xkcd;
@rg3915
rg3915 / index.html
Last active September 13, 2024 14:59
Pagination PicoCSS dark mode
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<link rel="shortcut icon" href="https://www.djangoproject.com/favicon.ico">
<title>Pagination | PicoCSS</title>
<!-- PicoCSS -->
@rg3915
rg3915 / keymap.json
Created July 13, 2024 08:15
Zed Editor keymap
[
{
"context": "Editor",
"bindings": {
"ctrl-shift-enter": "editor::NewlineAbove",
"ctrl-enter": "editor::NewlineBelow"
}
}
]