sábado, 27 de diciembre de 2008

Convert xdxf to StarDict format in Linux

Para convertir de xdxf a StarDict formato es necesario tener instalada la herramienta tabfile o stardict-editor que permite convertir de un formato de texto tabulado a stardict. La herramienta tabfile, en Ubuntu 8.04 se encuenta en la siguiente ruta:

/usr/lib/stardict-tools/tabfile

Ahora sólo queda convertir de xdxf a este formato tabulado, para ello he realizado un pequeño script que usa el awk que lo permite hacer. El script es el siguiente:

----------- INICIO DEL SCRIPT: xdxf2tabfile -----------


#!/bin/bash
###############################################################################
### Script to calculate the estimated time to finish a process. ###
### ###
### LICENSE: ###
### estimatetime is free software: you can redistribute it and/or modify ###
### it under the terms of the GNU General Public License as published by ###
### the Free Software Foundation, either version 3 of the License, or ###
### (at your option) any later version. ###
### ###
### estimatetime is distributed in the hope that it will be useful, ###
### but WITHOUT ANY WARRANTY; without even the implied warranty of ###
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ###
### GNU General Public License for more details. ###
### ###
### You should have received a copy of the GNU General Public License ###
### along with InTiMe. If not, see . ###
### ###
### AUTHORS: ###
### José Manuel Gómez Soriano ###
###############################################################################
usage()
{
echo "Usage:" `basename $0` "file.xdxf > file.tab"
echo " " `basename $0` "-h"
echo `gettext "Convert the xdxf format to a text tab file."`
echo
echo -e " -h\t\t\t"`gettext "Show this help."`
}

while getopts "h" option
do
case "$option" in
h) usage; exit 0;;
[?]) usage; exit 1;;
esac
done
shift $(($OPTIND-1))

