Atrevete a bajar de peso y mejorar tu salud con una gran aplicación web

Logo desafío de peso

Hace tiempo desarrolle un proyecto llamado www.desafiodepeso.com , junto a un gran webdesigner y una gran idea engendrada por unas expertas en nutrición que decidieron crear una aplicación web al estilo social network para poder bajar de peso compitiendo contra miembros de tu lugar de trabajo, llevando en todo momento una dieta balanceada hecha especialmente para tí, con graficas de avances y notificaciones por mail así como un “consultorio virtual” donde podras tener asesoría por un experto en nutrición que te guiara y te ayudara a por fin eliminar los kilos de mas y llevar una vida saludable fácil y divertido.

Les dejo unas pantallas del sistema.

Inscriban a su empresa. 😀

Pantalla principal

captura-de-pantalla-2009-09-10-a-las-230252

Pantalla de registro

captura-de-pantalla-2009-09-10-a-las-230659

Pantalla Principal del usuario.

captura-de-pantalla-2009-09-10-a-las-230726

Pantalla de avance de usuario y marcador

captura-de-pantalla-2009-09-10-a-las-230826

Consultorio Virtual

captura-de-pantalla-2009-09-10-a-las-230741

El proyecto esta enteramente desarrollado con Zend Framework, Xhtml y jQuery.

¿Por qué es increible trabajar en Ingenia Group?

Como todos sabemos encontrar el trabajo ideal es una utopía por la cual todos nos detenemos a esperar alguna vez, no obstante siempre la mayoría de la gente pasa el tiempo “esperando” a que todo cambie, que todo mejore para su bienestar, pero ¿cuanto de esto se han ganado?, creo que es tiempo de evolucionar, una empresa que te da la oportunidad y la libertad de crear hasta donde tu creatividad alcance, hasta donde tus ideas quieran llegar, eso es invaluable.

Ingenia Group, es una empresa con problemas como todas, sin embargo hay que ver todas las oportunidades que nos brinda para ser mejores, la fortaleza de crecer frente a una crisis de cualquier tipo,  esa gran oportunidad que tenemos de conocernos y de comprobar nuestra propia fuerza y nuestro talento, si realmente te das cuenta de eso veras que una empresa como Ingenia Group que te da la oportunidad de trabajar con clientes como CAR, Coca Cola, UNION FENOSA, Grupo Aeroportuario del Pacífico, Grupo FRISA, Fin Comun, Brother, ASUR, Seguros Atlas, Peñoles, Nacional Financiera, Bancomext, Interesse.

En Ingenia Group es increible poder:

  • Trabajar con los mejores clientes
  • Conocer gente muy muy agradable
  • Aprender de videojuegos (a cargo del AtletiCO PRO).
  • Tener la gran oportunidad de aplicar estandares de la w3c, Zend, Java.
  • Tienes VOZ sobre la tecnología a utilizar en los proyectos.
  • Trabajas en una oficina padre
  • Tienes una computadora excelente y si es laptop te la puedes llevar a tu casa.
  • La libertad de crear lo que tu desees
  • Nosotros hicimos juntos el reglamento
  • Tenemos permisos especiales
  • Tenemos un gran ser humano como jefe
  • No somos solamente unos “Code Monkey” somos algo más
  • Existen personas con mucho talento de las cuales podemos aprender mucho.
  • Aprendes  llevarte bien con los de ventas :p verdad Pamela
  • Salimos de vez en cuando a algunas actividades juntos realmente divertidas

😀 eso de ser el numero 69 es la onda

Esperando entrar al partido

Esperando entrar al partido

Tania, Bere y Claudia

Las niñas en ingenia group

Las niñas en ingenia group

Una nueva vida requiere una nueva manera de pensar, (cerrar ciclos)

La necesidad imperiante de evolucionar, de cambiar, de adaptarme me ha dejado mas de una vez pensando en una forma de “salir” de mirar fuera de la caja y poder ver mas allá, estas ultimas semanas han sido un cambio brutal en mi vida y en mi percepción del mundo y de como el mundo puede mirarte a tí. Durante todo este proceso adquiri conciencia de que lo mas costoso de la vida es dejar “procesos abiertos” ya que usando la analogía de una computadora es como dejar recursos en la memoria que no nos dejan concentrarnos en “nuestro proceso actual”, todos dejamos procesos abiertos en nuestra vida y seguramente que el que tenga mas procesos abiertos hace menos en el presente, hazte una pregunta en tu interior, ¿que procesos o cosas he dejado sin terminar en mi vida?

