Mostrando entradas con la etiqueta CONSOLA RASPBERRY PI. Mostrar todas las entradas
Mostrando entradas con la etiqueta CONSOLA RASPBERRY PI. Mostrar todas las entradas

lunes, 15 de diciembre de 2025

CONSOLA RASPBERRY PI INTERACTIVA - PARA ENTRADAS DE BLOG

 

π RASPBERRY PI INTERACTIVE CONSOLE
● ONLINE
help
Consola Raspberry Pi Interactive v2.0
Escribe cualquier comando y te explicaré su uso.
Ejemplos: ls -la, sudo apt update, gpio readall
pi@raspberrypi:~$
Comandos populares (haz clic para probar):
💡 AYUDA DEL COMANDO
Selecciona un comando para ver su explicación detallada.
Comandos ejecutados: 1 

AAA

 # Consola Raspberry Pi Interactiva para Entradas de Blog

```html
<!-- 
  ==============================================
  CONSOLA RASPBERRY PI INTERACTIVA - PARA ENTRADAS DE BLOG
  Versión: 2.0 | Consola de aprendizaje interactivo
  Sistema: Raspberry Pi OS | Estética original Raspberry Pi
  ==============================================
-->
<style>
/* ------------------------------------------------------------------- */
/* CONSOLA INTERACTIVA RASPBERRY PI - ESTILO BLOG */
/* ------------------------------------------------------------------- */
.raspberry-console-blog {
    font-family: 'Courier New', 'Consolas', 'Monaco', monospace;
    max-width: 800px;
    margin: 30px auto;
    background: #000000;
    border: 3px solid #C51D4E;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 10px 30px rgba(197, 29, 78, 0.2);
    position: relative;
}

/* Cabecera de la consola */
.console-header {
    background: linear-gradient(90deg, #2d2d2d 0%, #1a1a1a 100%);
    padding: 15px 20px;
    border-bottom: 2px solid #C51D4E;
    display: flex;
    align-items: center;
    justify-content: space-between;
    color: #ffffff;
}

.console-title {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 16px;
    font-weight: bold;
}

.raspberry-icon {
    color: #C51D4E;
    font-size: 20px;
    animation: pulse 2s infinite;
}

.console-status {
    font-size: 12px;
    color: #00FF00;
    background: rgba(0, 255, 0, 0.1);
    padding: 4px 10px;
    border-radius: 12px;
    border: 1px solid #00FF00;
}

/* Área de terminal */
.terminal-area {
    background: #000000;
    padding: 20px;
    min-height: 400px;
    position: relative;
}

/* Prompt y área de comandos */
.command-prompt {
    color: #00FF00;
    margin-bottom: 15px;
    font-size: 14px;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
}

.prompt-text {
    margin-right: 10px;
    white-space: nowrap;
}

.command-input {
    background: transparent;
    border: none;
    color: #00FF00;
    font-family: 'Courier New', monospace;
    font-size: 14px;
    flex: 1;
    min-width: 200px;
    outline: none;
    caret-color: #00FF00;
}

.cursor {
    display: inline-block;
    width: 8px;
    height: 16px;
    background-color: #00FF00;
    margin-left: 2px;
    animation: blink 1s infinite;
    vertical-align: middle;
}

/* Historial de comandos */
.command-history {
    margin-bottom: 20px;
    max-height: 300px;
    overflow-y: auto;
}

.command-entry {
    margin-bottom: 10px;
    padding: 10px;
    border-radius: 4px;
    background: rgba(30, 30, 30, 0.8);
    border-left: 3px solid #C51D4E;
    animation: fadeIn 0.3s ease;
}

.command-executed {
    color: #00FF00;
    font-weight: bold;
    margin-bottom: 5px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.command-executed::before {
    content: "π";
    color: #C51D4E;
    font-weight: bold;
}

.command-output {
    color: #CCCCCC;
    font-size: 13px;
    line-height: 1.4;
    padding-left: 20px;
}

.command-output code {
    background: rgba(0, 255, 0, 0.1);
    padding: 2px 6px;
    border-radius: 3px;
    color: #00FF00;
    font-family: 'Courier New', monospace;
}

/* Panel de ayuda lateral */
.help-panel {
    background: rgba(30, 30, 40, 0.95);
    border-left: 2px solid #C51D4E;
    padding: 15px;
    font-size: 13px;
    color: #CCCCCC;
    display: none;
    animation: slideIn 0.3s ease;
}

.help-panel.active {
    display: block;
}

.help-title {
    color: #C51D4E;
    font-size: 14px;
    font-weight: bold;
    margin-bottom: 10px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.help-content {
    line-height: 1.5;
}

/* Botones de control */
.console-controls {
    background: rgba(30, 30, 30, 0.9);
    padding: 10px 20px;
    border-top: 1px solid #333333;
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
}

.control-btn {
    background: rgba(197, 29, 78, 0.3);
    border: 1px solid #C51D4E;
    color: #ffffff;
    padding: 8px 15px;
    border-radius: 4px;
    font-family: 'Courier New', monospace;
    font-size: 12px;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    gap: 5px;
}

.control-btn:hover {
    background: rgba(197, 29, 78, 0.5);
    transform: translateY(-2px);
}

.control-btn:active {
    transform: translateY(0);
}

/* Lista de comandos disponibles */
.commands-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    gap: 10px;
    margin-top: 10px;
    max-height: 150px;
    overflow-y: auto;
    padding: 10px;
    background: rgba(0, 0, 0, 0.5);
    border-radius: 4px;
}

.command-suggestion {
    background: rgba(197, 29, 78, 0.1);
    padding: 8px;
    border-radius: 3px;
    font-size: 12px;
    color: #CCCCCC;
    cursor: pointer;
    transition: all 0.2s;
    border: 1px solid transparent;
}

.command-suggestion:hover {
    background: rgba(197, 29, 78, 0.2);
    border-color: #C51D4E;
    transform: translateX(3px);
}

/* Animaciones */
@keyframes blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0; }
}

@keyframes pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.7; }
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(5px); }
    to { opacity: 1; transform: translateY(0); }
}

@keyframes slideIn {
    from { opacity: 0; transform: translateX(10px); }
    to { opacity: 1; transform: translateX(0); }
}

/* Scrollbar personalizada */
.command-history::-webkit-scrollbar,
.commands-list::-webkit-scrollbar {
    width: 8px;
}

.command-history::-webkit-scrollbar-track,
.commands-list::-webkit-scrollbar-track {
    background: #1a1a1a;
}

.command-history::-webkit-scrollbar-thumb,
.commands-list::-webkit-scrollbar-thumb {
    background: #C51D4E;
    border-radius: 4px;
}

.command-history::-webkit-scrollbar-thumb:hover,
.commands-list::-webkit-scrollbar-thumb:hover {
    background: #e0245e;
}

/* Responsive para blog */
@media (max-width: 768px) {
    .raspberry-console-blog {
        margin: 20px 10px;
    }
    
    .console-header {
        flex-direction: column;
        gap: 10px;
        align-items: flex-start;
    }
    
    .commands-list {
        grid-template-columns: 1fr;
    }
    
    .command-input {
        min-width: 150px;
    }
}

/* Efectos especiales */
.typewriter {
    overflow: hidden;
    border-right: 2px solid #00FF00;
    white-space: nowrap;
    animation: typing 3.5s steps(40, end);
}

@keyframes typing {
    from { width: 0 }
    to { width: 100% }
}
</style>

<div class="raspberry-console-blog" id="raspberryConsole">
    <!-- Cabecera de la consola -->
    <div class="console-header">
        <div class="console-title">
            <span class="raspberry-icon">π</span>
            <span>RASPBERRY PI INTERACTIVE CONSOLE</span>
        </div>
        <div class="console-status" id="consoleStatus">● ONLINE</div>
    </div>
    
    <!-- Área principal -->
    <div style="display: flex; flex-wrap: wrap;">
        <!-- Terminal izquierda -->
        <div style="flex: 1; min-width: 300px;">
            <div class="terminal-area">
                <!-- Historial de comandos -->
                <div class="command-history" id="commandHistory">
                    <div class="command-entry">
                        <div class="command-executed">help</div>
                        <div class="command-output">
                            Consola Raspberry Pi Interactive v2.0<br>
                            Escribe cualquier comando y te explicaré su uso.<br>
                            Ejemplos: <code>ls -la</code>, <code>sudo apt update</code>, <code>gpio readall</code>
                        </div>
                    </div>
                </div>
                
                <!-- Prompt actual -->
                <div class="command-prompt">
                    <span class="prompt-text">pi@raspberrypi:~$</span>
                    <input type="text" 
                           class="command-input" 
                           id="commandInput"
                           placeholder="Escribe un comando..."
                           autocomplete="off"
                           autofocus>
                    <span class="cursor"></span>
                </div>
                
                <!-- Comandos sugeridos -->
                <div style="margin-top: 20px;">
                    <div style="color: #666; font-size: 12px; margin-bottom: 8px;">
                        Comandos populares (haz clic para probar):
                    </div>
                    <div class="commands-list" id="suggestedCommands">
                        <!-- Comandos se cargan por JavaScript -->
                    </div>
                </div>
            </div>
        </div>
        
        <!-- Panel de ayuda derecha -->
        <div class="help-panel" id="helpPanel" style="flex: 0 0 300px;">
            <div class="help-title">💡 AYUDA DEL COMANDO</div>
            <div class="help-content" id="helpContent">
                Selecciona un comando para ver su explicación detallada.
            </div>
        </div>
    </div>
    
    <!-- Controles -->
    <div class="console-controls">
        <button class="control-btn" onclick="executeCommand('help')">
            <span>?</span> AYUDA
        </button>
        <button class="control-btn" onclick="executeCommand('clear')">
            🗑️ LIMPIAR
        </button>
        <button class="control-btn" onclick="showExamples()">
            📚 EJEMPLOS
        </button>
        <button class="control-btn" onclick="copyHistory()">
            📋 COPIAR HISTORIAL
        </button>
        <div style="margin-left: auto; display: flex; align-items: center; gap: 10px;">
            <span style="color: #666; font-size: 11px;">Comandos ejecutados:</span>
            <span id="commandCount" style="color: #00FF00; font-weight: bold;">1</span>
        </div>
    </div>
</div>

<script>
/* ------------------------------------------------------------------- */
/* CONSOLA INTERACTIVA RASPBERRY PI */
/* ------------------------------------------------------------------- */

class InteractiveRaspberryConsole {
    constructor() {
        this.commandHistory = [];
        this.commandCount = 1;
        this.currentHelp = '';
        this.commandDatabase = this.createCommandDatabase();
        this.init();
    }
    
    init() {
        this.setupEventListeners();
        this.loadSuggestedCommands();
        this.updateCommandCount();
        
        // Efecto inicial
        setTimeout(() => {
            this.typeWelcomeMessage();
        }, 500);
    }
    
    createCommandDatabase() {
        return {
            // Comandos básicos del sistema
            'help': {
                syntax: 'help',
                description: 'Muestra esta ayuda y lista de comandos disponibles',
                explanation: 'El comando <code>help</code> muestra información sobre cómo usar la consola interactiva y lista los comandos más comunes de Raspberry Pi.',
                example: 'help → Muestra este mensaje de ayuda',
                category: 'sistema'
            },
            'clear': {
                syntax: 'clear',
                description: 'Limpia la pantalla de la consola',
                explanation: 'Borra todo el historial de comandos visible en la pantalla, pero mantiene el registro interno.',
                example: 'clear → Limpia la pantalla',
                category: 'sistema'
            },
            'ls': {
                syntax: 'ls [opciones] [directorio]',
                description: 'Lista archivos y directorios',
                explanation: 'Muestra el contenido del directorio actual o del especificado. Opciones comunes:<br>' +
                           '<code>-l</code>: Listado largo con detalles<br>' +
                           '<code>-a</code>: Muestra archivos ocultos<br>' +
                           '<code>-la</code>: Combinación de ambas',
                example: 'ls -la /home/pi → Lista todo con detalles',
                category: 'archivos'
            },
            'cd': {
                syntax: 'cd [directorio]',
                description: 'Cambia de directorio',
                explanation: 'Navega entre directorios. Usa <code>cd ..</code> para subir un nivel, <code>cd ~</code> para ir al home, o <code>cd /</code> para la raíz.',
                example: 'cd /home/pi/Documents → Entra en Documents',
                category: 'archivos'
            },
            'pwd': {
                syntax: 'pwd',
                description: 'Muestra el directorio actual',
                explanation: 'Print Working Directory - muestra la ruta completa del directorio en el que te encuentras.',
                example: 'pwd → /home/pi',
                category: 'archivos'
            },
            'mkdir': {
                syntax: 'mkdir [nombre]',
                description: 'Crea un nuevo directorio',
                explanation: 'Crea un directorio con el nombre especificado. Usa <code>mkdir -p ruta/completa</code> para crear directorios padres automáticamente.',
                example: 'mkdir proyecto_nuevo',
                category: 'archivos'
            },
            'rm': {
                syntax: 'rm [opciones] [archivo]',
                description: 'Elimina archivos o directorios',
                explanation: 'Elimina permanentemente. ¡Cuidado! Opciones:<br>' +
                           '<code>-r</code>: Elimina recursivamente (para directorios)<br>' +
                           '<code>-f</code>: Fuerza eliminación sin preguntar',
                example: 'rm -r directorio_viejo → Elimina directorio y contenido',
                category: 'archivos'
            },
            
            // Comandos de sistema Raspberry Pi
            'raspi-config': {
                syntax: 'sudo raspi-config',
                description: 'Menú de configuración de Raspberry Pi',
                explanation: 'Interfaz TUI (Text User Interface) para configurar tu Raspberry Pi:<br>' +
                           '• Cambiar contraseña<br>' +
                           '• Configurar WiFi<br>' +
                           '• Habilitar/deshabilitar interfaces<br>' +
                           '• Overclocking<br>' +
                           '• Expandir filesystem',
                example: 'sudo raspi-config → Abre el menú interactivo',
                category: 'raspberry'
            },
            'vcgencmd': {
                syntax: 'vcgencmd [comando]',
                description: 'Utilidad de diagnóstico del hardware',
                explanation: 'Comandos específicos de hardware Raspberry Pi:<br>' +
                           '<code>measure_temp</code>: Temperatura CPU<br>' +
                           '<code>measure_clock arm</code>: Frecuencia CPU<br>' +
                           '<code>measure_volts core</code>: Voltaje<br>' +
                           '<code>get_mem arm/gpu</code>: Memoria asignada',
                example: 'vcgencmd measure_temp → temp=45.6\'C',
                category: 'raspberry'
            },
            'gpio': {
                syntax: 'gpio [comando] [pin] [valor]',
                description: 'Control de pines GPIO (wiringPi)',
                explanation: 'Para usar GPIO necesitas instalar wiringPi. Comandos principales:<br>' +
                           '<code>readall</code>: Estado de todos los pines<br>' +
                           '<code>mode X out/in</code>: Configura pin como salida/entrada<br>' +
                           '<code>write X 1/0</code>: Escribe valor HIGH/LOW<br>' +
                           '<code>read X</code>: Lee valor actual',
                example: 'gpio mode 7 out && gpio write 7 1',
                category: 'raspberry'
            },
            'raspi-gpio': {
                syntax: 'raspi-gpio [comando]',
                description: 'Control nativo de GPIO',
                explanation: 'Utilidad nativa de Raspberry Pi OS (no requiere wiringPi):<br>' +
                           '<code>get X</code>: Información del pin<br>' +
                           '<code>set X op</code>: Configura como salida<br>' +
                           '<code>set X dh/dl</code>: HIGH/LOW<br>' +
                           '<code>set X ip pu/pd</code>: Entrada con pull-up/down',
                example: 'raspi-gpio set 7 op dh → Pin 7 como salida en HIGH',
                category: 'raspberry'
            },
            
            // Comandos de red
            'ifconfig': {
                syntax: 'ifconfig [interface]',
                description: 'Configuración de interfaces de red',
                explanation: 'Muestra o configura interfaces de red. En sistemas modernos, usa <code>ip addr</code>.<br>' +
                           'Interfaces comunes: <code>eth0</code> (Ethernet), <code>wlan0</code> (WiFi)<br>' +
                           'Muestra: IP, MAC, estado, estadísticas.',
                example: 'ifconfig wlan0 → Info de WiFi',
                category: 'red'
            },
            'ping': {
                syntax: 'ping [host]',
                description: 'Prueba conectividad de red',
                explanation: 'Envía paquetes ICMP a un host y mide el tiempo de respuesta.<br>' +
                           'Opciones: <code>-c N</code> (número de paquetes), <code>-i N</code> (intervalo)<br>' +
                           'Presiona <code>Ctrl+C</code> para detener.',
                example: 'ping google.com -c 4 → 4 paquetes a Google',
                category: 'red'
            },
            'ssh': {
                syntax: 'ssh [usuario]@[host]',
                description: 'Conexión remota segura',
                explanation: 'Establece conexión SSH a otro sistema. Requiere servicio SSH activo en el destino.<br>' +
                           'Opciones: <code>-p puerto</code> (puerto diferente al 22)<br>' +
                           '<code>-X</code> (habilita X11 forwarding)',
                example: 'ssh pi@192.168.1.100',
                category: 'red'
            },
            
            // Comandos APT
            'apt': {
                syntax: 'sudo apt [comando]',
                description: 'Gestor de paquetes Debian/Raspbian',
                explanation: 'Sistema de gestión de paquetes APT:<br>' +
                           '<code>update</code>: Actualiza lista de paquetes<br>' +
                           '<code>upgrade</code>: Actualiza paquetes instalados<br>' +
                           '<code>install paquete</code>: Instala paquete<br>' +
                           '<code>remove paquete</code>: Elimina paquete<br>' +
                           '<code>autoremove</code>: Limpia dependencias',
                example: 'sudo apt update && sudo apt upgrade',
                category: 'paquetes'
            },
            
            // Comandos de procesos
            'top': {
                syntax: 'top',
                description: 'Monitor de procesos en tiempo real',
                explanation: 'Muestra procesos activos, uso de CPU, memoria, etc.<br>' +
                           'Teclas dentro de top:<br>' +
                           '<code>q</code>: Salir<br>' +
                           '<code>k</code>: Matar proceso (pid)<br>' +
                           '<code>r</code>: Cambiar prioridad (nice)<br>' +
                           '<code>h</code>: Ayuda',
                example: 'top → Monitor interactivo',
                category: 'procesos'
            },
            'htop': {
                syntax: 'htop',
                description: 'Monitor de procesos mejorado',
                explanation: 'Versión mejorada de top (requiere instalación). Características:<br>' +
                           '• Interfaz a color<br>' +
                           '• Uso de teclas direccionales<br>' +
                           '• Procesos en árbol<br>' +
                           '• Búsqueda de procesos<br>' +
                           'Instalar: <code>sudo apt install htop</code>',
                example: 'sudo apt install htop && htop',
                category: 'procesos'
            },
            
            // Comandos Python
            'python3': {
                syntax: 'python3 [script.py]',
                description: 'Intérprete Python 3',
                explanation: 'Ejecuta scripts Python. Raspberry Pi usa Python 3 por defecto.<br>' +
                           'Opciones comunes:<br>' +
                           '<code>-c "código"</code>: Ejecuta código inline<br>' +
                           '<code>-m modulo</code>: Ejecuta módulo como script<br>' +
                           '<code>--version</code>: Muestra versión',
                example: 'python3 led_blink.py',
                category: 'python'
            },
            'pip3': {
                syntax: 'pip3 [comando]',
                description: 'Gestor de paquetes Python 3',
                explanation: 'Instala paquetes de Python desde PyPI:<br>' +
                           '<code>install paquete</code>: Instala paquete<br>' +
                           '<code>uninstall paquete</code>: Desinstala<br>' +
                           '<code>list</code>: Lista instalados<br>' +
                           '<code>freeze</code>: Genera requirements.txt',
                example: 'pip3 install RPi.GPIO',
                category: 'python'
            }
        };
    }
    
    setupEventListeners() {
        const input = document.getElementById('commandInput');
        
        // Enter para ejecutar
        input.addEventListener('keypress', (e) => {
            if (e.key === 'Enter') {
                this.executeCommand(input.value.trim());
                input.value = '';
            }
        });
        
        // Autocompletar con Tab
        input.addEventListener('keydown', (e) => {
            if (e.key === 'Tab') {
                e.preventDefault();
                this.autoComplete(input.value);
            }
        });
    }
    
    loadSuggestedCommands() {
        const suggestions = document.getElementById('suggestedCommands');
        const popularCommands = [
            'ls -la', 'pwd', 'sudo apt update', 'vcgencmd measure_temp',
            'gpio readall', 'ifconfig', 'ping google.com', 'python3 --version',
            'top', 'mkdir prueba', 'rm -r', 'ssh pi@localhost'
        ];
        
        suggestions.innerHTML = popularCommands.map(cmd => 
            `<div class="command-suggestion" onclick="consoleApp.executeCommand('${cmd}')">${cmd}</div>`
        ).join('');
    }
    
    executeCommand(command) {
        if (!command) return;
        
        this.commandCount++;
        this.updateCommandCount();
        
        // Añadir al historial
        this.commandHistory.push({
            command: command,
            timestamp: new Date(),
            output: this.processCommand(command)
        });
        
        this.updateCommandDisplay();
        this.scrollToBottom();
        
        // Mostrar ayuda si el comando existe
        if (this.commandDatabase[command.split(' ')[0]]) {
            this.showCommandHelp(command.split(' ')[0]);
        }
    }
    
    processCommand(command) {
        const cmd = command.split(' ')[0].toLowerCase();
        
        switch(cmd) {
            case 'help':
                return this.getHelpOutput();
            case 'clear':
                this.clearConsole();
                return 'Pantalla limpiada';
            case 'ls':
                return `Listando archivos...<br>
                       <code>drwxr-xr-x 2 pi pi 4096 Jan 1 00:00 Desktop/</code><br>
                       <code>drwxr-xr-x 2 pi pi 4096 Jan 1 00:00 Documents/</code><br>
                       <code>drwxr-xr-x 2 pi pi 4096 Jan 1 00:00 Downloads/</code><br>
                       <code>-rw-r--r-- 1 pi pi  123 Jan 1 00:00 ejemplo.txt</code>`;
            case 'pwd':
                return `/home/pi`;
            case 'sudo':
                if (command.includes('apt update')) {
                    return `Actualizando lista de paquetes...<br>
                           Hit:1 http://archive.raspberrypi.org/debian bullseye InRelease<br>
                           Hit:2 http://deb.debian.org/debian bullseye InRelease<br>
                           Leyendo lista de paquetes... Hecho`;
                }
                return `Ejecutando con privilegios de superusuario...`;
            default:
                if (this.commandDatabase[cmd]) {
                    return `Comando <code>${command}</code> reconocido. Revisa el panel de ayuda para detalles.`;
                }
                return `Comando <code>${command}</code> no encontrado. Escribe <code>help</code> para ver comandos disponibles.`;
        }
    }
    
    getHelpOutput() {
        let output = 'COMANDOS DISPONIBLES:<br><br>';
        const categories = {};
        
        // Organizar por categoría
        for (const [cmd, info] of Object.entries(this.commandDatabase)) {
            if (!categories[info.category]) {
                categories[info.category] = [];
            }
            categories[info.category].push({cmd, info});
        }
        
        // Mostrar por categoría
        for (const [category, commands] of Object.entries(categories)) {
            output += `<strong style="color: #C51D4E;">${category.toUpperCase()}:</strong><br>`;
            commands.forEach(({cmd, info}) => {
                output += `  <code>${cmd}</code> - ${info.description}<br>`;
            });
            output += '<br>';
        }
        
        output += '<br>Escribe cualquier comando seguido de <code>--help</code> o selecciona uno de la lista para ver detalles.';
        return output;
    }
    
    showCommandHelp(command) {
        const helpPanel = document.getElementById('helpPanel');
        const helpContent = document.getElementById('helpContent');
        
        const cmdInfo = this.commandDatabase[command];
        if (cmdInfo) {
            helpPanel.classList.add('active');
            helpContent.innerHTML = `
                <div style="margin-bottom: 15px;">
                    <div style="color: #00FF00; font-family: 'Courier New'; font-size: 14px;">
                        ${cmdInfo.syntax}
                    </div>
                    <div style="color: #CCCCCC; margin-top: 5px;">
                        ${cmdInfo.description}
                    </div>
                </div>
                
                <div style="margin-bottom: 15px;">
                    <strong style="color: #C51D4E;">📖 Explicación:</strong><br>
                    <div style="margin-top: 5px;">
                        ${cmdInfo.explanation}
                    </div>
                </div>
                
                <div style="margin-bottom: 10px;">
                    <strong style="color: #C51D4E;">📝 Ejemplo:</strong><br>
                    <code style="display: inline-block; margin-top: 5px; background: rgba(0,0,0,0.5); padding: 5px 10px; border-radius: 3px;">
                        ${cmdInfo.example}
                    </code>
                </div>
                
                <div style="font-size: 11px; color: #666; margin-top: 15px; border-top: 1px solid #333; padding-top: 10px;">
                    Categoría: <span style="color: #C51D4E;">${cmdInfo.category}</span> | 
                    <span onclick="consoleApp.copyToClipboard('${cmdInfo.syntax.split('[')[0]}')" 
                          style="cursor: pointer; color: #00FF00;">
                          📋 Copiar comando
                    </span>
                </div>
            `;
        }
    }
    
    clearConsole() {
        document.getElementById('commandHistory').innerHTML = '';
        this.commandCount = 0;
        this.updateCommandCount();
    }
    
    updateCommandDisplay() {
        const historyDiv = document.getElementById('commandHistory');
        const lastCommand = this.commandHistory[this.commandHistory.length - 1];
        
        const entry = document.createElement('div');
        entry.className = 'command-entry';
        entry.innerHTML = `
            <div class="command-executed">${lastCommand.command}</div>
            <div class="command-output">${lastCommand.output}</div>
        `;
        
        historyDiv.appendChild(entry);
    }
    
    updateCommandCount() {
        document.getElementById('commandCount').textContent = this.commandCount;
    }
    
    scrollToBottom() {
        const historyDiv = document.getElementById('commandHistory');
        historyDiv.scrollTop = historyDiv.scrollHeight;
    }
    
    autoComplete(partial) {
        const input = document.getElementById('commandInput');
        const matches = Object.keys(this.commandDatabase).filter(cmd => 
            cmd.startsWith(partial.toLowerCase())
        );
        
        if (matches.length === 1) {
            input.value = matches[0] + ' ';
        } else if (matches.length > 1) {
            this.executeCommand(`help | grep ${partial}`);
        }
    }
    
    typeWelcomeMessage() {
        const welcome = `Bienvenido a la Consola Interactiva Raspberry Pi. Escribe 'help' para comenzar.`;
        const typingDiv = document.createElement('div');
        typingDiv.className = 'command-entry';
        typingDiv.innerHTML = `
            <div class="command-output" style="border-left-color: #00FF00;">
                <span class="typewriter">${welcome}</span>
            </div>
        `;
        
        document.getElementById('commandHistory').appendChild(typingDiv);
        this.scrollToBottom();
    }
    
    copyToClipboard(text) {
        navigator.clipboard.writeText(text).then(() => {
            const status = document.getElementById('consoleStatus');
            const original = status.textContent;
            status.textContent = '✓ COPIADO';
            status.style.color = '#00FF00';
            
            setTimeout(() => {
                status.textContent = original;
                status.style.color = '#00FF00';
            }, 2000);
        });
    }
}

// Funciones globales
function executeCommand(cmd) {
    consoleApp.executeCommand(cmd);
}

function showExamples() {
    consoleApp.executeCommand('help');
    consoleApp.showCommandHelp('ls');
}

function copyHistory() {
    const history = consoleApp.commandHistory.map(h => 
        `$ ${h.command}\n${h.output.replace(/<[^>]*>/g, '')}`
    ).join('\n\n');
    
    consoleApp.copyToClipboard(history);
}

// Inicializar consola
let consoleApp;
document.addEventListener('DOMContentLoaded', () => {
    consoleApp = new InteractiveRaspberryConsole();
});
</script>
```

