lunes 5 de diciembre de 2011

Node.js en Ubuntu 11.10

Node.js es, de forma muy somera, una forma de ejecutar desde el lado del servidor Javascript. Yo lo uso principalmente para compilar el código creado en CoffeeScript,que también para quien no lo sepa, es un pequeño lenguaje con una síntaxis que parece una mezcla de Javascript, Python y Ruby y se compila a Javascript entendible por cualquier navegador. La ventaja que tiene es que es mucho más legible, mantenible y ampliable.

Y como plataforma donde desarrollar me siento muy cómodo en Ubuntu. Para instalar cualquier programa en este Sistema Operativo suelo usar la herramienta apt-get . Sin embargo node.js y ubuntu no parece que se lleven muy bien. Como el desarrollo del primero tiene una velocidad muy rápida el segundo no consigue ofrecer, ni de lejos, las últimas versiones. Esto representa un gran problema porque las herramientas asociadas con node.js asumen que tendrás la última versión, por lo que en muchas ocasiones fallan.

La solución más rápida que he encontrado es la muestro aquí:

$ sudo apt-get update
$ sudo apt-get install git-core curl build-essential openssl libssl-dev
$ git clone https://github.com/joyent/node.git && cd node
$ git checkout v0.6.5
$ ./configure
$ make -j2
$ sudo make install
$ node --version
Después instalaremos el paquete NPM. Este es el gestor de paquetes de Node.js. Con el podremos acceder rápidamente a todas las librerías que trabajan con Node.js.
$ curl http://npmjs.org/install.sh | sudo sh
$ npm --version
Y por último lo más fácil, instalar CoffeeScript.
$ sudo  npm install -g coffee-script
$ coffee --version

jueves 30 de septiembre de 2010

MessageBox sencillo con JQuery UI

Aunque JQuery UI tiene un widget que permite mostrar fácilmente cualquier tipo de dialogo he echado en falta que vengan pre-diseñados algunos tipos muy frecuentes de usos. Por ejemplo un dialogo donde se muestre un mensaje con un formato específico (algo parecido a la función alert() de Javascript pero que siga el diseño de la página). También he echado mucho en falta el tipo de dialogo donde se pide al usuario que introduzca una cadena (al estilo del InputBox de Win32). Y como este caso puede ser visto como una extensión del primer problema he escrito esta pequeña función por si a alguien le saca del apuro.

1:  var letBox=function(t,m,v,f)  
2:  {  
3:      d='<div id="letBox" title="' + t + '"><p><span class="ui-icon ui-icon-info" style="float:left;margin:0 7px 20px 0"></span>'+  
4:          m + '&nbsp;&nbsp;<br/><input type="text" id="let" value="' + v + '"/></p></div>';  
5:      $('body').append(d);  
6:      $('#letBox').dialog({  
7:              resizable: false,  
8:              height:200,  
9:              modal: true,  
10:              buttons: {  
11:                  "Aceptar": function() {  
12:                      f($('#letBox #let').val());  
13:                      $( this ).dialog( "close" );  
14:                      $('#letBox').remove();  
15:                  },  
16:                  "Cancelar": function() {  
17:                      $( this ).dialog( "close" );  
18:                      $('#letBox').remove();  
19:                  }  
20:              },  
21:              close:function(){ $(this).remove(); }  
22:      }).keyup(function(e){  
23:          if (e.keyCode == 13){  
24:              $('#letBox').parent().find('.ui-button:first').trigger('click');  
25:          }  
26:      });  
27:      $('#letBox #let').select();  
28:  }  

La función (letBox) tiene 4 parámetros muy simples:
t
Título que tendrá la ventana
m
Mensaje que se mostrará antes de la caja de edición
v
Valor a mostrar en la caja de edición inicialmente
f
Función que será llamada si el usuario acepta el dialogo

El funcionamiento es muy sencillo y no creo que requiera mucha explicación. Solo explicaré las líneas que van desde la línea 22 a la 25. Estas líneas sirven para permitir que el usuario si está en la caja de edición y pulsa la tecla Intro se ejecute la misma acción que si hubiese pinchado en el primer botón. Así suplimos la carencia de un botón por defecto.

La forma de llamarla es muy sencillo:
1:  letBox ('Renombrar', 'Especificar nuevo nombre','Nombre antiguo',function(nuevoValor){  
2:          alert (nuevoValor);  
3:      });  

En este caso mostraría un dialogo con el título 'Renombrar', un texto donde pondría 'Especificar nuevo nombre' y un campo de texto con el valor 'Nombre antiguo'. Si el usuario le diese al botón Aceptar ejecutaría la función especificada como último parámetro y que mostraría una alerta con el nuevo valor que el usuario ha introducido.

martes 14 de septiembre de 2010

Guía rápida: Vi

Archivos
:w Guardar
:x Guardar y salir
:q Salir si no se han hecho cambios

Navegación
h Cursor a la izquierda
j Cursor abajo
k Cursor arriba
l Cursor a la derecha
w Siguiente palabra
W Siguiente palabra delimitada con un espacio
b Inicio de palabra
B Inicio de palabra delimitada por un espacio
e Final de palabra
E Final de palabra delimitada por un espacio
( Frase anterior
) Frase siguiente
{ Párrafo anterior
} Párrafo siguiente
0 Principio de línea
$ Final de línea
1G Principio de archivo
G Final de archivo
:n o nG Ir a la línea n
f<car> Volver al carácter
F<car> Ir al carácter
H Principio de pantalla
M Mitad de pantalla
% Pareja de paréntesis

Insertar texto
i Insertar antes del cursor
A Añadir después del cursor
I Insertar antes de la línea
A Añadir después de la línea
o Añadir nueva línea después de la actual
O Añadir nueva línea antes de la actual
r Sobreescribir un carácter
R Sobreescribir varios caracteres
:r <archivo>Insertar archivo después de la línea
p Poner después de la posición o línea
P Poner antes de la posición o línea
C Sobreescribir la línea

Borrar texto
x Borrar el carácter de la derecha
X Borrar el carácter de la izquierda
D Borra el resto de la línea
:d o ddBorra la línea actual
ndwBorra las siguientes n palabras
ndbBorra las n palabras anteriores
nddBorra n líneas
:x,ydBorra las líneas desde x a y

Búsquedas
/cadena Buscar la cadena hacia adelante
?cadena Buscar la cadena hacia atrás
n Ir a la siguiente coincidencia
N Ir a la anterior coincidencia
:set ic Ignorar caso mientras se busca
:set noic Buscar diferenciando
:set un Mostrar números de línea
:x,yg/cadena Buscar la cadena desde la línea x a la y
:g/cadena/comando Ejecutar comando en las líneas que contengan la cadena
* Buscar la siguiente ocurrencia de la palabra actual
# Buscar la anterior ocurrencia de la palabra actual

Reemplazar texto
:s/pt/cad/bandera Reemplazar patrón con cadena
Banderas
gReemplaza todas las ocurrencias
cConfirmar reemplazos
& Repite el último comando :s

Otros
u Deshacer el último cambio
Ctrl+R Rehacer
J Unir líneas
U Deshacer todos los cambios a la línea
nJ Unir n líneas
. Repetir el último comando
:N Divir la pantalla en dos
v Pasar a modo visual

Basado en el trabajo de gosquared.com/liquidicity
Versión en PDF