martes, 15 de marzo de 2011

"cannot find symbol", error al compilar

Cuando empezamos a aprender Java un error muy común al compilar desde DOS es que nos encontramos con errores en la compilación y no sepamos como resolverlo. Por ejemplo un de ellos se produce cuando en una clase creamos un objecto a partir de otra clase.

Por ejemplo teniendo estas dos clases, una es Leer.java y la otra Leer3.java que crea el objeto de la case Leer.java:

//Clase Leer.java
import java.io.*;

import java.util.Scanner;

public class Leer{

public String Leer()
{

return porTeclado();

}


public String porTeclado()


{


Scanner leer = new Scanner(System.in);


String cadena = leer.next();


return cadena;


}


}



//Clase Leer3.java

public class Leer3


{


public static void main(String args[])


{


Leer vleer = new Leer();


String cadena = vleer.porTeclado();


System.out.println("Texto leido : " + cadena);


}


}



Partimos de que los dos archivos están guardados en el siguiente directorio:

C:\cursojava\modulor4\practica4\Leer.java

C:\cursojava\modulor4\practica4\Leer3.java



Al compilar las clases según se muestra a continuación, vemos que nos genera un error de "cannot find symbol", en la compilación de la clase Leer3.java, cuando la compilación de la clase Leer.java no ha generado ningún problema.

C:\cursojava>javac modulo4/practica4/Leer.java

C:\cursojava>javac modulo4/practica4/Leer3.java

modulo4\practica4\Leer3.java:6: cannot find symbol


symbol : class Leer


location: class Leer3


Leer vleer = new Leer();


^


modulo4\practica4\Leer3.java:6: cannot find symbol


symbol : class Leer


location: class Leer3


Leer vleer = new Leer();

^

2 errors



El problema es debido a que la clase Leer3 necesita crear el el objecto de la clase Leer pero el compilador desconoce donde se encuentra almacenada dicha clase. Para ello debemos agrupar estas dos clases en un paquete PACKAGE, esta clave la deberemos indicar al principio de cada una de las clases para evitar el error. Hay que tener en cuenta la clave del paquete debe mantener la misma estructura de directorios donde están almacenadas las clases.

Según hemos visto en el ejemplo las clases deberían quedar de la siguiente manera:

//Clase Leer.java

package modulo4.practica4;

import java.io.*;

import java.util.Scanner;


public class Leer{


public String Leer()

{

return porTeclado();

}

public String porTeclado()

{

Scanner leer = new Scanner(System.in);

String cadena = leer.next();

return cadena;

}

}



//Clase Leer3.java

package modulo4.practica4;

public class Leer3


{


public static void main(String args[])


{


Leer vleer = new Leer();


String cadena = vleer.porTeclado();


System.out.println("Texto leido : " + cadena);


}


}


NOTA: También afecta la configuración de la variable de entorno CLASSPATH que para este ejemplo su valor es: c:\Java\jdk1.6.0_23\lib;c:\cursojava

martes, 22 de febrero de 2011

Recursos interesantes de JAVA

Al igual que en el post de PHP también es interesante tenerlo para JAVA.

LENGUAJE

TUTORIALES
  • Un tutorial que es antiguo por está bastante claro. (unam.mx)

Recursos interesantes de PHP

Siempre que te enfrascas en el aprendizaje de una nueva tecnología como puede ser PHP empiezas a buscar y buscar información, documentación, ejemplos, vídeos, etc. Todo ello implica que con el tiempo se te acumula todo tipo de información y sobre todo recursos de la web, que a continuación he organizado para simplificar encontrarlos.

LENGUAJE

TUTORIALES

La web aulaformativa.com nos ofrece unos vídeos de su primer taller de php, realizado en 3 días. (instrucciones para descargar los vídeos)

Ejemplos de código de phpMyEdit en http://www.php-html-form.com/.

UTILIDADES

phpMyEdit, genera código para ver tablas de MySql en PHP.

PHPExcel, clase para generar y leer archivos de Excel.

lunes, 20 de diciembre de 2010

Instalación de XAMPP en Windows y Ubuntu

XAMPP es un servidor independiente de la plataforma, software libre que consiste principalmente en la base de datos MySql, el servidor Web Apache y los interpretes para los lenguajes de script PHP y PERL. Está disponible para diferentes sistemas operativos como pueden ser Microsoft Windows, GNU/Linux y otros.
En la web oficial de XAMPP http://www.apachefiends.org se puede obtener más información del funcionamiento del programa, instalación, ayuda y otra información que puede ser relevante para el buen funcionamiento del entorno del servidor.
Sistema operativo Windows
Deberemos de disponer de una de las versiones siguientes del sistema operativo NT, 2000, XP, Vista o Windows 7. Para una mayor ampliación de los sistemas operativos compatibles visita la web:

