martes, 20 de enero de 2009

"...ya no quiero trabajar para Google !"

Cómo se sentiría si el multimillonario dueño de google le dice: "la gente que trabaja en google, no lo hace por dinero, sino por cambiar el mundo"?

http://www.techcrunch.com/2009/01/18/why-google-employees-quit/

domingo, 11 de enero de 2009

Rapidamente: como extraer los emails de un documento sin formato específico

Me han entregado una serie de documentos que contienen emails, no tienen un formato definido, pueden estar en MS -Word, texto o en hoja electrónica, la tarea encomendada es extraer todas las direcciones electrónicas de dichos documentos.

Lo solución es en base a expresiones regulares.

Una sola expresión regular será suficiente para cumplir la tarea: [A-Za-z0-9._%+-]+@([A-Za-z0-9_+-]+\.)+[A-Za-z0-9]{2,4}. Esta nos permitirá extraer todos y cada unos de los emails de cualquier documento.

Para el efecto me planteo los siguientes pasos:

  1. Todos los documentos fuentes los dejo en formato de texto, no me preocupa su contenido.
  2. Leo cada línea de los archivos texto, de donde extraigo los emails utilizando el patron anterior.
  3. Cada email recuperado se agrega a un arreglo.
  4. El arreglo es ordenado alfabéticamente.
  5. Se eliminan los duplicados.
  6. Se imprime la lista.

El programa en groovy es muy corto:

  1 def emails = []
  2 new File(args[0]).eachLine {
  3     it.eachMatch(/[A-Za-z0-9._%+-]+@([A-Za-z0-9_+-]+\.)+[A-Za-z0-9]{2,4}/) {
  4         emails << it[0]
  5     }
  6 }
  7 println emails.sort().unique()

donde:

emails es el arreglo que almacenará cada email recuperado.

new File(args[0]).eachLine hace dos cosas: habre el archivo y lee cada linea.

it.eachMatch(...) extrae cada email según la expresion regular, que es almacenado con la expresion emails << it[0]

println emails.sort().unique() ordena, elimina los duplicados y luego imprime la lista de emails resultantes.

Este scripts lo podemos guardar en un archivo de nombre emails.groovy, y su ejecución desde la linea de comandos:

groovy emails.groovy archivo.txt

donde archivo.txt es el nombre del archivo texto que contiene los emails. Al ejecutarse este programa, el nobre del archivo es recogido en la variable dinámica args[0]

domingo, 4 de enero de 2009

“with” en Groovy

Acabo de leer un artículo Getting Groovy With “with”, donde el autor nos presenta un ejemplo de código Java para imprimir una fecha

  1 // PrintIndependenceDay.java
  2 import java.util.Calendar;
  3 import java.util.Date;
  4 public class PrintIndependenceDay {
  5   public static void main(String[] args) {
  6     Calendar calendar = Calendar.getInstance();
  7     calendar.clear();
  8     calendar.set(Calendar.MONTH, Calendar.JULY);
  9     calendar.set(Calendar.DATE, 4);
 10     calendar.set(Calendar.YEAR, 1776);
 11     Date time = calendar.getTime();
 12     System.out.println(time);
 13   }
 14 }

Y luego nos presenta el código equivalente en Groovy

  1 // PrintIndependenceDay.groovy
  2 def calendar = Calendar.instance
  3 calendar.with {
  4   clear()
  5   set MONTH, JULY
  6   set DATE, 4
  7   set YEAR, 1776
  8   println time
  9 }

En realidad este código es bastante legible para un programador en Delphi o Visual Basic.

Cuando programo en Java o Groovy, es una prioridad reducir el ruido como lo hace este “closure”. Groovy es un lenguaje dinámico una de cuyas tareas es reducir el ruido que se tiene en Java. En este caso el “ruido” se expresa como la repetición (6 veces) de “calendar” , que en el programa en Groovy se lo escribe una sola vez.

Solo cuando leí el blog caí en cuenta de enorme ayuda que extrañaba de mis tiempos de programador Delphi. Recomiendo la lectura total del mismo

sábado, 3 de enero de 2009

40 años de la “madre de todos los demos”

Douglas Engelbart es un norteamericano nacido en 1925, cuyas investigaciones en la interacción entre los seres humanos y la computadora que le llevaron a inventar el ahora familiar e íntimo mouse, que lo puede adquirir en las tiendas de abarrotes de en cualquier barrio o pueblo del planeta.

Lo realmente memorable alrededor de este hombre se da el 9 de diciembre de 1968, en el centro de Convenciones de San Francisco - California, donde presenta por primera vez el mouse, y unas cositas más, a las que en conjunto las llamo NLS (del inglés oN Line System), que consistía nada más y nada menos de un conjunto de computadoras geográficamente distribuidas comunicándose entre ellas mediante e-mail, hipertexto, texto interactivo, video y tele conferencia. Podemos suponer que al finalizar magna presentación de lo que menos se hablaba era del mouse.

Ya sabemos que alguien hace 40 años estableció el sendero de la tecnología distribuída como la conocemos ahora de una manera totalmente accesible.