## 🍓 **Características de la Consola Interactiva:**

### **🎮 Funcionalidades Principales:**

#### **1. Consola Realmente Interactiva:**
- **Escribe comandos** en el prompt real
- **Presiona Enter** para ejecutar
- **Autocompletado** con Tab
- **Historial** de comandos ejecutados
- **Panel de ayuda** inteligente

#### **2. Base de Datos de 20+ Comandos:**
- **Comandos Raspberry Pi específicos**: `raspi-config`, `vcgencmd`, `gpio`
- **Comandos Linux básicos**: `ls`, `cd`, `pwd`, `mkdir`
- **Comandos de red**: `ifconfig`, `ping`, `ssh`
- **Comandos APT**: `sudo apt update`, `sudo apt upgrade`
- **Comandos Python**: `python3`, `pip3`

#### **3. Sistema de Ayuda Inteligente:**
- **Panel lateral** con explicaciones detalladas
- **Sintaxis correcta** para cada comando
- **Ejemplos reales** listos para copiar
- **Explicaciones paso a paso**
- **Organizado por categorías**

### **✨ Características Interactivas:**

#### **Para el Usuario:**
1. **Escribe cualquier comando** en el prompt
2. **Obtén explicación instantánea** en el panel derecho
3. **Copia comandos** con un click
4. **Prueba comandos sugeridos** de la lista
5. **Limpia la consola** cuando quieras