Ejemplos.

  • Titularme
  • Cerrar ciclos (de verdad y para siempre) con personas del pasado
  • Terminar proyectos de vida, de trabajo, de amor
  • Ver y firmar personalmente con Hacienda el que ya no soy opensource (si si me llego la multa de 9000 pesos).
  • Sanar viejos problemas personales y emocionales
  • Sanear viejas deudas
  • Aprender cosas
  • Quererme y conocerme más
  • Dar clases en una universidad
  • Sanar relación con familia
  • Hablar de mis necesidades y de lo que pienso con todas las personas.
  • No quedarme callado ante las injusticias
  • Re-escribir mis clases PHP actionOsForm, activeTable usando el patrón adapter , interfaces y PHP5.
  • Donar 10000 pesos a MODx
  • Escribir código para MODx revolution xPDO
  • Ayudar en la documentación de Zend
  • Escribir un firebug para ie
  • En fin miles de cosas

Necesitamos cerrar procesos en ejecución para que nuestro sistema este al día y podamos ser más productivos, ¿y tu? ¿cuantos procesos tienes en ejecución?.

Aplicando uno de los componentes de Scrum en nuestra vida diaria

Últimamente el mundo cambia con rapidez y hay que movernos rapido para poder asegurarnos de conseguir todas las metas que vamos imaginando dia con dia o al menos cumplir alguna ya que en estos tiempos todos somos multidiciplinarios sin embargo no podemos terminar algo.

Creo que la necesidad básica de cualquier ser humano es el sentir la magnitud de las propias fuerzas y nada mejor que terminar algo y llevarlo de principio a fin, no obstante en el mundo el 80% de los proyectos estan siempre retrasados.

Puede que cambie la administración de proyectos no obstante si no cambiamos primero nuestros hábitos y costumbres, ninguna metodología hara en realidad algo por nosotros, necesitamos aplicar Scrum en nuestras vidas, y hacernos estas preguntas.

¿Que he hecho los ultimos dias?

¿Que voy a hacer hoy?

¿Que me detiene para lograr mis objetivos?

Haciendonos estas preguntas a diario seguramente mejoraremos mucho como personas y profesionistas.

Les dejo con una analogía divertida sobre Scrum

En Scrum se definen varios roles, estos están divididos en dos grupos: cerdos y gallinas. El nombre de los grupos están inspirados en el chiste sobre un cerdo y una gallina que se relata a continuación.

Un cerdo y una gallina se encuentran en la calle. La gallina mira al cerdo y dice: “Hey, ¿por qué no abrimos un restaurante?” El cerdo mira a la gallina y le dice: “Buena idea, ¿cómo se llamaría el restaurante?” La gallina piensa un poco y contesta: “¿Por qué no lo llamamos “Huevos con jamón?” “Lo siento pero no”, dice el cerdo, “Yo estaría comprometido pero tú solamente estarías involucrada”.

Assembla, la herramienta para el trabajo en equipo

¿Estas cansado de comunicarte por telefono, msn, gritos, conferencias cuando desarrollas un trabajo en equipo?

Muchos de nosotros que nos dedicamos al desarrollo de código sabemos lo complicado que es tener sinergía con los diseñadores o bien con todas las personas que utilizan el mismo codigo, llamese Templates, CSS, HTML y demas archivos que nunca tenemos control sobre lo que modifica el otro.

¿No seria ideal que “alguien” llevara el control de cada linea que se modifica en un archivo, para saber que modifico un integrante del equipo?

¿No sera ideal, que ese “alguien” controlara los cambios a tal grado de que si alguien metio la pata, pudieramos restaurar una versión anterior?

Todo eso suena maravilloso y alguien ya lo invento, se llama Sistema de control de versiones A.k.a, (SVN), sin embargo como implementar esto sin depender de la obligada curva de aprendizaje para todo el equipo.

¿No seria ideal, que todo eso estuviera integrado con un tablon de mensajes, chat, perfiles, milestones (Lista de tareas), tickets de consulta y soporte?

¿No seria ideal que no tuvieramos que instalar nada, de servidores, ni scripts para hacer funcionar un lugar donde trabajar así?

Pues, les tengo una noticia, Existe y se llama Assembla, un servicio en linea que nos permite trabajar en proyectos colaborativos en grupo . En su versión gratuita nos dan 200 MB para alojar hasta 10 proyectos, sin embargo vale la pena echarle un ojo a la versión de pago, que seguramente nos hara el camino hacia la felicidad laboral mas rapido.

ActionOsForm, una forma fácil de actualizar una Base de datos con PHP

