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

20160826

Configuración resources en nativefier

Leí una nota en muylinux sobre el uso de Electron para crear un cliente de escritorio de interfaces web con nativefier. Se me figuro interesante para emplear.
$ aptitude update
$ aptitude install nodejs npm
$ sudo npm install nativefier -g
$ sudo ln -s /usr/bin/nodejs /usr/bin/node
$ mkdir /tmp/wiki
$ cd $_
$ nativefier -n eswiki es.wikipedia.org
$ ls -1FA
eswiki-linux-x64/
$ ls -1FA eswiki-linux-x64/
content_shell.pak
eswiki*
icudtl.dat
libffmpeg.so
libnode.so*
LICENSE
LICENSES.chromium.html
locales/
natives_blob.bin
resources/
snapshot_blob.bin
version
$ ./eswiki-linux-x64/eswiki
Con esto ya tenemos una ventanita con la vista de wikipedia
Pues sigamos con otras webs
$ nativefier -n esnews es.wikinews.org
$ nativefier -n wcommons commons.wikimedia.org
$ nativefier -n mxwiki mx.wikimedia.org
$ ls -FA1
esnews-linux-x64/
eswiki-linux-x64/
mxwiki-linux-x64/
wcommons-linux-x64/
$ du -hs *
104M    esnews-linux-x64
104M    eswiki-linux-x64
104M    mxwiki-linux-x64
104M    wcommons-linux-x64
¿Qué? ¿Cuántos megas? Analizando que contiene cada directorio y comparándolos he identificado que solo existe diferencia en el contenido del directorio resources/app
 
