July 2nd 2008

Google + Shell = Goosh :: lesthack

Todos usamos a diario este poderosisimo motor de búsqueda simplemente tecleando en la caja de búsqueda lo que necesitamos, pero goosh.org nos da la posibilidad de sentirnos  mas geeks haciéndolo en modo consola (al viejo estilo unix).

Obteniendo la ayuda de nuestra consola:

Realizando una búsqueda:

Existe algunos comandos muy interesantes, como addengine que nos agrega como motor de búsqueda a goosh a nuestro firefox, o gmail que nos permite revisar el correo.

Enlace: http://goosh.org

No Comments yet »

June 30th 2008

GPG :: nick

Introducción

La seguridad en las comunicaciones es un tema muy importante y delicado que no debemos tomar a la ligera, en internet sobre todo en donde el robo de identidad y de información es muy frecuente. Para evitar esto podemos tomar algunas medidas al respecto.

GPG es una herramienta de cifrado y firmas digitales, es la alternativa libre a PGP, ambas herramientas están basadas en el estándar OpenPGP. GPG es software libre.

El estándar OpenPGP usa como sistema de cifrado/firma un par de llaves: publica y privada. A esto se le conoce como Sistemas de cifrado asimétrico. Estas llaves nos permiten cifrar o firmar un documento.

La llave publica debe distribuirse a todas las personas con las que queremos mantener comunicación cifrada y/o que quieran verificar nuestras firmas, mientras que la llave privada la mantendremos nosotros, y nunca la compartiremos, para descifrar los mensajes que nos envían las demás personas.

Lo que se cifra con la llave publica se descifra con la llave privada y viceversa, lo que se cifra con la llave privada se descifra con la llave publica. En otras palabras, si queremos enviar un mensaje de tal forma que solo el destinatario lo pueda leer, debemos usar la llave publica de esta persona para cifrar el mensaje así con su llave privada esta persona descifrara el mensaje; si queremos enviar un documento firmado debemos usar nuestra llave privada para cifrarlo y con nuestra llave publica cualquier persona podrá descifrarlo y comprobara que fuimos nosotros quienes lo enviamos.

Ejemplos

Supongamos que Pedro quiere enviar un mensaje cifrado a Jaime, para esto Pedro debe tener la llave publica de Jaime y cifrar el mensaje con esta, posteriormente, Jaime, con su llave privada descifra el mensaje de Pedro.

Supongamos que Pedro quiere enviar un mensaje firmado a Jaime, para esto Pedro debe usar su llave privada y cifrar el mensaje con esta, posteriormente, Jaime, con la llave publica de Pedro descifrara el mensaje.

Creación de un par de llaves

Requisitos

Lo primero que tenemos que hacer es instalar GPG en nuestro sistema. Para instalarlo, desde una consola y como root.

# apt-get install gnupg

También podemos bajar el código fuente desde la pagina de descargas de GPG o los binarios (la mejor opción para usuarios de Windows).

Con esto ya podemos crear nuestro par de llaves, pero tendríamos que hacerlo desde la consola. Afortunadamente hay un entorno gráfico que nos permite hacer lo mismo. Lo instalamos.

# apt-get install seahorse

Creación

Con esto ya tenemos todo listo para crear nuestro juego de llaves. Iniciamos seahorse.

$ seahorse

Esta es la pantalla principal de seahorse:

Pantalla principal

Damos click a la opción Nuevo y después en continue.

Nueva Clave GPG

En la siguiente pantalla introducimos nuestro nombre completo, e-mail y un comentario. El único dato obligatorio es el nombre. En la parte de opciones avanzadas, en la opción tipo de encriptado dejamos seleccionada la opción DSA Elgamal, en la opción fortaleza de la clave podemos dejar 2048 o elegir un valor mas grande, en la opción expiration date seleccionamos Never expires. Y damos click en crear.

Datos

La siguiente pantalla nos preguntara por una contraseña, que podemos dejar en blanco. Y damos click en continuar.

La siguiente pantalla nos muestra el progreso de la creación de las llaves, tarda un poco, sean pacientes.

Proceso

Por ultimo ya tenemos nuestro par de llaves creadas.

Final

Nuestro identificador es 9C558BF7, esta clave la compartiremos con las personas que deseemos mantener comunicación.

Distribución de la llave publica

