Grails JSON Marshalling bien hecho.

Jan 28, 2014

Personalizar marshaller JSON en Grails

El personalizado de marshallers esta bastante documentado:

Básicamente consiste en los siguientes pasos:

  1. Creamos un marshaller para la clase (mapa con los valores que deseamos regresar)
  2. Se registra el marshaller en el BootStrap.groovy.

Definir un marshaller para una clase en el BootStrap.groovy, no se esta tan mal, pero que si necesitamos definir todo el dominio de una aplicación.

Una posible solución:

Custom JSON Marshalling in Grails, Done “Right”

En este blog crean los marshaller en archivos separados, luego en un mapa definen los beans, y en con la ayuda del spring inyectan y registran.

Lo cual parece demasiado.

Mi propuesta:

  1. Engordar la clase de dominio para que contenga su propio marshaller.
  2. Si la clase de dominio define un marshaller, que de manera automática se registre en BootStrap.groovy.

Clase gorda con marshaller:

Escaneo de las clases de dominio:

Conclusiones:

  • Creo que esta solución es correcta por que no es necesario modificar el BootStrap.groovy cada vez que necesitamos un marshaller.
  • Si se requiere un cambio es muy fácil modificar la clase de dominio.

Hacer un backup de mysql a Amazon S3

Aug 21, 2013

Hacer un backup de una base de datos a Amazon S3

Lista de pasos:

  1. Realizar un dump de la base
  2. Comprimir
  3. Subir a S3

Dumping, compressing

Uploading

Revisa link del paso 3.

Agrega esta linea al script anterior

  
    groovy s3_up.groovy "bucket_name" dump-$name.bz2
  

P.D Revisa las rutas relativas, si lo ejecutas en un cron, el contexto(enviroment) es diferente, en este ejemplo la base de datos no pide password.


Subir archivos a Amazon S3 con Groovy

Aug 21, 2013

Subir archivos a amazon S3, un script basado en uno de Thom Nichols y actualizado con una version mas reciente de JetS3t library.

  1. Crear bucket en S3 https://console.aws.amazon.com/s3/
  2. Crear grupo y usuario en iam https://console.aws.amazon.com/iam/, verificar que la opcion de generar acces Key este selecionado.
  3. Remplazar accessKey y secretKey en el script.

Apache WebProxy, y tunnelling

Dec 26, 2008

Los adminstradores de red siempre ponen restricciones sobre la paginas que podemos ver desde la escuela o en el trabajo,  tambien puenden monitorear las paginas que visitamos, una solucion es montar un servidor proxy en nuestra casa y conectarnos a el para poder navegar libres, anonimamente y sin restriciones.

La idea la he sacado de este sitio.

http://daniel.haxx.se/docs/sshproxy.html

El procedimiento esta escrito para Ubuntu aunque la idea aplica para todos las distribuciones linux.

1. Primero necesitaremos instalar apache.

  sudo apt-get install apache2

Para detener, iniciar, reinciar el servidor apache:

  sudo /etc/init.d/apache2 stop
  sudo /etc/init.d/apache2 start
  sudo /etc/init.d/apache2 restart

Una vez que este instalado apache ve al explorador e ingresa localhost en la barra de direcciones y da enter. Debes de ver algo como ** It works !!! ** o una pagina que confirme que apache esta funcionando.

2. Instalar el modulo proxy para apache.

  sudo apt-get install libapache2-mod-proxy-html

Luego hay que editar la configuracion del apache para que utilize el modulo que acabamos de instalar.

En mi caso voy a utilizar el puerto 8888 para proxear por lo que tengo que decirle al apache que escuche en este puerto, y deshabilitar las escuchas al puerto 443, por que este puerto lo voy a usar para el ssh.

  sudo gedit /etc/apache2/ports

Y agrego listen 8888 y comento el 443, el arhivo me queda asi:

    # If you just change the port or add more ports here, you will likely also
    # have to change the VirtualHost statement in
    # /etc/apache2/sites-enabled/000-default
    # This is also true if you have upgraded from before 2.2.9-3 (i.e. from
    # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
    # README.Debian.gz

    NameVirtualHost *:80
    Listen 80
    Listen 8888
    <ifmodule mod_ssl.c="">
        # If you add NameVirtualHost *:443 here, you will also have to change
        # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
        # to <VirtualHost *:443>
        # Server Name Indication for SSL named virtual hosts is currently not
        # supported by MSIE on Windows XP.
        # Listen 443
    </ifmodule>

    <ifmodule mod_gnutls.c="">
       #  Listen 443
    </ifmodule>

luego creamos un nuevo documento vacio en la siguiete ruta con el nombre "proxy"

   /etc/apache2/sites-available

