SVN y Eclipse: Hacer un merge

Publicado en Recursos el 19 de May, 2008 por Lek. (13 comentarios)

Se dice, y seguro que es verdad, que la forma de trabajar con SVN debe ser a base de branches y, una vez probados los diferentes cambios, pasarlo al trunk. Desde Eclipse, con el Subclipse, crear un nuevo branch es muy fácil, pero… ¿cómo se hace posteriormente el merge?

El día que tuve que hacerlo por primera vez seguí las instrucciones de aquí, la parte donde dice Merging Two Different Trees y que, traduciendo, resumiendo y ampliando, dice lo siguiente:

  1. Ponte en la copia local del Eclipse que apunta al trunk (muy importante)
  2. Pulsa botón derecho del ratón, selecciona Team → Merge
  3. En el campo “From” se indica la URL completa del trunk
  4. Selecciona la revisión en la que iniciaste el branch
  5. Desmarca el check del Use “From:” URL
  6. En el campo “To” se indica la URL completa del branch
  7. Selecciona la revisión del branch que quieres juntar (habitualmente será el HEAD)
  8. Pulsa “OK”
  9. Finalmente, comprueba que todo es correcto, corrige posibles problemas en el buildpath y realiza un commit

Este método es exactamente lo que se debe hacer también para volver a una versión anterior (ahora que está de moda, imaginemos el fallo de Debian), salvo el paso 5 ya que estamos con la misma URL. A pesar de que algunos lo odien, SVN es a buen seguro la herramienta de control de versiones más extendida y espero que lo anterior os sirva para vuestro día a día.

Función split para C

Publicado en C/C++, Recursos el 16 de May, 2008 por Fran. (7 comentarios)

Hace poco programando en C, eché en falta una función split al estilo de Java, para dividir una cadena de caracteres en varias usando un carácter separador (ya sé que en el método de Java se pueden usar expresiones regulares, pero yo sólo buscaba la división a partir de un carácter).

Como no existe nada parecido, bueno strtok es algo parecido pero tiene muchos inconvenientes (para muchos es una función maldita), pues me decidí a programar una función que lo hiciera, viendo que parece que funciona bastante bien voy a dejar aquí el código por si a alguien le resultase útil o incluso quisiera mejorarla (es toda vuestra).

#include <stdlib.h>

/* split: Splits a string in parts delimited by a character. */
char **split (char *string, char sep) {

	char **ret;
	char *p = string;
	int i = 0;
	int nParts = 0;
	int len = strlen (string);

	ret = (char **) malloc (sizeof (char *));
	if (ret == NULL)
		return NULL;

	ret[0] = NULL;

	while (i < len) {

		/* Jump the separator characters */
		while ((p[i] == sep) && (i < len))
			i++;

		/* Find a non separator character */
		if (i < len) {
			char **tmp = (char **) realloc (ret,
										(nParts + 2) * sizeof (char *));
			if (tmp == NULL) {
				free (ret);
				return NULL;
			}
			ret = tmp;
			tmp = NULL;

			ret[nParts + 1] = NULL;
			ret[nParts] = (char *) malloc (sizeof (char));
			if (ret[nParts] == NULL) {
				for (i = 0; i < nParts; i++)
					free (ret[i]);
				free (ret);
				return NULL;
			}

			int j = 0;
			for (i; ((p[i] != sep) && (i < len)); i++) {
				ret[nParts][j] = p[i];
				j++;

				char *tmp2 = (char *) realloc (ret[nParts],
											(j + 1) * sizeof (char));
				if (ret[nParts] == NULL) {
					for (i = 0; i < nParts; i++)
						free (ret[i]);
					free (ret);
					return NULL;
				}
				ret[nParts] = tmp2;
				tmp2 = NULL;
			}
			ret[nParts][j] = '\0';
			nParts++;
		}
	}

	return ret;
}

Como podéis ver la función devuelve un array de cadenas de caracteres cuya última posición es NULL, de modo que sólo tengáis que recorrer el array hasta encontrar NULL para conseguir las partes de la cadena dividida. Como es obvio, deberéis liberar la memoria del array devuelto una vez no lo vayáis a usar.

Si veis algún fallo decirlo y se corrige.

Formatos de archivos

