Author Archive


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 »


Warning: file_get_contents(https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails&id=l13ocri21lw&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

Siendo la hora que es, todo el mundo sabe del fallecimiento del fundador de Apple Steve Jobs, aunque yo solo he podido seguir los acontecimientos que ocurrían en la red a través de twitter debido a que me encontraba de viaje.

Creo que es conveniente hacer un pequeño hueco a alguien que ha conseguido introducir sus ideas y su forma de pensar en la vida de millones de ciudadanos de este mundo ya que, te guste o no los productos de Apple, tengas o no algún producto de Apple, y más aun aquellos que nos gusta o nos dedicamos al mundo de las nuevas tecnologías, Apple ha conseguido que la inmensa mayoría del sector siga sus pasos (smartphones, tabletas digitales, etc.). La verdad es que esta compañía encabezada por Jobs, han conseguido cambiar la forma con que vemos el mundo de la informática y conseguir escribir las líneas de lo que será el presente y futuro de las nuevas tecnologías.

No quiero dejar pasar la oportunidad de mencionar la película “Piratas de Silicon Valley”, el cual puede darnos una idea aproximada de la historia de Apple, Jobs, Microsoft, Gates y cómo empezó a evolucionar este mundo.

He aquí mi pequeño homenaje a Steve Jobs.

Dejo el video de la conferencia dada por Steve Jobs en la Universidad de Stanford en el año 2005, el cual me marcó bastante en su momento.

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 »

La verdad es que no sabía como titular este post, el cual no será ni técnico ni explicativo, tan solo, una pequeña reflexión.

Ayer, mientras trasteaba con las redes sociales (dándome de alta en Facebook, red social a la que no pertenecía pero visto lo visto, están de moda las páginas de Facebook), me di cuenta de algo que en definitiva todos sabemos, pero pocas veces nos paramos a pensar.

Si buscamos en el propio buscador de Google (irónico) la palabra Gran Hermano junto a la de Google, podremos hacernos una idea de por donde van los tiros.

GMail, Google Calendar, Google Docs, Reader, Picassa, Noticias…, y lo último, Google Print, el cual acabo de descubrir.

Es impresionante como cada día está más inmerso en nuestras vidas y como, cada vez más, confiamos todos nuestros datos a la nube aunque a mi personalmente, no me termine de convencer mucho esto.

Pero bueno, al parecer Google Print lleva ya unos años dando guerra, todo será probarlo cuando vuelva a Sevilla.

En fin, espero que en código interno de Google no haya ninguna línea comentada que ponga “Skynet” :P

Comments No Comments »

Próximamente durante el mes de Octubre tendremos en Sevilla dos eventos para desarrolladores en la ETSII de la US bastante interesantes:

  • DrupalCamp Spain 2011: Según he podido leer, diseñadores, desarrolladores, clientes, etc., de este popular CMS se darán cita en Sevilla para hablar del mismo. Son los días 1 y 2 de Octubre del 2011, la entrada tiene un precio de 35 euros.
  • Apache Barcamp Spain 2011: Se celebrará en Sevilla el día 8 de Octubre del 2011.

Estos eventos y otros cuantos más repartidos por España en la fuente.

Vía: http://www.genbetadev.com/desarrolladores/cinco-eventos-interesantes-de-desarrollo-en-espana-para-todos-los-gustos-entre-octubre-y-noviembre

Comments No Comments »

Este post me va a servir para recordar algo que olvido con frecuencia cuando programo en PHP, y mira que es sencillo, pero siempre que tengo que trabajar con fechas en PHP y MySQL, me quedo pensando…, ¿y esto como era?, y las soluciones que suelo encontrar por internet o no funcionan, o son de versiones antiguas de PHP que por una razón u otra, no funcionan.

La situación es la siguiente, tengo un campo DateTime en una base de datos MySQL el cual tengo que rellenarlo desde PHP con la hora actual, es decir, la hora en que se llama a la función.

Pues el comando es tan sencillo como esto:

1
2
$fecha = date('Y-m-d H:i:s');
echo $fecha;

Esto nos devolverá la fecha y la hora actual formateada de la forma Y-m-d H:i:s, formato en el cual trabaja DateTime de MySQL.

Dejo el enlace hacia la función Date de PHP.

Comments No Comments »

La verdad es que la curva de aprendizaje, al menos para mí, de C# está siendo bastante rápida, más que nada por el conocimiento que tengo sobre JAVA ya que, como he dicho otras veces, sus semejanzas en su sintaxis son impresionantes.

A continuación voy a describir como se estructuran los bucles for, while y do-while en C#, aunque os avanzo de que son idénticos a JAVA.

Bucle FOR.

1
2
3
4
for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Linea numero {0}", i);
            }

 