Una vez revisados los requisitos d
el sistema operativo podemos proceder a la instalación de XAMPP. Si no disponemos del programa XAMPP podemos descargarlo del siguiente enlace:

http://www.apachefriends.org/en/xampp-windows.html#641

Ejecutaremos el programa xampp-win32-1.7.3.exe (1.7.3 no indica la versión) en la ubicación donde hemos efectuado la descarga. Nos pedirá la carpeta de destino de la instalación que se está realizando (figura 1) y pulsaremos el botón INSTALL, la cual cosa iniciará el proceso de instalación (figura 2).
Al finalizar el proceso de instalación, nos aparecerá un cuadro de dialogo en entorno de consola donde nos preguntará si queremos añadir accesos directos al menú inicial y al escritorio. Es recomendable indicar que sí que queremos este acceso directo.
Una vez finalizados estos pasos ya podemos iniciar el entorno, para hacerlo ejecutaremos el panel de control que podemos localizar en el escritorio (si lo hemos indicado) o en el menú de programas. Cuando el panel de control esté en funcionamiento (figura 3) podemos iniciar el servidor Apache y la base de datos MySql mediante los botones con leyenda START. El los programas inician sin ningún problema veremos el panel de control como parece en la figura 4.
Podemos testear el funcionamiento del servidor abriendo un explorador web e introduciendo la dirección del servidor local http://localhost (figura 5).


Sistema operativo Ubuntu
Para realizar la instalación son necesarios permisos de administrador. La instalación puede efectuarse mediante el comando SUDO si no se ha iniciado la sesión como administrador o bién iniciando la sesión como administrador.
Atención: Todo el proceso de instalación que se explica a continuación se ha realizado mediante el usuario ROOT. En consecuencia no se muestra el funcionamiento mediante SUDO
Una vez revisados los requisitos del sistema operativo podemos proceder a efectuar la instalación del XAMPP, anteriormente conocido como LAMPP. La versión de este programa deberá ser como mínimo la 1.7.3.
Si no disponemos del programa XAMPP podemos descargarlo del enlace siguiente:
Nota: En el caso de disponer de una versión anterior a la 1.7.3 se puede obtener la versión de actualización del programa, pero no se explicará en este manual como efectuarla.
Nota: Si se descarga el archivo en un sistema operativo Windows y se está ejecutando el programa antivirus Mcfee, este puede dar un falso positivo de virus. Es problema de Mcafee y los archivos comprimidos gzip, ignóralo.
Una vez tengamos el archivo comprimido descargado o bien lo tangamos en otro soporte, procederemos a la extracción del archivo. Nos deberemos situar en el directorio donde está situado el archivo comprimido y extraeremos el contenido con el archivo “xampp-linux-1.7.3a.tar.gz” al directorio opt:
    # tar xvfz xampp-linux-1.7.3a.tar.gz -C /opt
Nota: Solo utiliza este comando para instalar XAMP, no utilices ninguna herramienta de extracción de archivos de Widnows. No funcionará. Si hubieran instalaciones anteriores de XAMPP estas quedarían sobrescritos con este comando, siempre y cuando el servidor estuviera parado.
Con este comando el paquete XAMPP ha quedado instalado en el directorio /opt/lampp. Todo este proceso también lo podemos realizar mediante la interficie gráfica teniendo en cuenta les precauciones anteriormente descritas.
El proceso de instalación de XAMPP ya está finalizada, ahora sólo queda arrancar lo con elc omando siguiente (figura 6):
# /opt/lampp/lampp start
Y una vez ya esta correctamente funcionando podemos testearlo abriendo un explorador web e introduciendo la dirección del servidor local http://localhost (figura 7).

Comandos y directorios de XAMPP en Ubuntu
El entorno XAMPP para Linux no dispone del panel de control que tiene la versión de Windows, para poder arrancarlo, pararlo, etc. Se deben de utilizar un conjunto de comandos que a continuación se describen:

PARAMETRO DESCRIPCIÓN
start Arrancar XAMPP.
stop Para XAMPP.
restart Reiniciar XAMPP.
startapache Inicializa sólo el Apache.
startssl Inicializa Apache con soporte SSL.
startmysql Inicializa sólo la base de datos MySQL.
startftp Inicializa el servidor ProFTPD. Via FTP se pueden subir archivos por la web server (user "nobody", password "lampp").
stopapache Para el Apache.
stopssl Para el suporte SSL del Apache.
stopmysql Para la base de datos MySQL.
stopftp Para el servidor ProFTPD.
security Inicializa un pequeños programa de verificación de la seguredad.
Los archivos y directorios más relevantes son:

