Ejemplo de excepciones desde Zend Framework

Siguiendo con el post anterior sobre el tema, quería mostrarles otro ejemplo de cómo se manejan las excepciones desde Zend Framework, donde la diferencia principal radica en que obtenemos una lista enorme de clases preestablecidas para el manejo de excepciones (como sucede en lenguajes como Java), lo que nos permite usarlas de forma directa sin tener que implementar nada más que el try/catch.


try{

$this->view->clientes = Models_Clientes::getAll();

}catch(Zend_Db_Statement_Exception $e){

$this->view->mensajeError =
'Se ha producido un error interno al intentar recuperar datos.'
.' Por favor envíe un email a sistemas@surforce.com' ;

}catch(Zend_Db_Adapter_Exception $e){

$this->view->mensajeError =
'Se ha producido un error al conectar a la base de datos.'
.' Por favor reintente en unos minutos';

}catch(Zend_Exception $e){

$this->view->mensajeError =
'Se ha producido un error inesperado.'
.' Por favor reintente en unos minutos';
}

$this->render ();


Repasando: las excepciones deben ordenarse como si fueran reglas de un firewall, la regla más específica debe ir al principio y la más general al final (ya que si lo hacemos al revés siempre entrarán por la primer coincidencia en la regla).

Con Zend_Db_Statement_Exception entrarán todas las fallas que ocurran por errores de sintaxis en el ejecución de sentencias SQL (error bastante grave), en el segundo caso con Zend_Db_Adapter_Exception cualquier falla en la conexión al motor de base de datos y en el último, ya una excepción genérica como Zend_Exception, capturamos cualquier otro error que no pudimos especificar con detalle (algo así como la "pantalla azul de la muerte" de Windows ;-)).

Si no agregamos este try / catch en el momento de la falla enviará directamente en pantalla todo el "volcado" de la Excepción y concluirá la ejecución de la aplicación de forma abrupta.

Pero, si además de esto agregamos en la vista un código como el siguiente, podremos enviar un mensaje al usuario sin distorsionar la interfaz de nuestra aplicación.

En este ejemplo, el código para desplegar el mensaje de error se encuentra en el layout de la aplicación:

< ?php if(!is_null($this->mensajeError)): ?>
< ?php echo $this->mensajeError ?>
< ?php endif ?>

Y con un poco más de trabajo, puede quedar más estético y hasta con una animación (moviendo lateralmente el cuadro un par de veces, como para alertar al usuario) y se vería de esta forma:


Las excepciones son la única forma de tener un manejo uniforme de errores (algo que tienen todos los lenguajes POO modernos) y poder controlar mejor cómo responder a situaciones no esperadas y que nuestra interfaz no quede "desarmada" delante del usuario, lo cual podríamos hasta definir en la configuración que cada vez que ocurra un "error general" envíe un email al departamento de sistemas con todos los datos para poder analizar el fallo ni bien sucede.

¿Y ustedes, usan excepciones? ¿qué otras ideas han aprovechado para implementar y mejorar la funcionalidad de nuestros sistemas?

Último post del blog

(Suspendido Brasil, feliz Día de los Inocentes ;-))

... por razones de índole laboral voy a cambiar de país de residencia (nuevamente, no hace un año que nos vinimos de Uruguay a Argentina) y voy a cambiar de tecnología: me paso completamente a Java, más concretamente JEE.

Saludos, sepan disculpar, voy a estar bastante ocupado con la mudanza (vender todo nuevamente para irnos a Brasil), así que hasta la vista! (alguien más llenará este vacío, seguro).

"Rendimiento: ¿conviene utilizar POO?"

Ayer enviaron la siguiente consulta a un foro, lo cual generó que escribiera esta respuesta que casi se me convirtió en un post y para no perderla, lo dejo documentado aquí con links de referencia y un poco más actualizado su contenido:

Consulta:
"Buenas a todos. Hace unos meses me comencé a meter de lleno con php. Después tuve que dejar otro tiempo más porque me surgieron proyectos en otras plataformas, y ahora estoy retomando para hacer un proyecto personal en php.

Me surgieron algunas dudas con respecto a la verdadera utilidad, en relación al rendimiento, de la programación orientada a objetos en php. Si bien no conozco como trabaja internamente php, es un lenguaje interpretado, es decir, que en cada carga o recarga de la página las clases en cuestión deben ser interpretadas una y otra vez.

¿Es más ineficiente interpretar una clase, que interpretar una secuencia de comandos? ¿Alguien conoce de esta interna?. En .Net las clases son compiladas una vez que fueron solicitadas, por lo tanto, con cargas o recargas posteriores solo resta usarlas tranquilamente, ya que sabemos que ya ha pasado por esa etapa previamente.

Solo me estoy enfocando en el rendimiento de la aplicación. Si lo analizamos desde otro punto de vista, de seguro que encontramos muchas más ventajas a la programación orientada a objetos que a la programación procedimental.
Espero que alguien me oriente un poco en esto."


El moderador y amigo GatorV le responde:

"Es mínimo el impacto, si a caso lo que es más es la memoria ram que llegue a consumir, aunque no es nada que impacte, ya que el compilador de PHP esta muy optimizado para evitar desperdiciar memoria.

Por otro lado si te importa un poco el tema de estar re-interpretando las clases, una vez que termines puedes usar Zend Optimizer para guardar solamente las clases en estado compilado, y asi eliminar el overhead de estar interpretando y ejecutando".


Mi respuesta (actualizada):

"Tus comentarios (completamente justificados) me hacen acordar a los mitos de la "optimización extrema" en PHP, algo que veo sí completamente injustificado.

La forma en que se hace las pruebas es generalmente muy fuera de la realidad, como hacer un loop de millones de registros para luego contar las milésimas de segundo entre usar un echo o un print.

El peor mal que podemos tener en la ingeniería de software es ir hacia la "optimización temprana" (varios [1], [2], [3], etc, sin descontar que el lenguaje PHP sigue evolucionando y siendo optimizado), es decir, preocuparnos tempranamente del rendimiento y no de la funcionalidad o el diseño de un sistema.

La parte que no se llega a entender es que ya pasamos la época de hacer páginas PHP embebidas con HTML y conexiones SQL, actualmente los proyectos requieren SISTEMAS, y estos poder escalar y desarrollar rápidamente de acuerdo a las necesidades del mercado.

¿Cuanto cuesta modificar un producto web que no es un sistema? ¿cuanto nos cuesta desarrollar funcionalidades nuevas?

Si no tienes diseño, si no aplicamos metodologías que incluyan POO, dudo seriamente que podamos estar aptos de desarrollar un sistema "medio" para arriba.

Pero eso de "no uses require_once porque es caro", "echo es más rápido que print" ó "print es más rápido que echo" (he visto artículos sobre "optimización extrema" que dicen lo contrario entre ellos), "usa ++$i en vez de $i++", etcétera, las considero completamente tontas e inútiles.

Podemos discutir que si tienes POO + Persistencia (BD), es seguro tendrás más consultas a la base de datos que si hicieras un JOIN y luego recuperaras los datos y procesaras, pero hay muchas técnicas para evitar esto, como el "lazy loading", evitando tener que consultar todas las veces por un mismo valor a la base de datos si ya lo tienes la primera vez, o evitar consultas SQL innecesarias por valores que perfectamente pueden estar en un array ya que no cambian (o en un archivo plano, luego lo puedes actualizar, etc), etc.

Siempre hay que tener en cuenta la escala del sistema, si es para 10 usuarios concurrentes, no me molestes con estas tonterías. ;-)

