Mostrando las entradas con la etiqueta modulos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta modulos. Mostrar todas las entradas

miércoles, 9 de octubre de 2013

Tutorial lua en linux(modulos) parte 1

Este tutorial es un poco mas avanzado,para realizar este tutorial ya se deb saber como usar funciones,estructuras selectivas y variables. Cambien es bueno saber usar tablas pero aun no esta listo el tutorial de ellas aquí,cuando se tenga listo lo citare y se podrán leer los dos tutoriales para complementarse entre si.

Un modulo en teoría podríamos decir que es una variable que toma el contenido de un archivo,los módulos nos hacen fácil el trabajo a la hora de programar programas largos,ya que podemos dividirlos en subprogramas o módulos y resolver los problemas de forma mas sencilla.

Un modulo en lua es como un objeto,no tanto como en Perl que se usa para crear clases pero se parece a lo que seria una clase,también se parece mucho a la forma que usa módulos Python,asi que si ya lo conocen verán el parecido,es como una mezcla de referencias Perl y módulos Python.

Primero que nada vamos a usar módulos que están definidos por el sistema y luego crearemos nosotros mismos algunos.

Primero que nada los módulos los llamamos con la palabra especial require,como en otros lenguajes,los módulos del sistema en algunos casos no es necesario llamarlos,pero como he dicho antes es bueno para saber que usamos.

El modulo os:

Para llamarlo:

require 'os'

Los módulos pueden ser escritos en C o en Lua,tienen terminación .lua o .so,se guardan en el PATH de Lua por defecto,o en el caso de los que creamos en el mismo directorio.

No necesitamos usar la extensión a la hora de llamarlos.

El Path lo podemos consultar en el modulo package,de la siguiente manera desde la terminal:

lua -e 'print(package.path)'

Y los módulos de C:

lua -e 'print(package.cpath)'

Continuamos con el módulos os:

Como ya hemos llamado os,podemos usar sus funciones:

Por ejemplo podemos llamar variables de entorno con la función getenv:

Por ejemplo en la shell de bash podemos saber el usuario actual asi:

echo $USER

O el PATH de los programas del sistema así:

echo $PATH

En lua:

print(os.getenv("USER"))

print(os.getenv("PATH"))

Podemos borrar un archivo así:

os.remove("archivo")

Podemos renombrar un archivo así:

os.rename("viejo_nombre", "nuevo_nombre")

Podemos ejecutar un comando del sistema asi:

os.execute('date')

Para cerrar el programa:

os.exit(1)

Existen muchas librerías,pero ese es un ejemplo de como se pueden usar,otra cosa que se debe aclarar es que se puede cambiar el nombre del modulo como en python:

sistema = require 'os'

print(sistema.getenv("PATH"))

Bien ahora vamos a crear nuestro modulos:

Primero que nada el modulo lo guardamos en la carpeta donde estamos,si queremos crear una tipo biblioteca,ascendente al path actual podemos usar la notación de punto,por ejemplo:

Tenemos el sistema así:



A la hora de llamarlo usaríamos:

requite 'lib.modulo'

Bien vamos a crear un modulo,por ejemplo itimetux.lua:

vim itimetux.lua

Lo primero que vamos a hacer es que todo lo que usemos va a ser local,para amarrarlo dentro del modulo creamos una tabla local:

local itimetux = {}

Ahora podemos crear una función:

function itimetux.info()
    print("Version 1.0")
end

function itimetux.saluda(x)
    print("Hola "..x.." soy itimetux")
end

Luego tenemos que regresar el modulo,como esta todo amarrado basta con retornar la tabla:

return itimetux

Ahora en el programa principal,vamos a llamarlo pasandole el valor a una variable:

#!/usr/bin/env lua

itime = require 'lib.itimetux' -- Pasamos valor a una variable

itime.info()

itime.saluda("Atheyus")

Podemos usar funciones privadas haciéndolas locales y no metiendolas en la tabla que es el modulo,de esta manera podremos usar funciones privadas para nuestro modulo,por ejemplo:

local itimetux = {}

local function dominio() -- funcion privada
    return "http://www.itimetux.com"
end

function itimetux.info()
    print("Dominio : "..dominio())
    print("Version 1.0")
end

function itimetux.saluda(x)
    print("Hola "..x.." soy itimetux")
end

return itimetux

