Archivo

Archivo para Julio, 2009

Geolocalización de una IP

Domingo, 26 de Julio de 2009 blakeyed Sin comentarios

A veces, nos es de bastante utilidad geolocalizar a un visitante, bien puede ser para mostrarle una publicidad relevante o porque prestamos un servicio que sólo existe en determinados países, para escoger automáticamente el idioma de nuestra web, o por motivos estadísticos, para saber de dónde provienen nuestras visitas, como medida en una red social para detectar automáticamente dónde estás… en fin, hay un sinfín de utilidades.

Lo más común para geolocalizar a los visitantes es verificar su dirección IP y consultar en una base de datos a qué país pertenece. Hay empresas que comercializan estas bases de datos, y las hay con mucha precisión (algunas pueden decirnos hasta la ciudad donde está conectada la persona con esa dirección IP). Aunque vengo a hablaros de un servicio gratuito: Ip to Country de Webhosting.info.

En las web citada viene mucha información de cómo utilizar la base de datos y código de ejemplo, por lo que no me extenderé mucho.

En resumen, tenemos que decargar el fichero CSV, que contiene la tabla que debemos incluir en nuestra base de datos (por ejemplo, PhpMyAdmin tiene la posibilidad de importar ficheros CSV). Seguidamente, hay que tener en cuenta que en esta tabla, la IP no está en el formato que estamos acostumbrados (4 números de 8bits separados por puntos), está en formato long, lo que es los 32bits (en PHP podemos hacer la conversión con ip2long()). Para hacer nuestro programa hemos de saber que la IP que queremos geolocalizar tiene que estar comprendida entre ip_from (primera ip que viene en la tabla) e ip_to (segunda ip).

Categories: PHP Tags: , , , , ,

Conseguir la IP del usuario

Viernes, 24 de Julio de 2009 blakeyed 2 comentarios

Os dejo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function gf_obtiene_ip () {
  // Las variables _SERVER nos lo pueden decir
  $metodos = array("CLIENT_IP","HTTP_X_FORWARDED_FOR","HTTP_X_FORWARDED","HTTP_FORWARDED_FOR","HTTP_FORWARDED","REMOTE_ADDR");

  $i = 0;

  while ( ($i<count($metodos) ) || (!isset($ip) ) )  
    {
      $valor = $metodos[$i];
      if (isset($_SERVER[$valor]))
    $ip =$_SERVER[$valor];
      else if (isset($_ENV[$valor]))
    $ip =$_ENV[$valor];

      $i++;
  }
  return ( isset($ip) ) ? $ip: false;
}

Con este script intentamos evitar que se detecte como la IP del usuario la de un proxy intermedio recorriendo todas las variables que podemos encontrar en $metodos.

Categories: PHP Tags: , , ,

Publicidad gratuita

Martes, 21 de Julio de 2009 Gaspar Fernández 2 comentarios

En estos tiempos casi todo el mundo tiene un ordenador, y es un tema que tanto en cine como en televisión está a la orden del día.
Es cierto, que a veces, hace unos años, cuando tenía que aparecer la pantalla de un ordenador, en la pantalla aparece un interfaz alucinante, como en Johnny Mnemonic (1995), o tenía que aparecer un hacker o algo, salía algo así:

Battle Royale Nmap

Battle Royale Nmap


Parecía un sistema UNIX, con terminales haciendo cosas muy complicadas, en realidad eran capturas en las que enseñaban fragmentos del código fuente de NMAP. Que por cierto, hace poco salió la versión 5.
Aunque actualmente, casi en todas las producciones vemos pantallazos con Windows XP/Vista aunque con animaciones y efectos que claramente Windows no hace; podemos ver otras producciones como Entre Fantasmas, en la que al principio aparecía un navegador de Internet, con su buscador Penthius, pero más tarde claramente se veía Windows Vista. O El Internado, en el que siempre se ve un Windows XP, aunque a veces se puede leer linux.
Pero no me refiero a esto como ejemplos de Publicidad Gratuíta, está claro que Microsoft tiene algo que ver; aunque otras muchas veces, tiene que aparecer un ordenador, aunque sea en un anuncio, o una serie en la que sale un ordenador sólo un momento, sale claramente con un sistema operativo Windows.
Es cierto, que muchas veces Microsoft puede patrocinar de alguna forma algunas producciones, pero seguro que muchas otras no ven ni un céntimo por parte de Microsoft, y muestran pantallas de sus sistemas operativos. En tiempos del product placement en que si una marca de leche no ha aportado dinero sale un bote blanco sin ninguna letra… en un ordenador, ante el hecho de no querer complicarse porque sólo tiene que salir un navegador de Internet, no cuesta nada instalar una Ubuntu, en el caso de promocionar, no estaríamos haciendo publicidad de una marca o un producto de pago sino libre, perteneciente a todos.

