Trabe ya no escribe aquí. Puedes encontrarnos en nuestra publicación en Medium: medium.com/trabe.

4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

Usando un keystore con Play

| | Comentarios

Este post es para Simón. El otro día mientras le dábamos clase en el Master de Software Libre nos dijo que últimamente no escribíamos mucho. Acto seguido le prometimos un post dedicado. Seguro que se lo tomó a broma :)

Play en su versión actual (1.0.3.1) no soporta keystores, sin embargo, con un poquito de Python podemos modificar el script play para que lo haga.

Alrededor de la línea 468 del fichero $PLAY_HOME/play (en el contexto del método do_java) metemos un código parecido a este:

1
2
3
4
5
6
7
8
9
10
trustStore = readConf('java.trustStore')
if not trustStore == '':
    if os.path.exists(trustStore):
        print "~ using keystore \"%s\"" % trustStore
        java_args.append('-Djavax.net.ssl.trustStore=%s' % trustStore)
        trustStorePassword = readConf('java.trustStore.password')
        if trustStorePassword == '':
            print "~ WARNING: No java.trustStore.password key found in config. You need a password to use a keystore"
        else:
            java_args.append('-Djavax.net.ssl.trustStorePassword=%s' % trustStorePassword)

Y ya podemos configurar nuestro keystore en el fichero conf/application.conf de nuestra aplicación.

1
2
java.trustStore=/home/david/opt/javacerts/development
java.trustStore.password=123456

play run y a correr.

Timestamps automáticos para los modelos de Play

| | Comentarios

Una de las cosas a las que me he acostumbrado al trabajar con Rails es al mantenimiento automático de timestamps (a saber, fecha de creación y fecha de actualización). El framework Play no tiene nada del estilo, así que aquí os dejo la clasecilla que usamos nosotros para obtener este comportamiento. Con sólo dejarla en app/models todos los modelos tendrán los atributos createdAt y updatedAt y sus valores se actualizarán automáticamente. A nosotros nos gusta así, pero podéis afinar el comportamiento a vuestro gusto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package models;

import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;

@MappedSuperclass
public class Model extends play.db.jpa.Model {

    public Date createdAt;

    public Date updatedAt;

    @PrePersist
    void onPrePersist() {
        if (this.createdAt == null) {
            this.createdAt = new Date();
        }
        this.updatedAt = this.createdAt;
    }

    @PreUpdate
    void onPreUpdate() {
        this.updatedAt = new Date();
    }
}

Git 1.7 me hace más feliz

| | Comentarios

La versión 1.7 de Git incluye, entre otras novedades, una nueva opción para el comando git branch: --set-upstream, que facilita fijar que una rama local haga tracking de una rama remota (útil en nuestro primer push por ejemplo).

1
2
3
$ git remote add origin git@myawesomerepo.com:myproject.git
$ git push origin master
$ git branch --set-upstream master origin/master

La última línea sustituye a los mecanismos anteriores: llamar a git config de un modo oscuro

1
$ git config branch.master.merge refs/heads/master

…o bien usar una herramienta externa tipo git_remote_branch.

1
$ grb track master origin

Pefiero usar esta nueva opción.