Bucle WHILE.

1
2
3
4
5
6
int i = 0;
            while(i<10)
            {
                Console.WriteLine("Linea numero {0}", i);
                i++;
            }

Bucle DO-WHILE.

1
2
3
4
5
6
int i = 0;
            do
            {
                Console.WriteLine("Linea numero {0}", i);
                i++;
            } while (i < 10);

La sentencia condicional IF en C# es como detallo a continuación.

 

1
2
3
4
5
6
7
8
if (a == 0)
            {
                /*Se ejecuta si la condición se cumple*/
            }
            else
            {
                /*Se ejecuta si la condición principal NO se cumple*/
            }

 

Operadores lógicos.

== igual qué
!= distinto de
> Mayor qué
<>= Mayor o igual
! No

Comments No Comments »

Ahora que estoy aprendiendo a programar en C#, es buena idea ir probando que tal es mono en linux y si es verdad que un código portado de Windows a Linux no es compatible al 100%.

Como todo el mundo sabrá, .NET es una plataforma creada y desarrollada por Microsoft por y para Windows, por lo que portarlo a otras plataformas se antoja algo complicado o arduo.

Con este post lo único que haré será explicar como se deja a punto Fedora 15 para desarrollar en C# o el pseudónimo creado con mono.

Lo primero que tendremos que hacer será instalar la plataforma mono para lo cual, una vez que tengamos permiso de super usuario, introduciremos el siguiente comando.

yum install mono-basic

Una vez que tengamos instalada la plataforma, necesitaremos una IDE y para ello instalaremos la propia del proyecto mono, o lo que es lo mismo, Mono Develop.

yum install monodevelop

Y con todo esto, ya tenemos lo que queríamos.

Comments 1 Comment »

Hoy, es un día triste, para mí y mi familia. Se nos ha ido nuestro Darky, mi gran amigo, mi perrito.

Nunca podré llegar a agradecerte todas las horas que has pasado junto a mí en estos últimos 10 años, y parece que fue ayer cuando, a los dos meses de haber nacido, te quedabas enganchado en la alfombra de Rota.

Gracias por estar conmigo todas y cada una de las noches que he pasado estudiando en mi cuarto, gracias por tu compañía, por aquellas veces que te metías entre mis piernas y apoyabas tu cabeza en la impresora.

Gracias por devolverme la mirada cada vez que me sentía perdido, y gracias por venir a buscarme cuando estaba mal.

Como dice mi padre, has sido un perro único, bueno y noble, tanto, que hasta en tu último aliento lo único que supiste hacer fue devolver una mirada cariñosa a las personas que te querían. Tú ya sabías que tu tiempo se estaba agotando y a modo de despedida, moviste el rabo y miraste a quienes te querían, aquellos que siempre estuvieron a tu lado.

Si por algo te tengo que pedir perdón, es por no haber estado a tu lado en el momento de tu adios, pero quiero que sepas, que siempre te llevaré en mi corazón y nunca te olvidaré, tú no te mereces que te olviden.

Has dado una amistad, cariño, ternura, etc., que pocas personas son capaces de dar, y si se suele decir que el perro es el mejor amigo del hombre, yo puedo decir que tú fuiste mi mejor amigo.

Nunca te olvidaremos Darky y que sepas que, por muchos años que pasen, seguirás a mi lado cada vez que me siente en el ordenador, seguirás pidiendome comida cada vez que me siente a comer, seguirás pidiendome que te saque a pasear y cuando estemos en el paseo, te tenga que desenredar la correa porque te has metido por detrás de los bancos, seguirás acostándote a mis pies en invierno cuando ponga la estufa, para aliviarnos el frío, y en definitiva, siempre seguirás en lo más profundo de mi corazón.

Va por mi querido amigo todas las lagrimas que llevo soltadas durante este día, y va por su memoria, este pequeño post en mi blog, aunque su recuerdo sea inmenso en mí corazón.

Y como te dije esta mañana antes de irme a coger el tren, mientras te acariciaba la cabeza…, hasta luego gordo, y pórtate bien 🙂

Hasta siempre amigo mío.

DESCANSA EN PAZ, DARKY

NUNCA TE OLVIDAREMOS

Comments No Comments »

   Beat diabetes   Diabetes diet