Archive for the “Actualidad” Category

Vuelve la Barcelona Developers Conference para este año 2012.

Ya tienen la web preparada y ya están recibiendo las primeras conferencias. El congreso tendrá lugar en Barcelona los días 6, 7 y 8 de Diciembre.

Fuente: http://bcndevcon.org/

Comments No Comments »


Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=WPS1DMlzz0M&key=1): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

Estamos en la época del nacimiento de las tablets PC y, para variar, las grandes empresas del sector se tiran los trastos a la cabeza para averiguar quien copió a quien.

Navegando por internet me encuentro con la siguiente imagen…

Y luego con este video de 1990.

¿Qué fue antes?, ¿el huevo o la gallina?…

Comments No Comments »

Como muchos sabrán, la universidad de Stanford, junto con la de Berkeley en algunos casos, están impartiendo una serie de cursos a través de internet y ayer empezó uno a los cuales estoy apuntado.

En concreto se trata de ‘Software Engineering for Software as a Service’ que como ya he comentado, empezó ayer y tras leerme las instrucciones de como se estructura el curso y demás, me ha agradado ver que los trabajillos que se hagan se harán en Ruby.

Será bastante interesante recordar este lenguaje que quienes conozcoan Python, tienen el 90% del trabajo ya hecho 😀

Por cierto, el enlace del curso es este: https://www.coursera.org/saas/class

Comments No Comments »


Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=5fvwoHKj6cs&key=1): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/youtube-embed/includes/api-access.php on line 99

Aunque la primera es europea y la segunda norte-americana, a esto se encamina internet si no se hace algo.

Comments No Comments »

Hace poco ha llegado a mis manos un teléfono móvil de los llamados ‘smartphones’, en concreto, un Sony Ericsson Xperia Neo V el cual trae como sistema operativo Android 2.3. Además, a mi casa también han llegado un Samsung Galaxy mini y un ace.

Hacía tiempo que quería introducirme en este mundillo, aprender a desarrollar para Android y, en defintiva, ver que hay tras todo esto llamado smartphones, tablets y demás. La cuestión es que por motivos económicos no había podido antes, pero ya ha llegado el momento y la verdad, es que el sabor de boca que me deja no es del todo bueno.

Los que lean el título del post se imaginarán de qué les hablo y es que, el tener el teléfono enchufado al cargador es lo más normal que le ocurre a estos teléfonos (los tres que nombré anteriormente).

En un principio pensé que podría ser un fallo de hardware de mi móvil, pero al ver que los dos samsung les ocurría lo mismo pensé que el fallo debía estar en otro sitio. Varios compañeros me han comentado que ellos se encuentran en la misma situación, pero el culmen de todo llegó ayer en la comida de navidad, donde los samsung, htc y iphones estaban cada dos por tres en un enchufe, y es que las baterías volaban.

En ese momento llegué a pensar, ¿merece de verdad la pena realizar una aplicación que haga un uso de verdad de todo aquello que nos ofrece un smartphone?, ya que es bastante intrigante irte a dormir con la batería al 100%, que el móvil “solo” tenga abierto el whatsapp, la aplicación de gmail y el 3G, y que cuando me despierto y cojo el teléfono para mirar la hora, la batería esté a un 35% de su carga.

¿Es útil realizar una aplicación que haga un uso real de las herramientas que nos ofrece a día de hoy un smartphone?, es decir, tipo whatsapp que esté todo el rato abierto ofreciendonos sus servicios dependiendo de X factores, pues yo diría que no.

¿Donde ha quedado el concepto de telefonía móvil?, ¿a partir de ahora debería llamarse “telefonía cargada”?. Cuando alguien adquiere un teléfono móvil busca autonomía, es decir, poder moverse por cualquier sitio y que el teléfono le pueda salvar de una situación desagradable o poder tenerlo a mano cuando lo necesite, y no tener que testar tirando de batería cada dos por tres, porque el problema no está en cargarlo, sino en donde, ya que, al menos en España, aun no hay enchufes por la calle para poder cargar el teléfono móvil.

Aunque parece que APPLE se ha imaginado que iba a escribir algo así y se han puesto manos a la obra. 😛

