Publi

  • Bug corregido en stermp y ya puestos lo subo a github

    Como algunos de vosotros me habéis enviado mensajes referentes a stermp (aquella colección de funciones que hice para utilizar algo parecido a conio.h desde Linux), lo he publicado en GitHub.

    Además, he arreglado un pequeño bug que afectaba a algunos ordenadores y sólo algunas veces cuando se recibía información de posición por ejemplo.

    Disponéis del código fuente de los archivos aquí, stermp.tar: 4.7Kb.

    También podéis visitarla como puse antes en GitHub, y también se podrá ver en algún que otro lado.… Leer artículo completo

  • Obtener el directorio personal del usuario (HOME) en C

    Muchas veces, en nuestros programas, es necesario conocer el directorio personal del usuario actual, para leer o escribir archivos, aquí traigo una función muy pequeña que hace este trabajo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <pwd.h>

    char *getHomeDir()
    {
      static char *home = NULL;
     
      if (!
    Leer artículo completo
  • Acabo de borrar un archivo por accidente ! ¡ Voy a morir ! ¡ No aún no !

    El título está basado en un hecho real, aunque casi casi el truco que pondré a continuación está limitado a archivos de texto, ya que podemos identificar fácilmente su contenido. Si me apuráis, valdría con cualquier tipo de archivo, pero los archivos binarios, raramente podemos saber con exactitud qué contienen.

    Me encontraba yo preparando una entrada de datos para base de datos, fue un archivo que me llevó un tiempo donde hacía numerosas consultas, y llega la hora de hacer la consulta, de estas veces que puede que por el cansancio, por tener un día un poco tonto, por no pulsar bien una tecla, o un lapsus, en lugar de:

    $ mysql -uroot -pMICLAVE < consultas.sql

    se me ocurre escribir:

    $ mysql -uroot -pMICLAVE > consultas.sql

    vamos, que el archivo con el que llevaba ya un rato se borró por completo, y yo me encontraba como la foto de portada.… Leer artículo completo

  • Monitorizar el sistema y obtener gráficas de uso

    Cuando tenemos un servidor bajo nuestro control, es muy importante saber cómo vamos de recursos. Si hemos contratado un VPS, por ejemplo, debemos saber cuándo es hora de ampliarlo, o de contratar algo más pequeño porque vamos sobrados de recursos… o incluso poder comprobar que una parada del servicio se debe a un pico de uso del sistema. Esto también nos puede ayudar para comprobar cuándo nuestro server se ha parado debido a un kernel panic o algo parecido.… Leer artículo completo

  • Ver la fecha de dmesg en formato humano

    Cuando ejecutamos el comando dmesg, normalmente la fecha y la hora viene dada en un formato extraño, unos números decimales normalmente largos, indescifrables que nos pueden traer de cabeza cuando queremos saber cuándo sucedió el evento que estamos leyendo.

    [280213.568809] type=1701 audit(1360483429.151:991): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [280213.568815] type=1701 audit(1360483429.151:992): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [280213.568819] type=1701 audit(1360483429.151:993): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [280213.568822] type=1701 audit(1360483429.151:994): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [280213.568826] type=1701 audit(1360483429.151:995): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [280213.570694] type=1701 audit(1360483429.151:996): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=21 compat=0 ip=0x7f2f734d9957 code=0x50000
    [280213.570701] type=1701 audit(1360483429.151:997): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=91 compat=0 ip=0x7f2f734d95a7 code=0x50000
    [280214.706376] type=1701 audit(1360483430.291:998): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
    [280217.461365] type=1701 audit(1360483433.047:999): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
    [280217.461376] type=1701 audit(1360483433.047:1000): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000

    Tenemos varios modos de hacer esto:

    Un argumento

    Vale, todo esto podemos simplificarlo, si hacemos

    $ dmesg -T
    [dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:991): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:992): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:993): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:994): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:995): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=4 compat=0 ip=0x7f2f734d9205 code=0x50000
    [dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:996): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=21 compat=0 ip=0x7f2f734d9957 code=0x50000
    [dom feb 10 08:57:39 2013] type=1701 audit(1360483429.151:997): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=91 compat=0 ip=0x7f2f734d95a7 code=0x50000
    [dom feb 10 08:57:40 2013] type=1701 audit(1360483430.291:998): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
    [dom feb 10 08:57:43 2013] type=1701 audit(1360483433.047:999): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000
    [dom feb 10 08:57:43 2013] type=1701 audit(1360483433.047:1000): auid=4294967295 uid=1000 gid=1000 ses=4294967295 pid=20049 comm=»chromium-browse» reason=»seccomp» sig=0 syscall=2 compat=0 ip=0x7f2f734d96b0 code=0x50000

    Aunque en algunos sistemas no encontraremos este argumento.… Leer artículo completo

  • Magia en Bash 50 ejemplos en una sola linea (o dos)

    Bash es una de las herramientas más potentes que tenemos a nuestro alcance, aunque no sólo de bash trata el artículo, sino de trucos para consola, one-liner como dirían muchos (aunque habrá algunos two-liners) que podemos utilizar y pueden hacernos la vida un poco más fácil:

    Cadenas de texto

    Trim

    Es una herramienta que utilizaremos para recortar nuestra cadena basándonos en los a la ìzquierda y a la derecha, en este caso nos basaremos en los espacios, que es uno de sus usos más comunes (así podemos obtener la cadena limpia tanto por delante como por detrás.… Leer artículo completo

  • Conocer la velocidad de descarga de nuestra conexión desde terminal

    A la hora de hacer un test de velocidad, muchas veces recurrimos a páginas que ofrecen aplicaciones Flash para hacer el test de velocidad, muchas veces Flash nos puede resultar incómodo, otras veces, estamos en un ordenador tan antiguo que no tira bien de Flash.

    Estos tests, suelen descargar un fichero relativamente grande, y dividen tamaño del archivo descargado por el tiempo empleado en su descarga, con lo que nos devuelven los Mb/s a lo que hemos descargado dicho archivo; suelen medir la velocidad de un conjunto muy complejo de elementos que están funcionando a la vez (por mencionar algunos de los más importantes):

    • El servidor que nos manda la información: Si el servidor está saturado, tal vez no nos mande la información al máximo de su velocidad
    • La conexión del servidor: Si la velocidad de subida del servidor es más pequeña que la velocidad de bajada del ordenador a analizar (por ejemplo si hacemos que nuestro ordenador envíe el test a casa de un amigo, el test no saldrá bien), si el proveedor de servicios ha penalizado la transferencia del servidor (a lo mejor por consumo excesivo de ancho de banda), o si el servidor tiene muchas peticiones simultáneas, tiene que repartir su ancho de banda entre todos.
    Leer artículo completo
  • Encadenando comandos en C : ls | grep | wc

    Es una práctica muy habitual y muy simple desde terminal, cuando queremos que la salida de un comando de la izquierda sea la entrada del comando de la derecha. Aunque puede ser que tal vez queramos crear un programa que ejecute justamente eso.

    Para ilustrar esto vamos a ejecutar $ ls -R /mi/directorio/de/fotos | grep -i ‘jpg\|png’ | wc -l con esto, conseguiremos contar todas las fotos que hay en nuestro directorio de fotos (siempre que sean jpg o png).… Leer artículo completo

  • Obtener una lista de las localizaciones instaladas en el sistema desde PHP y Java [locales]

    En linuz, para obtener todas las locales, o localizaciones instaladas en el sistema, podemos hacerlo con el comando locale -a:

    $ locale -a
    C
    C.UTF-8
    en_AG
    en_AG.utf8
    en_AU.utf8
    en_BW.utf8
    en_CA.utf8
    en_DK.utf8
    en_GB.utf8
    en_HK.utf8
    en_IE.utf8
    en_IN
    en_IN.utf8
    en_NG
    en_NG.utf8
    en_NZ.utf8
    en_PH.utf8
    en_SG.utf8
    en_US.utf8
    en_ZA.utf8
    en_ZM
    en_ZM.utf8
    en_ZW.utf8
    es_AR.utf8
    es_BO.utf8
    es_CL.utf8
    es_CO.utf8
    es_CR.utf8
    es_DO.utf8
    es_EC.utf8
    es_ES
    es_ES.iso88591
    es_ES.utf8
    es_GT.utf8
    es_HN.utf8
    es_MX.utf8
    es_NI.utf8
    es_PA.utf8
    es_PE.utf8
    es_PR.utf8
    es_PY.utf8
    es_SV.utf8
    es_US.utf8
    es_UY.utf8
    es_VE.utf8
    POSIX
    zh_CN.utf8
    zh_SG.utf8

    Ahora bien, podemos usar este comando dentro de PHP para obtener la lista y añadir a la lista información como el idioma y el país usando una lista de países e idiomas.… Leer artículo completo

  • Cambiar el comentario de un commit en SVN

    Es algo muy común cuando trabajas con un sistema de control de versiones como subversion, equivocarte en la descripción (puede ser un error tipográfico, omisión de datos, o cualquier cosa, ¡que somos humanos!) a la hora de hacer un commit.

    Y después de mucho equivocarme he decidido hacer un post sobre ello. Lo que tenemos que hacer es lo siguiente:

    $ svn propset svn:log –revprop -r [número de revisión] «Nueva descripción»

    (revprop lleva dos guiones)

    Así de sencillo, aunque puede que tengamos problemas si el servidor no está configurado para soportar la modificación del log, por lo que tendrás que pedirle a tu administrador que lo habilite.… Leer artículo completo