jueves, 29 de enero de 2009

Clean Code: Cohesión en clases

Alta cohesión en una clases se ve reflejada en:
  • Bajo número de atributos. Si se usa la estrategia de funciones pequeñas y con pocos argumentos, los atributos subirán en número. Cuando esto pasa es porque la clase se debiera dividir en más clases.
  • Cada método usa muchos (ojalá todos) los atributos de la clase. Utopía: todos los métodos usan cada uno de los atributos de la clase.

Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884

miércoles, 28 de enero de 2009

SQL para obtener datetime pasado que sea multiplo de 5

Con este input:

set @a = '2009-01-28 16:57:50';

el sgte sql:

SELECT DATE_SUB(DATE_SUB(@a, INTERVAL (MINUTE(@a) MOD 5) MINUTE), INTERVAL SECOND(@a) SECOND)

produce como resultado:

2009-01-28 16:55:00

martes, 27 de enero de 2009

Clean Code: Single Responsibility Principle

Single Responsibility Principle: a class or module should have one, and only one reason to change.

Los componentes grandes o con varias responsabilidades tienen varias razones para cambiar: cambios en cualquiera de sus responsabilidades.

Si un componente cambia, hay que probarlo entero. Si el componente es grande, eso es costoso.


Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884

Clean Code: Class Organization - Java convention

To read a class like a newspaper article:

class Example {
public static constant;
private static variable;
public static instanceVariable;
public publicVariable; //there is seldom good reason for this

public method1(){
...
}

private method2(){
...
}
}


Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884

lunes, 26 de enero de 2009

Manejo de strings en java provenientes de BD en utf8

Si en una BD tengo string encodeados en utf8, al obtenerlos en un programa java, el java no les hace un decode de utf8, sino que los trata con el encoding default de la jvm (lo cual es indeterminado). Por lo tanto, cualquier tilde en utf8 si se imprime desde el java, se verá como un garabato.

La solución es obtener los bytes que vienen de BD encodeados en latin1 y luego hacerles un decode explicitando que en realidad están en utf8:

titulo = getTituloFromDB();
titulo = new String(titulo.getBytes("latin1"),"UTF-8"));

Así, la variable titulo se podrá ver sin garabatos en una consola utf8.

lunes, 19 de enero de 2009

Clean Code: Using Third-Party Code

Hay clases en las librerías hechas por externos que ofrecen muchas funcionalidades.
Si se pasan objetos de ese tipo de clases entre métodos de la aplicación, se corre el riesgo de que en algún lado se usen de manera indebida.

Ej: si en java se usa un Map y ese Map es usado en varios métodos (se retorna o se pasa como argumento), se corre el riesgo de que en alguna parte se le haga un delete o un insert siendo que quizás eso no esté dentro de la lógica diseñada desde un principio.

Mejor: Hacer un wrapper de Map y exponer sólo los métodos que caben dentro del diseño de lo que queremos.

Ej:

public class Sensors {
private Map sensors = new HashMap();
public Sensor getById(String id) {
return (Sensor) sensors.get(id);
}
...
}



Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884

jueves, 15 de enero de 2009

CleanCode: Don't Pass Null

Pasar nulls como argumentos a los métodos provoca que los métodos que se construyen tengan que preocuparse de esos casos. Es un lastre que tendrá que tener todo método que reciba como argumento un objeto.

Mejor acostumbrarse a que si llega un null como argumento, es un error de programación.


Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884

CleanCode: Don't Return Null

Evitar retornar nulls en los métodos.
Esto porque requiere que quien lo llama se preocupe de manejar ese caso especial con un if fácilmente olvidable.
Mejor, arrojar una excepción o si no es el caso, retornar algún objeto que permita salir del paso, ej: Collections.emptyList()


Ref:
Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin Series)
Publisher: Prentice Hall PTR; 1 edition (August 11, 2008)
ISBN-10: 0132350882
ISBN-13: 978-0132350884

EXT4 filesystem in Ubuntu 9.04

the EXT4 filesystem was implemented in the upcoming Ubuntu 9.04 Alpha 3 a couple of days ago and it will be available in the Ubuntu Installer, if you choose manual partitioning.

Ref

miércoles, 14 de enero de 2009

Accessing GET-parameters with Restlet

Today, I needed to read HTTP-GET parameters in a restlet, e.g. http://localhost/restlet?someParam=foo, and came up with:
request.getResourceRef().getQueryAsForm().getFirstValue("someParam");

Referencia aqui

How to export environment variables for a java Runtime.exec in Linux

Usar el comando linux "env", luego de él van las variables a exportar y al final el comando que se quiere ejecutar dentro del nuevo environment.

Ej: para ejecutar test.sh con la variable LOG_DIR=/home/pablo/logs:

env LOG_DIR=/home/pablo/logs /home/pablo/test.sh