TO DO

8 11 2009

- Mejorar DAOs.

- Mejorar los filtros en los DAOs y agregar  OR.

- Unificar la estructura de login y seguridad.

- Agregar más excepciones.

- Limpiar métodos y atributos.

- Mejorar sistema de i18n. Hacerlo más cómodo.





Mi país

3 11 2009

Como algunos sabran y otros no, he sido beneficiado con una beca (Becas Control F) del gobierno para un curso de Java.

Hace unos días recibí un llamado (y luego un mail) informándome de que, por ser “desocupado”, iba a recibir una especie de indemnización o bonificación de dinero por gastos de viáticos (viaje + refrigerios), por el total de $50.

El curso dura 240 horas, en 2 veces por semana… siendo un total aproximado de 6 meses.

$50 (cincuenta pesos) para 6 meses, con el dolar en relación $3.69 -> U$D 1.

Gracias a Dios no me hace falta y no pienso hacer cola por una suma tan ridícula… espero que tampoco le haga falta a ninguno de mis compañeros de curso. ¿Que más puedo decir?

Argentina.





Calendario a partir de una semana del año

20 10 2009

Con este post innauguro la sección grandes códigos de pequeños autores.

Problema: Dada una semana del año, generar un mini calendario semanal que muestre las fechas a partir del lunes, independiente de si la semana corresponde a dos meses diferentes. Ejemplo: dada semana 1 del año, mostrar qué fecha fue el lunes (29/12/08), martes (30/12/08), miércoles(31/12/08), jueves(1/1/08), viernes(2/1/08), sábado(3/1/08) y domingo(guess what?).

Solución:

$timestamp = mktime(0,0,0,date(‘n’),date(‘j’),date(‘y’));
$day = date(‘w’,$timestamp);
/*
0 domingo
1 lunes
2 martes
3 miercoles
4 jueves
5 viernes
6 sabado
*/
$timestamp -= ($day > 0) ? ($day – 1) * 86400 : 6 * 86400;

$timestamp = mktime(0,0,0,date(‘n’),date(‘j’),date(‘y’)); //timestamp del día de la fecha a las 12:00 am

$day = date(‘w’,$timestamp); //dia de la semana en formato numérico según se explica abajo:

/*

0 domingo

1 lunes

2 martes

3 miercoles

4 jueves

5 viernes

6 sabado

*/

$timestamp -= ($day > 0) ? ($day – 1) * 86400 : 6 * 86400; // buscar el lunes de la semana calculando la distancia entre el día de la fecha y el lunes, restandole (dias de diferencia) * (segundos en un dia), posicionandonos de esta manera en el lunes, en formato timestamp.

Y así ya podemos imprimir las fechas correspondientes, de lunes a domingo, incrementando el timestamp de a 86400 (1 dia).

for ($i = 0; $i < 7; $i++)
echo date(‘d’,($i * 86400) + $timestamp) ;
Seguro hay 1000 soluciones más elegantes, pero lo bueno de esta es que tiene poco o nulo hardcode y es fácil de entender.




Lockerz!

10 10 2009

¿Qué es?

Dejen sus mails como comentario los que quieran invitaciones para Lockerz.





Php + frameworks + buenas costumbres

3 09 2009

Autocalificandome como desarrollador web, basado en los casi 6 años (+ 1 o 2 mega amateurs previos) que llevo trabajando en la internet que apesta, ya habiendo superado la etapa de php + html embebido en un mismo archivo, me he visto varias veces en el dilema de qué framework utilizar: que Zend, que Symfony, que Codeigniter porque aparece en todos los avisos del diario, que Cake, que nada. De todos los intentos que he hecho por aprender un framework nuevo, ninguno prosperó y todos terminaron en lo mismo (aburriendome) y a la hora de trabajar, al tratarse casi siempre de sitios medianos o pequeños, opto por armar mi propia estructura MVC + autenticación + abstracción de la base de datos.

Ahora, si tuviese que recomendar un framework o una forma de desarrollo en PHP para alguien que pidiera mi opinión, la respuesta sería depende, como bien me enseñaron en la Universidad. Depende de qué clase de desarrollador es uno y de cuál es el perfil profesional. Si uno lo que quiere es entrar a determinada empresa o focalizarse en cierto mercado o simplemente es un diseñador o desarrollador web que necesita sacar muchas páginas rápido y sin preocuparse demasiado en cómo, lo ideal es un framework. Directamente casarse con uno, aprenderselo de memoria y seguir los changelogs (y aguantarse el dolor de cabeza de tener que migrar una aplicación vieja a una versión nueva del framework). Ciertamente usar un framework provee de miles de herramientas para resolver de manera simple los problemas más cotidianos, con todo el valor agregado de los cientos de profesionales que tienen por detrás.

