Archivo

Archivo para la categoría ‘Comunicación’

Comprobación de IP invertida / Reverse IP Lookup

Martes, 16 de Febrero de 2010 admin Sin comentarios

Desde hace mucho tiempo he utilizado CuWhois para hacer esta comprobación, ofrece muchos servicios interesantes para Webmasters y recomendaciones para posicionar mejor las webs, aunque desde hace tiempo, la comprobación de IP invertida no es tan completa como antes. Por ejemplo, hace unos años, probándola sobre este mismo dominio, daba unos 70 resultados de páginas que compartían esta misma IP (tengo un hosting compartido para esta web); ahora me dice que tengo 8 vecinos, y sólo me dice 6 de ellos.

Hoy gracias al página de Facebook de Hostarting he descubierto YouGetSignal, y aquí hay un listado más completo de las webs que encontramos en el servidor (dependiendo de con quién tengamos contratado el dominio nos convencerá mejor mirar en una u otra página, y siempre está bien que si encontramos información interesante la comprobemos a mano), y si tenemos un hosting compartido podemos ver cuánto se aprovecha nuestra empresa de hosting de nosotros y a veces, estimar más o menos cuánto están cobrando por un mismo servidor. :S Pero al menos nos da una idea aproximada de la carga que puede tener.

Atención Bill Gates ha tenido que hacerse el café esta mañana

Miércoles, 20 de Enero de 2010 admin Sin comentarios

Hoy me he levantado con la noticia de que Bill Gates (antiguo CEO de Microsoft y un multimillonario donde los haya), se ha hecho una cuenta de Twitter. Y en unas horas tiene más de medio millón de seguidores. (@BillGates).

Lo curioso es que su primer twit fue: “Hello world!”, y lo más curioso es que durante el día de hoy Twitter está saturado, y creo que sé quién tiene la culpa.

De todas formas, yo no le seguiré; si dice algo interesante, seguro que le hacen miles de retwits…

Smartbooks desde el siglo XX…

Viernes, 8 de Enero de 2010 admin Sin comentarios
Un nuevo cacharro informático

Un nuevo cacharro informático

…o, tal vez, desde una época en la que no estuvimos muchos de nosotros. Leo en un artículo de El País la noticia de un nuevo cacharro informático; es una fusión entre un netbook y un smartphone (de ahí el nombre), y entre otras cosas destaca su gran duración de la batería (cosa que está muy bien; hago viajes largos y me vendría bien poder trabajar durante todo el viaje; aunque no sé cuánto tiempo durará la batería, ya que supongo que en unos dos años no será ni un 40% de lo que es recién comprado). Pero lo que más me llama la atención del artículo es la naturalidad con la que dice:

Se acabó el esperar un par de minutos para que se encienda y se conecte a la Red.”

Hace referencia a que este nuevo artilugio podrá estar encendido todo el tiempo tal y como lo hace un móvil actualmente; pero dando datos concretos. ¿ Es normal que un ordenador tarde dos minutos en arrancar ? Es cierto que conozco personas que encienden el ordenador y se van a tomar un café mientras arranca; sé que a veces da pereza arrancar el ordenador y el navegador y poner una dirección web y dar a enter, y seguro que es mucho más rápido tenerlo encendido y sólo escribir.

Pero creo que hay que basarse en algunos datos:

  • Mi portátil, con 3 años y medio de antigüedad, tarda unos 30s.
  • Un netbook que configuré hace unos días tarda exactamente 40s.
  • En una pequeña encuesta en Facebook, sólo los usuarios de Windows tienen que esperar 2 minutos o más para arrancar (por lo general), mientras los usuarios de Mac y Linux tardan menos de 1minuto.

Nos encontramos en la carrera de los tiempos de arranque:

También es verdad que muchos usuarios todavía usan Windows Vista, y sus tiempos de arranque son muy altos; aunque si pensamos en el orden lógico de las cosas, en los ‘90 mi ordenador no tardaba dos minutos arrancando, y hasta 2004 fue creciendo el tiempo a medida que tenía un ordenador más potente… todo hasta que me pasé definitivamente a GNU/Linux, por qué será. Parece que sólo Microsoft se demora por el momento, aunque hayan conseguido que W7 arranque en 11seg (aunque no al alcance de cualquiera).

Foto: nDevilTV

Andanzas en Facebook: Publicando en los perfiles II

Sábado, 19 de Diciembre de 2009 admin 3 comentarios

Hace unos meses hice un post sobre la publicación en los perfiles del usuario en Facebook desde nuestras aplicaciones. Bien, desde el día de hoy (20/12/2009) han cambiado los métodos.

