Publi

  • Operaciones básicas con cadenas en C++: capitalización, conversiones, recorte, recorrido y más

    Como ha sucedido con otros lenguajes, C++ también ha evolucionado. Ha madurado mucho desde aquellos códigos que programábamos hace años y se nota. Por un lado, podemos pensar que al sumar abstracción en ciertos aspectos nos separa de la máquina y hace nuestro código más lento. Suma comprobaciones, hace más callbacks y en definitiva, una sencilla tarea que completaba en pocos cientos de operaciones, ahora son pocos miles. Aunque en su favor, podemos decir que aquello que programábamos en 15 o 20 líneas de código se ha reducido a una o dos, reduciendo así los puntos de ruptura, posibles bugs y calentamientos de cabeza futuros.… Leer artículo completo

  • Asus Zenfone 2 Laser, desbloqueo, root, limpieza, sincronización y algunas cosas más

    movil_asus
    Hace un tiempo mi antiguo móvil empezaba a agonizar: perdía la cobertura, la batería duraba cada día menos, se reiniciaba, y muchos más pequeños detalles. Era un THL T11, comprado a una tienda china online. Es cierto que para el hardware que traía (octa core, 2Gb de RAM) no me salió caro, 118€. Aunque creo que a la larga, he perdido más tiempo esperando que reiniciara, rellamando a personas, reiniciando el teléfono y antes de jubilarlo instalando ROMs y tocando scripts de inicio.… Leer artículo completo

  • Cómo expulsar todas las sesiones MySQL de un usuario en particular desde un script

    502729552_aaa355b1ce_o

    Muchas veces, puede que tengamos una aplicación no muy bien depurada en nuestro servidor web. A dicha aplicación le hemos dado su propio usuario MySQL y observamos que las conexiones no se cierran adecuadamente.

    Temporalmente puede que la solución sea expulsar de vez en cuando todos los usuarios que siguen activos, con el fin de no saturar nuestro servidor MySQL. Puede que en otros servicios que tengamos activos hayamos visto el mensaje «Too many connections» impidiendo así el acceso a los demás servicios.… Leer artículo completo

  • BITes: Ray Tomlinson, Skype se rompe, seguridad, SSD de 15Tb!! ordenadores en ciencia ficción, eliminar de forma segura

    3026490953_d0174ef42a_b
    Unos cuantos enlaces más para terminar la semana con energía, y viendo las cosas de otro modo. Son algunos posts y algunas páginas que considero interesantes y oportunas esta semana.

    Enlaces de la semana

    • Ray Tomlinson: Sin él no tendríamos correo electrónico… bueno, como pasa siempre, si no lo hubiera hecho él, lo habría hecho otro, pero no sería tal y como lo conocemos. Y tristemente fallecido esta semana. Os dejo la dedicatoria que mi amigo Paco dejó en Facebook [Ayúdame]:

      Cuando en el mundillo de la informática muere cierta gente que se ha sabido vender, corren ríos de tinta.

    Leer artículo completo
  • Cómo gestionar los parámetros de nuestros programas con getopt en C

    fruit-stall-paris-1500x1000

    Cuando hablamos de argumentos o parámetros de un programa en C, debemos pensa en los parámetros tan raros que pasamos a la función main(). En este caso, podemos ver cómo con dos argumentos (argc, o el número de argumentos que tenemos y argv o el contenido de esos argumentos, somos capaces de gestionar la información que un usuario nos pasa justo cuando ejecuta nuestro programa.

    Lo más sencillo que podemos hacer con los argumentos

    Imaginemos este ejemplo, de un programa donde queremos copiar un archivo origen a un destino (como cp), primero comprobamos que el número de argumentos es suficiente y luego imprimimos en pantalla el valor de cada uno (es un ejemplo inofensivo, no vamos a copiar nada).… Leer artículo completo

  • Bucles y cursores en MySQL con ejemplos

    Hace mucho tiempo que quería escribir sobre esto. Y aunque es recomendable no abusar de los bucles en MySQL, es más, a veces no son necesarios, y siempre hay que buscar una solución que no los use, a veces no la vamos a encontrar y será en esos casos cuando debamos utilizarlos.

    Veamos un bucle muy sencillo, parecido a un for de los de toda la vida, en el que contamos del 1 al 9:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    DELIMITER $$
    CREATE PROCEDURE simple_loop ( )
    BEGIN
      DECLARE counter BIGINT DEFAULT 0;
     
      my_loop: LOOP
        SET counter=counter+1;

        IF counter=10 THEN
          LEAVE my_loop;
        END IF;

        SELECT counter;

      END LOOP my_loop;
    END$$
    DELIMITER ;

    cuando hagamos:

    1
    CALL simple_loop();

    Veremos algo como esto:

    +———+
    | counter |
    +———+
    | 1 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 2 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 3 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 4 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 5 |
    +———+
    1 row in set (0.01 sec)+———+
    | counter |
    +———+
    | 6 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 7 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 8 |
    +———+
    1 row in set (0.01 sec)

    +———+
    | counter |
    +———+
    | 9 |
    +———+
    1 row in set (0.01 sec)

    Query OK, 0 rows affected (0.01 sec)

    Vemos que el código que iteraremos está entre LOOP…END LOOP, lo que aparece justo antes (my_loop) es una etiqueta para nombrar ese bucle.… Leer artículo completo

  • Nos ponemos serios con PHP: Empezamos con un CRUD (la esencia no es exclusiva de PHP)

    crudHace años tuve entre manos un gran proyecto web, en el que invertí 8 meses de mi vida y funcionó bastante bien durante un tiempo. En su desarrollo recuerdo que tuve que desarrollar cerca 50 formularios diferentes, comprobar los valores de cada uno de los campos, hacer lecturas y escrituras en base de datos con los datos obtenidos, y opcionalmente realizar alguna tarea extra una vez enviado y validado el formulario.… Leer artículo completo