Go: el lenguaje de programación de Google

Como ya dije en la entrada sobre closure, Google está sacando herramientas y servicios interesantes cada día y si a eso le sumamos que parece que han decidido que no debe haber rama de la informática en la que no hayan desarrollado una aplicación y/o herramienta, está claro que ésto tenía que pasar.

Y es que en Google han desarrollado una lenguaje de programación, que se llama Go y que según cuentan tiene las bondades de Python sumadas a las de los lenguajes compilados como C o C++. Está claro que esto es puro marketing made in Google, pero está claro que en esta última semana, pocos son los que no han oído hablar o han empezado a probar dicho lenguaje.

Go, open source (como mucho de lo que últimamente se está realizando en Google), se encuentra disponible para sistemas basados en Unix (Linux y MacOs) pero no para windows, aunque tiempo al tiempo.

Para instalarlo en un equipo, hay que seguir una serie de pasos:

  • Añadir una variables de entorno al sistema ($GOROOT, $GOOS, $GOARCH y $GOBIN (opcional)). con el comando export.
  • Instalar Mercurial (sudo easy_install mercurial).
  • Realizar un check out al repositorio (hg clone -r release https://go.googlecode.com/hg/ $GOROOT)
  • Instalar las librerias básicas de C (sudo apt-get install bison gcc libc6-dev ed make)
  • Ejecutar all.bash ($GOROOT/src/all.bash)

Y si no se muestra ninguna error, tenemos la máquina lista para compilar y ejecutar código Go.

Para compilar el código Go existen dos posibilidades, usar el compilador propio de Go o usar el back end de GCC. En caso de usar el compilador propio, hay que tener en cuenta la arquitectura de la máquina, con lo que si está en una máquina de 64 bits se compilaría con 6g, mientras que si es de 32, con 8g. Lo mismo sucede a la hora de generar el ejecutable, siendo 6l y 8l respectivamente.

En caso de optar por el back end de GCC, se usará el comando gccgo, que generá el código ejecutable.

Un ejemplo de Código en Go (el clásico Hola Mundo) sería:

package main
import “fmt” // se importa el paquete de entrada/salida
func main() {
fmt.Printf(“Hola mundo\n”);
}

Que sería compilado con:

$ 8g HolaMundo.go

Creado el ejecutable con:

$ 8l HolaMundo.8

Y ejecutado con:

$ ./8.out

En la página principal del lenguaje de programación Go se puede encontrar amplia información sobre el lenguaje, la especificación y muchos ejemplos con los que poder ir cogiéndole el pulso a un lenguaje que está destinado a ser de los más usados dentro de relativamente poco tiempo.
Vía: Blog Open Source de Google

Reemplazar por consola en Linux

En un post anterior ya hablé sobre la potencia de la consola de Linux para realizar una acción tan común como buscar cadenas, ahora traigo un nuevo comando que puede ser usado junto con el anterior para aumentar la potencia de éste y así realizar una acción de búsqueda y reemplazo en distintos archivos.

En concreto se trata del comando sed (Stream EDitor), que permite la edición de cadenas para filtros y transformación de texto. El comportamiento por defecto es la captura de la entrada de un texto (ya sea por teclado o fichero) y la modificación para su salida por pantalla, pero para el caso que nos interesa (modificación de archivos), la sintaxis básica es:

$ sed -i ‘s/cadenaIni/cadenaFin/’ archivo

Que realiza la modificación de la cadenaIni por cadenaFin en el archivo indicado.

Se puede realizar en todos los archivos de un directorio con el comando:

$ sed -i ‘s/cadenaIni/cadenaFin/’ *

O en todos los que acaben o empiezan de una determinada forma con:

$ sed -i ‘s/cadenaIni/cadenaFin/’ archivo*
(sustituye la cadena en todos los archivos que empiezen por archivo)
$ sed -i ‘s/cadenaIni/cadenaFin/’ *.html
(sustituye la cadena en todos los archivos html)

El comando es muy completo y, a parte de lo dicho, permite ejecutar scripts para la modificación de cadenas, eliminar espacios y muchas acciones más, pero la función que más veces he utilizado es la de reemplazo en ficheros.
Puede ser muy útil junto con grep para buscar y modificar posibles fallos en algún archivo que hayas programado o para incluir modificaciones en varios archivos a la vez (como cuando se modifica la plantilla de archivos html) y para muchas más cosas.

Búsqueda de patrones en ficheros Linux

En muchas ocasiones queremos realizar una búsqueda en el contenido de un directorio pero no sabemos exactamente en que fichero se encuentra o posiblemente sólo conozcamos parte del texto de búsqueda.
Para todos estos problemas y para muchos más hay un comando en linux (en realidad para todo hay un comando en linux) que se llama grep. Su sintaxis es:

$ grep [opciones] patrón fichero

Como se puede ver la sintaxis básica es muy sencilla y en general sirve para buscar una cadena en un fichero, pero en realidad este comando es mucho más potente puesto que permite:

  • Búsqueda en múltiples ficheros.
  • Búsqueda recursiva.
  • Búsqueda haciendo uso de expresiones regulares (tanto en formato POSIX como en formato Perl)

Y en realidad muchas más opciones, que tienen que ver con como se muestran los datos o comportamientos concretos en determinadas situaciones, para más información siempre se puede mirar la página del manual del comando (man grep).

En la salida básica, muestra el valor encontrado (por si se ha puesto una expresión regular), pero en caso de poner multiples fichero se indica el fichero en que se encuentra, se puede establecer que se muestre la linea en la que se encuentra (con la opción -n) y muchas más opciones útiles. Vamos a mostrar algunos ejemplos de su uso:

$ grep Hola fichero1

Donde se realizar una búsqueda simple de la cadena Hola en el fichero de nombre fichero1.

$ grep -n Hola fichero1

Donde se realizar una búsqueda simple de la cadena Hola en el fichero de nombre fichero1, indicando el la linea en la que se encuentra.

$ grep -n Hola fichero1 fichero2 … ficheroN

Donde se realizar una búsqueda simple de la cadena Hola en los ficheros fichero1, fichero2 hasta ficheroN. También mostrará el número de linea junto con el nombre del fichero en la que lo encuentra.

$ grep -rn Hola fichero1 .

Donde se realizar una búsqueda recursiva de la cadena Hola A partir del directorio actual, mostrando información del fichero y la linea en la que lo encuentra.

$ grep -rn ‘C.la’ .

Donde se realizar una búsqueda recursiva de la expresión regular ‘H.la’ a partir del directorio actual, mostrando información del fichero y la linea encontrada. El patrón debería concordar con palabras como: Hola, Hala, Hela,…

Una de las mayores utilidades de este comando es realizar una búsqueda de un determinado patrón para saber donde se encuentra y realizar un reemplazo por otro, lo que se podría realizar con un editor, pero de esta forma se puede realizar más rápido, puesto que no haría falta buscar en que fichero se encuentran, abrirlos e ir reemplazando en cada uno, si no que se podría realizar un reemplazo sobre todos los ficheros que nos devuelva el comando grep. El comando de reemplazo lo explicaré en otro post, ya que es muy interesante y se merece mención aparte.

Ya están aquí

No, no es que me haya visto una sesión de poltergeist, si no que por fin han llegado los CD’s que solicite de Ubuntu y Kubuntu 9.04, después de varias semanas de espera, han llegado sanos y salvos, sin ningún tipo de coste y ya tengo ganas de probarlos. Unas fotitos de los CD’s:

Ubuntu-Kubuntu (9.04)

Ubuntu-Kubuntu (9.04)

La primera de las pruebas que quiero hacer es instalar Kubuntu ya que aparte de para unas prácticas de la carrera, nunca me había instalado una versión con el entorno KDE y llevo un tiempo viendo imágenes de la nueva versión y tengo realmente ganas de probarla (cuando lo haga quizás comente mi experiencia), para ello utilizaré mi vieja máquina (la primera en la que instalé ubuntu), espero que me reconozca todo el hardware sin problemas.

Quería dar las gracias a los chicos de Canonical por hacerme llegar los dos CD’s y hacer más accesible el mundo de GNU/linux y del Software libre a la gente. A ver si estos CD’s me sirven para convertir a algún familiar y/o amigo al mundo del Software libre, llevaré los CD’s siempre que pueda conmigo para enseñarles la potencia y la funcionalidad de Linux.

Ubuntu 9.04 Jaunty Jackalope disponible

ubuntu-jaunty-jackalope-b

Ya se encuentra disponible para su descargar la última versión de la distribución Ubuntu, denominada en este caso Jaunty Jackalope.
Está disponible su descarga desde la página oficial, a través de archivos torrent y como en otras ocasiones se puede pedir un CD para que te envíen a casa en caso de no contar con conexión.
Para los que tenemos Ubuntu 8.10 y queremos actualizar es aún más fácil pues sólo tenemos que abrir el gestor de actualizaciones y en la parte superior debería aparecer un mensaje en el que nos indique que existe un nueva versión, para actualizar únicamente tenemos que pinchar sobre el botón actualizar.
En caso de que no aparezca el mensaje, escribir en una terminal:

sudo update-manager -d