Trabajando con C# y .Net

Ver Comentarios

Posted on : 05-11-2009 | By : Carlos Cordero | In : Internet, Software

Confieso que desde que dejé de hacer cosas con Visual Basic había renegado mucho de las tecnologías de Microsoft en cuanto a desarrollo se refiere. Siempre me he movido por tecnologías más afines al mundo open source, PHP y Java.

Sin embargo, hace algunos días decidí darle una oportunidad a C# y en general, al framework .Net… había leído cosas muy positivas sobre el. Admito que C# me ha dejado un muy dulce sabor de boca, sabiendo C y Java en menos de 5 horas estaba programando con algo de soltura y las ventajas que aporta sobre Java cumplen lo prometido. No podemos olvidar que C# fue creado y vendido como un lenguaje que suplía las carencias de Java y con la potencia de la familia “C”.

También he probado Windows.Forms y WPF (Windows Presentation Foundation) y sobre todo con esta última, todavía estoy babeando: que facilidad! No me gusta GTK, no me gusta QT… me parecen engorrosos (aunque muchos no estén de acuerdo claro), sin embargo estas dos tecnologías me han parecido muy amigables, perfectas para hacer cosas de forma sencilla y sin complicaciones.

Además de algunas pruebas más o menos tonta, el otro día estuve creando una librería para el API de Twitter (tengo la sensación de que el antiguo Hola Mundo ahora se ha transformado en un API para Twitter… es lo que pruebo en cualquier nuevo lenguaje de programación); en cuanto esté un poco más trabajada la publicaré por si le sirve a alguien, nunca se sabe.

Me queda la asignatura de probar Mono, ver que clase de compatibilidad ofrece más allá del papel, pero sobre todo, me ha gustado la tecnología… por lo que tocará seguir profundizando en ella… ¡quien sabe!

Jugando con Hibernate y Json

Ver Comentarios

Posted on : 15-10-2009 | By : Carlos Cordero | In : Internet, Java, Software

Unos duermen a las 8 de la mañana, otros están en el atasco (que asco) y otros nos divertimos jugando con el código como si fuese un trozo de arcilla. No hay nada más divertido en Java como descubrir toda clase de excepciones que más que informarte de algo parece que te insulten… “UndeclaredThrowableExceptiondice, pero a mi siempre me ha sonado a “¿pero que coño acabas de intentar hacer loco?

Aunque ya llevo unos días jugando con servicios web, JSON y java (post relacionado) fue ayer cuando, después de una conversación de cigarro, quise probar a hacer la serialización de POJOs recuperados con hibernate, tal cual, sin filtrar nada y en el menor número de líneas posible: bueno, pues se puede hacer en 3 lineas de código. Si “fale”, le faltará un poquito de tweaking pero por algo se empieza (por cierto, una de las líneas es la que recupera el objeto persistido).

El misterio de la cuestión está en estas dos líneas:

XStream xstream = new XStream(new JettisonDriver()); 
String xml = xstream.toXML(taxon);

Para más información, XStream es una librería para la serialización de objetos en XML, con la ventaja de poder setearle un driver específico, en este caso uno que encontré rebuscando en foros, JettisonDriver(), cuya mayor ventaja además de serializar en JSON es que permite des-serializar igualmente.

Por cierto, un tip adicional si estáis trabajando con Hibernate y queréis tirar alguna query HQL para sacar los datos a serializar.  Hibernate utiliza CGLIB para la generación de ciertas partes de código al vuelo (más info, Reflection Java) y por lo tanto, es muy posible que nos encontremos con clases que han pasado por el proxy, las cuales se identificar por tener $EnhancerByCGLIB$ en el tipo de clase… por lo que el serializador no funcionará correctamente (serializará la parte del proxy).

Solución sencilla:

((HibernateProxy)OBJETO()).getHibernateLazyInitializer().getImplementation();

Prometo que encontrar esa línea me costo sudor y horas la primera vez que me pegué con ello.

Integrar PayPal como forma de pago (PHP)

Ver Comentarios

Posted on : 05-10-2009 | By : Carlos Cordero | In : Internet, Software

No hace falta explicar que es y para que sirve PayPal, no obstante, en la wikipedia hay un artículo extenso con información sobre el servicio. En este caso queremos integrar PayPal como forma de pago de un servicio que estamos desarrollando, bajo PHP. Como se suele decir en estos casos, para que reinventar la rueda si ya disponemos de varias clases existentes en internet que nos facilitan el trabajo.

Os dejo una de las que más he utilizado cuando he tenido que integrar PayPal en cualquier servicio de comercio electrónico. Es un sencilla clase que implementar el check IPN de PayPal y un script de ejemplo de implementación.

http://www.micahcarrick.com/04-19-2005/php-paypal-ipn-integration-class.html

Disclaimer: No soy un gran amigo de PayPal, su supuesta protección al vendedor y al comprador dejan bastante que desear, pero eso no quita que sea uno de los servicios más usados y por lo tanto, más demandados por el cliente.

El departamento de cosas variadas

Ver Comentarios

Posted on : 01-10-2009 | By : Carlos Cordero | In : Enlaces, Java

¿Alguna vez habéis intentado programar en tres lenguajes de programación a la vez? Estos días ando liado con Java, PHP y Javascript a la vez. Bueno, yo lo intento porque después de unas horas ya intento meter finallys a PHP y meter $ antes de las variables en Java… es lo que tiene.

