Problemas con Ubuntu 13.04 y tarjetas Wifi Broadcom

Después de varios años utilizando Ubuntu 10.10 (Maverick MeerKat), decidí instalar Ubuntu 13.04 (Raring Ringtail) a pesar de que Unity aún no me convence del todo. Después de realizar la instalación e iniciar sesión una de las primeras cosas que noté, ademas del cambio en el aspecto gráfico que es evidente, fue que no me detectó la tarjeta Wifi.

Estuve un rato buscando, conectado a la red cableada, y encontré este post en donde dice que parece ser un problema de compatibilidad entre las ultimas versiones de Ubuntu y las tarjeta wifi Broadcom modelo b43XX (4311, 4313, etc).

A continuación indico los pasos que realicé para solucionar el inconveniente,

1) Lo primero es revisar que efecto tenemos una tarjeta wifi Broadcom serie b43XX, para esto ejecutamos el siguiente comando en el terminal (Ctr + Alt + T, atajo para abrir el terminal )

lspci | grep Network

Deberá aparecernos una linea como la siguiente

01:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN

Lo cual nos confirma que tenemos una tarjeta wifi Broadcom.

2) En el mismo terminal ejecutamos lo siguiente, para actualizar los repositorios de software de Ubuntu. Nos pedirá que ingresemos la contraseña.

sudo apt-get update

3) Ejecutamos el siguiente comando que se encargar de descargar e instalar el driver para la tarjeta Wifi.

sudo apt-get install firmware-b43-installer

4) Reiniciamos el PC y ya deberíamos tener funcionando el Wifi.

* Por si hay dudas los pasos anteriores los realicé conectado el portátil a la red cableada.

Por lo menos en mi caso, con un portatil Compaq y una tarjeta Wifi Broadcom 4311, los pasos anteriores me sirvieron para solucionar el inconveniente.

Hasta otra. Ralf.

Fuente: blog

Cliente FTP desde el Explorador de Windows

Recientemente un cliente de la empresa donde actualmente laboro, me preguntó si conocia algun cliente FTP que se integrara directamente con Windows, algo asi al estilo DropBox. En un principio la respuesta fue un “No”. Puesto que la mayoría de clientes FTP que había utilizado no contaban con esa característica. Sin embargo, me quedó la inquietud y al buscar, me llevo la sorpresa de que el mismo Explorador de Windows, puede hacer de cliente FTP.

Para utilizar dicha caracteristica, sólo debes ingresar en la barra de direcciones del Explorador de Windows,
ftp://tu_servidor_ftp.com, por ejemplo: ftp://microsoft.com y de esta forma, Windows te mostrará la siguiente ventana, en la cual podrás ingresar tu usuario y contraseña para acceder al servidor.

Una vez hecho esto, podrás navegar en tu servidor FTP, como si de una carpeta más en tu equipo se tratase. Podrás mover y subir archivos con simple “arrastrar y soltar”.

Algo simple, pero que ignoraba.  Hasta otra. Ralf

Fuente: http://learnwebdesignonline.com/windows-explorer-ftp-client

“Windows 7 no me reconoce partición FAT32” (Solución)

En esta ocasión quiero comentarles un caso particular que me sucedió. Resulta que en mi computador tengo varias particiones de disco duro, específicamente, una con FAT32 y dos con NTFS.  Decidí instalar Win7 con el fin de probarlo. Una vez instalado, ingresé a “Mi PC” y !Sorpresa! aparecían las dos particiones NTFS, pero ni rastro de la otra (la FAT32) .

Estuve un rato buscando haber si encontraba alguna solución, pero al parecer a nadie le había ocurrido algo similar. Así que me puse en la tarea de encontrar la solución por mi cuenta y aquí dejo la forma en que pude solucionarlo, por si a alguien le sucede lo comentado anteriormente.

Windows 7 trae consigo una herramienta denominada “Administrador de discos”, la cual se encarga, precisamente, de gestionar (formatear, eliminar, etc.) las particiones de nuestro PC. Para acceder a dicha herramienta debemos dirigirnos a Panel de Control -> Sistema y Seguridad y en la sección que dice “Herramientas Administrativas” seleccionamos la que dice “Crear y formatear particiones de disco duro”.  Otra forma de acceder a la utilidad mencionada es escribiendo en el menú inicio “particionar”.

