Archive for the ‘java’ Category

6 Reglas para programar correctamente en java

Thursday, November 13th, 2014

Bueno, últimamente me tocó trabajar con código tan, pero tan mal, que decidí hacer un post sobre como codificar bien (es válido para otros lenguajes OO) con la esperanza que me pase menos. Hace poco me encontré en una esquina con mi amigo de la facultad Ariel Palma, sólo para sacar el cuero a la gente que en lugar de hacer una clase bien utiliza parche sobre parche. A toda esta gente les digo “Lo barato, cuesta caro”. El tiempo que te tomará escribir bien el código es ínfimo comparado al que te tomará hacer un debug un par de meses después. No me da el tiempo de hablar de conceptos como acoplamiento y cohesión, para quien sabe lo que es no hace falta que lea esto. Es simplemente para que programadores con poco nivel entiendan como programar decentemente.

(more…)

Balance de carga entre servicios

Thursday, February 21st, 2013

Hola gente, yo de nuevo por aquí. Hace muy poco tiempo me ha tocado trabaar para una empresa que tenía serios atrasos en un gateway GPS desarrollado en java. Al principio pensamos que era postgres, después el disco, la red, etc. Pero bueno al final el problema era el mismo GW que después de un número N de conexiones se paraba. Solución!, le saqué el polvo a un script que había hecho para balancear conexiones (algún día lo dejaré por aquí también) y lo modifiqué de la siguiente manera para que haga un round robin de conexiones. O sea, se crea una conexión nueva (-m state –state NEW) y se la manda a uno u otro (-m statistic –mode nth) haciendo coincidir el número de paquete (–packet 1), sobre la cantidad total de servicios (–every 3) cada vez que el límite se alcanza, el contador vuelve a cero. Pues bueno, acá les dejo el ejemplo para 3 servicios:

iptables -t nat -I PREROUTING -p tcp --dport 5507 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 192.168.1.4:5507
iptables -t nat -I PREROUTING -p tcp --dport 5507 -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 192.168.1.5:5507
iptables -t nat -I PREROUTING -p tcp --dport 5507 -m state --state NEW -m statistic --mode nth --every 3 --packet 2 -j DNAT --to-destination 192.168.1.4:5512

Para los que usen shorewall, tienen que cambiar PREROUTING por net_dnat, les quedaría así:

iptables -t nat -I net_dnat -p tcp --dport 5507 -m state --state NEW -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 192.168.1.4:5507
iptables -t nat -I net_dnat -p tcp --dport 5507 -m state --state NEW -m statistic --mode nth --every 3 --packet 1 -j DNAT --to-destination 192.168.1.5:5507
iptables -t nat -I net_dnat -p tcp --dport 5507 -m state --state NEW -m statistic --mode nth --every 3 --packet 2 -j DNAT --to-destination 192.168.1.4:5512
Y bueno, eso es todo amigos. Espero que los saque del paso.
Saludos.

Aplicación SWT parece colgada

Friday, October 21st, 2011

Gente, no se si se acuerdan que esto pasaba también con las aplicaciones programadas en Visual Basic 6, para el cual teníamos el mágigo DoEvents, que lo que hacía no era más que decirle al sistema operativo que se acuerde que hay que refrescar el display. Bueno después de buscar miles, leer sobre threads y demás encontré una solución tan sencilla como el DoEvents.

Simplemente agreguen al bucle (for while, lo que sea):

display.readAndDispatch();

Donde display es el display que creo la shell compisite o lo que fuese. Esto se complica cuando no es un bucle el que está consumiendo mucho si no una sola instrucción, para eso les recomiendo que lean esto:

http://book.javanb.com/swt-the-standard-widget-toolkit/ch05lev1sec7.html

Saludos y espero que les sirva.

MN

Empaquetar una aplicación GWT para tomcat

Wednesday, June 30th, 2010

Bueno gente, les enseñaré a hacer de una manera muy muy sencilla usando eclipse un .war que podamos desplegar en tomcat. Básicamente lo que haremos es:

1) crear un jar de nuestro código fuente.
2) meter todas las libs dentro del directorio lib.
3) Crear un ant un .war y buala

(more…)