Se nota que es jueves, y esto de levantarse todos los días a las 5.30 todavía cuesta, llevo bostezando sin parar una hora. Mañana viernes, por fin.

Buenas noches.

Lector DNIe por 2 euros

Ver Comentarios

Posted on : 01-10-2009 | By : Carlos Cordero | In : Internet, Linux

Financiados por la entidad Red.es, puedes conseguir un lector para DNIe por sólo 2€ (los gastos de envío).

No creo que duren mucho así que… https://www.tractis.com/red-es/lectores

Además, son compatibles con GNU/Linux y Mac OSx… parece que poco a poco empiezan a pensar en todas las plataformas y no solo en Windows.

Cliente SOAP bajo PHP

Ver Comentarios

Posted on : 28-09-2009 | By : Carlos Cordero | In : PHP, Software

Un apunte muy rápido para consumir WSDL desde PHP, que hoy me he tenido que pegar con ello para llamar a un servidor bajo .net y lo he solucionado al final de la forma más tonta del mundo.

Nos descargamos wsdl2php desde aqui. Esta pequeño script parseará el WSDL que le indiquemos y nos creará una fichero con la clase SoapClient de PHP5 lista para usar junto a todas las clases que ofrezca el servicio, es decir, nos quita todo el trabajo de encima.

Sólo nos faltará crear un script para lanzar la ejecución:

<?php
require_once 'ClasesCreadas.php';
$client = new ClasesCreadas();
print_r($client->LlamadaAEjecutar($parametros);
?>

A veces las cosas fáciles son las que mejor funcionan :)

Servicios Web REST

Ver Comentarios

Posted on : 25-09-2009 | By : Carlos Cordero | In : Java, PHP, Software

Me encantan esos días en los que puedes dedicarte a investigar, el hecho de poder leer mucha documentación para encontrar la mejor solución a un problema, sin presiones, sin plazos de entrega…

Para ponernos en situación, tenemos una especie de modelo editorial donde se almacenan cantidades más ó menos importantes de datos, desarrollado en java con toda la pesca incluída: Spring, Hibernate y usando MySQL como BD. Meses atrás se hizo a toda prisa una aplicación web de consulta, en este caso en PHP. Si, se que alguno querrá arrancarse los ojos al leer esto pero: el código de PHP lanza querys directas contra la BD (es decir, se pasa el modelo de ORM de Hibernate por los santos)… que queréis, se hizo en día y medio, cosas de los plazos.

Por si alguno todavía no se ha dado cuenta, eso tiene un grave problema (dejando de lado que es una chapuza increíble) y es que requiere trasladar todos los cambios que se hagan en el modelo a nuestra aplicación PHP (y normalmente suele pasar que se olvida y falla en el peor momento). A la hora de cambiar esto, se podría optar por utilizar algún tipo de implementación PHP sobre JAVA tipo Quercus (que ya utilizamos en otra rama), pero viendo los dolores de cabeza que ha dado, prefería evitarlo…

¿Solución? Servicios Web. ¿SOAP? ¡Mucho lio! … Mejor solución: REST (Representational state transfer): una solución de arquitectura “parida” para las necesidades justas que tenemos, y en este caso, limitadas a peticiones GET y algún POST (quizás para las búsquedas…). Ya tenemos nuestra solución: servicios web REST que den una salida JSON. El motivo de dar una salida JSON es evidente: queremos que sea interpretado por PHP, el cual tiene las funciones específicas para ello, y de esa forma no nos limitamos a ninguna arquitectura (nunca se sabe…).

Ahora viene el lado servidor, tenemos que implementar los servicios web en JAVA y sobre todo, tenemos que mantener y aprovechar la arquitectura existente. Ah! Una última cosa… no podemos depender de un contenedor específico, por si acaso ;)

De nuevo, solución: JAX-RS, la solución más sencilla que nos aporta JAVA para montar servicios REST. En este caso hemos utilizado una implementación que se llama Jersey (que queréis que haga si le ponen esos nombres…). Utilizando maven se ha vuelto muy sencillo, unas dependencias por aquí, otras por allá, y todo ready! Aqui os dejo el “getting started” de Jersey, si miráis el código os quedaréis muy sorprendidos, al fin y al cabo utiliza POJOs.

 1    // The Java class will be hosted at the URI path "/helloworld"
 2    @Path("/helloworld")
 3    public class HelloWorldResource {
 4
 5        // The Java method will process HTTP GET requests
 6        @GET
 7        // The Java method will produce content identified by the MIME
 8        // type "text/plain"
 9        @Produces("text/plain")
10        public String getClichedMessage() {
11            // Return some cliched textual content
12            return "Hello World";
13        }
14    }

Admito que he estado un par de horas pegándome con un conflicto de versiones de dependencias que tenían jersey e hibernate, causados por la librería asm, cosa de tener ya un sistema montado por detrás. Ahora mismo no lo recuerdo exáctamente, pero creo que hibernate utilizaba la rama 1.x de asm y jersey la 2.x, algunos métodos han cambiado y… POUM! Las últimas versiones de hibernate ya no tienen esa dependencia así que sólo había que incluirla en el ignore de maven para hibernate y todo solucionado. ¿Veis? Si hubiese mirado los foros de hibernate antes… me hubiese evitado ese tiempo de pelea con el tomcat (si, lo he montado sobre un tomcat, aunque supongo que termine en un resin).

Si alguno monta un servicio con esto, ya me enviará la URL para probarlo (si es público claro ;) )