Pero por otro lado, si uno apunta a ser un profesional informático, experto en aplicaciones web, utilizar frameworks (a mi parecer) es enterrar la cabeza debajo de la tierra.  El principal problema con los frameworks es que son MUCHOS (al menos para php parecen haber infinitos) y bastante variados y raros a la hora de trabajar. Casarse con un framework implica perder la capacidad de ser objetivo cuando un trabajo lo obliga a utilizar una metodología diferente y lo acostumbra a uno a que las cosas ya vienen resueltas, ignorando toda la arquitectura, conceptos y procesos que se desarrollan detrás de las aplicaciones. Para este perfil, mi recomendación sería conocer las tendencias presentes, los pros y los contras de los diferentes frameworks y trabajar con un modelo propio, implementando las mejores cosas. Al menos siempre que se tenga la posiblidad.

En mi caso, he seguido la siguiente secuencia:

Php + html embebidos -> MVC + Db abstraído (Mini framework)  = muchisima reutilización -> Mini framework extendido = más reutilización + automatización de tareas comunes.

Actualmente estoy reprogramando mi mini framework de desarrollo de aplicaciones en base a las mejores implementaciones de patrones y buenas costumbres utilizando 100% de orientación a objetos, VOs + DAOs, urls limpias,  clases de core para tareas comunes, excepciones, controladores como clases, etc.

Realmente es trabajoso, pero la versión anterior del mini framework me ha demostrado que vale la pena: tiene lo justo y necesario, lo hice yo así que tengo 100% de control y está basado 200% en mi modo de trabajar. Es increíble la cantidad de código que he reutilizado.

Para el que le interese, me he topado con una muy buena reseña sobre buenas prácticas de implementaciones en PHP en la sigiuente URL: http://www.odi.ch/prog/design/php/guide.php

Nota: me faltó agregar, que mientras trabajé para una Software Factory me pusieron a cargo de un proyecto hecho en Zend Framework (del que no tenía ni la más mínima idea) y, teniendo en mente los conceptos básicos de MVC, me tomó solamente un par de días tener el proyecto andando.





Cerrado por vacaciones

24 07 2009

No realmente cerrado. Nunca cierro, pero por el momento no me he encontrado con nada interesante. He estado resolviendo muuuuuuuuuuuuy distribuidamente en el tiempo problemas de programación, como siempre, pero nada formal: el espíritu de las vacaciones me despierta buscar excusas para no estar todo el tiempo conectado.

Update de relleno para dar una ligera impresión de movimiento :P





Pi

6 07 2009

15:52 press return.

Me voy al RealWorld y dejo corriendo un dummy code en PHP que prueba una serie de sumas de cocientes aleatorios que se aproximen a PI, con una tolerancia de 10^-10.

En lo sucesivo voy a intentar mejorar este código. Vamos a ver con qué me sorprenden a la vuelta.

If the number’s there I’ll find it!





Deuda Fibonacci

18 06 2009

En base a los problemas que se generaban entre mi grupo de amigos al momento de pedir plata/contraer una deuda entre nosotros, decidí estandarizar el sistema mediante el método de la Deuda Fibonacci.

El concepto es sencillo: cada determinado tiempo (a definir), la deuda crece según los términos de la Serie de Fibonacci.

Código (C);

int deuda = 4; //4 pesos, por ejemplo
int fibo1 = 1, fibo2 = 1, tmp = 0;
bool pago = false; //#include <stdbool.h>

while (pago ==  false)
{

deuda = deuda * fibo2;
tmp = fibo2;
fibo2 = fibo1 + fibo2;
fibo1 = tmp;
//chequear si pagó :P

}

Y finalmente deuda contiene el valor correspondiente a la deuda actualizada.

(?)





Press any key

9 06 2009

Hacer código mal tabulado es perjudicial para la salud.

Ley 31.337





Usuarios de routers

7 06 2009

Estimados visitantes del blog:

Aquellos de ustedes quiénes posean un router (para compartir internet, conectar ADSL, wireless, etc), tengan la precaución de asegurarse de que la configuración via web no pueda ser accedida desde internet (http://tuip, ej: http://123.123.123.123) o que, al menos, esté protegida con usuario y contraseña.

No hay nada que impida que alguien que recoja su ip (por ejemplo por logs), entre y los deje unos cuántos días sin internet.

:)