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

sábado, 1 de junio de 2013

Script para buscar wifi desde terminal [Actualizado]

Le hice una actualizacion a este pequeño script,el cual logra que nos conectemos por wifi desde la consola,este script lo cree para instalar Gentoo hace un tiempo ya que me conectaba a wifi desde la shell o tty y era un poco complicado andar de un lado a otro conectandome desde la shell,esto se puede solucionar con un solo comando o un pequeño script pero como me conecto a varias redes wifi,de amigos,familia,abiertas,etc no era una opcion solo hacer algo como:

 #!/bin/bash  
 iwconfig wlan0 essid "red" key clave  
 dhcpcd wlan0  
 exit 0;  

Cree el script para ayudarme y para ayudar a los que tengan el mismo problema que yo,ya que para usar solo se descarga desde una pc con internet,lo pasamos a una usb y la conectamos a nuestra distro, en mi caso Gentoo y como es solo tty seria algo como:

fdisk -l | sed -n '$p' | awk '{print $1}' # Para ver el usb

mnt /dev/sdx /media # Para montar el usb en media

cd /media && cp scan.sh ~/ # Para copiar el script a nuestro home

Y finalmente

bash scan.sh

Para ejecutar,todo debe ser como root.



Lo que le añadí a este script es que busca el BSSID y checa si la conexión es abierta,si es abierta al elegirla automaticamente hace un dhcpcd para asignarnos una ip,si tiene clave wep nos la pide,si tiene wpa o wpa2,da error ya que eso se hace con wpa suplicant :( y no le he añadido soporte.

Otras cuestiones a tomar es que la interfaz de red debe estar activa,(tener instalado los drivers(modulos) en el sistema tener dhcpcd o un programa que nos asigne una ip, y no estar corriendo un daemon como wicd o networkmanager porque da error de comunicacion(además de que no debería porque esta pensado para usuarios que no tienen interfaz,a menos que uses wicd en modo curses),bien eso es todo,les dejo el script


Enlace
Nota: Crea un archivo que se llama redes.temp,si tienes uno que se llama igual en la carpeta del script lo va a borrar. 

Esta hecho a base de tuberias de comunicacion Unix para el filtrado de datos.

Puede que piensen que algo como wicd-curses es una mejor opcion y de hecho si,yo tambien lo pense y no tenia internet para descargarlo y cuando me di cuenta ya habia programado este script que tambien puede usar dhclient,dhcpcd,pump,udhcpc,udhcpd solo que hay que configurar en el script:D

Luego le hago una Interfaz grafica :P

Saludos :D
Leer más...

sábado, 16 de marzo de 2013

Script bash para conectarse a wifi por terminal

Como hace poco reinstale gentoo me recordó lo mucho que he batallado para conectarme a wifi en un sistema operativo sin interfaz gráfica o no solo la interfaz si no que sin ningún daemon que haga esto simple como wicd,networkmaganager,etc,esto me recuerda mi epoca de Debianita y de Archero porque tenia algunos problemas con mi tarjeta de wireless y después no sabia que era lo que hacia mal,porque no me conectaba :(

Ya que, verán,para conectarse a una red wifi por consola se usa este comando:

iwconfig interfaz_de_red essid nombre_de_red

En Linux,en BSD es :


ifconfig wlan0 inet "tu-inet" netmask 255.255.255.0 ssid "Tu-SSID" channel "Canal" # Creo que este también funciona para Linux
Pero primero necesitamos escanear los puntos de acceso,para eso usamos el comando:

iwlist scan

Pero nos tira muchos datos,podemos verlo paso a paso con:

iwlist scan | more

Pero eso ya es para buscar otro tipo de información,normalmente obtenemos el esssid de las redes cercanas con:

iwlist scan | grep ESSID
 Y luego ya usamos el comando mencionado arriba,pero en este punto yo siento que aveces me equivoco y no tecleo bien el nombre de la red,bueno si es mi red con mi nombre no hay problema,pero si quiero crackear conectarme a una red abierta de un parque,etc :O.

Bueno,ya con el essid asociado solo nos asignamos una ip,por dhclient,dhcpcd,ifconfig,etc,pero bueno mejor programe un script que hace casi,todo el trabajo,digo casi,porque necesitamos tener funcionando correctamente nuestra interfaz de red lan (wlanX,ethX,etc) y si no es asi no funcionara, también necesitamos tener dhcpcd instalado o dhclient,o cualquier programa que haga este trabajo de asignación (necesitan modificar el script).

Bueno el script:

Busca las redes mas cercanas ha base de pipes unix,las añade a un array y las muestra a selección,pregunta si usamos clave(solo wep) y nos asocia a la red y nos asigna una ip:

Enlace
Nota: Si tienen un daemon que haga esto les puede dar errores,graves.

Solo deben ejecutar como root

sudo bash script.sh

Y listo :D

Lo modifican a sus necesidades, no tengo pantallasos porque ya tengo networkmanager en mis sistemas y cuando lo programe no tenia como sacar screenshots (a menos con el iPhone pero es peligroso) lo programe en tty.

Eso es todo
Leer más...

martes, 12 de marzo de 2013

Mandar archivo a papelera de reciclaje con consola Linux/Unix

Bueno,no se si les ha pasado que cuando queremos borrar un archivo y lo hacemos desde terminal,luego ya no lo podemos recuperar, algunas ocasiones se quedan los archivos de backup,aquellos que tienen el símbolo (~),pero otras veces no podemos recuperar el archivo :(,en mi caso yo hice una tonteria,muy grande :

Estaba programando un programa(valga la redundancia) en C++ con el cual el makefile podía usar prefix,y estaba usando bin,pero hice algo mal y se creo un directorio bin adentro de /bin el cual traía los archivos,asi que los borre,con rm -rf (como root) luego en un mal pensamiento en vez de hacer exit o cd ~, cambie a / (cd ..) pero se me fue el dedo y 

rm -rf bin 
De nuevo y esta vez no borrro el bin que creo el makefile,sino que el bin del sistema

:O

Así que adiós /bin de Gentoo :(

Y como saben /bin contiene archivos muy importantes,existen formas de recuperar los datos,pero las herramientas que se usan estan en /bin, también al reiniciar se perdía definitivamente y no pude entrar por ssh,y ya era noche así que mejor decidi apagar y reinstalar otro dia,de todas formas ya tenia mucha basura en gentoo y no habia actualizado el kernel,asi que mejor a reinstalar :D.

El hecho es que el comando rm es muy peligroso y se me ocurrió que en vez de eliminar definitivamente,moverlo al trash para poder recuperar el contenido.


Esto se puede hacer de muchas formas:

Fácil ,solo crear un alias que cambie rm por mv:

alias rm="mv -t ~/.local/share/Trash/files --backup=t" 

Esto nos mueve lo que sea archivo/carpeta a la papelera de reciclaje(podemos cambiar el destino) y crea un backup por si ya hemos movido alguno de nombre similar.

Asi que para usar este comando solo hacemos esto:

echo 'alias rm="mv -t ~/.local/share/Trash/files --backup=t"' >> ~/.bashrc && source ~/.bashrc

Ahora al hacer,(por ejemplo yo):

rm /bin

Lo mueve a la papelera y lo puedo mover desde otra partición de nuevo.

Pero hay dos cosas:

Lo bueno : Como cambia rm si se nos va el dedo nos movera el archivo a la papelera.

Lo malo : Que al querer vaciar la papelera o lo hacemos desde un explorador de archivos(nautilus,etc) o tenemos que hacer un unalias:

unalias rm

Para poder usar rm de nuevo y hacer,por ejemplo

rm -rf trash/*
Pero al terminar tendríamos que hacer nuevamente


echo 'alias rm="mv -t ~/.local/share/Trash/files --backup=t"' >> ~/.bashrc && source ~/.bashrc
Así que esa es una opción:

Otra opción:

La misma pero con otro nombre,en vez de cambiar el comando rm,podemos usar delete por ejemplo:

echo 'alias delete="mv -t ~/.local/share/Trash/files --backup=t"' >> ~/.bashrc && source ~/.bashrc
Lo malo : Es que si tecleamos rm,pasara lo mismo(se ejecutara),tendremos que aprender a usar este alias

Lo bueno : Que podremos vaciar la papelera desde terminal y no tendremos que asignar de nuevo un alias.

Otra opción:

Crear un script:

Enlace

Lo metemos en una carpeta,la que queramos de nuestro Home o en /usr/bin con permisos de ejecución:

Por ejemplo oculto en nuestro home quedaria en esta ruta:

~/.script.sh

Le damos permisos de ejecucion:

chmod +x ~/.script.sh

Creamos un alias,por ejemplo:

echo 'alias rm="bash ~/.script.sh"' >> ~/.bashrc && source ~/.bashrc

Y al hacer rm,se ejecutara el script que programe:





También funciona con carpetas y con wildcards como se vio en la imagen,hiba a implementar vaciar papelera,pero se me podía ir el dedo de nuevo :P

Lo deje comentado para que lo modifiquen a sus necesidades,otra cosa es que hay mas maneras de hacer esto,pero a mi me gusta programar lo que uso,y bueno si conocen mas comenten :D

Leer más...

sábado, 9 de febrero de 2013

Juego piedra papel o tijeras perl

Estaba viendo que en distintos lenguajes de programación existen algoritmos básicos para el aprendizaje,y ya lo había hablado,en esta ocasión les dejo este juego que es el conocido juego de piedra papel o tijera escrito en Perl:

Y también lo uso como ejemplo de lo que vimos en la entrada pasada de switching, y me equivoque dije que necesitabamos usar 5.10 para poder hacer switching en Perl 5.16 y no,se puede usando 


feature qw{ switch };

Y bueno les dejo el juego para que se diviertan un rato,jugando,modificandolo, entendiéndolo, arreglándolo,etc:





Enlace

Eso es todo :D


Si tienes problemas o un aporte comenta :D

Leer más...

domingo, 6 de enero de 2013

Simpleperlbrowser 4.1.1

Bien,esta entrada es para corregir algunos errores en la versión de la entrada pasada :\

Lo que pasa es que fallaron algunas cuestiones de lo nuevo que le puse y no tan nuevo, y es mejor arreglarlas,bien:

1.Error numero 1:

Error de https

No cargaba https,lo amontonaba,algo como http://https://url

Arreglado

2.Error en ventana de configuración de pantalla de inicio:

Al cerrar la ventanita,se destruía el botón de aceptar,y al volverlo abrir,no lo podía reconstruir

Arreglado y añadido otro stock

3.Algunas tonterías,como por ejemplo que no le había cambiado el nombre,(aun decía versión 3 ) ,que tenia código inútil,que había escribido,para prueba pero que no borre :S

4. Codigo repetido,al implementar JSON,use mucho su configuración en codigo repetido y mejor cree una subrutina,para mandarle la configuración de otras subrutinas.

5.No se abría en pantalla completa,una cosa es fullscreen y otra pantalla completa, así que:

Arreglado :D

También comente todo el código para entenderlo mejor y modificarlo mas fácil :D

Bien aquí el código fuente:

Enlace
Necesitas Gtk3,JSON,Gtk3::WebKit de CPAN


Configuración .json

Enlace

Y aquí el compilado,listo para usarse

Enlace

Si encuentran algún otro error comenten
Leer más...

viernes, 4 de enero de 2013

Simpleperlbrowser 4.1

De nueva vez,digo otra vez, he actualizado el navegador web escrito en perl,en esta ocasión he añadido,un menú de opciones,el cual en futuras actualizaciones usare para mas funcionalidad,de momento es una pequeña actualización de 4.0 a 4.1,ya que solo he estado creando el menú el cual se basa en la configuración de Gtk,y no en la configuración de Webkit,el cual es bastante grande,asi que como dije no me he metido en la API desde la 2.0.


Ya que no soy desarrollador web y solo tengo unos cuantos conocimientos en servidores,mysql,php y javascript, así que no me sirven de momento para usarlos en el navegador,ya que la documentación esta en C, y aunque la entiendo(un poco) necesito estudiarla mas,para ponerle funciones web a este navegador :D

Bueno,como dije le puse un menú,el cual use JSON para configuración,la cual es:

1.Pagina de inicio

2.Pantalla completa

3.Hide bar

También añadí un about y un exit

Otra cosa que añadí es un icono,el cual parece en todos lados,donde tenga que aparecer el icon en Gnome 3.

Solo que no soy diseñador gráfico y tendrán que añadirlo ustedes :\

Si no lo añaden no esta mal,añadi una estructura que verifica si existe y si no no hay problema.

Solo añadan un icono llamado logo.png a la carpeta del script.

Eso es todo,y ahora luce de esta forma:




Lo que se propone con este navegador,es que sea un ejemplo,de programación Gtk3/Perl y

Como es un ejemplo,para usarlo tenemos que hacerlo a lo gentoo:

Instalamos los módulos necesarios:

En terminal:

su

cpan

install Gtk3

install JSON


install Gtk3::WebKit
 
Ahora creamos un archivo de texto con extensión .pl y metemos el código fuente:

Enlace

Ahora creamos la configuración JSON

Creamos un archivo de texto con extensión .json y metemos el código:

 Enlace
Ahora abrimos con la terminal el script:

chmod +x perlbrowser.pl
y

./perlbrowser.pl

Y listo:


Como dije es un ejemplo,pero si lo quieren usar como navegador web,pueden bajar el ejecutable compilado,aunque también incluí el código fuente:

Ya listo para usarse

Enlace
Eso es todo
Leer más...

martes, 25 de diciembre de 2012

Como compilar/empaquetar script's perl para Linux

Como saben o se abran dado cuenta por los tutoriales del sitio, yo le se algo algo a la programación perl,mi lenguaje de programación interpretado favorito,al poder crear script's rápidamente y al tener CPAN que,uff es un excelente lenguaje de programación aunque hoy en dia se esta usando mas PHP,Python o Ruby :(.

Aun así yo lo uso y me sirve para todo,desde programación web(que no acostumbro a usar),hasta aplicaciones de android,Linux/FreeBSD/WIndows,etc :D

Bueno el hecho es que los scripts .pl se pueden compilar,esto también podríamos llamarlo empaquetar,ya que agrega nuestros módulos que necesita el script y los empaqueta en un simple ejecutable,ejecutable para Unix y .exe para Windows.

Yo los ejemplos que he hecho no los he compilado,esto por dos razones:

1.Las distribuciones de Linux que uso son Rolling, y tienen lo mas nuevo,el problema es que si un modulo es mas reciente,por ejemplo Glib,otra distribución que no tenga la misma versión o superior no correrá el ejecutable, así que por ejemplo algún script que haga en Archlinux solo les funcionara en Archlinux o en un tiempo en otras distribuciones,cuando tengan las mismas versiones que mi sistema(me refiero a no menores que la mía  o sea igual o superior pero no menor.

2.Los ejemplos que hago son para demostración,como van a usar el código como ejemplo si esta compilado,ademas de que los hago con licencia GPL.

Así que veamos como hacer esto:


Tutorial

1.Instala PAR

su


cpan


install PAR
2.Instala pp(Perl Packager)


En mismo cpan

install pp

Listo ahora solo usamos esta sintaxis:

pp -o nombre_compilado script.pl
Por ejemplo:

pp -o simplePerlbrowser simplePerlBrowser.4.0.pl

Vídeo de ejemplo

Aquí muestro como ejecuto simplePerlBrowser en un sistema que no tiene instalados los módulos.



También pueden checar las dependencias de

 pp -x nombre_compilado

O crear un exe para Windows

pp -o nombre.exe script.pl

Muchas mas información en:

http://search.cpan.org/~rschupp/PAR-Packer-1.014/lib/pp.pm

En el vídeo no le hice cat al ejecutable,pero compilar también es ofuscar y esto seria lo que mostraría cat

Eso es todo :D
Leer más...

domingo, 23 de diciembre de 2012

tbashconverter 1.3 script para convertir videos

Una vez mas actualice este script que programe que me ha funcionado mucho,de hecho tengo una suite de script's :D hechos en perl,bash,python y ruby algunos los he puesto como el descargador de vídeos de youtube de perl o el navegador web python[Qt]/perl[Gtk] y el escaner de puertos bash y otros.

Como dije este script sirve bastante,ya que siendo honesto muchos programas/scripts que hago solo los hago y los dejo tirados,por usar otros mas profesionales,y en esta caso no,es el único convertidor que uso :D

Bueno que añadí en esta versión:

Como ven es una versión nueva,ya que no es un arreglo a algún bug,si no que añadí nueva función.

Si nueva función,solo una :\

Lo que hace es que como esta basado en ffmpeg hice la GUI en zenity para fácil conversión,pero aveces estamos ya en la carpeta donde esta el video que vamos a convertir desde la terminal, así que añadí es nueva función:

Poder convertir vídeos desde linea de comandos,esto suena un poco tonto,ya que ffmpeg lo hace así nativamente:

ffmpeg -i video.mp4 video.flv

Y tbashconverter

tbashconverter video.mp4 
Por ejemplo abrimos necesitamos convertir un video

Abrimos terminal y escribimos

tbashconverter

Y nos aparece la GUI que solo tenemos que ir llenando(muy fácil)

Ahora la otra opción(nueva opción)


Ya estamos usando la terminal y estamos en la carpeta del video,para rápidamente solo escribimos

tbasconverter video

Y nos aparecerá una GUI similar a la otra

Suena raro,pero me paso y por eso lo programe :P

Y para que no sea mala practica esto, para que funcione sin problemas nuestro script,solo debe estar en /usr/bin con permisos:

-rwxr-xr-x 1 root root
Este es el código(use scripting un poco mas avanzado)

Enlace
Para usar solo:

1.Abren un editor

Y pegan el código


2.Lo guardan como tbashconverter en su Carpeta personal

3.Abren una terminal y teclean

sudo mv ~/tbashconverter /usr/bin/tbashconverter

4.Le dan permisos de ejecución

sudo chmod +x /usr/bin/tbashconverter

5.Listo escribe

tbashconverter 
Eso es lo básico si llevan un tiempo en Linux/Unix pueden usar su propia forma de ejecutarlo,ya que como saben no es la unica.

En la terminal :D
Leer más...

domingo, 16 de diciembre de 2012

Como instalar Perl en el iphone ios

Esta vez vamos a aprender a instalar Perl en nuestro iPhone/iPod/iPad,de momento yo lo he probado en ipod touch 3g/4g y iphone 4 iOS 5.1.1 con jailbreak.

Necesitan jailbreak y iOS 5,no lo he probado en iOS 4 o 3 pero creo que también funciona :D

Solo les tengo malas noticias,este lenguaje usado en iOS esta dedicado al scripting,ya que no esta(no he encontrado) UICaboodle para perl y crear interfaces graficas basadas en UIApliction :(.

Osea que solo lo podremos usar en scripts como es el caso de ruby,no como python que si incluye UICaboodle por ejemplo esta es la app de python que se instala con python(hello word) y lo que hace es importar los contactos y mostralos en GUI:


# Special thanks goes to Dave Arter (dave@minus-zero.org)
# for actually writing most of this sample application!!

# While I managed to get PyObjC working, I didn't actually
# know any Python to go with it ;P. - Jay Freeman (saurik)

import sys

import objc
from _uicaboodle import UIApplicationMain
from objc import YES, NO, NULL
from sqlite3 import dbapi2 as sqlite 

objc.loadBundle("UIKit", globals(), "/System/Library/Frameworks/UIKit.framework")

class PYApplication(UIApplication):
    def getName(self, contact):
        name = contact["first"]
        if contact["last"] is not None:
            name += " " + contact["last"]
        return name

    @objc.signature("i@:@")
    def numberOfSectionsInSectionList_(self, list):
        return len(self.sections_)

    @objc.signature("@@:@i")
    def sectionList_titleForSection_(self, list, section):
        return self.sections_[section]["title"]

    @objc.signature("i@:@i")
    def sectionList_rowForSection_(self, list, section):
        return self.sections_[section]["row"]

    @objc.signature("i@:@")
    def numberOfRowsInTable_(self, table):
        return len(self.contacts_)

    @objc.signature("@@:@i@@")
    def table_cellForRow_column_reusing_(self, table, row, col, reusing):
        contact = self.contacts_[row]
        if reusing is not None:
            cell = reusing
        else:
            cell = UIImageAndTextTableCell.alloc().init()
        cell.setTitle_(self.getName(contact))
        return cell

    @objc.signature("c@:@i")
    def table_canSelectRow_(self, table, row):
        return NO

    @objc.signature("v@:@")
    def applicationDidFinishLaunching_(self, unused):
        self.contacts_ = []
        self.sections_ = []

        db = sqlite.connect(self.userHomeDirectory() + "/Library/AddressBook/AddressBook.sqlitedb")
        cursor = db.cursor()
        cursor.execute("select first, last from ABPerson where first is not null order by first")
        for first, last in cursor.fetchall():
            self.contacts_.append({"first": first, "last": last})
        cursor.close()
        db.close()

        outer = UIHardware.fullScreenApplicationContentRect()
        self.window = UIWindow.alloc().initWithFrame_(outer)

        self.window.orderFront_(self)
        self.window.makeKey_(self)
        self.window.setHidden_(NO)

        inner = self.window.bounds()
        navsize = UINavigationBar.defaultSize()
        navrect = ((0, 0), (inner[1][0], navsize[1]))

        self.view = UIView.alloc().initWithFrame_(self.window.bounds())
        self.window.setContentView_(self.view)

        self.navbar = UINavigationBar.alloc().initWithFrame_(navrect);
        self.view.addSubview_(self.navbar)

        self.navbar.setBarStyle_(1)

        navitem = UINavigationItem.alloc().initWithTitle_("Contact List")
        self.navbar.pushNavigationItem_(navitem)

        i = 0
        letter = u""
        for contact in self.contacts_:
            name = self.getName(contact)
            now = unicode(name[0])
            if letter != now:
                letter = now
                self.sections_.append({"row": i, "title": now})
            i += 1

        lower = ((0, navsize[1]), (inner[1][0], inner[1][1] - navsize[1]));
        self.list = UISectionList.alloc().initWithFrame_(lower)
        self.view.addSubview_(self.list)

        col = UITableColumn.alloc().initWithTitle_identifier_width_("Name", "name", 320)

        table = self.list.table();
        table.setSeparatorStyle_(1)
        table.addTableColumn_(col)
        table.setReusesTableCells_(YES)

        self.list.setDataSource_(self)
        self.list.reloadData()

UIApplicationMain(sys.argv, PYApplication)



Y se ejecuta con un script en bash:


#!/bin/bash
exec "$(dirname "$0")"/Python "$(dirname "$0")"/HelloPython.py

Así se podría hacer en Perl,pero no hay nada de documentación y tampoco encuentro UICaboodle para perl,para por lo menos traducir las aplicaciones de Python a Perl y crear algunas apps sencillas para que sirvan de ejemplo.

Pero bueno,de todas formas en cydia nos dan muchos módulos muchos para usarlos en scripting desde terminal,que se encuentran en CPAN.




Tutorial



1.Necesitamos ya tener el jailbreak pero también necesitamos instalar de cydia:

openssh

APT 0.7 HTTPS Method

wget 

sbsettings y el toogle de ssh

Y por ultimo Terminal








Solo entran a cydia,los buscan y instalan


2.Ahora en nuestro sistema de escrtitorio necesitamos un cliente ssh,en mi caso Archlinux instale openssh

 sudo pacman -S openssh

 Y nos conectamos por ssh

Encendemos el ssh del iphone y en la Pc/Mac

ssh root@ip_del_iphone

La ip del iphone esta en mismo sbsettings




3.Descargamos el .pub

wget http://coredev.nl/cydia/coredev.pub

Lo añadimos
apt-key add coredev.pub
Usamos un pipe para mandarlo a sources

echo 'deb http://coredev.nl/cydia iphone main' > /etc/apt/sources.list.d/coredev.nl.list
Recargamos los repos

apt-get update

4.Y instalamos

No probé

apt-get install perl

Pero puede que funcione ya que así instale python

Pero para mas seguro:

Salimos del ssh

exit

Entramos a Cydia >> Manejar >> Fuentes y estará una repo con el camello :D


Entramos y buscamos Perl


Instalamos



Hacemos un respring.

5.Creamos Hola Mundo

Abrimos terminal y escribimos:

 echo '#!/usr/bin/local/perl' > hola.pl && echo 'print "Hola Mundo!!!\n"' >> hola.pl

Pueden por ssh,o por con un editor como el de iFile

Y listo


Eso es todo si quieren módulos busquen en la repo hay muchos :D

Referencias:






Leer más...

lunes, 10 de diciembre de 2012

tbashconverter 1.2.2

Hace un tiempo vengo creando este script escrito en bash con una unión de ffmpeg y zenity como funciones,mas que nada esto es para transformar videos fácilmente.

Lo vengo actualizando y añadiendo cosas,ase un tiempo encontre otro error:

El cual arregle:

Enlace

Ase un tiempo se veía así:



Y lo he mejorado,pero como dije tiene errores y solo los arreglo cuando me doy cuenta (esta entrada es para comentar otro error).

Este error es que no permite archivos con espacios,sea salida o entrada :(

Y me di cuenta al convertir un vídeo con estos espacios, ya que normalmente siempre uso:

Esta sintaxis:

ffmpeg -i nombre-nombre.mp4 nombre.mp3

Pero me di cuenta al hacer

ffmpeg -i nombre nombre nombre nombre.flv no nombre.mp3
No encontraba el archivo y daba error

Así que ya lo arregle,pueden convertir vídeos con salida y entrada con espacios .

Aquí lo pueden descargar:

Enlace

Y lo ejecutan Igual que siempre:

Copian el código de pastebin

En terminal

 cd ~/


 touch tbashconverter.sh


 gedit tbashconverter.sh

Pegan el código guardan y cierran

Y después


 chmod +x tbashconverter-1.2.sh

Y ejecutan con

 ./tbashconverter-1.2.sh

o

 bash tbashconverter-1.2.sh

o

con nautilus clic derecho >> ejecutar >> en un terminal

O si prefieren como ya tiene ruta donde salvar el vídeo pueden moverlo a /usr/bin para poder usarlo donde sea con solo escribir tbashconverter en terminal

 sudo mv ./tbashconverter.sh /usr/bin/tbashconverter


Si encuentran otro error comenten para arreglarlo y mejorar este script :D


Leer más...

sábado, 1 de diciembre de 2012

Saber información del sistema con Perl

Ayer vimos como mostrar la información de nuestro sistema usando python,hoy lo haremos con perl,no es una comparación de lenguajes ni nada así,solo pretendo mostrar como obtener información de nuestro sistema usando perl.

En perl no necesitamos importar nuestro sistema como con python,bueno de hecho hay un modulo llamado Sys::Info en cpan,pero no lo he usado y se tiene que instalar,ademas se ve un poco complejo:

Enlace

Lo único que haremos es usar comillas invertidas,como se hace en el scripting shell,ayer vimos como se hacia de perl a python ahora de shell a perl:

En la shell de Unix no necesitamos usar nada,ya que los mismos comandos son los que muestran la información como por ejemplo para saber el nombre de usuario solo hacemos

whoami

Y listo :D

Ahora en la shell scripting tambien se puede hacer asi,pero no definimos ese dato en ninguna variable:

Por ejemplo

#!/bin/bash

whoami

echo "Tu usuario es :"

Esto nos imprime la salida de whoami pero no donde la queremos,que seria delante de la cadena de texto.

Para hacer estodebemos encerrar nuestro comando en comillas invertidas y usar una variable avanzada:

: ${usuario:=`whoami`

Y listo



#!/bin/bash

: ${usuario:=`whoami`}

echo "Tu usuario es : $usuario"

Así se hace en el shell scripting y como perl reúne lo mejor de sh,C,awk entre otros, también podemos hacer uso de las comillas invertidas :D

Lo que hacen las comillas invertidas es llamar comandos del sistema, así que si lo hacemos desde windows tendríamos que definir comandos de CMD


Lo único que necesitamos hacer es definir nuestro comando en una variable y luego llamarlo

Aquí el ejemplo:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;


my $usuario = `whoami`;
my $locacion = `pwd`;
my $kernel = `uname`;
my $release = `uname -r`;
my $fecha = `date`;

print "\nMi sistema :\n\n";
print "Tu logname es : $usuario\n";
print "Directorio Actual : $locacion\n";
print "Kernel : $kernel\n";
print "Release : $release\n";
print "Fecha : $fecha\n";



Eso es todo :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...

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...

jueves, 22 de noviembre de 2012

Comando grep Perl desde Unix

Hace poco vimos el manejo de archivos en perl  y también el uso de $ARGV así que ya estamos listos para ver el manejo de grep en perl,como se habrán dado cuenta grep es un comando que se encuentra en sistemas tipo Unix para filtrado de texto,este comando también se encuentra en el lenguaje de programación Perl

La sintaxis que se usa en Unix es esta

grep palabra archivo

O con un pipe

comando | grep palabra

Etc

En el scripting perl se define el algoritmo de esta manera:


 @palabras = ('Linux', 'iOS', 'iPhone', Darwin', 'Android', 'FreeBSD');
 @grepPalabras = grep(/^i/, @palabras);

 Esto lo que hace es filtrar el array palabras con la letra i

 grep(/^i/, @palabras);

Lo que valla adentro de:

/^aquí/

Es la letra o palabra que se filtra

Veamos el ejemplo ejecutado

#!/usr/bin/env perl


use strict;
use warnings;
use utf8;

my @palabras = ('Linux', 'iOS', 'iPhone', 'Darwin', 'Android', 'FreeBSD');
my @grepPalabras = grep(/^i/, @palabras);
print "@grepPalabras\n";


Como podemos ver se filtro lo que iniciara con i




Pero vamos a explicarlo


my @palabras = ('Linux', 'iOS', 'iPhone', 'Darwin', 'Android', 'FreeBSD');

^ Esto es un array que contiene las palabras,puede ser definido también así:

my @palabras = qw(Linux iOS iPhone Darwin Android FreeBSD);

O puede ser un archivo(mas adelante lo veremos)

my @grepPalabras = grep(/^i/, @palabras);

^ Es un array al que le pasamos el comando grep

grep(/^i/, @palabras);

^ En el segundo argumento (@palabras) tiene que ser el array que comente antes

print "@grepPalabras\n";

^ Llamamos el array que ya filtro el otro

Como vieron y he recalcado se imprimió lo que comenzara con i,ahora hay una forma de que sea viceversa que se imprima lo que no inicie con i

Solo basta con añadir un !

Al principio de la sintaxis de grep:

grep(!/^i/, @palabras);

Por ejemplo:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

my @palabras = qw(Linux iOS iPhone Darwin Android FreeBSD);
my @grepPalabras = grep(!/^i/, @palabras);
print "@grepPalabras\n";




Vamos a hacer algo como lo que hicimos en la entrada pasada,un ejemplo de como funciona grep de Unix con un algoritmo en perl

#!/usr/bin/env perl

if($ARGV[0] and $ARGV[1]) {
grp($ARGV[0],$ARGV[1]);
}else{
        print "\n[+] Sintax : $0 <Palabra> <Archivo>\n";
}

sub grp {

my($palabra,$archivo) = @_ ;

open (FILE,"$archivo") || die "$!\n";

while (<FILE>) {  

chomp;

my @palabra = grep{/^$palabra/} <FILE>; 

print "@palabra";
                        }
}

Este algoritmo es simple ya que en este caso lo que hace es,abrir un archivo y filtrar una palabra.

Pero podemos ver un poco mas del poder de grep

En mi caso vamos a hacer lo que hicimos en la entrada pasada

Creamos un archivo.pl

Que contenga lo siguiente


#!/usr/bin/env perl

if($ARGV[0] and $ARGV[1]) {
grp($ARGV[0],$ARGV[1]);
}else{
        print "\n[+] Sintax : $0 <Palabra> <Archivo>\n";
}

sub grp {

my($palabra,$archivo) = @_ ;

open (FILE,"$archivo") || die "$!\n";

while (<FILE>) {  

chomp;

my @palabra = grep{/^$palabra/} <FILE>; 

print "@palabra";
                        }
}

Lo movemos a /usr/bin,yo le puse grepp,pero le pueden poner el nombre que gusten

sudo mv archivo.pl /usr/bin/grepp
Y le damos permisos de ejecución

sudo chmod +x /usr/bin/grepp
Ahora ejecutamos en la terminal con esta sintaxis

grepp palabra archivo



Como se puede ver este comando no tiene el mismo poder que grep :(

Porque?

En primera algoritmo del script es muy básico y solo hace lo que dice abrir un archivo y filtrar el contenido

En segunda se pueden dar cuenta que no es lo mismo hacer(no da los mismos resultados)

grep archivo.txt

que

grepp archivo.txt

Porque?

Porque este símbolo ^ indica que solo filtre la palabra si contiene la letra en el principio

Como veíamos

En este ejemplo


#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

my @palabras = ('Linux', 'iOS', 'iPhone', 'Darwin', 'Android', 'FreeBSD');
my @grepPalabras = grep(/^i/, @palabras);
print "@grepPalabras\n";


Solo se filtraba iOS y iPhone y grep de Unix hubiera filtrado también

Android Darwin Linux




Al contener una i aunque no sea al principio.

Y esto se puede hacer con perl?

Si, solo quitamos este símbolo ^


#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

my @palabras = ('Linux', 'iOS', 'iPhone', 'Darwin', 'Android', 'FreeBSD');
my @grepPalabras = grep(/i/, @palabras);
print "@grepPalabras\n";

Y esto nos dará un resultado igual que con grep de Unix

(Que filtre todas las palabras que tengan la letra,aunque no sea al principio)


Por ejemplo editen grepp

sudo vim /usr/bin/grepp

Y borran 


^

De la sintaxis de grep


my @palabra = grep{/^$palabra/} <FILE>; 

Pueden verlo en este ejemplo



Eso es todo

Bueno no,no es todo ya que hay muchas cosas,por ejemplo se puede definir grep de otra manera

Aquí la documentación oficial

http://perldoc.perl.org/functions/grep.html

Leer más...