Blog de Maki

Un blog de conocimiento libre.

10 ago 2014

Crear un USB booteable de Windows usando Windows

En primer lugar vamos a definir brevemente que significa bootear: Bootear se refiere a modificar el orden de arranque de tus dispositivos de almacenamiento (DVD, CD, Disco Duro, Memorias USB, Tarjetas SD, etc.), es decir, hacer que el PC intente iniciarse desde un dispositivo de almacenamiento siguiendo el orden que se haya seleccionado previamente en la BIOS. Así tenemos n tipos de booteos para n dispositivos de almacenamiento de un PC. El booteo más conocido es el realizado desde un CD para hacer la instalación de un Sistema Operativo.

Bien una vez tenemos claro lo que significa bootear ya se puede llegar a entender el titulo de esta entrada. ¿Para qué gastar un CD/DVD cuando podemos usar un simple Pendrive (Memoria USB) el cual podemos formatear y volver a utilizar con normalidad? Es obvio que nos quedamos con la opción de usar el pendrive, pero ¿Cómo se hace booteable un pendrive? Tranquilo yo te lo explico a continuación para hacerlo desde Windows.

Para conseguir un pendrive booteable de cualquier Windows usando Windows, valga la redundancia, seguimos los siguientes pasos:

  1. Descargamos WinToFlash desde el siguiente enlace: Descargar WinToFlash 

  1. Una vez descargado y extraído, procedemos a ejecutar el ejecutable, el cual en primera estancia nos aparecerá una ventana como esta, la cual solo le daremos Click en el cuadro para iniciar el asistente (Recomendable).
  1. Aparecerá el asistente, una ventana como esta, donde solo debemos presionar Siguiente.
  1. En la siguiente ventana, aparecerán las unidades de Origen y Destino, en el primer recuadro, debemos seleccionar el Origen de los Archivos de Windows (Unidad de CD/DVD) y en el segundo apartado, seleccionaremos la unidad de destino (Pendrive/USB). 
  1. Cuando estén las dos unidades seleccionadas, damos click en Siguiente. A continuación, nos saldrá la pantalla de Licencia del Windows que hayamos seleccionado, el cual debemos leerlas y si estamos de acuerdo, presionamos Continuar.

  1.  Después, nos saldrá una pantalla de advertencia que nos dirá que TODOS nuestros datos de la memoria USB serán borrados. Si estamos de acuerdo, presionamos OK.

  1.  En seguida, comenzara el formateo de la Unidad Flash, y el proceso de copiado de datos, tarda en promedio 5 minutos.

  1.  En cuanto termine de copiar los datos, nos mostrara un mensaje de Finalizado, daremos click en Siguiente, y en seguida nos mostrara una pantalla que nos dirá que todo ha finalizado correctamente.


Damos Click en Salir, desenchufamos nuestra Unidad USB/Pendrive del PC, y ya estará listo para instalar Windows.

*Nota: Para que el PC inicie desde el USB es necesario acceder a la BIOS y cambiar el orden de arranque/inicio (Opción Boot) para que primero intente arrancar/iniciar desde el pendrive. La BIOS depende del ordenador y hay que saber bien que opciones se tocan porque puedes dañar el PC, por ello aconsejo mirar tutoriales o buscar información referente a la BIOS de tu PC si no sabes como usarla.

19 sept 2013

Activar Windows 7

Como la mayoría no podemos o no queremos pagar por una licencia válida para activar nuestro sistema operativo Windows no nos queda más remedio que usar activadores que encontramos por internet, pero claro encontrar uno que realmente funcione es algo complicado. Por ello aquí os voy a dejar un activador que realmente funciona.

