Soluciones a problemas técnicos comunes en programación y sistemas

Problema de las frutas
Existen tres cestas: una contiene solo manzanas, otra solo naranjas, y la tercera una mezcla de ambas. Las etiquetas de todas las cestas son incorrectas. Para identificar el contenido de cada cesta, se toma una fruta de la cesta etiquetada como "mezcla". Si se extrae una naranja, entonces esa cesta es de naranjas, la etiquetada como "manzanas" debe ser la mezcla (pues no puede ser naranjas ya identificada), y la etiuqetada como "naranjas" contiene manzanas. Si se extrae una manzana, se sigue un razonamiento análogo para determinar los contenidos.

Consulta SQL para deduplicación por múltiples campos
Para seleccionar registros únicos basados en varios campos, se puede utilizar una subconsulta que recupere el ID máximo por grupo. Por ejemplo, en una tabla de productos con nombre, categoría y precio:

SELECT *
FROM productos p1
WHERE p1.id = (
    SELECT MAX(p2.id)
    FROM productos p2
    WHERE p2.nombre = p1.nombre
      AND p2.categoria = p1.categoria
      -- Agregar más campos según sea necesario
)

Ordenamiento de listas de diccionarios en Python
Para ordanar una lista de diccionarios por un campo específico, se puede utilizar el método sort o la función sorted. Por ejemplo, ordenar empleados por sueldo en orden descendente:

empleados = [
    {"nombre": "Carlos", "sueldo": 15000},
    {"nombre": "Directora", "sueldo": 30000},
    {"nombre": "Ana", "sueldo": 20000},
]
# Usando sort in-place
empleados.sort(key=lambda x: x["sueldo"], reverse=True)
print("Lista ordenada:", empleados)

# Usando sorted para crear una nueva lista
nueva_lista = sorted(empleados, key=lambda x: x["sueldo"], reverse=True)
print("Nueva lista:", nueva_lista)

Recuperación de consumidor en RabbitMQ tras fallo
En sistemas con colas de mensajes, se puede monitorear la conexión TCP y reiniciar el consumidor si falla. Ejemplo en Python:

import subprocess
import os
import signal

def reiniciar_consumidor():
    # Buscar el proceso del servidor de mensajes
    resultado = subprocess.run(["ps", "aux"], capture_output=True, text=True)
    for linea in resultado.stdout.splitlines():
        if "message-server" in linea and "grep" not in linea:
            pid = int(linea.split()[1])
            os.kill(pid, signal.SIGUSR1)
            print(f"Proceso {pid} reiniciado")
    
    # Recargar la conexión a RabbitMQ
    mq_conn = connection.MQConnection.get_connection(database)
    mq_conn.ack(canal, metodo)

Cálculo del promedio de una columna en Linux usando awk
Para calcular el promedio de una columna específica en un archivo de texto, se puede combinar cat y awk. Ejemplo con un archivo de logs que tiene formato: fecha, código de estado, tiempo de respuesta:

cat tiempos.log | awk '{print $3}' | awk '{sum += $1; count++} END {print sum/count}'

Este comando extrae la tercera columna (teimpos en milisegundos) y calcula el promedio.

Etiquetas: SQL Python RabbitMQ linux AWK

Publicado el 6-21 02:15