Secciones

@Internet

Algo sobre mi

Bienvenido a frangarcia.net. Mi nombre es Fran García y soy un analista programador web que actualmente trabaja como programador Freelance. En esta web encontrarás sobre todo noticias relacionadas con las nuevas tecnologías, Internet, programación y de vez en cuando soltaré algo sobre mi vida privada, aunque no esperes que esto sea un blog demasiado íntimo.
Espero que lo que veas y leas aquí, sea de tu interés.

Almacenando y sobreescribiendo métodos en Groovy con metaprogramación

1. julio 2014, 22:04
Se han desactivado los comentarios a este artículo.


Si en alguna ocasión necesitas almacenar el contenido de algún parámetro pasado a alguna función en Groovy, necesitarás almacenar el método antes de modificarlo mediante programación.

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Testeando condiciones asíncronas con Spock

19. junio 2014, 11:25
Se han desactivado los comentarios a este artículo.


Testear condiciones asíncronas con Spock es sencillo utilizando por ejemplo las PollingConditions

Gracias a ellas es posible retrasar la comprobación de determinadas condiciones en un test con Spock.

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Debuguear un proyecto vert.x con IntelliJ Idea

5. junio 2014, 10:04
Se han desactivado los comentarios a este artículo.


Si estás desarrollando un proyecto Vert.x y necesitas debuguear en algún momento tu aplicación, simplemente debes seguir estos pasos:

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Obtener access y refresh token mediante curl

3. junio 2014, 23:43
Se han desactivado los comentarios a este artículo.


Si en algún momento necesitas generar un access token para por ejemplo acceder al API de Youtube o de cualquier otro de los servicios de Google, es probable que necesites un access token con el cual realizar algunas peticiones. Aquí hay una forma rápida de obtener ese access token sin tener que programar nada.

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Consejos para emigrar al Reino Unido

18. octubre 2013, 12:33
Se han desactivado los comentarios a este artículo.


Emigrar para trabajar al Reino Unido no es algo sencillo y con la experiencia de haberlo hecho ya dos veces en el último año, me siento en condiciones de escribir un artículo que pueda ayudar a otras personas a hacer ese proceso más sencillo.

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Actualizando aplicaciones a Grails 2.3.0

11. septiembre 2013, 20:35
Se han desactivado los comentarios a este artículo.


Ayer mismo salió la nueva versión de Grails, la 2.3.0 que destaca, entre otros aspectos por las mejoras en el soporte a los servicios REST y el aumento de la seguridad para evitar ataques XSS.

Esta misma mañana he intentado actualizar una aplicación que estoy desarrollando y de la que por el momento no puedo hablar y me he encontrado con el problema de que se desaconseja el uso el típico comando grails upgrade puesto que está en estado de deprecated. A partir de ahora debemos utilizar el comando

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Dejo Secret Escapes en Londres para volver a Alicante

25. junio 2013, 12:51
Se han desactivado los comentarios a este artículo.


Si hace 8 meses escribía un post para anunciar que dejaba la Universidad de Alicante para empezar a trabajar para Secret Escapes en Londres, ahora es el momento de escribir un nuevo post para decir que dejo Londres, para volver a Alicante y empezar una nueva aventura como programador freelance.

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Mis primeros dos meses en Secret Escapes

24. diciembre 2012, 12:11
Se han desactivado los comentarios a este artículo.


Después de más de dos meses en mi nuevo puesto de trabajo y casi diría yo en mi nueva vida lo único que puedo decir es que no nos hemos equivocado en la decisión tomada. Hablo en plural porque esta decisión ha sido conjunta entre mi mujer y yo y aunque ella todavía está en España, en breve me acompañará en esta aventura.

Pero vamos a lo que quería os contar en este post. El título de mi puesto de trabajo es Senior Software Developer en Secret Escapes, una start-up con base en Londres que se dedica al mercado de los viajes de lujo con grandes descuentos.

