Developing Frogtek

El blog del Departamento de Tecnología

Categoría: aquí huele a cuco

Aquí huele a cuco (V)

Código del Jurásico encontrado en tiendatek.

 
        if (enteredAmount == 0) {
            mTheProduct.setProdPrice(0);
        } else {
            mTheProduct.setProdPrice(enteredAmount);
        }

Al parecer los cambios en la Pangea nos afectaron un poco.

¿Algún comentario o mejora?

Nuestro amigo Eduardo Moreno propone una versión mejorada:

if (enteredAmount * enteredAmount == 0) {
   mTheProduct.setProdPrice(Math.round(3.5* Math.cos(Math.PI/2)));
} else {
   mTheProduct.setProdPrice(enteredAmount * Math.exp(0));
}

Aquí huele a cuco (IV)

Bueno, un poco de autocrítica nunca viene mal y en este caso yo soy uno de los culpables de este desaguisado….

public int getVendorsCount() {
	if (this.mDm.openDBConnection()) {
		this.mDbHelper = new VendorsDbAdapter();
		Cursor cursor = this.mDbHelper.getVendorsCount();
		if (cursor != null) {
			cursor.close();
			return cursor.getCount();
		}
		this.mDm.closeDBConnection();
	}
	return 0;
}

Fijaos bien: estamos intentando acceder a un cursor después de cerrarlo….. además solo cerramos la base de datos si el cursor es null… vamos, una joya de código. Gracias a que tenemos test funcionales en Android hemos encontrado semejante esperpento. Ya vamos recuperando poco a poco lo invertido en ellos 🙂 .

Así he dejado el código después del pertinente refactor.

public int getVendorsCount() {
	int vendorsCount = 0;
	if (this.mDm.openDBConnection()) {
		this.mDbHelper = new VendorsDbAdapter();
		Cursor cursor = this.mDbHelper.getVendorsCount();
		if (cursor != null) {
			vendorsCount = cursor.getCount();
			cursor.close();
		}
		this.mDm.closeDBConnection();
	}
	return vendorsCount;
}

¿Bastante mejor no? ¿Alguna sugerencia para mejorarlo todavía más?

Aquí huele a cuco (III)

Cuando entras en una empresa nueva, descubres partes del código en cierto modo inexplicables. Muchas de ellas las achacas a tu poca experiencia con los entresijos de las aplicaciones que acabas de conocer. Otras, en cambio…

public void makeAppCrash() {
	DataAccessManager.getDbHelper().execSQL("select * form mamamam");
}

De este fragmento se extraen varias dudas:

  • ¿Por qué queremos que en producción se rompa la aplicación?
  • ¿Qué llevó a alguien a escribir “mamamam“?
  • ¿Por qué pone “form” en vez de “from“?

Muchos de estos misterios seguirán sin tener una respuesta. Mientras tanto, el código todavía sigue intacto en busca de alguien que descubra sus más profundos secretos

Aquí huele a cuco (II)

Revisando el código fuente que almacena una venta en la base de datos de la aplicación, me he encontrado con lo siguiente:

public long save(long customerID, long discount, int type, int deviceType) {
        if (this.mDm.openDBConnection()) {
                […]
        }
        this.mDm.openDBConnection();
        […]
}

¡Claro que sí! Por si acaso no estaba la conexión con la base de datos abierta, la abrimos de nuevo en lugar de cerrarla…

Aquí huele a cuco (I)

Desde Frogtek siempre hemos querido buscar la excelencia en nuestro código y en nuestro métodos. El pair programming, el desarrollo orientado a tests y la revisión de código forman parte de nuestro día a día. Pero como el ser humano es propenso a fallos y la mente humana no funciona a veces como debería, podemos ver que no todo es perfecto en el paraíso

Con esta entrada queremos inaugurar una sección en la que sacaremos a relucir los trapos más sucios de nuestros programadores. Bienvenidos todos a la nave del misterio…

Comenzaremos con lo que encontramos en un archivo de Date Utilities, en el que habitan diversas funciones relacionadas con fechas. Concretamente nos fijaremos en dos de ellas

    public static String getFirstDayOfMonth() {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.DAY_OF_MONTH, 1);
        return StringUtilities.getShortStringFromCalendar(c);
    }

    public static String get_nMonthAgoFirstDay() {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.DAY_OF_MONTH, 1);
        return StringUtilities.getShortStringFromCalendar(c);
    }

¿Qué hay detras de este código? ¿Qué motivaciones ocultas llevaron a los programadores a crear este tándem siniestro?