May 14 2012

The land of Lisp

Tag: basicoverdrive @ 1:19 am

En el post de hoy, simplemente introduciremos un nuevo libro, ideal para aprender Lisp mediante el desarrollo de juegos.

Actualmente existen pocos libros sobre este interesante y curioso lenguaje. Distinto al resto, pero tan particular como potente, lo cual lo hace interesante, pero es al mismo tiempo desconocido para muchos, incluso desarrolladores avanzados, que desconoceran lo interesante de este lenguaje pensando que simplemente es un lenguaje especializado en Inteligencia Artificial, lo cual es bastante incorrecto.

El libro que he comprado se llama: The Land of Lisp y tiene un video promocional:

watch?v=HM1Zb3xmvMc

La web promocional del libro se encuentra en http://landoflisp.com/ y contiene un resumen de interesantes caracteristicas que tiene este lenguaje y que no posee ningun otro de los convencionales, como puedan ser conceptos avanzados como las continuaciones.

El libro comienza con una introduccion bastante interesante, contando la historia de la informatica y lenguajes de programacion, haciendo una analogia con la evolucion de las especies, haciendo algunas bromas bastante curiosas. El primero capitulo nos habla de Lisp, los distintos dialectos que existen y para que proposito. Asi como la instalacion de cada uno de los interpretes mas importantes para estos lenguajes en los distintos sistemas operativos. A partir de aqui, el libro explica capitulo a capitulo, conceptos del lenguaje Lisp mediante la implementacion de juegos para hacer ello mas ameno.

Como curiosidad, el libro en el primer capitulo tiene un test, en el que puedes elegir entre ser una oveja, un perro rabioso o una oveja mutada con perro rabioso; segun el perfil que se escoja, uno entendera haciendo una broma con analogia incluida, el tipo de lenguaje que busca. Como veis, todo muy curioso, divertido y gracioso, al mismo tiempo que se aprende un lenguaje interesante, desconocido y posiblemente de los mas peculiares junto con Haskell.

 


Ene 19 2012

Editor Hexadecimal en emacs: Hexl-mode

Tag: basicoverdrive @ 9:43 pm

Generalmente no suelo necesitar emplear el uso de editores hexadecimal, sin embargo existe un modo en especial en emacs para usarlo sin necesidad de salir a la consola. Recordemos que en consola podemos hacer uso de od, objdump y el comando file entre otros, para analizar ficheros. Para lanzar el editor hexadecimal en emacs tan solo debemos invocar a la funciona mediante M-x hexl-mode. Eso editara el fichero en modo hexadecimal.

A la izquierda la ventana con el modo hexl y a la derecha una copia del fichero empleando el whitespace-mode

La primera fila muestra el titulo de la tabla representada a continuacion. El primer valor es la direccion de memoria donde se almacena el contenido del fichero, y las siguientes filas indicaran su offset. Mas tarde nos encontramos con los valores que toma cada una de esas celdas de memoria, caracter a caracter (byte a byte realmente, en grupos de dos) en su valor hexadecimal, hasta el 15 (f). Recordemos que internamente el computador trabaja en hexadecimal por comodidad porque es como se emplea la memoria, de 16 en 16 bytes (de 0 al 15 – 0 a f). Finalmente a la derecha tenemos la traduccion en ascii de cada una de esas posiciones. En la otra ventana podemos comparar con el whitespace-mode ademas.

El fin de este articulo es solo nombrar que es posible emplear este modo (y bastante comodo y rapido). Sin embargo, si dare unas nociones basicas para aquellos que esten interesados en comenzar a trabajar y debuggear algun problema con algun fichero.

Antes de nada decir que es importante saber en que formato esta el fichero, si en DOS o en Unix. En el caso de estar en formato Unix el famoso CRLF es 0d0a. Aqui tenemos algunas valores hexadecimales importantes a la hora de analizar los ficheros:

  • CRLF -> 0d0a
  • INTRO -> 0a
  • SPACE -> 20
  • Control+z -> 1a (recordemos que en unix el control+z se suele emplear como el char de EOF)
  • 0 -> 30 (el numero 0)
  • . -> 2e (el punto)

En asciitable y asciicl es posible encontrar una lista mas completa de otros caracteres generalmente menos interesantes.

Generalmente si tenemos un error de EOF prematuro, lo que debemos buscar es cualquier caracter con valor menor a 0x20, entonces es sospechoso. Aunque a veces el problema esta en los parsers que no esperan (segun el formato del fichero) cierto tipo de caracter y se encuentran con un espacio, intro, o un caracter aunque sea imprimible no esperado, como ha sido el caso con el que me ha tocado pelear hoy.

Por supuesto es posible cambiar un caracter cualquiera por otro, para ello debemos darle el valor que queramos alli donde nos encontremos, pudiendo reemplazar un 1a (de EOF) por un 0a de intro o cualquier otro caso.

  • C-M-d : inserta un byte en formato decimal
  • C-M-o : inserta un byte en formato octal
  • C-M-x : inserta un byte en formato hexadecimal
  • C-x [ : Se mueve al principio de una pagina (1 Kb)
  • C-x ] : Se mueve al final de una pagina (1 Kb)
  • M-g : Salta a la direccion especificada en hexadecimal.
  • M-j : Salta a la direccion espcificada en decimal

Finalmente con C-c C-c para salir del editor hexadecimal de emacs para volver al anterior y mas comun para los mortales.

Gracias a |[TDP]| por sus sugerencias respecto al tema ha sido posible escribir este pequeno articulo.


Nov 26 2011

Emacs linum

Tag: basicoverdrive @ 2:27 pm

Este articulo sera simple y conciso. Sin embargo y aunque no sea fundamental ya que en el modeline por defecto nos indica el numero de linea en el que nos encontramos, cuando trabajamos con codigo fuente si puede ser interesante tener en el margen izquierdo el numero de lineas para todo el buffer mostrado. De esa forma no tendremos que perder la vista cada vez hacia el modeline.

Primero deberemos descargar linum aqui: http://www.emacswiki.org/emacs/linum-ex.el (notese que esto es una version extendida de la version que yo utilizo y por lo tanto mas moderna)

Y acceso directo al fuente en texto plano y sin formato aqui: http://www.emacswiki.org/emacs/download/linum-ex.el

De todos los scripts que encontre, por facilidad, simplicidad y rapidez a la hora de configurarlo, decidi finalmente usar linum. La configuracion sera muy simple, en mi caso agregue algo asi:

;; —————————————————————————
;; Linum (line numbers) M-x linum-mode to enable
;; —————————————————————————
(load-file «~/.emacs.d/linum/linum.el»)
(require ‘linum)
(setq linum-format «%d «)
;(autoload ‘linum «linum» «Line numbers for buffers.» t)
(add-hook ‘find-file-hook (lambda () (linum-mode 1)))

Por supuesto, debemos cercionarnos que el fichero linum.el tenga esa ruta. En mi caso, todo lo que voy anadiendo a emacs lo pongo dentro del directorio .emacs.d y tengo al menos un directorio para cada feature diferente, aunque tan solo tenga un fichero .el. De esa forma mantengo un orden estricto en todos los scripts, plugins o features para esta herramienta.

El resultado final sera algo asi:

Otras alternativas a linum se pueden encontrar en el wiki de emacs, mas especificamente aqui: http://www.emacswiki.org/emacs/LineNumbers


« Página anteriorPágina siguiente »