Publicado en Recursos el 1 de April, 2008 por Fran. (Sin comentarios)

Seguro que más de una vez has pensado en hacer un programa que involucraba algún archivo binario del cual desconoces su estructura y no sabes dónde encontrarla.

Pues hoy te voy a dar la solución, en Wotsit dispones de una enciclopedia de tipos de archivos y protocolos, clasificados por su extensión y en los cuales dispones de documentos explicando su estructura (ya haya sido conseguida por ingeniería inversa o por otros métodos) y en algunos casos un trozo de código de ejemplo.

A mí me parece un must have en los marcadores. ¿Y a vosotros?

Plugins Eclipse

Publicado en Recursos el 24 de December, 2007 por Lek. (2 comentarios)

Siguiendo con el tema de Eclipse, procedo a explicar una posible configuración de un Eclipse para trabajo web. Mi particular regalo de Nochebuena ;)

Lo primero para utilizar Eclipse es… descargarlo. Para ello y en vistas de realizar nuestros proyectos web, la recomendación tiene que ser la descarga del llamado all in one, una versión con las WebTools ya instaladas y funcionales. Para ello mirar la página de descargas de All-in-one. Ya tenemos todo lo necesario para programar nuestras aplicaciones/servicios web… aunque necesitaremos descargar todavía el servidor a utilizar (Tomcat, JBoss, Apache…).

A nivel personal, para considerar verdaderamente operativo el entorno, echo de menos un par de plugins más: El Subclipse, que nos otorga funcionalidad para trabajar con SVN (un sistema de control de versiones, por defecto Eclipse trae soporte para CVS), y el FindBugs, que nos revisa el código en busca de bugs, irregularidades y otras malas hierbas. En los últimos tiempos, también estoy instalando siempre el Q4E, un plugin para trabajar con Maven. Tanto el primero como el último dependerán de que utilicéis estas tecnologías o no. El Findbugs lo considero imprescindible.

Otro plugin del que se hablan maravillas últimamente, y que quizá metan en el core de Eclipse en la próxima versión, es el Mylyn. Por lo que yo sé, es un plugin para gestión de tareas. Pero aparte de su integración con Trac (o Bugzilla) me ha parecido un poco molesto y tedioso… aunque la idea subyacente es muy buena.

En todo momento estoy pensando en una versión “oficial” de Eclipse… y gratuita. Nada de MyEclipse o Exadel, que son 2 entornos de pago muy superiores en rendimiento y opciones (al menos el 2º, que le he visto) a lo descrito arriba. De todas formas, si queréis probar cómo funcionan las diferentes mezclas de plugins en vuestro entorno de escritorio, también podéis tirar de Pulse, que se encargará de descargaros una versión especialmente configurada a vuestro gusto.

¿Echáis de menos algún plugin?

Presentando Eclipse

Publicado en Recursos el 10 de December, 2007 por Lek. (8 comentarios)

Pues si ayer hablaba de NetBeans, hoy empezaré con Eclipse, ya que a petición de esaiz os comentaré cómo es la manera más fácil de tener un Eclipse configurado para desarrollo web.

Comenzaré presentando la herramienta: Eclipse es un entorno de desarrollo creado inicialmente por IBM, que liberó el código y creó una comunidad a su alrededor. La peculiaridad de este entorno es que se programó por un lado el core de la aplicación, y luego están las mil y una extensiones (plugins) para hacer de todo. Suelo decir que Eclipse es un sistema operativo en sí mismo: puedes mirar el correo, escuchar música, editar documentos de Office, ver PDFs, navegar, sindicarte a blogs… ¡¡incluso puedes programar!!, ¿es o no es la repera?

Pero este tipo de desarrollo tiene sus controversias. Especialmente porque hay extensiones incompatibles entre sí, todas quieren al tipo para ellas solas y hay que hacer malabarismos varios para conseguir que funcionen en sintonía. Para evitar esto, los chicos de la fundación ni cortos ni perezosos empezaron a preparar versiones para descarga ya preparas para ciertas tareas. Y desde el año pasado están las compilaciones masivas: Callisto, Europa (actual) y Ganímedes (el próximo ¿junio?); en teoría, vienen compiladas con una serie de plugins (listados en sus páginas) y se garantiza el correcto funcionamiento entre ellos.