Deadlock, bloqueo mutuo, abrazo mortal o cómo colgar un proceso con esperas infinitas. ☠ ☠ ☠

5 agosto, 2014 2 comments


Es un ejercicio típico, pero que casi siempre se ve teóricamente, pero mira, vamos a traerlo a la práctica. Lo vamos a implementar con semáforos. Como vemos aquí y aquí, los semáforos, entre otras cosas nos servirán para bloquear un proceso o un thread que trata de acceder a un recurso crítico que está siendo usado por otro proceso, un ejemplo típico es un baño público, cuando la puerta no está bloqueada, pasas, la bloqueas, haces lo que tengas que hacer allí, y luego desbloqueas la puerta y te vas.… Leer artículo completo

Creando un primer plugin para Magento (hola mundo en Magento)


Tarde o temprano lo ibas a necesitar (y lo sabes), y es que una vez que hemos instalado Magento y, aunque es muy completo siempre surgen necesidades un tanto especiales, y estas necesidades las podemos suplir creando plugins o módulos para este sistema.

¿Por qué?

Magento es muy extensible, nos permite hacer miles de cosas para ampliar su funcionamiento, pero está feo ponerse a toquetear el código base de Magento (o de alguna extensión que nos bajemos) porque si actualizamos cualquiera de ellos y actualizamos, podremos perder nuestro trabajo al sobreescribir los archivos.… Leer artículo completo

Categories: General, PHP Tags:

Experimentos: Instalando Magento desde SSH


Magento es un software hecho en PHP para gestión integral de e-commerce. [Link a wikipedia]. Existen una versión comercial y una versión open, llamada Community Edition, y es esta última con la que vamos a experimentar.

Hay miles de guías por Internet para instalar Magento. Esta no pretende ser la más completa, pero sí una chuleta rápida para mis futuras instalaciones y experimentos. Aunque me alegraré mucho si a alguien le resulta útil.… Leer artículo completo

Redirigir una web a otra URL dependiendo de la IP que conecte [Apache]

La necesidad surge en un primer momento cuando, desde diferentes lugares se está desarrollando un sitio web. En ocasiones disponemos de un test.minuevositioweb.com (por ejemplo), pero hay veces que la migración puede resultar difícil, o lenta, dependiendo de nuestras posibilidades; y queremos tener el sitio operativo en la dirección web definitiva tanto para nosotros como para nuestros clientes (que a veces quieren ver cómo va el tema).

Para esto, podemos optar por varias soluciones, por ejemplo modificando la programación del sitio web para detectar la dirección IP del usuario y, si esta no está permitida nos redirigir la conexión a otro lugar.… Leer artículo completo

Singletons en C++. Intentando que sean seguros en hilos (thread safety) II

22 abril, 2014 3 comments

Singleton thread-safeAyer hablábamos de la creación de un sigleton y de que nuestro ejemplo no era “thread safe”, vamos, que en un entorno con varios hilos de ejecución cabe la posibilidad de que el comportamiento esperado no siempre se cumpla.

Ahí encontrábamos diferencias entre C++ (<11) y C++11 ya que esta última revisión incluye tratamiento de threads y algunas cosas más que trataremos aquí.

Lo primero que podemos pensar, es que al traernos la instancia de nuestro singleton se crea una sección crítica, la cuál podemos regular con un mutex, provocando que siempre que vayamos a obtener una instancia de nuestro objeto pasemos por el semáforo, y aunque dos threads quieran pelearse por ver quién crea antes el recurso, sólo uno lo conseguirá finalmente.… Leer artículo completo

Singletons en C++ y alguna nota sobre thread safety (I)

21 abril, 2014 4 comments

Antes de nada, comentar que he dividido este post en dos porque vi que se estaba alargando demasiado y se lanzarán uno al día, pondré aquí enlaces a todos los posts.

Muchas veces cuando estamos programando tenemos la necesidad de crear un objeto de una clase determinada, pero éste objeto deberá ser creado una sola vez en nuestra aplicación y debemos evitar a toda costa que pueda ser creado más veces.… Leer artículo completo

Flags en un enum en C


Las flags, son opciones binarias que acompañan un dato o un sistema y valen para informar o definir su comportamiento o su estado entre otras cosas.

En muchos casos, utilizaremos flags para ver el resultado de una operación, imaginémonos que estamos pasando una serie de tests a un dato de texto:

  1. El dato no está vacío
  2. El dato tiene más de 3 letras
  3. El dato tiene menos de 20 letras
  4. El dato tiene caracteres no numéricos
  5. El dato tiene caracteres no números/letras
  6. El dato tiene caracteres de control
  7. El dato tiene caracteres no válidos
  8. El dato tiene formato de fecha
  9. El dato tiene formato de hora
  10. El dato tiene formato de teléfono
  11. El dato tiene formato de coordenadas

Bueno, así puedo poner muchas condiciones, lo importante es la forma de almacenarlo.… Leer artículo completo

Cómo crear un volumen cifrado en un archivo


Queremos alojar en un archivo un sistema de archvos, ya sea para probarlo, para organizarnos o para almacenar información sensible. También puede ser una buena solución si tenemos una unidad con una partición en un sistema de archivos FAT32 y queremos establecer permisos de Linux a ciertos archivos, esos archivos podemos almacenarlos en nuestro nuevo volumen, que residirá en un archivo muy grande dentro de la partición FAT.

Lo primero que debemos hacer es crear un archivo con el tamaño del volumen que queremos crear, no importa lo que escribamos dentro, podemos copiar un fichero grande, o escribir desde un fichero de texto… pero vamos a lo fácil, vamos a crear un archivo que sólo contenga ceros.… Leer artículo completo

Creando un mutex con semáforos entre procesos hijos en C [fork()]

Hemos estado viendo cómo compartir variables entre procesos hijos, y dejamos un poco en el tintero la implementación de mutex en ese caso, esta vez, para implementar el mutex vamos a utilizar semáforos. Estos semáforos también tienen que ser variables compartidas para funcionar correctamente.

Los semáforos tendrá un funcionamiento peculiar. En principio, pensemos en ellos con los valores 1 y 0. Por tanto, si el semáforo vale 1, el semáforo está abierto y lo haremos 0, pero si vale 0, nos esperaremos hasta que valga 1 (al contrario que un while (semaforo==0); utilizando semáforos, será el sistema operativo el que active nuestro proceso cuando el semáforo vale 1 por lo que podemos utilizar los recursos del sistema para otra cosa mientras).… Leer artículo completo

Variables compartidas entre procesos hijos en C [fork()]

26 febrero, 2014 No comments

Otra forma de enfrentarse con la concurrencia, en el maravilloso mundo de hacer varias cosas al mismo tiempo, es utilizar procesos hijos con fork(). La principal diferencia con respecto a los threads es que éstos son procesos completos, es decir, el sistema operativo les ha dado una zona de memoria de código, otra de datos, y otra de pila, a diferencia de los threads que compartían código y datos, sólo tenían la pila diferente.… Leer artículo completo

Top