Compartir nuestra llave publica

Ahora vamos a colocar en un servidor nuestra llave publica para que cualquiera la pueda consultar.

Nos vamos a Editar -> Preferencia en la pestaña servidores de claves, seleccionamos algún servidor y damos click en cerrar.

Preferencias

Regresamos a la pantalla principal. Seleccionamos Remota -> Sincronizar y damos click en sincronizar.

Sincronizar

Ahora nuestra clave publica ya esta disponible para todo el mundo ver.

Obtención de otras llaves publicas

Para esto debemos obtener el identificador de la otra persona y el nombre del servidor en donde este su llave publica.

Supongamos que el servidor es hkp://pgp.mit.edu:11371, y el identificador de la llave publica es C5A3CF1E, también nos puede servir el correo electrónico de esa persona, nicolas(at)ihtoa(dot)org o su nombre, Nicolas Sarmiento.

Teniendo esto, nos vamos a Remote -> Find remote keys, y en el cuadro de texto search for keys containing escribimos el identificador de la clave o el nombre de la persona o su dirección de e-mail, en la opción Where to search seleccionamos el servidor en el cual vamos a buscar. Damos click en search.

Buscar

Se mostrara una pantalla en la cual aparece el resultado de la búsqueda, seleccionamos la clave que vamos a importar y damos click en import.

importar

Finalmente, en la pantalla principal de seahorse nos vamos a la pestaña Other Collected Keys y veremos la llave publica importada.

Llaves publicas

Enlaces

2 Comments »

June 17th 2008

Descarga Firefox 3 Hoy :: lesthack

Hoy 17 de Junio del 2008 (a las 10:00 hora del Pacifico)[12 horas México] inicia un movimiento que tiene como misión romper el record guinness al software mas descargado en 24 horas.

Ya le debemos muchas bondades a Firefox, así que ayudemos en esta causa, apoyando al software libre.

Download Day 2008

Ùnete al movimiento ahora

1 Comment »

June 15th 2008

¿Qué pasaría si procrearan en Springfield? :: lesthack

En WebAdictos me encuentro con este post demasiado gracioso.

barttwins8uw

grampajasper3xj

selmabarney4ra

Via: WebAdictos

Enlace: Foro de Spyware

1 Comment »

June 11th 2008

tipos de Geek :: lesthack

Después de una larga jornada de vacaciones de los integrantes de Ihtoa (de echo largas jornadas de estudio y trabajo en proyectos personales y de escuela) regresamos a ustedes queridos y contados lectores para darle continuidad a este proyecto.

Hoy les presento este excelente trabajo sobre tipos de Geeks (56 para ser preciso) que me ha conmovido.

geeks

El poster completo lo puedes ver aqui. Y para los que no sepan algo sobre el termino geek aqui.

Via: BlogDiseñoGráfico

No Comments yet »

May 19th 2008

Abrir aplicaciones con Java :: mopet

El día de hoy vamos a ver como abrir una aplicación en Java, para eso tenemos que crear un objeto de la clase Process, esta clase representan el proceso del sistema que se crea cuando se utiliza el sistema en tiempo de ejecución para ejecutar comandos del sistema. El paquete java.lang implementa la clase Process y llamamos al método estático getRuntime () que devuelve el objeto de tiempo de ejecución asociado con el uso concurrente con Java que es método de la clase Runtime. El exec(comando) ejecuta el comando dado en el parámetro.

Código de ejemplo.

JAVA:
  1. public class AbrirAplicacionEnJava {
  2.  
  3. public static void main(String[] args) {
  4. try
  5. {
  6.  
  7. Process pro = Runtime.getRuntime().exec ("rundll32 SHELL32.DLL,ShellExec_RunDLL"+"c:\\Dev-Cpp\\devcpp.exe");
  8.  
  9. }
  10. catch (Exception e)
  11. {
  12. System.out.print("Error");
  13.  
  14. }
  15. }
  16.  
  17. }

Este ejemplo funciona para Windows si lo queremos hacer en Linux solo se cambiaría en el comando dado.

Espero les guste, sugerencias o dudas favor de comentarlas.

Para siempre…me parece mucho tiempo.

No Comments yet »

May 19th 2008

String o StringBuffer? :: lesthack

Muchas veces al programar considero muchas cuestiones, como lo es la rapidez, la eficacia del código, y la estabilidad.

