martes, 16 de octubre de 2012

Como recuperar el GRUB dañado en Ubuntu

Pues después de 7 años de trabajar con Linux, llego ese momento en el cual corrompí mi GRUB cuando le aplique las actualizaciones que me pedía el Ubuntu.
Al reiniciar la computadora después de la actualización me salia un mensaje en el cual decía que la partición no era reconocida.
Entonces después de entrar en pánico por un par de horas, pude restaurar el GRUB y todo volvió a ser como antes, así que les dejo las instrucciones de como lo hice.

Lo primero que necesitan es un Live CD de Linux. En mi caso como uso Ubuntu pues yo tenia por ahí un cd.
Ya que arranca el sistema operativo, se abren una terminal y ponen los siguientes comandos:

$ sudo fdisk -l

Esto para listar las particiones que tiene el disco duro, por lo general la partición es sda1, así que yo proseguí con el siguiente comando;

$ sudo mount /dev/sda1 /mnt

Después montamos todos los directorios necesarios:

$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /dev/pts  /mnt/dev/pts
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys  /mnt/sys

Y luego utilizamos el siguiente comando para acceder al file system de nuestra partición:

$ sudo chroot /mnt

Ya con nuestro filesystem restaurado, procedemos con el siguiente comando, ojo que no es sda1 sino sda.

# grub-install --recheck /dev/sda 

Reinician la maquina y listo, su computadora ya podrá arrancar, o al menos a mi me ha funcionado 2 veces, pues a un compañero de trabajo le paso lo mismo después de aplicar la actualización de paquetes de Ubuntu.

sábado, 21 de abril de 2012

Como subir archivos y obtener los datos de una forma con un Portlet

La semana pasada me estuve peleando con un portlet para subir un archivo que se encontraba dentro de una forma, pues en un caso solo podia ver los parametros del request y en el otro solo podia obtener el archivo. Estuve investigando en la red sin exito alguno hasta que llegue a una pagina que hablaba de usar inputStream para leer los campos de la forma asi que aqui les facilito el codigo que necesitan para hacerlo.

Para realizar lo siguiente necesitaremos 2 jars, el de commons-fileupload-1.2.2.jar y el de commons-io-2.2.jar y los agregamos al build path.

Luego importamos los siguientes paquetes en nuestra clase portlet:

import java.io.*
import org.apache.commons.io.IOUtils.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.portlet.*;


Luego agregamos el siguiente metodo a nuestro portlet, que se encargara de procesar los campos del formulario asi como de subir los archivos que tengamos:

@ProcessAction(name="subirArchivo")
public void subirArchivo(ActionRequest req, ActionResponse res) throws PortletException, java.io.IOException{
   String param1 = "";
   PortletFileUpload pfu = new PortletFileUpload();
   String fileExtension = null;
   FileOutputStream outStream = null;
   try {
      FileItemIterator iter = pfu.getItemIterator(request);
      
      while (iter.hasNext()) {
         FileItemStream item = iter.next();
                    
         if(item.isFormField()){
     
            if(item.getFieldName().equals("param1")){
               param1 = IOUtils.toString(item.openStream());
            }
     
         }else {
        
            String fileName = item.getName();
            fileExtension = fileName.substring(fileName.lastIndexOf("."),fileName.length());     
            outStream = new FileOutputStream(getInitParameter("uploadFolder")
            + "\\"
            + "archivoPrueba"
            + fileExtension);
            InputStream stream = item.openStream();
            
            byte[] buffer = new byte[1024];
            while (true) {
               int bytes = stream.read(buffer);
               if (bytes <= 0) {
               break;
            }
            outStream.write(buffer, 0, bytes);
         }
         outStream.flush();      
       }
      }
      }
      } catch (Exception ex) {
         ex.printStackTrace();
         if(outStream != null) {
            outStream.close();
         }
      File file = new File(getInitParameter("uploadFolder") + "\\"
      + "archivoPrueba"
      + fileExtension);
      if (file != null && file.canRead() && file.canWrite()) {
         file.delete();
      }
      logger.debug("Error "+ ex.getMessage());
   }
   finally {
      if (outStream != null) {
         outStream.close();
      }
   }
}
Donde param1 sera el parametro que recibiremos de nuestra forma, y la magia se hace en las lineas 13 al 17 que es donde obtenemos con ayuda de los jars de apache los valores de los campos.

Ahora necesitamos la forma en la cual se subira el archivo y el campo:

Donde definimos el actionURL con el name que le pusimos a la anotacion para que se haga el mapeo de la accion, y el enctype lo definimos como multipart/form-data para indicar que se subira un archivo y datos de una forma.

martes, 7 de febrero de 2012

Año Nuevo, Todo Nuevo

Pues no habia tenido la oportunidad de escribir ninguna entrada ya que este inicio de año fue muy ajetreado, me surgio una oportunidad de trabajo que no pude rechazar y hasta cambie de ciudad.
Pero lo importante es que sigo trabajando con el WebSphere Portal Server y sigo desarrollando portlets.
Por cierto que estoy leyendo el libro de Portlets In Action y esta buenazo, asi que si estan desarrollando portlets es un must have.
Este año me estare enfrentando con nuevos retos y aprendiendo muchisimas cosas nuevas, de hecho ya le heche un ojo a unos cursos de Spring para ampliar mi set de herramientas y aplicar las mejores practicas que hay actualmente.
Tambien quiero entrar de lleno con Grails este año, todavia no encuentro algun curso, por que he de decir que es mas rapido que aprendas de alguien con experiencia que con un tutorial.
Bueno, muchas cosas buenas nos esperan este año en el campo profesional.
El consejo que les doy es que uno se arrepiente mas de las cosas que no hace que de las que hace.
Si tienen una oportunidad profesional, analicenla, y vayan por ella si les conviene, como decia Steve Jobs: don't settle.