Y ponemos lo siguiente

    <virtualhost *:8888>
      ServerAdmin webmaster@localhost

      ProxyRequests On
      ProxyVia On

      #Add ports you want to be able to connect to through your proxy here
      AllowCONNECT 443 554
      #563 1863 10000
      #443   = SSL
      #563   = TLS
      #1863  = MSN Messenger
      #10000 = Webmin

      DocumentRoot /var/www/
      <directory>
              Options FollowSymLinks
              AllowOverride None

            ErrorLog /var/log/apache2/proxy-error.log
            TransferLog /var/log/apache2/proxy-transfer.log
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel debug

      </directory>

Con lo que le estamos creando un nuevo sitio proxy que va a forwadear el puerto 80, 443, 544, es importante que el virtual host *: 8888 sea igual al puerto que esta escuchando apache.

Configuramos el mod_proxy en el siguiente archivo:

    sudo gedit /etc/apache2/mods-available/proxy.conf

Que queda de esta forma

<ifmodule mod_proxy.c="">
        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests On

        <Proxy *:8888>
                AddDefaultCharset off
                Order deny,allow
                Deny from all

                Allow from 127.0.0.1

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On
</ifmodule>

Con lo que configuramos que solo se pueda usar el proxy desde el localhost. Activamos el mod_proxy con esta linea.

sudo a2enmod proxy proxy_connect proxy_html proxy_http proxy_ftp

Activamos el sitio proxy

sudo a2ensite proxy

Y reinciamos el rervidor:

 sudo /etc/init.d/apache2 restart

Ya tenemos el servidor web listo.

Nota: si tenemos algun problema sera necesario modificar el site, y la configurcion, para esto es necesario deshabilitar tanto el site con el mod_proxy. Para deshabilitar el sitio proxy

sudo a2dissite proxy

para deshabilitar el mod_proxy:

sudo a2dismod  proxy_connect proxy_html  proxy_ftp proxy

Si se deshabilita el mod_proxy es necesario deshabilitar el site proxy, por que este depende del mod_proxy, y el apache no arrancarria.

Para averiguar si funciona puedes hacer un telnet

telnet localhost 8888

Si no responde con codigo de error es por que esta bien, si ves simbolos raros esta bien.

3. Instalar ssh server para que te puedas conectar desde tu computadora del trabajo o de la escuela.

sudo apt-get install openssh-server

Como es un hecho que este bloqueado el puerto 22 que se utiliza por default para el protocolo ssh se debe de configurar para que use el puerto 443 usado generalmente para https.

Para hacer esto hay que modificar el siguiente archivo

sudo gedit /etc/ssh/sshd_config

Cambia esta linea

  Port 22

por

  Port 443

Ahora reinicia el servidor ssh.

sudo /etc/init.d/ssh restart

Prueba conectarte a tu maquina

ssh 'user'@localhost -p 443

4. Configurar DNS dinamico

Si no cuentas con ip estatica, sera necesario usar servicio como no-ip.org

Para instalarlo dirigite a la siguiente pagina no-ip.org y create una cuenta. Luego instala el cliente en tu maquina para que se actualize tu ip automaticamente.

sudo apt-get install no-ip

Sigue la instrucciones, los parametros por default esta bien.

Ahora comprueba si esta funcionando correctamente.

sudo noip2 -S

Si el cliente de no-ip no esta corriendo utiliza.

sudo noip2

5. Configurar tu maquina local

Ahora configura la maquina desde donde te vas a conectar si utilizas linux.

 ssh -L 8888:localhost:8888 user@server.at.home -p 443

Con Windows utiliza putty o extra-putty.

Configura putty de esta forma:

putty1

putty1

Necesitas configurar tu explorador para que use localhost:8080 como proxy, para todos los protocolos , si estas utilizando windows no recomiendo utilizar internet explorer ni chrome, utiliza firefox o opera, por que la configuracion del proxy es mas facil.

Mas informacion:

http://famvdploeg.com/blog/2008/01/setting-up-an-apache2-proxy-server/l


Java Decompiler

Nov 11, 2008

Un decompilador es una herramienta muy util cuando necesitas modificar una clase y no cuentas con el codigo fuente.

Decompiladores que conozco:

Estan esta disponible para windows, mac y linux.

Nota: Si no quieres que decompilen tus clases utiliza un obfuscador como ProGuard del post pasado.


Java Obfuscator

Nov 11, 2008

ProGuard es para hacerle uglify al codigo Java y que sea dificil de entender cuando este se decompile.

Descargalo desde aqui: proguard

Para ejecutarlo utiliza:

java -jar proguardgui.jar


Pagina 1 de 1