if [[ $# -ne 1 ]];
then
echo -e "ERROR: A file xdxf it is necessary as first parameter.\n" > /dev/stderr
usage
exit 1
fi

file=$1

if [[ !( -f $file ) ]]
then
echo -e "ERROR: The first parameter must be a file or -h.\n" > /dev/stderr
usage
exit 1
fi

awk '
BEGIN{
isword=0;
rep[" "]=" ";
rep["ɪ"]="ɪ";
rep["ú"]="ú";
rep["ə"]="ə";
rep["≈"]="≈";
rep["ó"]="ó";
rep["ñ"]="ñ";
rep["æ"]="æ";
rep["é"]="é";
rep["í"]="í";
rep["ʃ"]="ʃ";
rep["ʌ"]="ʌ";
rep["ɔ"]="ɔ";
rep["ʳ"]="ʳ";
rep["ɒ"]="ɒ";
rep["►"]=">";
rep["ɳ"]="ɳ";
rep["ʒ"]="ʒ";
rep["➣"]=">";
rep["á"]="á";
rep["¡"]="¡";
rep["♦"]="♦";
rep["ʊ"]="ʊ";
rep["¿"]="¿";
rep["ɜ"]="ɜ";
rep["ɑ"]="ɑ";
rep["Á"]="Á";
rep["ɵ"]="ɵ";
rep["Ÿ"]="Ÿ";
rep["ð"]="ð";
rep["➙"]=">";
rep["ü"]="ü";
rep["ð"]="ð";
rep["ɲ"]="ɲ";
rep["É"]="É";
rep["Ó"]="Ó";
rep["¨"]="¨";
rep["Í"]="Í";
rep["ê"]="ê";
rep["ª"]="ª";
rep["î"]="î";
rep["´"]="´";
rep["ç"]="ç";
rep["ï"]="ï";
rep["£"]="£";
rep["ɴ"]="ɴ";
rep["ρ"]="ρ";
rep["°"]="°";
rep["ã"]="ã";
rep["ô"]="ô";
rep["‚"]=",";
rep["Ú"]="Ú";
rep["à"]="à";
rep["â"]="â";
rep["è"]="è";
rep["œ"]="œ";
rep["•"]="·";
rep["º"]="º";
rep["è"]="è";
rep["è"]="è";
}
/.*<\/k>/{
gsub("|<\/k>","");
printf("%s\t",$0);
isword=1;
}
/<\/ar>/{print "";isword=0}
/[^<\/ar>]/{
if(isword==1) {
for(ex in rep)
gsub(ex,rep[ex]);
printf("%s\\n",$0)
}
}
' $file


----------- FINAL DEL SCRIPT: xdxf2tabfile -----------

El problema de este script es que no están incluidos todos los caracteres xx; pero si tu archivo xdxf estaba en utf-8 y no utilizaba estos caracteres entonces no habrá ningún problema. También puedes ir añadiendo estos caracteres en el array rep[].

Una vez ha sido creado este script los pasos son los siguientes:

xdxf2tabfile dic.xdxf > dic.tab
tabfile dic.tab

¡Y ha está!

domingo, 21 de diciembre de 2008

Activar el modo "Dedicate folder" en NetBeans

A partir de la versión 6.1 del Netbeans, existe la posibilidad de añadir las librerías al proyecto mediante un mecanismo de "importación" que coloca dichas librerías en el directorio lib/ de tu proyecto. Esto permite poder compartir por subversion esas librerías y compilarlas sin tener que modificar ninguna ruta en el build.xml. El problema es que la opción sólo te la ofrece el netbeans cuando creas un proyecto nuevo. Si no lo tienes creado debes hacer lo siguiente:

En el archivo nbproject/project.xml añadir las siguientes líneas:

<libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
    <definitions>./lib/nblibraries.properties</definitions>
</libraries>

Después del elemento data. Ejemplo.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
    <type>org.netbeans.modules.java.j2seproject</type>
    <configuration>
        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
        ...
        </data>
        <libraries xmlns="http://www.netbeans.org/ns/ant-project-libraries/1">
            <definitions>./lib/nblibraries.properties</definitions>
        </libraries>
    </configuration>
</project>


Después crear un archivo en lib/ llamado nblibraries.properties con el siguiente código:

libs.junit.classpath=\
    ${base}/junit/junit-3.8.2.jar
libs.junit_4.classpath=\
    ${base}/junit_4/junit-4.1.jar


A continuación ya se puede añadir librerías al proyecto.

miércoles, 12 de noviembre de 2008

Crear un nuevo repositorio SubVersion

Realizar un nuevo repositorio es muy sencillo. El primer paso es llamar al svnadmin:

svnadmin create /srv/svn/prueba/
Con esto creamos un nuevo repositorio subversion llamado 'prueba'. Ahora le damos los permisos, para ello modificamos el archivo conf/svnserve.conf de la siguiente manera:
[general]
anon-access = none
auth-access = write
password-db = passwd
Donde definimos que no tengan acceso los usuarios anónimos, que los usuarios registrados tengan permisos de lectura/escritura y que el archivo de usuarios y passwords sea 'passwd' en el mismo directorio donde se encuentra la configuración.

Por último definimos el archivo de usuarios y passwords 'passwd':
[users]
pepito=5agachatequetela
Donde por cada usuario debemos escribir una línea en que a un lado del igual esté el nombre del usuario y al otro la contraseña.

Esta información ha sido obtenida a partir del Joan Puiggali en la dirección:

http://www.kopernix.com/?q=svnd_como

Montar un servidor subversion

Supongamos que tenemos el proyecto "prueba". Lo que vamos ha hacer es crearle un repostorio para el solito. Las fuentes de prueba las tenemos en el directorio "prueba" de nuestro home.

1. Crear un nuevo repostorio, en el servidor (puedes crear tantos como quieras):
mkdir -p /srv/svn/prueba/
svnadmin create /srv/svn/prueba/

Arrancar el servidor en modo demonio:

Fíjate que ademas le doy el "-r", para que no permita salir /srv/svn/, que es donde tengo guardados todos los repostorios. Ademas con esto haces que los clientes, no tengan que escribir el path completo, para el caso seria: svn checkout svn://host.example.com/prueba. Si no utilizas "-r" tendrian que poner que indicar que el repostorio es /srv/svn/prueba; ademas de las consideraciones de seguridad que se deducen.

svnserve -d -r /srv/svn/

Asegurate de tener accesible el puerto 3690 (TCP y UDP).

Ahora hacer una autentificación básica, sobre un fichero de texto plano en /srv/svn/prueba/conf/svnserve.conf pon lo siguiente:

[general]
anon-access = none
auth-access = write
password-db = passwd


Esto seria para: anonimos sin lectura ni escritura; autentificados lectura y escritura.

Lo que ves detras de "password-db", es el nombre de fichero de contraseñas. El path es referente al fichero desde el que lo llamamos por lo tanto en este caso seria /srv/svn/prueba/conf/passwd. Aqui su contenido de ejemplo (con un usuario).

[users]
pepito=5agachatequetela

Con esto ya estaría montado el servidor SubVersion y el repositorio prueba. Esta información ha sido obtenida a partir del Joan Puiggali en la dirección:

http://www.kopernix.com/?q=svnd_como

martes, 11 de noviembre de 2008

Configurar subversion para que trabaje como demonio

El demonio que controla el servicio SubVersion de llama svnserve y para configurarlo se debe agregar estas líneas al archivo /etc/services:

svnserve 3690/tcp # Subversion svnserve
svnserve 3690/udp # Subversion svnserve

Además se debe agregar como servicio dentro del sistema xinet.d.

Para esto se crea el siguiente archivo /etc/xinetd.d/svnserve:

# default: on
# Subversion server
service svn
{
socket_type = stream
protocol = tcp
user = svn
wait = no
disable = no
server = /usr/bin/svnserve
server_args = -i -r /home/svnroot
port = 3690
}

Para iniciar el servicio hay que reiniciar xinetd:

/etc/init.d/xinetd restart

Con esto, deberíamos tener el servidor operando. Hay que colocar atención con las reglas del firewall donde debemos habrir el puerto 3690 para tcp y udp.

Este texto ha sido extraído de:

http://joniux.x-red.com/2008/03/31/instalando-un-servidor-subversion/


jueves, 4 de septiembre de 2008

runtime descriptor: runtime modeler error: Wrapper class es.ua.itm.jaxws.Run is not found. Have you run APT to generate them?

El siguiente error se crea cuando la librería JAXB 2.1 no se incluye en el proyecto por DELANTE de JAX-WS 2.1.

SEVERE: Exception sending context initialized event to listener instance of class com.sun.xml.ws.transport.http.servlet.WSServletContextListener
com.sun.xml.ws.transport.http.servlet.WSServletException: WSSERVLET11: failed to parse runtime descriptor: runtime modeler error: Wrapper class es.ua.itm.jaxws.Run is not found. Have you run APT to generate them?
at com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:118)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1114)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1212)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Thread.java:619)

