Diseño Web

Diseño Web 

Introducción a Lua

Lua es un lenguaje de scripting diseñado con el principal objetivo de ser ligero y extensible. El pequeño tamaño de su runtime y su API C sencilla han hecho que sea elegido en muchas ocasiones para ser embebido en aplicaciones como nmap o Monotone, o en multitud de juegos (WOW, FarCry...). De hecho, viene utilizándose en videojuegos desde hace unos diez años.

Lua apareció por primera vez en 1998 y tiene su origen en la Universidad Pontifica Católica de Rio de Janeiro [PUC-Rio].

El lenguaje

Lua es un lenguaje sencillo. Una de sus principales influencias declaradas es Lisp y su idea de una única estructura, la lista. En el caso de Lua, esta estructura clave fundamental de su arquitectura es la tabla. Como lenguaje más parecido podría nombrarse Javascript. Ambos son lenguajes de script, con soporte para OO basada en prototipos.

Lua es rápido para su naturaleza interpretada; suele quedar en buen lugar en las comparativas.

La sintaxis recuerda a una mezcla de Pascal con otros lenguajes. Un clásico:

-- Una función:
function diHola(persona)
   
-- Un bucle:
   
for i=1,3 do
       
print("Hola " .. persona .. "!")
   
end
end

print("¿Cómo te llamas?")
nombre
= io.read()
-- Llamada a una función:
diHola
(nombre)

Lua soporta un estilo procedural imperativo, pero también un estilo funcional. De hecho, en Lua las funciones son entidades de primera categoría. La función del ejemplo anterior, en realidad se interpreta como:

diHola = function(persona)
   
print("Hola " .. persona .. "!")
end

Si tenéis cierta experiencia con Javascript quizá esa forma de escribirlo os sea familiar.

Lua, como decía antes, también soporta orientación a objetos, y lo hace basándose en la estructura de la tabla. Una tabla como t:

t = {}

puede contener funciones, como:

function t.diHola(persona)
   
print("Hola " .. persona .. "!")
end
t
.diHola("Peter")

O, si utilizamos : en lugar de . Lua nos pasará como primer parámetro self, una referencia a la tabla (u objeto):

t = {}
t
.nombre = "Peter"
function t:diHola()
   
print("Hola " .. self.nombre .. "!")
end
t
:diHola()
-- Que es lo mismo que t.diHola(t) o que t['diHola'](t)

Con esto tenemos todo lo necesario para encapsular objetos. Para otros aspectos de la OO, Lua se se basa en la idea de metatabla, una forma de asociar a una tabla T otra T' en la que se irán a buscar los métodos que no se encuentren en T. Con esto tenemos un mecanismo de herencia. Entrar en detalle del manejo de las metatablas, OO, metaprogramación u otros aspectos más avanzados quedan (quizá) para posibles próximos artículos.

Referencias y Herramientas

La referencia fundamental para aprender Lua es, sin duda, el libro Programming in Lua, del cual se puede encontrar online la primera edición. Es un buen libro, bien escrito y con explicaciones detalladas pero asequibles a cualquiera. Como complemento, el Manual de Referencia que también se puede adquirir impreso o consultar online.

La otra referencia habitual es el Wiki de Usuarios de Lua donde podemos encontrar tutoriales y código, su lista de correo lua-l o el canal de IRC en Freenode.

Existen, además, unos cuantos libros y tutoriales más específicamente orientados a desarrollar modificaciones de determinados juegos, o a la programación de juegos en general.

El soporte por parte de los editores e IDEs es suficientemente amplio. Personalmente recomiendo SciTE un editor muy sencillo con la cualidad de que utiliza Lua para programar macros. Existen también una buena cantidad de librerías y enlaces que se encuentran listadas en el Wiki.

LuaForge es un buen lugar para encontrar proyectos de y para este lenguaje. El Kepler Project es otra interesante referencia que desarrolla y mantiene una variada colección de módulos principal pero no exclusivamente orientados al desarrollo web.

Por último, para comenzar con Lua en Windows se puede encontrar un cómodo instalador que incluye binarios de Lua, un buen número de librerías fundamentales y el editor SciTE, además de unos cuántos ejemplos y documentación.