Os cuento un poco la estructura actual del departamento técnico de la empresa. A la cabeza está el CTO de la compañía que dirije a 4 programadores, dos de ellos seniors, y dos diseñadores gráficos.

Las teorías ágiles están al orden del día en nuestro departamento y todas las mañanas tenemos nuestra reunión stand-up en la que todos los miembros del equipo cuentan brevemente que hicieron el día anterior y que tienen previsto para ese día. Por supuesto, en esta reunión nada de estar sentados y suele durar unos 10-15 minutos.

Para organizarnos las tareas y saber que está haciendo cada uno de nosotros utilizamos Trello, el típico tablero Scrum con las diferentes fases por las que pasan las tareas antes de ser desplegadas ( backlog, doing, done, staged y deployed). Para tareas complejas utilizamos un único tablero para esa tarea y así fragmentar mejor la misma.

Una vez ya sabemos que tenemos que hacer ese día, es hora de programar y en muchas ocasiones no lo hacemos solos sino que hacemos pair programming bastante a menudo. Es la primera vez que practico esta técnica y la verdad es que todos son ventajas, en primer lugar porque es una forma de involucrar a todos los miembros del equipo en el desarrollo de todas las tareas y que luego no aparezca la típica frase de “es que eso sólo lo sabe hacer Pepito”.

En todo momento la empresa y su CTO aboga por seguir la metodología TDD (Test Driven Dvelopment), que también era la primera vez que lo utilizaba y de nuevo, tiene muchas ventajas aunque el programador debe cambiar su manera de afrontar los problemas y la verdad es que al principio me ha costado un poco (Recomendar libro) y en más de una ocasión me han cogido algún trozo de código nuevo y me lo han borrado por completo porque no había hecho primero los test. Al principio jode, pero luego te das cuenta de lo importante que son los test en un entorno tan cambiante como es una start-up.

Esto ya no sé si se enmarca dentro de las meotodologías ágiles pero una hora y media antes de terminar la jornada de trabajo, debemos cortar de forma bastante radical lo que estamos haciendo para hacer cualquier otra tarea que aparezca en el tablero Scrum. En ocasiones no te gusta cuando estás con un tarea y no puedes terminarla porque toca cambiar, pero en la mayoría de las veces, ese cambio supone un descanso en una tarea en la que muchas veces estás atascado para pasar a otra y refrescar la mente al mismo tiempo que ir sacando pequeñas tareas pendientes y que casi nunca hay tiempo para desarrollar.

Para analizar como ha ido el día a día, cada dos semanas, los viernes a última hora de la tarde, en un ambiente muy relajado, tenemos lo que llamamos las reuniones retrospectivas en la que cada miembro del equipo expone brevemente y por medio de post-its 5 aspectos (start, stop, more, less, continue) en el que se definen que ideas se deben empezar, parar, ampliar, relajar o continuar en la próxima iteración. Con todas estas ideas puestas en un tablero, cada miembro escoje 3 de esas ideas y posteriormente el CTO las recopila para extraer las 3 más importantes.

Ya en la parte menos relativa al agilismo, comentaros que como gestor de repositorios del código fuente utilizamos git y nos ayudamos de git-flow para gestionar las features, los hotfixes y las releases.

Y ya por último el ambiente en el departamento técnico es increíble y prácticamente todo los días comemos juntos y los viernes tras el trabajo solemos ir a tomar algo junto. Así que lo que decía al principio, estoy muy satisfecho con la decisión tomada.


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Dejo la Universidad de Alicante para trabajar en Londres

16. octubre 2012, 12:57
Se han desactivado los comentarios a este artículo.


Este próximo 2 de Noviembre iba a cumplir ya 8 años en el Laboratorio de Idiomas de la Universidad de Alicante, el lugar donde me he desarrollado como profesional y donde he descubierto que el mundo del funcionariado, quizás no sea todo lo bonito que muchos lo pintan, más aún con los últimos acontecimientos acaecidos en España.