lunes, 1 de septiembre de 2008

[wsimport] Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

El siguiente error me ha aparecido nada más volver de vacaciones, sin razón aparente:

[wsimport] Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
[wsimport] at com.sun.org.apache.xml.internal.resolver.readers.TextCatalogReader.nextToken(TextCatalogReader.java:249)
[wsimport] at com.sun.org.apache.xml.internal.resolver.readers.TR9401CatalogReader.readCatalog(TR9401CatalogReader.java:81)
[wsimport] at com.sun.org.apache.xml.internal.resolver.Catalog.parseCatalog(Catalog.java:680)
[wsimport] at com.sun.xml.ws.util.xml.XmlUtil.createEntityResolver(XmlUtil.java:222)
[wsimport] at com.sun.tools.ws.wscompile.WsimportOptions.parseArguments(WsimportOptions.java:140)
[wsimport] at com.sun.tools.ws.wscompile.Options.parseArguments(Options.java:225)
[wsimport] at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:154)
[wsimport] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[wsimport] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[wsimport] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[wsimport] at java.lang.reflect.Method.invoke(Method.java:597)
[wsimport] at com.sun.tools.ws.Invoker.invoke(Invoker.java:116)
[wsimport] at com.sun.tools.ws.WsImport.main(WsImport.java:52)

BUILD FAILED
/home/jmgomez/Documents/Projects/intime/nbproject/jaxws-build.xml:59: wsimport failed


Lo he solucionado eliminando la referencia al web service que tenía en la aplicación (update.xml) y volviéndola a crear. La razón por la que me ha aparecido este error me parece que es porque modifiqué el build.xml, porque hago la referencia en otro proyecto y éste funciona perfectamente.