viernes, 3 de diciembre de 2010

Calcular la letra del DNI con Java

 

 

 

 

 

 

 

 

 

 

Cómo calcular la letra.


Según este artículo, la letra del DNI se calcular de la suguiente forma:

"La letra del DNI se obtiene dividiendo el número completo de nuestro DNI entre 23
y al resto de dicha división que deberá estar comprendido entre 0 y 22 se le asigna la
letra según la equivalencia de la siguiente tabla: 

Resto
Letra
Resto
Letra
0
T
12
N
1
R
13
J
2
W
14
Z
3
A
15
S
4
G
16
Q
5
M
17
V
6
Y
18
H
7
F
19
L
8
P
20
C
9
D
21
K
10
X
22
E
11
B


  "

El código.


Así que lo que tenemos que hacer es lo siguiente:

1. Calcular el módulo 23 a nuestro número de DNI.
2. Determinar la letra correspondiente a ese módulo: Inicializaremos un String que corresponderá a esas letras en orden, así que con un charAt(modulo) podremos determinar la letra correspondiente a la posición dada.

Ahora podemos crearnos un método que realice esas operaciones, quedaría así:


char calculaLetra(int dni)
    {
    String juegoCaracteres="TRWAGMYFPDXBNJZSQVHLCKE";
    int modulo= dni % 23;
    char letra = juegoCaracteres.charAt(modulo);
    return letra; 
    } 


Espero que sea de utilidad.




miércoles, 1 de diciembre de 2010

Renombrar archivos masivamente en Linux










Puede darse el caso de que queramos renombrar un número considerable de archivos. A continuación vamos a explicar como hacerlo fácilmente, utilizaremos la función rename. Veamos algunos ejemplos:

 

 

Renombrando la extensión


Quitar la extensión a los archivos txt:

rename 's/\.txt$//' *.txt


Cambiar de extensión de todos los archivos txt por la extensión bak:

rename 's/\.txt$/\.bak/' *.txt

 

 

Sustituyendo palabras en el nombre del archivo

Sustituir la palabra "archivo" por "fichero" en el nombre de todos los archivos:

rename 's/archivo/fichero/' *.*

 

 

Pasando de mayúsculas a minúsculas y viceversa


Pasar a minúsculas:

rename 'y/A-Z/a-z/' *


Pasar a mayúsculas:

rename 'y/a-z/A-Z/' *


 

Fuentes

http://tips.webdesign10.com/how-to-bulk-rename-files-in-linux-in-the-terminal
http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html




lunes, 15 de noviembre de 2010

Encontrar archivos que contengan un texto determinado. (Linux).










Alguna vez podemos necesitar encontrar los archivos que contengan un texto determinado. Por ejemplo, si tenemos muchos archivos de iptables y queremos buscar aquellos que contengan una dirección IP determinada. O si queremos saber en que archivos se encuentra la palabra "Linux", por ejemplo. A continuación explico como hacerlo:

El comando grep.

La instrucción que vamos a utilizar es "grep". La sintaxis es la siguiente:

grep “text string to search” directory-path

Ejemplo:

Si queremos saber qué archivos del directorio /home/felipe/prueba/ contienen la palabra "Hola" :

