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 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

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í.

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.

 

 

Cómo crear tu propio framework PHP especializado en un tema: Inventaria

Si alguna vez os habéis preguntado qué framework o qué gestor de contenidos utilizar, y no habéis llegado a ninguna conclusión quizás es porque lo que realmente necesitéis lo podéis hacer vosotros mismos con un poco de esfuerzo…y digo esto porque lo que necesitamos últimamente en la comunidad de programadores es gente que haga las cosas bien, gente como Pedro Luis, que nos regala el código de una web que tuvo que realizar en su trabajo. Pedro es Ingeniero Informático y le gusta hacer las cosas como un ingeniero debe hacerlas, con base y fundamento jeje

Nuestro amigo ha subido a su directorio lo que véis en el vídeo, el proyecto Inventaria, un motor de sitio web para organizar departamentos de un colegio, la tecnología que utiliza en su pequeño y humilde pero potente framework es: jQuery, PHP, mySQL y XHTML+CSS. Está pensada para que se pueda escalar fácilmente, añadiendo nuevas clases que harán de controladores y vistas…sí, le falta el modelo para completar el círculo del patrón MVC pero, quién necesita realmente un modelo cuando tienes el gestor de plantilla Smarty?… puede hacer el controlador y la comunicación con este sistema de plantillas de modelo al mismo tiempo? efectivamente, y así es como nuestro querido amigo Pedro lo ha pensado y ahora, sigamos viendo algo de código.

La estructura del sitio es algo que ya hemos visto en otros frameworks más famosos, primero tiene un index.php y por medio de un fichero .htaccess , redirige todas las peticiones menos multimedia a este script, que simplemente se conecta a la base de datos y renderiza la vista que la acción de la URL especifica, algo que todos conocemos:

//Extract Controller, Action and parameters from URL
  $query = $_SERVER['QUERY_STRING'];
  $request = explode('/', $query);
  $controller = (!empty($request[1])) ? $request[1] : 'main';
  $action = (!empty($request[2])) ? $request[2] : 'index';

y Pedro lo hace de forma muy inteligente y compactada, como véis es código que se entiende a la primera incluso las condiciones anidadas en una única línea. El motor o núcleo es tan sencillo que entra en esas menos de 100 líneas, un resultado de una acción se guarda directamente filtrado y procesado mediante el uso a la llamada de un controlador asociado creado en la variable $instance, que es la instancia de la clase perteneciente al controlador que la URL especifica…

 

include('controllers/'.$controller.'.php');
$instance = new $controller;
$result = call_user_func(array($instance, $action), $params);
$view = $result['view'];
$data = $result['data'];
 
render_view($view, $data);

aquí podéis ver que se carga el controlador, se crea la instancia de la clase y se procesa el resultado para llamar seguidamente al renderizador de la vista, que podría ser,al mismo tiempo cualquier otra clase, pero en este caso es smarty y cerramos el ciclo del patrón Modelo – Vista – Controlador de una de las maneras más simples que he visto en estos días jeje

Si profundizamos en el Controlador, veremos que implementa sólo dos, el encargado de la página principal y el que maneja las materias del departamento del colegio, y funciona casi como una capa por encima de la clase de la base de datos, es decir, hace las consultas de listados, modificaciones, inserciones o borrados fáciles sólo pensando un poquito.

Para instalarlo sólo hay que crear una base de datos ,poner los valores de configuración en index.php e install.php, que por simplicidad ni siquiera se ha creado un config.php jaja, y lanzamos este install.php, tras lo que podemos cargar la web en el navegador.

Para probar este software directamente en mi PC me he bajado el maravilloso paquete de MoWeS (Servidor Apache2+mysql5+php5+image-magick+phpmyadmin en 23MB), he descomprimido Inventaria en el directorio www/inv de MoWeS, después he creado una base de datos con juego de caracteres UTF8 con una instrucción sencilla en phpmyadmin:

 

CREATE DATABASE `inventaria` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

y he puestos los datos de configuración en index.php e install.php

  $host = 'localhost';
  $dbname = 'inventaria';
  $dbuser = 'root';
  $dbpass = '';

para lanzar localhost/inv/install.php ,lo que me devuelve:

Creating departments data table...OK
Creating materials data table...OK
Creating constraints...OK
Creating departments data
---------------------------
Creating Religión table...OK
Creating Plástica table...OK
Creating Ciencias Sociales table...OK
Creating Tecnología table...OK
Creating Francés table...OK
Creating Latín table...OK
Creating Música table...OK
Creating Gestión Administrativa table...OK
Creating Física y Química table...OK
Creating Educación Física table...OK
Creating Biología y Geología table...OK
Creating Filosofía table...OK
Creating Orientación table...OK
Creating Matemáticas table...OK
Creating Lengua table...OK
Creating Inglés table...OK

con lo cual, ya tenemos todo, ya podemos entrar en localhost/inv/. Si queremos cambiar el directorio inv por cualquier otro sólo tendríamos que cambiar las referencias en las plantillas de inv al nuevo nombre, por ejemplo, “inventaria”.
A partir de aquí ,es tarea del lector avanzar el proyecto y enfocarlo hacia una web que trate de manzanas, cómics, o por qué no? una tienda o cualquier otra cosa!
Ya no tenéis excusa para hacer las cosas bien desde cero, tenéis el conocimiento en vuestras manos, usadlo sabiamente :)