Puede que estos años las compañías se hayan centrado a ofrecer servicios en teléfonos móviles “olvidándose” de que se estaban comiendo las baterías, ya que opino que es lo primero que tendrían que haber mejorado (invertido). Soy consciente de que antes un móvil solo pasaba por nuestras manos si íbamos a llamar, y que ahora podría decir que nos llevamos todo el día utilizándolo, además del gasto que supone mantener el SO, wifi, 3G, bluetooth, gps, etc., pero no creo que sea motivo para tener una batería que haya que cargarla diariamente mínimo una vez en algunos casos cuando el objetivo de un teléfono móvil es la autonomía del mismo.

¿Sobre el/los teléfonos y Android?, bastante contento y sorprendido por el sistema operativo en sí (android), aunque eso será parte de otro post y en otro momento.

 

Comments No Comments »


Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 2039

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 2039

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 2411

Warning: implode(): Argument must be an array in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3365

Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3388

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3388

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3429

Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3481

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3481

Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3626

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3626

Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 2039

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 2039

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 2411

Warning: implode(): Argument must be an array in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3365

Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3388

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3388

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3429

Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3481

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3481

Warning: array_keys() expects parameter 1 to be array, null given in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3626

Warning: Invalid argument supplied for foreach() in /homepages/33/d217631465/htdocs/wordpress/wp-content/plugins/wp-syntax/geshi/geshi.php on line 3626

Dentro de unos días, el día 8 de noviembre concretamente, sale la release de Fedora 16 y esta vez me he decidido a actualizar la distribución a través de internet.

La verdad es que el proceso de actualización me ha sorprendido bastante, tan solo hay que dejarlo trabajar, reiniciar y te encontrarás con las mismas opciones que si hubiéramos usado el DVD para actualizar.

Según la web del proyecto fedora, esta es su definición http://fedoraproject.org/wiki/How_to_use_PreUpgrade

PreUpgrade is an application users run on a existing release, that resolves and downloads packages required to upgrade to a newer release of Fedora. While PreUpgrade downloads the necessary packages, users are free to continue using their systems. This gives an experience similar to a live upgrade.

Los pasos que he llevado a cabo para ello son los siguientes dentro de la terminal y con permisos de administrador.

Actualizar los paquetes que tenemos instalados en el sistema.

yum -y update

Una vez hecho esto, instalamos preupgrade en nuestro sistema.

yum install preupgrade

Una vez instalado, tan solo debemos ejecutar preupgrade en nuestra terminal para ejecutar el programa.

Cabe decir que preupgrade busca actualizar hacia la última release disponible, por lo que si queremos actualizar hacia alguna beta o release candidate, debemos señalarlo con el tick que vemos en la siguiente imagen.

Tras esto, siguiendo las indicaciones del proceso de instalación conseguiremos actualizar la última versión de fedora sin tener que utilizar ningún medio físico.

A mí me crea una entrada nueva en el grub que no lleva a nada, tener cuidado no vayáis a querer arrancar desde ahí el nuevo sistema y os econtreis que no hace nada.

Comments 6 Comments »

Parece que las malas noticias este mes no paran, si hace unos días nos levantábamos con la muerte de Steve Jobs, esta mañana en clase me he enterado de la muerte de Dennis Ritchie, creador del lenguaje de programación C y co-creador del sistema UNIX (del que deriva de alguna forma Linux).

Seguramente, la inmensa mayoría de los mortales no conocerá a Ritchie, aunque sin su aportación la informática de hoy día podría haber sido algo distinta.

Dejo el enlace a su página de la wikipedia para quien quiera saber más sobre él:

Dennis Ritchie junto a Ken Thompson

Es curioso la repercusión que tuvo hace unos días la muerte de Steve Jobs, y que el fallecimiento del creador de C y UNIX (base de casi toda, por no decir toda, la informática actual) no tenga casi repercusión mediática. Descanse en Paz.

Fuente: http://www.genbeta.com/actualidad/fallece-dennis-ritchie-creador-del-lenguaje-de-programacion-c-y-del-sistema-unix

Comments No Comments »