grep "Hola" /home/felipe/prueba/*.*

Salida:

/home/felipe/prueba/archivo1.txt:Hola Juan

/home/felipe/prueba/archivo2.txt:Hola Pepe



El comando grep recursivo.


Para que busque en el directorio actual y sus subdirectorios, debemos añadir la opción -r :

Ejemplo:

grep -r "Hola" /home/felipe/prueba/

Salida:

/home/felipe/prueba/archivo2.txt:Hola Pepe

/home/felipe/prueba/archivo1.txt:Hola Juan. 

/home/felipe/prueba/pruebaprueba/archivo4.txt:Hola Manuel



El comando grep -l


Con la opción -l nos aparecerá solo el nombre del archivo:

Ejemplo:

grep -l "Hola" /home/felipe/prueba/*.*

Salida:

/home/felipe/prueba/archivo1.txt

/home/felipe/prueba/archivo2.txt


Espero que sea utilidad.




miércoles, 13 de octubre de 2010

Ejecutar / iniciar varias aplicaciones a la vez en linux (Ubuntu)










¿Quien no empieza a abrir veinte amplicaciones en cuanto se ha iniciado el SSOO? ¿Quien no abre Firefox/Chrome, Thunderbird, Pidgin, ...?

Si quieres ahorrarte unos cuantos clicks de ratón simplificando la tarea, ésto te puede ayudar.
Lo que voy a mostrar es un comando que permite abrir varias aplicaciones simultáneamente. El siguiente paso será crear un script que ejecute ese comando. Y finalmente crearemos un lanzador en el menú superior que ejecute el script previamente creado. Es muy sencillo y útil.


1. El comando.

Para iniciar varias aplicaciones desde consola, solo tenemos que ejecutar el terminal y escribir:
(aplicacion1) & (aplicacion2) & (aplicacion3)

Donde (aplicacion1), (aplicacion2) y (aplicacion3) son comandos que ejecutan una aplicación distinta cada uno. El número de aplicaciones puede ser el que queramos, pero más vale no pasarse si quereis cuidar vuestra cpu.

Ejemplo (se ejecuta Chromium, Thunderbird y Pidgin):
chromium-browser & thunderbird & pidgin


2. El script.

El siguiente paso sería crear un script para no tener que escribir siempre el comando completo. Podemos ponerle por ejemplo el nombre scriptAplicacionesInicio.sh y editarlo con gedit o con tu editor de textos preferido. Su contenido sería el siguiente (siguiendo la nomenclatura anterior):
#!/bin/sh

  (aplicacion1) &

  (aplicacion2) &

  (aplicacion3) 

Ejemplo:
#!/bin/sh chromium-browser &

  thunderbird &

  pidgin 


3. El lanzador de aplicaciones.

Para finalizar crearemos un lanzador de aplicaciones (acceso directo) que ejecute el editor que hemos creado en el paso anterior. Para ello pulsaremos con el botón derecho del ratón sobre panel superior de nuestro escritorio y pulsamos en "Lanzador de aplicación personalizado". Si tenemos el script en nuestro directorio personal (en mi caso /home/felipe) completaremos los datos así:



En el apartado comando cada uno deberá poner la ruta donde se encuentre su archivo, así: sh (ruta)/scriptAplicacionesInicio.sh


Ahora, cada vez que queramos iniciar esas aplicaciones, sólo tendremos que hacer un click de ratón.




martes, 20 de julio de 2010

Determinar el número de días de un mes en Java









Quizás alguna vez necesitemos saber el número de días que tiene un mes en concreto, por ejemplo el mes actual. Eso se puede hacer con java de forma sencilla en pocas líneas de código.

El código

Simplemente tenemos que crear un objeto GregorianCalendar, pasándole una fecha y luego llamar a la función getActualMaximum de Calendar, para que devuelva el número de días. Aquí está el código:


import java.util.Calendar;
import java.util.GregorianCalendar;


public class pruebaMes {

/**
* @param args
*/
public static void main(String[] args) {
// Create a calendar object of the desired month 
Calendar cal = new GregorianCalendar(2010, Calendar.JULY, 1); 
// Get the number of days in that month 
int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH); // 28
System.out.println(days);
}

}


La salida de esta aplicación: 31



Fuentes:

http://www.exampledepot.com




miércoles, 23 de junio de 2010

Crear una barra de progreso en Java



Todos sabemos de la importancia de la retroalimentación cuando estamos utilizando una aplicación informática: en todo momento, el usuario debe estar informado del estado de las operaciones que se están realizando. Mucho más cuando una operación tarda mucho en realizarse, como la copia de archivos de gran volumen, ...
Un elemento imprescindible para dar ese tipo de información es la barra de progreso. Se va a explicar cómo hacer ésto en Java.


 

El código


Constructor que crea un JPanel y colocación los elementos gráficos dentro.
 public Progress() {
  super("Progress");
  
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel pane = new JPanel();
  pane.setLayout(new FlowLayout());
  current = new JProgressBar(0, 2000); // Crear un JProgressBar con valores 0-2000
  current.setValue(0); // Fijar valor por defecto.
  current.setStringPainted(true); // Mostrar valor numérico del progreso de la barra
  pane.add(current);
  setContentPane(pane);
  }


Médoto para calcular los Valores del progreso de la barra
Aquí debemos decidir, qué criterios se seguirán para determinar el valor de la barra en cada momento, ejemplo: MB de datos copiados, operaciones realizadas, ... En éste caso, al tratarse de un ejemplo sencillo, usaremos un contador de 0 a 2000:

 public void iterate() {
  while (num < 2000) {
  current.setValue(num); // Asignar un valor a la barra de progreso.
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) { }
  num += 95;
  }
  } 


Método Main
 public static void main(String[] arguments) {
  Progress frame = new Progress(); // Crea un objeto Progress (constructor visto antes).
  frame.pack(); 
  frame.setVisible(true);
  frame.iterate(); // LLamada al método iterate (visto antes).
  }