Filed under  //   lua   programación  

Comments [0]

Ahorrar transferencia de datos en bibliotecas Javascript

Hoy en día es común que cualquier sitio utilice bibliotecas (o librerías) como por ejemplo jQuery, prototype, Mootools para generar su paginas o bien para dar cierta interacción con el usuario, etc, las posibilidades son infinitas realmente, lo negativo del uso de estas bibliotecas es que consumen bastante transferencia, llamar desde el codigo a un framework como jQuery puede consumir de 7kb a 30kb fácilmente, cifra que parece insignificante pero que si multiplicamos por la cantidad de visitas la cantidad de transferencia empleada es considerable.

Hay varias formas de reducir este consumo de transferencia de datos, por ejemplo comprimiendo el javascript, pero que tal si hacemos algo distinto, me refiero a utilizar el API de Google que de manera genial nos permite utilizar prácticamente cualquier librería popular pero alojada en los servidores de Google.

Eso se hace de forma muy simple, por ejemplo.

JAVASCRIPT:
  1. google.load("jquery", "1.3.2");
  2. google.load("jqueryui", "1.7.2");
  3. google.load("prototype", "1.6.1.0");
  4. google.load("scriptaculous", "1.8.3");
  5. google.load("mootools", "1.2.4");
  6. google.load("dojo", "1.3.2");
  7. google.load("swfobject", "2.2");
  8. google.load("yui", "2.8.0r4");
  9. google.load("ext-core", "3.0.0");

Como podrán ver en el código anterior, no solo podemos cargar la librería que nosotros queramos desde los servidores de Google sino que podemos decirle de forma exacta que versión queremos utilizar, algo genial porque evitamos que nuestros códigos queden obsoletos en algún momento y dejen de funcionar porque se hizo un upgrade de la versión de nuestro framework.

Como todo en la vida, tenemos puntos positivos y negativos.

A favor:

  • No gastamos absolutamente nada de transferencia de datos de nuestro hosting.
  • Logramos hacer una paralelización de servidores gratis, por lo que aceleramos considerablemente la descarga de nuestro sitio. Al menos en la mayoría de los casos.
  • Es completamente legal este hotlink :D

En contra:

  • Estamos dando cierto acceso a Google a nuestra información.
  • Si los servidores de Google dejan de funcionar también los objetos en nuestro sitio que utilicen las librerías afectadas.

En pocas palabras queda a consideración de cada uno, en mi caso me parece una opción excelente, los servidores de Google prácticamente nunca dejan de funcionar y por el tema de la seguridad utilizar Google Adsense es prácticamente lo mismo que esto

Filed under  //   google   javascript   programación  

Comments [0]

Como crear una distribución de Linux

Como crear una distribución de Linux

Gnewsense es una web que te permitirá crear tu propia distribución de linux de forma relativamente fácil.

Requisitos:

 

Instrucciones:

Elige la Clave GPG

Las versiones más recientes de apt requieren una firma GPG en el repositorio de archivos para asegurar la integridad de la distribución, así que nuestro primer paso es crear una clave GPG. gpg --gen-key te permitirá hacerla, asegúrate de que la contraseña está en blanco. Necesitarás la firma de la llave para el archivo de configuración.

Finalmente, añade la clave pública en el almacén de claves.

gpg --export | sudo gpg --import

Paquetes

Necesitarás los siguientes paquetes para que la distro funcione correctamente:

apt-get install reprepro imagemagick debmirror build-essential apache2 subversion cdebootstrap
apt-get install squashfs-tools netpbm syslinux bittornado
apt-get build-dep linux-image-$(uname -r) ubiquity update-manager ubuntu-artwork base-files ubuntu-meta
apt-get build-dep launchpad-integration grub system-tools-backends example-content gnome-panel
apt-get build-dep gnome-app-install
svn co http://svn.gnewsense.svnhopper.net/gnewsense/builder/trunk builder
sudo ./fixup-kernel-wege

DebMirror (opcional)

Para evitar tener que bajar varias veces el mismo archivo, es recomendable crear un mirror único. Para lo que se necesitarán 27 gb