El día 15 Google liberó la primera release de la API de Google Plus (http://developers.google.com/+/) y en las siguientes líneas comentaré como empezar a toquetearla para crear nuestra primera aplicación.

Por ser la primera versión, esta tiene una serie de limitaciones y/o particularidades, como por ejemplo que solo podremos acceder a datos públicos de cada uno de los perfiles con los que trabajemos. Otra de las particularidades es que tenemos, por cortesía de Google (…), un límite de querys (mil para Google+) diariamente.

He estado trasteando con varias librerías para los distintos lenguajes que han sacado (java, python,…) y finalmente me he quedado con la versión de python en Linux (en windows me ha dado más de un quebradero de cabeza).

¿Por qué python?, pues por el simple hecho de que en pocas líneas consigue conectar con el servidor, conseguir la autorización y obtener los datos que deseamos.

Lo primero que debemos hacer para desarrollar con el API de Google Plus es obtener nuestra API Key y los datos necesarios para trabajar con OAuth2, y esto lo hacemos con nuestra cuenta de Google en la web https://code.google.com/apis/console/b/0/. En principio la autorización no nos haría mucha falta ya que, como he dicho anteriormente, en esta primera release de la api de Google+, solo podremos acceder a datos públicos de nuestro perfil para consultarlos, pero nunca está mal saberlo para el futuro.

Recuerdo que las librerías que han sacado son todas beta (la de ruby es alpha), por lo que habrá cosas que no terminen de funcionar al 100% (en java por ejemplo hay métodos de la librería que no están implementados en la api oficial de Google). En la dirección http://developers.google.com/+/downloads podemos elegir la api y la librería del lenguaje que vayamos a usar, en este caso, yo he elegido python. En casi todos los lenguajes han puesto un primer ejemplo de como obtener la autorización, conectarse y obtener datos, y todos difieren unos de otros.

Si elegimos python y nos descargamos el ejemplo que proporciona Google, vemos que tenemso dos archivos, uno llamado plus_cli.py y otro llamado settings.py. El primero será con el que nos logueemos en Google Plus y el segundo donde guardaremos nuestros datos de la api key.

Lo primero que tendremos que hacer será modificar los datos de settings.py con aquellos de nuestra api key.

Una vez que tengamos esto, ya podemos empezar a entender el resto del código.

Lo primero con lo que nos encontramos es con la función para loguearnos y pedir la autorización a Google Plus para acceder a los datos. Se trata de la función authorize_self.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def authorize_self(client_id='None', client_secret='None'):
  if client_id is None or client_secret is None:
    raise Exception('Please register at the API Console at:
    https://code.google.com/apis/console.  See README.txt for details!')
 
  flow = OAuth2WebServerFlow(
      client_id=client_id,
      client_secret=client_secret,
      scope='https://www.googleapis.com/auth/plus.me',
      user_agent='google-api-client-python-plus-cmdline/1.0',
      xoauth_displayname='Google Plus Client Example App'
      )
 
  #Remove this file if you want to do the OAuth2 dance again!
  credentials_file = 'plus_auth.dat'
 
  storage = Storage(credentials_file)
  if os.path.exists(credentials_file):
    credentials = storage.get()
  else:
    credentials = run(flow, storage)
 
  return credentials

Esta función junto a build_service, cogerá los datos de nuestra api y nos devolverá una dirección que tendremos que pegar en nuestro navegador para así otorgar el permiso correspondiente a nuestra aplicación.

1
2
3
4
5
6
def build_service(credentials, http, api_key=None):
  if ( credentials != None ):
    http = credentials.authorize(http)
  service = apiclient.discovery.build('plus', 'v1', http=http, developerKey=api_key)
 
  return service

Uno de las funciones más importantes de las que hacemos uso es OAuth2WebServerFlow que es quien se encarga de realizar todos los pasos para que la autorización se lleve a cabo.

Una vez que hayamos obtenido la autorización, ya solo nos queda jugar con los datos que tenemos en Google Plus, y esto lo hacemos con la función main().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def main():
  http = httplib2.Http()
  credentials = authorize_self(settings.CLIENT_ID,settings.CLIENT_SECRET)
  service = build_service(credentials,http)
 
  person = service.people().get(userId='me').execute(http)
 
  print "Got your ID: " + person['displayName']
 
  # Now, we can continue on unauthorized
  # I could continue using my authenticated service, of course
  # but for example we'll use a second unauth'd one
  httpUnauth = httplib2.Http()
  serviceUnauth = build_service(None, httpUnauth, settings.API_KEY)
activities_doc = serviceUnauth.activities().list(userId=person['id'],collection='public').
  execute(httpUnauth)
 
  activities = []
  npt = None
 
  if 'items' in activities_doc:
    activities = activities_doc[ 'items' ]
    print "Retrieved %d activities" % len(activities_doc['items'])
 
  npt = activities_doc['nextPageToken']
 
  while ( npt != None ):
activities_doc = serviceUnauth.activities().list(userId=person['id'],collection='public').
    execute(httpUnauth)
 
    if 'items' in activities_doc:
      activities += activities_doc['items']
      print "Retrieved %d more activities" % len(activities_doc['items'])
 
    if not 'nextPageToken' in activities_doc or activities_doc['nextPageToken'] == npt:
      "---Done"
      break
 
    npt = activities_doc['nextPageToken']
 
  print "----------------\nPublic activities count:", len(activities)
  print
 
  if len(activities) > 0:
    for item in activities:
      print '  activity\t', item['object']['content'][:40], item['id']
 
    # Now, ask for the first item on the list
    top_activity = serviceUnauth.activities().get(activityId=activities[0]['id']).
    execute(httpUnauth)
 
    print '\n\ntop activity: '+top_activity['id']+': '+top_activity['object']['content']
 
  print '\n\nSUCCESS: Everything worked'

Llegados a este punto debemos diferenciar entre dos tipos de datos, los relacionados con personas (http://developers.google.com/+/api/latest/people), o con las actividades que este ha llevado a cabo en su perfil de Google+ (http://developers.google.com/+/api/latest/activities).

Como dato, tanto en uno como en otro, la información es transportada en formato JSON, acrónimo de JavaScript Object Notation.

Lo primero que tendremos que hacer es recoger los datos del usuario con el que estamos trabajando, y para ello, utilizaremos una conexión autorizada por los métodos que comenté al comienzo del post.

1
2
3
4
5
6
7
http = httplib2.Http()
  credentials = authorize_self(settings.CLIENT_ID,settings.CLIENT_SECRET)
  service = build_service(credentials,http)
 
  person = service.people().get(userId='me').execute(http)
 
  print "Got your ID: " + person['displayName']

A partir de aquí, cada vez que queramos obtener algún tipo de dato relacionado con el usuario tendremos que acceder
al mismo de la forma person[‘dato_al_que_accedemos’] siguiendo este ejemplo.

Posteriormente se accede a la lista de actividades del usuario, y para esto de utiliza una conexión no autorizada ya que los datos a los que accedemos son públicos y no se necesita de ningún tipo de autorización para su consulta.

1
2
3
4
5
httpUnauth = httplib2.Http()
  serviceUnauth = build_service(None, httpUnauth, settings.API_KEY)
 
  activities_doc = serviceUnauth.activities().list(userId=person['id'],collection='public').
  execute(httpUnauth)

En el ejemplo que nos proporciona Google, todo lo que ha recogido la variable activities_doc es guardado en un array llamado activities, por lo que para acceder a los datos de las actividades del usuario accederemos de la forma activities[‘actividad_del_usuario’].

Cada uno de los datos y/o las actividades del usuario están relacionado con una palabra clave que deberemos conocer, por ejemplo, la dirección que haya puesto el usuario tendrá la palabra clave “address” (lógico). Todas estas claves están en la web de la api y más atrás he dejado los enlaces de las claves tanto para los datos del usuario como para las actividades.

Una vez hecho esto, tan solo nos queda jugar con la api, aunque con esta primera versión poca cosa se puede hacer. Habrá que esperar a nuevas versiones para poder ahondar más en la aplicación.

Si a alguien le interesa, las pruebas las estoy realizando en Fedora con Eclipse.

PD: Algunas partes del código fuente mostrado en el post han sido acortadas para no desencuadrar el mismo.

Comments No Comments »

“El usuario debe controlar el software, no al revés”

Fuente: http://bitelia.com/2011/06/richard-stallman-el-usuario-debe-controlar-el-software-no-al-reves

Comments No Comments »

Pues como podeis leer en el nombre del post, acabo de liberar la versión BETA de GEdora ya que existía un error que, a veces, no eliminaba el nucleo en uso de la lista.

Por ahora, sólo funciona en Fedora, ya que el script trabaja con la forma de nombrar que tiene Fedora en nombrar los paquetes. Por falta de tiempo no he podido probar el script en otros sistemas que no sea Fedora.

Básicamente, el script funcionaría en cualquier sistema que utilicé package kit a excepción de eliminar el kernel en uso de la lista, a no ser que dichos paquetes se nombren igual que es Fedora.

Es una versión BETA, más limpia y estable. Invito a todo el que lo use que, si tiene algún comentario, duda, o si ha tenido algún problema, me haga llegar el comentario.

Un saludo.

Comments 1 Comment »

   Beat diabetes   Diabetes diet