$ md5sum */*/* 2>/dev/null | sort | cut -d\  -f1 | uniq -c
      4 026db20eb9f14ad800228c2f8cf076b6
      4 03b11dc49fc2d42217879c2291340296
      4 0f15d43cc55938a000de9c96d82263b1
$ md5sum */*/*/* 2>/dev/null | sort | cut -d\  -f1 | uniq -c
      1 018fa69fbc5e49f08dc312b25872165d
      1 332428d56785d857c0f02d4cba489ac2
      1 53319562fc57e7269f1a787ab1d8cbf7
      1 64b162a70352f1ee8c4a741e69ea494c
      1 a20fc08726638a32ebe84c66fac0b258
      1 a42fde1ea3bd4ba4dac1ad52e9a1893e
      1 ab22d08f3326838e4f5490f4f2d7fbdf
      1 b5ecc848c4f98fd0678dc9b434f6e6e7
      1 b767bdadbacf5c6041239256181ff5f2
      1 b862baf42092ce77dcc3289ea92e7cf7
      1 be55ef6c199e8a94c48f3cf2030cba07
      1 f026df95d4e616e6bdf0d4c990f1c100
$ md5sum */*/*/* 2>/dev/null | sort 
018fa69fbc5e49f08dc312b25872165d  wcommons-linux-x64/resources/app/nativefier.json
332428d56785d857c0f02d4cba489ac2  mxwiki-linux-x64/resources/app/package.json
53319562fc57e7269f1a787ab1d8cbf7  esnews-linux-x64/resources/app/icon.png
64b162a70352f1ee8c4a741e69ea494c  wcommons-linux-x64/resources/app/package.json
a20fc08726638a32ebe84c66fac0b258  eswiki-linux-x64/resources/app/package.json
a42fde1ea3bd4ba4dac1ad52e9a1893e  esnews-linux-x64/resources/app/package.json
ab22d08f3326838e4f5490f4f2d7fbdf  eswiki-linux-x64/resources/app/icon.png
b5ecc848c4f98fd0678dc9b434f6e6e7  mxwiki-linux-x64/resources/app/nativefier.json
b767bdadbacf5c6041239256181ff5f2  esnews-linux-x64/resources/app/nativefier.json
b862baf42092ce77dcc3289ea92e7cf7  eswiki-linux-x64/resources/app/nativefier.json
be55ef6c199e8a94c48f3cf2030cba07  wcommons-linux-x64/resources/app/icon.png
f026df95d4e616e6bdf0d4c990f1c100  mxwiki-linux-x64/resources/app/icon.ico
$ more wcommons-linux-x64/resources/app/nativefier.json
{"name":"wcommons","targetUrl":"http://commons.wikimedia.org","counter":false,"w
idth":1280,"height":800,"showMenuBar":false,"fastQuit":false,"userAgent":"Mozill
a/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.266
1.102 Safari/537.36","nativefierVersion":"7.0.1","ignoreCertificate":false,"inse
cure":false,"flashPluginDir":null,"fullScreen":false,"maximize":false}
$ more eswiki-linux-x64/resources/app/nativefier.json
{"name":"eswiki","targetUrl":"http://es.wikipedia.org","counter":false,"width":1
280,"height":800,"showMenuBar":false,"fastQuit":false,"userAgent":"Mozilla/5.0 (
X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 S
afari/537.36","nativefierVersion":"7.0.1","ignoreCertificate":false,"insecure":f
alse,"flashPluginDir":null,"fullScreen":false,"maximize":false}
De nativefier.json solo cambia la url, package.json el nombre de la web y el icono en icon.* Viendo esto, el mismo paquete sirve para todos basta cambiar la configuración del url. Junte en un solo paquete las configuraciones
$ cp -r eswiki-linux-x64/ wikis-nativefier/
$ mkdir wikis-nativefier/_perfiles
$ cp esnews-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/esnews-icon.png
$ cp esnews-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/esnews-nativefier.json
$ cp eswiki-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/eswiki-icon.png
$ cp eswiki-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/eswiki-nativefier.json
$ cp mxwiki-linux-x64/resources/app/icon.ico wikis-nativefier/_perfiles/mxwiki-icon.ico
$ cp mxwiki-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/mxwiki-nativefier.json
$ cp wcommons-linux-x64/resources/app/icon.png wikis-nativefier/_perfiles/wcommons-icon.png
$ cp wcommons-linux-x64/resources/app/nativefier.json wikis-nativefier/_perfiles/wcommons-nativefier.json
Me puse a jugar con un script que cambia esos archivos de acuerdo a un argumento.
$ more wikis-nativefier/wikis.sh 
#!/bin/bash

cd /tmp/wiki/wikis-nativefier/

if [ -z "$1" ]
  then
    PERFIL=`cd _perfiles; ls -1 *.json | cut -d"-" -f1 | zenity --list --title="wiki nativefier" --text="¿Con qué perfil quieres ejecutar?" --column Perfiles 2>/dev/null`
  else
    PERFIL="$1";  
  fi

if [ -e resources/app/nativefier.json ]; then rm resources/app/nativefier.json; fi;
if [ -e resources/app/icon.png ]; then rm resources/app/icon.png; fi;
if [ -e resources/app/icon.ico ]; then rm resources/app/icon.ico; fi;

case "$PERFIL" in
  eswiki)
    cp _perfiles/eswiki-nativefier.json resources/app/nativefier.json
    cp _perfiles/eswiki-icon.png resources/app/icon.png
   ;;
  esnews)
    cp _perfiles/esnews-nativefier.json resources/app/nativefier.json
    cp _perfiles/esnews-icon.png resources/app/icon.png
   ;;
  wcommons)
    cp _perfiles/wcommons-nativefier.json resources/app/nativefier.json
    cp _perfiles/wcommons-icon.png resources/app/icon.png
   ;;
  mxwiki)
    cp _perfiles/mxwiki-nativefier.json resources/app/nativefier.json
    cp _perfiles/mxwiki-icon.ico resources/app/icon.ico
   ;;
  *)
    echo "Perfiles al momento:";
    echo "   eswiki";
    echo "   esnews";
    echo "   mxwiki";
    echo "   wcommons";
    exit 1;
   ;;
esac

./eswiki
Al ejecutar el script
Ahora un solo paquete puede lanzar diferentes configuraciones

20160626

conectar vpnc usando zenity

Para conectarme al trabajo empleo varios perfiles para vpnc, normalmente lo ejecuto por línea de comandos pero me puse a jugar un poco con zenity

Cuando se ejecuta el script el proceso valida si existe una instancia corriendo de vpnc, en caso de no existir pregunta con que perfil se quiere conectar.


Tras seleccionar el perfil, solicita la contraseña para poder conectar con la vpn.


En la siguiente ventana muestra el resultado de la conexión.


Si se presenta un error en la conexión lanza una terminal xterm para validar manualmente.

En caso de ejecutar el script y este corriendo una instancia de vpnc pregunta si se quiere detener


Para desconectar solicita la contraseña.


Y notifica el resultado.


El código se encuentra en https://github.com/petrohs/listaVPN

  BASE="/tmp/listaVPN/perfiles";  
  REGISTRO=`ps -fea | grep vpnc | grep -v grep | awk '{print $9}'`  
  if [ -z "${REGISTRO}" ]  
   then   
    cd $BASE   
    PERFIL=`ls -1 | zenity --list --title="VPNs" --text="No hay VPN en ejecución\n¿Quieres conectar con un perfil?" --column Perfiles 2>/dev/null`  
    if [ -n "${PERFIL}" ]  
     then   
      gksudo -m "Ejecutar 'vpnc-connect $PERFIL'" "vpnc-connect ${BASE}/${PERFIL}" >/tmp/logVPNohs  
      zenity --text-info --title "Resultado de la conexión" --filename=/tmp/logVPNohs 2>/dev/null  
     fi  
   else   
    zenity --question --title="VPNs" --text="Esta conectado con perfil `basename $REGISTRO`\n¿Quiere detenerlo?" 2>/dev/null  
    if [ $? -eq 0 ]  
     then   
      gksudo -m "Ejecutar 'vpnc-disconnect $PERFIL'" "vpnc-disconnect" >/tmp/logVPNohs  
      zenity --text-info --title "Resultado de la desconexión" --filename=/tmp/logVPNohs 2>/dev/null  
     fi  
   fi  

20160214

Pausar reproducción de vlc por línea de comando

VLC es un reproductor de multimedia muy potente, pero no tiene una opción directa para controlar desde línea de comando.

Me interesa pausar desde un script, para ello se hace uso de D-Bus con el comando:
$ dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause

Esto lo emplearé en un script que pause la musica antes de bloquear la pantalla.
$ cat _lock.sh
mocp -P
dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
xset dpms force off
xscreensaver-command -lock

20150813

ttytter, tuitear desde linea de comandos

TTYtter es un herramienta para poder usar twitter desde la terminal en Linux.

Los siguientes pasos son para su instalación sobre Debian, configuración y ejecución desde linea de comandos.

  • Teniendo salida a internet y los repositorios actualizados:
    $ apt-get install ttytter

  • Si no presenta errores la instalación, lo ejecutamos:
    $ ttytter

  • Cuando lo solicita, «Press ENTER/RETURN to continue», daremos enter

  • Solicitara a twitter un código de autorización e imprimiera una url que debemos copiar y pegar en un navegador

  • En el navegador, autorizamos a ttytter

  • Al autorizar nos desplegara un código numérico que deberá copiarse y para pegar en la terminal.

  • Escribimos el código y damos enter

  • La aplicación termina de configurarse

  • Para ejecutarlo desde linea de comandos basta pasar la cadena con el parámetro «status»:
    $ ttytter -status="Nuestro seleccionado nacional @EduardoGtzC preparando para el panamericano"

  • Podemos ir al navegador y ver el perfil de twitter

  • Otra opción es pasar la cadena por una tubería haciendo uso del parámetro «script»
    $ echo "Viajaran el 27 de agosto" | ttytter -script

  • La actualización se vera

  • Para configurar mas perfiles se puede crear un directorio y mover el archivo generado por ttytter.
    $ mkdir .ttytter
    $ mv .ttytterkey .ttytter/EstHdzJJ.key

  • Empleamos el parámetro «keyf» para indicar que archivo de configuración usar:
    $ echo "junto a Tania Cortez en la rama femenil" | ttytter -keyf=.ttytter/EstHdzJJ.key -script

  • 20121120

    Curso Radiofónico Historia del México Antiguo

    Generado por IMER vía para escuchar en linea. :p bueno, esa es la idea, pero yo los quiero escuchar fuera de linea en horario laboral. Los cursos del imer son puestos en su sito Radio México Internacional en un playlist en flash. Para descargarlos, vemos el código fuente, hay una etiqueta llamada object codebase y bajo ella esta la etiqueta param name="flashvars" value="file= el valor de file es la url a un xml. Vamos a dicho xml y contiene url a cada uno de los modulos, listos para descargar con wget :)

    wget $(wget 'http://radiomexicointernacional.imer.gob.mx/index.php?option=com_content&view=article&id=623&Itemid=27' -o /dev/null -O - | grep 'param name="flashvars" value="file=' | cut -d= -f4 | cut -d\& -f1) -o /dev/null -O - |grep '.mp3' | sed -e "s///" -e "s/<\/location>.//" -e "s/./wget &/" | sh

    20120810

    mocp error

    Al intentar ejecutar mocp falla con el error
    mocp: interface_elements.c:3891: iface_set_mixer_value: La declaración `value >= 0 && value <= 100' no se cumple. Abortado
    Recordé que usando gnome-volume-control había ajustado el volumen al máximo (150%).
    Basta con regresar a 100% y mocp vuelve a funcionar :D

    20120405

    convertir de decimal a hexadecimal

    De hexadecimal a decimal
    $ echo "ibase=16; 28"|bc
    40
    $ echo "ibase=16; 13"|bc
    19
    
    De decimal a hexadecimal
    $ echo "obase=16; 40"|bc
    28
    $ echo "obase=16; 19"|bc
    13
    

    20120310

    script llamando a consola, whiptail y zenity

    Hay usuarios que prefieren la interfaz gráfica, los que gustan de consola o en la misma terminal. Se puede realizar un script que se ejecute de acuerdo el parámetro con una interfaz distinta.

    Para esto es muy útil separar funciones y dejar en el script sola la lógica
    $ cat  eje.bash
    #!/bin/bash

    #tipo de funcion
     if [ "$1" == "-w" ] #emplear version whiptail
       then source lib/wFunc.eje;
     elif [ "$1" == "-z" ] #emplear version zenity
       then source lib/zFunc.eje;
       else #version consola
         nombre="$@";
         source lib/cFunc.eje;
       fi ;

    #obtener el nombre
     if [ -z "$nombre" ]
       then
         ObtenNom;
         nombre=`cat /tmp/algo`;
         rm /tmp/algo
       fi

    #mostrar nombre
     Saluda "$nombre";


    terminal
    $ ./eje.bash

    $ cat lib/cFunc.eje
     #consola
      function ObtenNom
        {
           read -p "como te llamas?
    nombre: " nom;
           echo "$nom" > /tmp/algo;
           return 0;
        }
      function Saluda
        {
          echo "Mucho gusto, $1";
        }


    whiptail
    $ ./eje.bash -w

    $ cat lib/wFunc.eje
     #whiptail
      function ObtenNom
        {
           whiptail --title "como se llama?" --inputbox "Nombre:" 10 40 2>/tmp/algo;
        }
      function Saluda
        {
          whiptail --msgbox "Mucho gusto, $1"  10 40
        }


    zenity
    $ ./eje.bash -z

    $ cat lib/zFunc.eje
     #zenity
      function ObtenNom
        {
           nom=`zenity --title "Como se llama?" --entry  --text "Nombre:"`;
           echo "$nom" >/tmp/algo;
           return 0;
        }
      function Saluda
        {
          zenity --info --text "Mucho gusto, $1";
        }


    terminal
    $ ./eje.bash petrohs

    20120309

    generar secuencias

    Para obtener la cadena correspondiente a una secuencia que va de 0-Z

    $ cat sec.bash
    #!/bin/bash
    sec="S0000000A9Z";
    ad=1;
    for s in `seq -w 02 11 | sort -rn`
      do
        c=`expr substr $sec $s 1`; cc=`printf '%d' "'$c"`;
        e=`expr $cc +  $ad`; ad=0; 

        if [ $e -eq 58 ]; then e=65; fi;
        if [ $e -eq 91 ]; then e=48; ad=1; fi;
        nsec="$(printf "\\$(printf '%03o' $e)")${nsec}"
      done
    echo -e " $sec \n S$nsec";
    $ ./sec.bash
     S0000000A9Z
     S0000000AA0

    convertir una letra en su codigo ascii

    Para imprimir la representación de una letra en su valor ascii correspondiente
    • decimal
    $ printf '%d\n' "'A"
    65

    • hexadecimal
    $ printf '%x\n' "'A"
    41

    • octal
    $ printf '%o\n' "'A"
    101


    Para imprimir la representación de un valor ascii a su letra correspondiente
    • decimal
    $ printf "\\`printf '%o\n' "65"`\n"
    A

    • hexadecimal
    $ printf "\\x41\n"
    A

    • octal
    $ printf "\\101\n"
    A

    20120302

    eliminar archivos swap vim

    Vi emplea un archivo swap temporal para almacenar los cambios mientras se edita. Cuando por alguna razón no se cierra correctamente quedan esos archivos huérfanos.

    Para poder listar desde vim los archivos que tiene identificados
    $ vim -r
    Si se quiere obtener archivos
    $ vim -r archivo

    Suele pasar que no siempre se recuperan y quedan perdidos estos archivos.
    Para buscarlos
    v1 listado manual

    $ find ~ -name ".sw*"
    $ find ~ -name ".*.sw*"


    v2 listado con alias

    $ alias _swpFile='find ~ -name ".sw*" -or -name ".*.sw*"'
    $ _swpFile


    v3 shell empleando zenity

    #!/bin/bash

    if [ -n "$1" ]
      then #se le pasa por argumento
        _dirF="$1";
      else #ventana pregunta por directorio
        _dirF=`zenity --title "swpHuerf" --text "Indique el directorio a buscar" --entry`;
        if [ -z "$_dirF" ]
          then #si no pone nada asigna home
            _dirF="$HOME";
          fi
      fi

    if [ ! -d $_dirF ] #no existe el directorio
      then
        zenity --title "swpHuerf" --text "No existe el directorio" --error
        exit 1;
      fi

    Aborrar="$(zenity --title "swpHuerf" --text "Selecciona los archivos a eliminar" --list --multiple --column archivos `find ~ -name ".sw*" -or -name ".*.sw*" | sort`)";

    echo "$Aborrar" | sed -e "s/.*/rm '&'/" -e "s/|/' '/g" | sh;


    20120221

    uuencode mailx

    Cuando se intenta enviar por correo un archivo adjunto desde linea de comando
    
    $ uuencode $archivo $archivo | mailx -s "$asunto" $correo
    
    Puede llegar el texto dentro del correo como
    
    begin 660 archivo
    M;65NV%J97,@=&5X=&\);7-J"FEN=')A;F5X=&5L"3,V,C*:6-M('1E>'1O
    M(`DQ,SDR,`II8VT@=&5X=&\@"3$P-#(W"FEC;2!T97AT;R!496QE9D,S;FEC
    M80DQ,C@U"FEC;2!T97AT;R!)=7-A8V5L;`DR,S$*:6-M('1E>'1O(%5N969O
    M;@DV,@II8VT@=&5X=&\@5&5L8V5L"3@Q-S(*:6-M('1E>'1O(`DV.#8*:6-M
    M('1E>'1O(`DX"FEC;2!I;G0@0V%N861A"3*:6-M(&EN="!%W1A9&]S(%5N
    M:61OPDR,C`*96UA:6P@='AT"3*"E-H;W)T0V]D90DS-C(W"@IE;6%I;"!M
    M=6QT:6UE9&EA"3(*26YTF%N97AT96P@;75L=&EM961I80DV,`II8VT@;75L
    ,=&EM961I80IP='8*
    `
    end
    
    Para evitar eso emplear la bandera -m
    
    $ uuencode $archivo $archivo | mailx -m -s "$asunto" $correo
    

    20120220

    imprimir log

    Primera versión de función para controlar el nivel de debug
    
    $ cat test.sh
    DEBUG=2; #0 apagado
    bicho ()
     {
      if [ $DEBUG -gt $1 ]
        then 
           t=0; c="";
           while [ $t -lt $1 ]
             do
               c="  $c";
               t=`expr $t + 1`;
             done
           echo "$c`date +%Y%m%d_%H%M%S` $2";
        fi
     }
     bicho 1 "nivel 1";
     bicho 2 "nivel 2";
     bicho 3 "nivel 3";
    
    $ sh /tmp/test.sh 
      20120220_112448 nivel 1
        20120220_112448 nivel 2
    
    Pone fecha, hora y por cada nivel pone un espacio en blanco

    20120120

    imprimir lineas especificas

    Para obtener de una sección por numero de lineas especificas de un archivo se puede emplear
    #Obtener de la linea 2 a la 6
    $ seq -w 1 10 | tail -n +2 | head -`expr 6 - 2 + 1`
    02
    03
    04
    05
    06


    Poco útil si se requieren varias secciones
    #Obtener de la linea 2 a la 5 y de la 7 a la 9
    $ seq -w 1 10 | sed -n -e '2,5p' -e '7,9p'
    02
    03
    04
    05
    07
    08
    09

    20120104

    Imagen en escala de grises

    Cuando se quiere convertir una imagen de color a escala de grises se puede emplear


    $ convert Color.jpg -colorspace gray Gris.jpg
    $ convert Color.jpg -fx intensity Gris.jpg

    20111021

    permutación de lineas


    $ seq -w 0 10
    00
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10

    $ seq -w 0 10 | shuf
    04
    02
    10
    06
    01
    03
    05
    08
    09
    00
    07

    $ seq -w 0 10 | shuf -n1
    06

    20110622

    twitter desde linea de comandos

    Existen muchos clientes de twitter para linea de comandos, sin embargo, desde que se desactivo la autentificacion básica han quedado obsoletos.

    TTYtter es un cliente escrito en perl por Cameron Kaiser que emplea oauth. Tiene su propia consola o puede ser empleado en linea comandos.

  • Para obtener una copia visitar http://www.floodgap.com/software/ttytter/dl.html y conocer la ultima versión
    $ wget 'http://www.floodgap.com/software/ttytter/dist1/1.2.00.txt' -O ttytter.pl

  • Darle permisos de ejecución
    $ chmod +x ./ttytter.pl

  • Ejecutando por primera ocasión requiere que se de permiso a la aplicación desde la cuenta

  • Consola, solo se ejecuta
    $ ./ttytter.pl -ansi -ssl #asni para color. ssl para https
    -- using SSL for default URLs.
    trying to find cURL ... /usr/bin/curl
    -- no version check performed (use /vcheck, or -vcheck to check on startup)
    (checking credentials) test-login SUCCEEDED!
    -- processing credentials: logged in as petrohs

    ###################################################### +oo=========oo+
    TTYtter 1.2.0 (c)2011 cameron kaiser @ @
    all rights reserved. +oo= =====oo+
    http://www.floodgap.com/software/ttytter/ a==: ooo
    .++o++. ..o**O
    freeware under the floodgap free software license. +++ :O:::::
    http://www.floodgap.com/software/ffsl/ +**O++ # :ooa
    #+$$AB=.
    tweet me: http://twitter.com/ttytter #;;ooo;;
    tell me: ckaiser@floodgap.com #+a;+++;O
    ###################################################### ,$B.*o*** O$,
    # a=o$*O*O*$o=a
    # when ready, hit RETURN/ENTER for a prompt. @$$$$$@
    # type /help for commands or /quit to quit. @o@o@o@
    # starting background monitoring process. @=@ @=@
    TTYtter>


    En el prompt hay muchas opciones solo muestro unos pocos ejemplos:
  • Actualizar estado
    > Solo escribe tu mensaje

  • Ver timeline, los etiqueta con un código
    > /again

  • retuitiar el comentario a1
    > /retweet a1

  • ver menciones
    > /replies

  • responder el comentario
    > /reply zc9 tienes razon

  • mandar dm
    > /dm @petrohs mensaje directo

  • ver dm solo los recientes
    > /dm

  • Ayuda
    > /help

  • Salir
    > /quit

    Desde linea de comandos solo muestro algunas opciones
  • Actualizar estado
    $ ./ttytter.pl -status="mi mensaje"

  • ver dm
    $ echo "/dm" | ./ttytter.pl -ssl -script

  • ver menciones
    $ ./ttytter.pl -ssl -runcommand="/replies"

    Esto da un mundo de posibilidades
  • 20100302

    alsa mute/unmute

    Por alguna razón que aun no encuentro el porque, siempre que prendo mi Linux el volumen esta al 0% y con mute activado. Para ajustar las características del audio lanzaba gnome-volume-control, para realizar esta tarea desde linea de comandos haremos uso de las utilerías de alsa

    $ amixer -c 0 sset Master 50% unmute
    Donde
    -c 0 primer dispositivo
    sset ajustar
    Master canal principal
    unmute desactivar mute

    Se puede asignar una combinación de teclas para el fluxbox si se modifica
    $ grep mute .fluxbox/keys
    Shift XF86AudioRaiseVolume :ExecCommand amixer -c 0 sset Master mute
    Shift XF86AudioLowerVolume :ExecCommand amixer -c 0 sset Master unmute

    O que al ingresar al escritorio active el audio
    $ grep mute .fluxbox/startup
    amixer -c0 sset Master 50% unmute &

    20100228

    extraer el audio de un flv

    * Para extraer el audio de todos los vídeos en flash de un directorio empleando ffmpeg

    $ ls -1 *.flv | sed -e "s/.flv//" -e "s/.*/ffmpeg -i &.flv -acodec libvorbis -vn &.ogg/" | sh


    $ #Listar todos los archivos flv del directorio
    $ ls -1 *.flv
    arch1.flv
    arch2.flv
    arch3.flv
    arch4.flv
    arch5.flv
    $ #Eliminar .flv
    $ ls -1
    *.flv | sed -e "s/.flv//"
    arch1
    arch2
    arch3
    arch4
    arch5
    $ #Creando el comando
    $ ls -1
    *.flv | sed -e "s/.flv//" -e "s/.*/ffmpeg -i &.flv -acodec libvorbis -vn &.ogg/"
    ffmpeg -i arch1.flv -acodec libvorbis -vn arch1.ogg
    ffmpeg -i arch2.flv -acodec libvorbis -vn arch2.ogg
    ffmpeg -i arch3.flv -acodec libvorbis -vn arch3.ogg
    ffmpeg -i arch4.flv -acodec libvorbis -vn arch4.ogg
    ffmpeg -i arch5.flv -acodec libvorbis -vn arch5.ogg

    20090519

    scripts para generar sentencias sql apartir de listados de archivos

    Se tiene un directorio con 534 archivos en el formato CDMEXNCxxxxxyyyyy donde yyyyy son un numero de serie y xxxxx son etiquetas de operadores

    $ ls -1 CD*| head
    CDMEXNCARGNC03179
    CDMEXNCARGNC03180
    CDMEXNCARGNC03181
    CDMEXNCARGNC03182
    CDMEXNCAUSOP02976
    CDMEXNCAUSOP02977
    CDMEXNCAUSOP02978
    CDMEXNCAUSOP02979
    CDMEXNCAUTCA02374
    CDMEXNCAUTCA02375

    Estos datos fueron registrados en una tabla de BD, ¿se necesita consultar todos los registro? Solo entrega un registro por archivo.
    La sentencia a emplear es

    select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='ARGNC' and sqn=3179;

    Para evitar el copiar cada segmento y pegarlo registro por registro

    $ for _a in `ls -1 CD* | cut -c8-12 | sort -u`
    > do
    > echo "union">>file.sql;
    > echo "select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='$_a' and sqn in \
    > `ls -1 | grep $_a | cut -c13-17 | xargs | sed -e 's/ /,/g' -e 's/.*/(&)/'`" >> file.sql
    > done
    $ head file.sql
    union
    select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='ARGNC' and sqn in (03179,03180,03181,03182)
    union
    select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUSOP' and sqn in (02976,02977,02978,02979)
    union
    select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUTCA' and sqn in (02374,02375,02376,02377)
    union
    select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUTMM' and sqn in (03060,03061,03062,03063)
    union
    select vplmn, sqn, cre_date, name_fl, tot_reg from ixmed_d_roamtapout_sum where vplmn='AUTPT' and sqn in (02988,02989,02990,02991)

    Ahora se puede emplear el archivo file.sql eliminando la primera linea para obtener el resultado. Si se cuenta la cantidad de registros que entrega en este caso es idéntico a la cantidad de archivos.

    Explicación del código
    • `ls -1 CD* | cut -c8-12 | sort -u`
      • Se lista en una sola columna todos los archivos que inicien con CD, se cortan del caracter 8 al 12 y se ordenan eliminando duplicados
      • $ ls CD* | head
        CDMEXNCARGNC03179
        CDMEXNCARGNC03180
        CDMEXNCARGNC03181
        CDMEXNCARGNC03182
        CDMEXNCAUSOP02976
        CDMEXNCAUSOP02977
        CDMEXNCAUSOP02978
        CDMEXNCAUSOP02979
        CDMEXNCAUTCA02374
        CDMEXNCAUTCA02375
        $ ls CD* | cut -c8-12 | head
        ARGNC
        ARGNC
        ARGNC
        ARGNC
        AUSOP
        AUSOP
        AUSOP
        AUSOP
        AUTCA
        AUTCA
        $ ls CD* | cut -c8-12 | sort -u | head
        ARGNC
        AUSOP
        AUTCA
        AUTMM
        AUTPT
        AUTTR
        BELMO
        BELTB
        BGR01
        BHRBT
    • for _a in `ls -1 CD* | cut -c8-12 | sort -u`; do [...] done;
      • Se emplea un ciclo for para asignar a la variable $_a todas las cadenas que cumplan con el resultado del ls
    • Dentro de cada ciclo
      • Imprime union y lo manda al archivo file.sql
      • Imprime la sentencia concatenada con la salida del ls y lo envia al archivo file.sql
      • `ls -1 | grep $_a | cut -c13-17 | xargs | sed -e 's/ /,/g' -e 's/.*/(&)/'`
        • Se listan los archivos
        • Se busca el que tenga $_a en su nombre
        • Corta del caracter 13 al 17
        • Convierte la salida de una columna a una fila
        • Transforma todos los espacios en comas
        • Agrega a toda la cadena paréntesis al inicio y al final
        • $ ls -1 CD* | head
          CDMEXNCARGNC03179
          CDMEXNCARGNC03180
          CDMEXNCARGNC03181
          CDMEXNCARGNC03182
          CDMEXNCAUSOP02976
          CDMEXNCAUSOP02977
          CDMEXNCAUSOP02978
          CDMEXNCAUSOP02979
          CDMEXNCAUTCA02374
          CDMEXNCAUTCA02375
          $ ls -1 CD* | grep ARGNC
          CDMEXNCARGNC03179
          CDMEXNCARGNC03180
          CDMEXNCARGNC03181
          CDMEXNCARGNC03182
          $ ls -1 CD* | grep ARGNC | cut -c13-17
          03179
          03180
          03181
          03182
          $ ls -1 CD* | grep ARGNC | cut -c13-17 | xargs
          03179 03180 03181 03182
          $ ls -1 CD* | grep ARGNC | cut -c13-17 | xargs | sed -e 's/ /,/g'
          03179,03180,03181,03182
          $ ls -1 CD* | grep ARGNC | cut -c13-17 | xargs | sed -e 's/ /,/g' -e 's/.*/(&)/'
          (03179,03180,03181,03182)

    Escrito con el Navegador Flock