Continue reading »


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

Utilizar correo electrónico con Spring Security Core

12. agosto 2012, 10:35
Se han desactivado los comentarios a este artículo.


Actualmente estoy trabajando en un proyecto del que en breve esperamos tener una primera release y del que todavía no puedo comentar nada. En este proyecto, he tenido que realizar una serie de modificaciones a un plugin que siempre utilizo en cualquier proyecto de Grails que requiera de autenticación mediante usuario y contraseña. Este plugin es Spring Security Core.

Este plugin permite fácilmente implementar todo un sistema de seguridad en una aplicación desarrollada en Grails mediante nombre de usuario y contraseña. En este proyecto necesitaba ampliar este plugin para que en además de poder identificarse mediante nombre de usuario también se pudiera hacer mediante el correo electrónico.

Para poder implementar estos cambios, lo primero que debemos hacer es ampliar la clase relativa a los usuarios del plugin Spring Security Core. Habitualmente esta clase se llama User y quedaría algo así:

Groovy:
class User {

        transient springSecurityService

        String username
        String password
        boolean enabled
        boolean accountExpired
        boolean accountLocked
        boolean passwordExpired
    String email


        static constraints = {
                username blank: false, unique: true
        password blank: false
        email blank:false, unique:true, email:true
        }
       
        ....
}

Posteriormente, debemos crear una clase en el directorio src/groovy para extender la clase GrailsUser que a su vez extiende a la clase User.

Groovy:
import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser

import org.springframework.security.core.GrantedAuthority
import org.springframework.security.core.userdetails.User

class MyUserDetails extends GrailsUser {

    final String email
    final String name
    final String surnames

    MyUserDetails(String username,
                  String password,
                  boolean enabled,
                  boolean accountNonExpired,
                  boolean credentialsNonExpired,
                  boolean accountNonLocked,
                  Collection<GrantedAuthority> authorities,
                  long id,
                  String email) {
        super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities, id)

        this.email = email
    }
}

Por último, debemos crear un servicio de Grails donde modificaremos el comportamiento de la autenticación en Grails para que en lugar de comprobar únicamente por el nombre de usuario, lo haga también con el email que acabamos de añadir.

Groovy:
import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser
import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUserDetailsService
import org.springframework.security.core.authority.GrantedAuthorityImpl
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.userdetails.UsernameNotFoundException

class MyUserDetailsService implements GrailsUserDetailsService {

/** * Some Spring Security classes (e.g. RoleHierarchyVoter) expect at least * one role, so we give a user with no granted roles this one which gets * past that restriction but doesn't grant anything. */
    static final List NO_ROLES = [new GrantedAuthorityImpl(SpringSecurityUtils.NO_ROLE)]

    UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException {
        return loadUserByUsername(username)
    }

    UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User.withTransaction { status ->

            User user = User.findByUsernameOrEmail(username, username)

            if (!user)
                throw new UsernameNotFoundException( 'User not found', username)

            def authorities = user.authorities.collect {
                new GrantedAuthorityImpl(it.authority)
            }

            return new MyUserDetails(user.username,
                    user.password,
                    user.enabled,
                    !user.accountExpired,
                    !user.passwordExpired,
                    !user.accountLocked,
                    authorities ?: NO_ROLES,
                    user.id,
                    user.email)
        }
    }
}

Con estos cambios, ya podremos identificar a los usuarios de nuestra aplicación tanto con el nombre de usuario como por el correo electrónico. Incluso vamos a poder utilizar la etiqueta loggedInUserInfo para mostrar el correo electrónico del usuario identificado en el sistema.

Groovy:
<sec:loggedInUserInfo field="email"/>

Podéis encontrar más información al respecto en la documentación del plugin Spring Security Core y en el blog de Omar Marji.


Menea esta noticia Busca en Technorati enlaces a esta nota Diggea esta noticia Añádeme a tu del.icio.us

« Entradas antiguas