Archivo

Archive for 31 agosto 2010

Aumenta tu Productividad con GNU/Emacs

31/08/2010 2 comentarios

Introducción

La primera herramienta que basa su desarrollo en compartir código dentro de una comunidad, sigue teniendo una comunidad fuerte que lleva el uso de este editor hasta límites insospechados. En un momento en el que se mueven cifras millonarias alrededor del Software Libre, este editor se sigue manteniendo por aportaciones desinteresadas, ó más bien interesadas en cuestiones culturales y, de productividad personal y profesional. Así mismo, la historia de GNU Emacs es la historia de los hackers de la IA, de Lisp y de la investigación, pero también es usado en entornos donde se busca la rentabilidad económica.

En este artículo vislumbraremos cómo ser productivo con GNU Emacs, tanto en tareas exclusivas de programación, de uso general del editor y, casi cualquier tarea que se necesite hacer delante de un ordenador.

Conceptos Generales de Uso del Editor

Antes de ahondar en temas más avanzados abramos un emacs y aprendamos a diferenciar window, buffer, mini-buffer, puntero y marca.

Buffer: Podemos decir que un buffer es una lupa a un fichero emacs. Desde un mismo buffer podemos diferenciar una parte de un solo fichero. Desde distintos buffers podemos ver uno ó varios ficheros. Desde un buffer se muestra contenido para ser editado, si bien también tenemos buffers de solo lectura.

Window: El concepto de ventana en emacs es similar al mismo en otros entornos. Esto es, un elemento de información que es gestionada por un gestor de ventanas. Un proceso puede tener asociado a un numero n de ventanas y buffers.

Mini-buffer: Es el lugar donde se envían comandos al editor y se sitúa en el pie de la ventana (window).

Puntero: Es un diminuto rectángulo parpadeando que se sitúa donde estás escribiendo.

Marca: A veces, es necesario dejar una marca con C-SPACE para cortar, copiar, o invocar una función en una determinada región.

Productividad con GNU/Emacs

En esta sección se mostrarán algunas características para volverte productivo usando GNU Emacs. Debemos pensar que un programador pasa muchas horas delante de un editor de textos, tener un solo editor que te libere de tareas monótonas es claramente beneficioso.

Si nunca has usado Emacs lo primero que tendrás que empezar a aprender serán atajos de teclado, ¿has probado a bajarte un quicksheet?. Si ya conoces atajos de teclado de bash, prueba con esos y si no puedes hazlo al revés. En cualquier caso con C-h t abres un tutorial con el que te divertiras aprendiendo atajos comunes

Modos

Una de las características que hacen a Emacs interesante es que hay modos para casi cualquier lenguaje de programación por raro que éste sea. Esto es, colorines, atajos de teclado, plantillas, etc. De este modo, sabiendo usar de manera eficaz el editor y sabiendo programar puedes programa muy rápido en cualquier lenguaje. Hay otros programadores que prefieren aprender un entorno en función del lenguaje que vayan a usar …

Con M-x sql-mode, por ejemplo, estaríamos invocando al modo sql, si no nos gusta el modo en el que nos toca programar podemos volver a fundamental-mode que es el modo que nos permite escribir texto de la manera más simple posible.

Para conocer los atajos del modo mayores en el que se está se puede utilizar C-h m y para conocer atajos disponibles en ese momento C-h b. Esto es distinto debido a que aparte de modos mayores hay modos menores, la diferencia estriba en que un modo mayor se adapta a la tarea general que estás desarrollando mientras que un modo menor se adapta a una tarea específica dentro de la tarea general. Por ejemplo, si estamos escribiendo un programa en c, podemos usar c-mode, pero dentro de los comentarios podría

Si bien la instalación de nuevos modos no es difícil y, hay paquetería de éstos para muchas distribuciones, también existe una manera estándar de instalar paquetes en GNU Emacs llamada ELPA

Variables

Lo primero que se hace cuando te enfrentas a una nueva herramienta, ya sea un editor de textos, un servidor o cliente de correo, jabber, ó lo que sea es hacer pequeñas personalizaciones. Esto en emacs suele ser equivalente a asignar un valor a una variable. Veamos algunas personalizaciones simples que pueden ser añadidas a un .emacs:

;;; quitar la barra de navegación

(tool-bar-mode nil)

;;; introducir colorines

(global-font-lock-mode)

C-h v describe el valor de una variable dada. Una variable interesante es auto-mode-alist esta variable nos dice que modos están asociados a que extensiones de ficheros, así si queremos asociar ficheros html a html-helper-mode podemos hacer lo siguiente:

(setq auto-mode-alist (cons '("\\.htm$" . html-helper-mode) auto-mode-alist))

Macros

Si hacemos una tarea de manera repetitiva (ir al comienzo de un párrafo, cortar la primera palabra, pegarlo al final del párrafo, ir al siguiente párrafo, ...), nos puede resultar interesante grabarlo para llamar a esa tarea con un atajo de teclado. La manera de hacer esto es comenzar a grabar con C-(, después ejecutas las acciones: (ir al comienzo de un párrafo, cortar la primera palabra, ir al final del párrafo y pegarlo) y paras la grabación. Cuando quieras utilizarlo puedes llamarlo con C-x e, por ejemplo, desde el siguiente párrafo donde quieres introducir la acción.

Funciones

Si tenemos una macro que queremos seguir utilizando en futuras sesiones de emacs, lo más cómodo es guardarlo como una función y añadirla a tu .emacs.

Algo similar a lo que se ha explicado en la sección de macros sería decidir que lo que se acaba de escribir es un subtítulo en formato emacswiki, para ello se puede recurrir a la siguiente función:

(defun subtitle()
  (interactive)
  (beginning-of-line)
  (insert "==")
  (end-of-line)
  (insert "==")
  (forward-line 1))

Para ejecutar la función se podría llamar a M-x subtitle. Después puede resultar interesante asociar un atajo de teclado con el siguiente código:

(global-set-key "\C-c\st" 'subtitle)

También es posible ir desde el atajo de teclado a la función C-h k y de la función al código fuente C-h f.

Expresiones Regulares

Emacs también tiene un buen soporte para expresiones regulares, como muchos otro editores. Para usarlos mientras estamos escribiendo y queremos buscar haciendo uso de expresiones regulares se puede usar isearch-forward-regexp (C-M s), o reemplazar con query-replace-regexp (C-M %).

Puede utilizar las funciones antes mencionadas para actuar sobre buffers, pero para actuar sobre cadenas también puede utilizar replace-regexp-in-string. Ejemplo de uso: (replace-regexp-in-string "foo*" "fu" "Fight foo for food!)"

Autoinsert

Con autoinsert al abrir un fichero de una determinada extensión incluiremos algún texto en dicho fichero. Por ejemplo:

    (require 'autoinsert)
    (auto-insert-mode)  ;;; Adds hook to find-files-hook
    (setq auto-insert-directory "~/.mytemplates/") 
    (setq auto-insert-query nil) 
    (define-auto-insert "\.txt" "txttemplate")

Así, estamos insertando el contenido de txttemplate al abrir un fichero de extensión .txt. También es posible usar autoinsert en combinación con skeleton. Esto evita el tedioso trabajo de añadir nota de copyright, librerías a cargar u otras líneas que suelen cambiar poco mientra se programa.

Skeleton

La finalidad de skeleton es dar unas plantillas para las que solo hay que rellenar algún dato. Por ejemplo,

(define-skeleton primitiva
  "Declare a primitive function and an example to use it."
  nil
  (read-string "Nombre de la Primitiva Lisp: ")
  ": "
  (read-string " Descripción de la Primitiva Lisp: ") \n
  "Ejemplo de Uso: ")

Este código no es más que un formulario para ir haciendo una chuleta de primitivas lisp y, así vamos poniendo el nombre de la primitiva, la descripción y un ejemplo de uso. Una vez que está cargado y/o añadido a nuestro .emacs se llama con M-x primitiva.

Abbrevs

En ocasiones, resulta útil construir alguna abreviación que por larga resulta molesta de escribir entera. Ésta es la utilidad de abbrev. Veamos como se define una tabla de abbrevs:

(setq-default abbrev-mode t)
(define-abbrev-table 'text-mode-abbrev-table '(
    ("foriter" "" java-iter-skeleton 0)
    ("iternext" "" java-iter-next-skeleton 0)
    ;; ...
    ("logdebug"
     "org.apache.log4j.Logger.getLogger(getClass().getName()).debug()"
      nil 1)
    ;; ...
    ("ctc" "true" nil 1)
    ("cfc" "false" nil 1)
    ("cnc" "null" nil 1)
    ("á" "á" nil 1)
    ))

A la izquierda de la tabla encontramos las abreviaturas y a la derecha el texto o función al que estamos llamando. Una vez cargado en el emacs el texto abreviado con C-x a e se expande el texto, también podemos expandir una región con M-x expand-region-abbrevs.

Funciones que llaman a comandos unix

En otras ocasiones nos interesa que el poder de la conocida línea de comandos llegue hasta nuestro emacs, podemos ver un par de ejemplos para entender a qué nos referimos

 (defun insert-output (command)
   (interactive "sCommand: ")
   (insert (shell-command-to-string command)))

 (defun output-to-buffer (buffer command)
   (interactive "sBuffer name: \nsCommand: ")
   (get-buffer-create buffer)
   (call-process command nil buffer)
   (switch-to-buffer (get-buffer buffer)))

En ambos ejemplos podemos insertar la salida de un proceso dentro de nuestro buffer. Hay otras maneras de interactuar con unix desde emacs como M-x shell ó M-x ansi-term o M-!, y así evitamos salir de emacs, pero así no extendemos nuestro emacs.

Conclusión

Emacs tiene poderosos y simples mecanismos de extensibilidad que hacen que tu editor se comporte tal y como tu quieres realmente. En este artículo, solo hemos visto unas pocas herramientas, sin embargo, quedaría mucho por aprender. Así mismo, tiene una comunidad fuerte: listas, irc, manuales, ... que sigue creciendo según pasan los años. Así, las posibilidades de Emacs son tan sorprendentes, útiles y divertidas que es interesante en invertir algún tiempo en usarlo para siempre.

Referencias

Categorías:emacs

Toggle

28/08/2010 1 comentario

Hoy comentaré como hacer la típica función toggle para hacer que aparezca y desaparezca un div de varias maneras distintas:

Usando Javascript plano

Esta es la mejor opción si no queremos estar descargándonos el jquery ó simplemente no queremos usarlo.


function toggle-js(div){
var div = document.getElementById(div)
if (div.style.display == 'none') {
div.style.display = 'block'
} else {
div.style.display = 'none'
}
}

Usando Jquery

Eso mismo que hemos hecho podemos hacerlo usando selectores jquery


function toggleJquery() {
if ($('#div').css('display') == 'none') {
$('#div').css('display', 'block');
} else {
$('#div').css('display', 'none');
}
}

Aunque si queremos usar jquery lo más cómodo es usar la función toggle que ya viene predefinida. Podemos utilizarla de la siguiente manera:

$('#div').toggle();

Merece la pena echarle un vistazo a la documentación de la función toggle, ya que esta función es muy potente y presenta muchas opciones.

Categorías:javascript

Estadísticas de Uso del Software Libre

25/08/2010 5 comentarios

Reconozcamoslo GNU/Linux fracasa en cuanto al sistema de escritorio utilizado.

Sin embargo y según Netcraft 9 de los 10 servidores más confiables de Internet FreeBSD o Linux y el servidor web apache sigue siendo el más utilizado en Internet. De entre los 20 sitios web más populares de Internet podemos encontrar 2 que son aplicaciones web libres: Wikipedia (7) y WordPress (19).

En Usage of Operating System vienen muchas estadísticas curiosas y de muy diversas fuentes como que en el mercado de los clientes web GNU/Linux está en un 1%, en el mercado de Netbook y Tablets está en el 32%, en dispositivos móviles está al 12%, en servidores al 20% y, dónde GNU/Linux arrasa es en materia de supercomputadores al 90%.

Los que eligen usar GNU/Linux se decantan por la distribución Ubuntu según DistroWatch, seguido por Fedora, Mint, OpenSuse, Mandriva y Debian en este orden ¡jamás había oido hablar de Mint!

Categorías:software libre

Actualizar Drupal

Esto es un paso a paso para actualizar el core de drupal.

  1. Se hacen copias de seguridad de la BBDD y del sistema de ficheros
  2. Se descarga y descomprime la versión a la cual se va a a hacer el update.
  3. cp -r www/sites www/cgi-bin drupal-new
  4. Se pone el sitio en modo mantenimiento
  5. Se desactiva el theme personalizado si lo hubiera dejando garland o similar
  6. Se deshabilitan todos aquellos módulos que no vengan incluidos en el core de Drupal (antes se copia el listado de módulos ya instalados, por ejemplo con un guardar como)
  7. mv www http://www.old
  8. mv drupal-new www
  9. Se lleva a cabo la ejecución del script update.php
  10. Se habilitan de nuevo los módulos extras, se activa el theme y se quita el modo matenimiento
Categorías:drupal

Blog en WordPress

08/08/2010 1 comentario

Por fin, me he animado a crear un blog. He elegido wordpress porque es software libre y te permite crear un blog a golpe de click. También me ha parecido interesante que wordpress.com es el 19 sitio más visitado en Internet según Alexa. Además tiene una funcionalidad que te permite exportar los contenidos vía un xml y, por ejemplo, drupal tiene wordpress import. El theme que he elegido es inove.

Espero crear muchas entradas en este blog.

Categorías:wordpress
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.