Archivo/Directorio Propostio
/opt/lampp/bin/ Directorio de comandos de XAMPP. /opt/lampp/bin/mysql llama por ejemplo el monitor de MySQL.
/opt/lampp/htdocs/ El directorio principal de los documentos de l'Apache.
/opt/lampp/etc/httpd.conf El archivo de configuración de Apache.
/opt/lampp/etc/my.cnf El archivo de configuración de MySQL.
/opt/lampp/etc/php.ini El archivo de configuración de PHP.
/opt/lampp/etc/proftpd.conf El archivo de configuración de ProFTPD. (desde la versión 0.9.5)
/opt/lampp/phpmyadmin/config.inc.php El archivo phpMy


sábado, 11 de diciembre de 2010

CONVERTIR PDF A EPUB CON CALIBRE

Al utilizar el programa Calibre v.0.7.32 para convertir un documento en formato PDF y pasarlo al formato EPUB me encuentro que el conversor no realiza un ajuste incorrecto en los párrafos, generándose saltos e insertando líneas en blanco.

Por ejemplo, el párrafo en el documento PDF

"Luis Wu volvió a la realidad en el centro del Beirut nocturno, en el interior de una de las varias cabinas teletransportadoras de uso general."

Al pasarlo a EPUB queda como sigue

"Luis Wu volvió a la realidad en el centro de Beirut nocturno, en el interior de una de las varias cabinas

teletransportadoras de uso general"


Esto se puede evitar modificando las opciones de conversión que ofrece Calibre. Al pulsar sobre el icono de conversión seleccionaremos la opción de "Entrada PDF" y en "Factor para unir líneas divididas" estableceremos el valor de 0,45.

Esto modificará la forma en que Calibre lee el documento PDF para efectuar una correcta conversión a EPUB,

viernes, 9 de abril de 2010

UTILIZAR LEVEL PARA DUPLICAR REGISTROS EN UNA CONSULTA

A veces nos interesa duplicar, triplicar o tener n copias de un mismo registro de la base de datos por cualquier motivo. Un ejemplo sería hacer n copias de la misma factura para un cliente.
Para abordar esto lo podemos hacer de muchas maneras, utilizando bucles en el código, con SQL sin intervención de ningún tipo de bucle u otras maneras que seguro sabréis ;).

En el siguiente ejemplo de enfoque de la solución he optado por SQL, ya que la motivación inicial era aplicarlo directamente en la consulta de obtención de datos para REPORTS 6.

Para simplificar el ejemplo supondremos que tenemos los siguientes datos en una tabla llamada Cliente con estos datos


Nombre Copias
----------- ---------

Jordi .......... 3
Pedro
........ 2
Elisa
.......... 4
Utilizaremos la tabla DUAL para obtener una cantidad ilimitada de registros, pero para el ejemplo lo limitaremos a 5 registros.


SELECT LEVEL Registro FROM DUAL CONNECT BY LEVEL <= 5

Nota: cuidado con ejecutar SELECT LEVEL Registro FROM DUAL CONNECT BY LEVEL > 0, ya que la generación de la tabla temporal se comerá toda la memoria. (con 40.322.423 registros mi portatil se quedó sin memoria virtual)

Esto nos generará un conjunto de registros que quedaría así:


Registro
------------
1
2
3
4
5
Efectuamos la unión entre las dos tablas para obtener el conjunto de registros indicados en el campo copias de la tabla cliente.


SELECT c.nombre, c.copias, d.registro
FROM cliente c,
( SELECT LEVEL registro
FROM DUAL
CONNECT BY LEVEL <= 5 ) d WHERE c.copias >= d.registro
El resultado que obtenemos:


NOMBRE COPIAS REGISTRO
-------------- ------------ ----------------JORDI ............3................. 1
JORDI ............3................. 2
JORDI ........... 3................. 3
PEDRO ..........2................. 1
PEDRO ..........2................. 2
ELISA ...........4.................. 1
ELISA ...........4
.................. 2
ELISA
...........4.................. 3
ELISA
.......... 4.................. 4

jueves, 25 de marzo de 2010

ERROR INSTALACION FORMS 6 EN WINDOWS 7


Al efectuar el proceso de instalación de Oracle Forms 6 en Windows 7 se produce un error si se dan una serie de circunstancias.

Si el instalador intenta instalar el driver ODBC 32 bits, se produce un error:
odbo3220.ins(182): OS_ERROR while...
y la instalación no continúa.

El problema se genera al registrar los productos de Oracle Forms 6 si no se es el usuario Administrador de Windows 7, incluso teniendo derechos de administrador.

Para poder instalarlo correctamente y sin errores debemos efectuar el proceso de instalación como el usuario Administrador.