#### **Ejemplos de Interacción:**
- **Escribe**: `ls -la` → Muestra salida simulada + explicación de opciones
- **Escribe**: `sudo apt update` → Muestra proceso simulado + explicación APT
- **Escribe**: `vcgencmd measure_temp` → Explica monitoreo de temperatura
- **Escribe**: `help` → Lista todos los comandos disponibles

### **🎨 Estética Raspberry Pi Auténtica:**

#### **Colores Oficiales:**
- **Fondo negro** terminal real
- **Rojo Raspberry Pi** (#C51D4E) en bordes y acentos
- **Verde terminal** (#00FF00) para texto de comando
- **Grises técnicos** para paneles secundarios

#### **Elementos Visuales:**
- **Icono Raspberry Pi** (π) animado
- **Cursor parpadeante** auténtico
- **Prompt estilo Linux**: `pi@raspberrypi:~$`
- **Estado de conexión** (ONLINE)
- **Barras de scroll** personalizadas

### **📱 Integración Perfecta en Blog:**

#### **Diseño Adaptativo:**
- **Ancho máximo 800px** (ideal para entradas)
- **Se adapta** al contenedor del blog
- **Dos columnas** en desktop (terminal + ayuda)
- **Una columna** en móviles
- **Sin afectar fondo** del blog

#### **Interacción Nativa:**
- **Focus automático** en el input
- **Teclado funciona** normalmente
- **Scroll suave** en historial
- **Animaciones sutiles** pero efectivas

 


 

BRAINSTORMING - Tormenta de Ideas de PASAIA LAB © 2025 by José Agustín Fontán Varela is licensed under CC BY-NC-ND 4.0


BRAINSTORMING - Tormenta de Ideas de PASAIA LAB © 2025 by José Agustín Fontán Varela is licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International

<!--==============================================
  CONSOLA RASPBERRY PI INTERACTIVA - PARA ENTRADAS DE BLOG
  Versión: 2.0 | Consola de aprendizaje interactivo
  Sistema: Raspberry Pi OS | Estética original Raspberry Pi
  ==============================================-->

Tormenta Work Free Intelligence + IA Free Intelligence Laboratory by José Agustín Fontán Varela is licensed under CC BY-NC-ND 4.0

# EL NÚMERO 142857: UN VIAJE POR LA ARMONÍA MATEMÁTICA - SUBLIME ;) # 🌌 EL SÓLIDO FRACTAL ARMÓNICO: AUTOSEMEJANZA EN LA CADENA INFINITA DE NÚMEROS CÍCLICOS

# EL NÚMERO 142857: UN VIAJE POR LA ARMONÍA MATEMÁTICA # CERTIFICACIÓN DE CONCEPTO MATEMÁTICO Y ARTÍSTICO ## *Sólido Fractal Basado en la Ca...