Ahora podemos usar la función privada desde el modulo pero no la podremos usar desde el programa principal.

Para no usar un nuevo nombre basta con hacer que la tabla no sea local,en vez de:

local itimetux = {}

Usamos:

itimetux = {}

Y en programa principal usamos:

require 'itimetux'

itimetux.info()


Hay otra manera de crear módulos,el cual es que no tengamos que usar una tabla,es un metodo mas raro,ya que tenemos que retornar cada función,pero se puede hacer de esta manera tambien:

local function dominio() -- funcion privada
     return "http://www.itimetux.com"
end

local function info()
    print("Dominio : "..dominio())
    print("Version 1.0")
end

local function saluda(x)
    print("Hola "..x.." soy itimetux")
end

return { info = info ,saluda = saluda} -- retornamos las funciones que usaremos en el programa principal,las demas seran privadas

En el programa principal se puede usar de la misma manera el modulo.

Vamos a hacer algo mas útil,vamos a crear un modulo que lea los contenidos de un directorio:

local function read(dir) 
    local _files = {} -- Creamos una tabla para guardar los archivos
    local i = 1
    for files in io.popen("ls "..dir):lines() do -- Iteramos con un pipe,que use ls(funcion del sistema)
         table.insert(_files,i,files) -- Insertamos en la tabla los archivos
         i = i + 1
     end
     return _files -- Regresamos una tabla con los archivos (return de la funcion)
end

return {read = read} -- Regresamos la funcion (return del modulo)

Ahora supongamos que le llamamos readdir.lua y lo tenemos en lib/,para llamarlo en el programa principal hacemos esto:

readir = require 'lib.readdir'

archivos = readir.read(".") -- Leemos los archivos del directorio actual

-- Y por ultimo iteramos:

for i=1,#archivos do -- De i al numero de elementos de la tabla
    io.write(string.format("Archivo %d : %s\n",i,archivos[i])) -- Formateamos la cadena
end




Eso es todo de la parte 1,faltan cosas mas avanzadas las cuales hacen uso de metatablas,entornos,etc,pero primero haré tutoriales sobre eso para que se entienda mejor.

Leer más...

miércoles, 31 de octubre de 2012

Script en perl para ver las dimensiones de una imagen


Como dije,en el lapso del tiempo en el que haga los tutoriales de perl,sacare pequeños programas para que vean para que funciona perl,ya que me he dado cuenta de que muchas personas dicen y me han dicho que no es muy funcional perl,que mejor ponga tutoriales de python,pero no perl es muy muy funcional,para muchas cosas y es mi lenguaje de programación interpretado favorito y sirve para muchas cosas al igual que como hemos visto con bash,solo que perl reune lo mejor de C,sh,AWK, sed, Lisp para poder crear programas como el que vamos a ver hasta programas muy muy potentes,ya sea para multimedia o seguridad informática ademas de muchas otras cosas mas.

Bueno esta entrada no es una parte de nuestra serie te tutoriales sobre perl,solo es un ejemplo de un script que te puede servir para algo como a mi me ha servido.

Nota:Esto es programación si se te hace complicado puedes usar herramientas como gimp,o un visor de imágenes con esta cualidad, que son muchos.Este es un ejemplo para entusiastas a la programación Perl


Lo que hace este script es solo mostrar las dimensiones de una imagen

Ancho por alto

Hice dos scripts

1.Lo lee por entrada del teclado

Así es,es leída la ruta por el teclado, así que no tendrás que poner la ruta en el script sino que la escribirás a la hora de ejecutar el programa.



2.Aun mejor,si tienes zenity lo puedes hacer mas simple,solo ejecutas el script y abrira un buscador grafico ya con las extensiones filtradas.

Primero que nada,necesita el modulo Image::Size

Aprendimos a instalar módulos en la entrada pasada

Enlace

Así que lo instalamos con CPAN

install Image::Size

Y aquí el código

Script 1 sin zenity



Si necesitas saber las dimensiones de una imagen desde un sistema sin shell grafica prueba este script



Enlace

Explicado con #

#!/usr/bin/env perl

use strict;
use Image::Size; # Usar modulo
system("clear"); # limpiar pantalla

print "Ruta de la imagen :"; # < Imprimimos eso
my $imagen = <STDIN>; # Ruta desde entrada del teclado

chop($imagen); # Limpiamos la entrada

