jueves, 30 de agosto de 2007

Codificación de Caracteres

La codificación de caracteres nos permite representar un carácter del alfabeto de un lenguaje natural en otro símbolo de algún otro sistema, como un número o una secuencia de pulsos eléctricos en un sistema electrónico, aplicando normas o reglas de codificación.

Normas de Codificación
Indican cómo se codifica un carácter dado en un símbolo en otro sistema de representación. Ejemplos de esto son el código Morse, la norma ASCII o la UTF-8, entre otros.

ASCII
El código ASCII (acrónimo inglés de American Standard Code for Information Interchange: Código Estadounidense Estándar para el Intercambio de Información), pronunciado generalmente áski (quizás por sugerir ask key) es un código de caracteres basado en el alfabeto latino tal como se usa en inglés moderno y en otras lenguas occidentales. Fue creado en 1963 por el Comité Estadounidense de Estándares (ASA, conocido desde 1969 como el Instituto Estadounidense de Estándares Nacionales, o ANSI) como una evolución de los conjuntos de códigos utilizados entonces en telegrafía. Más tarde, en 1967, se incluyeron las minúsculas, y se redefinieron algunos códigos de control para formar el código conocido como US-ASCII.

El código ASCII utiliza 7 bits para representar los caracteres, aunque inicialmente empleaba un bit adicional (bit de paridad) que se usaba para detectar errores en la transmisión. A menudo se llama incorrectamente ASCII a otros códigos de caracteres de 8 bits, como el estándar ISO-8859-1 que es una extensión que utiliza 8 bits para proporcionar caracteres adicionales usados en idiomas distintos al inglés, como el español.

ASCII fue publicado como estándar por primera vez en 1967 y fue actualizado por última vez en 1986. En la actualidad define códigos para 33 caracteres no imprimibles, de los cuales la mayoría son caracteres de control obsoletos que tienen efecto sobre cómo se procesa el texto, más otros 95 caracteres imprimibles que les siguen en la numeración (empezando por el carácter espacio). Casi todos los sistemas informáticos actuales utilizan el código ASCII o una extensión compatible para representar textos y para el control de dispositivos que manejan texto.

El código ASCII especifica una correspondencia entre cadenas de bits y símbolos escritos de la lengua, permitiendo de esta forma la comunicación entre dispositivos digitales así como su procesamiento y almacenamiento. El código de caracteres ASCII, especialmente la variante conocida como US-ASCII se usa hoy en casi todas las computadoras, bien sea de escritorio o portátiles así como estaciones de trabajo.

ASCII es, en sentido estricto, un código de siete bits, lo que significa que usa cadenas de siete dígitos binarios (que van de 0 a 127 en base decimal) para representar caracteres. En el momento en el que se introdujo el código ASCII muchas computadoras trabajaban con grupos de ocho bits (bytes u octetos), como la unidad mínima de información; donde el octavo bit se usaba habitualmente como bit de paridad con funciones de control de errores en líneas de comunicación u otras funciones específicas del dispositivo. Las máquinas que no usaban la comprobación de paridad asignaban al octavo bit el valor cero en la mayoría de los casos.

Historia
El código ASCII se desarrolló en el ámbito de la telegrafía, y se usó por primera vez comercialmente como un código de teleimpresión impulsado por los servicios de datos de los Laboratorios Bell, que había planeado usar un código de seis bits, que añadía puntuación y letras minúsculas al más antiguo código de teleimpresión Baudot, pero se les convenció para que se unieran al subcomité de la Agencia de Estándares Estadounidense (ASA), que habían empezado a desarrollar el código ASCII. Baudot ayudó en la automatización del envío y recepción de mensajes telegráficos, y tomó muchas características del código Morse; sin embargo, a diferencia del código Morse, Baudot usó códigos de longitud constante.

La Agencia de Estándares Estadounidense (ASA), que se convertiría más tarde en el Instituto Nacional Estadounidense de Estándares (ANSI), publicó por primera vez el código ASCII en 1963. El ASCII publicado en 1963 tenía una flecha apuntando hacia arriba (↑) en lugar del circunflejo (^) y una flecha apuntando hacia la izquierda en lugar del subrayado (←). La versión de 1967 añadió las letras minúsculas, cambió los nombres de algunos códigos de control y cambió de lugar los dos códigos de control ACK y ESC de la zona de letras minúsculas a la zona de códigos de control. ASCII ha sido actualizado y publicado primero como como ANSI X3.4-1968, luego ANSI X3.4-1977, y finalmente ANSI X3.4-1986.

El código ASCII también está incluido en su inminente relevo, Unicode, constituyendo los primeros 128 caracteres (o los más bajos). Algunos observadores consideran al código ASCII el estándar de software más exitoso que nunca se haya promulgado.


