Una breve nota mental, por si se me vuelve a desprogramar el control remoto del DVD player LG:
Para usarlo como control de TV, dejar presionado el botón de Power y luego presionar:
8 ó 9 para televisiones Sony
Más información aquí
Este blog está orientado a la Ingeniería de Lenguajes de Programación y otros temas de interés en el área de ciencias de la computación y sistemas de información.
22 de agosto de 2011
20 de septiembre de 2010
Diseño de un generador de código objeto
El generador de código objeto puede considerarse como la penúltima fase de un compilador, la cual se encarga de tomar como entrada el código intermedio generado por el front-end, y producir código objeto de la arquitectura target para luego entrar en la fase de optimización de código.
Para el generador de código objeto, se puede asumir que el front-end ha hecho los análisis léxico y sintáctico, y ha traducido a una representación intermedia suficientemente detallada (LLVM?), en la que los valores de los nombres que aparecen en código intermedio pueden ser representados por cantidades que la máquina objeto puede manejar directamente. Además, se supone que se hecho el chequeo de tipos necesario y se han detectado los errores semánticos. Por lo tanto, la fase de generación de código trabaja bajo el supuesto que su entrada no contiene errores.
La salida del generador de código consiste en el programa objeto. Existe un variedad de formas para el código objeto : lenguaje de máquina absoluto (imagen de memoria), lenguaje de máquina relocalizable (.OBJ en Intel Relocatable Format, ELF, etc.), lenguaje ensamblador o incluso otro lenguaje de programación.
La naturaleza del conjunto de instrucciones de la máquina objeto determina la dificultad de la selección de instrucciones. Es importante que el conjunto de instrucciones sea uniforme y completo, para generar reglas fáciles de traducción, por ejemplo : una arquitectura como la de Intel x86 permite que los compiladores tengan reglas bien definidas y cortas para casi todas las operaciones, mientras que una máquina RISC como el SPARC no posee un conjunto de instrucciones completo (desventaja para el constructor de compiladores, ventaja para los usuarios) y hace que la generación de código sea muy compleja. Otras arquitecturas, como la de MIPS, presenta un problema aparte, puesto que requiere que se reordene el código de ciertas maneras y se evite el uso de ciertas instrucciones para evitar hazards en el pipeline.
Otra de las consideraciones a tener para el generador de código consiste en la asignación de registros. Los registros son los elementos más valiosos y escasos en la fase de generación de código, puesto que el CPU solamente puede procesar datos que se encuentren en registros. Además, las instrucciones que implican operandos en registros son más cortas y rápidas que las de operandos en memoria. El uso de registros se divide generalmente en dos subproblemas :
1)Durante la asignación de registros, se selecciona el conjunto de variables y/o constantes que residirán en los registros en un momento del programa.
2)Durante una fase posterior a la anterior, se escoje el registro específico en el que residirá una variable.
Es muy difícil encontrar una asignación óptima de registros a variables. Matemáticamente, el problema es NP-completo. Este problema se complica todavía más debido a restricciones de hardware, de sistema operativo o ambos. Puede ser que el conjunto de instrucciones de la máquina no sea ortogonal (problema que existe en los x86 pero no en los Power por ejemplo). Algunas máquinas además requieren para ciertas operaciones el uso de un conjunto de registros para algunos operandos y resultados.
Para el generador de código objeto, se puede asumir que el front-end ha hecho los análisis léxico y sintáctico, y ha traducido a una representación intermedia suficientemente detallada (LLVM?), en la que los valores de los nombres que aparecen en código intermedio pueden ser representados por cantidades que la máquina objeto puede manejar directamente. Además, se supone que se hecho el chequeo de tipos necesario y se han detectado los errores semánticos. Por lo tanto, la fase de generación de código trabaja bajo el supuesto que su entrada no contiene errores.
La salida del generador de código consiste en el programa objeto. Existe un variedad de formas para el código objeto : lenguaje de máquina absoluto (imagen de memoria), lenguaje de máquina relocalizable (.OBJ en Intel Relocatable Format, ELF, etc.), lenguaje ensamblador o incluso otro lenguaje de programación.
La naturaleza del conjunto de instrucciones de la máquina objeto determina la dificultad de la selección de instrucciones. Es importante que el conjunto de instrucciones sea uniforme y completo, para generar reglas fáciles de traducción, por ejemplo : una arquitectura como la de Intel x86 permite que los compiladores tengan reglas bien definidas y cortas para casi todas las operaciones, mientras que una máquina RISC como el SPARC no posee un conjunto de instrucciones completo (desventaja para el constructor de compiladores, ventaja para los usuarios) y hace que la generación de código sea muy compleja. Otras arquitecturas, como la de MIPS, presenta un problema aparte, puesto que requiere que se reordene el código de ciertas maneras y se evite el uso de ciertas instrucciones para evitar hazards en el pipeline.
Otra de las consideraciones a tener para el generador de código consiste en la asignación de registros. Los registros son los elementos más valiosos y escasos en la fase de generación de código, puesto que el CPU solamente puede procesar datos que se encuentren en registros. Además, las instrucciones que implican operandos en registros son más cortas y rápidas que las de operandos en memoria. El uso de registros se divide generalmente en dos subproblemas :
1)Durante la asignación de registros, se selecciona el conjunto de variables y/o constantes que residirán en los registros en un momento del programa.
2)Durante una fase posterior a la anterior, se escoje el registro específico en el que residirá una variable.
Es muy difícil encontrar una asignación óptima de registros a variables. Matemáticamente, el problema es NP-completo. Este problema se complica todavía más debido a restricciones de hardware, de sistema operativo o ambos. Puede ser que el conjunto de instrucciones de la máquina no sea ortogonal (problema que existe en los x86 pero no en los Power por ejemplo). Algunas máquinas además requieren para ciertas operaciones el uso de un conjunto de registros para algunos operandos y resultados.
19 de septiembre de 2010
Ejemplo de un analizador sintáctico escrito en Bison/Yacc
Acabo de subir a Slideshare un documento conteniendo un ejemplo completo de un analizador sintáctico (parser) escrito en Bison.
8 de abril de 2010
Apuntes de Compiladores
Regresando al tema principal del blog, he posteado en Slideshare los apuntes de clase que usé para el curso de Compiladores durante un buen tiempo. Están incompletos, pero si encuentro más, los scanneo y los pongo también.
El contenido está basado en los libros clásicos del Dragón 1a. edición (Aho, et.al.) y el Tigre (Appel). Las notas como tal son para uso libre de cualquier persona interesada en estos temas. Espero que sean de provecho.
Los contenidos son: Conversión de NFA a DFA, Minimización de estados de un DFA, Parsing Top-Down Recursivo y No Recursivo, Parsing Bottom-Up, Construcción de tablas LR(0), SLR, LALR, Traducción dirigida por sintaxis, Evaluación de atributos en parsers LR (Por stack), Atributos heredados en parsers LR, Máquinas abstractas de stack, Entorno de run-time, Organización de la memoria, Stack frames y paso de parámetros, Generación de código para declaraciones, Generación de código para asignaciones, Manejo de índices en arreglos, Generación de código para expresiones booleanas, Generación de código en statements de control de flujo, Backpatching.
Puede ver el PDF del documento completo en Slideshare:
El contenido está basado en los libros clásicos del Dragón 1a. edición (Aho, et.al.) y el Tigre (Appel). Las notas como tal son para uso libre de cualquier persona interesada en estos temas. Espero que sean de provecho.
Los contenidos son: Conversión de NFA a DFA, Minimización de estados de un DFA, Parsing Top-Down Recursivo y No Recursivo, Parsing Bottom-Up, Construcción de tablas LR(0), SLR, LALR, Traducción dirigida por sintaxis, Evaluación de atributos en parsers LR (Por stack), Atributos heredados en parsers LR, Máquinas abstractas de stack, Entorno de run-time, Organización de la memoria, Stack frames y paso de parámetros, Generación de código para declaraciones, Generación de código para asignaciones, Manejo de índices en arreglos, Generación de código para expresiones booleanas, Generación de código en statements de control de flujo, Backpatching.
Puede ver el PDF del documento completo en Slideshare:
Apuntes del Curso de Compiladores
View more documents from Egdares Futch.
30 de diciembre de 2009
Compresión de datos: ¿cómo funciona?
Regresando al blog después de un montón de tiempo....(siempre digo eso).
Conversando sobre esto, una persona me dijo que la compresión de datos era algo que ya no era tan relevante, porque las capacidades de almacenamiento disponibles para cualquiera eran más que suficiente: llaves USB de 16 gigabytes, iPods de 120 gigabytes, discos de 1 terabyte, ¡o más! Sin embargo, considero que la compresión de datos tiene importancia aún, especialmente para nuestra comunicación en línea, aumentando la eficiencia de nuestros equipos.
Estamos acostumbrados a hablar de información que ha sufrido procesos de Compresión con Pérdidas (en inglés: Lossy Compression): los archivos MP3, que se comprimen por medio de algoritmos que modelan la percepción de frecuencias sonoras del oído humano, o las imágenes JPEG que se reducen en tamaño por medio de degradaciones en la calidad o fidelidad de las mismas.
Es posible ahora crear el árbol Huffman de la siguiente manera:
Conversando sobre esto, una persona me dijo que la compresión de datos era algo que ya no era tan relevante, porque las capacidades de almacenamiento disponibles para cualquiera eran más que suficiente: llaves USB de 16 gigabytes, iPods de 120 gigabytes, discos de 1 terabyte, ¡o más! Sin embargo, considero que la compresión de datos tiene importancia aún, especialmente para nuestra comunicación en línea, aumentando la eficiencia de nuestros equipos.
Estamos acostumbrados a hablar de información que ha sufrido procesos de Compresión con Pérdidas (en inglés: Lossy Compression): los archivos MP3, que se comprimen por medio de algoritmos que modelan la percepción de frecuencias sonoras del oído humano, o las imágenes JPEG que se reducen en tamaño por medio de degradaciones en la calidad o fidelidad de las mismas.
En cambio, la Compresión sin Pérdidas (en inglés: Lossless Compression) reduce el tamaño de la información sobre la que trabaja, sin tener pérdida de fidelidad o contenido. Para todos son muy conocidos los archivos .ZIP, o .RAR. En ellos se obtiene como resultado algo de menor tamaño, que puede ser reintegrado a su versión original conservando todo el contenido sin ninguna pérdida: ¡es casi como ir en contra de las leyes de la física!
Para comenzar a explorar el tema de compresión, vamos a analizar el algoritmo de Huffman, creado en los años 50, ya que ésta es una de las técnicas de Compresión sin Pérdidas que usualmente se discuten para introducir el tema, tanto por su relativa sencillez, pero brillante concepto, así como su falta de protección por patentes. La leyenda (en Wikipedia) dice que este algoritmo fue creado como la respuesta a una tarea de la universidad.
El algoritmo está basado en el concepto que los símbolos más frecuentes deberían estar codificados con menos bits que los menos frecuentes, logrando así una reducción en la cantidad de bits totales del mensaje o documento a comprimir. En el caso de textos en español por ejemplo, las letras a y e son más frecuente que la letra r, por lo que si le asignamos menos bits a esas letras que los 8 normales de un carácter ASCII, podríamos reducir el espacio requerido para almacenar el contenido.
La codificación Huffman entonces formaliza este concepto relacionando el número de bits asociados a un símbolo a la probabilidad de ocurrencia del mismo. En este artículo veremos la forma estática del algoritmo, que requiere tener una tabla de probabilidades calculada antes de comenzar a comprimir los datos. Esta tabla puede ser calculada en base a suposiciones iniciales (por ejemplo, una tabla de frecuencias de textos en español o inglés, dependiendo del lenguaje), o se puede generar directamente de los datos que se desean comprimir, recorriendo el contenido y haciendo un conteo simple de la ocurrencia de los símbolos.
Con esta información, el procedimiento de compresión puede comenzar a construir un árbol binario que codifica esta información de probabilidades, insertando nodos dentro del árbol, de forma de poner en las hojas más alejadas de la raíz, los símbolos menos probables. De esa manera, al completar este proceso de inserción, se tendrá un árbol con las hojas representando los símbolos, y nodos interiores que solamente sirven para diferenciar los niveles. El recorrido del árbol, etiquetando los arcos izquierdos con un 0 y los derechos con un 1, producen las palabras de código Huffman, con bits mínimos.
La Figura 1 ilustra este proceso. Como primera actividad, estamos generando el conteo de frecuencias del string de entrada “bcbbbbbbaacaabbcade” de 19 caracteres de largo. Esto ocuparía 19*8=152 bits de espacio para representarse normalmente en ASCII. Del conteo de caracteres, vemos que el más frecuente es el carácter b, luego el a, y así sucesivamente. Los menos frecuentes son los caracteres d y e.
- Paso 1: Seleccione los dos símbolos con la menor probabilidad
- Paso 2: Cree un nuevo nodo como padre de los dos símbolos de menor probabilidad
- Paso 3: Asignar al nuevo nodo una probabilidad igual a la suma de sus hojas
- Paso 4: Repita el paso 1 hasta que ya solamente quede un nodo sin padre, el cual se agregará a la raíz
El código Huffman para cada símbolo se obtiene ahora caminando hacia cada uno de ellos, con los vértices izquierdos etiquetados con un 0, y los derechos con un 1. En este momento, ya se puede proceder a emitir los códigos leyendo cada símbolo, y produciendo el valor para cada uno de ellos. Es de notar que solamente hay códigos Huffman para las hojas del árbol. Los nodos interiores no contienen información.
En el ejemplo, el string original queda ahora conformado por los siguientes códigos (separados por guiones): “0-101-0-0-0-0-0-0-11-11-101-11-11-0-0-101-11-1001-1000” que suman en total 36 bits, equivalentes a una compresión de 36/152=23% del tamaño original.
El proceso de decompresión ocurre a la inversa: se lee el input un bit a la vez y se emite un símbolo recorriendo el árbol, al llegar a la hoja correspondiente.
Para lograr la implementación de este algoritmo, debe considerarse el anexar la tabla de frecuencias (o tenerla fija, ya precalculada) para lograr la decompresión, así como enviar el número de símbolos del input, para tener el parámetro de parada del algoritmo, ya que el decompresor no puede saber precisamente dónde termina la entrada.
Es posible también conseguir ejemplos de código en diversos lenguajes en Internet, y la Wikipedia tiene múltiples links al respecto.
Aún cuando no se vaya a implementar, es interesante conocer los detalles internos del funcionamiento de este tipo de algoritmo.
Una pregunta de análisis: ¿qué pasaría con el input, si por fallas en la transmisión un solo bit se enviara erróneo?
Referencias usadas:
Apiki, Steve. “Lossless Data Compression”. Byte, marzo 1991.
Música:
The Beatles Stereo Box Set, Is there anybody out there? The Wall Live
TV:
Glee, Fringe S2, American Family
25 de septiembre de 2009
Teclado en español para Apple Boot Camp
Casi cinco meses de no postear, esta vez es por un tema con una Macbook a la que le instalé Windows 7 con Boot Camp. La computadora tiene teclado en español, pero es una configuración algo rara, ya que ni en OS X me fue fácil instalarle un mapa apropiado.
En fin, el tema es que al instalar Boot Camp y arrancar en Windows, algunas teclas, en especial el signo de arroba @, y otras muy básicas no las podía seleccionar de ninguna manera. Probé varias combinaciones de teclas, pero nada. Aparte de eso, no encontré ningún tip en Internet, así que me decidí a escribir este post describiendo la solución que encontré:
1) En Windows, luego de instalar los drivers de Boot Camp, seleccionar el teclado "Spanish - Apple" en las opciones Regionales.
2) Para acceder a los símbolos especiales, para los que en un teclado de PC se requiere Alt-Gr, en el teclado Apple se usa Ctrl-Alt (del lado izquierdo de la barra espaciadora).
Es decir que, para generar el caracter @, se presiona Ctrl-Alt-2.
Cómo lo encontré? Pues bueno, la documentación de Apple habla de las teclas especiales como Print Screen, Scroll Lock y otras, pero no los caracteres internacionales. Sin embargo, en una pequeña nota del documento del teclado, menciona una utilería de Microsoft llamada "Microsoft Keyboard Layout Creator". Con la ayuda de esta herramienta, entonces identifiqué la dichosa combinación de Ctrl-Alt.
Ahora si, finalmente puedo usar la Mac para probar bien el Boot Camp. Increíble que por un simple caracter @ no tenía usabilidad completa del sistema...ah y Alt-64 tampoco servía!
Película: District 9
Libro: The Lost Symbol
Serie: The Office season 6
En fin, el tema es que al instalar Boot Camp y arrancar en Windows, algunas teclas, en especial el signo de arroba @, y otras muy básicas no las podía seleccionar de ninguna manera. Probé varias combinaciones de teclas, pero nada. Aparte de eso, no encontré ningún tip en Internet, así que me decidí a escribir este post describiendo la solución que encontré:
1) En Windows, luego de instalar los drivers de Boot Camp, seleccionar el teclado "Spanish - Apple" en las opciones Regionales.
2) Para acceder a los símbolos especiales, para los que en un teclado de PC se requiere Alt-Gr, en el teclado Apple se usa Ctrl-Alt (del lado izquierdo de la barra espaciadora).
Es decir que, para generar el caracter @, se presiona Ctrl-Alt-2.
Cómo lo encontré? Pues bueno, la documentación de Apple habla de las teclas especiales como Print Screen, Scroll Lock y otras, pero no los caracteres internacionales. Sin embargo, en una pequeña nota del documento del teclado, menciona una utilería de Microsoft llamada "Microsoft Keyboard Layout Creator". Con la ayuda de esta herramienta, entonces identifiqué la dichosa combinación de Ctrl-Alt.
Ahora si, finalmente puedo usar la Mac para probar bien el Boot Camp. Increíble que por un simple caracter @ no tenía usabilidad completa del sistema...ah y Alt-64 tampoco servía!
Película: District 9
Libro: The Lost Symbol
Serie: The Office season 6
6 de mayo de 2009
Instalando un HTC Touch en Windows Vista
Un post rápido (aunque llevo ratos de no actualizar el blog) para documentar la forma de instalar y usar un HTC Touch en Windows Vista. Supuestamente Vista incluye el Windows Mobile Center, que incluye la funcionalidad para conectar dispositivos móviles, especialmente los que vienen con Windows Mobile (como el HTC Touch, HTC Touch Pro, etc.), pero he encontrado que no funciona así nomás (out of the box).
Los pasos son:
1) ActiveSync o el CD que trae el teléfono no funciona en Vista, no usarlo.
2) Antes de conectar el teléfono a la computadora, bajar (descargar) del sitio de Microsoft Windows Mobile el nuevo Mobile Device Center 6.1 (esta es la versión del software, funciona con teléfonos que traigan WinMo 5 para arriba).
3) Instalar el software, que incluye nuevos drivers para los teléfonos móviles.
4) Luego de instalar, puede conectarse el telefóno con el cable USB.
5) Ahora, parecerá una pantalla nueva con opciones para instalar software, sincronizar, y realizar todas las funciones que anteriormente se hacían con ActiveSync o con el Mobile Center.
Espero que esto ayude porque he encontrado varios posts en Internet al respecto, pero todas tienen instrucciones diferentes!
Música: Pink Floyd discography
Libro: Poirot Investiga
TV: The Office season 5
Los pasos son:
1) ActiveSync o el CD que trae el teléfono no funciona en Vista, no usarlo.
2) Antes de conectar el teléfono a la computadora, bajar (descargar) del sitio de Microsoft Windows Mobile el nuevo Mobile Device Center 6.1 (esta es la versión del software, funciona con teléfonos que traigan WinMo 5 para arriba).
3) Instalar el software, que incluye nuevos drivers para los teléfonos móviles.
4) Luego de instalar, puede conectarse el telefóno con el cable USB.
5) Ahora, parecerá una pantalla nueva con opciones para instalar software, sincronizar, y realizar todas las funciones que anteriormente se hacían con ActiveSync o con el Mobile Center.
Espero que esto ayude porque he encontrado varios posts en Internet al respecto, pero todas tienen instrucciones diferentes!
Música: Pink Floyd discography
Libro: Poirot Investiga
TV: The Office season 5
22 de agosto de 2008
Sitios y aplicaciones para una experiencia confortable de Internet en el móvil
Como últimamente he tenido que pasar largos ratos en sitios donde no hay Internet, he tenido que sacarle el jugo al acceso a Internet desde de mi teléfono móvil, ya sea como enlace para una computadora portátil por Bluetooth o USB (tethering) o directamente desde el teléfono.
He estado usando tres tipos diferentes de teléfono: un Motorola V3, un Blackberry 8120 y un HTC Touch, así que se puede decir que he cubierto buena parte de lo disponible en el mercado. A ver si consigo un Nokia N95 o similar por allí para hacer pruebas también ;-).
Como nota aparte, el iPhone no tiene la capacidad de usarse como enlace para computadora (a menos que se use un app que Apple canceló o una jailbroken), sólamente para conectarse a Internet de forma interna.
Mis sitios favoritos con buena configuración para usar directamente desde el teléfono son:
Se aceptan más sugerencias!
He estado usando tres tipos diferentes de teléfono: un Motorola V3, un Blackberry 8120 y un HTC Touch, así que se puede decir que he cubierto buena parte de lo disponible en el mercado. A ver si consigo un Nokia N95 o similar por allí para hacer pruebas también ;-).
Como nota aparte, el iPhone no tiene la capacidad de usarse como enlace para computadora (a menos que se use un app que Apple canceló o una jailbroken), sólamente para conectarse a Internet de forma interna.
Mis sitios favoritos con buena configuración para usar directamente desde el teléfono son:
- Facebook (m.facebook.com)
- Blipea (m.blipea.com)
- CNN (m.cnn.com, [no funciona en el V3])
- Digg (www.diggriver.com [no funciona en el V3] ó m.digg.com. Este último es nuevo, y está más orientado al iPhone)
- Reddit (www.redditriver.com)
- GMail (m.gmail.com, existe una aplicación Java también, mencionada abajo)
- Yahoo! (m.yahoo.com, también está la aplicación Yahoo! Go mencionada abajo)
- Opera Mini
- Yahoo! Go (Para Blackberry y Windows Mobile, puede servir de RSS aggregator también!)
- Gmail (para cualquier teléfono con Java, click donde dice Get Faster GMail)
- Pocket PuTTY (para Windows Mobile)
Se aceptan más sugerencias!
21 de agosto de 2008
Tocando la música de un iPod sincronizado a otra librería de iTunes
Por estar de viaje traje mi iPod, que tengo sincronizado a la librería de la Mac de la casa. Quería oír algunas canciones que estaban en el iPod y me recordé que alguna vez había tocado la música que estaba en el mismo a través del iTunes de otra computadora.
Al principio no me funcionó, pero al final si es posible de la siguiente manera:
1) Conectar el iPod a la computadora que queremos usar para oir la música.
2) iTunes aparecerá, primero con una caja de diálogo indicando si deseamos eliminar la música del iPod. Es muy conveniente decir que no en este caso. Seguirá preguntando acerca de las compras, las fotos, etc. Igual hay que decirle que no haga cambios.
3) Cuando aparezca el iPod en la lista de dispositivos de iTunes, seleccionarlo, y aparecerá la pantalla de sumarización de sincronización (Summary).
4) Seleccionar la opción de manejo manual de música y videos y aplicar el cambio.
5) En este momento, el iPod pondrá a disposición de esta computadora toda la música y videos para que sea visto sin tener esa librería.
Me parece un buen truco para viajar...
Al principio no me funcionó, pero al final si es posible de la siguiente manera:
1) Conectar el iPod a la computadora que queremos usar para oir la música.
2) iTunes aparecerá, primero con una caja de diálogo indicando si deseamos eliminar la música del iPod. Es muy conveniente decir que no en este caso. Seguirá preguntando acerca de las compras, las fotos, etc. Igual hay que decirle que no haga cambios.
3) Cuando aparezca el iPod en la lista de dispositivos de iTunes, seleccionarlo, y aparecerá la pantalla de sumarización de sincronización (Summary).
4) Seleccionar la opción de manejo manual de música y videos y aplicar el cambio.
5) En este momento, el iPod pondrá a disposición de esta computadora toda la música y videos para que sea visto sin tener esa librería.
Me parece un buen truco para viajar...
10 de agosto de 2008
Nuevo batch de libros
Tengo un nuevo batch de libros que he estado leyendo, y que me gustaría compartir acerca de ellos en el blog:
El primero se llama The inmates are running the asylum, y es acerca de diseño y usabilidad de productos y sistemas tecnológicos, orientado al tema de Human-Computer Interaction (HCI). Presenta buenos casos de estudio y diseño de productos y software, aunque a veces le tira duro a los ingenieros.
Otro libro es Hacker's Delight. No se trata de un libro de cómo romper passwords, robar señal Wi-Fi o cosas similares, sino técnicas impresionantes de programación de bajo nivel. Desde el clásico swap implementado con XOR sin necesidad de un elemento temporal, hasta códigos de Grey y otras técnicas de programación que en nuestro mundo actual de Java, STL, WebKit y todo eso, ya ni siquiera consideramos que existen.
Otro libro de usabilidad es Don't make me think, especialmente orientado a hacer que los sitios Web sea funcionales y que permitan que el usuario saque provecho de ellos. Un error clásico que uno ve todos los días es por ejemplo información de contacto de las empresas. Si yo quiero llamar por teléfono, o conocer donde quedan sus oficinas, si tienen website deberían de poner en algún lado esa información, pero una gran cantidad de empresas no lo hacen.
Y un clásico sobre diseño: The design of everyday things. Cuando lo fui a comprar, estaba ubicado en el área de Arquitectura y Diseño, por eso me costó encontrarlo y tuve que preguntar. Es un clásico en este tema, y ayuda mucho a pensar acerca de cómo podemos lograr que la tecnología sea más fácil de integrar en nuestras vidas. Ya de por sí juega un gran papel en ellas, pero no debería ser tan complicada.
El primero se llama The inmates are running the asylum, y es acerca de diseño y usabilidad de productos y sistemas tecnológicos, orientado al tema de Human-Computer Interaction (HCI). Presenta buenos casos de estudio y diseño de productos y software, aunque a veces le tira duro a los ingenieros.
Otro libro es Hacker's Delight. No se trata de un libro de cómo romper passwords, robar señal Wi-Fi o cosas similares, sino técnicas impresionantes de programación de bajo nivel. Desde el clásico swap implementado con XOR sin necesidad de un elemento temporal, hasta códigos de Grey y otras técnicas de programación que en nuestro mundo actual de Java, STL, WebKit y todo eso, ya ni siquiera consideramos que existen.
Otro libro de usabilidad es Don't make me think, especialmente orientado a hacer que los sitios Web sea funcionales y que permitan que el usuario saque provecho de ellos. Un error clásico que uno ve todos los días es por ejemplo información de contacto de las empresas. Si yo quiero llamar por teléfono, o conocer donde quedan sus oficinas, si tienen website deberían de poner en algún lado esa información, pero una gran cantidad de empresas no lo hacen.
Y un clásico sobre diseño: The design of everyday things. Cuando lo fui a comprar, estaba ubicado en el área de Arquitectura y Diseño, por eso me costó encontrarlo y tuve que preguntar. Es un clásico en este tema, y ayuda mucho a pensar acerca de cómo podemos lograr que la tecnología sea más fácil de integrar en nuestras vidas. Ya de por sí juega un gran papel en ellas, pero no debería ser tan complicada.
25 de junio de 2008
Entrevista con Microsoft Technet
Desde hace algún tiempo, he estado trabajando con el Windows Curriculum Resource Kit (CRK) de Microsoft para incluir contenido sobre el manejo interno de Windows en la clase de Sistemas Operativos. Recientemente me pidieron una entrevista para Technet sobre el tema, la cual enlazo aquí para referencia.
Libro: The inmates are running the asylum
DVD: Flight of the Conchords, Season 1
Podcast: stackoverflow
Libro: The inmates are running the asylum
DVD: Flight of the Conchords, Season 1
Podcast: stackoverflow
17 de abril de 2008
Temas para un curso de maestría sobre "Sistemas de Información"
Hace poco estuve trabajando en el diseño de un curso a nivel de maestría, llamado "Sistemas de Información". Al final, no se concretó nada con el curso, pero de todas maneras voy a desarrollar algo de los temas que me hubiera gustado tratar.
El curso estaba orientado a las maestrías del área de administración y negocios (MBA), como uno de los cursos introductorios del curriculum. En total eran 12 sesiones de 2 horas cada una, durante un trimestre.
El curso estaba orientado a las maestrías del área de administración y negocios (MBA), como uno de los cursos introductorios del curriculum. En total eran 12 sesiones de 2 horas cada una, durante un trimestre.
i) Usabilidad, Interfaces de usuario, Productividad
Libros/Referencias: Don't make me think, The Design of Everyday Things
The inmates are running the asylum
Libros/Referencias: Don't make me think, The Design of Everyday Things
The inmates are running the asylum
ii) Continuidad de negocios, business Continuity
iii) Seguridad y Riesgos Informáticos
Libros/Referencias: Beyond Fear
Libros/Referencias: Beyond Fear
iv) Tecnología y la competitividad de la empresa
Libros/referencias: IT doesn't matter
Libros/referencias: IT doesn't matter
v) Propiedad intelectual, activos informáticos
Libros/referencias: The pirate's dilemma
Libros/referencias: The pirate's dilemma
vi) Información para toma de decisiones - Business Intelligence
Faltan 6 temas más, que todavía no he completado y que poco a poco quisiera desarrollar.
Faltan 6 temas más, que todavía no he completado y que poco a poco quisiera desarrollar.
9 de abril de 2008
Evento en línea para desarrolladores
Entre todo el mail que me llega, encontré algo interesante: el CodeGear Latin America Developer Conference, evento de tres días, que se realizará en línea. Habrán charlas de distintos expositores de latinoamérica (hay uno de Guatemala), y se mira interesante para conocer
¿Pero quién es CodeGear? CodeGear es la nueva "marca" de las herramientas de desarrollo de Borland. Muchos buenos recuerdos con los famosos Turbo (Pascal, C, C++, Prolog), que ahora son consideradas "históricas".
Información del evento está disponible aquí: http://info.borland.com.br/LATAM/EventRegistration/edm/online/javaday2008/edmes.html
TV: Hoy comienza The Office otra vez!
TV on DVD: Star Trek Captain's Log Fan Collective (vino del wishlist)
Libro: The Pillars of the Earth
Música: Borré mi iPod con 70 gigaz de música...estoy poniendo ahora sólo los "picks"
¿Pero quién es CodeGear? CodeGear es la nueva "marca" de las herramientas de desarrollo de Borland. Muchos buenos recuerdos con los famosos Turbo (Pascal, C, C++, Prolog), que ahora son consideradas "históricas".
Información del evento está disponible aquí: http://info.borland.com.br/LATAM/EventRegistration/edm/online/javaday2008/edmes.html
TV: Hoy comienza The Office otra vez!
TV on DVD: Star Trek Captain's Log Fan Collective (vino del wishlist)
Libro: The Pillars of the Earth
Música: Borré mi iPod con 70 gigaz de música...estoy poniendo ahora sólo los "picks"
2 de marzo de 2008
Iron Maiden en Costa Rica
¡Qué espectáculo! El concierto de Iron Maiden en Costa Rica fue de lo mejor que he visto. Entre lo notable fue:
- El orden y entusiasmo de los fans
- El show que puso Dickinson, con disfraces y todo
- La calidad de músicos del grupo
- Canciones diferentes a lo esperado
Lo malo:
- La salida del estadio, no era posible sacar a tanta gente por unos pequeños túneles
- El sonido no fue de lo mejor
- La apertura del concierto
El "Set List" fue:
0 - Transylvania (instrumental, mientras se mostraba un video de la llegada
1 - Aces High
2 - 2 Minutes to Midnight
3 - Revelations
4 - The Trooper
5 - Wasted Years
6 - The Number of the Beast
7 - Can I Play with Madness
8 - Run to the Hills
9 - Rime of the Ancient Mariner
10 - Powerslave
11 - Heaven Can Wait
12 - Fear of the Dark
13 - Iron Maiden
Encore
14 - Moonchild
15 - The Clairvoyant
16 - Hallowed be Thy Name
25 de febrero de 2008
Take them....to the iron maiden!
¡Extra credit para el que sepa en qué película dicen la frase del título! Mañana salgo para Costa Rica al concierto de Iron Maiden, va un buen grupo de gente de toda Centroamérica, va a ser un evento muy grande. A ver si salen buenas fotos!
4 de febrero de 2008
Primer post del año - rentando videos en Internet
Un poco tarde para el 2008. En realidad he visto algunos temas interesantes que contar por acá, pero el primero que voy a tocar es sobre la renta de películas en el iTunes Music Store (iTMS).
Antes que nada, para que la iTMS funcione en estos trópicos, se puede habilitar con una tarjeta prepagada de iTunes, que algún amigo, familiar o remesador puede traerse de los Estados. El sistema permite redimir las tarjetas prepagadas haciendo caso omiso de la ubicación geográfica de nuestra computadora, lo que habilita servicios como por ejemplo la bajada automática de Album Artwork, la compra de juegos para iPods, etc.
Resulta que había comprado hace un tiempo una tarjeta de $15, principalmente para tener la cuenta habilitada, y poder tener el artwork. Entonces, cuando ví el keynote de Steve Jobs de este año, anunciando la renta de películas pensé en probarlo.
La oportunidad se dió cuando me dieron ganas de ver Star Trek II: The Wrath of Khan, que en realidad nunca la había visto, y los fans la consideran la mejor de la serie. Entonces, la fui a buscar a varios video clubs, y por lo vieja que es la película, ninguno lo tenía.
Por esto me decidí a probar la renta del iTMS. La busqué, estaba lista y me daba la opción de comprarla por $9.99 o rentarla por $2.99. Como el precio es más o menos lo que se pagaría aquí, incluyendo la gasolina, tiempo, etc. entonces le dí click al botón de Rentar.
La película era un archivo de 1.2 GB, que se tardó como 4 horas en bajar. Cuando estuvo lista me dijo que tenía 30 días para verla, pero que cuando presionara PLAY, entonces me quedarían sólamente 24 horas para verla. La dejé para el viernes.
No voy a hacer review de la película como tal, si uno es fan de Star Trek, pues es bastante buena.
La calidad del video es buena, resolución de DVD. Como era una película vieja, el film como tal era de mala calidad, oscuro y con poco detalle. El archivo traía cortes de capítulo, pero no sonido alterno (otro lenguaje), ni subtítulos/captions.
Y el servicio? Bueno, me gustó mucho poderla rentar por Internet y así ver cómo será en el futuro la distribución digital de contenidos. No me gustó la gran cantidad de protecciones exageradas que traía la película: 24 horas para verla, no funcionaba en mi iPod 5.5G, pero si en un Nano 3G, 30 días para tenerla máximo, si usaba un cable de iPod video normal no podía verla en la TV, y si quiero verla en TV, tengo que usar un Apple TV o un cable nuevo.
Poco a poco mejorarán estos métodos. ¿Qué tal sería un servicio como éste para los partidos de la liga nacional?
Libro: The Pirate's Dilemma y Sick Puppy
Música: Iron Maiden (preparación para ir al concierto)
Videogames: Wii Sports, especialmente Wii Tennis
27 de noviembre de 2007
You can't hide from the Grim Reaper. Especially when he's got a gun.
Una cita clásica de Grim Fandango, uno de los mejores juegos de Lucas Arts, y tema de este post: jugando en la Macintosh. Sólamente haré referencia a un par de juegos que he probado, y que me ha resultado buenísimo el funcionamiento:
1) Grim Fandango (por supuesto), usando GrimX, que es un "wrapper" alrededor de Residual, un motor de LUA parte del proyecto SCUMMVM para correr los juegos 3D. Según la documentación, se puede llegar hasta cierta parte del año 2 del juego, pero luego hay problemas que detienen el programa. No he llegado hasta allí.
2) Diablo II y la expansión Lord of Destruction, funcionan increiblemente bien en OS X Tiger y Leopard, luego de bajar el instalador basado en Carbon directamente desde Blizzard. Los CDs originales traen un instalador OS 9, pero como Leopard ya no trae el subsistema Classic, los ejecutables viejos ya no corren, aún en Rosetta. De todas maneras el nuevo instalador permite ponerles los últimos parches al juego, y que funcione en Battle.net. Por cierto, para evitar el tener que meter el CD cada vez que uno juega, se puede hacer un disk image del Play Disk (.DMG) con Disk Utility, se monta cada vez, y el juego lo acepta para arrancar. Nice.
Música: Led Zeppelin
DVD: Looney Tunes Golden Collection
Libro: iWoz
OS: Leopard 10.5.1
1) Grim Fandango (por supuesto), usando GrimX, que es un "wrapper" alrededor de Residual, un motor de LUA parte del proyecto SCUMMVM para correr los juegos 3D. Según la documentación, se puede llegar hasta cierta parte del año 2 del juego, pero luego hay problemas que detienen el programa. No he llegado hasta allí.
2) Diablo II y la expansión Lord of Destruction, funcionan increiblemente bien en OS X Tiger y Leopard, luego de bajar el instalador basado en Carbon directamente desde Blizzard. Los CDs originales traen un instalador OS 9, pero como Leopard ya no trae el subsistema Classic, los ejecutables viejos ya no corren, aún en Rosetta. De todas maneras el nuevo instalador permite ponerles los últimos parches al juego, y que funcione en Battle.net. Por cierto, para evitar el tener que meter el CD cada vez que uno juega, se puede hacer un disk image del Play Disk (.DMG) con Disk Utility, se monta cada vez, y el juego lo acepta para arrancar. Nice.
Música: Led Zeppelin
DVD: Looney Tunes Golden Collection
Libro: iWoz
OS: Leopard 10.5.1
31 de octubre de 2007
¿¡¿Adelantándose a los sitios de noticias?!?
Bueno, mi post sobre la Mac Mini hablaba acerca del firewall de OSX, que está apagado por default...y ahora veo en Digg, Slashdot, Macrumors, etc. que unos investigadores alemanes acaban de descubrir esto en Leopard...creo que hay que poner un site de investigaciones ahora...
29 de octubre de 2007
Habemus Pomum
En spanglish, el título de este post es "tenemos Apple". Cambié la Pentium III que había comentado en el blog antes (que estaba ya desahuciada, nadie la quería usar, hacía un ruido fuertísimo, no tenía espacio en disco, etc.) por una Mac Mini.
Al instalarla, el primer snafu fue el teclado. Por alguna razón Apple no ha tomado mucho en cuenta el mercado de América Latina, y considera que se puede utilizar el teclado en español, como se maneja en la península ibérica. Sí, es el mismo lenguaje. Pero por ejemplo, los acentos están en una posición diferente (por eso, a veces vemos gente que escribe asì con tildes al revès), aparece la cedilla y otros cambios a los que no estamos acostumbrados. Entonces, las teclas no aparecían adecuadamente y tuve que instalar un mapa de teclado que encontré en Internet para que OS X reconociera el layout latinoamericano.
Es importante notar que se considera que OS X es muy seguro, pero por ejemplo, el firewall viene desactivado por default. Hay que entrar a las preferencias de Sharing para activarla.
Le instalé también un poco de software comercial para probar, como VMware Fusion (funciona muy bien) y Notes.
En otro post hablaré sobre la impresión (not looking good al momento con mi impresora de $39.99 usada en la red), y la integración con Windows.
Música: Across the Universe (soundtrack)
Libro: iWoz
TV on DVD: Battlestar Galactica season 3.0
11 de septiembre de 2007
Concursito
Entre todo el spam que llega, de pura casualidad leí uno que venía de Intel, sobre un concurso que patrocinan, el cual consiste en enviar historias de ciencia ficción que hablan sobre computadoras o tecnología multicore o de procesamiento paralelo. En lo personal envié una entrada sobre Shalmaneser, el computador omnisciente en el libro Stand on Zanzibar de John Brunner. A ver que tal.
Al postear mi entrada, me mandaron un email que decía:
"Thank you for participating in the Reading for Multi-Core contest. Your entry will be posted live on the contest website as soon as one of theIntel judges validates your entry. Head back to www.intel.com/software/readingformulticore and be sure to cast votes for your favorite entries."
A ver si lo visitan y votan por mi ;-)
Al postear mi entrada, me mandaron un email que decía:
"Thank you for participating in the Reading for Multi-Core contest. Your entry will be posted live on the contest website as soon as one of theIntel judges validates your entry. Head back to www.intel.com/software/readingformulticore and be sure to cast votes for your favorite entries."
A ver si lo visitan y votan por mi ;-)
Suscribirse a:
Entradas (Atom)