El administrador de disco nos debe mostrar un listado de todas las particiones presentes en nuestro sistema, deberá aparecer, incluso,  la partición a la que no tenemos acceso.

En la lista de particiones, hacemos clic derecho sobre la partición FAT32 y seleccionamos la opción “Cambiar la letra y rutas de acceso a la unidad”.

En la ventana que nos aparece hacemos clic en el botón “Agregar”, deberá aparecernos la siguiente ventana:

Aquí seleccionamos la opción “Asignar la letra de unidad siguiente” y de la lista despegable podemos seleccionar la letra que le asignaremos a la unidad. Hacemos clic en Aceptar y listo, ahora Windows reconocerá la partición y podemos acceder a ella.

Eso es todo, espero que le sea de utilidad a alguien.

Hasta otra,

Ralf.

Exportar reportes de JasperReports a pdf,xls y html en aplicaciones web.

Hace poco estube trabajando (para fines academico) en una aplicación web , y como toda apliación con un minimo grado de respeto, se hizo necesario generar reportes.  Conocía JasperReports, una gran herramienta para generar reportes en Java; al igual que iReport, un editor que permite crear los reportes para JasperReports de manera grafica. En anteriores proyectos había trabajado con estas herramientas, pero sólo para aplicaciones de escritorio, nunca los habia utilizado en aplicacion web. Necesitaba que los reportes estubieran disponbles en tres formatos: pdf, xls y html; y como  no sabia qué hacer, tocó buscar. A continuación presento de forma detallada los métodos utilizados para exportar los reportes en los formatos anteriormente mencionados.

import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;
import net.sf.jasperreports.engine.JRException;

public class Reportes extends HttpServlet {    //usamos un Servlet para generar los reportes
private String rutaRep;

public void init(ServeletConfig fgc)
{
   rutaRep = fgc.getServletContext().getRealPath("Directorio_de_los_Reportes");
}

//Método que exporta el reporte en pdf
private void exportPdf( HttpServletResponse response,String narchivo,HashMap param) throws IOException
{
response.setContentType("application/pdf");
JasperReport js;
JasperPrint jp;
JRExporter exporter=null;
OutputStream op=response.getOutputStream();
try{
 js = JasperManager.compileReport(rutaRep+"\\"+narchivo);
 jp = JasperManager.fillReport(js,param,Motor.getConexion());
 byte[] bites = JasperExportManager.exportReportToPdf(jp);
 response.setHeader("Content-disposition", "attachment; filename=Informe.pdf");
 response.setContentLength(bites.length);
 op.write(bites);
 op.close();
 }
 catch(Exception e)
 {
  JOptionPane.showMessageDialog(null,e);
 }
}

//exporta en html
private void exportHtml(HttpServletResponse response,String narchivo,HashMap param) throws IOException
{
 response.setContentType("text/html");
 JasperReport js;
 JasperPrint jp;
 JRExporter exporter=null;
 try{
 js = JasperManager.compileReport(rutaRep+"\\"+narchivo);
 jp = JasperManager.fillReport(js,param,Motor.getConexion());
 exporter = new JRHtmlExporter();
 exporter.setParameter(JRExporterParameter.JASPER_PRINT,jp);
 exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,response.getWriter());
 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/image?image=");

 if(exporter!=null)
 exporter.exportReport();
 }
 catch(Exception e)
 {
 JOptionPane.showMessageDialog(null,e);
 }
}

