lunes, 19 de febrero de 2018

Ubuntu Grub

1. Cuando al instalar una actualización no te puede istalar el grub


Si cuando instalas una actualización te dice que no ha podido instalar el grub, que es lo que me ha pasado a mi en Ubuntu 16.04, entonces, antes de reiniciar el sistema miras en "discos" y buscas el disco que sea "bootable" o de arranque


En este caso el disco es /dev/sda

Y le damos a esta orden:

sudo grub-install /dev/sda 

Y me ha arrancado el sistema


Pero si no te arranca

2. Si no arranca


Hay que realizar un disco USB de arranque con el sistema Ubuntu.

Puede que el USB contenga una partición anterior. Intenta formatearla. (Se puede hacer viendo el explorador de archivos y haciendo click con el raton derecho del ratón encima del disco y seleccionar formatear.

Si no se deja formatear y da el siguiente error:

This partition cannot be modified because it contains a partition table; >please reinitialize layout of the whole device. (udisks-error-quark, 11)

Entonces ejecutas "discos" en la "Unity dash", y te coloocas encima del disco (en mi caso /dev/sdi) y le das a "Control + f" y format. Esta solución ha sido dada por ask ubuntu.

A continuación te descargas la imagen de Ubuntu .

Te vas creador de discos de arranque de Ubuntu (Si no lo tienes te lo descargas del software ubuntu "Startup Disk Creator") y le dices que te cree un disco de arranque asociado a una imagen ISO que es la que hemos descargado.



Y le damos y ya lo tenemos.


martes, 13 de febrero de 2018

Videos, impres, inglés, Pitivi, edición de vídeos y otras hierbas

El otro día tuve que crear un vídeo con a partir de una presentación de Openoffice Impres, y una banda sonora grabada.

Veamos los pasos que tuve que hacer.

1. Comprobar que Openoffice tenga el plugin de guardar una presentación en vídeo, sinó, de esta url se puede obtener.

2. Crear la presentación con Impress.

3. Grabar el audio (ya sea con un móvil o como podamos o queramos) en un fichero.

4. En principio el fichero de audio impone la duración del vídeo. Supongamos que el audio dura 2:15 (2 minutos y 15 segundos) y queremos que dure en total 2:00 .

5. Supongamos que tenemos 10 diapositivas en impres. Le damos Guardar Como Video (Save As video) y nos pregunta cuantos segundos queremos que dure cada diapositiva en el video (Como hay 2 minutos, tenemos 120 segundos, y como hay 10 diapositivas, sale una media de 12 segundos). Por tanto hemos generado un video de 120 segundos.

6. Instalar el programa Pitivi (si estamos en ubuntu)

sudo apt-get update
sudo apt-get install pitivi
7. En la parte superior izquierda está el botón "+ Import", que te permite traer al proyecto los elementos multimedia que queramos. En nuestro caso importamos el video obtenido en Impress y el fichero de audio grabado en el móvil.






8. Arrastramos hacia la parte de abajo (el vidoe y luego el audio) colocando cada elemento en una pista. Como nos sobran 15 segundos del audio, lo recortamos con el raton.

9. Le damos al icono de Render y nos genera un fichero tipo "Ogg" o HTML5 video o el que queramos. Se aconseja el formato último ya que ocupa menos. Y ya está




10. Hay conversores online a mp4 desde los formatos anteriores, ya que el formato mp4 de pitivi le cuesta mucho tiempo hacerlo.


lunes, 12 de febrero de 2018

Oracle 1- Instalar Oracle Express 11 g en Ubuntu

1. Desinstalar anteriores instalaciones de Oracle 11g XE de Ubuntu

Conectarse como usuario root o super usuario 
$ sudo su
Teclear:
# /etc/init.d/oracle-xe stop
# dpkg --purge oracle-xe
# rm -r /u01/app
# rm /etc/default/oracle-xe

# update-rc.d -f oracle-xe remove
# update-rc.d -f oracle-mount remove
# update-rc.d -f oracle-shm remove

2. Instalar Oracle 11g XE Ubuntu

Parece ser  que hay versiones de instalacion para Linux, pero no para versiones de Ubuntu. O sea los paquetes de instalaciónson "rpm" pero no "deb", parece ser que aunque se convierta con el programa "alien", hay que hacer algunas transformaciones.

Para ubuntu 16.04 he seguido las claras instrucciones de J.M. Guimera.
También hay otra url pero es mas antigua y se aplica a versiones de Ubuntu mas antiguas.

OJO: Hay que REINICIAR la MAQUINA!!!

Una vez instalado el producto. Recordar los comandos para arrancar, rearrancar y parar el servicio.

    sudo service oracle-xe (start/restart/stop)

Y tambien para reconfigurar contraseña y puertos de la aplicacion:

   sudo /etc/init.d/oracle-xe configure

Una vez instalado se puede acceder buscando en programas y aparece el icono


que ejecutado nos muestra una pantalla en un navegador, que apunta al puerto que se indicó, en mi caso al 10080, siguiendo instrucciones de JMGuimera.

Ahora nos vamos a la pestaña de Application Express y creamos un WorkSpace al que damos usuario y contraseña nueva.





a continuación entrar con el boton de la mitad de altura a la derecha (Already have an account? Login)




y vcrificar que se puede entrar con el login.

OJO: Dar el mismo nombre de usuario que el del Workspace!!!. Aquí en la imagen se está dando distinto nombre y luego he tenido un monton de problemas



3. Instalar Oracle Developer en Ubuntu 16.04

Seguir las instrucciones de instalación de Dizwell Informatics.

Una vez instalado probar que se puede:

En un terminal ejecutar "sqldeveloper" y ver que se accede


Crear una conexion: Hay que tener en cuenta el puerto de acceso a la BD que se dió en la orden


 sudo /etc/init.d/oracle-xe configure

Normalmente es el 1521. Probar con el usuario system.


ADVERTENCIAS:

1. En oracle se confunden los usuarios, roles y workspace.  En efecto si entramos en Oracle Developer, el nuevo Workspace creado estará situado en la pestaña de Usuarios.

2. Si queremos borrar el workspace, hay que borrar el Usuario. en el caso anterior hay que borrar el usuario PROVA.



3. El programa gestor de la Base de Datos y la base de datos se instalan en el directorio /u01/app. (El SQL Developer no se instala ahí). No se os ocurra cambiar los permisos (tanto si los haceis mas restrictivos como menos restrictivos) ya que no podreis acceder practicar ninguna conexión a la Base Datos y las que tengais hechas quedará inutilizadas. Si poneis los permisos a 777 o 755 o 775 Sale el error:

ORA-12547 TNS lost contact when try to connect to Oracle

Si le dais a permisos mas restrictivos se queja que no puede conectar a la BD ya que rechaza la conexión.

4. Esta versión de la BD Oracle (Expréss), entre otras tiene las siguientes limitaciones:

  • Permite hasta un máximo de 11 GB (cosa que puede ser problemática si teneis hostóricos o documentos guardados en la BD)
  • No permite la Deferred Segment Creation (que está contemplada en las versiones 12 de Enterprise de Oracle y superiores, aunque algunos dicen que está en la 11.2 de EnterpriseI 

5. Para restaurar una copia de seguridad hecha con impdp se debe:

  • Entrar como usuario su (sudo su)
  • Copiar el fichero a la carpeta /u01/app/oracle/admin/XE/dpdump/
  • Comprobar que la BD a restaurar no tenga referencias a TABLESPACES. Si los tiene, hay que crearlos previamente con la sentencia:
  • create tablespace DATOS10  DATAFILE '/ruta_fichero' SIZE 10M AUTOEXTEND ON;
  • Cambiar el nombre del fichero de la copia de seguridad a "expdat.dmp".
  • En una ventana de comandos ingresar:
  • impdp
  • Os pedirá usuario (system) y contraseña
  • Y esperar a que se restaure.

jueves, 18 de enero de 2018

Crear clases java JPA de SQL SERVER.

1. Introducción

Tengo una BD antigua SQL Server 2000 y quiero generar algunas clases JPA para acceder a consulta etc.

Existe en Eclipse una ultilidad llamad JPATools. Se puede ejecutar si tu proyecto tiene la FACET de JPA.

Pero NO va bien en SQL Server versiones antiguas ya que no puede ver el SCHEMA "dbo" que es el esquema por omisión cuando no se crean eschemas. Busca un Catalog y como no hay ninguno creado no muestra nada

Para ello recurrimos a NETBEANS.

2. Proceso

1. Descargar un jar antiguo que pueda manejar esta información como sqljdbc-1.2.0.jar desde Java2s , también se puede utilizar el jtds . Vamos a utilizar ahora jtds.


2. En la pestaña de services arriba a la izquierda (si no está se debe incorporar mediante el menú superior Windows, en DataBases , boton derecho New Connection

Y seleccionamos justo lo que hay en pantalla



3. crear la conexion a SQL Server seleccionando url del servidor, puerto 1433, usuario, contraseña, base de datos y schema "dbo". Probar la conexión con Test Connection y verificar que no hay problemas.



3. Crear un proyecto java, crear un package y en boton derecho sobre el package hacer New Entity From Database, se busca la conexión creada anteriormente , y se seleccionan las tablas. Y voila!!!



Ojo hay que tener creadas primary key!!

=======================================================================
ANEXO (Crear la conexión (TOTALMENTE INUTIL)


1. SQL Server 2000


a. Descargar el fichero sqljdbc-1.2.0.jar desde Java2s



b. Crear una nueva connexion tipo SQL Sever


c. Indicar other driver y buscar el jar en la carpeta de descarga. Se busca el driver desde el primer símbolo que hay des. Ojo estas propiedades de URL etc se definen en el paso d.






Indicar estas propiedades




3. Posibles problemas

Si por algún motivo, en vez de crear restricciones "primary key" en una tabla se ha creado "unique" o "unique index", hay que crear la restricción "primary key" sinó, Netbeans se opnone a crear las clases JPA de dicha tabla, para ello se puede crear. Veamos como de golpe las creamos en 9 tablas, y solucionamos el problema

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
ALTER TABLE RRRR01 ADD CONSTRAINT RRRR01_pk PRIMARY KEY (rr01nume);
ALTER TABLE RRRR02 ADD CONSTRAINT RRRR02_pk PRIMARY KEY (rr02nume);
ALTER TABLE RRRR03 ADD CONSTRAINT RRRR03_pk PRIMARY KEY (rr03nume);
ALTER TABLE RRRR04 ADD CONSTRAINT RRRR04_pk PRIMARY KEY (rr04nume);
ALTER TABLE RRRR05 ADD CONSTRAINT RRRR05_pk PRIMARY KEY (rr05nume);

ALTER TABLE RRRR06 ADD CONSTRAINT RRRR06_pk PRIMARY KEY (rr06nume);
ALTER TABLE RRRR98 ADD CONSTRAINT RRRR98_pk PRIMARY KEY (rr98nume);
ALTER TABLE RRRR99 ADD CONSTRAINT RRRR99_pk PRIMARY KEY (rr99nume);
ALTER TABLE RRRR00 ADD CONSTRAINT RRRR00_pk PRIMARY KEY (rr00nume);


lunes, 15 de enero de 2018

Informática Jurasica (II). Ejecutar comandos MSDOS desde VB6

Saludos,

He tenido muchos problemas con mis antiguas aplicaciones VB6. Uno de los mayores problemas era ejecutar una aplicacion o fichero de comandos ".bat".

Parece ser tal y como  dice C0ding que hay que dar estos pasos:

1. En referencias del proyecto VB6.0 hay que marcar "Microsoft Script Host Object Model"
2. Crear un fichero con extensión ".bat" por ejemplo "provaVB60.bat" en "E:\CONF\KK\" como por ejemplo:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
@echo off 
title Hacer media de dos numeros 
echo "El primer parametro es " %1
echo "El segundo parametro es " %2
set/p num1=Cual es el primer numero? 
set/p num2=Cual es el segundo numero? 
set/a media= (%num1% + %num2%) / 2 
echo. 
echo La media es %media% 
java -version
pause >nul 
exit 

Aquí evaluamos si hay 2 parámetros de entrada, pedimos 2 números, sacamos media y tabién probamos a ejecutar java para ver que versión tenemos instalada. Pues parece ser que funciona.

3. Creamos una pantalla y con un boton y el código VB de la pantalla es:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Dim wshThisShell As WshShell
Dim lngRet As Long
Dim strShellCommand As String
Dim strBatchPath As String

Sub EjecutarComando()
  Set wshThisShell = New WshShell
  strBatchPath = "E:\CONF\KK\provaVB6.bat" & """" & " hola guapo" & """"
  strShellCommand = """" & strBatchPath & """"
  lngRet = wshThisShell.Run(strShellCommand, vbNormalFocus, vbTrue)
End Sub

Private Sub Command1_Click()
  Call EjecutarComando
End Sub

En la línea 8 aparece como se llama con parámetros, en este caso hemo colocado también 2 parámetros. Observar que los parámatros se han colocada entre comillas dobles y que el espacio en  blanco es la separación entre parámetros. En este caso detecta 2 parámetros hola y guapo.




lunes, 8 de enero de 2018

Crontab en Ubuntu

Ahora que ya sabemos:

  • crear un jar en Maven
  • localizar recursos dentro de la carpeta donde se encuentra el jar
Podemos realizar un crontab en Ubuntu para que se pueda ejecutar un proceso cada cierto tiempo.


1. Ver los procesos que tenemos programados

crontab -l

Se puede ejecutar como sudo para ver si el administrador ha programado algo. Se ejecuta desde la consola.

2. Editar / crear procesos


crontab -e

Con ello nos pide un editor por omisión, que será mejor utilizar el nano.

Pero con el nano podemos tener algún problemilla si lo utilizamos poco. Por tanto es conveniente copiar le contenido que nos muestra la consola y ejecutamos gedit que es mas fácil y cuando hayamos terminado, copiamos a nano lo que hemos hecho. Con Mayúscula Control o guardamos. Si no queremos guardar Mayúscula Control x.

3. Formato del fichero

Normalmente hay 5 campos para definir fecha y hora (separados por un espacio en blanco) junto con el comando a ejecutar. en concreto los cinco campos de tiempo son:
  • minuto
  • hora
  • día del mes
  • mes
  • dia de la semana
Si hay algún campo que no nos sirve se coloca un asterisco "*".

Se puede colocar un signo menos para indicar un intervalo. Por ejemplo "1-5" en primer campo indica que se repite el comando cada minuto pero solo entre en primer y quito minuto. Si ese mismo valor lo colocamos en día de la semana indica que se ejecutaría de lunes a viernes.

En nuestro caso concreto queremos ejecutar un jar cuya ubicación absoluta es: /home/ximo/misjars/jar01.jar 

Pero queremos ejecutarlo con java 9 y nosotros tenemos por omisión java 8. Para ello tenemos que darle la ruta absoluta del ejecutable de java 9 que en mi caso es:

/usr/lib/jvm/java-9-oracle/bin/java

Si queremos ejecutar el jar de lunes a viernes todas las horas desde las 8 hasta las 16 horas quedaría:



00 08-16 * * 1-5 /usr/lib/jvm/java-9-oracle/bin/java -jar /home/ximo/misjars/jar01.jar


Si queremos ejecutar el jar cada 10 minutos de lunes a viernes todas las horas desde las 8 hasta las 16 horas quedaría: (ver The Geek Stuff).


*/10
00 08-16 * * 1-5 /usr/lib/jvm/java-9-oracle/bin/java -jar /home/ximo/misjars/jar01.jar

Java: Localizar la carpeta que incluye a un proyecto java o a un jar

Lo que voy a decir es un pequeño resumen de lo que se ha comentado en StackOverflow.


Primeramente veamos algunas de las posibilidades manejadas:

1. System.getProperty("user.dir")

En este caso nos indica el directorio donde estamos ahora. Poe ejemplo si estamos en /home/ximo y ejecutamos en la consola : java -jar ./misAplicaciones/aplicacion01.jar , el resultado será /home/ximo y no donde está la aplicación. Por tanto puede ser problemático.


2.  System.getProperty("java.class.path")

Aquí nos indica cada una de las rutas para localizar los jars utilizados. Por tanto a bote pronto, creo que no nos puede servir mucho.

3. La mayor parte de las opciones parten de localizar una clase, y a partir de esta localización ya se busca lo que se quiere. Para obtener la clase desde un método no estático basta con:

    this.getClass()

Pero si estamos en un método estático , las soluciones aportadas en StackOverflow son:


  • MyClass.class(): Permite refactorización, es la más rápida pero no funciona con copia y pega entre 2 clases.
  • MethodHandles.lookup().lookupClass(): Desde Java 7. Parece ser la mejor alternativa, ya que aunque no es tan rápida como la anterior, si permite copia y pega. A continuación ser detallan otras alternativas (para obtener el nombre de la clases) pero su rendimiento puede dar mucho que desear:
  • new Object() { }.getClass().getEnclosingClass().getName();
  • Thread.currentThread().getStackTrace()[1].getClassName();
  • System.getSecurityManager().getClassContext()[0].getName();


4. Si estamos en un jar, se puede obtener la carpeta que contiene el jar, a partir de nuestra clase de esta forma:

   CodeSource codeSource = aClass.getProtectionDomain().getCodeSource();
    File jarFile;
    jarFile = new File(codeSource.getLocation().toURI());
    String s=jarFile.getParentFile().getAbsolutePath();

5. Si estamos en un proyecto MAVEN y ejecutamos un main dentro de Eclipse, hay que tener en cuenta que las clase se guardan en el directorio target y por tanto para obtener la carpeta que incluye a la carpeta que es nuestro proyecto, tenemos que subir 2 veces en el árbol de directorios:

    String path = aClass.getResource(aClass.getSimpleName() + ".class").getPath();
    String jarFilePath = path.substring(path.indexOf(":") + 1, path.indexOf("!"));
    jarFilePath = URLDecoder.decode(jarFilePath, "UTF-8");
    jarFile = new File(jarFilePath);
    String s=jarFile.getParentFile().getAbsolutePath();
    if (s.endsWith(File.separator+"target")) { // Maven target directory for 
                                               // compiled classes
s=s.substring(0, s.lastIndexOf(File.separator));
s=s.substring(0, s.lastIndexOf(File.separator));
    }

Finalmente si creamos una clase de utilidades nos queda:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package ximodante.utils;

import java.io.File;
import java.lang.invoke.MethodHandles;
import java.net.URLDecoder;
import java.security.CodeSource;

public class FileUtils {

 /**
  * Folder that contains jar file or folder that contains project folder
  * @return
  * @throws Exception
  */
 public static String getJarContainingFolder() throws Exception {
  Class<?> aClass=MethodHandles.lookup().lookupClass();
  CodeSource codeSource = aClass.getProtectionDomain().getCodeSource();

  File jarFile;

  if (codeSource.getLocation() != null) {
   jarFile = new File(codeSource.getLocation().toURI());
  } else { // It is not a Jar file 
   String path = aClass.getResource(aClass.getSimpleName() + ".class").getPath();
      String jarFilePath = path.substring(path.indexOf(":") + 1, path.indexOf("!"));
      jarFilePath = URLDecoder.decode(jarFilePath, "UTF-8");
      jarFile = new File(jarFilePath);
  }
  String s=jarFile.getParentFile().getAbsolutePath();
  System.out.println("S------>:" + s);
  if (s.endsWith(File.separator+"target")) { // Maven target directory for compiled classes
   s=s.substring(0, s.lastIndexOf(File.separator));
   s=s.substring(0, s.lastIndexOf(File.separator));
  } 
  return s;
 }
 
 /**
  * test in main class
  * @param args
  */
 public static void main(String[] args) {
  try {
   System.out.println(getJarContainingFolder());
   System.out.println(System.getProperty("java.class.path"));
   System.out.println(System.getProperty("user.dir"));
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

 }

}