Eclipse – Instalar ant4eclipse y ant-contrib
Noviembre 27, 2009
Primero vamos a instalar ant4eclipse como un plugin.
Cierra el eclipse si lo tienes abierto. Descarga el archivo zip de esta pagina (el tar.gz siempre me decia que estaba corrupto) y luego descomprimelo en la carpeta donde instalaste el eclipse con el comando
sudo unzip ~/Downloads/ant4eclipse-plugin-0.5.0.rc1a.zip
Verifica que se halla instalado abriendo el eclipse y dando clic en el menu Windows->Preferences y luego seleccionando Ant->Runtime en el arbol de la izquierda. Si en el listado de “Contributed Entries” se encuentra algo que diga ant4eclipse ya se ha instalado.
Ahora solo nos queda instalar ant-contrib. Descarga de esta pagina el archivo ant-contrib-[version] y descomprimelo en la carpeta de tu eleccion (yo tengo una llamada “librerias”). Luego desde el Eclipse en el mismo menu donde verificamos la instalacion de ant4eclipse, selecciona “Ant Home Entries (Default)” y da clic en el boton de agregar un jar externo. Seleccionamos el archivo ant-contrib.jar que debe estar en ~/librerias/ant-contrib/lib y damos clic en OK.
Listo, ya deberiamos tener instalado el ant4eclipse y el ant-contrib. byte!

BIRT – Establecer el valor de un parametro(desde un servlet)
Octubre 22, 2009

Con la ayuda de este ejemplo(bueno, el de la version 2.5 que aparece en los comentarios), pude crear un servlet que ejecuta y despliega un reporte de BIRT.
Para establecer el valor de un parámetro desde este servlet, a través del Report Engine API, hay que utilizar la interfaz IRunAndRenderTask (no he visto si se puede con alguna otra).
Lo primero es obtener una referencia a esta interfaz mediante:
IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask( design );
y luego simplemente utilizar el método setParameterValue de la siguiente forma:
task.setParameterValue(“Name”, “Value”);
Fuente:
Integrating BIRT with PHP

Google Earth – Couldn’t create Cache folder
Septiembre 28, 2009
Después de instalar google-earth -mediante ’sudo googleearth.bin’- en Ubuntu. Cada que lo iniciaba me marcaba un error:
could not create directory: /root/.googleearth/Cache
El problema es que al ejecutarse como root crea algunos archivos de configuración para el usuario root.
La solución la encontré aquí.
Basta con borrar (más fácil que cambiar permisos) el directorio ~/.config/Google.
sudo rm -Rf ~/.config/Google

App Engine – Consulta al almacen de datos
Septiembre 16, 2009
String query="select from "+Rim.class.getName(); return (List<Rim>) PMF.get().getPersistenceManager().newQuery(query).execute();
Ahora que empiezo a utilizar el app engine sdk, queriendo hacer una consulta sencillisima me marcaba un error parecido al siguiente
StreamingQueryResult was not included in the set of types which can be serialized
La respuesta la encontre aqui. El punto es que no puedes regresar directamente el objeto StreamingQueryResult al cliente, a pesar de que implemente la interfaz List<T>. En fin, lo unico que tienes que hacer para poder regresar los resultados al cliente es copiar los elementos a un nuevo arreglo de la siguiente forma.
String query="select from "+Rim.class.getName();
List<Rim> rims = new ArrayList<Rim>();
for(Rim rim:(List<Rim>) PMF.get().getPersistenceManager().newQuery(query).execute()){
rims.add(rim);
}
return rims;