Mención especial a Pedro por compartir con nosotros su código, gracias!

Aplicación web de anuncios con mapas de Google Maps

Hace unos años estuve realizando pruebas con aplicaciones web simbióticas usando mapas de Google Maps, finalmente algunos clientes me pidieron productos basados en dichas pruebas, en el vídeo mostrado a continuación se muestra una de ellas, del dominio inmorusticas.com, está en fase muy beta aunque las críticas son bien recibidas, como siempre…, pero se puede dislumbrar lo fácil que es construir sin un equipo de diseño, sólo con mi trabajo como programador un sitio web como los que actualmente están “dando caña” en internet.

Está optimizado para SEO  (posicionamiento) aunque siempre se puede mejorar, por ejemplo, las direcciones amigables google se pueden optimizar más aún.

Los puntos fuertes de una aplicación de este tipo,son

  • la mayor parte hecha en AJAX con Php y MySQL
  • tiene un generador interno de formularios basado en plantillas
  • se pueden añadir categorías, subcategorías
  • inmuebles con una interminable lista de campos a rellenar, entre los que cuentan: la posición en el mapa con coordenadas de latitud y longitud, imágenes que aparecen animadas, datos de varios tipos como requisitos de la información de la propiedad
  • varias formas de indexar los elementos: filtros a medida, por provincia, categoría, subcategoría, precio,etc.
  • una administración interna para dar de alta/modificar/eliminar/aceptar las fichas en cada categoría así como los servicios e información del sitio web.
  • sindicación de contenidos por RSS: compartir los anuncios para con otros servicios web con XML

y seguramente me dejo algo más pero es sólo para dar una idea de lo que se puede hacer, básicamente todos los sitios de anuncios utilizan este tipo de estructura y arquitectura de la información, además de los mapas de Google Maps, claro.

Aplicación Web para restaurante con guarderia – Platos y Noticias

En el año 2007 se realizó la programación de esta web se hizo con el prototipo 0.1.2.7 de zenphp, las plantillas XHTML + CSS son validadas por la herramienta de la W3C.
Mediante la ayuda de la administración interna es posible editar el contenido de la base de datos que se muestra en el cliente.
Se realizan validaciones para formularios en AJAX, en cuanto a la administración, además se permite la creación rápida de categorías para platos, y otros parámetros avanzados, etc.

Las plantillas XHTML + CSS se crearon por Agencia Q4 en el 2007.



Ver en Youtube

Estudio de arquitectura – Proyectos, Galerías, Información

Se utilizó el framework ZENPHP sobre un diseño de Agencia Q4 contra bases de datos de un servidor MySQL y animaciones con Flash y JavaScript en el año 2007.

Se pueden ver como se puede configurar las categorías que se deben mostrar primero, la galería de imágenes y la administración de contenidos : proyectos e información del estudio.

La potencia de firebug | Ingeniería inversa de aplicaciones web

Siempre es lo mismo, la depuración de aplicaciones que hago es automática, cuando visito un sitio web no puedo evitarlo, es como cuando un diseñador gráfico 3D ve una película de animación, o un programador de videojuegos prueba la última creación de una empresa, …no podemos disfrutar del producto al mismo nivel que alguien “normal” , porque lo analizamos inconscientemente.

En este caso analicé anoche Badoo,una web de contactos escrita en AJAX y conseguí una única línea en JavaScript con la que puedes hacer un robot para votar a todas las personas sin restricciones de ningún tipo aprovechando un bug…

El vídeo (música de Helloween):

La potencia de FireBug

El ritmo que se consigue de votación es cada vez más vertiginoso a medida que voy obteniendo nuevos métodos para saltar de un perfil a otro hasta que consigo dar con un objeto en el árbol DOM que está conectado a toda la estructura y al que se le puede llamar directamente.

En esta web se captura el click en cualquier sitio, de forma que sólo permite el evento click en los objetos registrados, así pueden controlar la actividad completa de un usuario, la línea que permite acceder al evento click sería

$e._handlers.cl.meet_yes[0](el)

donde $e es un objeto que guarda todos los manejadores y enlaces a los objetos, _handlers todos los manejadores, cl las funciones que manejan los objetos de la interfaz registrados y meet_yes el conjunto de botones “Sí | Quizás | No”, si se sigue la traza del sí perfilando la web con el profiler de firebug encontramos que finalmente llama a la función vote que es lo único que nos interesa, ya que no tiene sentido regenerar el evento click ya que necesitaríamos construir un objeto válido con los parámetros del botón necesarios (que no se especifican) por lo que podría costarnos mucho trabajo así que llamamos a la votación indicándole que el objeto DOM es el botón “Sí”:

MeetMe.vote(document.getElementsByClassName(“meet_yes”)[0])

Ahora podemos embeber dicha línea dentro de una función para hacerla compatible con el modo de trabajar con prototipos de JavaScript:

function votar() {MeetMe.vote(document.getElementsByClassName(“meet_yes”)[0])}

y nuestro robot sería tan sencillo como este:

setInterval(“votar()”,1000);

cada segundo vota, así podeis dejarlo,si tenéis una mejor conexión podeis reducirlo a la mitad, recomiendo poner 5 segundos y meter el setInterval dentro de la función, podéis usar el fichero de ejemplo downloadhacks_badoo.js

Supongo que arreglarán este bug…

Página 1 de 41234
footer
jbelon © | sitemap.xml