Los Caracteres de Control ASCII
El código ASCII reserva los primeros 32 códigos (numerados del 0 al 31 en decimal) para caracteres de control: códigos no pensados originalmente para representar información imprimible, sino para controlar dispositivos (como impresoras) que usaban ASCII. Por ejemplo, el carácter 10 representa la función "nueva línea" (Line Feed), que hace que una impresora avance el papel, y el carácter 27 representa la tecla "ESCape".

Muchos de los caracteres de control ASCII servían para marcar paquetes de datos, o para controlar protocolos de transmisión de datos (por ejemplo ENQuiry, con el significado: “¿hay alguna estación por ahí?”, ACKnowledge: “recibido” o "acuse de recibo", Negative AcKnowledge: “No recibido”, Start Of Header: “inicio de cabecera”, Start of TeXt: “inicio de texto”, End of TeXt: “final de texto”, etc.).

Actualmente los usuarios de ASCII usan menos los caracteres de control, (con algunas excepciones como Carriage Return ("retorno de carro", o sea, la tecla ENTER) o New Line ("nueva línea"). Los lenguajes modernos de etiquetas, los protocolos modernos de comunicación, el paso de dispositivos basados en texto a basados en gráficos, el declive de las teleimpresoras, las tarjetas perforadas y los papeles continuos han dejado obsoleta la mayoría de caracteres de control.


Caracteres Imprimibles ASCII
El código 32, el carácter espacio, designa al espacio entre palabras, y se produce normalmente por la barra espaciadora de un teclado. Los códigos del 33 al 126 se conocen como caracteres imprimibles, y representan letras (mayúsculas y minúsculas, pero del alfabeto del idioma inglés), dígitos, signos de puntuación y varios símbolos especiales como $, %, & y otros.

Los dígitos del 0 al 9 se representan con sus valores prefijados con el valor 0011 en binario, esto significa que la conversión BCD-ASCII es una simple cuestión de tomar cada unidad BCD y prefijarla con 0011.

La notación BCD (Binary Coded Decimal: Decimal codificado como binario) consiste en representar cada dígito decimal como un número binario de 4 dígitos, de la siguiente manera:


Así entonces, en el código ASCII el carácter 5, por ejemplo, se representa concatenando los dígitos 0011 con su correspondiente valor numérico, o sea, 0101, dando así la secuencia de dígitos binarios 00110101, que corresponde a su vez al número decimal 53 el cual es, entonces, el código ASCII del carácter ‘5’.

Las cadenas de bits de las letras minúsculas y mayúsculas sólo difieren en un bit, el 5, simplificando de esta forma la conversión de uno a otro grupo. Por ejemplo:


Variantes de ASCII
A medida que la tecnología informática se difundió a lo largo del mundo, se desarrollaron diferentes estándares y las empresas desarrollaron muchas variaciones del código ASCII para facilitar la escritura de lenguas diferentes al inglés que usaran alfabetos latinos. Se pueden encontrar algunas de esas variaciones clasificadas como ASCII Extendido, aunque en ocasiones el término se aplica erróneamente para cubrir todas las variantes, incluso las que no preservan el conjunto de códigos de caracteres original ASCII de siete bits.

La tecnología mejoró y aportó medios para representar la información codificada en el octavo bit de cada byte, liberando este bit, lo que añadió otros 128 códigos de carácter adicionales que quedaron disponibles para nuevas asignaciones. Por ejemplo, IBM desarrolló páginas de código de 8 bits que reemplazaban los caracteres de control con símbolos gráficos, y asignó otros caracteres gráficos adicionales a los 128 bytes superiores de la página de códigos.




miércoles, 15 de agosto de 2007

AL JWARIZMI

Uno de los conceptos fundamentales de la Ciencia de la Computación es, sin duda alguna, el de algoritmo, el cual podemos definir como “una secuencia ordenada de operaciones o pasos que permite hallar la solución a un problema”. Esta definición no se refiere, por supuesto, exclusivamente a problemas a ser resueltos por una computadora ya que la podemos aplicar a múltiples actividades, científicas o no. El origen etimológico de la palabra tiene que ver con un gran matemático de la Edad Media conocido como Al-Jwarizmi. Aunque los algoritmos datan de tiempos babilónicos y los griegos diseñaron algoritmos aún famosos (por ejemplo, el de Euclides para calcular el máximo común divisor de dos números), fue Al-Jwarizmi el primero que diseñó algoritmos pensando en su eficiencia para el cálculo de raíces de ecuaciones.



Mohammad Ibn Musa abu Djafar Al-Jwarizmi nació alrededor del año 780 en Jwarizm (la actual Khiva, en Uzbekistán), en Asia central. Su fecha exacta de nacimiento y muerte no son conocidas con exactitud, pero se sabe que realizó sus trabajos bajo los califatos de al-Ma`mun y al-Mu'tasim en Bagdad, alrededor de los años 813-833, y probablemente murió en Bagdad alrededor del año 840. Su nombre significa Mohamed, hijo de Moisés, padre de Jafar, el de Jwarizmi.

Al-Jwarizmi fue matemático, astrónomo y geógrafo; se le considera el fundador de varias ramas de las matemáticas y el que usó por primera vez determinados conceptos básicos en esta ciencia. Sus ideas influenciaron en varios matemáticos medievales.

A Al-Jwarizmi se le considera el inventor del Álgebra, palabra que deriva de su libro Kitab al-Jabr wa-al-Muqabilah ("El Libro de las Ecuaciones y las Integrales"), que fue traducido al latín en el siglo XII. Es una compilación de soluciones de ecuaciones, de geometría elemental y de métodos relacionados con cálculos comerciales y de herencias, además de sistematizar la resolución de ecuaciones cuadráticas. El trabajo está basado en la tradición matemática de Babilonia.

Su obra de Aritmética, traducida al latín como Algoritmi de numero Indorum introduce el sistema numérico indio (sólo conocido por los árabes unos 50 años antes) y los algoritmos para calcular con él. En ella sintetizó los conocimientos griegos e hindúes aportando él sus propios descubrimientos. Explicó el uso del cero, desarrolló el sistema decimal, introdujo el sistema numeral Indio (ahora conocido como números árabes), desarrolló operaciones matemáticas entre ellas las operaciones con fracciones, perfeccionó la representación geométrica de las cónicas y entre otras muchas cosas más desarrolló las tablas trigonométricas con la función seno. Fue a través de sus trabajos sobre el sistema decimal que se conoció en Europa la numeración ahora conocida como arábiga pero que como se ve es de origen hindú. También colaboró en hallar las medidas del volumen y del radio de la Tierra ordenado por Mamun al-Rashid. Las palabras guarismo (cifra, número) y algoritmo también provienen de su nombre.

El trabajo de Al-Jwarizmi permitió preservar y difundir el conocimiento de los griegos e indios. Rescató de los griegos la rigurosidad y de los indios la simplicidad (en vez de una larga demostración, usar un diagrama junto a la palabra mira). Sus libros son intuitivos y prácticos y su principal contribución fue simplificar las matemáticas a un nivel entendible por no expertos. En particular muestran las ventajas de usar el sistema decimal indio, un atrevimiento para su época, dado lo tradicional de la cultura árabe. La exposición clara de cómo calcular de una manera sistemática a través de algoritmos diseñados para ser usados con algún tipo de dispositivo mecánico similar a un ábaco, más que con lápiz y papel, muestra la intuición y el poder de abstracción de Al-Jwarizmi. Hasta se preocupaba de reducir el número de operaciones necesarias en cada cálculo. Por esta razón, aunque no haya sido él el inventor del primer algoritmo, merece que este concepto esté asociado a su nombre. Al-Jwarizmi fue sin duda el primer pensador algorítmico.






martes, 14 de agosto de 2007

Introducción

Este blog que iniciamos hoy tiene como finalidad la de servir de contacto entre mis alumnos de la Escuela de Ingeniería de Computación de la Universidad Rafael Urdaneta, en la ciudad de Maracaibo, República Bolivariana de Venezuela, y este servidor ing. Nerio Villalobos Finol, profesor de dicha Escuela, pero estará abierto a cualquier persona de cualquier edad, nacionalidad, sexo o nivel de instrucción que necesite y use una computadora en sus actividades de estudio, trabajo, comunicación y entretenimiento, vale decir, todo el mundo.

Por supuesto que la principal actividad de este blog será interactuar con mis alumnos a través de trabajos, proyectos y evaluaciones, pero también serán tratados temas que directa o indirectamente tengan relación con la Ciencia de la Computación. Por ejemplo, trataremos de incorporar cada semana una biografía de algún personaje importante en la historia de esta ciencia relativamente reciente, pero no menos llena de hechos relevantes y hasta curiosos.

Igualmente se procurará la incorporación de código fuente de programas en diferentes lenguajes, pues consideramos que la habilidad de programar nunca debe perderse, pues es la base de la computación. Estos programas seguramente vendrán como complementos de los temas tratados en cada artículo, incluso podrían formularse como proyectos.

Esperamos su colaboración y participación para que todos salgamos ganando, pues el aprendizaje nunca termina.




HORA DE VENEZUELA

VISITANTES RECIENTES

OTROS SITIOS

Sitios de Interés

URU

UNEFA

CNTI

CANAIMA

Luis Castellanos