Categories: General Tags:

Tuberías con nombre para comunicación entre procesos

Domingo, 19 de Julio de 2009 blakeyed 2 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.

Google Adsense en Facebook

Viernes, 17 de Julio de 2009 blakeyed 15 comentarios

Debido a la conversión de Javascript a FBJS y algún que otro filtro que supongo que ponen los de Facebook, porque creo que no les hace mucha gracia que los desarrolladores publiquen publicidad y ésta les quite público a la publicidad propia; los banners de Google Adsense no se verán (es más, además de que el propio código Javascript no creo que se ejecute bien, al mirar la página por dentro no hay rastro de los banners.

Pero es cierto que Adsense es una de las mejores formas para rentabilizar un sitio web, y son pagadores serios, por tanto, nosotros como desarrolladores de Facebook queremos ganar algo de dinero con las aplicaciones aunque sólo sea para rentabilizar un poco el hosting.

Es cierto que los motores de Google no pueden entrar en las aplicaciones ya que requieren login dentro de Facebook, lo que sí podemos hacer es incluirlo en iframes; es un tema algo delicado ya que los términos y condiciones de Google Adsense no son muy claros con el tema de los frames, por lo que depende de las interpretaciones, pero por ahora es la única forma que conozco para introducir la publicidad. Aunque también es cierto que hay vida más allá de Adsense.

Para incluir el iframe desde FBML debemos hacer lo siguiente:

1
<fb:iframe src="http://dominio/directorio/adsense.php" width="728" height="90" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></fb:iframe>

Y es muy recomendable incluir dentro de adsense.php (que puede ser (x)html plano) un título, keywords, y algún que otro metadato para que la publicidad que salga sea más adecuada con nuestra aplicación.

Desarrollando aplicaciones para Facebook

Jueves, 16 de Julio de 2009 blakeyed 1 comentario

Hace un tiempo me animé a crear mi primera facebook app, la llamé Campo de Minas, porque pretendía utilizar esa app para hacer pruebas.

Para empezar el desarrollo, lo primero que hay que hacer es entrar en la aplicación para desarrolladores. Por una parte me gusta lo bien montado que está todo, la forma de introducir la información; aunque por otra parte es un sistema lento. Se tarda mucho tiempo en introducir la información navegando por todas la páginas.

Una vez dentro, dispuesto a ponerme a programar, y tras leerme un poco de la documentación, podemos observar la gran API que existe, y las posibilidades para embeber aplicaciones dentro de Facebook. Tenemos lenguajes como FBML, FBJS, FQL, que intentan reemplazar a HTML, Javascript y SQL, para utilizar la API de Facebook. Como punto positivo podemos destacar la seguridad con respecto a Facebook, se han cubierto bien las espaldas, ya que las consultas a las bases de datos de Facebook están filtradas (no estoy diciendo que sea un sistema invulnerable); por otra parte el Javascript está filtrado, los nombres de nuestras funciones, estilos, etc, son filtrados, por lo que evitan errores en el caso de que hagamos algo con un nombre repetido. Por otra parte, tendremos un acceso fácil a las ventanas que Facebook nos aporta como son la de invitar gente, publicar en el perfil, etc.

El hecho de tener tantas posibilidades, y de la sustitución de los lenguajes, nos impide algo importante: la posibilidad de probar nuestra aplicación offline, lo que es muy útil cuando estamos en el proceso de desarrollo, al menos para ejecutar la aplicación desde nuestro servidor local; es normal, si utilizamos recursos que no están en nuestro ordenador. De todas formas, siempre podremos dividir la aplicación en dos: el conector con Facebook, y nuestra propia aplicación; poco a poco quiero desarrollar algunas cosas más y con esto, incluiré algunos ejemplos en el blog.

El alojamiento de la aplicación corre de nuestra cuenta, por lo que Facebook sólo almacena los logotipos de nuestra aplicación y los enlaces.

Otra de dependencia tecnológica

Lunes, 13 de Julio de 2009 blakeyed Sin comentarios

El mercado del software es curioso. Todos conocemos el caso de las revistas en las que vienen muestras gratuítas de champú… probamos el champú, y si vemos que es mejor que lo que estamos utilizando y la relación calidad-precio compensa, podemos empezar a comprar el nuevo champú. (Cuando hablo de champú, puede ser gel, perfume, suavizante, ambientador…).

Pero desde que la informática se empieza a ver como un negocio, se utiliza una táctica parecida:

  • Se organizan cursos gratuítos para utilizar un determinado programa
  • Se regalan las versiones de estudiante.
  • Se hacen descuentos importantes a Universidades/Colegios…

Aunque el efecto, es ligeramente diferente que en el de las muestras gratuítas; estamos hablando del mundo en el que tecnológicamente hablando, casi todo el mundo desconoce la oferta de software, y en ocasiones el único software que conoce es el que ofrecen en el curso/le han regalado/le han hecho descuento… al aprender a utilizarlo, se convierte como por arte de magia en el único programa capaz de hacer la tarea que la persona requiere, y en muchas ocasiones cuando se le ofrece un segundo programa que hace una tarea parecida, ante la opción de aprender a utilizar otro programa, sabiendo utilizar ya uno, suele ser de rechazo. Por lo tanto, lo que importa es llegar el primero.

A partir de ahí, después de conocer sólo un programa, cuando una de esas personas, en su vida profesional se vea obligada a utilizar ese programa, estará obligada a comprar el programa.

Ante la posibilidad de competencia, todos los fabricantes de software quieren ser los primeros en algún sentido; aunque hay un problema fundamental, los diferentes programas no suelen ser compatibles entre sí, por lo que si una persona hace un curso de Micro$oft Office y para él sólo existe esa suite ofimática, y para otra persona sólo existe Corel WordPerfect Suite o Lotus SmartSuite; entre ellos no podrá existir una comunicación bidireccional, ya que por ejemplo Corel WordPerfect soporta formatos de M$. Office, pero no al revés.

Yo creía que la interoperabilidad era fundamental.

Pero hace unos años, no existía la capacidad de comunicación que existe actualmente, y era muy importante qué empresa pagara más por tener sus programas en más ordenadores (aunque fueran copias ilegales, eso tampoco importaba); podía ser el peor programa que existiera, pero al ser el más famoso, se utilizaba más; hoy en día el marketing sigue siendo una parte fundamental, pero también el boca a boca (boca a oreja). Y ciertas empresas de software aún intentan mantener el modelo antiguo, es decir, si se desarrolla un mal producto, ahora no sólo es necesario venderlo bien, porque igualmente puede ser rechazado.

Pero volviendo al tema de la dependencia, ahora nos encontramos con otro gran hecho, cuando hay mucha oferta, las personas/empresas eligen qué programa necesitan (relación calidad-precio, usabilidad…) y con el tiempo tendrán que coexistir; ya que los documentos/archivos generados serán útiles si pueden ser compartidos con otras personas. Y no es plan de tener que instalar en un mismo ordenador, por ejemplo 4 ó 5 suites ofimáticas.

Todo esto me decidí a escribirlo a raíz de ver dos noticias:

  • MathWorks regala versiones reducidas de Matlab para miembros de la comunidad Universitaria y hace importantes descuentos en la adquisición del programa completo. (Visto en publicidad AdSense). Es cierto que Matlab es un referente, es muy potente, multiplataforma, ya tiene un nombre en el mundo del software y quiere seguir teniéndolo. Es un lenguaje propio, y no soportará otro lenguaje que traiga otra suite matemática. Y probablemente, la competencia no soporte Matlab, al menos al 100%. Por cierto, hay una alternativa libre que pinta muy bien: Octave.
  • Además, leo en Muy Computer que Autodesk regala AutoCad 2010 a estudiantes, siendo sólo necesario tener una dirección de e-mail de la Universidad.
  • Además, Microsoft regala Visual Studio a estudiantes (En algunos ciclos formativos)

Veo positivo que se regalen versiones de programas caros, que sería casi imposible utilizarlos fuera de la Universidad/Clases/Empresa de forma legal, aunque, y eso es responsabilidad de los usuarios, no debemos depender de un software determinado ya que el conocimiento es poder, pero si ese conocimiento depende de una empresa, el poder virtualmente propio, es  posesión de la gran empresa que hay detrás.

Categories: General Tags:

Plantillas de correo dinámicas automáticas en Thunderbird

Domingo, 12 de Julio de 2009 blakeyed Sin comentarios
Nuevo mensaje en Mozilla Thunderbird

Nuevo mensaje en Mozilla Thunderbird

Me pareció casi increíble que Mozilla Thunderbird no pudiera incluir plantilas en los e-mails automáticamente de serie. (Es cierto que soporta plantillas, pero tienes que pulsar en la plantilla antes de crear el mail).

Afortunadamente, encontré hace tiempo la extensión ExternalTemplateLoader de Kaosmos. Nos introducir una plantilla que se cargará automáticamente cuando redactemos/respondamos/reenviemos un mensaje.  Pero además, esa plantilla podemos cargarla desde un archivo local o alojada en un servidor de Internet. Con lo cual podremos también, crear plantillas dinámicas.

Para hacer plantillas dinámicas, tenemos varias posibilidades:

  • Si lo que queremos hacer dinámico es cambiar una frase, un texto, una foto que cambie cada cierto tiempo, podemos crear un cron job que genere el archivo html de plantilla cada cierto tiempo, eso nos ahorraría tener que generar la plantilla cada vez que vamos a escribir un mail.
  • Si queremos monitorizar algo, crear un identificador por cada email que vayamos a enviar, escribir un informe, contabilizar los mails, etc; no queda más remedio que generar la plantilla cada vez que vayamos a redatar un mail.

En futuros posts incluiré ejemplos de cada uno de los métodos.

Para todos los que nos cuesta levantarnos por la mañana

Sábado, 11 de Julio de 2009 blakeyed Sin comentarios

Encontré un enlace interesante hace unos días: http://www.howtowakeupearly.com/ hay ciertas cosas de sentido común, y otras que no todo el mundo se puede permitir: “acostarse temprano, por ejemplo; pero hay consejos originales :)

Categories: General Tags:

Kernels para (*)Ubuntu

Viernes, 10 de Julio de 2009 blakeyed Sin comentarios

Tengo que aclarar que no soy muy de Ubuntu, he probado muchas versiones y no me terminan de convencer, es cierto que hace unos dos años que no la pruebo, aunque tenga una de las instalaciones más sencillas que he visto, nunca me ha convencido del todo, hay cosas que veo muy lentas, mucho más que en otras distribuciones.

Pero hace unos días me decidí a probarla de nuevo, en concreto Kubuntu 9.04, y aunque me ha gustado bastante, y está cerca de convertirse en una seria candidata para mis próximas instalaciones, es verdad que no incluirán el kernel 2.6.30 en las actualizaciones, y por razones de compatibilidad con dispositivos WiFi, necesitaba instalar dicho kernel.

Gracias al blog de Jorge Ivan Meza encontré un enlace donde podemos descargar kernels preparados para instalar en Ubuntu: http://kernel.ubuntu.com/~kernel-ppa/mainline/ tal vez no sea nada bueno, pero seguro que a alguien le resulta útil este post.

Categories: General Tags:

Visita otras webs de la red