martes, 28 de mayo de 2013

Comando FORFILES, acciones sobre múltiples ficheros




En Windows Vista, W7 y las versiones Server de 2008 en adelante, han incluido un nuevo comando a la shell (línea de comandos) que parece bastante interesante para automatizar tareas sobre ficheros.

Un ejemplo de cómo usar el siguiente comando, puede ser el siguiente script:


Set _Source=Ruta de la que borrar los ficheros “C:/temp”

Se borran los ficheros (/C if @isdir==TRUE RD /Q @path) que tengas más de diez días de antigüedad (/D -10). Que se encuentren en el Path indicado por la ruta _Source (/P), haciendo la búsqueda recursiva (/S ir a subFolders) con cualquier mascara (/M *)

Forfiles /P "%_Source%" /S /M * /D -10 /c "cmd /C if @isdir==TRUE RD /Q @path"
echo *Para ver el resultado y no dejar que el script se vaya de la ventana, poner rem por
echo *delante para quitarlo si no queremos interacción de usuario o borrarlo directamente.
pause
exit

Si ponemos todo seguido en el cmd, también podemos ejecutarlo en una única instrucción para probarlo.
La sintaxis es la siguiente (en inglés):

FORFILES [/p Path] [/m Mask] [/s] [/c Command] [/d [+ | -] {dd/MM/yyyy | dd}]  
 Key
   /p Path      The Path to search  (default=current folder)
   /s           Recurse into sub-folders
   /C command   The command to execute for each file.
                Wrap the command string in double quotes.
                Default = "cmd /c echo @file"
                The Command variables listed below can also be used in the
                command string.
   /D date      Select files with a last modified date greater than or
                equal to (+), or less than or equal to (-),
                the specified date using the "dd/MM/yyyy" format;
   /D + dd      Select files with a last modified date greater than or
                equal to the current date plus "dd" days. (in the future)
   /D - dd      Select files with a last modified date less than or
                equal to the current date minus "dd" days. (in the past)
                A valid "dd" number of days can be any number in
                the range of 0 to 32768.   (89 years)
                "+" is taken as default sign if not specified.

   Command Variables:
      @file    The name of the file.
      @fname   The file name without extension.               
      @ext     Only the extension of the file.                 
      @path    Full path of the file.
      @relpath Relative path of the file.         
      @isdir   Returns "TRUE" if a file type is a directory,
               and "FALSE" for files.
      @fsize   Size of the file in bytes.
      @fdate   Last modified date of the file.
      @ftime   Last modified time of the file.

lunes, 27 de mayo de 2013

Java, obtener la extensión de un fichero



Obtener extensión de fichero, en muchos casos en interesante obtener la extensión de un fichero con el que estamos trabajando en Java, para lo que vamos a proponer dos aproximaciones, la primera es la más habitual, consiste en obtener la extensión en base al nombre del  fichero,  o de la ruta completa, devolviendo un texto vacio si no se encuentra el punto que separa la extensión.

      public static String getExtension(String filename) {
            int index = filename.lastIndexOf('.');
            if (index == -1) {
                  return "";
            } else {
                  return filename.substring(index + 1);
            }
}

Ahora una segunda opción, en la que presentamos como hacer esta búsqueda, pero evitando que ocurran errores de retorno, porque se envíen directorios en vez  de ficheros completos, por ejemplo si enviásemos c:\\hola.hola\\ y eso es el nombre de una carpeta, el primer método nos devolvería el hola, como si fuera la extensión del fichero, el segundo detectaría que no es un fichero, sino un directorio, y nos devolvería dentro del primer if. Podríamos ampliar el control, a un segundo if, que pregunte, si lo que nos han enviado es un fichero y si no es ni un directorio, ni un fichero, que se supone que han enviado a la consulta.

      public static String getExtensionFile(String filename) {
            File f = new File(filename);
            if (f == null || f.isDirectory()){
                  return "nulo o directorio";
            }else if (f.isFile()){
                  int index = filename.lastIndexOf('.');
                  if (index == -1) {
                        return "";
                  } else {
                        return filename.substring(index + 1);
                  }
            }else{
                  return "que has enviado?";
            }
      }    

Antes de que a alguien le reviente la vena al ver el método, se que este método es optimizable, soy consciente, pero se trata de no darlo todo hecho, sino las ideas. Está desordenado, mejóralo y úsalo.

domingo, 26 de mayo de 2013

iOS 7, el 10 de Junio

Ya tenemos fecha del evento de desarrolladores de Apple, en el que presumiblemente se presentará el nuevo iOS.

Supongo que tendrá una serie de cambios importantes, con el camboi de jefatura que tuvo iOS después del iOS 6, quiero suponer que habrá querido dar un nuevo rumbo a algunas aplicaciones y cambios sustanciales en el sistema operativo de la manzana.