Pero puedes estar tranquilo, el problema no pasa por usar puramente POO, el problema para por otros lados, la latencia se estudia desde que el usuario ejecuta una acción y recorre todos los servicios y servidores hasta que el sistema responde, no es solo PHP.

PD: ahora me acuerdo que hace rato que quiero escribir un artículo sobre "lazy loading" ;-)


¿Tú qué opinas de la "optimización extrema"? ¿Crees en ella? ¿y de la "optimización temprana"? ¿te tomas el tiempo de verificar si realmente generan algún tipo de beneficios? ¿cómo optimizas tus sistemas? ¿cómo los diseñas?

Ejemplo de excepciones: "enviar un SMS"

Hace unos meses terminamos una aplicación de "trivias" (sistema de preguntas y respuestas) para celulares donde toda comunicación con el sistema se da a través de mensajes SMS.

Estimo que para sorpresa de muchos, está desarrollada enteramente en PHP5 + MySQL5, y se implementó un sistema en 3 capas para controlar toda la complejidad del sistema (que no era "trivial", el sistema está siendo usado para una campaña que aparece en televisión, publicidad impresa, web, etc e involucra marcas muy importantes, con un flujo enorme de usuarios participando lo que genera millones de mensajes).

Sé que en el mundo PHP no estamos tan acostumbrados a usar ni interfaces ni excepciones, así que me pareció oportuno comentar unos ejemplos extremadamente simples que pueden clarificar los beneficios de su uso.

Nuestra aplicación, como toda que trabaje con mensajes SMS, tiene un límite de 160 caracteres por mensaje, y para nuestro sistema, desbordar ese límite significa que existirán caracteres que se perderán (no es opcional enviar dos SMS en esa situación, el mensaje tiene que llegar al usuario en un solo SMS).

Por lo tanto, para la integridad de la aplicación debe poder saber en el mismo momento si ocurre esta situación "anómala" y tratar de resolverla de alguna forma.

A modo de ejemplo teórico
supongamos que nuestro sistema recupera de forma dinámica dos cadenas de texto, la primera es la presentación de la pregunta de la trivia (información de puntos, mensaje de aliento que se extrae de cientos de frases diferentes, etc) y la segunda parte será la pregunta en sí misma (nuevamente, una tabla con miles de preguntas que se obtienen al azar).

Definimos como regla que si ambas cadenas superan los 160 caracteres estamos delante de un problema "excepcional" que debemos resolver
, ya que -como comentamos anteriormente- no es solución ni cortar el mensaje, ni enviarlo en dos SMS o matar la aplicación y enviar información de log (ya que estamos en producción y el sistema tiene que responder al usuario a toda costa).

Determinamos que lo más importante es enviar la pregunta de la trivia y no tanto si una pregunta no llega con su primer parte informativa (se asume que la pregunta siguiente no entrará en una situación "excepcional"), por lo tanto podríamos hacer algo tan simple como:



/* [código del sistema] */

$informacion = $trivia->getMensajeInformativo();
$pregunta = $mensaje->getPreguntaSiguiente();

try{

Sms::enviar(
$informacion . $pregunta
);

}catch(Exception $e){

Sms::enviar(
$pregunta,
Sms::ENVIO_FORZADO
);

}


Lo que está entre medio de las llaves "try" es el código que puede fallar, dentro del envío de SMS revisa el tamaño del texto y si supera los 160 caracteres envía una excepción de esta forma (y de paso genera un log para poder tener registro de estas situaciones anómalas y solucionarlas a futuro):



/* [código del sistema] */

if(strlen($mensaje) > MAXIMO_TEXTO){

$error = 'Fallo grave, no pudo enviarse el SMS!';

Log::errorLog(__FILE__,__LINE__,$error);

throw new Exception($error);

}


El método enviar de Sms retorna una excepción, es capturada en un nivel más arriba y pasa a ejecutar un plan alternativo, enviar el mensaje SMS con solo la pregunta (fundamental para el juego de la trivia) y a su vez, en caso que pudiera ocurrir algún otro problema, activa una "bandera" de ENVIO_FORZADO (envía sin importar si tiene que cortar el texto).

Un punto interesante a tener en cuenta es el uso de constantes en la propia clase como para que ella misma "auto-documente" sus opciones posibles, ya que estoy ejecutando el método de la clase Sms pero a su vez uso la clase Sms para que me diga cuales son las opciones posibles y no tengo que estar recordando y/o investigando el código interno para colocar "números mágicos" del tipo 0,1,2,3, etc.


class Sms
{
const ENVIO_FORZADO = true;
const ENVIO_NORMAL = false;

/* [código de la clase] */
}


Nota: en este punto es importante destacar la función de un buen IDE, como podría ser Netbeans, que al teclear Sms:: nos mostrará toda la lista de opciones disponibles, entre ellas, las constantes.

También hay que tener en cuenta que es una situación "teórica" y a modo de ejemplo, ya que habría que implementar un sistema que controle los tamaños posibles de ambas frases, que la suma no supere 160 caracteres, si lo hace, que vuelva a solicitar una de las dos frases, etc. Para este ejemplo nos concentramos desde el punto de vista del enviador de mensajes, ya que a pesar que se hagan distintos controles para el mismo tema en cada capa, este tema igual lo tiene que poder contemplar la clase Sms.

Este ejemplo se puede profundizar, agregando distintos tipos de excepciones para cada tipo de error y solo forzar cuando es un error genérico, así "hilar más fino" y tratar de controlar la situación "excepcional".

Empezando con Zend Framework 1.7 + jQuery + ZendX


Por un tema de carga de trabajo no había podido entrar a experimentar con la versión beta de Zend Framework 1.7, pero el tiempo me ha ganado y ahora ya es estable y oficial, así que vamos a optar (en la empresa donde estoy trabajando actualmente) por armar la nueva plataforma de desarrollo con esta última versión (hicimos sistemas nuevos muy especializados, pero la idea ahora es tirar todos los sistemas "legacy" y empezar a reusar absolutamente todo lo que se haga).

Estamos tomando como base la idea inicial de SURFORCE y armando una estructura "CORE" (lo que era antes SURFORCE-BASE) que contendrá la nueva disposición de directorios según la documentación de Zend (como por ejemplo el directorio "html" fuera del acceso al resto de la aplicación), posteriormente los módulos generales de la aplicación (SURFORCE-MODULES) y una librería general del proyecto (lo que era antes SURFORCE-LIBRARY).

La filosofía que mantenemos, al igual que con los proyectos de SURFORCE, es seguir al máximo el aprovechamiento del Framework, si este -por ejemplo- sugiere usar Dojo, usaremos esta herramienta (así con todo).

Para empezar, tuvimos que ajustar el plan gracias al poco tiempo que teníamos para hacer las primeras entregas de funcionalidad de la nueva plataforma, así que optamos por una opción alternativa (dada la complejidad y nuestra falta de experiencia en Dojo buscamos bajar riesgos para no atrasarnos) y elegir en primera instancia jQuery (que también tiene integración con el framework, pero en menor medida).

Por lo tanto tuvimos que instalar, además de Zend como librería, ZendX, ya que ahí se encuentran todos los view helpers para jQuery.

Si quieres bajarlo, debes hacer un checkout con el svn en la url:

http://framework.zend.com/svn/framework/extras/trunk/library/ZendX/

Posteriormente, si quieres tener acceso tradicional a la liberería jQuery (invocarla directamente como un javascripts) puedes hacer uso de Google AJAX Libraries API, sin necesidad de instalar ninguna de ellas físicamente, accediendo de forma remota de esta manera:

En tu HEAD:
Y Zend Framework ya trae la última versión 1.7, por lo tanto haciendo update a la url del proyecto es suficiente.

En los próximos días actualizaré los proyectos de SURFORCE con estas mejoras para que sea de provecho para todos los que quieran iniciar con Zend Framework sin tanta dificultad.

"El Tao del Codificador"


Hay una frase que dice "menos no siempre es más, es menos" ;-)


A veces los "programadores" piensan que "el mejor código" (en terminos de calidad) es el que menos líneas ocupan, pero, el "desarrollador" sabe que es todo lo contrario, usará todas las líneas extras necesarias para clarificar y facilitar seguir el rastro de lo que se quiso hacer.


No se olviden, pasamos la mayor parte del tiempo manteniendo sistemas y trabajando en equipos con más personas, por lo que debemos codificar no pensando en uno mismo, sino, en los demás.


PD: la evidencia más clara que una línea no es buena es cuando necesitas agregar una o más líneas de comentarios para dejar una explicación de cómo funciona. El código de alta calidad se explica solo, sin necesidad de comentarios.





Ese es el Tao ;-)



Taller POO/PHP5: Lunes pasado finalizó el Grupo 2


Lamentablemente vengo un poco desbordado de trabajo y este post debería haber salido el lunes 17/11, sepan disculpar ;-)

El lunes pasado cerramos el Grupo 2, donde participaron 22 alumnos y fueron 9 alumnos los que sobrevivieron a todas las instancias del taller. Quiero destacar los que sacaron más puntos en el último y más complicado ejercicio: Pedro Del Moral, Federico Grochal y Alejandro Bovino.




Nuevamente, gracias a todos por participar y felicitaciones por el esfuerzo :-)

Taller POO/PHP5: ¡luego de 2 meses, ayer finalizó el primer grupo!

En este "simple pero emotivo acto", copio el comunicado que envié hoy a la madrugada al "Grupo 1" del taller.

"Estimados todos, alumnos del "Grupo 1":

Luego de muchas demoras, aún medio solucionado el tema del hosting y los problemas con el servidor, ya está disponible en el sitio la corrección general y a su vez el código de ejemplo en un .rar para que puedan bajarlo y probarlo.

A modo de homenaje y felicitaciones, el ejemplo de la solución de la última tarea está basado en el trabajo de los 3 alumnos que más puntos sacaron: Omar Lerma, Alfredo Alonso y Agustín Garassino

Los 7 alumnos de 20 cumplieron completamente todas las etapas para llegar al final del taller (8 semanas = 8 tareas) recibirán un último "premio" que se los estaré comunicando "personalmente" por email.

Al resto, gracias por participar, sé que muchos quedaron por el camino por razones de fuerza mayor (la mayoría por temas de trabajo), espero de todas formas ver en el futuro inmediato una forma que puedan retomar lo hecho hasta el momento y darle un cierre final (tal vez un examen).

Doy por concluido el dictado de este grupo del taller, el foro quedará abierto durante esta semana para hacer las consultas pertinentes sobre esta última corrección (o alguna duda pendiente de las anteriores), y podrán seguir accediendo al sistema hasta aproximadamente fin de año, donde cerraré el acceso al taller por temas de seguridad y para darle espacio a otros talleres.

Un saludo y gracias a todos por participar, espero haberles dejado algunos conocimientos más sobre POO, creo fue una gran experiencia para todos, principalmente para mi guiño"

En los próximos días habrán más novedades, aún quedan activos 5 grupos y posteriormente antes de fin de año haré nuevos anuncios con respecto a nuevos talleres abordando nuevas temáticas (que los mismos usuarios han venido sugiriendo).

Saludos! :-)

Taller POO/PHP5: el próximo lunes termina el primer grupo de 5!

Es increíble que hayan pasado un poco más de dos meses y ya estamos cerrando el "Grupo 1" de 5 grupos que hemos abierto (5 para todo público y 1 exclusivo para una empresa) en esta primer experiencia de taller de capacitación originado a través de este blog y con una masividad que no me esperaba, ya que en un principio pensé que podría ser complejo llenar cupos de 20 personas, pero terminamos con:
Y este lunes estoy entregando la corrección de la última tarea del taller con alguna sorpresa más para los que llegaron hasta el último día cumpliendo con todas las etapas. Lamentablemente algunos alumnos fueron quedando por el camino por temas laborales, pero igual siguieron haciendo consultas en los foros o leyendo las correcciones a las entregas aún sin llegar a terminar las tareas semanales.

Quiero agradecer el voto de confianza de todos los participantes y que en lo personal fue un gusto hacer toda esta experiencia (que seguirán más, ya están en preparación para el año que viene) y que además nos debe dejar a todos la lección de que se puede hacer este tipo de emprendimientos de "educación a distancia" (reales, no las estafas que abundan por Internet) y que -a pesar de lo que digan muchos "emprendedores"- las personas de "habla hispana" sí pagan por un taller a distancia, lo hagan con tarjeta de crédito o por giro directo, esto no ocurre "solo en EEUU" (como me llegaron a repetir varias veces argumentando que no iba a encontrar a nadie que pagara).

Vendrán nuevos post, tengo uno pendiente que haré al final del último grupo contando toda la experiencia y mis conclusiones, y vendrán nuevos talleres, que ya están "en la cocina", y alguna sorpresa más ;-)

Nuevamente, gracias a todos, gracias por su confianza y espero haberles dejado a todos "muchos más conocimientos sobre POO en PHP5" que al principio de iniciar, y espero, no quede en el olvido y lo apliquen en sus desarrollos diarios y que sigan investigando.

"PHP es más que programar estructurado embebido a HTML"

Gracias y saludos a todos! aún quedan varios grupos por concluir de aquí a fin de año! ;-)

Últimas horas para inscribirse al Grupo 5 del Taller POO/PHP5

Al momento ya hay 13 personas activas en el Grupo 5 del taller, por lo tanto quedan 7 lugares disponibles (como tope para que el grupo no se desborde) y lo recomendable es que si alguien más quiere inscribirse lo haga entre hoy y el fin de semana, ya que se encuentran disponibles todos los materiales de la semana y la letra para la nueva tarea que tiene como plazo de entrega el martes 4/10 a las 23:55.

Si quieres inscribirte el lunes ya te diría que estarás sobre la fecha y tendrás riesgo de atrasarte con la semana siguiente.

Último llamadooooo..... ;-)

¡Se abrió el Grupo 5 del Taller POO / PHP5!

A pedido de varios usuarios que habían quedado fuera de los anteriores grupos doy por inaugurada la apertura de este nuevo grupo para el taller de POO / PHP5.

Todos los interesados deberán estar registrados en el sistema y enviarme un correo solicitando la información de pago del taller. Una vez confirmado el pago, doy de alta el usuario e inicias accediendo a todos los materiales de estudio de la Semana 1.

Nota importante: solo aceptaré pagos durante esta primer semana, posteriormente y para evitar atrasos en el grupo, ya no habilitaré ningún alumno más en el Grupo 5.

El cupo máximo es de 20 personas, y a pesar que me han comunicado su interés de iniciar esta semana por lo menos 15 personas, sin importar el número final, aún sean 5, el dictado inicia sin inconvenientes.

Bueno, no desaproveches, tú última oportunidad, este taller cuenta con 4 grupos activos con un total de 90 alumnos y el último grupo está concluyendo esta semana con la entrega de la tarea final.

Puedes consultar la lista de inscriptos de todos los talleres en el sistema de registración.

¿Evolucionamos hacia la Programación Orientada a Objetos bajo PHP5 o nos seguimos quedando con el código estructurado embebido en HTML?