En una de esas veces, al intentar programar la lectura de un archivo de texto con java, utilice la clase String para almacenar los caracteres al estilo cadena+=nuevacadena. El archivo era muy pequeño, por lo que la lectura del mismo se hacia a una velocidad considerable, así que incremente la cantidad de información para ver que tan rápido podía concatenar las cadenas.

Mi sorpresa fue grande, pues a considerar que la primer prueba con el archivo pequeño fue tan rápida que no imagine que al incrementar la información la operación pudiera complicarse y hacerse mas tardía.

Intente hacer otra cosa, sin embargo, opte por otra opción que es utilizar StringBuffer, así que hice pruebas para comparar velocidades entre String y StringBuffer.

Para ello, primero diseñe un programa que midiera el tiempo de ejecución, así que debía medir el tiempo antes de iniciar la operación y una vez terminada medirlo de nuevo en una nueva variable para después restarle el primer tiempo medido.

El código de medición quedará así.

main.java

JAVA:
  1. public class main {
  2.  
  3.     public static void main(String args[]){
  4.         double tini = System.currentTimeMillis();
  5.  
  6.             //operaciones o procesos
  7.  
  8.         double ttotal = System.currentTimeMillis() - tini;
  9.         System.out.println("Tiempo de ejecución: " + ttotal/1000 + " seg");
  10.     }
  11. }

En la linea donde esta el comentario "//operaciones o procesos" vamos a poner el proceso que queremos medir, así que me propuse a hacer otra clase que contuviera dos métodos, uno llamado MString(int n) para la clase String y otro llamado MStringBuffer(int n) para la clase StringBuffer. Ambos reciben un valor para n del tipo entero que contendrá el numero e concatenaciones que queremos hacer.

concatenacion.java

JAVA:
  1. public class concatenacion {
  2.  
  3.     public concatenacion(){
  4.  
  5.     }
  6.  
  7.     public void MString(int n){
  8.         String temp = new String("");
  9.         for(int k=0;k<n;k++)
  10.             temp+="1";
  11.     }
  12.     public void MStringBuffer(int n){
  13.         StringBuffer temp = new StringBuffer();
  14.         for(int k=0;k<n;k++)
  15.             temp.append("1");
  16.     }
  17. }

Ambos métodos MString y MStringBuffer son parecidos, ambos con un for de 0 a n, pero podemos darnos cuenta que la concatenación de String la realizamos de la forma temp+="1" y la de StringBuffer de la forma temp.append("1");

La clase main la modifique de esta manera para que me diera el tiempo para ambos procesos.

main.java

JAVA:
  1. public class main {
  2.  
  3.     public static void main(String args[]){
  4.         double tini;
  5.         double ttotal;
  6.         concatenacion temp;
  7.         int n=100;
  8.  
  9.         tini = System.currentTimeMillis();
  10.  
  11.             temp = new concatenacion();
  12.             temp.MString(n);
  13.  
  14.         ttotal = System.currentTimeMillis() - tini;
  15.         System.out.println("Tiempo de ejecución para String: " + ttotal/1000 + " seg");
  16.  
  17.         tini = System.currentTimeMillis();
  18.  
  19.             temp = new concatenacion();
  20.             temp.MStringBuffer(n);
  21.  
  22.         ttotal = System.currentTimeMillis() - tini;
  23.         System.out.println("Tiempo de ejecución para StringBuffer: " + ttotal/1000 + " seg");
  24.     }
  25. }

Donde n tendrá el numero de concatenaciones que haremos de "1", y en primera instancia le puse el valor de 100 para ver al diferencia.

Pruebas

Al correr main.java con n=100
Tiempo de ejecución para String: 0.0010 seg
Tiempo de ejecución para MString: 0.0 seg

Aquí la diferencia es mínima, nada notable, ahora hagamos una prueba mas.

Al correr main.java con n=10000
Tiempo de ejecución para String: 0.299 seg
Tiempo de ejecución para MString: 0.0020 seg

Aquí ya podemos ver una diferencia mas notable, pero que tal con la siguiente prueba.

Al correr main.java con n=100000
Tiempo de ejecución para String: 42.117 seg
Tiempo de ejecución para StringBuffer: 0.01 seg

Claramente vemos la diferencia de los tiempos.

