w.bloggar

(0 comentarios)

Este es simplemente un post de prueba para comprobar que tal funciona w.bloggar, una herramienta para publicación en blogs para Windows. Con un primer vistazo a la interfaz parece una buena herramienta, con opciones de formateo de texto, ayuda para insertar etiquetas html y correción ortográfica pero ha sido algo complicado ponerlo en marcha. En un primer momento me daba un error: ‘unable to parse the xml response, parse reason : falta un espacio en blanco necesario.’ que se soluciona, por si alguien tiene el mismo problema, editando el archivo cms.ini dentro de la subcarpeta cms que se encuentra en la carpeta donde instalamos w.bloggar y cambiando api.blogger.com por www.blogger.com.

Nuevo agujero de seguridad en Windows XP/2003

(2 comentarios)

El nuevo agujero podría permitir a un atacante tomar el control completo del sistema afectado (Symantec lo ha calificado de fallo crítico) aprovechando una vulnerabilidad recientemente descubierta en la forma en que el Centro de Ayuda y Soporte de Microsoft trata la validación HCP URL.
El parche para la vulnerabilidad puede obtenerse en windowsupdate o directamente desde:

Identación en Vim

(0 comentarios)

Añadimos esto al fichero .vimrc:

vnoremap < vnoremap > >gv

Una vez hecho esto ahora cuando estemos en modo visual el pulsar < o > identará o quitará la identación de la línea seleccionada.

Foobar2000 0.8.2 Beta 1

(1 comentario)

Foobar2000 es un reproductor de música para Windows que destaca por su bajo consumo de recursos y por la calidad de sonido que se consigue con el.
Esta beta puede ser descargada vía bit torrent desde la página web de foobar2000 o vía web desde betanews.

Bloglines Toolkit 0.9

(1 comentario)

Ya comenté hace un par de días Bloglines Tooklit, una extensión para Mozilla/Mozilla Firefox que integra el notificador de Bloglines dentro de nuestro navegador.
Hoy su creador ha liberado la versión 0.9 que corrige alguno de los fallos de la versión anterior (el bloglines se refieren a esta versión como 1.1).

  • Arreglados varios fallos con Javascript
  • Añadida posibilidad de pausar el notificador
  • Incrementados los minimos para el notificador
  • Actualizada la extensión para Mac OS X

Iteraciones de orden superior sobre listas

(0 comentarios)

  1. reduce: Aplica una función a pares de elementos de una lista hasta dejarla en un solo valor.
    (defun reduce (f l base)
    (if (endp l)
    base
    (funcall f (car l) (reduce f (cdr l) base))))

  2. map: Aplica una función a cada elemento de una lista y devuelve una lista con el resultado de aplicar la función a cada elemento.
    (defun map (f l)
    (if (endp l)
    nil
    (cons (funcall f (car l)) (map f (cdr l)))))

  3. accumulate: Practicamente igual a reduce. Es recursión de cola, por lo que es mas eficiente que reduce.
    (defun accumulate (f l acum)
    (if (endp l)
    acum
    (accumulate f (cdr l) (funcall f acum (car l)))))

  4. filter: Verifica que los elementos de una lista cumplan una determinada condición, devolviendo los elementos que cumplen esa condición.
    (defun filter (p l)
    (if (endp l)
    nil
    (if (funcall p (car l))
    (cons (car l) (filter p (cdr l)))
    (filter p (cdr l)))))

  5. exists: Devuelve el primer elemento de la lista que verifique una determinada condición o falso si ninguna la cumple.
    (defun exists (p l)
    (if (endp l)
    nil
    (if (funcall p (car l))
    (car l)
    (exists p (cdr l)))))

  6. for-all: Devuelve true si todos los elementos de una lista cumplen una determinada condición.
    (defun for-all (p l)
    (if (endp l)
    t
    (if (funcall p (car l)) (for-all p (cdr l)) nil)))

  7. zip: Toma dos listas de igual longitud y devuelve la lista cuyo enésimo elemento es el resultado de aplicar la función pasada como parámetro a el elemento enésimo de cada lista.
    (defun zip (f l1 l2)
    (if (endp l1)
    nil
    (cons (funcall f (car l1) (car l2)) (zip f (cdr l1) (cdr l2)))))

Lisp: Argumentos a funciones

(1 comentario)

(defun nombre función (arg1argN) … )

arg1…argN son lo que se llaman argumentos regulares, los típicos de cualquier lenguaje de programación. En Lisp tenemos también lo que llamamos parámetros opcionales.