Código completo
import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*; 
public class Progress extends JFrame {
JProgressBar current;
  JTextArea out;
  JButton find;
  Thread runner;
  int num = 0;
public Progress() {
  super("Progress");
  
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel pane = new JPanel();
  pane.setLayout(new FlowLayout());
  current = new JProgressBar(0, 2000);
  current.setValue(0);
  current.setStringPainted(true);
  pane.add(current);
  setContentPane(pane);
  }

public void iterate() {
  while (num < 2000) {
  current.setValue(num);
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) { }
  num += 95;
  }
  }
public static void main(String[] arguments) {
  Progress frame = new Progress();
  frame.pack();
  frame.setVisible(true);
  frame.iterate();
  }
  }

 


Fuente

http://www.java-tips.org

 




viernes, 28 de mayo de 2010

Modem Alcatel X060S + Symio en Ubuntu

Me gustaría aclarar que el mérito de que ésto funcione es enteramente de Fran y de Javi que escribieron y comentaron en el tutorial http://potrerohacaido.blogspot.com/2009/11/simyo-alcatel-x060-ubuntu-910-karmic.html . Yo simplemente me he dedicado a redactar los pasos para intentar ayudar a los que quieren hacer funcionar el modem en ubuntu 10.04. Así mismo, debo explicar que ésto es lo que yo hice y me funcionó, lo que no quiere decir que a todo el mundo le ocurra. Dicho ésto, pasemos a la acción.



Configuración de Network Manager


Antes de nada, debemos crear una conexión en el Network Manager. Para ello, hacemos lo siguiente:

Botón derecho sobre icono de Network Manager; Editar las conexiones...; Banda ancha móvil; botón Añadir; Seleccionar dispositivo USBModem USBModem Configurations y creamos una conexión con la siguiente configuración ("Ajustes de PPP" y "Ajustes de Ipv4" no hay que modificarlos):

Pantallazo-Editando Simyo Predeterminado 1.png