Invierte en conocimientos, logra diferenciarte laboralmente, da un paso más hacia el camino de un "PHP Senior" ;-)

Taller POO / PHP5: El lunes 27/10 sería la última fecha teórica posible...

... para iniciar un taller de POO para PHP. Hace días que me vienen consultando de la posibilidad de hacer otro grupo para este año y lo mismo me han preguntado algunas empresas para hacer un "taller privado" para capacitar a sus equipos de desarrollo.

Por lo pronto, si se desea iniciar un grupo más con una duración de 2 meses, como última fecha, se podría iniciar el lunes próximo para que que termine el 19/12, antes de fin de año (luego se vienen las fiestas, etc, etc).

Si hay interés, podemos evaluarlo rápidamente, ya que tendríamos que cerrar un grupo de 20 personas esta semana.

Ahora les estoy enviando un email a la base de registrados para saber si hay verdadero interés.

Espero sus comentarios para ver qué hacemos o el taller sigue cerrado hasta el año que viene ;-)

Martin Fowler: "Código como documentación"

Releyendo algunos artículos de Martin Fowler (gurú/pensador relacionado con Análisis & Diseño en POO) caigo en este artículo que, fuera de no ser tan técnico, considero un tema base a tratar en los equipos de desarrollo como así también sobre cómo se podría aumentar la calidad del código de un desarrollador que se considere "profesional".

En lo personal prefiero ser siempre "simple", clarificar lo suficiente el código como para que hasta un novato pueda entenderlo y esto no me hace menos "experto" por hacer código "entendible".

Lo que hay que evitar es la "sobre-ingeniería", es decir, ser complejos por el simple hecho que nuestra mente sea -tal vez- un poco más rápida que el resto, o simplemente, porque llegamos a tal grado de "optimización temprana" que creemos que nuestra calidad es elevada cuando "resumimos" 50 líneas en unas pocas 5.

Nota al margen: tanto "sobre-ingeniería" como "optimización temprana" son dos males detectados en la ingeniería de software y deben evitarse.

Algunos ejemplos de lo histérico que puedo llegar a ser ;-). Tengo la costumbre inconsciente de:
  1. Separar las sentencias relacionadas entre sí como si fueran párrafos de un artículo: veo a muchos desarrolladores que toman un método de una clase y en todo su contenido no hay una sola línea de separación, todo junto, todo "pegado". Lo primero que hago es empezar a separar como párrafos de un artículo: cuando las líneas de código están relacionadas, van juntas ("punto y seguido"), pero cuando las líneas tratan otro tema agrego una línea en blanco ("punto y aparte"). A mi me costaría leer un libro o un artículo que tiene contenido sin separar, ¿por qué no me pasaría eso con el código de un sistema?
  2. Evitar los "elseif" porque anidar condiciones genera un código difícil de seguir, ya que tenemos que estar evaluando cada condición y todos sus caminos alternos. Si no quedara otra simplificación, trato de cambiar el elseif por un simple else y coloco dentro un "if" aparte y agregarles lineas de separación. En parte está relacionado con el punto anterior (no mejora la lógica pero sí su lectura y entendimiento).
  3. Inmediatamente eliminar cualquier "número mágico", técnica de refactoring que dice algo así como "sustituir todos los códigos numéricos que hay por todo nuestro sistema y cambiarlo por una constante que lo describa", lo cual ya evita que tengamos que hacer un comentario antes del "número mágico".
  4. Cambiar los nombres de variables y hacerlas más descriptivas, sin importar lo largas que me queden: si el caso es muy obvio, no tengo problemas de agregar una variables del tipo "ret" o "retorno", pero en el caso donde lo obvio es peligroso, o donde no es tan obvio, trato que las variables sean tan descriptivas que no haga falta agregar un comentario para explicar para qué sirven, y el lugar más indicado es con los parámetros de un método.
  5. Abrir el código en varias líneas hasta que sea entendible: no tengo pudor en ampliar una línea de código en varias hasta que quede claro, aún sabiendo que puedo yo mismo entenderla con una sola línea. Lo importante, otra vez, no es si solo yo lo entiendo, es si el que viene detrás puede hacerlo, y esto es fundamental para trabajar en equipo y que todos seamos productivos.
Tan malo es hacer código que nosotros mismos nos cueste entender dentro de unos meses, como ser los únicos que lo puedan entender. Un código de alta calidad es el código que todos pueden entender, y hay que comprender que en algún momento u otro, vamos a trabajar en equipo con otra persona, y el código, además de ser entendible para nosotros poder trabajar de forma productiva, debe poder ser entendido por los demás.

Experto es quién hace código entendible, y experto es quién entiende la diferencia entre "código de calidad" y el que no lo es.

Y ahí entra la disciplina "refactoring" que busca, sin cambiar de funcionalidad, que el código mejore su calidad.

¿Y tú, haces código entendible para los demás, para ti, o para nadie? ;-)

Presentaciones de la ZendCon 08 (PHP)

Visitando el sitio de Crónicas de un Mundo Gris me encuentro con el link a las Presentaciones de la ZendCon 08 (PHP) que sabía se iba a hacer, pero no estaba al tanto de la disponibilidad del material de las presentaciones.

Todas tienen muy buena pinta, pero me quedo con la primera que usaron de apertura del evento: muy buenos ejemplos, frases y argumentos que cuentan el crecimiento y adopción que está teniendo hoy día PHP en el ámbito empresarial.



La verdad que viendo de afuera, la empresa Zend ha hecho mucho por estar donde está, y que el framework oficial haya crecido tan prolijo y rápido, a logrado que este último se haya vuelto un gran apoyo a la valoración del Desarrollador PHP en un mundo que dominan las "plataformas complejas".

Grupo 4, iniciado lunes 20:50


Por las dudas lo comento aquí si el email con la notificación para entrar al taller llegara a caer en la bandeja de Spam. Ya les envié un email a todos los que han hecho el pago para le Grupo 4, que fuera de todos los pronósticos cerramos con 21 personas ;-)


Como he comentado en el blog, estuve todo el fin de semana sin conexión a Internet, y recién se solucionó a la misma hora que envié la notificación (estuve haciendo todo el ingreso de los usuarios desde otra conexión)

Para tratar de bajar la ansiedad de todos (lo cual es entendible) creé los usuarios lo más rápido posible, por lo tanto verán que sus datos no están completos (solo aparece la cuenta de gmail, sin nombre y apellido, sin foto). En el correr de los días iré actualizando esta información, ya que considero muy importante que entre todos nos tratemos directamente a través de nuestros nombres y poder asociar una "cara humana".

PD: si todavía quedó alguien fuera, muy sobre la hora, envíame un email y veo la posibilidad de agregarte en este último grupo que recién inició (uno más, uno menos, no va a hacer la diferencia).

Saludos y gracias a todos por el interés y la confianza en este talle ;-)

Fin de semana sin conexión, iniciamos lunes con todo atrasado

Estimados, luego de un mes con cortes intermitentes en mi conexión a Internet, última semana sin conexión de tarde y para premio este fin de semana sin conexión el sábado y domingo (a lo que se sumó también la señal de clave).

Luego de estar a los insultos con la empresa, Fibertel / Argentina, obviamente a la fecha aún sin conexión, y estoy viendo desde el trabajo que tengo 55 correos sin leer, la mayoría relacionados con el taller (consultas, usuarios nuevos para el grupo 4, etc).

Sepan entender la demora, en el correr del día estará todo en orden e iniciado el Grupo 4 (aunque me tenga que quedar a dormir en el trabajo o morir en un cybercafé hasta la madrugada).

Ahora me actualizaré con las nuevas altas y los pagos, obviamente se respetará el orden de entrada de cada uno.

Saludos, no desesperen (que para eso ya estoy yo).

Sobre el Grupo 4 del taller: "la última vez que lo digo"



Estimados, ya será de conocimiento público que este es el último grupo del año para el taller de Programación Orientada a Objetos para PHP5, y no tengo claro en que fecha del año que viene retomaré este dictado (tal vez después de marzo).


Como ha sucedido con los últimos grupos, la registración es más rápida (muestra el interés sobre el taller) pero los pagos generalmente son más lentos -pero seguros- que se confirman día a día: hoy fueron 4 y ayer 3, por lo tanto ya estamos en 11 personas que confirmaron su lugar de 29 registrados en el sistema interesados en el taller.

Son los últimos lugares, si te registras y pagas rápidamente, obtienes uno de los 9 lugares que restan y se cierra el taller de este año.

No digas luego que no te avisé ;-)

"Oferta de trabajo / Uruguay: Programador PHP / 1 año de experiencia"


Estimados lectores, me llega un email de Marcelo Lopez de una empresa uruguaya llamada UruIT, paso a comunicarles su solicitud por si les puede servir (los resaltados son mios):

"Represento a UruIT, una empresa joven de desarrollo de software.

Tenemos una posicion abierta para un desarrollador PHP con al menos 1 año de experiencia y buen ingles, para incorporarse en modalidad full time a nuestro equipo. Si tiene conocimientos de .NET mejor todavia.

Se me ocurre que quizas puedas conocer a alguien que este interesado, ya que me imagino que tienes contacto con gente con este perfil. La remuneracion es buena.

desde ya muchas gracias!
saludos,"

Luego me aclara algunos requerimientos deseables:
  • "Conocimientos de MySQL / DB tuning"
  • "Programación estructurada, preferentemente Programación Orientada a Objetos"

Pueden enviarle un mail a luismarlopez en gmail

<disclaimer>No conozco a la empresa ni a sus integrantes, no tengo relación alguna y menos responsabilidad por lo que suceda posteriormente con la empresa (lo cual no le quita ningún mérito mi desconocimiento ;-))</disclaimer>

Últimos lugares para el Grupo 3 y finalmente abrimos el Grupo 4

En las últimas horas hubieron varios movimientos ;-) Hasta hace un momento solo quedaba un lugar disponible para el "Grupo 3" y varios interesados para abrir un "Grupo 4".

Captura con la sección del sistema que muestra los resultados de la tarea 1 realizada por el primer grupo del taller.

Hace un rato uno de los participantes que ya había pago su lugar solicitó iniciar unos días más tarde, por lo que entonces se liberó un lugar para el Grupo 3 que inicia este lunes próximo (22/9), y ya estoy confirmando entonces el último Grupo 4 del año, que iniciará tentativamente el lunes 28/9.

Listado de las tareas que se van presentando por semana (estas apuntan a resolver problemas sobre diseño orientado a objetos)

Recordatorio: a pesar del registro con sus datos, el lugar solo se cierra con el pago, son 2 meses completos por 50 dólares y el límite por grupo es de 20 alumnos.

Foro del sistema para discutir cada uno de los materiales que se van presentando por semana y solucionar todas las dudas que se vayan presentando.

Si quieres aprender de una vez por todas Programación Orientada a Objetos (POO) en PHP5 y que te responda todas las dudas hasta que entiendas cómo sacarle provecho a este paradigma, esta es tu última oportunidad del año 2008 ;-)

Grupo 3, solo 2 lugares disponibles y se cierra

A esta hora de la madrugada pagaron 3 de los 5 lugares que quedaban, por lo tanto con 2 pagos más el grupo se cierra e inicia el lunes próximo.

Luego, todo registro será para el Grupo 4 a iniciar una semana después del Grupo 3.

¡Saludos!

Estado Grupo 3: restan pagar 5 lugares

A esta hora hay 27 registrados para el Grupo 3, de los cuales ya han cerrado sus pagos 15 personas, estarían faltando solo 5 pagos para cerrar el grupo e iniciar el lunes próximo (22/9).

Recordatorio: solo el pago confirma el lugar en el grupo, si te registras hoy y pagas rápidamente, adquieres uno de esos 5 lugares.

Aclaración:
  • Si por casualidad en estos días se superan los 5 pagos restantes y son relativamente pocos, entran en el mismo Grupo 3.
  • Los restantes registrados pasan automáticamente a un tentativo Grupo 4 a iniciar la semana siguiente al Grupo 3.
  • En ningún caso se pierde el dinero del pago, si no entra en un grupo entra en el siguiente, sea un grupo de 20 o menos.
Cualquier duda, a las órdenes. ;-)

¡Iniciado Grupo 2!


Lamento las demoras, pero hay actividades que debo hacerlas a mano y a veces Moodle "El Duro" no colabora, por lo que se me agregan horas extras para revisar la configuración, manuales, ingreso de datos, altas de usuarios, etc.

Sobre las 23:36 del lunes les envié a los 20 alumnos del Grupo 2 toda la información para ingresar al sistema donde se hará el dictado del taller. Se ya encuentran disponibles los primeros contenidos (que deben estudiar toda esta semana) bajo el nombre de "Introducción a los Objetos" partes 1,2,3 y 4. En el correr de la semana, luego de responder todas las dudas relacionadas con el material, se habilitará el primer capítulo sobre UML, y cerca del viernes tendrán disponible la primer tarea obligatoria de la semana.

Tomen su tiempo para navegar por Moodle y probar todos sus rincones, ante cualquier duda iré respondiendo sus correos. 

Bienvenidos ;-)

Iniciando Grupo 2 y novedades del Grupo 3


Estimados todos, este es el estado del taller y sus grupos:
  • Grupo 1: están iniciando su tercer semana y tienen asignada la Tarea 2 que vence este próximo martes 16/9 a las 23:59 hs. Esta semana seguiremos trabajando sobre el material "relaciones entre clases", agregaré nuevo material complementario y una nueva tarea (una vez que estemos firmes con este tema, seguiremos avanzando con nuevos temas).
  • Grupo 2: están iniciado este lunes 15/9, en el correr del día iré dando de alta a los usuarios al sistema y verán el primer material que deberán estudiar para esta semana. Una vez que se vayan acostumbrando a la herramienta Moodle, en el correr de esta semana luego de responder sus dudas, les presentaré la Tarea 1.
  • Grupo 3: he definido como fecha de inicio el próximo lunes 22/9. Esta fecha es tentativa, ya que de los 20 registrados faltan cerrar sus pagos 8 de ellos, por lo cual tienen plazo esta semana (ahora les estoy enviando ahora un email de recordatorio).
  • Grupo 4: actualmente ya hay 20 registrados para el grupo 3, si existe interés para armar un 4to grupo, sugiero registrarse en el sistema y posteriormente evaluaré la apertura del grupo.
Nuevamente, a pesar que el sistema les solicita sus datos personales y le hace una encuesta de conocimientos (así me permite ajustar los grupos), la registración es el primer paso para mostrar interés en el taller, pero posteriormente solo se confirma el lugar con el pago del taller. El solo registro no da derecho a entrar en un grupo, si tienen un lugar pero no lo aprovechan, próximo al cierre del grupo será asignado el lugar a quién sí hizo el pago (sin importar si se registró ayer).

Toda la información del estado de los grupos se encuentra en el sistema de registro: usuarios habilitados son los que están en verde y son todos los que pagaron, los que tienen una cruz se registraron pero aún no pagaron el taller. Si tú te registras hoy y pagas hoy, ya tienes tu lugar en el Grupo 3.

