Publi

  • Creando un pequeño bot para Twitter en PHP paso a paso (parte 1)


    En esta serie de posts veremos información paso a paso para crear un bot en Twitter. Este tipo de bots pueden ser muy útiles para programar publicaciones, para conocer información periódica de nuestra cuenta, para detectar menciones y tomar decisiones, y muchas cosas más. Todo ello lo quiero enfocar desde un punto de vista agnóstico del framework que vayamos a utilizar. Lo voy a basar en PHP porque la mayoría de los scripts los tengo hechos en este lenguaje y me va a resultar útil para un par de proyectos en el futuro.… Leer artículo completo

  • Permitir que nuestros usuarios ejecuten tareas controladas en nombre de otro. #SUID #SGID – Con ejemplos y ataques

    Uno de los puntos fuertes de un sistema Unix es su forma de gestionar los privilegios de usuario. Se suele decir que el malware en GNU/Linux sólo afecta al usuario por el que entra (y podrá hacer todo lo que éste pueda hacer), por lo tanto será muy difícil (nada es imposible, y siempre hay bugs) que un programa ejecutado con privilegios de usuario normal afecte al sistema completo.

    Eso sí, otro de los puntos fuertes de un sistema tipo Unix, es que nos deja automatizar absolutamente todo.… Leer artículo completo

  • Comparativa de acceso rápido y seguro a un elemento de un array unidimensional [PHP]

    477292813_c913243065_o

    Nota: Si usas algún Framework PHP, lo más seguro que estas funciones no te sirvan, ya que muchos Frameworks suelen tener cosas parecidas, más o menos completas que hacen lo mismo. Si eres de los que trabajan «a pelo», estás creándote tu propio framework, tal vez te interese todo esto.

    Acceso simple a un elemento de un array

    Esto es una tarea sencilla en PHP, sólo tenemos que poner entre corchetes la clave a la que queremos acceder y podremos acceder a su valor:

    1
    2
    3
    <?php
    $miArray['precio']=12.34;
    echo $miArray['precio'];

    Aunque, el problema viene cuando dicha clave no existe, veremos una notificación de PHP indicando que el índice especificado no existe:

    PHP Notice: Undefined index: precio in /home/pruebas/test.php on line 3
    PHP Stack trace:
    …..

    Leer artículo completo
  • Usando SQLite en nuestros programas en C/C++ (II): Nueva interfaz v2 y prepared statements

    Hace unos días empezamos a programar utilizando SQLite para gestionar nuestra información usando SQL de toda la vida.

    Bien, SQLite tiene la interfaz clásica, que vimos en el post anterior: sqlite3_open(), sqlite3_close(), sqlite3_exec()… con utilidades básicas para trabajar.

    Por un lado, podemos tener más control sobre la base de datos, por ejemplo, podemos definir cómo abirmos la base de datos, tenemos códigos de error extendidos, ventajas con respecto al tratamiento interno de la memoria y algunas cosas más.… Leer artículo completo

  • Logging en MySQL

    Muchas veces, cuando se desarrollan procedimientos almacenados (stored procedures) más o menos complejos, podemos dar con errores que nos pueden hacer perder mucho tiempo, y a veces la solución es visualizar el valor de una variable en un punto determinado del código.

    Aquí va una pequeña ayuda, es un código muy sencillo que podemos insertar en nuestra base de datos y nos permitirá escribir en una tabla lo que va pasando.… Leer artículo completo

  • Guardar un log con las excepciones producidas en C++

    logSobre todo a la hora de crear un programa se pueden generar muchas excepciones, bueno y cuando estamos usándolo de forma normal también, y todos sabemos del típico cliente/amigo/usuario que nos llama de madrugada o a una hora normal diciendo:
    – «El programa me da error» –
    – «¿Qué error te da el programa?» – respondemos
    – «Nada error, solo eso» –
    – «Bueno, ¿seguro que no salía nada más?» – insistimos
    – «Sí, muchas letras y cosas que no tenían sentido» – nos responde para bajarnos la moral – «¿qué puede ser?»
    Nuestra respuesta ahora depende de la relación que tengamos con esa persona, ya sea cliente, amigo, usuario, desconocido… o destornillador, digo, desarrollador (que hay algunos que también…).… Leer artículo completo

  • Guardando un informe en nuestros proyectos PHP

    130120125882

    Muchas veces, los proyectos en PHP crecen y crecen, y pueden ocurrir múltiples errores, tanto a la hora de crearlos como cuando ya están entregados al cliente final y debemos ofrecer soporte.

    Por eso es importante ser rápido localizando los errores, y, siempre que la página, o el programa no haga algo como debe, debería tomar nota de qué ha pasado, cómo ha sido y de los datos involucrados con el fin de poder solventar el problema.… Leer artículo completo

  • Destructores virtuales en C++

    papel destruido

    Muchas veces, cuando leemos código de otras personas, hemos visto destructores declarados como virtual en algunas clases. Es una de esas cosas que si hacemos siempre no pasa nada, pero si no hacemos nunca, en ocasiones nos llevamos sorpresas; pero muchos desarrolladores optan por poner sólo en los casos justos.

    ¿ Para qué valían los métodos virtual ?

    Eso está en un post anterior, pero básicamente valen para que las subclases tengan un método propio que se llame de la misma forma que el método declarado como virtual.… Leer artículo completo

  • Leyendo archivos de imagen en formato BMP en C

    n1214332197_30461081_3311160

    Hoy vamos a practicar a leer una imagen desde un archivo BMP desde C. Aunque existen muchas APIs disponibles que son capaces de hacerlo, y mucho mejor que lo que voy a plantear (puesto que nos limitaremos a BMPs sin compresión y a 24bits por pixel), es un buen ejercicio para leer archivos con un formato especificado y documentado.

    Para este tipo de archivos, tendremos dos cabeceras disponibles, la primera será la cabecera de fichero, y la segunda, la cabecera de información de imagen, que las definimos aquí:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    typedef struct bmpFileHeader
    {
      /* 2 bytes de identificación */
      uint32_t size;        /* Tamaño del archivo */
      uint16_t resv1;       /* Reservado */
      uint16_t resv2;       /* Reservado */
      uint32_t offset;      /* Offset hasta hasta los datos de imagen */
    } bmpFileHeader;

    typedef struct bmpInfoHeader
    {
      uint32_t headersize;      /* Tamaño de la cabecera */
      uint32_t width;               /* Ancho */
      uint32_t height;          /* Alto */
      uint16_t planes;                  /* Planos de color (Siempre 1) */
      uint16_t bpp;             /* bits por pixel */
      uint32_t compress;        /* compresión */
      uint32_t imgsize;     /* tamaño de los datos de imagen */
      uint32_t bpmx;                /* Resolución X en bits por metro */
      uint32_t bpmy;                /* Resolución Y en bits por metro */
      uint32_t colors;              /* colors used en la paleta */
      uint32_t imxtcolors;      /* Colores importantes.
    Leer artículo completo
  • El método más rápido para traer un valor pasado por $_GET [ PHP ]

    Tal vez por paranoia, por ganas de perder el tiempo, o por optimizar aún más el código fuente nos encontremos ante esta cuestión.

    He realizado una serie de pruebas para ver cuál es el método que mejor funciona para traer un valor de $_GET basándome en el peor de los casos: cuando este valor no existe. Tal vez las pruebas no tengan excesiva validez por el método utilizado, aunque he intentado hacer todas las pruebas en las mismas condiciones.… Leer artículo completo