Pasos a seguir


  1. Instalar modemswitch. Bajamos los siguientes archivos .deb y los instalamos haciendo doble click sobre ellos y siguiendo los pasos:


    http://packages.ubuntu.com/lucid/usb-modeswitch-data


    http://packages.ubuntu.com/lucid/usb-modeswitch

  2. Desinstalar modemmanager 0.3 mediante Synaptic:


    1. Pulsamos en el menú Sistema > Administración > Gestión de Paquetes Synaptic.


    2. Buscamos el paquete "modemmanager".


    3. Pulsamos botón derecho y la opción "Marcar para desinstalar".


    4. Botón Aplicar.

  3. Instalar modemmanager parcheado por jmartin:


    1. Nos dirigirnos a la siguiente URL: http://ppa.launchpad.net/jmartinj/x060-karmic/ubuntu/pool/main/m/modemmanager


    2. Descargamos el archivo .deb correspondiente a nuestra arquitectura: ...i386.deb si nuestra instalación de Ubuntu es de 32 bits y ...amd64.deb si es de 64 bits. (Si tienes dudas acerca de ésto, ve a http://felinfo.blogspot.com/2009/09/la-instalacion-de-mi-ubuntu-es-de-32-o.html )


    3. Hacemos doble click sobre el archivo .deb para instalarlo

  4. Editar el archivo /usr/share/dbus-1/services/org.gnome.keyring.service y sustituir el texto existente por éste:
    
    [D-BUS Service]
    
    #Name=org.gnome.keyring
    
    Name=org.freedesktop.secrets
    
    
  5. Reiniciar Ubuntu.

Ya debería funcionar: conectamos el modem y esperamos has que nos aparezca una ventana donde se nos pedirá la contraseña. La introducimos y en pocos segundos estaremos contectados.



Fuentes:


http://potrerohacaido.blogspot.com/2009/11/simyo-alcatel-x060-ubuntu-910-karmic.html

http://novatillasku.com/2010/05/03/huawei-e1612-funciona-en-ubuntu-10-04/



Espero sus comentarios.

Gracias.




(Actualización) IMPORTANTE: Debemos evitar que se actualice el paquete modemmanager, o en caso contrario, el módem va a dejar de funcionar. Podemos bloquear el paquete y de esa forma, aunque actualicemos con el "Gestor de Actualizaciones" o desde consola, el paquete permanecerá en su versión actual. Para ello podemos seguir las instrucciones que se indican aquí: http://paraisolinux.com/como-evitar-que-algunos-paquetes-se-actualicen-en-ubuntu




lunes, 10 de mayo de 2010

Leer un fichero Excel desde Java









Muchas veces puede resultar interesante interactuar con hojas Excel desde nuestra aplicación Java. Ésto es lo que nos permite el API JExcel. Se trata de una librería opensource e independiente de otras librerías que permite leer, crear y editar ficheros de excel. En este ejemplo simplemente se muestra cómo leer un archivo .xls.



Descargar e importar la librería JExcel.


Nos descargamos la librería desde aquí:

http://sourceforge.net/projects/jexcelapi/files/

Luego simplemente incorporamos a nuestro proyecto el archivo "jxl.jar".

Lo haremos pinchando con el botón derecho sobre la carpeta del proyecto; pinchamos en Propiedades; opción "Java Build Path"; pestaña Librerías; finalmente pulsamos en "Add External JAR" y seleccionamos el archivo jxl.jar



La aplicación


Lo que hace es lo siguiente:

Recorre cada hoja del archivo excel. Dentro de cada hoja, recorre todas las columnas de cada fila del archivo excel y muestra su contenido en pantalla.

Para probar la aplicación:

Hay que colocar un archivo excel de prueba con datos. Yo lo he puesto en la misma carpeta que el archivo java con el nombre "archivoPrueba.xls".

A continuación se muestra el código del archivo java:



import jxl.*; 
import java.io.*; 

public class ReadExcel { 
private void leerArchivoExcel(String archivoDestino) { 

try { 
Workbook archivoExcel = Workbook.getWorkbook(new File( 
archivoDestino)); 
System.out.println("Número de Hojas\t" 
+ archivoExcel.getNumberOfSheets()); 
for (int sheetNo = 0; sheetNo < archivoExcel.getNumberOfSheets(); sheetNo++) // Recorre 
// cada    
// hoja                                                                                                                                                       
{ 
Sheet hoja = archivoExcel.getSheet(sheetNo); 
int numColumnas = hoja.getColumns(); 
int numFilas = hoja.getRows(); 
String data; 
System.out.println("Nombre de la Hoja\t" 
+ archivoExcel.getSheet(sheetNo).getName()); 
for (int fila = 0; fila < numFilas; fila++) { // Recorre cada 
// fila de la 
// hoja 
for (int columna = 0; columna < numColumnas; columna++) { // Recorre                                                                                
// cada                                                                                
// columna                                                                            
// de                                                                                
// la                                                                                
// fila 
data = hoja.getCell(columna, fila).getContents(); 
System.out.print(data + " "); 

} 
System.out.println("\n"); 
} 
} 
} catch (Exception ioe) { 
ioe.printStackTrace(); 
} 

} 

public static void main(String arg[]) { 
ReadExcel excel = new ReadExcel(); 
excel.leerArchivoExcel("archivoPrueba.xls"); 
} 
}




Fuentes:


http://www.mindfiresolutions.com/How-to-read-an-excelsheet-from-Java-217.php




miércoles, 31 de marzo de 2010

Comparar dos archivos de texto en Linux





El comando diff

A veces podemos necesitar comparar dos archivos de texto linea por línea para determinar sus direfencias. Puede ser útil si somos programadores y queremos saber las diferencias que existen entre dos versiones de un mismo archivo (.java, .jsp, .php,...). Para ello podemos hacer uso del comando diff, que tiene la siguiente sintaxis:


diff ARCHIVO1 ARCHIVO2


El comando diff examinará ambos archivos y mostrará qué cambios habría que realizar en el ARCHIVO1 y el ARCHIVO2 para que coincidan. Nos
lo indicará de la siguiente forma:

  • Añadir (a)
  • Eliminar (b)
  • Cambiar (c)
  • Las líneas en el ARCHIVO1 con un menor que (<) y las líneas de ARCHIVO2 con un mayor que(>)


Ejemplo

Si tenemos dos archivos llamados c1.txt y c2.txt con que contienen el siguiente texto:



c1.txt


   11111111111111111111111111
   22222222222222222222222222
   33333333333333333333333333
   44444444444444444444444444  
   55555555555555555555555555



c2.txt


   11111111111111111111111111
   22222222222222222222222222
   33333333333333333333333333
   aaaaaaaaaaaaaaaaaaaaaaaaaa
   55555555555555555555555555
   66666666666666666666666666
   77777777777777777777777777

   
Para compararlos nos iremos al terminal y teclearemos:


   diff c1.txt c2.txt


La salida correspondiente será:

   4c4
   < 44444444444444444444444444
   ---   
   > aaaaaaaaaaaaaaaaaaaaaaaaaa

   5a6,7   
   > 66666666666666666666666666
   ---   
> 77777777777777777777777777



Es decir, si queremos modificar c1.txt para que coincida con c2.txt, tendremos que:

  • Sustituir la línea 4 los "44444444444444444444444444" por "aaaaaaaaaaaaaaaaaaaaaaaaaa".
  • Apartir de la línea 5, añadir la línea 6 y 7 del archivo c2.txt.




sábado, 20 de febrero de 2010

Reemplazar texto de varios archivos en Linux

bash.png


Voy a explicar cómo reemplazar un texto o cadena de caracteres en varios archivos. Por ejemplo, si tenemos diez archivos .txt en un directorio y queremos que donde aparece la palabra "Pepe", ahora ponga "Jose".






El comando


Se puede hacer fácilmente desde la consola de Linux, con un sólo comando. Sería algo así:




sed -i 's/palabra-vieja/palabra-nueva/g' *.txt


En nuestro caso sería:




sed -i 's/Pepe/Jose/g' *.txt


Este último comando sustituirá la palabra "Pepe" por "Jose" en todos los archivos txt del directorio actual.




¿Pero y si queremos hacer varias sustituciones ejecutando sólo un comando?






El script


Pues lo más sencillo es hacernos un script, en el que se hagan varias llamadas al comando sed, visto anteriormente. Podemos crearnos un archivo que se llame script.sh y que contendrá lo siguiente:




sed -i 's/Pepe/Jose/g' *.txt


sed -i 's/Manolo/Manuel/g' *.txt


sed -i 's/Nacho/Ignacio/g' *.txt


sed -i 's/Inma/Inmaculada/g' *.txt




Ahora ejecutando ese script, estaremos haciendo esas cuatro sustituciones en todos los archivos txt del directorio actual. Para ejecutar ese script, solo tendremos que teclear lo siguiente en la consola:




sh script.sh




lunes, 25 de enero de 2010

Uso de StringTokenizer con varios caracteres separadores (Java)

Java
Todos hemos tenido que utilizar alguna vez StringTokenizer para separar subcadenas a partir de una cadena dada. Esto es muy sencillo si esas subcadenas son independientes entre sí. Pero ¿y si se organizan en forma "clave-valor"?. Por ejemplo, la siguiente cadena tiene la forma "jugador-deporte":

"Ronaldo=Futbol;Gasol=Baloncesto;Nadal=Tenis;Jordan=Baloncesto;"

Aquí tendríamos que tener en cuenta dos caracteres separadores: "=" y ";". Además, las subcademas habría que tratarlas teniendo en cuenta que las impares son nombres de deportistas y que las pares son nombres de deportistas. Lo mejor es que veamos un ejemplo:





El código



   import java.util.StringTokenizer;

   class PruebaST{

   static String entrada = "Ronaldo=Futbol;Gasol=Baloncesto;Nadal=Tenis;Jordan=Baloncesto;";

   public static void main(String args[]) {

   StringTokenizer st = new StringTokenizer(entrada, "=;");

   while(st.hasMoreTokens()) {

   String jugador = st.nextToken();

   String deporte = st.nextToken();

   System.out.println(jugador + " " + deporte);

   }

   }

   }





Resultado


La salida que daría ese código sería la siguiente:


   Ronaldo Futbol
   Gasol Baloncesto
   Nadal Tenis
   Jordan Baloncesto




martes, 5 de enero de 2010

Nokia 5800 y dispositivos mp3 en Amarok 1.4.

amarok-297x300.png


Vamos a describir administrar cualquier reproductor mp3, usando Amarok 1.4.



  1. Enchufamos el dispositivo y esperamos que Ubuntu lo detecte. En el caso del nokia 5800 seleccionamos la opción "Almacenamiento masivo".

  2. Miramos la ruta en la que se ha montado, que será de la forma: /media/id, por ejemplo /media/A005-CA9F.

  3. Vamos a Amarok y en el menú Settings, seleccionamos "Configure Amarok" y después la pestaña "Dispositivos de Medios".

  4. Pulsamos "Añadir un dispositivo". Le damos el nombre que queramos al dispositivo. Y luego ponemos el punto de montaje (/media/id), en nuestro caso: /media/A005-CA9F.

  5. Ahora si nos vamos a la pestaña "Dispositivos", pulsamos "Conectar" y ya podríamos ver las carpetas del dispositivo. En ese momento podríamos darle a "Transferir", para pasar las canciones.



Recomendaciones:



  • Para que nos guarde las canciones de la forma: Ruta/Artista - Disco/Canción:


    Pulsamos en "Configurar dispositivo" (icono de engranages): Ponemos en "ubicación de la canción" esto: /%artist - %album/%title.%filetype


  • Si quisieramos que lo guardara así pero dentro de la carpeta "reco", pondríamos:


    reco/%artist - %album/%title.%filetype




Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO