|
21
|
Programación / Scripting / [Bash] TODO list
|
en: 14 Junio 2011, 23:12 pm
|
Hola a todos, acabo de hacer esta pequeña herramienta, es un script en Bash que me sirve para tener una lista organizada de lo que tengo que hacer, y pues como paso un 30% de mi tiempo en la consola, pues me es de gran utilidad y quiero compartirlo. todo.sh #!/bin/bash #=============================================================================== # # FILE: todo.sh # # USAGE: ./todo.sh OPTIONS # # DESCRIPTION: TODO List, nos permite hacer anotaciones sobre acciones que haremos en un futuro. # # OPTIONS: ./todo -h|H # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: Leo Gutiérrez R. (), leorocko13@hotmail.com | leogutierrez@elhacker.net # COMPANY: # CREATED: 13/06/11 16:45:05 MDT # REVISION: --- #=============================================================================== FILE=~/.todo/todo source functions # Checar que exista la carpeta y archivo de lista. [ ! -d ~/.todo ] && { ask "No existe la carpeta, desea crearla ?" && { mkdir ~/.todo echo -e "Creando archivo \"todo\" en ~/.todo"; touch ~/.todo/todo } || { echo -e "Saliendo . . ."; exit 0 } } [ $# = 0 ] && usage; while getopts “hHr:R:lLn:N:d:D:be:E:g:G:kKs:S:” OPTION do case $OPTION in h|H) usage exit 1 ;; n|N) TEST=$OPTARG # Actualizar el archivo : updateList; #echo -e "Opción n, valor : ${TEST}"; echo -e "$(tput bold)$(tput setaf 2)TODO : [$[ $(cat $FILE | wc -l) + 1 ]] ${TEST}"; echo -e "[$[ $(cat $FILE | wc -l) + 1 ]] ${TEST}" >> $FILE tput sgr0; exit 0; ;; g|G) (( $OPTARG > $(cat $FILE | wc -l) )) && { echo -e "$(tput bold)$(tput setaf 1)ERROR, tarea inexistente, consulte las tareas con -L ó -l" tput sgr0; exit 1; } read -p "Texto : " texto sed -i "${OPTARG}s/^\(.*\)$/\1 $texto/g" $FILE updateList; exit 0; ;; d|D) # Cercionarnos que elija una TODO hecha. (( $OPTARG > $(cat $FILE | wc -l) )) && { echo -e "$(tput bold)$(tput setaf 1)ERROR, tarea inexistente, consulte las tareas con -L ó -l" tput sgr0; exit 1; } sed -i "${OPTARG}d" $FILE updateList; exit 0; ;; k|K) [ ! -e ~/.todo/todo ] && { echo -e "$(tput bold)$(tput setaf 1)No existe el archivo \"todo\" en ~/.todo/"; ask "Desea crearlo? " && { touch $FILE } tput sgr0; exit 1; } cp $FILE ${FILE}.bkp echo -e "\n$(tput bold)$(tput setaf 1)Archivo de respaldo creado\n"; tput sgr0; exit 0; ;; r|R) (( $OPTARG > $(cat $FILE | wc -l) )) && { echo -e "$(tput bold)$(tput setaf 1)ERROR, tarea inexistente, consulte las tareas con -L ó -l" tput sgr0; exit 1; } read -p "Texto : " texto # Detectar status sed -n "${OPTARG}p" $FILE | grep "^\[.*\] \[.*\] " &> /dev/null && { sed -i "2s/.*\(\[.*\]\)\s\(\[.*\]\)\s\(.*\)/\1 \2 $texto/g" $FILE } || { sed -i "${OPTARG}s/.*\(\[.*\]\)\s\(.*\)/\1 $texto/g" $FILE } updateList; exit 0; ;; # -lL Mostrar, listar tareas. l|L) (( $(cat $FILE | wc -l) == 0 )) && { echo -e "$(tput bold)$(tput setaf 1)TODO List vacía, agregue nuevas tareas."; tput sgr0; exit 0; } updateList; while read line do echo -e "$(tput bold)$(tput setaf 1)${line}"; done < $FILE tput sgr0; exit 0; ;; b|B) ask "$(tput bold)$(tput setaf 1)Esto borrará todas las tareas, desea continuar? " && { sed -i '1,$d' $FILE } tput sgr0; exit 0; ;; s|S) (( $(cat $FILE | wc -l) == 0 )) && { echo -e "$(tput bold)$(tput setaf 1)TODO List vacía, agregue nuevas tareas."; tput sgr0; exit 0; } read -p "Estado de tarea : " status sed -n "${OPTARG}p" $FILE | grep "^\[.*\] \[.*\] " &> /dev/null && { sed -i "${OPTARG}s/.*\(\[.*\]\)\s\(\[.*\]\)\s\(.*\)/\1 [$status] \3/g" $FILE } || { sed -i "${OPTARG}s/^\(\[.*\]\)\s\(.*\)$/\1 [$status] \2/g" $FILE } ;; ?) usage exit ;; esac done
functions function usage() { tput bold tput setaf 6 cat << EOF Uso: $0 options TODO List v1.0 | leorocko13@hotmail.com OPTIONS: -h|H Muestra este mensaje -n|N [#TAREA] Nueva tarea -l|L Listar tareas -d|D [#TAREA] Eliminar tarea -r|R [#TAREA] Reemplazar tarea -b|B Borrar todas las tareas -g|G [#TAREA] Agregar a una tarea -k|K Crear respaldo de tareas -s|S [#TAREA] Agregar estado de la tarea EOF tput sgr0; } function ask() { echo -n "$@" '[y/n] '; read ans; case "$ans" in y*|Y*) return 0 ;; *) return 1 ;; esac } # Detectar status # sed -n "${OPTARG}p" $FILE | grep "^\[.*\] \[.*\] " &> /dev/null && { # sed -i "2s/.*\(\[.*\]\)\s\(\[.*\]\)\s\(.*\)/\1 \2 $texto/g" $FILE # } || { # sed -i "${OPTARG}s/.*\(\[.*\]\)\s\(.*\)/\1 $texto/g" $FILE # } function updateList() { rm -f /tmp/todo_temp # Checamos si la lista no está vacía. (( $(cat $FILE | wc -l) == 0 )) && { return; } ((contador = 1)); while read line do echo -e "$line" | grep "^\[.*\] \[.*\] " &> /dev/null && { echo -e "[$contador] $(echo -e "$line" | sed "s/^\(\[.*\]\)\s\(\[.*\]\)\s\(.*\)/\2 \3/g")" >> /tmp/todo_temp } || { echo -e "[$contador] $(echo -e "$line" | sed "s/^\(\[.*\]\)\s\(.*\)/\2/g")" >> /tmp/todo_temp } ((contador++)); done < $FILE cp /tmp/todo_temp $FILE }
Aquí algunas capturas:
|
|
|
23
|
Programación / Programación General / Libreria reconocimiento de voz.
|
en: 25 Abril 2011, 23:16 pm
|
Hola a todos.
¿Alguno ha usado alguna vez una libreria que maneje reconocimiento de voz?, ¿cuál?, es para un proyecto de titulación de la universidad, aún falta mucho, pero me gustaría ir desarrollándolo. Ya sea que la librería esté en C/C++, preferentemente.
Saludos.
|
|
|
24
|
Programación / Scripting / [Bash] Mis scripts
|
en: 18 Abril 2011, 02:50 am
|
Eston son algunos de los scripts que uso a diario, bueno, no a diarion, pero son de uso personal, los dejo para ver si a alguien le sirven, que los prueben y vean qué modificaciones se les puede hacer. space #!/bin/bash # Leo Gutiérrez R. leorocko13@hotmail.com # Script que comprime todos los archivos en el directorio actual. # Util para hacer espacio en dispositivos extraíbles. # Uso personal. find . -type f | while read file do extension=`echo "${file}" | awk -F . '{print $NF}'`; echo -e "$extension" | grep -ie "^\(rar\|Z\|7z\|bz2\|zip\|gz\)$" &> /dev/null && continue; rar a "${file}.rar" "$file" -y -df done
usb #!/bin/bash # Leo Gutiérrez R. # Script para navegar por sobre los dispositivos USB en el sistema. # Uso personal. select archivo in `ls -1 /media/ | grep -v "^cd$" | grep -v "^dvd$" | grep -v "^fl$" | grep -v "^ubuntu$" | grep -v "^windows$"` do if [ -n "$archivo" ] then cd /media/"$archivo" break; else echo -e "Error eligiendo dispositivo"; exit 1; fi done
cdprompt [leo@archero ~]$ cdprompt 1) amsn_received/ 9) drivers_tia_de_valeria/ 17) Musica/ 25) Software/ 2) bash/ 10) escuela/ 18) NetBeansProjects/ 26) Textos/ 3) cpps/ 11) guitar/ 19) perl/ 27) visual/ 4) c_proyects/ 12) Imagenes/ 20) projects/ 28) yare/ 5) Descargas/ 13) java/ 21) proyectos/ 29) SALIR 6) Desktop/ 14) linux/ 22) python/ 7) Downloads/ 15) maiesecuele/ 23) respaldo_usb_papa/ 8) drivers_cesar/ 16) *****/ 24) revistas/ >
#!/bin/bash - #=============================================================================== # # FILE: cdprompt.sh # # USAGE: ./cdprompt.sh # # DESCRIPTION: Cambio de directorios interactivamente. # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # AUTHOR: |Leo Gutiérrez R.| (), |leorocko13@hotmail| # COMPANY: # CREATED: 02/26/2011 01:51:28 AM CST # REVISION: --- #=============================================================================== select directorio in */ "SALIR" do if [ "$directorio" = "SALIR" ] then break; elif [[ -n "$directorio" ]] then cd "$directorio" break; else echo -e "\aError de opción."; break; fi done
rmsecure Script de borrado interactivo, muestra qué archivos eliminar en el directorio local: 1) C_Plus_Plus_Varios_Libros.rar 5) PKGBUILD 2) Diagrama_EDGAR.mwb 6) src 3) pacman-3.5.1 7) SALIR 4) pacman-3.5.1.tar.gz >
#!/bin/bash # Script de borrado interactivo. # Leo Gutiérrez Ramírez. leorocko13@hotmail.com function rmsecure() { select archivos in * "SALIR" do if [ "${archivos}" = "SALIR" ] then exit 0; elif [[ -n "${archivos}" ]] then sudo rm -rvi "${archivos}" || { echo -e "Error borrando archivo : ${archivos}"; exit 0; } clear; rmsecure; else echo -e "Error eligiendo archivo."; fi done } clear; rmsecure;
unins.sh Script para ArchLinux, muestra los paquetes para elegir cuál desinstalar, todo a través de una pequeña interfaz. #!/bin/bash [ ${UID} != 0 ] && { echo -e "Se requieren privilegios de Root"; exit 1; } pacman -Qei | sed -n "s/^Name.*\:\s\(.*\)/\1/p" > nombres.txt pacman -Qei | sed -n "s/^Version.*\:\s\(.*\)/\1/p" > versiones.txt Xdialog --title "Desinstalar paquetes" --menu "Elija su paquete:" 24 51 6 $(paste nombres.txt versiones.txt) 2> /tmp/menu.tmp.$$ retval=$? choice=`cat /tmp/menu.tmp.$$` rm -f nombres.txt rm -f versiones.txt rm -f /tmp/menu.tmp.$$ case "$retval" in 1) exit 0; ;; 255) exit 0; ;; esac yes | pacman -R "${choice}" && { Xdialog --title "Desinatalar paquetes" --msgbox "${choice} desinstalado con éxito." 10 100 } || { Xdialog --title "Desinatalar paquetes" --msgbox "${choice} no se pudo desinstalar." 10 100 exit 1; } exit 0;
sc #!/bin/bash # Leo Gutiérrez R. # Script para comprobar si un proceso está corriendo. [ $# -ne 1 ] && { cat <<EOF `basename $0` service EOF exit 1; } [ -f "/var/run/daemons/$1" ] && { echo -e "\"$1\" running."; } || { echo -e "\"$1\" stopped."; } exit 0;
modins #!/bin/bash # Script para instalar paquetes en Perl. function getch() { OLD_STTY=`stty -g` stty cbreak -echo look=`dd if=/dev/tty bs=1 count=1 2>/dev/null` stty $OLD_STTY } function installModule() { sudo perl Makefile.PL sudo make sudo make test sudo make install } function modins() { archivo= select archivo in *.tar.gz "SALIR" do if [ "${archivo}" = "SALIR" ] then exit 0; elif [[ -n "${archivo}" ]] then echo -e "Elegiste : ${archivo}"; tar zxvf "${archivo}" &> /dev/null || { echo -e "Error descomprimiendo [ ${archivo} ]"; exit 1; } cd "${archivo%\.tar.gz}" 2> /dev/null || { echo -e "\aError abriendo directorio ${archivo%%.*}"; exit 1; } installModule; echo -e "\E[31;47mMódulo instalado. Presione una tecla para continuar."; tput sgr0; getch; break; else echo -e "Error eligiendo archivo."; exit 0; fi done } modins; exit 0;
Saludos.
|
|
|
25
|
Programación / Java / Agregar array de checkbox a JDialog
|
en: 14 Abril 2011, 00:52 am
|
Hola a todos, estoy teniendo un problema, desde un JFrame, abro un JDialog, y trato de agregarle algunos JCheckBox, pero siempre se queda con el último.
Lo que intento es agregar múltiples JcheckBox a un JDialog, pero que todos se puedan seleccionar, no solo uno.
¿Alguien me puede ayudar?
¿cómo puedo seleccionar varios jcheckbox?
|
|
|
26
|
Comunicaciones / Redes / Duda básica
|
en: 21 Febrero 2011, 23:41 pm
|
Hola, qué tal, estoy desarrollando un script que se encarga de setear un tipo de conexión. Tengo que hacer un script que dada una IP me devuelva algunas datos. La sintaxis del programa que estoy haciendo es esta: script -r estatica 172.26.0.35
-r : estática o dinámica y la ip Por ejemplo, yo teniendo la IP 172.26.0.35, cómo debería ser la "network", "broadcast", "gateway", "address", "gateway", "netmask", es decir, ¿cómo cambiarían de acuerdo a la IP dada? Esto lo necesito porque editaré un archivo, concretamente el archivo "/etc/network/interfaces". ¿Y cómo sería para una red dinámica?
|
|
|
27
|
Sistemas Operativos / GNU/Linux / Problema Arch, GRUB
|
en: 22 Enero 2011, 00:35 am
|
Hola a todos, acabo de instalar Arch Linux, pero tengo problemas para instalar el GRUB. Instalé Arch en el segundo disco, en hd1, pero no puedo bootear. Al elegir Arch Linux en el menú del GRUB me da un error 17. Ya intenté editando a hd1 0, hd1 1, hd1 2, etc, etc, pero no he podido. ¿Alguien sabe de esto? EDITO: Segùn gparted, el dispositivo /dev/sdb1 tiene el boot. ubuntu@ubuntu:/mnt$ sudo grub-install /dev/sdb Could not find device for /boot: Not found or not a block device. ubuntu@ubuntu:/mnt$
ubuntu@ubuntu:/mnt/dev$ sudo fdisk -l Disco /dev/sda: 40.0 GB, 40020664320 bytes 255 cabezas, 63 sectores/pista, 4865 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Identificador de disco: 0xda130d5b Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/sda1 * 1 1785 14337981 7 HPFS/NTFS /dev/sda2 1786 4865 24740100 5 Extendida /dev/sda5 1786 4732 23671746 83 Linux /dev/sda6 4733 4865 1068291 82 Linux swap / Solaris Disco /dev/sdb: 80.0 GB, 80026361856 bytes 255 cabezas, 63 sectores/pista, 9729 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Identificador de disco: 0x906776e1 Disposit. Inicio Comienzo Fin Bloques Id Sistema /dev/sdb1 * 1 20 160618+ 83 Linux /dev/sdb2 21 59 313267+ 82 Linux swap / Solaris /dev/sdb3 60 1016 7687102+ 83 Linux /dev/sdb4 1017 9729 69987172+ 83 Linux ubuntu@ubuntu:/mnt/dev$
|
|
|
28
|
Programación / Scripting / [BASH] Script instalación de módulos Perl
|
en: 12 Enero 2011, 01:39 am
|
Hola, acabo de hacer este script para la instalación de módulos en Perl. El script checa si el módulo está instalado, sino lo está pregunta si se quiere instalar dicho módulo, si sí se quiere instalar, descarga el módulo desde CPAN y lo instala normalmente. #!/bin/bash # Leo Gutiérrez R. leorocko13@hotmail.com [ ${UID} != 0 ] && { echo -e "Se requieren privilegios de Root"; exit 1; } MODULE_NAME="Math::BigInt::Random"; URL_MODULE="http://search.cpan.org/CPAN/authors/id/B/BI/BILLH/Math-BigInt-Random-0.04.tar.gz"; PATH_MODULE="Math-BigInt-Random-0.04.tar.gz"; perl -M${MODULE_NAME} -e 1 2> /dev/null || { echo -e "\aEl módulo no existe\n¿Desea instalarlo:?"; opciones="Sí No"; select opt in ${opciones} do if [ "${opt}" = "Sí" ] then wget "${URL_MODULE}"; tar zxvf "${PATH_MODULE}"; cd "${PATH_MODULE%\.tar.gz}" 2> /dev/null || { echo -e "\aError abriendo directorio ${1%%.*}"; exit 1; } perl Makefile.PL make make test make install exit 0; elif [ "${opt}" = "No" ] then echo -e "\aLa instalación del módulo es necesaria"; exit 1; fi done }
leo@leo-desktop:~/Escritorio$ sudo bash shell.sh El módulo no existe ¿Desea instalarlo:? 1) Sí 2) No #? 1 --2011-01-11 17:30:26-- http://search.cpan.org/CPAN/authors/id/B/BI/BILLH/Math-BigInt-Random-0.04.tar.gz Resolviendo search.cpan.org... 207.115.101.144, 194.106.223.155 Conectando a search.cpan.org|207.115.101.144|:80... conectado. Petición HTTP enviada, esperando respuesta... 302 Found Ubicación: http://www.msg.com.mx/CPAN/authors/id/B/BI/BILLH/Math-BigInt-Random-0.04.tar.gz [siguiente] --2011-01-11 17:30:26-- http://www.msg.com.mx/CPAN/authors/id/B/BI/BILLH/Math-BigInt-Random-0.04.tar.gz Resolviendo www.msg.com.mx... 200.33.54.1 Conectando a www.msg.com.mx|200.33.54.1|:80... conectado. Petición HTTP enviada, esperando respuesta... 200 OK Longitud: 11569 (11K) [application/x-tar] Guardando en: «Math-BigInt-Random-0.04.tar.gz» 100%[========================================================================================================================================>] 11,569 --.-K/s en 0.1s 2011-01-11 17:30:26 (108 KB/s) - «Math-BigInt-Random-0.04.tar.gz» guardado [11569/11569] Math-BigInt-Random-0.04/ Math-BigInt-Random-0.04/Changes Math-BigInt-Random-0.04/lib/ Math-BigInt-Random-0.04/lib/Math/ Math-BigInt-Random-0.04/lib/Math/BigInt/ Math-BigInt-Random-0.04/lib/Math/BigInt/Random.pm Math-BigInt-Random-0.04/LICENSE Math-BigInt-Random-0.04/Makefile.PL Math-BigInt-Random-0.04/MANIFEST Math-BigInt-Random-0.04/META.yml Math-BigInt-Random-0.04/README Math-BigInt-Random-0.04/t/ Math-BigInt-Random-0.04/t/01_test.t Math-BigInt-Random-0.04/t/02_pod.t Math-BigInt-Random-0.04/t/03_pod_coverage.t Math-BigInt-Random-0.04/Todo Checking if your kit is complete... Looks good Writing Makefile for Math::BigInt::Random cp lib/Math/BigInt/Random.pm blib/lib/Math/BigInt/Random.pm Manifying blib/man3/Math::BigInt::Random.3 PERL_DL_NONLAZY=1 /usr/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/01_test.t .......... ok t/02_pod.t ........... ok t/03_pod_coverage.t .. skipped: Test::Pod::Coverage required for testing POD coverage All tests successful. Files=3, Tests=15, 3 wallclock secs ( 0.04 usr 0.02 sys + 0.35 cusr 0.08 csys = 0.49 CPU) Result: PASS Manifying blib/man3/Math::BigInt::Random.3 Installing /usr/local/lib/perl5/site_perl/5.12.0/Math/BigInt/Random.pm Installing /usr/local/share/man/man3/Math::BigInt::Random.3 Appending installation info to /usr/local/lib/perl5/5.12.0/i686-linux/perllocal.pod
Incluso podríamos trabajar con un archivo externo en donde se pongan los módulos a instalar.
|
|
|
29
|
Foros Generales / Foro Libre / Gente que opina que LINUX APESTA
|
en: 7 Enero 2011, 23:57 pm
|
Hay un grupo en facebook que se llama así, les dejo algo de su sabiduría: Ignacio Castro PalmaGente que opina que LINUX APESTA Ignorantes que no saben nada. Ni siquiera saben lo que es un Kernel. De acuerdo con Julian Rodrigo, Yo uso linux y que? PUEDO DECIR CON FRANQUEZA QUE ES MEJOR QUE WINDOWS.!!!
12 de septiembre de 2010 a las 13:11 · Me gustaYa no me gusta · Comentar * * * o Sebastian Fernandez vos tampoco debes saber lo que es un kernel, porque los kernel los tienen los sistemas operativos bien hechos, no las lineas de comando! aajja 19 de septiembre de 2010 a las 21:26 · Me gustaYa no me gusta · 1 personaA Diego Peralta le gusta esto. · o Diego Peralta EL KERNEL DE LINUX, ESTA HECHO PARA LAS MAQUINAS DE CAFE!!! JAJAJAJA 19 de septiembre de 2010 a las 21:28 · Me gustaYa no me gusta · o Sebastian Fernandez y encima las cuelga!!!! jajjajajjajajjaa
19 de septiembre de 2010 a las 21:29 · Me gustaYa no me gusta · o Paul Barreto un kernel es un nucleo,por ende el nucleo de linux apesta...!!! Mr console porq no te vas a comilar tu ventana de editor de texto? xD
19 de septiembre de 2010 a las 21:49 · Me gustaYa no me gusta · o Sebastian Fernandez la esta cambiando Paul, por eso no puede entrar al face a contestar!..no le anda!!! ajajajajaj
19 de septiembre de 2010 a las 21:51 · Me gustaYa no me gusta · o Diego Peralta CLARO!, TIENE QUE ESCRIBIR 450 LINEAS DE COMANDO ANTES DE CONECTARSE A INTERNET!
19 de septiembre de 2010 a las 21:52 · Me gustaYa no me gusta · o Paul Barreto lol jajajaja
19 de septiembre de 2010 a las 21:52 · Me gustaYa no me gusta · o Sebastian Fernandez jjejejejjejejej
19 de septiembre de 2010 a las 21:53 · Me gustaYa no me gusta · o Paul Barreto conclusion: si eres gamer no uses esa ***** si ves peliculas y eres multimedia no uses esa ***** si eres de los q overclokean hasta decir ya,no uses esa ***** si quieres un server seguro y facil de manejar no uses esa *****
...si eres una secretaria del gobierno pues usa esa verga!! xDVer más 19 de septiembre de 2010 a las 21:55 · Me gustaYa no me gusta · o Sebastian Fernandez jaaajajajjajajjaa!!!
19 de septiembre de 2010 a las 21:56 · Me gustaYa no me gusta · o Gabriel José Hernández Naveda LoL
19 de septiembre de 2010 a las 21:57 · Me gustaYa no me gusta · o Diego Peralta JJAJAJAJAJA 19 de septiembre de 2010 a las 21:57 · Me gustaYa no me gusta · o Leo Gutiérrez Ramirez Sí, mucha risa, idiotas, pero por lo menos sabemos compilar, sabemos hacer las cosas por nuestra cuenta, no dependemos de otra gente, somos dueños de nuestro entorno.
¿Como puede haber tanta ignorancia? Hace 23 horas · Me gustaYa no me gusta o Diego Peralta LINUX no existeLes remarquè en negro los comentarios. Saludos.
|
|
|
30
|
Programación / Scripting / Facebook Manager [ Perl ]
|
en: 31 Diciembre 2010, 00:45 am
|
Antes que nada, no pretende distribuir este pequeño programa, solo lo pongo a su disposición porque para mi es muy útil, lo desarrollé hace unos días.
Otra de las razones por las que no lo pongo a distribución es porque se necesitan algunos módulos que deberán instalar ustedes. Si no saben instalar módulos yo les enseñaré.
Otra cosa, no corre en Windows, es solo para GNU/Linux, claro que se puede correr sobre Windows, pero es mucho más engorro.
Ah, otra cosa, necesitan instalar fbcmd.
¿Y por qué no hacer todo esto directamente desde facebook.com? Lo hice porque a veces no quiero entrar a facebook, simplemente quiero poner un status, o ver el estado de alguien o lo que sea. Aparte si entro a veces me agarran en el chat. Para que funcione necesitan algunos módulos, Gtk2, Gtk2::GladeXML, entre otros, instalarlos es muy sencillo, yo les enseñaré como. INSTALAR MÓDULOS DESDE 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 236 mirrors distribuidos por todo el mundo. Primero, ingresamos en: http://search.cpan.org/Ingresamos el nombre del módulo que queremos instalar. En este caso Gtk2, seleccionamos el primero que sale en la lista. Al lado derecho sale la imagen del autor, debajo dice "Downloads", descargamos el módulo y lo descomprimimos: leo@leo-desktop:~/Escritorio/test$ ls -1 Gtk2-1.222.tar.gz leo@leo-desktop:~/Escritorio/test$ tar zxvf Gtk2-1.222.tar.gz ... ... ...
Nos creará una carpeta: leo@leo-desktop:~/Escritorio/test$ ls -1 Gtk2-1.222 Gtk2-1.222.tar.gz
Entramos en ella e instalamos de la siguiente manera: cd Gtk2-1.222/ sudo perl Makefile.PL sudo make sudo make test sudo make install
Y eso es básicamente la instalación de módulos, también podemos hacerlo através de la utilidad cpan: sudo cpan i /Gtk2-1.222/
Así continuamos con los demás modulos que nos pida instalar. El programa está desarrollado con glade-e Instalación: sudo apt-get install glade
Seguro que les pedirá instalar muchos módulos, así que ¡paciencia!. Les dejo el código y los archivos necesarios para su funcionamiento: #!/usr/bin/perl -w # Leo Gutiérrez R. # leorocko13@hotmail.com use strict; use Gtk2 -init; use Gtk2::GladeXML; use 5.010; use encoding ':locale'; use constant TRUE => 1; use constant FALSE => !TRUE; # Variables globales indispensables. ######################################################################## my($programa, $ventana_principal); $programa = Gtk2::GladeXML->new('hola.glade'); $ventana_principal = $programa->get_widget('window1'); my $ventana_de_estado = $programa->get_widget('ventana_de_estado'); my $ventana_about = $programa->get_widget('about'); # Cargamos los componentes. $programa->signal_autoconnect_from_package('main'); # La señal para que cuando cierre se CIERRE TODO. $ventana_principal->signal_connect(destroy => sub { Gtk2->main_quit(); } ); $ventana_de_estado->signal_connect(destroy => sub { $ventana_de_estado->hide(); } ); $ventana_about->signal_connect(destroy => sub { $ventana_about->hide(); } ); # Mostrar todo. $ventana_principal->resize(520, 570); $ventana_principal->show_all(); #$ventana_principal->set_resizable(FALSE); my $user_selected; my @friends; ######################################################################## # Agregar el combo. my $combito = $programa->get_widget('combito'); &llenarComboAmigos; $combito->signal_connect('changed' => \&on_combito_changed); $combito->set_active(0); # Agregar los TextBox my $texto = $programa->get_widget('texto'); my $texto_2 = $programa->get_widget('texto_2'); # Agregar la barra de status my $status = $programa->get_widget('status'); my $context_id = $status->get_context_id(""); # Agregar la imagen de perfil my $imagen_perfil = $programa->get_widget('perfil_Image'); # Agregar texto salida de información my $textoSalida = $programa->get_widget('textoSalida'); my $buffer = $textoSalida->get_buffer(); $ventana_principal->show_all(); Gtk2->main(); sub on_boton_cerrar_clicked { Gtk2->main_quit(); } sub on_salirFileItem_activate { Gtk2->main_quit(); } sub llenarComboAmigos { { push(@friends, m/^\d+\s+(.*)/); } map($combito->append_text($_), sort @friends); } sub on_combito_changed { my ($cb) = @_; if($cb->get_active()) { $user_selected = $cb->get_active_text(); $status->push($context_id, sprintf("Usuario seleccionado : %s", $user_selected)); $buffer->set_text(""); } } sub on_texto_activate { unless ($user_selected) { $status->push($context_id, sprintf("Seleccione un usuario para enviar el mensaje.")); } my $mensaje = $texto->get_text(); $mensaje =~ s/"/\\"/g; $mensaje =~ s/`/\\`/g; $mensaje =~ s/\(/\\(/g; qx|fbcmd wallpost "$user_selected" "${mensaje}"|; $status->push($context_id, sprintf("Mensaje publicado en muro de usuario : %s", $user_selected)); } sub on_texto_2_activate { my $mensaje = $texto_2->get_text(); $mensaje =~ s/"/\\"/g; $mensaje =~ s/`/\\`/g; $mensaje =~ s/\(/\\(/g; qx|fbcmd status "${mensaje}"|; $status->push($context_id, sprintf("Status cambiado")); } sub on_verImagenDePerfil_activate { unless ($user_selected) { $status->push($context_id, sprintf("Seleccione un usuario de la lista.")); } qx|fbcmd ppics "$user_selected" . "-pf=[tname].jpg" -ppsize =1|; $imagen_perfil->set_from_file("$user_selected" . ".jpg"); unlink("$user_selected" . ".jpg") or warn("No se pudo borrar el archivo \"${user_selected}.jpg\""); } # Ventana de estado sub on_verEstado_activate { unless ($user_selected) { $status->push($context_id, sprintf("Seleccione un usuario de la lista.")); } my $vbox = Gtk2::VBox->new(FALSE, 5); my $frame = Gtk2::Frame->new("Amigo - Estado"); $frame->set_border_width(5); my $sw = Gtk2 ::ScrolledWindow->new (undef, undef); $sw->set_shadow_type ('etched-out'); $sw->set_policy ('automatic', 'automatic'); $sw->set_size_request (600, 100); $sw->set_border_width(5); my $tview = Gtk2::TextView->new(); my $buffer = $tview->get_buffer(); my $s = &getStatus(); $buffer->set_text($s); $sw->add($tview); $frame->add($sw); $vbox->pack_start($frame,TRUE,TRUE,4); $vbox->show_all(); $ventana_de_estado->add($vbox); $ventana_de_estado->show(); } sub getStatus { my $s = qx|fbcmd fstatus "$user_selected"|; my($status) = $s =~ m/^$user_selected\s+(.*)/gims; #$status =~ s/\s{22}(.*)/\n$1/gi; #$status =~ s/^(\s+)(.*)/$2/gim; } sub getPresence { my($s) = qx(fbcmd finfo online_presence "${user_selected}") =~ m/(active|offline)$/; } sub on_verPresencia_activate { $buffer->set_text("Presencia : " . &getPresence()); } sub on_aboutFileItem_activate { $ventana_about->run(); $ventana_about->hide(); }
Archivos: http://rapidshare.com/files/440038591/facebook_manager.rarhttp://www.megaupload.com/?d=BZQBNEVS
|
|
|
|
|
|
|