Argumentos opcionales
(defun nombre función (arg1argN &optional op1opN)

Se colocan siempre primero los argumentos regulares. Los valores que se pasan al llamar a esta función se ligan de izquierda a derecha a los nombres de los parámetros como en cualquier otro lenguaje. Si falta algún valor para opcionales el valor del opcional será nil.

Valores por defecto
(defun nombre función (arg1argN &optional (op1 valor1)opM))

Podemos darle un valor por defecto a un argumento opcional, de forma que si no se pasa un valor que se ligue a ese parámetro opcional en lugar de nil se tome como valor el valor por defecto. Para hacer esto como vemos se incluye en una lista el nombre del parámetro y su valor por defecto, que tiene que ser un valor fijo, no puede ser una expresión.

Flag de presencia
(defun nombre función (arg1argN &optional (op1 valor1 op1-provided) … opM) …

El flag de presencia evalua a nil si no se pasó un valor para ese parámetro opcional y true si si se le pasó. Nos puede servir por ejemplo en el caso en que el valor por defecto sea nil, en cuyo caso sin este flag no se podría diferenciar entre el caso en que no se especificara ningún valor para ese parámetro o que se especificara pero este fuera nil.

Campos clave
(defun nombre función (arg1argN &key clave1 … &key claveN) …

Es similar a los parámetros opcionales pero se le asocia un nombre. En el caso de que tenga muchos parámetros opcionales puedo utilizar los campos clave para asociar un nombre al parámetro opcional en la invocación de la función (en la llamada se usa con :nombre-clave, como si fuera una constante).
Por ejemplo sea el prototipo de la función:

(defun incrementar (n &key operacion &optional (i 1))

Se llamaría a la función asi:

(incrementar 5 :operacion ‘inc 7)

Campos clave con valor por defecto
(defun nombre función (arg1argN &key (clave1 valor) …)

Similar a los opcionales con valor por defecto, la única diferencia entre los argumentos opcionales y los campos clave es que al llamar a la función en los campos clave hay que incuir el nombre del campo.

Como último apunte, si no conocemos el número de parámetros que voy a tener se pueden usar los argumentos de resto:

(defun nombre función (arg1argN &key clave &optional opcional &rest largs)

Todos los parámetros que no se hallan ligado se introducirían en una lista llamada largs.

Depuración en Lisp

(0 comentarios)

  • (describe #’nombre funcion) Nos da una descripción completa de la función.
  • (describe objeto) Nos da una descripción de variables y otros símbolos.
  • (apropos nombre objeto) Devuelve las descripciones de los objetos relacionados con el que hemos buscado (por eso el apropos; a proposito de)
  • (dribble “nombre fichero”) Forma especial que hace que las iteraciones con Lisp se escriban en un fichero además de imprimirse por pantalla.
  • (dribble) Sin nombre de fichero hace que deje de escribirse en fichero las iteraciones.
  • (trace nombre funcion) Cuando se llama a esa función muestra las llamadas (solo de esa función, si se llama a otras funciones no las muestra)
  • (time forma) Devuelve el tiempo y la memoria usada para ejecutar esa forma.
  • (step expr) Ejecuta paso a paso una expresión y a cada paso abre la shell de depuración.

Estructuras condicionales en Lisp

(4 comentarios)

  • (if condición
    expr1
    expr2)
    En el caso de que condición sea cierto se evalua expr1, en caso contrario expr2.

    (if (< nota 5)
    ‘suspenso
    ‘aprobado)

  • (cond (cond1 expr1)
    (cond2 expr2)

    (t exprN))
    Equivalente a una serie de ifs, si se cumple cond1 se evalua expr1, si no, si cond2 es cierto se evalua expr2,… El t final es opcional y dado que se cumple siempre sería equivalente a un default en un switch de java

    (cond ((< nota 5) 'suspenso)
    ((< nota 7) 'aprobado)
    ((< nota 9) 'notable)
    ((< nota 10) 'sobresaliente)
    (t ‘error))

  • (case expresion
    (valor1 expr1)
    ((valor2 valor3) expr2)

    (otherwise expr))
    Equivalente a los switchs de Java. Si expresión evalua a valor1 se ejecuta expr1, si evalua a valor2 o valor3 (si puede evaluar a mas de un valor se colocan en una lista) se evalua expr2,… Otherwise es equivalente a default en los switchs de java, se ejecuta si no evalúa a ninguno de los demás.

    Nota: case evalua con eql!!!

    (case nota
    ((0 1 2 3 4) ‘Suspenso)
    (5 ‘Aprobado)
    (6 ‘Bien)
    ((7 8) ‘Notable)
    ((9 10) ‘Sobresaliente))

Borrar archivos .avi en XP

(72 comentarios)

De vez en cuando puedes tener algún problema para borrar un archivo avi en XP ya que el sistema operativo intenta hacer una previsualización del archivo antes de hacer ninguna otra cosa con el.

Hay dos formas de tratar con este problema; podemos abrir regedit (Inicio->ejecutar, escribimos regedit), movernos hasta la clave HKEY_CLASSES_ROOT\ SystemFileAssociations\.avi\shellex\PropertyHandler y borrar el valor que se encuentra en esta clave o podemos abrir una ventana de símbolo de sistema (Inicio->ejecutar, escribimos cmd) y borrarlo desde allí.

Página 277 de 282« Primero...275276277278279...Último »