my ($ancho, $alto) = imgsize($imagen); # Comandos que miden la imagen

print "Tu imagen $imagen es de :\n";  # < Imprimimos esto
print "Ancho: $ancho x Alto: $alto\n"; # Imprimimos medidas
exit(1);



Script 2 con zenity




Si tienes zenity y gnome,xfce u otro escritorio que soporte zenity y quieres ver un poco de perl en acción,prueba este script

Enlace

Explicado

#!/usr/bin/env perl

use strict;
use Image::Size; # Usar modulo 
system("clear"); # limpiar pantalla

print "Ruta de la imagen :  \n"; # < Imprimimos eso

my @formatos = ( # Array con los formatos compatibles(hay mas)

 'formatos --file-filter=*.JPG',
 'formatos --file-filter=*.bmp',
 'formatos --file-filter=*.jpeg',
 'formatos --file-filter=*.jpg',
 'formatos --file-filter=*.png',
 'formatos --file-filter=*.tif',
 'formatos --file-filter=*.xbm',
 'formatos --file-filter=*.xpm',
 'formatos --file-filter=*.gif'
);

my $imagen =`zenity --file-selection @formatos --title="Selecciona una imagen"`;

# ^ Variable que abre zenity

chop($imagen);  # Limpiamos la seleccion

if ( $imagen eq $1 ) { # Estructura selectiva para ver si se selecciono algo con zenty

print "No elegiste una imagen\n";
exit(1);
}
else{ # Si se selciono algo se ejecuta lo siguiente

my ($ancho, $alto) = imgsize($imagen); # Comandos que miden la imagen

print "Tu imagen $imagen es de :\n";
print "Ancho: $ancho x Alto: $alto\n"; # Imprimos las medidas

exit(1);
}

Para usarlo creen un documento .pl 

En terminal

touch dimension-imagen.pl

Luego con tu editor favorito

editor_favorito dimension-imagen.pl

Por ejemplo

vim dimension-imagen.pl

Pegan el código



Y guardan

Luego le dan permisos de ejecución

chmod +x dimension-imagen.pl

Y ejecutan

./dimension-imagen.pl

Eso es todo

Si no tienes zenity puedes instalarlo ya que el segundo script es mucho mas útil  si usas Gnome,XFCE con

Para Ubuntu

sudo apt-get install zenity

Para openSUSE

sudo zypper in zenity

Para Archlinux

sudo pacman -S zenity

Para Gentoo

Como root

emerge zenity

Bueno puede que el script sea mucha molestia ya que esto se hace con clic derecho información y ahí están los pixeles,pero hay que hacer desde lo basico para poder hacer cosas mas grandes,espero que les haya servido y hayan aprendido algunas cosas.

Leer más...

Como instalar módulos perl en Archlinux

Si se han dado cuenta en varios scripts en perl que se encuentran en internet necesitan módulos,por ejemplo

 use Image::Grab;


Aquí indica que se va usar el modulo  Image::Grab;,en un script,incluso esto puede ser usado por nosotros mismos a la hora de programar,bueno si ejecutamos un script con un modulo que no este instalado,dara error de compilación y resaltara la linea de error,que es donde se llama el modulo,bueno la solución es instalar el modulo,o los módulos que necesitemos.

Yo en mi caso estoy usando Archlinux y vamos a usar CPAN para instalar los modulos

Que es CPAN?

CPAN es el acrónimo de Comprehensive Perl Archive Network. Es un enorme archivo de software escrito en Perl, así como de documentación sobre el mismo. 

Tiene presencia en la Web a través de su sitio www.cpan.org y sus 481 espejos (269 registrados) distribuidos por todo el mundo.1

Actualmente hay más de 100.000 módulos empaquetados en más de 23.000 paquetes, aportados por más de 9.000 autores.


Bueno vamos a comenzar

Tutorial

1.Entra como root en la shell

su

2.Introduce este comando

perl -MCPAN -e shell
3.Entraremos a CPAN



Ahora si queremos instalar un modulo hacemos esto

Por ejemplo el que mencione
install Image::Grab



Atención: CPAN se puede usar desde la terminal usando

cpan

Pero si no lo hacen como root dará errores



Así que la próxima vez que instales un modulo usa

su

cpan


Y también

Si necesitan un modulo pueden buscarlo aquí

search.cpan.org/

Leer más...