Hace tiempo, cuando iniciaban los Frameworks para el desarrollo rapido de aplicaciones, en los tiempos de luz de Struts, Ruby on Rails, CakePHP, etc etc, uno no podía concebir para desarrollos rápidos o no orientados a objetos, existiera una manera facil rapida y escalable de hacer CRUD en una base de datos con validación de los datos “on the fly“, la pregunta obligada era ¿como puedo acoplar toda mi lógica de negocio?, a un sistema MVC como lo es un framework, sin mover todo mi código y bien solo tocar las partes que pueden crecer, como son los datos pedidos por una aplicación, hay muchos sistemas pequeños que no usan la lógica de negocio separada en capas y estan acostumbrados a usar una sola capa, ya que esto fue la punta de lanza del por que PHP triunfo en internet, era accesible hacer un “hello world” en 3 segundos, no obstante esto desemboco en sistemas poco escalables y dificil de mantener, por esto decidi hacer esta clase que funciona en el modelo a una capa, pero que permite, validar datos con reglas REGEX, ActionOSForm, es una clase pensada en mejorar esto, ya es código viejo, pero puede servir para mostrar alguna técnica, de optimización y reducción del código que se escribe dia con dia.

Vamos a hacer un ejemplo practico del cambio de paradigma y como nos ayuda ActionOsForm.

Tenemos una Base de datos con esta estructura.

Nombre de Tabla: Maestros

Campos: id_maestro,nombre, apellidos, RFC, claveAccesso,nivelAcceso

Necesitamos un sistema de altas, bajas y modificaciones, para esta tabla, en una aplicación tradicional en PHP, crearíamos un formulario y mandariamos los datos por POST hacia una pagina que procesaria los datos de nuestro formulario. En una aplicación tradicional hariamos esto.

Formulario HTML

Registro Maestro

Este formulario con los nombres de campos llamados, nombre, apellidos, y RFC respectivamente, van a ser enviados a una pagina llamada procesar.php, nuestro archivo procesar, se va a encargar de recibir estos datos, y registrarlos en una base de datos, en este caso mySQL.

En nuestra aplicación tradicional usando las funciones habituales de insersión de datos con mysql, procederiamos de la siguiente manera, en nuestro archivo procesar, vamos por pasos.

1.- Recibir los datos del formulario.

//Recibiriamos los datos por medio de POST
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$rfc = $_POST['rfc'];

2.- Validar el formulario:

Aquí viene una de las grandes ventajas de ActionOsForm, en este momento nuestro formulario se ve muy sencillo de validar, ya que solo son pocos datos, ¿pero que sucede si un dia de estos nos dicen que agreguemos 15 campos mas para los datos del Maestro, seria tedioso crear una comprobación por cada campo suponiendo, que una validación simple podria ser de esta manera.

if(trim($nombre)!="" && trim($apellidos)!="" && trim($rfc)!=""){
	//Proceder a insertar los datos
}

Sorprendente el tamaño del IF o la condición que se tendría que crear para actualizar los demas, campos, Pero ¿Que tal si cada campo necesita un tratamiento de validación especial? como el RFC, que como ustedes saben o algunos tal vez no, es una clave que nos identifica a los Mexicanos, imaginemos que dentro de estos campos viene, también una fecha, una CURP, o tal vez un numero de identificación que cumple con algún patrón especifico. Tal vez podríamos hacer algo como esto…

2.1: Validación mas especifica

function isRFC($cadena)
{
$cadena = trim($cadena);
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z0-9]{3})?$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
function isCURP($cadena)
{
$cadena = trim(strtoupper($cadena));
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z]{6})([0-9]{2})$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
if(trim($nombre)!="" && trim($apellidos)!="" && isRFC($rfc) && isCURP($rfc) && N....){
	//Proceder a insertar los datos
}

No obstante, imaginemos el escenario, para actualizar un sistema de este tipo, tendriamos que aumentar el if, o bien hacer un if else if, sin embargo esto se vuelve tedioso con el tiempo, cuando se necesitan agregar nuevos tipos de datos al sistema o mas campos por validar, esto es lo que nos viene a resolver y ayudar ActionOsForm, como lo veremos mas adelante esto nos da un mayor control, de los mensajes de error y la encapsulación del proceso.

3.- Inserción de en la DB

$con = mysql_connect("localhost","usuario","password");
$sqlStr = "INSERT INTO Maestros (nombre,apellidos,RFC) VALUES ('".$nombre."','".$apellidos."','".$RFC."')";
$consulta = mysql_query($sqlStr,$con);

Volvemos a la misma tarea tediosa a la hora de actualización, si nos pidieran agregar 15 campos a la inserción, tendriamos que modificar esta consulta y concatenar, realmente no tenemos tiempo para tareas tediosas, imaginemos, al momento de la actualización y el borrado, es hora de conocer ActionOsForm.