//exporta a xls
private void exportXls(HttpServletResponse response,String narchivo,HashMap param) throws IOException
 {
 try{   

 JasperReport report = JasperCompileManager.compileReport(rutaRep+"\\"+narchivo);
 JasperPrint print = JasperFillManager.fillReport(report,param,Motor.getConexion());
 OutputStream out = response.getOutputStream();

 ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
 JRXlsExporter exporterXLS = new JRXlsExporter();                

 exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, print);
 exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, arrayOutputStream);
 exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
 exporterXLS.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
 exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
 exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
 exporterXLS.exportReport();

 response.setHeader("Content-disposition", "attachment; filename=ListadoPDF");
 response.setContentType("application/vnd.ms-excel");
 response.setContentLength(arrayOutputStream.toByteArray().length);
 out.write(arrayOutputStream.toByteArray());
 out.flush();
 out.close();

 }catch(JRException e)
 {
 JOptionPane.showMessageDialog(null,e);;
 }

 }

}

En los 3 metodos mostrados anteriormente son comunes estas dos lineas de codigo:

1) js = JasperManager.compileReport(rutaRep+”\\”+narchivo);
2) jp = JasperManager.fillReport(js,param,Motor.getConexion());

La primera linea se encarga de compilar el reporte, invocando el metodo JasperManager.compileReport(), el cual recibe como parametro la direccion o ruta donde se encuentra el archivo fuente del reporte. En mi caso la variable rutaRep, que se inicializa en el metodo init del servlet, almacena la direccion de la carpeta donde se encuentran alojados los fuentes de los reportes y el parametro narchivo indica el nombre del archivo a seleccionar.

La segunda linea se encarga de llenar el reporte. El metodo invocado recibe tres parametros: el primero de ellos es una referencia al reporte a llenar; el segundo contiene los parametros necesario para llenar el reporte (si no son necesarios se pasa null); y el tercero es una referencia a la conexion con la base de datos, en mi caso utilizo una clase llamada Motor, encargada de gestionar la conexion e invoco su metodo getConexion(), que devuelve precisamente la referencia a la bd.

Ahora solo queda invocar al metodo del servlet correspondiente dependiendo del tipo de formato que selecciona el usuario en la interfaz grafica.  A continuacion muestro un pequeño ejemplo de como invocar los metodos.

protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {

 String tipo = request.getParameter("tipo");
 if (tipo.equals("pdf")) {
     this.exportPdf(response, "ejemplo.jrxml",null);
  }else if (tipo.equals("xls")) {
    this.exportXls(response, "ejemplo.jrxml",null);
  }

}

Espero y sea de utilidad a alguien.

Hasta otra, Ralf.

Realizar backup de mysql desde java.

Cuando realizamos programas que utilizan bases de datos, sea hace necesario, en ocasiones, brindar al usario la posibilidad de relizar una copia de seguridad (backup) de sus datos. A continación presento un codigo que realiza el backup de una base de datos creada en mysql a traves de java.

</code>

import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;

public class MysqlExporter {

public void exportDB() {
 int BUFFER = 10485760;
 //ruta archivo donde se guardara el backup
 String path = "E://myBackup.sql";
 //nombre de usuario de la base de datos
 String mysqluser = "user";
 //password del usuario
 String mysqlpassword = "password";
 //nombre de la base de datos
 String mysqldb = "base_name";
 String dumpCommand = "C://xampp//mysql//bin//mysqldump -u"+mysqluser+" -p"+mysqlpassword+" --skip-comments --skip-triggers "+mysqldb;
 //System.out.println(dumpCommand);
 File tst = new File(path);
 FileWriter fw = null;
 try {
 fw = new FileWriter(tst);
 fw.close();
 } catch (IOException ex) {
 ex.printStackTrace();
 }
 Runtime rt = Runtime.getRuntime();
 try {
 Process proc = rt.exec(dumpCommand);
 InputStream in = proc.getInputStream();
 InputStreamReader read = new InputStreamReader(in, "latin1");
 BufferedReader br = new BufferedReader(read);
 BufferedWriter bw = new BufferedWriter(new FileWriter(tst, true));
 String line = null;
 StringBuffer buffer = new StringBuffer();

int count;
 char[] cbuf = new char[BUFFER];
 while ((count = br.read(cbuf, 0, BUFFER)) != -1) {
 buffer.append(cbuf, 0, count);
 }
 String toWrite = buffer.toString();
 bw.write(toWrite);
 bw.close();
 br.close();
 } catch (IOException e) {
 e.printStackTrace();
 }

}

public static void main(String args[]) {
 MysqlExporter exporter = new MysqlExporter();
 exporter.exportDB();
 }
 }