debmirror --nocleanup --verbose --progress --method=http --host=ie.archive.ubuntu.com --arch=i386 \
--source --dist=dapper,dapper-security,dapper-updates,dapper-backports --section=main,main/debian-installer,universe --ignore-release-gpg \
--root=ubuntu /the/target/directory
  • Necesitarás además configurar Apache para obtener el mirror via Http o Localhost, este paso es opcional, pero se recomienda hecerlo

Configuración

Abre el directorio builder (usa cd) que creaste anteriormente y abre el fichero config en un editor de texto. las opciones de las que te tienes que ocupar son: MIRROR, RELEASE, DISTRONAME, DOMAIN, BASEDIR, and REPOAPT.

  • Mirror Es el mirror que tu elegiste en el paso anterior. MIRRORDIST es el nombre del mirror. Normalmente dapper
  • Distroname Es el nombre de la distribución, solo puede tener números y letras
  • Release Es el nombre del release. Debe estar en minúsculas
  • Logoletter Es la letra que actuará de logo en tu distro
  • Tagline Se mostrará en la pantalla de inicio
  • Domain Se usará como fuente para obtener programas al instalar
  • Basedir Es el directorio bajo el que el livecd y los archivos temporales se guardarán. por lo que debería configurar apache para el directorio REPOST ($BASEDIR/(nombre de la distribución (minúsculas))).
  • META_*_{ADD,REMOVE} Los paquetes que quieres quitar o añadir desde el paquete ubuntu-meta mientras tus meta-paquetes son creados.
  • *_VERSION Es el número que se añade a la versión de los paquetes. Lo incrementarás a medida que rehaces la distro. lo más probable es que quieras empezar desde el 1
  • RSYNC_DEST Es donde se generan las reposiciones o el livecd. Se debe hacer un rsync con push-repo o push-cd.

Genera el repositorio

./gen-repo && ./do-update

Esto creará la imágen que se alojará en $LIVECDDIR/$DISTRONAME_L-livecd-$LIVECD_VERSION.iso

./gen-cdsource
./stage-cd
  • Advertencia:Para 32 bits, usa ./gen-repo && linux32 ./do-update

Prepara el source del tarball y pon pon la ISO en $REPODST/cdimage

Pon tu distro en un mirror y publicala

Ahora podrás publicar tu ISO, para ello, escribe lo siguiente:

./push-repos
./push-cd

Fuentes

 

Filed under  //   linux  

Comments [0]

La nueva extensión .post

19 de marzo de 2004. La Universal Postal Union (UPU) realizaba una petición a la ICANN para la creación del sTLD .post.

Fundada en 1874 y con su sede en Berna (Suiza), la UPU es la segunda organización Internacional más antigua del mundo. Con 190 países miembros, representa a una industria responsable de la entrega de más de 450.000 millones de cartas y paquetes al año. Es responsable de la definición de las normas para el intercambio postal internacional y, como agencia especializada, asesora a sus miembros sin interferir en las políticas postales locales.

20 de Octubre de 2009. La ICANN informaba de la conclusión de las negociaciones con la UPU para la creación del .post. El acuerdo final está sujeto a un periodo de comentario público que comenzará mañana y a la consideración del mismo por el cuerpo directivo de la ICANN.

Esta nueva extensión estará organizada lógicamente de la siguiente manera:

1) Una estructura de subdominios que refleje la de los países, de modo que cada operador postal sea capaz de administrar los dominios de cada territorio: oficinas postales, códigos postales, servicios locales, direcciones físicas, etc,…

2) Una estructura global complementaria de subdominios que refleje organismos comerciales, marcas, etc,…

Los dominios que se correspondan con países según la norma ISO 3166 serán asignados al operador postal oficial del país.

Dentro de la UPU hay dos entidades reguladoras: El Consejo de Administración y el Consejo de Operaciones Postales (COP). Este último será el encargado de la política del .post. El COP delegará en el IB (International Bureau) para planificar, desarrollar e implementar la extensión. Habrá Agentes Registradores que se tendrán que acreditar y algunos Operadores Postales actuarán como registradores especializados.

 

Filed under  //   dominios  

Comments [0]