viernes, septiembre 02, 2011

DatePicker con Jquery

Si ocupa un datepicker, aqui como integrarlo sencillamente;



<!DOCTYPE html>
<html>
<head>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

<script>


$(document).ready(function() {
$("#datepicker").datepicker({

defaultDate: document.forms['myForm'].elements['dateSelected'].value,
onSelect: function(dateText, inst) {

alert (dateText);
document.forms['myForm'].elements['dateSelected'].value = dateText;
}
});
});
</script>
</head>
<body style="font-size:62.5%;">

<form name="myForm" action="algo.do" method="post">

<input type="hidden" name="dateSelected" value="10/04/1984"/>
<div id="datepicker"></div>

</form>
</body>
</html>





Como funciona, sencillo. Solo tenes que colocar una fecha en el input dateSelected, por ejemplo con jstl seria algo como

 input type="hidden" name="dateSelected" value="${dateSelected} 


Ese seria un binding basico para colocar la fecha (en texto, formateada como MM/dd/yyyy), el javascript funcionara perfectamente con eso no necesita cambios.

En el servidor, puede recibir el valor con el post del formulario como dateSelected.

Ocupa mas custom en el plato, aqui esta la carta, sirvase:
http://docs.jquery.com/UI/Datepicker

Pura vida,
J

martes, mayo 31, 2011

Annotation Hell y otros demonios

Acostumbrado a utilizar Spring con una configuración basada en XML, la cual ya en su versión 2.x presentaba algunos coqueteos con el uso de anotaciones para el manejo de su Ioc Engine; he estado utilizando la versión 3 y me ha surgido la necesidad de crear un nuevo post para dar mi humilde opinión al respecto.

Anteriormente se hablaba del famoso XML Hell (similar al DLL Hell y otros tantos infiernos que han visto la luz en el mundo de la ingeniería), yo la verdad nunca sentí que fuera tan complicado, aunque reconozco que el desorden puede llevar a un caótico laberinto verbal, de configuración XML. Spring ha intentado "resolver" o cambiar el paradigma, mas no el "approach" de este aberno XMLero, por un nuevo "paraíso" en rojo y lleno de llamas, al cual le otorgare el original nombre de Annotation Hell, este nuevo séptimo cielo permite ahorrarnos unas líneas de XML, anotando nuestro bean con annotaciones tales como Component, Autowired, Qualifier, etc (puede encontrar una pequeña referencia aquí)

Para mi, se sigue teniendo un enfoque muy similar, donde la meta información para el Ioc se incluye en un lugar diferente al XML, muchos diran que el XML es verbose y demás, pero debemos darnos cuenta de las ventajas que se pierden el bendito, Annotation Hell.

1) perdida de la centralización, anteriormente uno tenia uno o varios XML (ordenados lógicamente por capas de aplicación o contexto), ahora la meta información esta dispersa, buscar por el ejemplo el bean asociado a tal mapping, implica una búsqueda dentro de nuestros sources o classpath's, implicando inclusive la des-compilación simplemente para conocer, esta meta info.

2) totalmente intrusivo, uno de los principios de Spring era evitar la intrusividad de tal manera los POJOS no se dieran cuenta de que Spring existe, reforzado el concepto en gran manera por cosas como los proxies y AOP, claro existen excepciones tales como los templates de los cuales se debe extender, pero estos pueden ser encapsulados por objetos bases de la aplicación logrando encapsular el acople entre estas clases y los daos por mencionar un ejemplo. Como digo es intrusivo, a pesar de que existen algunas anotaciones para declarar meta información de Ioc de parte del estándar de JEE, siempre es necesario acudir a las anotaciones de Spring, lo cual no permite que el cambio de Ioc se posible, o por ejemplo si tenemos unos beans y queremos reutilizar el código en un ambiente no Spring, como Seam entre otros tendríamos que hechar mano al código :(

3) @Qualifier sucks


Yo creo que las anotaciones son una gran idea, pero el abuso poco inteligente o el uso intensivo de los mismos por la simple razón que están en boga puede introducirnos a un nuevo nivel infernal, basta con ver algunos beans, con anotaciones de Hibernate, JAXB, Struts Validations y alguna otra cosa! No nos alcanzan los 24 inch de la pantallas para ver la siguiente propiedad jajajaja

martes, mayo 10, 2011

Ejecutar solo un test en maven (test phase)

Si desea ejecutar solo uno de los test de maven, use mvn test -Dtest=.....


Mas info:
http://maven.apache.org/plugins/maven-surefire-plugin/examples/single-test.html

jueves, abril 07, 2011

Multiples patrones para un servlet

Estaba buscando como hacer para que un servlet responda tanto a .action como .xml, y esto me funciono en tomcat



<servlet-mapping>
<servlet-name>SimpleMVCServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>SimpleMVCServlet</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>

Serializar en XML un object

