Building software...
viernes, 8 de noviembre de 2013
StringBuilder Vs String | Memory usage
Hace un tiempo tenía ganas de evaluar realmente el impacto (en memoria y performance) que tiene concatenar Strings dentro de loops sin usar StringBuilder en JAVA.
Me hice un rato para realizar las siguientes pruebas:
miércoles, 30 de octubre de 2013
How to prevent your OPENSHIFT FREE app from being considered idle.
Como la mayoría ya debe saber o habrá notado, OpenShift pone los servicios en estado IDLE cuando no se recibe un pedido HTTP externo en un periodo de dos días.
El pedido debe de ser externo, y lo se por experiencia ya que me cree otra cuenta para intentar hacer un ping de un servicio al otro y no resulto.
Necesitaba algún servidor por fuera de la infraestructura de OpenShift que realice un PING ... Buscando encontré varios que en su versión paga brindan buenas funcionalidades como Pingdom.com, pero existe uno que da muy buen servicio y en la versión gratis deja controlar mas de una URLse llama Monitor US y su web es Monitor.us
Si lo van a usar no se olviden de probar la Aplicación para Android que alerta del estado de los servidores y muestra estadísticas del tiempo de respuesta, etc.
Personalmente ya hace casi un mes que tengo la aplicación configurada y la misma indica un 99.98% online :)
El pedido debe de ser externo, y lo se por experiencia ya que me cree otra cuenta para intentar hacer un ping de un servicio al otro y no resulto.
Necesitaba algún servidor por fuera de la infraestructura de OpenShift que realice un PING ... Buscando encontré varios que en su versión paga brindan buenas funcionalidades como Pingdom.com, pero existe uno que da muy buen servicio y en la versión gratis deja controlar mas de una URLse llama Monitor US y su web es Monitor.us
Si lo van a usar no se olviden de probar la Aplicación para Android que alerta del estado de los servidores y muestra estadísticas del tiempo de respuesta, etc.
Personalmente ya hace casi un mes que tengo la aplicación configurada y la misma indica un 99.98% online :)
jueves, 17 de octubre de 2013
Android: Capturar pedidos HTTP desde Android usando Fiddler
Ayer pase varios minutos intentando darme cuenta porque una aplicación Mobile en Android usando Volley me daba problemas...
Luego de luchar un rato todo era porque me olvide de colocar: @Produces({"application/json"}) en un método de un servicio REST en Java y el mismo no estaba retornando el Content-type correcto en la respuesta http.
Por tanto abrí el Fiddler (http://fiddler2.com/) y configure que permita conexiones externas Tools -> Fiddler Options
Ya que como emulador utilizo GenyMotion, pero también tengo una Tablet y el Celu quería una solución desde el propio Android. (Existen otras soluciones, por ejemploc onfigurar el proxy de GenyMotion).
Luego de luchar un rato todo era porque me olvide de colocar: @Produces({"application/json"}) en un método de un servicio REST en Java y el mismo no estaba retornando el Content-type correcto en la respuesta http.
Como no me daba cuenta cual era el problema... Me propuse capturar los paquetes que enviaba el emulador a mi servidor y sus respuestas con el fin de ver cual era el problema y de paso divertirme un poco.
Por tanto abrí el Fiddler (http://fiddler2.com/) y configure que permita conexiones externas Tools -> Fiddler Options
Ya que como emulador utilizo GenyMotion, pero también tengo una Tablet y el Celu quería una solución desde el propio Android. (Existen otras soluciones, por ejemploc onfigurar el proxy de GenyMotion).
Para configurar el proxy en Android vamos a Settings -> Wi-Fi y hacemos long press sobre nuestro SSID elegimos la opción de opciones avanzadas y completamos el IP y Puerto del Proxy Local similar a la imagen
Y listo.. Los pedidos HTTP deberían comenzar a aparecer en la ventana del Fiddler.
martes, 10 de septiembre de 2013
El poder de SOAP UI - Parametros y Scripts Groovy
Hoy me encontré con el problema de probar un Web Service, el mismo tiene un flujo de dos operaciones y requiere utilizar la fecha y hora actual para realizar le pedido. Ademas necesitaba tomar un parámetro de la respuesta de la primera invocación para ser utilziado en la segunda.
Por tanto me puse a investigar de que forma lo podía hacerlo con SOAP-UI
Y termine utilizando lo siguiente:
Dos pasos con script groovy para obtener la fecha y la hora, un paso para transferir propiedades y un delay para simular el tiempo entre que se envía la transacción y se confirma.
Los scripts tienen los siguiente: getHour...
getDate..
Y las variables son referencias desde cada Request de la siguiente forma:
La transferencia de propiedades fueron realizadas utilizando xpath , como se ve en la imagen.
y sera insertado en:
Espero que a alguien le sirva como me sirvió a mi :)
miércoles, 14 de agosto de 2013
Collection.emptyList() + java.lang.UnsupportedOperationException
Es común utilizar el método estático emptyList() de la clase Collection cuando se requiere retornar una lista vacía del estilo List<T>
Utilizando este método se gana en performance ya que el mismo no tiene el overhead de crear una nueva lista cada vez, sino que siempre devuelve la misma. Es por tal motivo que la lista es inmutable (no se puede modificar, ni agregar elementos etc.).
Por tanto cuando se usa algo del estilo:
Hay que estar seguro de no querer luego modificarla, en caso de intentar realizar algo como:
Se obtiene una excepcion java.lang.UnsupportedOperationException en RUNTIME.
Mas referencias de la clase Collection: aqui
Por tanto cuando se usa algo del estilo:
Hay que estar seguro de no querer luego modificarla, en caso de intentar realizar algo como:
Se obtiene una excepcion java.lang.UnsupportedOperationException en RUNTIME.
Mas referencias de la clase Collection: aqui
sábado, 20 de julio de 2013
PrimeFaces PickList + RemoteCommand example
Hace unos días trabaje con el componente PickList de PrimeFaces combinándolo con el componente remoteCommand.
La idea era procesar una lista de archivos, de a uno por vez e ir mostrando el avance al usuario.
Lo primero fue definir el markup de la vista.
Primero definimos un growl y un dialogo, para mostrar el orden de proceso y avisar del procesamiento respectivamente. Luego el componente p:pickList Y por ultimo, un commandButton para iniciar el procesamiento y un remoteCommand para invocarlo mediante js desde el Bean.
Del lado del servidor vamos a ejecutar la acción y si aun quedan elementos por procesar volveremos al cliente para actualizar la lista e invocamos nuevamente
Un vídeo del ejemplo aquí
El código lo bajan desde aquí
La idea era procesar una lista de archivos, de a uno por vez e ir mostrando el avance al usuario.
Lo primero fue definir el markup de la vista.
Primero definimos un growl y un dialogo, para mostrar el orden de proceso y avisar del procesamiento respectivamente. Luego el componente p:pickList Y por ultimo, un commandButton para iniciar el procesamiento y un remoteCommand para invocarlo mediante js desde el Bean.
Del lado del servidor vamos a ejecutar la acción y si aun quedan elementos por procesar volveremos al cliente para actualizar la lista e invocamos nuevamente
Un vídeo del ejemplo aquí
El código lo bajan desde aquí
domingo, 24 de marzo de 2013
Servidor utilizando DynDns + SSH mobile
Hace unos días encontré en mercado libre un Servidor Dell Poweredge 2650 con dos procesadores Xeon que estaba en precio y lo compramos con un amigo.
Luego de tenerlo en casa y terminar de asombrarme por el peso,las dimensiones y el ruido del nuevo juguete, me dispuse a instalar un Ubuntu Server y dejarlo funcionando. Como mi conexión a Internet no tiene una IP fija, cree una cuenta en DynDns para lograr tener un nombre de dominio estático que me permita acceder al server, el servicio ya lo eh probado anteriormente y funciona realmente bien.
Existe la posibilidad de actualizar nuestra dirección IP utilizando una aplicación que se instala en windows o linux y también existen algunos routers como el mio (Linksys WRT120N) que tiene en su configuración la opción para actualizar automáticamente el IP en cada re-conexión para DynDNS y TZO.
Lo ultimo es configurar el reenvió de los puertos para poder acceder desde el exterior de mi LAN.
La configuración quedo así.
Luego que tenia todo funcionando estuve probando varios clientes SSH para usar con la Galaxy Tab2. Después de probar 4 o 5 encontré lo que necesitaba. Server Auditor La mayoría de los que probé tenían lo básico pero este ultimo destaca por lo siguiente:
Luego de tenerlo en casa y terminar de asombrarme por el peso,las dimensiones y el ruido del nuevo juguete, me dispuse a instalar un Ubuntu Server y dejarlo funcionando. Como mi conexión a Internet no tiene una IP fija, cree una cuenta en DynDns para lograr tener un nombre de dominio estático que me permita acceder al server, el servicio ya lo eh probado anteriormente y funciona realmente bien.
Existe la posibilidad de actualizar nuestra dirección IP utilizando una aplicación que se instala en windows o linux y también existen algunos routers como el mio (Linksys WRT120N) que tiene en su configuración la opción para actualizar automáticamente el IP en cada re-conexión para DynDNS y TZO.
Lo ultimo es configurar el reenvió de los puertos para poder acceder desde el exterior de mi LAN.
La configuración quedo así.
Luego que tenia todo funcionando estuve probando varios clientes SSH para usar con la Galaxy Tab2. Después de probar 4 o 5 encontré lo que necesitaba. Server Auditor La mayoría de los que probé tenían lo básico pero este ultimo destaca por lo siguiente:
- Desplazar para tener el histórico de comandos
- Posibilidad de utilizar la tecla TAB con un double touch lo cual es muy util.
- Es fácil utilizar las teclas CTRL, ALT, ESC, F#.
Suscribirse a:
Entradas (Atom)