Archivo procesar.php Completo

//Recibiriamos los datos por medio de POST
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$rfc = $_POST['rfc'];

function isRFC($cadena)
{
$cadena = trim($cadena);
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z0-9]{3})?$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
function isCURP($cadena)
{
$cadena = trim(strtoupper($cadena));
if(ereg("[a-zA-Z]{4}([0-9]{6})([A-Z]{6})([0-9]{2})$",$cadena))
	{
	return true;
	}else
		{
		return false;
		}
}
if(trim($nombre)!="" && trim($apellidos)!="" && isRFC($rfc) && isCURP($rfc) && N....){
	//Proceder a insertar los datos
}

//validamos los datos
if(trim($nombre)!="" && trim($apellidos)!="" && trim($rfc)!=""){
	//Proceder a insertar los datos
    $con = mysql_connect("localhost","usuario","password");
	$sqlStr = "INSERT INTO Maestros (nombre,apellidos,RFC) VALUES ('".$nombre."','".$apellidos."','".$RFC."')";
	$consulta = mysql_query($sqlStr,$con);
}else{
	echo "Datos incorrectos";
}

5.- Hagamos lo mismo con ActionOsForm, Para usar esta clase solo hace falta incluirla y utilizar los metodos para validar e insertar los datos, y sin escribir ninguna consulta SQL, ni tampoco una expresión regular para validar los datos. Todo lo anterior se puede resumir con ActionOsForm, a este codigo.

include("WEB-INF/class/actionOsForm.php");
	$registro = new actionOsForm('Maestros');
		$registro->activeData($_POST);
		if($registro->validateForm())
			{
			$registro->doInsert();
				if($registro->getNumErrors()==0)
					{
					echo "Registro insertado y validado";
					}else{
					$registro->getErrors();
					}
			}else{
			$registro->getErrors();
			}

Ahora, ¿como funciona?, este pedazo de codigo, ya válido los datos, por su tipo de datos, y encapsulo el posible error para que si no pasa la validación todo el formulario, regresar un arreglo con los errores generados en la validación..

Explicación linea a linea:

En esta linea incluimos la clase que se hara todo el trabajo pesado

include("WEB-INF/class/actionOsForm.php");

Creamos un nuevo objeto ActionOsForm Pasándole como argumento al constructor, la tabla en la que insertara los datos.

$registro = new actionOsForm('Maestros');

Pasamos los datos enviados por el formulario al método que contendría todos nuestros datos, con su respectivo tipo de datos.

$registro->activeData($_POST);

Esta sentencia condicional se encarga de validar todo el formulario entero, ya sean, nombres, apellidos, fechas, RFC, CURP, telefono, codigo postal, numeros, y regresa TRUE, en caso de que todos los datos sean validos y esten listos para sen insertados en la base de datos, en caso contrario, regresa FALSE y guarda en un Array Todos los errores de validación que pudieran surgir durante el proceso.

if($registro->validateForm())

Si los datos son validos, llamamos al método doInsert, encargado de crear una consulta SQL adecuada para ingresar los datos en la DB

$registro->doInsert();

Si cualquiera de los dos métodos, regresa FALSE podemos obtener los errores de inserción con el método..

$registro->getErrors();

Hasta la próxima :D, ¿parece útil no?, ¿Por que escribir tediosas consultas SQL, o validar datos, con expresiones regulares, si ActionOsForm lo puede hacer por ti, el codigo mencionado arriba, puede servir para 1 o para 100 campos sin aumentar ni una linea de código.

Mexico Unido Contra la Delincuencia

Mexico Unido

Hace unos dias, me integre con el equipo de Ingenia Group para el desarrollo del nuevo portal de Mexico Unido Contra la Delincuencia este proyecto me emociona mucho ya que siempre he querido aportar algo y dejarme de quejar por la situación que vivimos dia a dia en este pais, cabe mencionar que hay grandes personajes involucrados en el proyecto, tales como.. El encargado de ubuntu latino (Alfonso Bribiesca) programador Mexicano con grandes ideas, asi mismo se encuentran en la lista Aldo Cárdenas diseñador lider de varios proyectos como Wings, Cmr, Union Fenosa, etc, y no podria faltar el buen y admirado Ehecatl Mendoza liderando esta iniciativa sin animos de lucro, con las ganas de crear un sitio accesible, facil y directo para el usuario, ya que la mayoria de portales en internet carecen de “Su objetivo principal” Comunicar e invitar a participar, el movimiento por un Mexico sin Delincuencia lo hacemos todos.