Cualquier comentario o pregunta, en los comentarios de este post.

Dentro de unas horas más novedades ;-)

Taller POO/PHP5: nuevo material Semana 2

En el correr de la tarde subí dos documentos, uno explicando lo esperado de la Tarea 1 enviada a todos los alumnos con una serie de explicaciones sobre los errores más comunes, más dos ejemplos de diseños posibles.

Posteriormente, subí el segundo material (16 páginas) para estudiar y discutir por el Grupo 1 de alumnos, que aborda por primera vez todo el tema de las relaciones entre clases, cómo se representan en UML, cómo se traduce a código, y qué efecto genera en un sistema.


Esta es la primera parte de un tema que considero medular de la POO y que donde la mayoría de los desarrolladores que dice saber de Objetos empieza a fallar. Durante esta semana solo discutiremos estos conceptos a través de foro y este jueves o viernes publicaré la Tarea 2, con el objetivo de aplicar los nuevos conceptos y que deberá ser entregada el lunes a más tardar.

Cabe recordar que el Grupo 2 está iniciando el lunes próximo, y que el Grupo 3 aún tiene integrantes que no confirmaron su pago, y a esta hora quedan solo 3 lugares disponibles para reservar.

Cabe recordar que a pesar que la reserva es tenida en cuenta, la habilitación del lugar se hace contra confirmación de pago. No se demoren si quieren que inicie este último grupo lo más pronto posible.

Saludos, les dejo una captura de uno de los informes de la herramienta Moodle que se está usando para gestionar el taller. ;-)

Cómo se corrigen las tareas recibidas a través de Moodle

A veces Moodle es muy duro, rígido y hasta "poco estético", pero con el tiempo y alguna lectura de manuales, uno va viendo que no es tan malo ;-)

Por ejemplo, en este caso tengo que un alumno entregó fuera de fecha la tarea del taller (Oscar, no te preocupes, es solo un ejemplo, 27 minutos tarde tampoco es el fin del mundo ;-)), y el sistema se encarga de decirme lo que está pasando.

Ya aprovecho y les cuento, antes se ve la lista de las tareas entregadas por los alumnos, me permite bajar el archivo con la tarea y a su vez este formulario para hacer una explicación personalizada y puntuar el trabajo entregado.

La verdad que este tipo de funcionalidades te van ordenando y facilitan mucho el trabajo de gestión.

PD: cabe aclarar que muchos participantes están en husos horarios distintos, por lo tanto estamos tomando una hora que no necesariamente es realista para todos.

Taller POO/PHP5: cerrado el Grupo 2 y abierto el Grupo 3!

Hace unas horas se terminó de cerrar el cupo de 20 personas para el Grupo 2 que iniciará el próximo 15 de Septiembre.

Dado que en las últimas horas continuaron las altas (viendo que quedaban pocos lugares en el Grupo 2), se continúa con el registro para un próximo Grupo 3. Este último grupo iniciará luego del comienzo del Grupo 2, ni bien esté completo el cupo de 20 personas.

Aprovechen este último grupo ya que no puedo asegurar que exista un Grupo 4 para este año, ni tengo definido una posible fecha de inicio para el año que viene.

En las próximas horas me voy a volver a comunicar con los registrados que dejaron sus datos pero que no han confirmado el pago del taller así notificarles del estado actual.

Nuevamente quiero agradecer el voto de confianza de todos los inscriptos ;-)

Taller POO/PHP5: ya se publicó la primer tarea de la semana


Esta semana presentamos como material de lectura 3 nuevos artículos sobre Introducción a los Objetos y 2 nuevos sobre Introducción a UML, y usamos uno existente, la entrada sobre POO de Wikipedia.



Ayer envié a los alumnos la primer tarea semanal (de las 8 que deberán hacer, una por semana, durante 2 meses): 

"A partir de los ejemplos que se plantearon en los artículos, hacer el primer diagrama UML y luego traducirlo a código PHP5, del ejemplo "Micaela y el Perro" (sí, suena a libro infantil, soy papá de dos nenas, que le vamos a hacer ;-))"

Por ahora hemos tratado de "limpiar un poco la cabeza" de pre-conceptos y discutir los contenidos en el foro de formacion.surforce.com y estamos viendo cómo detectar los objetos de nuestra realidad y cómo se representan en UML, para luego traducirlos a código funcional.



El objetivo de la primer parte del taller es el diseño y su comprensión, más que la generación mecánica de código (algo que es muy común que hagan hoy día los programadores PHP que dicen o creen aplicar POO).

El límite de la entrega se hará a última hora del lunes, ya que el lunes iniciaremos la segunda semana, empezando a ver cómo son las relaciones entre los objetos y cómo se diseñan a través de UML.

Seguiremos informando ;-)

Taller POO/PHP5: a poco más de tres días...

... y creo que de a poco -a todos- se nos va pasando el miedo ;-), de cómo iba a transcurrir el taller, el contenido del mismo, la metodología, etc. De la misma forma estaba preocupado si con 20 personas a distancia nos podíamos desorganizar rápidamente, y hasta correr el riesgo de desbordarnos, cosa que no ha ocurrido en absoluto hasta el momento.

Moodle, a pesar de ser un sistema complejo, de a poco todos nos vamos adaptando. Tiene fortalezas y debilidades, por lo que trato de no quedarme en la duda y leer todos los capítulos de los manuales que voy necesitando por el camino. Y solo usé el 20% de sus herramientas, ahora en más queda enviar una tarea a todos los alumnos y posteriormente tomarles un examen para ver si captaron los conceptos vertidos en los 5 capítulos exclusivos que vengo escribiendo para este taller (Introducción a los Objetos e Introducción a UML), y que a mediano plazo servirán de base para terminar de escribir el libro de POO para PHP que siempre quise leer ;-)

Esta semana fue medio cargada para mi, primero para ordenar toda la mecánica del taller, instalar herramientas, configuraciones, pruebas, respaldos, carga de usuarios, cobros, materiales, gripe, etcétera (pero nada que no se arregle trabajando hasta las 4 am).

El material base para la mayor parte del taller deberá quedar escrito entre esta semana y la semana que viene, posteriormente trabajaré más en girar en círculos sobre el mismo material, agregar nuevos complementos, pero fundamentalmente trabajar sobre ejercicios que afiancen conceptos a través de problemas de diseño, usando siempre UML, ya que no concibo que se pueda transmitir conceptos de diseño mirando solo la sintaxis de un lenguaje (luego se ven las acrobacias que se ven realizar con el lenguaje sin respetar ningún concepto de POO). 

Sobre los ejercicios que se vienen, mis ex-alumnos ya conocen mis famosos mecanismos para romper "modelos mentales" (espero poder transmitirlos de la misma forma aún sin hacer un dictado presencial).

Progresivamente iremos subiendo la complejidad, planteando un material de estudio, discusión grupal en el foro, un ejercicio para aplicar lo aprendido y posteriormente un examen "múltiple opción" para volver a repasar y afianzar los conceptos (además de tener una forma de autoevaluarse).

Bueno, espero algún comentario de los 20 alumnos que van participando ;-)

Taller POO/PHP5: habilitado el dominio formacion.surforce.com

Para los que estén usando twitter y estén siguiendo el usuario "phpsenior" tendrán la pequeña ventaja de ir enterándose de las micro-novedades con respecto a todo lo que va sucediendo.


