Login

Lost your password?
Don't have an account? Sign Up

Do Nothing Machine

Do Nothing Machine

Do Nothing Machine

Versão Software de uma "Do Nothing Machine"

Esta é a minha versão digital de uma “Do Nothing Machine”, em software.

A IDEIA

Criar o equivalente a uma “Do Nothing Machine” em software.

A TEORIA

A “Do Nothing Machine” cumpre fielmente o que promete no nome: é uma máquina cujo único propósito é a ausência total de propósito. Realiza uma ação totalmente desprovida de qualquer utilidade prática.

A PRÁTICA

Se o mundo já está repleto de “Do Nothing Machines” em hardware, por que não transcender este conceito para software? Seguem exemplos de código de “Do Nothing Machines”.

EXEMPLO 1

Do Nothing Machine!

O interruptor é acionado pelo utilizador e retorna ao estado desligado após uma pausa aleatória entre 0 e 1100 milissegundos.

O CÓDIGO

<!DOCTYPE html>
<html>
<head>
    <title>Do Nothing Machine!</title>
    <style>
        /* Centraliza o conteúdo e define margem superior */
        .exemplo1 { text-align: center; margin-top: 50px; }

        /* Configura o layout do interruptor */
        .interruptor { width: 60px; height: 34px; display: inline-flex; position: relative; }

        /* Esconde a checkbox nativa */
        .interruptor input { display: none; }

        /* Define o estilo do interruptor */
        .slider { position: absolute; width: 100%; height: 100%; background: #ccc; border-radius: 34px; cursor: pointer; }

        /* Estilo da bolinha do interruptor, com transição suave */
        .slider:before { content: ""; position: absolute; height: 26px; width: 26px; left: 4px; bottom: 4px; background: branco; border-radius: 50%; transition: .4s; }

        /* Altera o estado visual do interruptor quando ativado */
        input:checked + .slider { background: #2196F3; }

        /* Anima a posição da bolinha ao ativar */
        input:checked + .slider:before { transform: translateX(26px); }
    </style>
</head>
<body>
    <div class="exemplo1">
        <h1>Do Nothing Machine!</h1>
        <!-- Interruptor com temporizador para redefinir o estado -->
        <label class="interruptor">
            <input type="checkbox" onclick="setTimeout(() => this.checked = 0, Math.random() * 1e3 + 100)">
            <span class="slider"></span>
        </label>
    </div>
</body>
</html>

EXEMPLO 2

Do Nothing Machine!

O interruptor é acionado pelo utilizador, fazendo com que um “braço mecânico/martelo” apareça, simulando um toque na bola do interruptor para esta retornar ao estado desligado.
Executa este procedimento com uma pausa aleatória entre 0 e 800 milissegundos.

O CÓDIGO

<!DOCTYPE html>
<html>
<head>
    <title>Do Nothing Machine!</title>
    <style>
        /* Centraliza o conteúdo e define margem superior */
        .exemplo2 { text-align: center; margin-top: 50px; }

        /* container para o interruptor e braço */
        .container { display: inline-block; position: relative; }

        /* Estilo do interruptor */
        .switch { 
            width: 60px; height: 34px; 
            display: inline-flex; align-items: center; justify-content: center; 
            position: relative; top: 60px; 
        }

        /* Esconde a checkbox */
        .switch input { display: none; }

        /* Estilo do deslizador do interruptor */
        .slider { 
            position: absolute; width: 100%; height: 100%; 
            background: #ccc; border-radius: 34px; 
            cursor: pointer; transition: .4s; 
        }

        /* Estilo da bolinha do interruptor */
        .slider:before { 
            content: ""; position: absolute; height: 26px; width: 26px; 
            left: 4px; bottom: 4px; background: branco; 
            border-radius: 50%; transition: .4s; 
        }

        /* Estilo quando o interruptor é activado */
        input:checked + .slider { background: #2196F3; }
        input:checked + .slider:before { transform: translateX(26px); }

        /* Estilo do braço mecânico */
        .arm { 
            position: absolute; top: 50%; left: calc(50% + 40px); 
            width: 12px; height: 50px; background: #333; 
            border-radius: 12px; opacity: 0; transition: opacity 0.3s; 
            transform-origin: top center; 
        }

        /* Estilo das extremidades do braço */
        .arm:before, .arm:after { 
            content: ""; position: absolute; background: #333; 
        }
        .arm:before { top: -15px; left: 50%; width: 18px; height: 18px; border-radius: 50%; transform: translateX(-50%); }
        .arm:after { bottom: -10px; left: 50%; width: 30px; height: 10px; border-radius: 0 0 5px 5px; transform: translateX(-50%); }

        /* Animação do movimento do braço */
        @keyframes moveArm { 
            0% { transform: rotate(0deg); } 
            100% { transform: rotate(-45deg); } 
        }
    </style>
</head>
<body>
    <div class="exemplo2">
        <h1>Do Nothing Machine!</h1>
        <div class="container">
            <label class="switch">
                <!-- Checkbox oculto que ativa a função do interruptor -->
                <input type="checkbox" id="switch" onclick="gerirInterruptor()">
                <span class="slider"></span>
            </label>
            <!-- Braço mecânico que simula a ação da máquina -->
            <div class="arm" id="arm"></div>
        </div>
        <script>
            function gerirInterruptor() {
                const elementoSwitch = document.getElementById('switch');
                const elementoBraço = document.getElementById('arm');
                if (elementoSwitch.checked) {
                    // Atraso para corresponder à transição do deslizador
                    setTimeout(() => {
                        elementoBraço.style.opacity = '1';
                        elementoBraço.style.animation = 'moveArm 0.5s forwards';
                        // Atraso aleatório antes de redefinir o estado
                        setTimeout(() => {
                            elementoSwitch.checked = false;
                            elementoBraço.style.opacity = '0';
                            elementoBraço.style.animation = 'none';
                        }, Math.random() * 600 + 200); // Atraso aleatório entre 200 e 800ms
                    }, 400); // Atraso inicial
                }
            }
        </script>
    </div>
</body>
</html>

FICHA TÉCNICA

JavaScript 50%
CSS 30%
HTML 20%

AVISO LEGAL

A informação fornecida nesta página é puramente para utilização lúdica e não deverá ser utilizada em contextos profissionais. Foram tomados todos os cuidados para assegurar que os conteúdos disponibilizados são rigorosos e atualizados, no entanto, o autor desta página não se responsabiliza por quaisquer erros ou omissões. O autor da página poderá alterar ou retirar a informação a qualquer momento e sem aviso prévio. Todo o conteúdo é disponibilizado sem qualquer garantia.

https://nunoines.pt