Showing posts with label Go. Show all posts
Showing posts with label Go. Show all posts

Wednesday, April 22, 2015

An Introduction to Programming in Go - Review del Libro

Terminé de leer este libro hace tiempo...pero de alguna manera...nunca escribí el review...perdón por eso -:P

Este es el primer libro que leí sobre Go...y debo decirlo...me encantó -;)

Es bastante conciso y directo al grano con sólo 165 páginas...más que suficiente para mojarte los pies y alimentar tu interés en aprender Go -;)



De una manera rápida y muy bien explicada, este libro te guía a través de Arreglos, Slices, Mapas, Functiones, Concurrencia, Punteros, y los Paquetes Standard...

Un buen libro de programación no debe ser grande...no necesita explicarte cada comando o técnica...un buen libro de programación debe darte lo básico...los elementos que necesitas para poder comenzar a enterder el lenguaje en sí y lentamente ir avanzándo para que ganes confianza y luego puedas continuar avanzando por ti mismo...

Recomiendo totalmente este libro para cualquiera que esté o pensándo aprender Go...y me encantaría que todo lenguaje de programación tuviera un libro como este...esto haría la vida de los principiantes mucho más sencilla -;)

Saludos,

Blag.
Development Culture.

The Way to Go - Review del Libro

Terminé de leer este libro hace tiempo...pero de alguna manera...nunca escribí el review...perdón por eso -:P

Este libro tiene 629 páginas, así que es bastante grande...

El libro es bastante bueno y es una muy buena y completa guía para cualquiera que está aprendiendo Go...

Está lleno...y lo digo en serio...lleno de ejemplos! -:D


I quizás me estoy poniendo exagerado...pero hubiera apreciado que tuviera más ejemplos -:)

El libro por supuesto explica como instalar Go, explica su sintaxis y toca tópicos interesántes como Interfaces y Reflexíon, Manejo de Errores y Testeo y enlazarlo con Google App Engine.

Me encantaría poder comentar más sobre el libro...pero por lástima...ha pasado tiempo desde que terminé de leerlo...así que mis últimas palabras son...si eres nuevo en Go...este es un muy buen libro para comenzar...si tienes experiencia en Go...depende totalmente de ti...

Saludos,

Blag.
Development Culture.

Wednesday, November 05, 2014

Web scrapping con Go y PhatomJS

Hace algún tiempo escribí un blog llamado Web scrapping con Julia y PhantomJS...luego escribí otro blog llamado Web scrapping con Haskell y PhantomJS...

Ahora...es el turno de Go's -;)

El concepto es el mismo...creamos un script en PhantomJS que va a leer la página de Twitter de un usuario y obtener los hashtags de las primeras 5 páginas...aquí está el script en PhantomJS...

Hashtags.js
var system = require('system');

var webpage = require('webpage').create();
webpage.viewportSize = { width: 1280, height: 800 };
webpage.scrollPosition = { top: 0, left: 0 };

var userid = system.args[1];
var profileUrl = "http://www.twitter.com/" + userid;

webpage.open(profileUrl, function(status) {
 if (status === 'fail') {
  console.error('webpage did not open successfully');
  phantom.exit(1);
 }
 var i = 0,
 top,
 queryFn = function() {
  return document.body.scrollHeight;
 };
 setInterval(function() {
  top = webpage.evaluate(queryFn);
  i++;
   
  webpage.scrollPosition = { top: top + 1, left: 0 };

  if (i >= 5) {
   var twitter = webpage.evaluate(function () {
    var twitter = [];
    forEach = Array.prototype.forEach;
    var tweets = document.querySelectorAll('[data-query-source="hashtag_click"]');
    forEach.call(tweets, function(el) {
     twitter.push(el.innerText);
    });
    return twitter;
   });

   twitter.forEach(function(t) {
    console.log(t);
   });

   phantom.exit();
  }
}, 3000);
});

Si ejecutamos el script vamos a ver el siguiente resultado...


Ahora...lo que quiero hacer con esta información...es enviarla a Go...y obtener los hashtags más usados...así que los voy a sumarizar y luego deshacerme de los que no se repiten al menos 5 veces...