Existen diferentes tipos de Librerías para hacer Serializacion de objetos a XML y viceversa, tales como  
JAXB, XStream, XMLBeans, etc. De ellos, uno de los que mas me gusta es XStream, aunque se a pura reflexión 
es sencillo de utilizar y puede serializar a XML y Json de manera transparente.
Sin embargo si no desean agregar una librería externa y no desean usar las ya conocidas Sax o Dom, puede usar las clases 
XMLEncode y XMLDecoder, un ejemplo.
XMLEncoder e = new XMLEncoder(     new BufferedOutputStream(         new FileOutputStream("Test.xml"))); e.writeObject(new JButton("Hello, world")); e.close()
Mas info en:
http://java.sun.com/products/jfc/tsc/articles/persistence4/

viernes, abril 01, 2011

Tipos de datos en Oracle

En caso que necesiten saber los tamaños máximos para algunos de los tipos en Oracle, este link me sirvió bastante

lunes, marzo 28, 2011

Articulo acerca de annotations en Java

Actualmente me encuentro haciendo un Framework en Java y quería agregar annotations al mismo, aquí un articulo al respecto:

lunes, marzo 07, 2011

Articulo acerca de Spring Social

Me encontré este modulo de Spring, Spring Social. La verdad esta muy interesante para integrar Facebook, Twiter y otros frameworks y proporciona una forma muy high level de acceder a las api's rest que proporcionan estas redes sociales.

http://blog.springsource.com/2010/11/03/socializing-spring-applications/

martes, marzo 01, 2011

Acceso remote en MAC

Hola gente,

En este pequeño post, quiero hablar acerca del acceso remoto en MAC.
Yo conozco tres formas de acceder a una computadora desde Mac, la primera de ellas es mediante SSH, veamos un ejemplo

ssh -l userName IP

La anterior, es lo que diríamos la sintaxis del comando, ssh es el comando, userName es el nombre del usuario para acceder ala compu remota y la ip, la dirección IP de la maquina que deseamos acceder.

Un ejemplo:

ssh -l jsanca 10.45.100.12

En este ejemplo, intentamos conectarnos como jsanca, a la computadora con la IP, 10.45.100.12. al ejecutar el comando, el sistema nos solicitara el password y a continuación tendremos una consola remota para navegar por la maquina, ejecutar comandos, etc.

Accediendo, vía SSH Client; en Windows solía utilizar SSHClient para acceder al estilo de un cliente FTP a una maquina remota, en MacOS he encontrado Fugu (http://rsug.itd.umich.edu/software/fugu/), con esta sencilla aplicación podemos indicar la ip, y el usuario, a continuación solicitara el password y abrirá una ventana con dos exploradores de archivos, el primero (izquierda es el local) y el segundo el remoto, así podemos transferir archivos en ambas direcciones, entre otras cosas :)

La ultima y mas sofisticada, es la utilizacion de NXServer y NXClient, este software muy superior a otros que he usado como TeamViewer, simplemente instalamos el NXServer en nuestra maquina remota y corremos el servicio

nxserver --start (en Linux)

y abriendo la aplicación del NX11 podemos tener control total en la maquina remota, muy útil para programar en una app remota o cosas así!


Un saludo,
J

miércoles, febrero 16, 2011

Como exportar Cvs en postgresql

Como le dice el titulo, un articulo de como exportar desde la consola psql una consulta a cvs :)

http://www.mkyong.com/database/how-to-export-table-data-to-file-csv-postgresql/

Como obtener la información del HttpServletRequest

Muy buen articulo de como obtener información del request:

jueves, enero 20, 2011

Instalar Git in Windows

Si desea instalar Git en Windows, puede seguir esta guía

http://es.kioskea.net/faq/2645-utilizar-git-bajo-windows

viernes, enero 14, 2011

Como usar el fadeOut con Dojo

Hola, recientemente tenia la necesidad de implementar un fadeOut o lo que es lo mismo, que un div, desvaneciera!

Con YUI, sabia que se podía hacer de la siguiente manera:

setTimeout(function() {
var fadeOut = new YAHOO.util.Anim('idDelDiv', { opacity: { to: 0 } }, 0.5);
fadeOut.onComplete.subscribe(function() {
yd.setStyle('list_success_message', 'opacity', 1);
});
fadeOut.animate();
}, 4000);

Básicamente, el timeout invoca después de 4 segundos a la función anónima, que llama a la animación, que desaparece el div.

En dojo, algo parecido lo encontré en http://docs.dojocampus.org/quickstart/Animation

Básicamente se debe hacer algo así

dojo.style("idDelDiv", "opacity", "1");
dojo.fadeOut({
node: "idDelDiv",
duration: 4000,
onEnd: function(){
// executed when the animation is done
dojo.byId("idDelDiv").className = "none";
}
}).play();

el dojo.fadeOut, básicamente recibe unas propiedades donde se pueden incluir algunos triggers para los eventos, en mi caso, cuando este completo quiero colocar este class al div.
En mi caso paso el id, el tiempo (4 sec) y la función antes mencionada y le doy play para ejecutar el efecto que dura 4 segundos :)

martes, enero 04, 2011

Como iniciar modo seguro en MAC OS

Aquí el link de como iniciar el modo seguro

http://support.apple.com/kb/ht1455

Básicamente es reiniciar el equipo y presionar la tecla de Shif (Mayúscula) hasta que aparezca una pantalla azul y a continuación la pantalla de login y colocar nuestras credenciales.

Un saludo,
J