Antes de nada os pongo las versiones de Windows con las que es compatible:
  1. Windows 7 Ultimate
  2. Windows 7 Ultimate E
  3. Windows 7 Professional
  4. Windows 7 Professional E
  5. Windows 7 Home Premium
  6. Windows 7 Home Premium E
  7. Windows 7 Home Basic
  8. Windows 7 Starter
  9. Windows 7 Starter E
  10. Windows Vista Ultimate
  11. Windows Vista Business
  12. Windows Vista Business N
  13. Windows Vista Home Premium
  14. Windows Vista Home Basic
  15. Windows Vista Home Basic N
  16. Windows Vista Starter
  17. Windows Server 2008 Enterprise
  18. Windows Server 2008 Enterprise (Without Hyper-V)
  19. fWindows Server 2008 Foundation
  20. Windows Server 2008 Standard
  21. Windows Small Business Server 2008
  22. Windows Storage Server 2008 Standard
  23. Windows Storage Server 2008 R2 Essentials
  24. Windows Server 2008 R2 Enterprise
  25. Windows Server 2008 R2 Foundation
  26. Windows Server 2008 R2 Standard
  27. Windows Server 2008 R2 Datacenter
  28. Windows Small Business Server 2011 Standard
  29. Windows Small Business Server 2011 Essentials
  30. Windows Home Server 2011
  31. Windows Server 2012 Standard
  32. Windows Server 2012 Essentials
  33. Windows Server 2012 Foundation
  34. Windows Server 2012 Datacenter
  35. Windows Storage Server 2012 Standard
  36. Windows Storage Server 2012 Workgroup
  37. Windows MultiPoint Server 2012 Standard
  38. Windows MultiPoint Server 2012 Premium
Ahora os pongo los pasos a seguir para utilizarlo:
  1. Click derecho sobre Windows Loader y ejecutar como administrador.
  2. Click en el boton Install, esperar a que termine.
  3. Cuando termine reiniciar y Listo.
Como veis es algo extremadamente difícil de usar. Bromas a parte, dejo el activador en cuestión:

Activador

*Nota: Si habéis usado otro activador antes que este es muy posible que os falle, así que no os quedará más remedio que buscar otro. En el caso de que este sea el primero que utilizáis funcionará perfectamente. 

31 ago 2013

Verificar que una dirección de correo de Gmail existe o no en Java.

He de decir que este programa tiene una complejidad media-alta ya que hay que tener en cuenta muchos factores, por ello voy a ir explicando los más importantes paso a paso. También hay que saber que para usar este método hay que disponer previamente de una cuenta propia de Gmail para poder realizar la consulta de la cuenta ajena en cuestión, por tanto si no tienes una cuenta de Gmail debes crearla. Empezemos con la explicación:

Algunos servidores de correo son tan amables que proporcionan cierta información a todo aquel que se lo pida así que nos vamos a aprovechar de eso:
  1. En primer lugar tenemos que crear un cliente Telnet para Java. Para ello necesitamos descargar estas librerías externas y agregarlas al ClassPatch de nuestro proyecto:
  2. jakarta-oro-2.0.8.jar
    Telnet.jar
    commons-io-2.4-bin.tar.gz

  3. Después importamos las siguientes librerías a nuestro proyecto:
  4. import javax.swing.JTextField;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JLabel;
    import java.awt.Font;
    import org.apache.commons.net.telnet.TelnetClient;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    
    import java.awt.EventQueue;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    
    Si el paso anterior se ha hecho correctamente no debería de dar ningún error.

  5. Ahora añadimos el método para realizar la conexión al servidor de Gmail y ejecutar los comandos necesarios para nuestro cliente Telnet:
  6. private void connect(String correo) 
    {
        try 
        {
            //El parametro correo es el correo
            //que queremos comprobar
            serverName = "aspmx.l.google.com";
            Pattern p;
            Matcher m;
           
            //Abro la conexión al Telnet por el puerto 25
            telnet.connect(serverName, 25);
    
    
            //Ahora necesito una forma de leer las respuestas que
            //me envía el telnet, para esto obtenemos un InputStream
            //del objeto telnet
            in = telnet.getInputStream();
    
            //Ahora necesito una forma de enviarle los comandos al telnet
            //para esto obtengo un OutputStream desde el objeto telnet
            out = new PrintStream(telnet.getOutputStream());
    
    
            //Ahora envuelvo el InputStream dentro de un BufferedReader
            //para que la lectura de las respuestas del telnet sean mucho
            //mas sencillas y mejor gestionadas
            reader = new BufferedReader(new InputStreamReader(in));
           
            //procedemos a ingresar el primer comando
            //a través del método write, el cual escribe en la consola
            write("HELO hola");
            
            //Leemos por consola hasta la que encuentra la palabra service
            readUntil("service");
    
            
            //Aquí debéis poner vuestro correo personal(correo_Personal), por tanto
            //borráis correo_Personal y ponéis por ejemplo pepito@gmail.com
    
            write("mail from:<correo_Personal>");//IMPORTANTE: Es necesario poner una
            readUntil("gsmtp");                //cuenta de correo que exista para que funcione
    
            write("RCPT TO:<"+correo+">");//La variable correo es el correo a consultar
            readUntil("gsmtp");                
            
            //Aquí esta el "truco" para saber
            //si existe el correo, con esto comprobamos
            //si la consola nos ha devuelto un 250 o no.
            //Si es un 250 existe sino no
            p = Pattern.compile("250");
            
            //La variable cadena debe de ser un atributo
            //de la clase y es de tipo String.
            m = p.matcher(cadena);
            if (!m.find())
             JOptionPane.showMessageDialog(contentPane, "No existe este correo.");
            else
             JOptionPane.showMessageDialog(contentPane, "Existe este correo.");
            tfComprobar.setText(null);
            
        } 
        catch (Exception e)
        {
            e.printStackTrace();
        } finally 
        {
            try
            {
             //Liberamos recursos
             out.close();
             reader.close();
             in.close();
             telnet.disconnect();
            } catch (IOException ex) 
            {
                Logger.getLogger(TelnetClientJava.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
  7. Añadimos el método write:
  8.     public void write(String value) 
        {
         try {
             out.println(value);
             out.flush();
             //System.out.println(value);
         } catch (Exception e) {
             e.printStackTrace();
         }
        }
    
  9. Por último el método readUntil:
  10.    public String readUntil(String pattern) 
        {
            StringBuffer sb = new StringBuffer();
    
            try {
                char lastChar = pattern.charAt(pattern.length() - 1);
    
                boolean found = false;
    
                int check = in.read();
                char ch = (char) check;
                while (check != -1) {
                    //System.out.print(ch);
                    sb.append(ch);
                    if (ch == lastChar) {
                        if (sb.toString().endsWith(pattern)) 
                        {
                            //Hay que declarar la variable cadena
                            //como un atributo de la clase y de 
                            //tipo String
                            cadena=sb.toString();
                         return sb.toString();
                        }
                    }
                    check = in.read();
                    ch = (char) check;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return sb.toString();
        }
    
Con esto tendríamos todo lo necesario para poder consultar si un correo de Gmail existe o no pero como reconozco que es complejo y para muchos, sobre todo principiantes en Java, puede ser un infierno voy a pasar el programa completo para que sólo se tenga que importar y probar:

Aplicación comprobación correo

*Nota: En el proyecto saldrán dos tipos de errores. El primero se debe a que debéis de añadir las librerías externas (jar) que tiene ya que ahora mismo están con mi ruta, es decir C:\MiUser\.. Para arreglarlo debéis de agregarlas de nuevo vosotros. El segundo error es un error intencionado que he añadido para que no se os olvide que tenéis que poner en el código vuestra dirección de correo personal de GMail.

Cómo insertar hojas de cálculo en en una página web o blog

Insertar una hoja de Microsoft Excel en una página web es algo muy sencillo, elegante y gratuito. Para poder hacerlo es necesario tener una cuenta de Skydrive.Vamos a ver un ejemplo:
  1. Preparamos nuestra hoja de excel. En mi caso una hoja para calcular la media de diez números.
  2. Una vez acabada accedemos a Archivo->Guardar y enviar->Guardar en la web y guardamos en nuestro Skydrive:
  3. Después abrimos la hoja de cálculo desde nuestro Skydrive, seleccionamos el área que queremos mostrar en nuestra página web y accedemos a Archivo->Compartir->Insertar:
  4. A continuación configuramos las opciones a nuestro gusto. Para que la imagen se vea bien la pongo para que se vea en una nueva pestaña:

    Configuración hoja web



  5. Copiamos el código en JavaScript y lo añadimos al código html de nuestra web:
  6. Listo ya podemos insertar nuestra hoja de cálculo. Podéis probarla y comprobar que realmente funciona:

25 ago 2013

Como usar un JCheckBox en Java

Los JCheckBox (botones de comprobación) se utilizan generalmente como botones de estado. Es decir proporcionan información del tipo Sí o No.Estos botones pueden resultar de mucha utilidad sobre todo a lo hora de rellenar formularios pero también pueden resultar útiles para realizar unas determinadas acciones dependiendo de su estado, es decir,cuando se selecciona ocurre una acción concreta y cuando se desmarca puede ocurrir otra .Un ejemplo de JCheckBox podría ser el siguiente:

 Vamos a verlo con un ejemplo sencillo hecho paso a paso:
  1. En primer lugar importamos las librerías necesarias:
        import javax.swing.JCheckBox;
        import java.awt.event.ItemListener;
        import java.awt.event.ItemEvent;
      
  2. Creamos el JCheckBox:
        JCheckBox cbFunciona = new JCheckBox("Activar bot\u00F3n Funciona");
        cbFunciona.setBounds(172, 57, 145, 23);
        contentPane.add(cbFunciona);
      
  3. Ahora creamos el evento que nos permitirá realizar una determinada acción si se selecciona el JCheckBox y otra cuando no esté seleccionado:
        cbFunciona.addItemListener(new ItemListener(){
       @Override
       public void itemStateChanged(ItemEvent e) 
       {
        if(e.getStateChange()==ItemEvent.SELECTED)
         //Acción cuando es seleccionado
        else
        {
         //Acción cuando no está seleccionado
        }
       }
      });
      
Listo ya podemos usar nuestro JCheckBox. Para que se vea más claro voy a poner el siguiente ejemplo, en el que al marcar el JCheckBox se activa un botón y cuando se desmarcar se desactiva, que podéis copiar y pegar tal cual para probarlo:
package ejemplo;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class JCheckbox extends JFrame {

 /**
  * 
  */
 private static final long serialVersionUID = 1L;
 private JPanel contentPane;
 JButton btnFunciona;

 /**
  * Launch the application.
  */
 public static void main(String[] args) {
  EventQueue.invokeLater(new Runnable() {
   public void run() {
    try {
     JCheckbox frame = new JCheckbox();
     frame.setVisible(true);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  });
 }

 /**
  * Create the frame.
  */
 public JCheckbox() {
  setTitle("Ejemplo de uso de JCheckbox");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setBounds(100, 100, 450, 239);//Puede ser necesario ajustar este tamaño
  contentPane = new JPanel();
  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
  setContentPane(contentPane);
  contentPane.setLayout(null);
  
  btnFunciona = new JButton("Funciona");
  btnFunciona.setEnabled(false);
  btnFunciona.setBounds(172, 57, 176, 23);//Puede ser necesario ajustar este tamaño
  contentPane.add(btnFunciona);
  
  JCheckBox cbFunciona = new JCheckBox("Activar bot\u00F3n Funciona");
  cbFunciona.setBounds(172, 57, 145, 23);//Puede ser necesario ajustar este tamaño
  contentPane.add(cbFunciona);
  cbFunciona.addItemListener(new ItemListener(){
   @Override
   public void itemStateChanged(ItemEvent e) 
   {
    if(e.getStateChange()==ItemEvent.SELECTED)
     btnFunciona.setEnabled(true);
    else
    {
     btnFunciona.setEnabled(false);
    }
   }
  });

 }
}
Nota: Tened en cuanta que el nombre de la clase que creáis sea JCheckBox y el paquete se llame ejemplo porque si son distintos y no los cambiáis os dará error. También puede ocurrir que al ejecutar el programa el tamaño de la ventana no se ajuste bien y entonces el botón y el checkbox no se vean correctamente, para solucionar eso solo hay que ajustar los tamaños de los mismos.

24 ago 2013

Publicar código de programación en Blogger

Seguro que todos los usuarios que ponen su código de algún lenguaje de programación en Blogger quieren que se vea de una forma llamativa, con formato, resaltado en colores y demás. Pues la mala noticia es que en Blogger no se puede hacer esto por defecto, pero podemos arreglarlo con SyntaxHighlighter.

SyntaxHighlighter es un resaltador de código desarrollado en JavaScipt y es código líbre. Como en Blogger no se pueden subir archivos usaremos su versión online.

En primer lugar accedemos a la sección Plantilla y pinchamos en Editar HTML:


Ahora tenemos que insertar el siguiente código dentro de la etiqueta <head>.Los script que añado son  para poder insertar un determinado lenguaje de programación, es decir, cada script que hay sirve para poder insertar código de un lenguaje determinado. Más adelante os diré como usarlo correctamente:
<!--SYNTAX HIGHLIGHTER INICIO-->
<link rel="stylesheet" type="text/css" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css"/>
<link rel="stylesheet" type="text/css" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js" type="text/javascript"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript"/>
<script language="javascript">
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = "http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf";
SyntaxHighlighter.all();
</script>
<!--SYNTAX HIGHLIGHTER FIN--> 

Le damos a Guardar plantilla y ya podemos hacer nuestra primera prueba. Vamos a insertar el típico "Hello World" de Java. Para ello tenemos que irnos a la pestaña HTML cuando creamos nuestra nueva entrada y encerrar todo el código en una etiqueta <pre>. Quedaría de la siguiente forma:
<pre class="brush: java">
public class HelloWorld 
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World");
    }
}
</pre>

En esta entrada he usado únicamente código en HTML pero esta herramienta se puede utilizar para muchos más lenguajes de programación. En la siguiente lista están todos los lenguajes soportados:
LenguajeCon que nombres se deben utilizar Que archivo se debe incorporar
ActionScript3as3, actionscript3shBrushAS3.js
Bash/shellbash, shellshBrushBash.js
ColdFusioncf, coldfusionshBrushColdFusion.js
C#c-sharp, csharpshBrushCSharp.js
C++cpp, cshBrushCpp.js
CSScssshBrushCss.js
Delphidelphi, pas, pascalshBrushDelphi.js
Diffdiff, patchshBrushDiff.js
Erlangerl, erlangshBrushErlang.js
GroovygroovyshBrushGroovy.js
JavaScriptjs, jscript, javascriptshBrushJScript.js
JavajavashBrushJava.js
JavaFXjfx, javafxshBrushJavaFX.js
Perlperl, plshBrushPerl.js
PHPphpshBrushPhp.js
Plain Textplain, textshBrushPlain.js
PowerShellps, powershellshBrushPowerShell.js
Pythonpy, pythonshBrushPython.js
Rubyrails, ror, rubyshBrushRuby.js
ScalascalashBrushScala.js
SQLsqlshBrushSql.js
Visual Basicvb, vbnetshBrushVb.js
XMLxml, xhtml, xslt, html, xhtmlshBrushXml.js

Por ejemplo si queremos publicar código Java según la columna 3 de la tabla debemos de añadir, dentro de la etiqueta <head> mencionada anteriormente, la siguiente línea de script:
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js" type="text/javascript"></script>

Nota. Si queremos publicar código xml, xhtml, xslt, html y xhtml debemos considerar que dentro de las etiquetas <pre> no debemos utilizar los caracteres <  > en vez de ello utilizaremos &lt; y &gt; respectivamente, todo esto para no confundir al código html.

Cómo usar JFileChooser en Java

JFileChooser es una clase java que nos permite mostrar fácilmente una ventana para la selección de un fichero. Si queremos abrirlo para leer un fichero, podemos llamarlo así:
JFileChooser fileChooser = new JFileChooser();
int seleccion = fileChooser.showOpenDialog(null);
//Donde pone null es donde queréis que se abra la ventana.

La ventana de este JFileChooser sería así:
JFileChooser

Cuando seleccionemos una opción, en selección tendremos:
  1. JFileChooser.CANCEL_OPTION.Si el usuario le ha dado al botón cancelar.
  2. JFileChooser.APPROVE_OPTION.Si el usuario le ha dado al botón abrir.
  3. JFileCHooser.ERROR_OPTION.Si ha ocurrido algún error.
De esta forma comprobamos que se ha pulsado el botón abrir:
if (seleccion == JFileChooser.APROVE_OPTION)
{
   File fichero = fileChooser.getSelectedFile();
   //Acciones que se quieran realizar
}

Con el resto de opciones sería casi igual, lo único que habría que hacer es cambiar la condición del if.

Para seleccionar un fichero para guardar datos, el mecanismo es igual, salvo que hay que cambiar la opción showOpenDialog() por showSaveDailog. Con esto conseguimos que el botón abrir se llame guardar.
JFileChooser fileChooser = new JFileChooser();
int seleccion = fileChooser.showSaveDialog(null);
if (seleccion == JFileChooser.APPROVE_OPTION)
{
   File fichero = fileChooser.getSelectedFile();
   // Acciones
}

Si no queremos que se muestren todos los archivos de un directorio sino un tipo específico podemos añadir un filtro de la siguiente forma:
JFileChooser jf = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF", "jpg", "gif");
jf.setFilter(filter);
Este ejemplo de filtro se usaría para filtrar archivos con extensión .jpg y .gif