Java – Concatenar RTF’s
Septiembre 15, 2009
Para concatenar varios archivos RTF’s en un solo RTF lo unico que tenemos que hacer es:
-
remover la etiqueta rtf de fin de documento del primer archivo
remover la etiqueta de inicio de documento y fin de documento de archivos subsecuentes
remover la etiqueta de inicio de documento del ultimo archivo
esta idea surgio a partir de este post.
El problema es identificar la etiqueta de inicio de documento, ya que depende de la codificacion que se utilizo para crear el archivo. Aqui dejo el codigo que utilicé, espero posteriormente mejorarlo -mediante el uso de expresiones regulares- para que pueda concatenar cualquier RTF (independiente de la codificación). Si alguien sabe como hacer esto, le agradecería deje un comentario
.
Los documentos de entrada como el documento que se regresa son representados como bytes, para que sea más fácil su manejo -ej. documentos almacenados en la base de datos-
private byte[] concatenateRTF(List<byte[]> documentos)
throws UnsupportedEncodingException {
StringBuffer rtf = new StringBuffer(), subRtf;
int indexOfEndTag, indexOfBeginTag;
final String CHARSET = "UTF-8";
final String BEGIN_TAG = "{\\rtf1\\ansi\\ansicpg1252\\uc1 \\deff0\\deflang3082\\deflangfe3082";
final String END_TAG = "\\par }";
for (int docNumber = 0; docNumber < documentos.size(); docNumber++) {
byte[] contenido = documentos.get(docNumber);
if (contenido != null) {
if (docNumber == 0) {
rtf = new StringBuffer(new String(contenido, CHARSET));
indexOfEndTag = rtf.lastIndexOf(END_TAG);
if (indexOfEndTag != -1)
rtf = rtf.replace(indexOfEndTag, indexOfEndTag + END_TAG.length(), "");
} else if (docNumber < documentos.size() - 1) {
subRtf = new StringBuffer(new String(contenido, CHARSET));
indexOfBeginTag = subRtf.indexOf(BEGIN_TAG);
if (indexOfBeginTag != -1)
subRtf = subRtf.replace(indexOfBeginTag,
indexOfBeginTag + BEGIN_TAG.length(), "");
indexOfEndTag = subRtf.lastIndexOf(END_TAG);
if (indexOfEndTag != -1)
subRtf.replace(indexOfEndTag, indexOfEndTag + END_TAG.length(), "");
rtf.append(subRtf);
} else {
subRtf = new StringBuffer(new String(contenido, CHARSET));
indexOfBeginTag = subRtf.indexOf(BEGIN_TAG);
if (indexOfBeginTag != -1)
subRtf = subRtf.replace(indexOfBeginTag,
indexOfBeginTag + BEGIN_TAG.length(), "");
rtf.append(subRtf);
}
}
}
return rtf.toString().getBytes(CHARSET);
}

Java – Bad version number in .class file
Septiembre 11, 2009
El día de hoy me apareció una actualización disponible en mi flamante ubuntu 9.04, como de costumbre le di clic en actualizar sin pensar mucho.
Pues dentro de las actualizaciones venia una actualizacion del JDK, esto ocasiono que Eclipse quitara el JRE de su lista. Esto ocasiono que mis proyectos fallaran miserablemente con el error
java.lang.UnsupportedClassVersionError: Bad version number in .class file
Para corregir esto, simplemente hay que reconfigurar el JRE en las preferencias de Eclipse y -tal vez- recompilar los proyectos (Project->Clean…)


Ubuntu 9.04 64bits – Instalar adobe flash player
Septiembre 8, 2009
Para instalar el plugin de adobe en la version de 64 bits de ubuntu y poder reproducir contenido flash en firefox (youtube) primero tienes que descargar la libreria desde aqui. Al final viene un link donde lo puedes descargar.
Ahora hay que descomprimir el archivo (puede cambiar el nombre por la version)
tar xvzf libflashplayer-10.0.32.18.linux-x86_64.so.tar.gz
y luego copiar la libreria y crear algunos enlaces para que firefox la pueda encontrar
sudo cp libflashplayer /usr/lib/mozilla/plugins/
sudo ln -sf /usr/lib/mozilla/plugins/libflashplayer.so /usr/lib/firefox-addons/plugins/
sudo ln -sf /usr/lib/mozilla/plugins/libflashplayer.so /usr/lib/xulrunner-addons/plugins/
Reinicia firefox para que los cambios surtan efecto y listo!
Fuente: myScienceIsBetter
Smartgwt – Service implementation URL not specified
Septiembre 8, 2009
Si te aparece este error lo mas seguro es que olvidaste “anotar” la interfaz del servicio RPC con el atributo RemoteServiceRelativePath.
@RemoteServiceRelativePath("MyRPCService")
public interface MyRPCService extends RemoteService {
public String getHelloWorld(String name);
}
Aqui lo importante es que la anotación concuerde con nuestras declaraciones del servlet en el archivo de configuracion del modulo, ej. MyModule.gwt.xml, y en el web.xml
MyModule.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6.4//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.6.4/distro-source/core/src/gwt-module.dtd">
<module rename-to="my.web.application">
<inherits name="com.google.gwt.user.User" />
<inherits name="com.smartgwt.SmartGwt"/>
<entry-point class="my.web.application.client.Main" />
<servlet class="my.web.application.server.MyRPCServiceImpl" path="/MyRPCService"/>
</module>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>MyRPCService</servlet-name>
<servlet-class>my.web.application.server.MyRPCServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyRPCService</servlet-name>
<url-pattern>/my.web.application/MyRPCService</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>Main.html</welcome-file>
</welcome-file-list>
</web-app>
byte!