En el codigo anterior, la variable path de tipo String es la ruta del archivo donde se guardara el backup.

Debemos asignar a las variables mysqluser, mysqlpassword, mysqldb los valores correspondientes para establecer la conexión con el motor.
La variable dumpCommand contiene el comando que ejecutara el backup, como se observa en el codigo, el valor de esta variable empieza por “C://xampp//mysql//bin//mysqldump“, que en mi caso es donde tengo instalado el motor. Esto debe ser remplazado por la ruta en donde tu tengas instalado el motor, que por lo general se encuentra en directorio_instalacion_mysql/bin/mysqldump.

Quiero aclarar que el codigo presentado no es de mi autoria, y que lo encontre en una pagina en ingles, le hice algunas modificaciones y hasta el momento me ha funcionado correctamente. Espero y le sea de gran utilidad a alguien.

Hasta otra,

Ralf.

Configurar modem Huawei E226 de comcel en ubuntu.

Hace poco me suscribí al servicio de internet movil de comcel, el cual cuenta con una especie de modem que se conecta al pc atraves de un puerto USB. En mi caso, dicho modem, es el HUAWEI E226. Todo funciona muy bien bajo windows y sobre mac, ya que el modem trae los controladores para estos dos sistemas operativos, pero ¿qué pasa si lo queremos configurar en Ubuntu ?. Despúes de un rato de búsqueda encontré la forma de hacerlo, que por cierto, es muy sencilla.

Debido a que el modem no es reconocido en linux, de la forma como lo hace windows, debemos utilizar la aplicacion wvdial la cual se encargar de administrar todas las conexiones via modem.
Lo primero que debemos hacer es configurar un conexión. Para esto debemos modificar (como super usuario) el archivo /etc/wvdial.conf . Podemos hacerlo tipeando: sudo gedit /ect/wvdial.conf . Luego debemos remplazar su contenido por esto:

[Dialer Defaults]
Phone = *99#
Username = COMCELWEB
Password = COMCELWEB
Stupid Mode = 1
Dial Command = ATDT

[Dialer reset]
Modem = /dev/ttyUSB0
Init1 = AT

[Dialer comcel]
Phone = *99#
Username = COMCELWEB
Password = COMCELWEB
Stupid Mode = 1
Dial Command = ATDT
Modem = /dev/ttyUSB0
Baud = 460800
Init2 = ATZ
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Modem Type = Analog Modem
Init5 =AT+CGDCONT=1,”IP”,”internet.comcel.com.co”

Guardamos el archivo y listo. De ahora en adelante, para acceder a la conexión escribimos en una consola wvdial comcel. Aparecerán un poco de lineas en la consola (todo normal) y ya, tenemos funcionando el modem. Lo unico malo es que los dns que se configuran a la conexión no son los correctos, por lo tanto toca configurarlos manualmente. Para realizar esto desde windows escribimos en una consola ipconfig -all y copiamos en un papel los dns correspondientes a la conexion de comcel. Nuevamente volvemos a Ubuntu y arrancamos la conexion, como mencionamos anteriormente (wvdial comcel en una consola). Ahora nos dirigimos al icono(dos computadores) donde se indica la conexion de red (parte superior derecha de la pantalla) y damos click sobre él.

red

Seleccionamos la opción “configurar manualmente”, aparecerá la siguiente ventana.

dns

Seleccionamos la pestaña “DNS”, damos click en la opcion “añadir” e  insertamos los dns que obtuvimos en windows. Eso es todo, ahora podemos disfrutar del servicio de internet movil comcel bajo linux.  El unico inconveniente de este proceso, es que cada vez que nos conectamos debemos realizar el ultimo paso, el de añadir los dns, ya que éstos no cambian, por lo que no tenemos que volver a windows a averiguarlos (gracias a Dios). Hasta ahora lo he probado y no he tenido ningun inconveniente. Espero y sea de gran ayuda. Hasta otra.

Ralf.