Veamos el código en Go...

TwitterHashtags.go
package main

import ( "os/exec"
  "strings" 
  "fmt" )

func main() {
 cmd := exec.Command("phantomjs","--ssl-protocol=any","Hashtags.js", "Blag")
 out, err := cmd.Output()
 if err != nil {
  println(err.Error())
  return
 }
 
 Tweets := strings.Split(string(out), "\n")
 charmap := make(map[string]int)
 for _, value := range Tweets {
  if value != "" {
   charmap[value] += 1
  }
 }
 
 for key, value := range charmap {
  if value >= 5 {
   fmt.Print("(", key, ", ")
   fmt.Println(value, ")")
  }
 }
}

El único problema con este script es que no hay una manera simple y sencilla de ordenar un map[string]int...así que simplemente lo dejo ahí -:)

Aquí está el resultado...


Si alguien conoce alguna manera simple de ordenar esto...por favor avisenme -:)

Saludos,

Blag.
Development Culture.

Wednesday, October 29, 2014

LED es mi nuevo Hello World - Tiempo de Go

A medida que voy aprendiendo Go, voy aprendiéndo más comandos...así que...como es usual...aquí está mi versión de números LED...no será el mejor código del mundo...pero funciona -:)

LED.go
package main

import ( "fmt"
   "strconv" 
   "strings" )

func main() {
 fmt.Print("Enter a number: ")
 var num int
 var list []string
 var line1, line2, line3 string
 fmt.Scanf("%d", &num)
 numList := strings.Split(strconv.Itoa(num), "")
 romans := map[string]string {
  "0" : " _  ,| | ,|_| ",
  "1" : "  ,| ,| ",
  "2" : " _  , _| ,|_  ",
  "3" : "_  ,_| ,_| ",
  "4" : "    ,|_| ,  | ",
  "5" : " _  ,|_  , _| ",
  "6" : " _  ,|_  ,|_| ",
  "7" : "_   , |  , |  ",
  "8" : " _  ,|_| ,|_| ",
  "9" : " _  ,|_| , _| ",
 }
 for _, value := range numList {
  list = strings.Split(romans[value],",")
  line1 += list[0]
  line2 += list[1]
  line3 += list[2]
 }
 fmt.Println(line1)
 fmt.Println(line2)
 fmt.Println(line3)
}

Aquí están las imágenes...



Saludos,

Blag.
Development Culture.

Mi primer post sobre Go

Ya que Go está ganando popularidad...decidí darle una oportunidad...y claro...el hecho de que Ken Thompson es uno de los 3 diseñadores del lenguaje también ayudó -:P

Para poder aprender, estoy leyendo el libro An Introduction to Programming in Go así que pueden esperar un review muy pronto...



Ahora...mi primera impresión de Go es que es basicamente C/C++ sin el maquillaje...lo cual significa...saca algunos de los extraños y complejos atributos de C++  y tendrás el lenguaje de programación Go...

Go se supone que es compilado, concurrente, imperativo y estructurado.

En fín...C++ fué uno de los primeros lenguajes que aprendí así que aprender Go se siente como regresar a casa...

Por supuesto...la mejor manera de aprender un nuevo lenguaje de programación es programar...Así que nuevamente empecé haciendo algo simple como el generador de números Fibonacci basado en mi código en Haskell de otro post...

Fibonacci.go
package main

import ( "fmt"
   "strconv" )

func main() {
 fmt.Print("Enter a number: ")
 var num int
 fmt.Scanf("%d", &num)
 fmt.Print(fib(num, 0, 1))
}

func fib(num int, a int, b int) string{
 var result string
 if a > 0 && num > 1 {
  result += strconv.Itoa(a+b) + " " + fib(num-1, a+b, a)
 } else if a == 0 {
  result = strconv.Itoa(a) + " " + strconv.Itoa(b) + 
                             " " + strconv.Itoa(a+b) + 
                             " " + fib(num-1, a+b, b)
 }
 return result
}

Cuando lo ejecutemos...veremos esto -:)



Saludos,

Blag.
Development Culture.