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

No hay comentarios:

Publicar un comentario

COMENTA LIBREMENTE ;)

# INFORME DE ANÁLISIS ANTROPOLÓGICO: LA GRAN TRANSICIÓN - HOMO AUTOMOBILIS INTELLIGENS

 # INFORME DE ANÁLISIS ANTROPOLÓGICO: LA GRAN TRANSICIÓN ## *De la Reproducción a la Producción Humana: Implicaciones de la Sustitución Tecn...