Etiqueta: truco relampago

Cuando Windows no reconoce un RAID

Hoy encendí un equipo y descubrí aterrorizado que Windows no reconocía un RAID. Cuando falla algún sistema RAID a todos nos entran unos sudores fríos al pensar en las serias implicaciones que puede tener. Hoy he salido de un aprieto gordo en el que me metió el Intel Matrix Storage Manager: por algún motivo, un Raid10 que guardaba mucha mucha información estaba funcionando correctamente, pero Windows lo reconocía como un disco dinámico inválido que no se iniciaba. Al intentar iniciarlo se conseguía un error arcano y la única opción que ofrecía el disco era la de convertirlo de nuevo en un disco básico, a costa de perder toda la información. Esto, evidentemente es inadmisible, así que lo primero que hice fue comprobar que todos los datos estaban en su sitio. Para esto, nada tan fácil como pillar cualquier Live CD de linux que tengáis a mano, iniciarlo y comprobar que todo está en su sitio (que Linux no suele dar muchos problemas con los fakeraid). Acto seguido investigué un poco y descubrí que lo suyo sería convertir el disco en un disco básico NTFS. El problema es que la conversión desde Windows se pincharía todos los datos. ¿Qué hacer?, pues utilizando

Publicado en howtos Etiquetado con: , , ,

Eliminar subdirectorios largos en Windows

Más de una vez me ha levantado dolores de cabeza el intentar eliminar subdirectorios largos en Windows. Ocurre a veces cuando hacemos una mala copia o restauración desde un backup; en ocasiones, también puede pasar cuando un usuario es demasiado organizado con sus directorios personales. Cuando intentamos borrar un directorio de estas características vamos a ver errores tipo “TOO LONG”  o “El fichero ya no está en ese directorio“. Hoy tuve uno de estos problemas (bastante gordo) y ni RD, ni subst ni leches. Tuve que recurrir a una solución perdida en el limbo de los foros que usa robocopy y un fichero .bat. Para ello solo necesitamos tener robocopy.exe en el path (o en el directorio de ejecución del .bat) y crear este fichero de cabecera: @echo off if {%1}=={} @echo Syntax: DelFolder FolderPath&goto :EOF if not exist %1 @echo Syntax: DelFolder FolderPath – %1 NOT found.&goto :EOF setlocal set folder=%1 set MT="%TEMP%\DelFolder_%RANDOM%" MD %MT% RoboCopy %MT% %folder% /MIR RD /S /Q %MT% RD /S /Q %folder% endlocal El fichero se cargará todo lo de dentro del directorio especificado sin clemencia alguna y le importará poco la longitud total de los ficheros o subdirectorios.

Publicado en howtos Etiquetado con: , ,

Redirect en Java conservando los parámetros POST

Si alguna vez habéis usado el método SendRedirect de un HttpServletResponse intentando respetar los parámetros de una petición POST habréis comprobado que cada navegador hace lo que le viene en gana. Esto es porque el SendRedirect envía un código HTTP 302: found, que al parecer cada navegador interpreta como quiere. Si queréis un workaround sólido para esta problemática, podemos enviar un código de respuesta HTTP 307: temporary redirect que sí respeta este tipo de peticiones. Hacerlo es muy sencillo: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String URL = "https://www.luaces-novo.es"; response.setStatus(response.SC_TEMPORARY_REDIRECT); response.addHeader("Location", URL); } De esta forma se respetará cualquier parámetro envíado mediante un método POST. Recordad que al estar modificando los headers no podéis enviar otro tipo de información que no sean headers o status codes.

Publicado en howtos Etiquetado con: , ,

web.xml ignorando WebServlet

Un truco relámpago en el caso de que os encontréis con problemas al desplegar Servlets a una aplicación con ficheros web.xml que utilizan versiones que no deben. Si al utilizar la anotación WebServlet el servidor de aplicaciones os responde con que no conoce el recurso solicitado seguramente es porque esteis usando una versión del motor de despliegue de aplicaciones que no se lleve bien con la anotación. Para solucionarlo solo tenéis que ver la etiqueta web-app de vuestro web.xml. Si véis en la especificación una versión inferior a la 3.0 ahí tenéis vuestro problema. Esto puede ocasionar también otra serie de problemas. Aquí tenéis un web-app usando una declaración para el motor de despliegue 3.0, que directamente ignora el web.xml. <web-app version=”3.0″ xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd”>

Publicado en howtos Etiquetado con: , ,

Java: Foreach con Map

Aquí os pongo un truco relámpago para usar una sentencia foreach (o enhanced for, como llaman algunos de Oracle) con el fin de recorrer las entradas de una colección de tipo Map. La cosa consiste en utilizar la interfaz Entry contra el KeySet del Map, consiguiendo así hacerlo lo más rápido posible. La definición de la interfaz: Interface Map.Entry<K,V> La interfaz está estrechamente vinculada con los Maps porque solo existe en su interior. Cada Entry representa un par clave -> valor dentro del Map. Sabiendo esto, deduzco que ya sabréis como se hace el foreach, pero por si acaso aquí va un ejemplo funcional. package pruebas; import java.util.Map; import java.util.HashMap; import java.util.Map.Entry; /** * * @author Héctor Luaces Novo */ public class EjemploForeachMap { public static void main(String args[]) { Map<Integer, String> h = new HashMap<>(); h.put(1, "uno"); h.put(2, "dos"); h.put(3, "tres"); h.put(4, "cuatro"); for(Entry<Integer, String> e: h.entrySet()) { System.out.println(e.getKey() + " : " + e.getValue()); } } } } La ejecución da el siguiente output: 1 : uno 2 : dos 3 : tres 4 : cuatro Es bastante eficiente hacerlo así, a la par que muy fácil de ver y entender. ¡Hasta el próximo truco relámpago!

Publicado en howtos Etiquetado con: ,