Como comenté hace unas horas, el dominio formacion.surforce.com ya está disponible con el LMS para educación a distancia más popular (y como es el más completo, también es el más complejo) del momento: Moodle, en su versión 1.9.2+.

En este momento estoy ingresando los primeros alumnos habilitados para el primer grupo (en unos minutos estoy actualizando el status del sistema de registro) y posteriormente desde el mismo sistema haremos todas las interacciones necesarias para el dictado del taller.

Además de Moodle, existe otro famoso en el ambiente llamado Dokeos. Según la opinión de algunos docentes y especialistas en educación a distancia (algunos colegas de hace años), el primero está pensado para un dictado donde lo importante es la interacción de sus participantes y el segundo, un dictado más pensado para el auto-estudio (por decirlo de alguna forma, más pensado para trabajar "en solitario").

La idea del taller es fundamentalmente la interacción, como así lo he hecho por años en cursos presenciales. A pesar de contar con un temario y material previamente armado, el dictado va variando según las interacciones de sus participantes, a través de sus debilidades o sus fortalezas, y donde todos (me incluyo) vamos aprendiendo.

Uno de los miedos que le tenía a Moodle era su tamaño, por lo cual podía llevarme a tener que hacer dos cursos, uno del tema que nos reune (POO en PHP5) y otro para dominar la herramienta. En este caso tomaré los recaudos pertinentes y simplificaré todo lo que pueda la interfaz y el material del curso, e iré habilitando progresivamente los materiales ya armados, y paulatinamente a través de nuestra interacción, iré generando nueva documentación según nuestras necesidades.

Por consiguiente, es muy importante que todos participemos, no solo de forma individual con la lectura a consciencia del material que se va habilitando, sino también a través de los diversos ejercicios, pero mucho más importante la interacción a través de los foros y encuestas para ir haciendo todas las consultas sobre cada etapa semanal, y así, con las dudas de todos iremos ajustando el taller a la medida del grupo.

Así que, oficialmente, empezamos. ;-)

Taller POO/PHP5: se publica el estado actual de los grupos

Bueno, luego de terminar con algunas gestiones administrativas, les estoy compartiendo un enlace al sistema de registración donde se muestra el estado actual del taller, más alguna información estadística para quienes quieren conocer cómo va funcionando por dentro.

Estadísticamente tenemos al día de hoy que:
  • Existen 88 registrados, de los cuales para el primer grupo pagaron 18, donde 11 usaron Paypal y 6 Western Union (1 vendrá por accidente a través de Dinero Express), según el orden de ingreso 15 están habilitados para iniciar el taller en el primer grupo (faltan cerran 5 lugares), y 3 para el segundo grupo.
  • Existen 2 lugares asignados al grupo 1 que son provisorios, ya que aún no se confirmaron sus pagos (pero es una cuestión de horas).
  • Si en las próximas horas no se confirman los siguientes 5 lugares, entrarán en el grupo los usuarios que quedaron registrados en los últimos lugares (actualmente asignados al "Grupo 2") pero que pagaron anticipadamente (aún sabiendo que podían quedar en un tercer grupo).
Estas son las últimas horas para iniciar el taller, hoy lunes 1 de Septiembre, y ya voy sugiriendo que vayan reservando un lugar anticipadamente en el segundo grupo.

Nota: si hay alguien que ve que sus datos de pago no están actualizados, me avisa y lo verifico.

En las próximas horas estamos iniciando y comunicaré en detalle la forma de trabajo que usaremos estas semanas, la url para ingresar al sistema de educación a distancia, el acceso a los primeros materiales, cómo se responderán las consultas, el envío de las tareas, etc.

Saludos, tengan paciencia! ;-)

Taller POO/PHP5: importes, dólares y pesos, particularmente México

Estimados, tengan cuidado los que envían por Western Union, particularmente si lo hacen desde México (aunque pueden estar en la misma situación Venezuela y algún país más).

Se ve que la inexperiencia de algunos empleados de Western Union puede jugarles malas pasadas y hacerles perder dinero innecesariamente.

Hay países que no permiten enviar al extranjero dólares, por lo consiguiente y para esos casos, soliciten que envíen 150 pesos argentinos (luego ustedes tienen que pagar aparte el costo de transferencia, como siempre).
  • 50 dólares = 150 pesos argentinos
No existen los "dólares argentinos" o son dólares o son pesos argentinos ;-), de lo contrario van a tener que enviar dos veces y les va a salir muy caro el costo de transferencia.

Creo que a futuro, luego que haga un resumen de toda la experiencia (de aquí a un par de meses), va a convenir para todos (por los costos, velocidad y seguridad) usar un sistema como Paypal.

Dentro de poco más novedades.

Taller POO/PHP5: Cambio de estrategia para el cobro del taller

Al momento, el estado del taller es el siguiente (y de paso comparto la experiencia, ya que he recibido varios emails de colegas preguntando como iba el ritmo de los cobros):
  • Se notificó a los primeros 20 registrados en el sistema y se dio un plazo de 72 horas
  • De los 20, solo 1 suspendió su reserva (por lo que se notificó al siguiente en la lista)
  • De los 20, habiendo pasado 48 horas (lo envié a las 23 hs del 25/8), hasta el momento pagó el 60% de los notificados.
  • De los que pagaron, el 20% prefirió Western Union y el restante 80% prefirió Paypal.

Recién envié un email de recordatorio al 20% restante y ya me están respondiendo rápidamente, así que creo que aumentará la cifra de confirmados con las horas.

Cambio de estrategia con el tema de los pagos

Estuve estos días consumiendo varias horas para controlar los pagos, verificar si los datos estaban correctos, volver a recordarles que se vencía el plazo, etc, por lo cual prefiero acelerar el proceso de cierre de los grupos, ya que no quiero atrasar el inicio por este tema.

Lo que voy a hacer es lo siguiente y cada uno use su criterio (no hay obligación de aceptarlo):
  • De ahora en más, voy a notificar a todos los registrados los datos para hacer el pago del taller
  • Contra pago confirmado, el usuario pasa a estado "habilitado" para hacer el taller.
  • Se seguirá -obviamente- respetando el orden de ingreso a través del sistema de registro, pero esta vez haré un aviso notificando la fecha límite y el taller inicia con todos los siguientes 20 usuarios de la lista ordenados por fecha_ingreso y que tengan fecha_de_pago <> "0"
  • Quién no llegue a esa fecha tendrá que esperar a la apertura del siguiente grupo y esa fecha dependerá de la carga de los talleres, cupo mínimo, estado de mi salud, si mis hijas me reconocen, nivel de cafeína, tamaño de las ojeras, etc.
Así que la recomendación es: si pagan temprano, todos vamos más rápido, se hace más sencillo, no atrasamos a los que están listos, y cerramos los grupos de forma ordenada. Creo que de esta forma le daremos un poco más de agilidad al proceso.

Puede estar de más decirlo, pero...

Mi compromiso: si para el "último taller" la cantidad de registrados queda congelada en un número menor al cupo, de todas formas abriré ese taller (sea una sola persona).

¿Preguntas? ¿Empezamos el 1ro? ;-)

Notificación Taller POO/PHP5: revisar carpeta de SPAM

Me avisan varios usuarios que al no llegarle los emails con la información sobre la forma de pago, revisaron su carpeta de SPAM y encontraron ahí mi email.

Por favor revisen sus carpetas de SPAM, ya me contacté con los primeros 20 inscriptos y el último id de usuario es el 25 (si estás entre el 1 y el 25, tiene que haberte llegado un email de mi parte)

Saludos! ;-)

Anuncio Importante sobre el Taller POO/PHP5: temario, herramientas, costos e inicio del cobro

