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

  • 20150811

    Wikimanía 2015

    Del 15 al 19 de julio se llevó a cabo la décimo primera edición de Wikimanía, la convención de los fanáticos de wikipedia y anexas.

    La sede fue un hotel frente a la alameda central de la Ciudad de México. Pero no fue fortuito que un evento tan importante se realizara en la tierra mexica, esto corresponde al trabajo previo, realizado por la mesa directiva del Capítulo México de la Fundación Wikimedia. Para ganar la sede se postulan diversas ciudades y se valora el trabajo del equipo y las condiciones sociales de las localidades. WMMX es uno de los capítulos mas activos y la cdmx suele ser muy amigable con los extranjeros.

    Para recibir a los visitantes se convocó a un entusiasta y nutrido grupo de voluntarios. Algunos eran profesionistas, otros estudiantes; algunos bilingües, otros políglotas o monolingües; mujeres y hombres; todos con una actitud solidaria que contagiaban de tanta fuerza. En pocos días se forjó esa hermandad propia de las congregaciones. Me llamo la atención que algunos voluntarios no fueran editores de wikipedia, incluso no contaban con cuentas en el proyecto, lo que, definitivamente, no fue un problema para compartir el gusto por el conocimiento libre.

    Wikimanía es un evento de alcance mundial y en sus pasillos se puede encontrar personas de todos colores, olores e idiomas. Culturas diversas que conviven sin prejuicios, con un único fin, compartir conocimiento en proyectos libres. Fue común ver wikipedistas de diferentes nacionalidades hablando en ingles o español comparando sus culturas y describiendo sus proyectos. Les brillan los ojos cuando hablan de sus ediciones y surge la emoción al charlar sobre sus contribuciones.

    Hay personalidades y gustos variados; algunos son fotógrafos y su base es commons, otros les gusta wikinews, otros tantos son programadores y se entretienen en el código de mediawiki o bots, y claro wikipedistas en alguna de las tantas idiomas soportadas.

    En este punto he de resaltar que conocí a:

    • Poco a poco y EneasMX, ambos fotógrafos, el primero con gran experiencia y Eneas con sus primeras contribuciones.
    • Marrovi, un editor políglota, gran impulsor de las ediciones en leguas originarias de México.
    • Superzerocool, un admirado hacker y gran persona, con quien espero contribuir pronto en código.
    • MadriCR, de quien tenia una idea distinta, siendo joven pero con gran experiencia.
    • Ezarate, a quien salude pero no se generó la oportunidad de convivir tanto.
    • Los wikicompas de wmmx, Luisalvaz, Padaguan, Salvador_alc, Christian_Cariño, Omar_sansi, Andycyca, Wotancito y ProtoplasmaKid con quien había tenido el gusto de contactarlos en linea pero tratarlos en persona es mucho mejor.
    Y me faltaron tantas personas, en particular -jem- y Allan Aguilar quien no asistió.

    En cuanto a las conferencias, algunas mas que otras, me dejaron conocimiento y satisfacción; técnicas, teóricas, administrativas y disminución de brechas. No pude asistir a las que planee pero definitivamente la cantidad, variedad y calidad dejaría feliz a casi cualquiera.

    Claro que existieron algunos puntos a mejorar, pero que evento de esta importancia no los tiene. Es por ello que quiero expresar mi agradecimiento a todos y cada uno de los organizadores y participantes.

    Wikimania 2015 - Group photo

    20130416

    Instalar sqlite en HP UX

    Vemos el tipo de sistema que tenemos
    $ uname -a HP-UX servidor B.11.23 U ia64 3210103145 unlimited-user license
    Se observa
     HP-UX  Unix HP-UX
     B.11.23 Version 11.23
     ia64 itanium a 64bits
    


    Obtener el binario http://hpux.connect.org.uk/hppd/hpux/Development/Libraries/sqlite-3.7.15.2/

    $ mkdir sqlite && cd $_
    $ wget http://hpux.connect.org.uk/ftp/hpux/Development/Libraries/sqlite-3.7.15.2/sqlite-3.7.15.2-ia64-11.23.depot.gz

    Desempaquetar
    $ gunzip sqlite-3.7.15.2-ia64-11.31.depot.gz
    $ file sqlite-3.7.15.2-ia64-11.31.depot 
    sqlite-3.7.15.2-ia64-11.31.depot:       tar file
    $ tar -xvf sqlite-3.7.15.2-ia64-11.31.depot 
    x catalog/INDEX, 715 bytes, 2 tape blocks
    x catalog/dfiles/INDEX, 193 bytes, 1 tape blocks
    x catalog/dfiles/INFO, 138 bytes, 1 tape blocks
    x catalog/sqlite/pfiles/INDEX, 359 bytes, 1 tape blocks
    x catalog/sqlite/pfiles/INFO, 138 bytes, 1 tape blocks
    x catalog/sqlite/sqlite-RUN/INDEX, 163 bytes, 1 tape blocks
    x catalog/sqlite/sqlite-RUN/INFO, 1556 bytes, 4 tape blocks
    x sqlite/sqlite-RUN/usr/local/bin/sqlite3, 242276 bytes, 474 tape blocks
    x sqlite/sqlite-RUN/usr/local/doc/sqlite/HPUX.Install, 3827 bytes, 8 tape blocks
    x sqlite/sqlite-RUN/usr/local/doc/sqlite/README, 1732 bytes, 4 tape blocks
    x sqlite/sqlite-RUN/usr/local/doc/sqlite/VERSION, 9 bytes, 1 tape blocks
    x sqlite/sqlite-RUN/usr/local/include/sqlite3.h, 343763 bytes, 672 tape blocks
    x sqlite/sqlite-RUN/usr/local/include/sqlite3ext.h, 24158 bytes, 48 tape blocks
    x sqlite/sqlite-RUN/usr/local/lib/hpux32/libsqlite3.a, 2999758 bytes, 5859 tape blocks
    x sqlite/sqlite-RUN/usr/local/lib/hpux32/libsqlite3.la, 958 bytes, 2 tape blocks
    x sqlite/sqlite-RUN/usr/local/lib/hpux32/libsqlite3.so, 2361636 bytes, 4613 tape blocks
    x sqlite/sqlite-RUN/usr/local/lib/hpux32/pkgconfig/sqlite3.pc, 268 bytes, 1 tape blocks
    x sqlite/sqlite-RUN/usr/local/lib/tcltk/sqlite3/libtclsqlite3.so, 162364 bytes, 318 tape blocks
    x sqlite/sqlite-RUN/usr/local/lib/tcltk/sqlite3/pkgIndex.tcl, 100 bytes, 1 tape blocks
    


    Ejecutamos
    $ sqlite/sqlite-RUN/usr/local/bin/sqlite3
    /usr/lib/hpux32/dld.so: Unable to find library 'libsqlite3.so'.
    Killed

    Falla por la librería Agregamos la ruta de la librería
    $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:sqlite/sqlite-RUN/usr/local/lib/tcltk/sqlite3:sqlite/sqlite-RUN/usr/local/lib/hpux32

    Ejecutamos
    $ sqlite/sqlite-RUN/usr/local/bin/sqlite3                                                                                     
    /usr/lib/hpux32/dld.so: Unable to find library 'libreadline.so'.
    Killed
    

    Nos falta la libería de readline
    $ wget http://hpux.connect.org.uk/ftp/hpux/Gnu/readline-6.2.004/readline-6.2.004-ia64-11.23.depot.gz
    $ gunzip readline-6.2.004-ia64-11.23.depot.gz
    $  tar -xvf readline-6.2.004-ia64-11.23.depot 
    x catalog/INDEX, 956 bytes, 2 tape blocks
    x catalog/dfiles/INDEX, 193 bytes, 1 tape blocks
    x catalog/dfiles/INFO, 138 bytes, 1 tape blocks
    x catalog/readline/pfiles/INDEX, 431 bytes, 1 tape blocks
    x catalog/readline/pfiles/INFO, 138 bytes, 1 tape blocks
    x catalog/readline/readline-INC/INDEX, 165 bytes, 1 tape blocks
    x catalog/readline/readline-INC/INFO, 1109 bytes, 3 tape blocks
    x catalog/readline/readline-RUN/INDEX, 167 bytes, 1 tape blocks
    x catalog/readline/readline-RUN/INFO, 3457 bytes, 7 tape blocks
    x readline/readline-INC/usr/local/include/readline/chardefs.h, 4551 bytes, 9 tape blocks
    x readline/readline-INC/usr/local/include/readline/history.h, 10078 bytes, 20 tape blocks
    x readline/readline-INC/usr/local/include/readline/keymaps.h, 3163 bytes, 7 tape blocks
    x readline/readline-INC/usr/local/include/readline/readline.h, 36517 bytes, 72 tape blocks
    x readline/readline-INC/usr/local/include/readline/rlconf.h, 2189 bytes, 5 tape blocks
    x readline/readline-INC/usr/local/include/readline/rlstdc.h, 1546 bytes, 4 tape blocks
    x readline/readline-INC/usr/local/include/readline/rltypedefs.h, 2845 bytes, 6 tape blocks
    x readline/readline-INC/usr/local/include/readline/tilde.h, 3046 bytes, 6 tape blocks
    x readline/readline-RUN/usr/local/doc/readline/CHANGELOG, 27532 bytes, 54 tape blocks
    x readline/readline-RUN/usr/local/doc/readline/CHANGES, 51509 bytes, 101 tape blocks
    x readline/readline-RUN/usr/local/doc/readline/COPYING, 35147 bytes, 69 tape blocks
    x readline/readline-RUN/usr/local/doc/readline/HPUX.Install, 2822 bytes, 6 tape blocks
    x readline/readline-RUN/usr/local/doc/readline/INSTALL, 12304 bytes, 25 tape blocks
    x readline/readline-RUN/usr/local/doc/readline/NEWS, 918 bytes, 2 tape blocks
    x readline/readline-RUN/usr/local/doc/readline/README, 7680 bytes, 15 tape blocks
    x readline/readline-RUN/usr/local/lib/hpux32/libhistory.a, 143990 bytes, 282 tape blocks
    x readline/readline-RUN/usr/local/lib/hpux32/libhistory.so, 139356 bytes, 273 tape blocks
    x readline/readline-RUN/usr/local/lib/hpux32/libreadline.a, 1066422 bytes, 2083 tape blocks
    x readline/readline-RUN/usr/local/lib/hpux32/libreadline.so, 635132 bytes, 1241 tape blocks
    x readline/readline-RUN/usr/local/share/info/dir, 747 bytes, 2 tape blocks
    x readline/readline-RUN/usr/local/share/info/history.info, 61403 bytes, 120 tape blocks
    x readline/readline-RUN/usr/local/share/info/readline.info, 206047 bytes, 403 tape blocks
    x readline/readline-RUN/usr/local/share/info/rluserman.info, 79683 bytes, 156 tape blocks
    x readline/readline-RUN/usr/local/share/man/man3/history.3, 22177 bytes, 44 tape blocks
    x readline/readline-RUN/usr/local/share/man/man3/readline.3, 41974 bytes, 82 tape blocks
    x readline/readline-RUN/usr/local/share/readline/excallback.c, 5734 bytes, 12 tape blocks
    x readline/readline-RUN/usr/local/share/readline/fileman.c, 11426 bytes, 23 tape blocks
    x readline/readline-RUN/usr/local/share/readline/histexamp.c, 2889 bytes, 6 tape blocks
    x readline/readline-RUN/usr/local/share/readline/manexamp.c, 3300 bytes, 7 tape blocks
    x readline/readline-RUN/usr/local/share/readline/rl-fgets.c, 11147 bytes, 22 tape blocks
    x readline/readline-RUN/usr/local/share/readline/rl.c, 3179 bytes, 7 tape blocks
    x readline/readline-RUN/usr/local/share/readline/rlcat.c, 3299 bytes, 7 tape blocks
    x readline/readline-RUN/usr/local/share/readline/rlevent.c, 3295 bytes, 7 tape blocks
    x readline/readline-RUN/usr/local/share/readline/rlptytest.c, 6531 bytes, 13 tape blocks
    x readline/readline-RUN/usr/local/share/readline/rltest.c, 2146 bytes, 5 tape blocks
    x readline/readline-RUN/usr/local/share/readline/rlversion.c, 1287 bytes, 3 tape blocks
    

    Agregamos al path
    $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:readline/readline-RUN/usr/local/lib/hpux32

    Ejecutamos
    $ sqlite/sqlite-RUN/usr/local/bin/sqlite3
    SQLite version 3.7.15.2 2013-01-09 11:53:05
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    sqlite> .quit
    $
    

    Listo

    20121221

    Feliz natividad

    Feliz navidad (para quien celebra la tradición judeocristiana) y prospero año 2013
    Celebremos el advenimiento de nuestro salvador... Goku on Twitpic
    Que el MEV los llene de bendiciones y nuestro salvador Goku continué protegiéndonos

    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

    20120413

    Reportar spam

    Poco pero pasa, llega a la lista debian-user-spanish spam. Probablemente sus clientes de correos tienen reglas para filtrarlos, sin embargo, en el histórico queda registro y es recomendable, por espacio y no guardar basura, que los administradores puedan depurarlo.
    Pero la cantidad de listas y correos que tienen los administradores es tal que difícilmente puedan dedicarle tiempo completo, para ello existe el proyecto 'Spanish Spam Clean' para eliminar esta basura. Se basa en que los usuarios reporten el spam y cuando al final de mes un correo tiene 5 reportes de spam el encargado procede a su borrado.
    Un proceso muy simple

  • Llega un correo basura a la lista, el cual fácilmente se identifica
    De
  • Copiar el asunto del correo
    De
  • Buscarlo en el histórico (podemos emplear complemento de firefox DebserSpanish)
    De
  • En la parte superior hay un botón "Report as spam"
    De
  • Tras presionarlo nos indica que el reporte fue aceptado
    De
  • Listo

    Al final del mes y reportar cada spam en la lista se puede ir a 'Spanish Spam Clean' buscar el año, lista y mes correspondiente, para nuestro ejemplo 2012/debian-user-spanish/Abril prender la estrella y colocar nuestro nombre

    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

    arrancar vaio por usb

    Para poder arrancar una sony vaio vng sz450fn por usb para probar o instalar un linux
    1. Entrar al menú de arranque, se logra presionando la tecla esc cuando aparece la pantalla de inicio de vaio
    2. En el menú con la flecha hacia abajo ir a la opción y presionar enter
    3. En la consola con la flecha a la derecha ir a la pestaña Advanced
    4. Con la flecha hacia abajo ir a la opción External Drive Boot, presionar enter, seleccionar la opción Enabled, presionar enter
    5. Presionar F10 y enter

    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

    20120307

    cofradia: Necesito ayuda o “Crowd funding” para salir de atolladero y demostrar la naturaleza de la gente

    Por cofradía me he ganado unas cortesías, mi primer disco original de ubuntu, creo que hasta mi cuenta de gmail, entretenidos comentarios con las cofradivas y harto conocimiento

    http://cofradia.org/2012/03/07/necesito-ayuda-o-crowd-funding-para-salir-de-atolladero-y-demostrar-la-naturaleza-de-la-gente/

    Pues despues de varios años de ayudar a la gente, ahora me veo en una situación realmente extrema, provocada en parte por confianza, descuido o pendejez (si así quieren llamarlo). El caso es que por unos cargos fraudolentos que me hicieron en mi tarjeta de crédito y que tengo en disputa en HSBC (Vtsetup.comverotel NL y que esta reportado en multiples sitios), me negaron una línea de crédito que necesitaba urgentemente para levantarme personalmente y en mi negocio.
    Al platicar con mi familia se me ocurrió la idea de pedir fondeo por medio de donativos pequeños (Crowd funding), o sea 100.00 (Pesos mexicanos o MXN) de tal suerte que si podía recibir 900 donaciones salvo el rancho (como coloquialmente se dice).
    Mi hijo mayor me dijo que eso no era posible, que la gente no ayuda a nadie, a lo cual yo le dije que yo he ayudado a muchas personas y que creo que en la naturaleza humana esta el ayudar.
    Esto, independientemente de mi problema económico, quiero demostrarle a mi hijo que es posible recibir y pedir ayuda de la gente por medio de una interacción social. obviamente si esto tiene exito y excede mis espectativas, donaremos el remanente a la causa que sugieran.
    Ya me dijeron de todo, empezando con pendejo, descarado y el más atractivo fué “Cyber-mendigo”. pero quiero sentar precedente en México de que si es posible hacer “Crowd funding”. Si me pueden ayudar puede ser vía Paypal (aparece el cargo como “PAYPAL COFRADIA”)

    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

    vi :Terminal too wide

    Al ejecutar vi en un servidor remoto obtengo el error
    :Terminal too wide
    Para solucionarlo ejecutar en consola
    $ stty columns 180

    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

    20120211

    descarga cancion de soundcloud

    Jugando nuevamente con soundcloud.com para descargar canciones, aun que no este habilitado el botón de download

    Nuevo script, de parámetro recibe la url de una canción

    #!/bin/bash
    
    URL="$1";
    
    MEDIA=`wget "$URL" -o /dev/null -O - | grep streamUrl | sed -e 's/.*"streamUrl"/"streamUrl"/' | cut -d, -f1 | cut -d\" -f4`;
    NOM=`basename "$URL"`;
    wget "$MEDIA" -o /dev/null -O "$NOM".mp3
    

    Claro, esta versión 0 puede quedar en una sola linea.
    O una versión 1 puede recibir mas parámetros