martes, 18 de marzo de 2014

MongoDB Tips


Actualizar todos los documentos de una colección para agregar un nuevo campo:

db.<COLLECTION>.update({}, {$set: {<NEW_FIELD>:<VALUE>} }, {multi:true})

Renombrar el nombre de una columna/campo

db.<COLLECTION>.update({}, {$rename: {'<OLD_FIELD_NAME>': '<NEW_FIELD_NAME>'}}, false, true);

Exportar/Importar una colección

mongoexport -d <DATABASE> -c <COLLECTION> -o <FILE_PATH>
mongoimport -d <DATABASE> -c <COLLECTION> --file <FILE_PATH>

Remover una columna/atributo en todos los documentos de la colección

db.<COLLECTION>.update({}, {$unset: {<FIELD>:""} }, {multi:true})

Consultar todos los documentos donde un arreglo tiene tamaño mayor a 0

db.<COLLECTION>.find({ $where: "this.FIELD.length > 1" } )

Consultar por tamaño de un arreglo mayor a n

db.getCollection(<COLLECTION>).find({ $where: "this.<ARRAY_FIELD>.length > 8" })

viernes, 14 de marzo de 2014

Log4j: Tips

Cambiar el nivel de log para un paquete o clase 

En el log4j.properties:

log4j.rootLogger=INFO,Stdout
log4j.logger....=DEBUG

SLF4J: Multiple bindings were found on the class path logback

En el proyecto que estoy trabajando utilizamos SLF4J como framework de logging. Estaba teniendo un problema en el cual mis llamados para registrar entradas en el log no estaban apareciendo. Al principio pensé que era un problema con el archivo de log4j ya que esta era la implentación final que se estaba utilizando. Sin embargo luego me dí cuenta de unos mensajes apareciendo al principio del arranque de la aplicación:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/atg-dev/.m2/repository/ch/qos/logback/logback-classic/0.9.28/logback-classic-0.9.28.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/atg-dev/.m2/repository/org/slf4j/slf4j-log4j12/1.6.2/slf4j-log4j12-1.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2014-03-13 21:30:46.718:INFO:/search-indexer:Initializing Spring root WebApplicationContext


Los mensajes estaban indicando que habían varios bindings, es decir, varias implementaciones de logging dentro del classpath. En específico pude ver que aparte de Log4j estaba LogBack, el cual no encontré ninguna referencia en el pom.xml. Había que descubrir la dependencia indirecta/transitiva.

La mejor manera para hallar la dependencia transitiva fue una idea de un compañero de utilizar el plugin de Maven en Eclipse que permite ver la jerarquía de dependencias.



De esa manera pude ubicar la dependencia que incluía al logback y agregar la exclusión:



        <dependency>
            <groupId>com.xxx.content</groupId>
            <artifactId>content-dao-jar</artifactId>
            <version>xx.xx.x.x</version>
            <exclusions>                
                <exclusion>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-classic</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

martes, 11 de marzo de 2014

Git: Lista de comandos útiles

Revertir cambios locales del branch al contenido remoto

git reset --hard origin/<branch>

Fusionar branch2 en branch1

git checkout branch1
git merge branch2

Enviar un branch local al servidor remoto

git push origin branc

Mostrar branches locales

git branch

Borrar branch remoto

git push origin --delete branchname

Borrar branch local

git branch -D the_local_branch

jueves, 6 de marzo de 2014

JMeter: Primeros pasos probando rendimiento de aplicaciones web

Una gran herramienta en la caja de herramientas de todo buen desarrollador de software, es aquella que te permite evaluar el rendimiento de una aplicación. En el caso de aplicaciones web es extremadamente necesario hacer estas pruebas de rendimiento simulando una alta concurrencia de usuarios  debido a la naturaleza concurrente de la web.

Una gran herramienta open source para realizar este tipo de pruebas se llama JMeter de Apache. Con ella puedo crear múltiples solicitudes a una dirección web y medir la respuesta para examinar el compartamiento en términos de rendimiento.


Apache JMeter

Pasos para crear un plan de pruebas sencillo:


  1. Descargar JMeter del sitio web oficial de Apache. En Ubuntu se puede instalar usando el comando: apt-get install jmeter
  2. Agregue un Thread Group al Test Plan: Clic derecho en el test plan ->Add->Threads (Users)->Thread Group
  3. Edite los campos del Thread Group como el número de usuarios y la cantidad de ciclos, entre otros.
  4. Agregamos un HTTP Request: Clic derecho en el Thread Group->Add->Sampler->HTTP Request
  5. Editamos los campos requeridos de acuerdo al tipo de request
  6. Agregamos un listener de acuerdo al tipo de reporte que desemos: Clic derecho en Test Plan->Add->Listener->Graph Results
  7. Damos Start y observamos nuestro gráfico crecer
  8. Interpretamos los resultados y/o ajustamos el plan para obtener la información que requerimos