Estimados, desde ya gracias a todos los que se han registrado, superamos al momento de hoy 64 lugares reservados.

Paso a resumir las respuestas a las preguntas que han hecho en los comentarios del post anterior:

  • Se agregó la opción de pago (y luego de mucho averiguar, la opción que voy a preferir) a través del sistema Western Union y en segunda instancia el sistema Paypal. El primero, sin necesidad de tarjeta de crédito, pueden enviar un giro de dinero con un costo relativamente accesible (según el país, menos del 7%). Para los que quieran usar el sistema Paypal y su tarjeta de crédito, podrán usar esta segunda alternativa.
Sobre el Temario
  • El taller está divido en etapas semanales durante 2 meses, 8 ejercicios en total, uno por semana, de complejidad creciente, donde buscaremos abarcar todos los conceptos base de la programación Programación Orientada a Objetos en general y para PHP5 en particular.
  • A pesar que el temario central es el mismo que en el primer taller piloto, los ejercicios y la metodología para darlo es completamente distinta.
  • Aprenderemos UML, sin lugar a dudas, ya que no concibo hablar de diseños sin usar diagramas y con ellos revisaremos todos los conceptos base del paradigma.
  • Analizaremos en profundidad cada capítulo del manual oficial de PHP ("Clases y Objetos - PHP5") , buscando terminar por entender que "programar sin usar interfaces, no es programación orientada a objetos" (de ahí viene mi comentario de por qué no recomiendo un libro que trate el tema de las interfaces en menos de un par de hojas).
  • La primer mitad del taller (aproximadamente 1 mes) será exclusivamente con ejercicios conceptuales (que vengo usando hace un par de años en mis cursos presenciales), apoyados en UML, para lograr afirmar todos los conceptos necesarios para poder entender cómo funciona la POO y cómo se deben hacer los diseños OO.
  • La segunda mitad (aproximadamente 1 mes) empezaremos a apuntar hacia el objetivo de resolver los problemas típicos que se pregunta constantemente en los foros de PHP, para terminar con un sistema desarrollado 100% orientado a objetos y en una arquitectura de "3 capas".
  • Cada semana tendrá una lista de materiales de estudio, instancias de consultas y un ejercicio práctico que posteriormente corregiré de forma individual, y finalmente un cuestionario de tipo "examen" para que ustedes (y yo) puedan evaluar cuanto entendieron de la lección semanal (y hasta poder sugerir medidas correctivas).
Herramientas
  • Usaremos como herramientas las mismas usadas en el taller anterior, el entorno integrado de desarrollo Eclipse, Xampp si estás en Windows, podrás usar GNU/Linux, etc.
  • La novedad en este caso será el uso de un LMS, que podrá ser Moodle o Dokeos (estoy evaluando las últimas versiones para confirmar cuanto han mejorado). Principalmente busco que sea fácil para ustedes (en lo personal no he tenido problemas con ninguna de las dos), quiero evitar que requiera un curso adicional entender la herramienta del taller.

Costo y forma de pago

  • Bueno, la parte más dura, el taller de dos meses de duración tiene un costo de 50 dólares... sí, los dos meses enteros, así nadie se queja ;-)
  • Hoy empezaré a recorrer la lista de los registrados por orden y a comunicarles los datos para hacer el pago del taller. Los grupos se harán de 20 personas, y luego de notificada la forma de pago tendrán un plazo de 72 horas para hacer el giro del dinero.
  • Si luego de las 72 horas no se cancela la reserva, deshabilitaré del sistema a ese usuario y seguiré con el siguiente en la lista de espera hasta lograr cerrar el cupo de 20 personas.
  • En caso de existir algún tipo de problema, podrán enviar un email a la cuenta especialmente creada para estos menesteres.
¿Qué sucede con los demás registrados?
  • En primera instancia me concentraré en organizar el primer grupo, por lo que quiero estar dedicado a esa actividad por espacio de dos semanas aproximadamente. Mi idea es que si todo sale como lo espero y apoyado en un sistema de LMS (que me permite automatizar tareas repetivas y un mejor seguimiento del taller), notificaré a través del blog la apertura de un segundo grupo (con un desfasaje aproximado de 15 días con el primero) e iniciaré el proceso de cobro de las reservas hechas en el sistema. En caso de suceder una situación similar, intentaré abrir un tercer grupo, repitiendo el mismo procedimiento.
  • Todo queda sujeto a evaluación de cómo se viene dando el ritmo del taller, y manejaré varias alternativas; en el peor de los casos iniciaremos otro grupo a los 30 días, o cuando termine el primer grupo (a los 60 días), y si veo que puedo desbordarme, tengo colegas que me darán asistencia en determinadas partes del taller (lo más crítico lo seguiré haciendo en persona).
  • Hasta el momento no debería haber problemas para que sigan reservando un lugar para próximos cupos. De haber interesados, se seguirá haciendo nuevas inicios de talleres.
Fecha de inicio
  • Fijamos dos fechas, la primera, si todo sale bien y en tiempo y forma (se puede cerrar el primer grupo, cobros, etc) se iniciará el lunes 1ro de Septiembre, en caso de existir demoras de algún tipo, se iniciará la otra semana, el lunes 8 de Septiembre (sin atraso que valga).
Nota importante: como toda planificación, pueden haber situaciones que me llevarán a hacer cambios y/o ajustes en lo expuesto. Considero que un buen dictado es aquel en donde el docente se adapta a la debilidad de su alumno, y no al revés, pero obviamente, esto tiene un gran costo en dedicación de mi parte, lo cual deberé gestionar.

Si me olvidé de algún detalle, me lo hacen saber en los comentarios que luego actualizo este post.

Saludos, gracias a todos por su voto de confianza, y ya empiezo a contactarlos uno por uno para cerrar el primer grupo. ;-)

¡HABILITADO el sistema de registro para reservar un lugar en el próximo taller a distancia de POO! (Actualizado)

Se hizo desear, pero ya está habilitado el sistema de registro para reservar un lugar en el próximo taller de POO (que iniciaremos los primeros días del mes que viene).

El taller tendrá una duración de dos meses, recorriendo todos los temas base que considero importantes entender y dominar la Programación Orientada a Objetos en PHP. El taller será de fácil seguimiento, plantearé un ejercicio central por semana (8 ejercicios seleccionados de complejidad creciente), con entrega de material de lectura (pueden ser enlaces a contenido existentes o explicaciones que crearé a medida) y que iremos discutiendo de forma grupal hasta llegar a la entrega y revisión final de los trabajos de forma personalizada ("uno a uno").

Características
  • El cupo será limitado (entre 10 y 20 personas, no más), el costo será muy accesible (menos de 100 dólares) y el cobro se instrumentará a través de Western Union o Paypal.
  • Se dará prioridad por orden de registración (para este y para futuras ediciones del mismo). En caso de superar la demanda, se evaluará posteriormente abrir otros talleres con la misma temática o nuevos sobre otros temas.
  • Solo se requiere tener conocimientos básicos de programación y de PHP, no se requiere ser experto ni en programación ni en PHP ni en POO, este taller está pensado para aprender de cero y con buena base teórica y conceptual lo relacionado con POO y PHP.
Bien, todas las dudas, en los comentarios de este post ;-)

PD: disculpen las demoras, en parte está interesante largarlo el mismo día que anuncian la venta del iPhone en latinoamérica ;-), pero también existieron problemas en el servidor que me demoraron las pruebas (¡gracias a todos los que participaron en el test!).

En los próximos días me comunicaré por orden de ingreso con cada uno de los registrados.

¡Saludos!

Entradas populares