Llevan amenazando ya un tiempo, pero hasta ayer no les hice caso, y es que los nuevos métodos (aunque prometen unificar todo el sistema de publicaciones de Facebook, autopublicaciones en perfiles, para los amigos, metadatos y lectura desde nuestras aplicaciones (más info. aquí), tienen detalles que no a todo el mundo le gustan. Como por ejemplo las publicaciones multi línea, el uso de palabras clave {*actor*}, {*mensaje*}, {*palabraquemeacabodeinventar*} dentro de todos los campos de publicación y la limitación de los action links a 1 !!!!!!! :(

Lo que sí han hecho es simplificarlo todo: no tenemos que crear un template para luego utilizarlo, y el hecho de que podamos definirlo todo por código y llamarlo cuando queramos, además, no tenemos límite de publicaciones distintas, ya que como las tenemos que crear cada vez que publiquemos, podemos hacer lo que queramos (antiguamente había un límite de 100 templates por usuario, suficientes, pero a lo mejor alguien necesitaba más).

Se potencia el uso de JSON (como los arrays en Javascript), y es que si es desde Javascript desde donde llamamos a la función, lo vamos a necesitar.

Aquí incluyo un fragmento de código para una publicación (he acompañado cadenas largas y palabras clave en todas partes para ver el comportamiento de Facebook con ellas, observar qué límites tenemos y demás):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var actionlinks=[{"text":"Mi minuto filosófico","href":"http://apps.facebook.com/minutofilosofico/"},{"text":"Ésta frase en mi perfil!","href":"http://apps.facebook.com/minutofilosofico/?frase=1234"}]

var attachment = {'name': '{*actor*} No sé si funciona aquí, veamos si aparece un enlace, o también, en caso de un texto realmente largo qué pasa, porque lo mismo me pongo a escribir letras, y pasa como en el caption, que sólo sale un par de líneas, y me quedo con las ganas de que salga más texto, pero bueno, el caso es que tengo que probar tanto por el tutorial como por mis aplicaciones.',
          'properties':{0:{'text':'enlace 1',
                    'href':'http://www.totaki.com'},
                                   1:{'text':'enlace 2',
                    'href':'http://www.totaki.com'},
  },
          'description': 'Una descripcion \nlarga que incluye un enlace que \nno funciona bien: <a href="http://www.totaki.com/">con un enlace</a> y una <strong>negrita</strong> que<br/> tampoco funciona, porque Facebook ha limitado lo que puede salir en estos sitios; además, mi\n mensaje es lo suficientemente largo como para que aparezca el texto de Mostrar más. {*actor*} aquí no funciona',
          'href':'http://www.totaki.com',
          'caption': '{*actor*} está probando algunas cosillas, pero ya puestos vamos a probar un caption largo largo largo, para probar la capacidad de estos nuevos métodos que tiene Facebook para publicar en los perfiles de la gente. Tal vez el caption se corte, tal vez, muestre el texto de ver más, o tal vez el texto ni se publique por ser demasiado largo, veamos qué pasa.',
          'media':[{'type':'image',
                'src':'http://www.totaki.com/unafoto.jpg',
                'href':'http://www.totaki.com'},

],
                  };
Facebook.streamPublish('Texto para el usuario', attachment, actionlinks, null, 'Otra frase');

Nos aparece algo así:
Publicando en Facebook (tamaño completo)
En donde nos damos cuenta que:

  • Sólo caption acepta la palabra clave {*actor*} y según la documentación, sólo esa palabra clave
  • No se aceptan retornos de carro en description, sólo se aceptarán en name.
  • Nuestra publicación puede ser un enlace (pinchando en el nombre)
  • Description no acepta fbml, es texto plano, aunque resalta los enlaces

Más adelante, cuando publicamos, nos damos cuenta de que sólo se permite un action link (enlaces que acompañan a Comentar y Me gusta), en Facebook llevaban reduciendo los action links unos días para todas las publicaciones.

Aunque un detalle importante es la inclusión de las propiedades (properties), es un array que puede contener textos y enlaces que los acompañen, y se publican, he podido hacer una publicación con 12 propiedades sin problemas.

El código superior puede servir como plantilla para vuestras publicaciones.

Pero, ¿qué pasa si quiero incluir el nombre del usuario que publica en name o description? debemos recurrir a la API de Facebook, podríamos pensar que desde fbml podemos hacerlo, pero no lo permiten en estos nuevos métodos, por lo que tendremos que recurrir a un lenguaje de servidor como PHP; de la siguiente forma:

1
$yo = $facebook->api_client->users_getInfo($user_id, "uid, name, first_name");

$user_id tiene que estar previamente definida y ser la id del usuario actual (para ello, sólo hay que seguir el ejemplo que te da Facebook para crear una aplicación, copiado y pegado).
El dato que queremos, es decir el nombre, lo encontraremos en $yo[0]['first_name'], por lo que, en mitad del código fbjs anterior, si nos encontramos en un archivo PHP podemos hacer lo siguiente:

1
2
3
var attachment = {'name': '<? echo $yo[0]['first_name']; ?> sí que funciona aquí, veamos si aparece un enlace, o también, en caso de un texto realmente largo ...',
          'properties':{0:{'text':'enlace 1',
                    'href':'http://www.totaki.com'},

Tuberías con nombre para comunicación entre procesos

Domingo, 19 de Julio de 2009 blakeyed Sin comentarios

Las tuberías con nombre son un método de comunicación FIFO entre procesos (también se les llama fifos). FIFO son las siglas de First In First Out, es decir, el primero que llega es que primero que se marcha, como en una cola, el primero que llega es el que antes termina.

Observad lo que hacen las macros depura_int y depura_string, nos darán el número de línea y el archivo donde están, así como el nombre de la variable y el valor que tiene en ese momento.

Normalmente las tuberías son anónimas, aunque el hecho de tenerlas con un nombre en nuestro sistema de ficheros puede sernos de gran utilidad. Como ejemplo, podemos verlo en funcionamiento en la siguiente imagen:

Cómo hacer una pipe con nombre en 1 minuto

Cómo hacer una pipe con nombre en 1 minuto

Primero vemos el terminal de abajo, en el que se ejecuta lo siguiente:

1
2
$ mkfifo prueba
$ cat prueba

Seguidamente en el otro terminal se escribe lo siguiente:

1
$ echo "Esto es una prueba" > prueba

Automáticamente el texto “Esto es una prueba” aparece en el primer terminal. ¡Hemos logrado enviar un mensaje!

De la misma forma podemos programar aplicaciones que utilicen estas características de forma muy fácil en casi cualquier lenguaje de programación, para los ejemplos utilizaré C. Debemos hacer dos programas, uno que escriba en la tubería (pipe) y otro que lea de ella. Empezamos por pipewrite.c:

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
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

int main()
{
  FILE *mipipe;
  char buffer[128];
  int i=0;

  if (mkfifo("pipetest", S_IWUSR |  /* El usuario puede escribir */
                 S_IRUSR |  /* El usuario puede leer */
                 S_IRGRP |  /* El grupo puede leer */
                     S_IROTH    /* Otros pueden leer */
         )!=0)
    printf ("Hubo un problema al crear la pipe\n");

  mipipe=fopen("pipetest", "w"); /* Lo abrimos como un fichero normal y corriente */

  /* Con esta línea leemos hasta que se cierre la tubería por el otro */

  while (i<10)
    {
      sprintf(buffer, "CADENA ENVIADA Número: %i\n", i+1);
      fputs(buffer, mipipe);
      i++;
    }

  fclose(mipipe);       /* Cerramos la tubería por aquí también */

Y ahora pipecilla.c (o el programa que leerá la pipe):

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
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

int main()
{
  FILE *mipipe;
  char buffer[128];
  if (mkfifo("pipetest", S_IWUSR |  /* El usuario puede escribir */
                 S_IRUSR |  /* El usuario puede leer */
                 S_IRGRP |  /* El grupo puede leer */
                     S_IROTH    /* Otros pueden leer */
         )!=0)
    printf ("Hubo un problema al crear la pipe\n");

  mipipe=fopen("pipetest", "r"); /* Lo abrimos como un fichero normal y corriente */

  /* Con esta línea leemos hasta que se cierre la tubería por el otro */
  while (!feof(mipipe))      
    {
      if (fgets(buffer, 128, mipipe))
      printf ("RECIBIDO: %s", buffer);
    }

  fclose(mipipe);       /* Cerramos la tubería por aquí también */
}

Ahora compilamos y ejecutamos en terminales diferentes de nuevo:
Probando pipes
En el terminal de pipewrite.c, al ejecutar el programa da un mensaje de error, es porque la pipe ya existe (se creó en el programa anterior).

Esta forma de comunicación es unidireccional, puede ser últil por ejemplo para publicar el estado de un programa (un reproductor de audio podría publicar la canción que está sonando como en xmms-infopipe), o para modificar el comportamiento de un software mientras éste está en ejecución. Pero si queremos que nuestras aplicaciones dialoguen (en full-duplex), debemos tener dos pipes simultáneas, en ese caso, la aplicación 1, por ejemplo deberá leer en la tubería 1 y escribir en la tubería 2; y la aplicación 2, deberá escribir en la tubería 1 y leer en la tubería 2.

Easy AdSense by Unreal