Espero que venga acompañado de muchos y buenos cambios, los principales rumores apuntan a sencillez de las ventanas, colores más mate y menos brillos en algunos puntos, así como la posibilidad de ver las notificiaciones con el iPhone bloqueado (al parecer esto podría ser mediante algún gesto sobre la pantalla de bloqueo, ya era hora de algo así). Aunque lo que espero con más ganas es el nuevo centro de notificaciones (si ese que tenian en Android que se baja como una persiana...) espero que se le añadan widgets para apagar/encender WiFi Bluetooth y demás conexiones, lo echo de menos y mucho.

viernes, 24 de mayo de 2013

Java buenas prácticas, leer ficheros con Buffers.



A la hora de realizar lecturas de ficheros, a menos que usemos librería de terceros para leer los ficheros, como Apache io-utils o en el caso de ficheros XML stAX. Se aconseja el uso de buffers para la lectura de los ficheros.

InputStream in = new java.io.FileInputStream(fichero);
 try {
  in = new java.io.BufferedInputStream(in);
  in.read(.....
 }



Un ejemplo completo de la lectura de un fichero usando un Buffer, del cual definimos el tamaño en la variable TamBuffer. Ojo la excepción se deja a criterio del que esté desarrollando la lectura.

try {
    BufferedReader in = new BufferedReader(new FileReader(fichero), TamBuffer);
    while ((line = in.readLine()) != null) {
    nlines++;
    }
    in.close();
} catch (Exception e) {
//Manejar excepcion
System.out.println(" ERROR:" + e );
}

jueves, 23 de mayo de 2013

Comunidades Google+

Explorando las comunidades de Google+ me he encontrado con una serie de comunidades interesantes, en las que espero poder ir viendo cosas interesantes como las que publican en +Usemos Linux

miércoles, 22 de mayo de 2013

LuzuVlogs el camino del éxito

Un video que me ha parecido interesante y motivador, además de genialmente llevado por Borja Luzuriaga, llenando la pantalla (como se suele decir de los grandes actores) él solo.


Enhorabuena por el trabajo y el esfuerzo dedicado a este video y su resultado es muy bueno.

martes, 21 de mayo de 2013

Un vistazo al mercado de los SmartPhones

Viendo esta tabla sacada de El Androide Libre:

Por curiosidad y comentar los datos publicados. Vamos por partes y de arriba a abajo.

Android, el crecimiento de este sistema operativo, con respecto a las mismas fechas del año pasado. es de casi el 80%, lo que es un dato impresionante y su cuota de mercado crece un nada desdeñable 15.9% lo que si lo juntamos a ese casi 80% de smartphones del mundo tienen Android, es un número inalcanzable para el resto de competidores.

Lo curioso con iOS, es que gana número total de terminales, crece un 6,6% pero pierde cuota de mercado, najando de 23% al 17,3% perdiendo un 5,7% de cuota de mercado.

Windows Phone tiene un gran crecimineto en cuanto a porcentaje, pero no en cuanto a números reales, crece un 133% que es un porcetanje altísimo, pero claro, cuando partes de números tan bajos, pues la diferencia es grande, al crecer, aunque en cantidad no sea tan grande. Eso sí, el dato positivo para los de Microsoft, es que han visto crecer su cuota de mercado del 2% al 3,2%, que es un crecimiento grande en porcentaje, pero pequeño en números definitivos. Su mejor dato, es haber superado a BlacBerry, los de RIM, no ganan para disgustos.

el resto de sistemas operativos, dejan el año en números rojos, hasra RIM y su BlackBerry OS, ven sus números seguir bajando, pese a que volvieron a vender terminales con la llegada de la versión 10 del famosos y precursor, sistema operativo para moviles y smartphones.

Tengo curiosidad por ver el comportemineto de Firefox OS en el mercado de los smartphones, me encantaría tener uno entre manos, aunque sea solo unos días, tomar nota de esto en Mozilla y hacerme llegar uno. Si cuela, cuela, aunque no prometo que el informe sea positivo, solo por enviarme el teléfono.

Java buenas prácticas concatenación de Strings



Se ha demostrado a lo largo de la vida de Java, que el operador +, para la concatenación de objetos String, es ineficiente, ya que al utilizarse sobre variables, el compilador genera nuevas instancias (reserva memoria para ello) del objeto, para realizar la concatenación.

Por eso es aconsejable evitar la concatenación de objetos String mediante el operador +.
Por lo que es una mala práctica hacer lo siguiente: String s = s1 + s2 + “texto” + s3

Aunque no tiene efecto al hacer lo siguiente: String s = “Esto” + “es” + “una prueba”, ya que en este caso como las String a usar son constantes, no se realiza la reserva de la memoria, sino que el compilador lo agrupa todo en una única String.



Para realizar la concatenación citada en el primer caso, se deberá hacer lo siguiente:

StringBuffer strbuf = new StringBuffer();
strbuf.append(s1);
strbuf.append(s2);
String s = strbuf.toString();