domingo, octubre 13, 2024

La evolución de los códigos: del Morse al QR

En la era digital, los códigos QR se han vuelto omnipresentes, apareciendo en productos, anuncios y hasta en nuestros teléfonos como métodos de pago. 

Pero, ¿alguna vez te has preguntado cómo funcionan realmente? Para entender estos fascinantes cuadrados pixelados, debemos hacer un viaje a través de la historia de la codificación de información.

Veritasium en español tiene un video explicativo que se ve a continuación, y luego se amplían los conceptos claves.

El código Morse: el abuelo de la codificación moderna

Nuestro viaje comienza con el código Morse, inventado en la década de 1830. Este sistema ingenioso utiliza combinaciones de puntos y rayas para representar letras y números. Aunque puede parecer primitivo en comparación con las tecnologías actuales, el código Morse sentó las bases para la codificación de información en formatos legibles por máquinas.

El código de barras UPC: llevando la codificación al supermercado

Avanzando en el tiempo, llegamos al código de barras UPC (Universal Product Code), introducido en la década de 1970. Este sistema revolucionó el comercio minorista al permitir la identificación rápida y precisa de productos mediante un escáner. Los códigos de barras UPC utilizan líneas verticales de diferentes grosores para representar números, permitiendo almacenar información como el identificador del producto y el fabricante.

Códigos de verificación y recuperación: asegurando la integridad de los datos

A medida que la tecnología avanzaba, surgió la necesidad de verificar la integridad de los datos transmitidos. Aquí es donde entran en juego los códigos de verificación y recuperación. Estos sistemas añaden información adicional a los datos para detectar y, en algunos casos, corregir errores. Un ejemplo común es el dígito de verificación en los números de tarjetas de crédito, que ayuda a detectar errores de entrada.

Código 49 y PDF417: ampliando las capacidades

El Código 49 y el PDF417 representan el siguiente paso en la evolución. Estos códigos bidimensionales pueden almacenar mucha más información que los códigos de barras tradicionales. El PDF417, por ejemplo, puede contener hasta 1.800 caracteres en un solo código, lo que lo hace ideal para aplicaciones como licencias de conducir o tarjetas de identificación.

El código QR: inspirado en un juego milenario

Finalmente, llegamos al código QR (Quick Response), inventado en 1994 por Denso Wave, una empresa japonesa. Curiosamente, su diseño fue inspirado por el juego de mesa Go, que utiliza un tablero cuadriculado con fichas blancas y negras. Esta influencia es evidente en la estructura matricial del código QR.

Los códigos QR pueden almacenar diversos tipos de datos, desde URLs hasta información de contacto, y son leídos rápidamente por dispositivos móviles. Su capacidad para almacenar datos en ambas direcciones (horizontal y vertical) les permite contener mucha más información que los códigos de barras lineales.

Corrección de errores: haciendo los códigos más robustos

Una característica crucial de los códigos QR es su capacidad de corrección de errores, que les permite ser leídos incluso si están parcialmente dañados o cubiertos. Esta capacidad se basa en técnicas avanzadas de codificación, como el Código Hamming y el código Reed-Solomon.

  • El Código Hamming: Desarrollado en los años 50, permite la detección y corrección de errores simples en la transmisión de datos.
  • Código Reed-Solomon: Más avanzado, este sistema puede corregir múltiples errores y es ampliamente utilizado en los códigos QR y en tecnologías como los CD y DVD.

Conclusión

Desde los simples puntos y rayas del código Morse hasta los complejos patrones de los códigos QR, la evolución de los sistemas de codificación refleja nuestra creciente necesidad de almacenar y transmitir información de manera eficiente y confiable. Los códigos QR, con su capacidad de almacenar grandes cantidades de datos en un espacio pequeño y su robustez frente a daños, representan un hito importante en esta evolución. A medida que avanzamos hacia el futuro, es emocionante imaginar qué nuevas formas de codificación surgirán para satisfacer las demandas de un mundo cada vez más conectado y dependiente de los datos.

lunes, septiembre 09, 2024

Chatbot ¿cómo lo armo?

Una buena práctica son los chatbot, estos permiten agilizar el acceso a información. Pero ¿cómo lo puedo armar?

Se puede usar sklearn de python, específicamente TfidfVectorizer y cosine_similarity.

A su vez un archivo csv con las preguntas, respuestas, palabras claves.

Ante una entrada podremos obtener varias salidas con probabilidad de coincidencia.

Luego tendremos que vincularlo a un json, el cual lo accederemos mediante un php.

Ahora para el front podemos usar elementos flotantes en CSS, y un buen .js que se encargue de leer dicho json con el parámetro GET y vaya mostrando los resultados con botones.

Podremos definir un umbral mínimo de probabilidad, y hacer algunos que otros ajustes.

¡Listo!

sábado, junio 22, 2024

¿Qué es el PCB en el ámbito de los Sistemas Operativos?

En el fascinante mundo de los sistemas operativos, hay varios conceptos y estructuras que facilitan la gestión eficiente de los procesos. Uno de los más cruciales es el PCB (Process Control Block). Si alguna vez te has preguntado cómo un sistema operativo mantiene el orden y control de los procesos en ejecución, el PCB es la clave para entenderlo. Vamos a desglosar qué es el PCB, su estructura y su importancia en el ámbito de los sistemas operativos.

Definición de PCB

El PCB, o Bloque de Control de Proceso, es una estructura de datos que utiliza el sistema operativo para almacenar toda la información relacionada con un proceso específico. En términos sencillos, puedes imaginar el PCB como una ficha técnica que contiene todos los detalles necesarios para la gestión y supervisión de un proceso.

Contenido del PCB

El PCB incluye varios tipos de información cruciales para la administración de procesos. A continuación, detallamos algunos de los elementos más importantes que típicamente componen un PCB:

  1. Identificación del Proceso:

    • PID (Process Identifier): Un identificador único que distingue a cada proceso dentro del sistema.
  2. Estado del Proceso:

    • Información sobre el estado actual del proceso, que puede ser nuevo, listo, en ejecución, en espera o terminado.
  3. Contexto de la CPU:

    • Registros de la CPU, incluyendo el contador de programa, registros generales, y otros valores que permiten al proceso continuar su ejecución desde el punto donde fue interrumpido.
  4. Información de Control de Procesos:

    • Datos sobre prioridades, punteros a otros procesos (padres, hijos), y otros atributos de control y gestión.
  5. Memoria Asignada:

    • Detalles sobre los segmentos de memoria asignados al proceso, incluyendo segmentos de código, datos y pila.
  6. Información de Archivos:

    • Referencias a los archivos que el proceso tiene abiertos y las posiciones actuales de lectura/escritura en esos archivos.

Función del PCB en la Gestión de Procesos

El PCB es esencial para la multitarea y la gestión eficiente de procesos en un sistema operativo. Aquí hay algunas funciones clave que desempeña:

  1. Cambio de Contexto:

    • Durante el cambio de contexto, el sistema operativo guarda el estado de la CPU y otra información crítica del proceso en su PCB y carga el estado del siguiente proceso a ejecutar desde su PCB. Esto permite que múltiples procesos compartan la CPU de manera efectiva.
  2. Seguimiento del Estado del Proceso:

    • Manteniendo un registro del estado de cada proceso, el sistema operativo puede gestionar las transiciones entre diferentes estados de manera ordenada y eficiente.
  3. Administración de Recursos:

    • El PCB ayuda en la administración de recursos asignados a cada proceso, asegurando que no haya conflictos y optimizando el uso de la memoria y otros recursos del sistema.

Importancia del PCB

La importancia del PCB no puede subestimarse. Sin el PCB, el sistema operativo no podría realizar un seguimiento adecuado de los procesos, lo que resultaría en una gestión ineficiente y caótica de los recursos. Gracias al PCB, los sistemas operativos modernos pueden soportar múltiples procesos simultáneamente, proporcionando una experiencia de usuario fluida y eficiente.

Conclusión

El PCB es una pieza fundamental en el diseño y funcionamiento de los sistemas operativos. Esta estructura de datos permite al sistema operativo gestionar y controlar los procesos de manera eficaz, asegurando un rendimiento óptimo y la estabilidad del sistema. Con una comprensión clara del PCB, podemos apreciar mejor la complejidad y eficiencia detrás de los sistemas operativos que utilizamos diariamente.

Recibe las actualizaciones en tu correo