viernes, 30 de noviembre de 2012

Saber la información del sistema con python

Python es un lenguaje de programación que me gusta mucho solo que no lo vemos mucho,porque hice unos cuantos tutoriales  que no tuvieron mucha reacción :(,y de todas formas aunque me guste python,prefiero perl,al igual que el iOS sobre android,pero aun asi veremos unas cuantas entradas sobre este excelente lenguaje de programación de alto nivel :D

Bien, en python existen comandos que llaman al sistema,mas que nada esto lo debemos iniciar con:

import os

Muchas veces necesario también

import sys

y

import time

Claro que esto va después del hashbag/shebang,queda así:

#!/usr/bin/env python

import os

import time

 En esta ocasión solo voy a usar esos dos (time,os),bien ahora lo que debemos hacer es llamar las variables

estas se definen así

os.comando()

Sobre nuestra variable,que queda así

mi_variable = os.comando()


Esto en perl es lo que seria(no seria es un ejemplo por si sabes perl,mas que python)

my $nuevo=os->new();

my $mi_variable =$nuevo->comando();

Bueno ahora un ejemplo ya bien hecho:

Para obtener nuestro LOGNAME:

mi_logname = os.getlogin()

Esto seria así ya en un script completo:

#!/usr/bin/env python

import os

mi_logname = os.getlogin()

print ("Tu LOGNAME es :",mi_logname)



Eso es todo :D

Para saber lo que se puede hacer con os visiten:


docs.python.org/2/library/os.html

Aquí un script un poco mas grande para un ejemplo mayor:

 #!/usr/bin/env python

import os
import time
  
Usuario = os.getlogin() 
locacion = os.getcwd()
soperativo = os.uname()
hora = time.time()
horaFormato = time.ctime(hora)

print ("\nMi sistema : \n")
print ("Tu logname es :",Usuario)
print ("Directorio actual : ",locacion)
print ("Kernel : ",soperativo[0])
print ("Release : ", soperativo[2])
print ("Fecha : ",horaFormato,"\n")

Espero que les sirva :D



Leer más...

jueves, 29 de noviembre de 2012

Como matar un proceso por si se nos traba Linux

El nombre entero de esta entrada es:

Como matar un proceso/cerrar un programa desde una tty por si se nos traba el sistema

Pero como siempre era muy largo el titulo y esto lo penaliza google :D .

Algunas veces aunque casi sea un mito y mas en comparación con Windows,se nos traba Linux,mas que nada seria nuestra distribución y si se nos traba ya que hay muchas personas que usan de broma esto:

Enlace
Y la verdad en GNU/Linux no se nos traba/bloquea tan horrible ya que ese parece un trojan horse con un loop para abrir ventanas,mas que nada  esto pasa por nuestros modulos/drivers y por programas que instalamos mal,no funcionan bien en nuestro sistema, también yo uso esto al estar haciendo mis programas y si escribo algo mal puedo tumbar el sistema o simplemente trabarlo,incluso en Ubuntu últimamente cuando hacemos muchas cosas,o porque un programa esta mal programado  ya es muy común verlo bloqueado.

Así que aquí el tutorial por si se les traba (como diríamos coloquialmente)

Ya que trabado puede no ser bien entendido, así que usemos un hash de perl para entenderlo:

my %palabras = {

"trabar" =>"bloquear"

};


Tutorial

1.Primero necesitamos saber el proceso de nuestro programa,este lo obtenemos desde la consola,pero si no esta disponible por eso mismo,abrimos una tty

Tutorial

2.Para saber el PID (identidad del proceso) de un proceso podemos con

top



Nota:Esta es mi terminal,pero esto debe ser la tty,solo use la terminal para poder sacar los screenshots.

Pero top se tarda mucho y esta en constante movimiento :S

Ya que el proceso es el numero de la izquierda,y por ejemplo si se nos traba gedit, haríamos esto

top | grep gedit
Pero como dije se tarda mucho :(

Mejor usamos ps

Así que para ver el PID de un programa con esto lo hacen

ps -ef 
Y filtramos un poco

ps -ef | grep gedit


Como dije es el numero de la izquierda(el primero),y la primera linea,ya que la segunda es el mismo PID que pide el PID por eso siempre nos dará un PID distinto.

De hecho si queremos filtrarlo mas podemos usar awk

ps -ef | grep gedit | awk '{print $2}' 


O para que no se muestre el PID que pide el PID podemos añadir un parámetro al pipe para cortarlo:


ps -ef | grep -v grep | grep gedit | awk '{print $2}'


Y listo ya tenemos el PID

3.Matar el PID

Para matar ese proceso solo basta con hacer kill sobre el PID

kill PID

También podemos usar

pidof PID
Y también para mas fácil :

pkill gedit
Que?

pkill gedit ¡WTF! entonces para que tanto PID

Así es, se puede matar una aplicación de esa manera,pero yo recomiendo que lo hagan por PID ya que puede que tengan varias sesiones en distintas tty,como yo,en una Gnome SHELL,en otra AWESOME, en otra TTY,etc.


Tambien otra opcion es por si no sabemos el nombre del programa en proceso,por ejemplo,como se llama Google Chrome en un proceso?

Google-Chrome

google_chrome

Chrome

chrome

google

ect ?

Y sabremos el nombre....

¿?

Como?

Pues hacemos un filtrado básico con grep,por ejemplo si se llama chrome,podemos probar


ps -ef | grep goo

o

ps -ef | grep hrome

Y si lo matamos por nombre puede dar errores,o cerrarnos algo que no queremos

De hecho también existe


killall gedit
 xkill,etc

Y cuando hayamos eliminado ese proceso/programa regresamos a nuestro escritorio :D

Leer más...

Como instalar un modulo python en Linux

Esto solo es para Ubuntu y Archlinux


Aveces necesitamos instalar un modulo puthon para hacer funcionar un script,esto pasa si somos programadores o simplemente usuarios de python,pero sea como sea algún día nos encontraremos con un script que quiera importar algo que no tienes y dará un error,este error se resuelve instalando el modulo.

Pero como se instala?

La forma mas recomendada es con easy_install

Disponible para Ubuntu y Archlinux(no lo he usado en ninguna otra distribución,pero seguro que también esta para su ditribusion favorita si no es ubuntu o archlinux)

Para instalar

En Ubuntu/Derivados

sudo apt-get install python-setuptools

En Archlinux


sudo pacman -S python2-distribute
Para usar

Ubuntu


sudo easy_install modulo

Archlinux


sudo easy_install-2.7 modulo

También se puede hacer un upgrade del modulo con este comando

Archlinux

sudo easy_install-2.7 --upgrade modulo

Ubuntu

sudo easy_install --upgarde modulo

Mas información de easy_install :

python.org/distribute/easy_install.html

También tenemos otra opción mas reciente llamada pip:

http://www.pip-installer.org/en/latest/

Eso es todo :D



Leer más...

miércoles, 28 de noviembre de 2012

Agilizar uso de la terminal con comodines Unix

Hace poco vimos una entrada de como trabajar con archivos o carpetas con espacios,esto pienso que ayudo y ayuda a muchas personas a usar la terminal de los descendientes de Unix,de los sistemas tipo Unix con una shell, sea bash,sh,zsh,tcsh,etc

Usado en Darwin(iOS,OS X),Linux(Distribucines),FreeBSD,etc

Yo en lo personal me gusta mucho esto,algunas personas me dicen(aquí en la vida real) que estudio informática de "cavernicolas",que mejor estudie desarrollo de software con Java o un lenguaje mas actual para usarlo en sistemas actuales,en vez de estudiar Unix,perl,shell scripting,lisp,etc y la verdad me quedo así:

:(

Pero la verdad es que me gusta mucho los sistemas tipo Unix y mas que nada lo que es la shell(terminal) de nuestros sistemas ya que OS X es muy moderno,pero tiene la terminal prácticamente oculta.

Así que vamos a ver algo de lo mas básico de Unix que nos puede ayudar bastante,y para que vean la velocidad con la cual podemos hacer algo con un sistema "cavernicola" |:(


Nota:No dudo que en sistemas actuales hay programas que hagan esto,y incluso con GUI,pero esto mas que nada esta hecho para usar mas rapido la terminal de nuestro sistema tipo Unix.


Comodines Unix

En Unix existen los comodines también llamados (Wildcards) estos Wildcards son símbolos especiales que interpreta la shell que estemos usando.

Existen distintos tipos de wilcards,la wilcard o símbolo mas conocido (puede que lo conozcas)  es

~
Este wilcard indica nuestro home o el home de un usuario,por ejemplo si hacemos

cd ~

estamos diciendole a la shell que queremos cambiarnos a nuestro home.

Por ejemplo root

Si hace

cd ~

Va a su Home,pero si hace

cd ~usuario

va al home del usuario indicado

Esta imagen lo ilustra

Si entraron a root,salgan de el

ctrl+d
El *

Esta wildcard es estupenda,ya que se usa de varias maneras, aquí los ejemplos:

Normalmente se usa con ls,pero se puede usar con mas comandos ,como chmod,mv,con un pipe para que sea mas practico,etc pero veremos el ejemplo con ls.

ls *palabra

Identifica cualquier nombre que termine con palabra(palabra es un ejemplo),en este caso lo lista,por ejemplo si queremos listar nuestras canciones .mp3 lo que tenemos que hacer es pasarle el final del titulo del archivo,que seria .mp3 o simplemente mp3

ls *mp3
Esto lo podemos usar no solo para listar sino para muchas cosas,por ejemplo

Mover todos los .mp3 de mi Home a la carpeta Musica,solo hacemos esto :

Para fácil

cd ~


mv *mp3 Musica

A lo Unixero

mv ~/*.mp3 Musica
Y así de fácil moveremos todos nuestros archivos de audio a otra :)

en cambio con un explorador tendríamos que copiar uno por uno con ctrl y luego cortar y pegar en la carpeta :S

Otro ejemplo es,que por ejemplo yo tengo un servidor en mi localhost corriendo con LAMP en Archlinux y con un CMS escrito en Perl y necesita que todos los .cgi tengan permisos 755.

Como hacerlo?

Como darle permisos 755 a todos mis cgi?

Puedo abrir uno por uno dando permisos,o incluso uno por uno haciendo chmod

Pero con una Wildcard solo hacemos esto, en mi caso hice esto:


chmod 755 /srv/http/blog/*cgi

Y listo,tenemos todos los cgi con permisos 755 :D

Igual para copiar,digamos que quiero todos mis cgi en mi home

Podemos copiarlos:
cp /srv/http/blog/*cgi ~
Podemos moverlos


cp /srv/http/blog/*cgi ~
O podemos borrarlos si nos estorban el el home

rm ~/*cgi
Esto lo ilustra



Eso solo es una parte del poder de las wildcards o comodines de Unix,ya que nuestro símbolo *

También se puede usar así

Nota:Ya no voy a hacer tantos ejemplos,solo implementen los de arriba (uso de comandos de administración de ficheros,rm
ls,dir,vdir,lpr,cp,mv,cmp,find,etc) con la información que sigue :)

Podemos listar el principio de un archivo en vez del final:

Supongamos que tenemos un archivo que se llama musica,pero tiene extensiones diferentes (mp3,wav,ogg,etc) aqui no podriamos usar 

ls *mp3

Ya que no lo incluiríamos en la orden

Entonces como se hacer al revez?

Solo se usa esta sintaxis

ls musica*
Y ahora lista todo lo que coincida,pero al principio :D

Pero aquí no acaba esto :D

supongamos que incluye en medio el parámetro que necesitamos,por ejemplo tenemos 10,000 archivos en una carpeta y solo necesitamos listar los que lleven perl como nombre,no importa donde lo lleve

Sea

ejemploperl.pl

perlsite.pl

aimperlprogramer.txt

perlwallpaperl.jpg

Lo único que hacemos es usar esta sintaxis :

ls *perl*
Y nos lista todo lo que lleve perl,como dije no solo listar,lo puedes mover,abrir,borrar,etc

Por ejemplo si quieren abrir todos sus .txt de un directorio con gedit(si gedit,no importa que sea un programa con interfaz gráfica)

Hacemos esto

gedit *txt

Nota:Si tienes 10,000 txt en un directorio,se te va a caer sistema

O para correr todos los mp3 de un directorio,por ejemplo con totem


totem *mp3

El ?

Otro wildcard es el simbolo ?,este tiene menos poder que *,pero tambien puede que te sea util

Lo que hace es buscar todo lo que tenga un caracter simple,por ejemplo en una carpeta tenemos dos muchos scripts y archivos, y nos acordamos que teniamos dos archivos que se llamaban(script) uno en perl y otro en python,que seria .py y .pl,para encontrarlos solo basta con hacer esto

ls script.p?

Esto también listara los archivos que se llamen por ejemplo

script.pu

script.pt

etc

También puede ser usado 

ls ?palabra

ls pala?bra

etc

Los []

Los corchetes son los comodines mas avanzados de usar ya que lo que hace es definir clases de caracteres simples que identifican a cualquier carácter perteneciente a la clase

Por ejemplo

ls [LPM]ua
Identifica

Lua,Pua,Mua

Otro ejemplo

ls [VL]ela

Identifica

Vela,Tela

Eso es todo,existe también - y {} pero el uso es muy avanzado y de momento no voy a mencionarlo.

Espero que les sea útil y agilicen el uso de la terminal :D



Leer más...

martes, 27 de noviembre de 2012

Como crear un botón notebook sin mostrar pestañas Perl/Gtk3

Algunas veces si no es que muchas necesitamos crear un botón que al clikearlo pueda cambiar y a la vez cambiar la rutina que estamos usando


Estos dos botones,tienen corriendo detrás una rutina que realiza acciones,por ejemplo puede ir desde un cambio de texto,un boton para frenar,un boton para comenzar,sea una búsqueda,una reproducción multimedia,etc.

Estos botones no solo serán lo que vemos en la interfaz gráfica están corriendo rutinas atrás de ellos.

Por lo menos la rutina que indique cambiarla.

Como se hacen estos botones,hay muchas maneras de hacerlos y en distintos lenguajes de programación debe haber miles de maneras de hacerlos,pero yo aquí me concentre en el widget Notebook de Gtk3 y escribiendo en Perl.

Para crear uno de estos botones se hace lo siguiente

Tutorial

Primero que nada creamos una ventana:

my $ventana = Gtk3::Window->new('toplevel');
$ventana->set_title('Ejemplo');
$ventana->set_default_size(200, 200);$ventana->set_border_width(5);
$ventana->signal_connect( destroy  => sub { Gtk3->main_quit } );

Si queremos podemos crear el hbox de una vez:

my $hbox = Gtk3::Box->new( 'horizontal', 10 );

Y creamos el widget que contendrá los botones:

my $botones = Gtk3::Notebook->new();
$botones->set_show_tabs(FALSE);
$botones->set_show_border(FALSE);
$hbox->pack_start( $botones, TRUE, TRUE, 0 );

Creamos los botones:

1.El primero es el botón de play en este ejemplo,pero puede ser de lo que quieran

my $boton1 = Gtk3::ToolButton->new_from_stock('gtk-media-play');
$boton1->signal_connect( clicked => \&show_stop );
$botones->append_page($boton1);

La parte en rojo es el nombre del stock,para ver mas visitar el url de abajo.

developer.gnome.org/gtk/2.24/gtk-Stock-Items.html
 Si no quieren usar stocks y quieren usar texto se puede definir de esta manera

my $boton = Gtk3::Button->new_with_label('Palabrar');
2.Definimos el segundo botón

Que seria el de stop:


my $boton2 = Gtk3::ToolButton->new_from_stock('gtk-media-stop');
$boton2->signal_connect( clicked => \&show_play );
$botones->append_page($boton2);

Lo de rojo indica que se pase a la sub rutina show_play si se clickea el botón


Creamos dos label,para usar mas efectivamente nuestra futura vbox y nuestras subrutinas:



my $label = Gtk3::Label->new("Perl Gtk3");
my $label2 = Gtk3::Label->new("");


Creamos una vbox

my $vbox = Gtk3::Box->new( 'vertical', 5 );
$vbox->pack_start( $label, FALSE, FALSE, 10 );
$vbox->pack_start( $hbox, FALSE, FALSE, 10 );

$vbox->pack_start( $label2, FALSE, FALSE, 0 );

$vbox->set_border_width(5);

Añadimos nuestra vbox a la ventana y lo mostramos todo:

$ventana->add($vbox);

$ventana->show_all;


Gtk3->main();

Creamos las subrutinas:

La sub rutina del botón play:


sub show_play {
    $botones->set_current_page(0);
   $label2->set_markup("Play");
}

Lo de rojo indica que se muestre la pagina (0) que seria la que contiene nuestro botón play


La sub rutina del botón stop:



sub show_stop {
    $botones->set_current_page(1);
    $label2->set_markup("Stop");
}

Eso es todo,pueden ver como quedo el script completo aquí:

pastebin.com/SQXCvD5G
Así nos queda al ejecutar


Presionamos play y se muestra :




El widget Notebook sirve para muchas cosas,esta es solo una de ellas y su forma verdadera es así


Como pueden darse cuenta ese botón no solo sirve para mostrar el texto de una label,incluso podemos hacer un reproductor de música,usando un modulo como:

Audio::Play::MPG123
O muchas cosas mas,yo voy a ver si lo puedo implementar en simplePerlBrowser para usar multipestañas,aunque va estar complicado, pero se puede usar de muchas maneras,por ejemplo algo mas sencillo que ya hice fue unificar el botón de cargar y detención de simplePerlBrowser.

Solo redirigían la señal de clic a una subrutina,que cambie el botón y que haga sus otras funciones :D

Espero que les funcione ya que yo me tarde un rato en usar la documentación de este widget en Perl

developer.gnome.org/gtk3/stable/GtkNotebook.html

Eso es todo :D



Leer más...

Trabajar con archivos o carpetas con espacios en la Terminal

Tal vez el titulo no se entienda muy bien y el titulo exacto era este:

Trabajar con archivos y carpetas con espacios en la terminal de sistemas tipo Unix (bash,sh,tcsh,zsh,etc)

Pero era muy largo el titulo.

A lo que me refiero es a esto:

1.Abres una terminal

2.Necesitas hacer cd/ls/etc a una carpeta

3.Pero la carpeta se llama así:

mi carpeta
Y al hacer

cd mi carpeta

Da un error :(

A esto es a lo que me refiero.



Como se trabajan archivos o carpetas con espacios?

Otra cosa seria hacer

cd micarpeta
Y nos mandaría a micarpeta :)



Como hacer para entrar a mi carpeta?

La respuesta es usar encerrar entre comillas "" nuestros archivos/carpetas, así podemos trabajar con un archivo o carpeta que contenga espacios,no importa si la carpeta se llama:


esta es mi carpeta de prueba para tiempo de tux
Si hacemos:

cd  "esta es mi carpeta de prueba para tiempo de tux"

La reconocerá fácilmente



Esto a que se debe?

Mas que nada al mismo uso de la shell(los símbolos) para el scripting $ # "" ! etc

Todos los símbolos que usemos en el shell scripting, serán reconocidos en la terminal.

Por ejemplo

Comentarios,variables especiales,comillas,cuantificadores,etc

Y aquí estamos haciendo uso de las comillas

Ya que si un archivo se llama

mi cancion.mp3

Y la queremos reproducir con mplayer :

mplayer mi cancion.mp3

Dara error,al mplayer usar solo (mi) como parámetro.

Pero si hacemos esto:

mplayer "mi cancion.mp3"

Reconocerá (mi canción) como el parámetro,en otras palabras reconocerá mi canción como un solo parámetro y no como dos.

Así que si llegan a necesitar trabajar desde la consola con un archivo/carpeta que tenga espacios solo usen comillas y listo,

Sea

ls "mi directorio"

rmf "mi directorio"

xdg-open "mi archivo"

cd "mi directorio"
Eso es todo,espero que les sea util :D


Leer más...

lunes, 26 de noviembre de 2012

Descarga vídeos de yotutube con script Perl

Como sabemos no hace falta que un día nos den ganas de descargar un vídeo de youtube,si ya sabemos que es youtube por lo menos una vez en la vida hemos querido descargar un vídeo de youtube,esto incluso lo verifica google al estar en el segundo resultado de autocompletar,

Uno pone

Como

Y autocompleta

Como descargar musica

Como descargar videos de youtube

Así que no faltan programas para hacer esto,mas que nada para Windows,para Linux tenemos el magnifico minitube y si nos gusta la terminal tenemos youtube-dl,pero yo como soy usuario de Gentoo aparte de la filosofía de Arch (armelo usted mismo) también me voy a casi (programelo usted mismo) y como me dedico mas a la programación de sistemas operativos que a la web, no se me complica tanto hacer mis propios programas para usarlos,por ejemplo el script que les voy a mostrar a continuación



Funciona bajo programación de escritorio aunque usa Internet y podemos crearle una GUI para que sea fácil de usar.

Gracias a Yuji Shimada podemos descargar vídeos de youtube con perl usando el modulo WWW::YouTube::Download

La sintaxis que nos indica en cpan para usar este modulo es el siguiente:


 use WWW::YouTube::Download;
  
my $client = WWW::YouTube::Download->new;
$client->download($video_id);
  
my $video_url = $client->get_video_url($video_id); 
my $title     = $client->get_title($video_id);  # maybe encoded utf8 string.
my $fmt       = $client->get_fmt($video_id);    # maybe highest quality.
my $suffix    = $client->get_suffix($video_id);    # maybe highest quality file suffix


O también nos deja :


 $client->download($video_id);
  $client->download($video_id, {
      fmt      => 37,
      filename => 'sample.mp4', # save file name
  });
  $client->download($video_id, {
      filename => '{title}.{suffix}', # maybe `video_title.mp4`
  });
  $client->download($video_id, {
      cb => \&callback,
  });


Por ejemplo:

Vamos a descargar un vídeo,usando el modulo WWW::YouTube::Download yo hice un script usando las instrucciones de Yuji Shimada que queda así:

#!/usr/bin/env perl


use strict;
use warnings;
use utf8;
use WWW::YouTube::Download;

if ($ARGV[0]) {

my $client = WWW::YouTube::Download->new;


my $video = $ARGV[0];
my $video_id="$video"; 
$client->download($video_id, {
      filename => '{title}.{suffix}', 
    });
}

else {

print "\n[+] Sintax : $0 'video_id' \n\n";

}


Copien y peguen el script en un documento,luego pongan el nombre que gusten con extensión .pl.

Para bajar un vídeo ya solo se hace esto:


perl script url_del_video
Si lo ejecutan puede que de error de dependencias

Así que instalen el modulo

Con estos comandos:


su


cpan


install WWW::YouTube::Download

Vídeo de demostración de como descargo un video:




Y así se usa :D

Los vídeos se descargaran en la carpeta donde este el script,en .flv

No he encontrado documentación de como descargarlos en otro formato,pero pueden usar un convertidor.

Por ejemplo tbashconverter.sh


Enlace

Claro que este modulo no se puede usar solo así sino que se puede emplear de maneras sorprendentes,por ejemplo con una GUI en Gtk3 o Qt ,yo por ejemplo le añadí una tipo extensión al navegador que he estado presentando(simplePerlBrowser) :

No les doy el código,por eso del copyright de youtube(vídeos),ya que es muy simple de usar:

Añadí un algoritmo que detecta si entramos a youtube

Copia la Url y se la manda al modulo de youtube

En otras palabras,solo darle clic a descargar



Pero no se los puedo dar :(

Pero con los tutoriales de perl del sitio se podrán armar uno igual o mejor,ya que yo use simplePerlBrowser pero se puede crear una GUI desde 0 :D

Saludos y espero que les sirva el script para que bajen vídeos fácilmente desde linea de comandos :D




Leer más...

domingo, 25 de noviembre de 2012

Comandos útiles para la SHELL de sistemas tipo Unix

Si son unixeros como yo,o linuxeros que les gusta mucho la terminal estos comandos les servirán mucho y los sacara de muchos apuros


ya que en Unix existen mas de 300 comandos,los cuales siguen manteniendo sus descendientes:

Sea Darwin(iOS,OS X):






Sea Linux



Sea Android(también Linux)



Sea FreeBSD


etc


Y comenzamos con los comandos

1.echo

Echo sirve para la impresión de una orden:

Esto puede ir simplemente a

echo "Hola Mundo"

o a ver nuestras variables del sistema

echo $SHELL


echo $PS1


echo $PS2


echo $LOGNAME

Y también la re dirección de salida a un fichero

Por ejemplo

Añadir una linea a un archivo(borrar lo demás)

echo "Hola" > archivo.txt

Añadir una linea al final de un archivo(no borra lo demás)

echo "hola" >> archivo.txt

O también podemos imprimir la salida con color,por ejemplo:

echo -e "\e[1;35m$LOGNAME\e[0m"

Con el parámetro -e podemos permitir la interpretación de los caracteres de escape de barra diagonal inversa:

echo -e "Esto es una linea\n""Esto es otra"

echo -e "Voy a mandar\n""Dos lineas a" >> archivo.txt
Algo mas útil

echo -e "Información de red fecha `date`:\n\n""`netstat`" >> archivo.txt
 y vean con

cat archivo.txt
Para mas info sobre echo teclear en terminal

info echo

2.Cat

Como lo viste arriba cat sirve para mostrar el contenido de un archivo de texto:

cat archivo.txt
Para duplicar el archivo

cat archivo.txt >> archivo2.txt
 Concatenar y ver archivos de texto

Mas info

info cat
3.Grep

Para buscar una palabra en un lugar,puede ser en un solo archivo

grep palabra archivo


grep parametro | comando

Por ejemplo

grep unix archivo.txt
O desde otro comando

netstat | grep unix
También usando regex(expresiones regulares)

Por ejemplo escanear nuestros puertos,y ver solo los puertos abiertos del 20 al 445

 nmap localhost | grep open | grep '[20-445]'

 Mas info

info grep
4.Cd

Cambiar de directorio

Primero que nada debemos ver donde estamos,con el comando

pwd

Para ir hacia atrás

cd ..

Para ir  a nuestro home

cd ~

o

cd --

o

cd $HOME

Cambiar a $HOME de otros usuarios,como root

su


cd ~usaurio

Mas info

info cd


5.Limpiar la terminal

Para limpiar la terminal

clear

Pero solo agrega lineas en blanco y nuestros datos que hemos introducido los podemos seguir viendo si nos dirigimos hacia arriba

Para limpiarla totalmente

reset

6.ls


Para listar el contenido de una carpeta solo basta con teclear

ls

Pero también podemos usar cuantificadores

Por ejemplo listar solo los pdf's de nuestro directorio

ls *pdf

Mas info

info ls
Eso es todo

Estos paquetes son parte de los sistemas tipo Unix que son del paquete

GNU Core Utils

Por eso en ves de usar

man ls

o

ls --help

Usamos

info ls

Ya que info también es de GNU Coreutils

Leer más...

sábado, 24 de noviembre de 2012

Crear aplicaciones para Android con Perl Ejemplo

Vamos a seguir con el desarrollo de aplicaciones para android con perl,en este caso o mejor dicho en esta entrada ya se tiene tomado en cuenta que ya tienes las apps necesarias para programar listas y instaladas en tu móvil.

Si no es así visita este tutorial:

Tutorial

Bien ahora vamos a hablar claro,el desarrollo de apps para android se puede hacer en muchos lenguajes de programación  desde su lenguaje nativo,en C,C++ en scripting con lenguajes no compilados,android ofrece esta característica a los desarrolladores profesionales o a los aficionados autodidactas como yo,esto se puede integrar a un desarrollo muy bueno,para crear una app muy buena,pero, que pasa con el scripting?

Como funciona el scripting en android?

El scripting en Android funciona gracias a SL4a (Scripting Layer for Android) SL4a usa Android Facades para exponernos las API's disponibles,esto hace que sea el lenguaje de scripting que sea nos brinda el mismo set de API's

Que son las API's?

API (del inglés Application Programming Interface) es el conjunto de funciones y procedimientos  en la programación orientada a objetos, que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción.

Osea que en otras palabras podemos programar algo con el set de API's que nos ofrecen,en otras palabras no tendremos el mismo resultado que si programamos en Java

Asi es como funciona una app de Android con SL4a


Esa imagen es de python,pero SL4A funciona igual con Python,Perl,Lua

Bien aqui un ejemplo

Programa de encuesta para Android escrita en python hecho por cristalab.com

Este programa lo que hace es Abrir una Alerta y preguntar algo y la respuesta se efectúa con botones ,luego con una estructura selectiva muestra una alerta para cada boton:


import android
droid = android.Android()
crear_alerta = droid.dialogCreateAlert('Encuesta','Te gusta http://rootcodes.com?')
boton_no = droid.dialogSetNegativeButtonText('No me gusta')
boton_si = droid.dialogSetPositiveButtonText('Si, me gusta')
boton_cancelar = droid.dialogSetNeutralButtonText('Yo no voto!')
droid.dialogShow()
respuesta = droid.dialogGetResponse().result
if respuesta['which']=='positive':
  droid.dialogCreateAlert('Gracias por tu voto','Me alegra que te guste!')
elif respuesta['which']=='negative':
  droid.dialogCreateAlert('Gracias por tu voto','Una lastima que no te guste!')
else:
  droid.dialogCreateAlert('Gracias por tu voto','Un voto nulo :\\')
droid.dialogShow()


Mas info en cristalab.com

Como también se python traduje ese algoritmo a perl y luce así(cambie el texto y añadí unos botones) pero hace lo mismo.


use Android;

my $droid = Android->new();
$droid->dialogCreateAlert("Encuesta", "Te gusta perl");
$droid->dialogSetNegativeButtonText("No me gusta");
$droid->dialogSetPositiveButtonText("Si me gusta");
$droid->dialogSetNeutralButtonText("Yo no Voto!!");
$droid->dialogShow();

my $respuesta = $droid->dialogGetResponse->{'result'};

my $which = $respuesta->{'which'};

if($which =~ m/positive/) {
$droid->dialogCreateAlert('  Gracias', 'Por tu respuesta');
$droid->dialogSetPositiveButtonText("Salir");
}
elsif($which =~ m/negative/) {
$droid->dialogCreateAlert('  Que mal', 'Gracias por tu respuesta');
$droid->dialogSetPositiveButtonText("oK");
}
elsif ($which =~ m/neutral/) {
$droid->dialogCreateAlert('  Gracias', 'Tal vez luego');
$droid->dialogSetPositiveButtonText("oK");
}

$droid->dialogShow()


Lo explico:


my $droid = Android->new(); # Nueva estructura
$droid->dialogCreateAlert("Encuesta", "Te gusta perl"); # Crea Alerta
$droid->dialogSetNegativeButtonText("No me gusta"); # Crea Botón
$droid->dialogSetPositiveButtonText("Si me gusta"); # Otro botón
$droid->dialogSetNeutralButtonText("Yo no Voto!!"); # Y otro botón
$droid->dialogShow(); # Mostramos la alerta

Eso hace esto:



Ahora esto:

my $respuesta = $droid->dialogGetResponse->{'result'};

Comienza después de pulsar un botón.
Esta variable no sera visible,lo que hace es pedir la respuesta,o mejor dicho ver que botón se pulso,la sintaxis ya la hemos visto,solo que aquí usa los argumentos Android.

Esto:

my $which = $respuesta->{'which'};


Tampoco sera visible,lo que hace es limpiar la respuesta a positive,negative o neutral y guardarlo en una variable ($which).

Y por ultimo:

if($which =~ m/positive/) {
$droid->dialogCreateAlert('  Gracias', 'Por tu respuesta');
$droid->dialogSetPositiveButtonText("Salir");
}
elsif($which =~ m/negative/) {
$droid->dialogCreateAlert('  Que mal', 'Gracias por tu respuesta');
$droid->dialogSetPositiveButtonText("oK");
}
elsif ($which =~ m/neutral/) {
$droid->dialogCreateAlert('  Gracias', 'Tal vez luego');
$droid->dialogSetPositiveButtonText("oK");
}

$droid->dialogShow()



Creamos una estructura selectiva de tres comparadores,solo cabe mencionar que usamos una expresión regular para comparar la respuesta:

$which =~ m/negative/

Al final if :


if($which =~ m/positive/) {
$droid->dialogCreateAlert('  Gracias', 'Por tu respuesta');
$droid->dialogSetPositiveButtonText("Salir");
}


hará esto:


El primer elsif :

elsif($which =~ m/negative/) {
$droid->dialogCreateAlert('  Que mal', 'Gracias por tu respuesta');
$droid->dialogSetPositiveButtonText("oK");
}


Esto:


Y el segundo elsif:

elsif ($which =~ m/neutral/) {
$droid->dialogCreateAlert('  Gracias', 'Tal vez luego');
$droid->dialogSetPositiveButtonText("oK");
}

Esto:




Cabe mencionar que esta forma de programación se hace desde el móvil y es algo molesto, pero pueden hacerlo desde la pc,solo metan el script en la carpeta sl4a/scripts de su memoria del movil



Y checen la API


Es muy buen set


Eso es todo :D



Leer más...

viernes, 23 de noviembre de 2012

Crear aplicaciones para Android con Perl

Yo soy mas fan del desarrollo de iOS en objective-C y de sus apps,tweaks,etc,por eso no ven que hable mucho de android en Tiempo de Tux,ni de su desarrollo de apps nativas con eclipse ni de roms,root,apps,etc pero si los conozco y de hecho uso android desde el tmobile G1 competencia del iPhone 2g(que tiempos), pero ya desde antes era usuario de iOS así que ya estaba amarrado a iOS :P

Bueno el caso es que últimamente estamos viendo programación perl,mas en especifico

scripting perl Unix

Y también tengo dos móviles android así que me di a la tarea de investigar si se puede programar en perl apps para android,ya que había oído que se puede programar en python.lua,ruby y pensé que no dejarían fuera a nuestro poderoso y legendario Perl

Y si,no lo dejaron fuera del desarrollo de aplicaciones para el sistema de google,lo único que se tiene que hacer es bajar dos apps al móvil y empezar a escribir

Bueno como yo lo hago es así

1.Saber escribir en dicho lenguaje(estudiarlo)

2.Dar un paseo por la API(ver documentación)

3.Comenzar un pequeño programa(app) desde hola mundo,hasta nuestras propias limitaciones

Así que aquí el tutorial de Hola Mundo con perldroid android-scripting

Esto es un poco avanzado así que tengo en cuenta que sabe instalar apps de terceros, usar el menú botones,etc

1.Descarga perl for android

Enlace

Instala y abre la app



Le damos en install y descargara lo necesario(esperamos)


2.Descarga sl4a

Enlace
Instala y abre


Nos saldrán dos archivos

Si corremos test nos saldrá mucho de lo que podemos hacer con perl en android


3.Hola Mundo

Como pueden ver ya nos trae un Hola mundo.pl pero aquí otro

Solo le damos al boton de menu y add

Elegimos Perl

Hola mundo normal

Escribimos:


use Android;

my $texto = Android->new();
$texto->makeToast("Hola Mundo!!!");

Luego en el botón menu

Save & Run

Hola mundo alert

Podemos crear una pequeña alerta así


use Android;

my $texto = Android->new();
$texto->dialogCreateAlert("Titulo", "Alerta");
$texto->dialogShow()


Por ejemplo yo lo implemente así:


use Android;

my $droid = Android->new();
$droid->dialogCreateAlert("Hola Mundo!!!", "Hola perldroid!!!");
$droid->dialogShow()

Y da este resultado al ejecutar

También podemos hacer esto mas interesante añadiendo un PositiveButton

iría (+ o -) así:


use Android;

my $droid = Android->new();
$droid->dialogCreateAlert("Hola Mundo!!!", "Hola perldroid!!!");
$droid->dialogSetPositiveButtonText("Salir");
$droid->dialogShow()


Y daría este resultado al ejecutar


Se pueden hacer muchas cosas con el scripting perl,al igual que con python(que hay mas documentación  pero viendo la API y ya sabiendo programar en perl podemos sacarle provecho a esta forma de creación de apps.


                    code.google.com/p/android-scripting/




Leer más...