Mostrando entradas con la etiqueta tips. Mostrar todas las entradas
Mostrando entradas con la etiqueta tips. 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

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

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

    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

    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

    20111005

    resaltado de busquedas en vim

    Existen ocasiones en que se busca una cadena en un archivo, con grep rápidamente se encuentra mas si nos coloree lo que buscamos
    $ /bin/grep --color cadena archivo


    Cuando queremos que el mismo comportamiento se pueda emplear en vim es necesario
  • activar el parámetro
    :set hls




  • para apagarlo
    :set nohls


  • mas información
    :help hls
  • 20110721

    antivirus en linux

    Son muy pocos los virus en Linux y su infección no es comparable al sistema de las ventanas.
    En mi caso, comúnmente presto mi memoria usb a los compañeros para que transfieran archivos y han detectado que contiene un virus, a mi no me afecta pero no lo han podido eliminar en su sistema, por lo que me he dado a la tarea de eliminarlo yo


    $ apt-get install clamtk #clamav
    $ sudo freshclam
    $ clamscan --bell -i -r /media/
    /media/ice/fire/moco.exe: Trojan.IRCBot-3848 FOUND

    ----------- SCAN SUMMARY -----------
    Known viruses: 1005950
    Engine version: 0.96.5
    Scanned directories: 93
    Scanned files: 384
    Infected files: 1
    Data scanned: 197.55 MB
    Data read: 3180.54 MB (ratio 0.06:1)
    Time: 74.111 sec (1 m 14 s)

    Una vez detectado, veo contiene dicho directorio y a eliminar :D

    servicios de google desde linea de comandos

    Para usar los servicios de google



    $ apt-get install googlecl
    $ google calendar list
    Please specify user: petrohs
    Please log in and/or grant access via your browser at https://www.google.com/accounts/OAuthAuthorizeToken?... then hit enter.
    #pide autorizacion web
    [petrohs]
    pru2,Jul 21 18:59 - Jul 21 19:59
    grfgdff,Jul 21 19:30 - Jul 21 20:30
    07/21 pru3,Jul 21 20:00 - Jul 21 21:00
    prueba,Jul 22 18:00 - Jul 22 19:00

    $ google calendar today
    [petrohs]
    pru2,Jul 21 18:59 - Jul 21 19:59
    grfgdff,Jul 21 19:30 - Jul 21 20:30
    07/21 pru3,Jul 21 20:00 - Jul 21 21:00

    $ google calendar add nuevo
    $ google calendar today
    [petrohs]
    pru2,Jul 21 18:59 - Jul 21 19:59
    grfgdff,Jul 21 19:30 - Jul 21 20:30
    nuevo,Jul 21 19:33 - Jul 21 20:33
    pru3,Jul 21 20:00 - Jul 21 21:00

    $ google contacts list > respaldoContactosGMAIL.txt

    $ google help
    Welcome to the Google CL tool!
    Commands are broken into several parts:
    service, task, options, and arguments.
    For example, in the command
    "> picasa post --title "My Cat Photos" photos/cats/*"
    the service is "picasa", the task is "post", the single
    option is a title of "My Cat Photos", and the argument is the
    path to the photos.

    The available services are
    'picasa', 'blogger', 'youtube', 'docs', 'contacts', 'calendar'
    Enter "> help " for more information on a service.
    Or, just "quit" to quit.

    $ google blogger post --title 'servicios de google desde linea de comandos' --tags 'tips,google' /tmp/ss.txt
    0) -- opochtli --
    1) matando zombis asociación civil
    2) -patohs-
    3) temacilli
    Please select one of the items by number: 0