Conclusión: para este tipo de cuestiones de concatenación de información (cadenas) muy grande, es preferible usar StringBuffer.

by: lesthack

3 Comments »

May 17th 2008

Hacer un PDF en Java :: mopet

Vamos el día de hoy a explicar como crear un archivo PDF en Java, editar y darle formato al PDF para darle una presentación magnifica para nuestros trabajos.

Para realizar el archivo tenemos que ver primero la librería que nos ayudara a crear el PDF, en este caso usaremos iText, esta biblioteca nos permite crear y manipular archivos PDF, RTF y HTML en Java, y es una librería Open Source. La descargaremos desde aquí.

Ahora nos apoyaremos desde NetBeans 6.0, ahí añadiremos la librería solo vamos al proyecto, librerías y añadir jar.

Explicare brevemente el código necesario para crear y editar el PDF.

JAVA:
  1. /**importar los paquetes necesario*/
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import com.lowagie.text.Document;
  5. import com.lowagie.text.DocumentException;
  6. import com.lowagie.text.Paragraph;
  7. import com.lowagie.text.pdf.PdfWriter;</span>
  8.  
  9. public class ArchivoPDF {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. // 1. Se crea un objeto documento de la clase Document.
  14. Document documento= new Document();
  15.  
  16. try {
  17.  
  18. //2.Creamos el archivo PDF.
  19. PdfWriter.getInstance(documento, new FileOutputStream("archivo.pdf"));
  20.  
  21. //3. Abrimos el archivo PDF para poder editarlo.
  22. documento.open();
  23.  
  24. //4. Añadimos al objeto documento un párrafo.
  25. documento.add(new Paragraph("Hola mundo este es mi primer PDF"));
  26.  
  27. //5. Le añadimos el tamaño de la pagina.
  28. documento.setPageSize(PageSize.A3);
  29.  
  30. //6.Le damos una nueva pagina.
  31. documento.newPage();
  32. documento.add(new Paragraph("Este es una nueva pagina"));
  33. documento.setPageSize(PageSize.LETTER);
  34.  
  35. }
  36. catch(DocumentException de) {
  37. System.err.println(de.getMessage());
  38. }
  39. catch(IOException ioe) {
  40. System.err.println(ioe.getMessage());
  41. }
  42. // 6.Cerramos el documento.
  43. documento.close();
  44. }
  45. }

Espero que les guste el post, alguna duda comentala por favor.

Para siempre... me parece mucho tiempo.

2 Comments »

May 17th 2008

Programa en Java y OpenGL :: mopet

Hoy voy a mostrar como puede trabajar Java y OpenGL juntos, esto gracias a la biblioteca de JOGL (Java OpenGL) para aprovechar los máximos recursos que ofrecen el lenguaje Java y el API de OpenGL. Utilizando un IDE en este caso usaremos NetBeans 6.1, aunque también Eclipse tiene esta posibilidad pero por ahora me enfocare con el primer IDE.

Vamos primero a descargar un paquete que necesita NetBeans para descargar automáticamente los plugins necesarios para que funcione correctamente, este paquete lo descargaremos aquí.

El archivo es net-java-nboglpack-updatecenter.nbm, ahora unas ves abierto NetBeans damos en Tools > Plugins y estaremos aquí.

Damos click en Add plugins y buscamos el archivo que descargamos, ahora nos aparecerá la opción de NetBeans OpenGL Pack Update Center, lo seleccionamos.

Ahora en la pestaña de Settings nos verificamos que este seleccionado también la misma opción, luego damos click en la pestaña de Available Plugins nos aparece las opciones siguientes, después solo damos en el botón install.

Para verificar que este funcionando abrimos un New Project y seleccionamos OpenGL > Demos y un proyecto ya realizado.

Y eso es todo, puedes empezar tus programas en Java utilizando la biblioteca JOGL para acceder a OpenGL.

Links importantes:

www. es.wikipedia.org

www.jogl.dev.java.net

Espero les guste, favor de hacer sus comentarios para mejorar estos post.

Para siempre...me parece mucho tiempo.

2 Comments »

May 17th 2008

javapython :: nick

Tira LinuxHispano

Tira LinuxHispano RSS Feed

Cualquier parecido con la realidad es mera coincidencia. :-)

No Comments yet »

Next »