01 Nov 2013
18 Oct 2013

Geolocalizar un listado de IPs con Perl

El otro día un cliente nos hizo el encargo de obtener los países a los que pertenecían un listado de IPs de un log. Bueno, pues usamos cualquier servicio de geolocalización de IPs y solucionado. El problema vino cuando el archivo tenía miles de IPs, de modo que era inviable hacerlo a mano. Así que para estos casos PERL viene de PERLas.
Bien, lo primero es tener instalado PERL en nuestra distribución de Linux favorita (sí, PERL se programa en Linux ^_^). Y mediante CPAN instalamos el módulo IP-Country, desde una terminal:

loquesea@loquesea:~$ sudo perl -MCPAN -e shell 
loquesea@loquesea:~$ install IP::Country

El archivo de entrada será un simple txt con una IP por cada línea, por ejemplo:

106.10.85.67
109.166.128.6
109.174.113.164
111.243.39.145
112.134.171.139
...

Y el código PERL:

Selec All Code:
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
#!/usr/bin/perl
use IP::Country::Fast;
 
my $ips= "ips.txt"; #Archivo de entrada con una IP en cada línea
my $paises="paises.txt"; #Archivo de salida con el número de IPs por país
 
open (ENTRADA,"<$ips") or (die "ERROR: No puedo abrir el fichero $ips\n"); 
open (SALIDA,">$paises") or (die "ERROR: No puedo abrir el fichero $paises\n");
 
my $reg = IP::Country::Fast->new();
my %hashPaises; # Hash contador de veces que aparece cada país
 
while (){ #Recorremos línea a línea
  $ip=$_; 
  chomp $ip; #Eliminamos el salto de línea
  $pais = $reg->inet_atocc($ip); #Obtenemos el país asociado a la IP
  $hashPaises{$pais}++; #Sumamos el contador de país 
  #print SALIDA ($ip."\t".$pais."\n"); #Si quisieramos imprimir cada IP a qué país pertenece, en mi caso eran demasiadas
}
 
foreach $pais (sort {$hashPaises{$a} <=> $hashPaises{$b} } keys %hashPaises){ #Imprimimos cada país con su cantidad de ocurrencias ordenado de menor a mayor
     print SALIDA "$pais $hashPaises{$pais}\n";
}
 
close ENTRADA;
close SALIDA;

Le damos permisos de ejecución, y lo ejecutamos:

loquesea@loquesea:~$ chmod 777 geolocaliza.pl
loquesea@loquesea:~$ ./geolocaliza.pl

Y la salida de nuestro programa se escribirá en paises.txt:

DE 9
VN 11
IN 17
UA 18
ES 21
US 22
BY 23
RU 31
...

Comparte
10 Oct 2013

Alinear el texto con imágenes en CSS: arriba, en el medio o abajo

Si queremos alinear texto al lado de una imagen con HTML y CSS muchas veces nos encontramos con el problema de que no queda alineado del modo que nos interesa, ya que por defecto se alinea abajo. La solución pasa por usar la regla de CSS “vertical-align“, que nos va a permitir que el texto se empiece a escribir en la parte de arriba de la imagen, desde el centro o en la parte inferior.

Por ejemplo:

Cubo AzulAlineamos arriba

Cubo AzulAlineamos en el centro

Cubo AzulAlineamos abajo

 

Éste es el código CSS usado:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
img.alineadoTextoImagenArriba{
  vertical-align: text-top;  
}
img.alineadoTextoImagenCentro{
  vertical-align: middle;
  /* Ojo vertical-align: text-middle no existe*/
}
img.alineadoTextoImagenAbajo{
  vertical-align: text-bottom;  
}

 

Si por ejemplo quisieramos alinear el texto en la parte superior podríamos usar el siguiente código HTML:

Selec All Code:
1
<img class="alineadoTextoImagenArriba" src="http://ruvic.es/wp-content/uploads/cuboAzul.jpg"/>Mi texto alineado arriba
Comparte
14 Oct 2011

¿Por qué WordPress nos pide los datos de conexión para actualizar?

Una de las características más importantes de WordPress es que nos permite actualizar el core e instalar y actualizar nuevos plugins automáticamente. Para poder realizar estos cambios WordPress comprueba si puede acceder al sistema de ficheros.

Un problema muy habitual es que WordPress no puede acceder al sistema de ficheros directamente y esto nos da como resultado la petición de datos de conexión para poder hacerlo:

¿Cómo solucionar esto?
Leer más

Comparte
13 Oct 2011

¿Cómo configurar un proxy para WordPress?

En muchas empresas las comunicaciones hacía el exterior se realizan a través de un servidor proxy. Si tenemos que trabajar con WordPress dentro de la Intranet de una empresa nos daremos cuenta de que hay ciertas funcionalidades que no funcionan. Estas funciones requieren comunicación con algún servidor externo para descarga y actualización de plugins (FTP), envío de correos (SMTP), carga de contenido de feeds (RSS)…

Si nuestra versión de WordPress es posterior a la 2.7 sólo tendremos que modificar el archivo wp-config.php:

Selec All Code:
1
2
3
4
5
define('WP_PROXY_HOST', 'ejemplo.proxy.com');
define('WP_PROXY_PORT', '8080');
define('WP_PROXY_USERNAME', 'nombre_usuario');
define('WP_PROXY_PASSWORD', 'contraseña');
define('WP_PROXY_BYPASS_HOSTS', 'localhost, www.ejemplo.com');

Si nuestra versión de WordPress es la 2.7 o anterior tendremos que modificar el archivo wp-includes/class-snoopy.php. Las variables a modificar son las siguientes:

Selec All Code:
1
2
3
4
5
var $proxy_host = "ejemplo.proxy.com"; //proxy a utilizar
var $proxy_port = "8080"; //puerto proxy a utilizar
var $proxy_user = "nombre_usuario"; // usuario proxy a utilizar
var $proxy_pass = "contraseña"; // contraseña proxy a utilizar
var $_isproxy   = true; //

 

 

Comparte
09 Oct 2011

Cabecera aleatoria en WordPress

En uno de nuestros proyectos, la página Web www.movimientosdegenero.com, pensamos junto con la administradora del Blog la idea de una cabecera que cambiase aleatoriamente con cada cambio de página y que además fuese un proyecto participativo (base del 2.0). Lo que hicimos es que los visitantes pudieran enviar su foto y que ésta apareciese tanto en la cabecera de la Web como en una galería. Esta estrategia está acorde con el concepto de Neuromarketing que explicamos en una entrada anterior.

En lo que concierne a la parte técnica, la idea es cargar una imagen diferente cada vez que se llama al archivo PHP que carga el “header”. Aunque la página donde lo hemos programado es un WordPress, se puede aplicar en cualquier proyecto Web con PHP. En nuestro caso pusimos el siguiente código en el archivo “header.php” del theme de WordPress:

Selec All Code:
1
2
3
4
5
6
7
8
9
10
11
$carpetaImagenes="rutaDelDirectorio"; //Guardamos todas las posibles cabeceras en el mismo directorio
$directorioImagenes=opendir($carpetaImagenes); //Abrimos el directorio
$cont=0; //Contador del número de imágenes
while ($imagen = readdir($directorioImagenes)) { //Recorremos todas las imagenes del directorio
  if($imagen != '.' and $imagen!='..'){ //No tenemos en cuenta el directorio actual (.) y el directorio superior (.)
    $imgDir[$cont]=$imagen; //Añadimos la imagen al array
    $cont++; //Contamos una más
  }
}
sort($imgDir); //Ordenamos el array (en nuestro caso lo necesitamos -> se puede borrar)
$ImgAzar=rand(0, $cont-1); //Elegimos un número aleatorio entre 0 y el número de imágenes (menos uno, que empezamos por cero)

Con el código anterior ya tenemos un array con todas las imágenes del directorio elegido y un número entero aleatorio.

Aunque cada uno lo podéis usar como creáis, en nuestro caso, hemos utilizado el siguiente código HTML para imprimir nuestra cabecera.:

Selec All Code:
1
2
3
4
<div style="background-image:url(rutaDelDirectorio/<?php echo $imgDir[$ImgAzar];?>);"> <!--Imagen aleatoria-->
  <h1 class="titulo_cabecera"> <?php bloginfo('name'); ?> </h1>  <!--Título de la página (esto solo en Wordpress)-->
  <small class="contador"><?php $ImgAzar++; echo "$ImgAzar/$cuantasImg";?></small> <!--Número de la imagen seleccionada-->
</div>

Esperamos que la información os sea útil, para cualquier duda podéis preguntar en los comentarios.

Comparte
31 Ago 2011

Neuromarketing en el Desarrollo de Páginas Web

Sinapsis de una Neurona para ilustrar el efecto del Neuromarketing en el CerebroEn un mundo tan competitivo como el marketing en Internet, los pequeños detalles marcan la diferencia. En Ruvic, cuando nos enfrentamos al desarrollo de una nueva página Web, mantenemos un compromiso desde diferentes puntos de vista. Un diseño “bonito” sin más, no va a aumentar las ventas, necesitamos un trabajo mucho más profundo que la simple apariencia. Además del diseño, trabajamos: el SEO (resultados en buscadores como Google), el cumplimiento de los estándares, la usabilidad, los tiempos de carga, la seguridad, contenido de calidad … y lo que vamos a contar hoy: el factor psicológico.

Cuando visitamos una página Web, hay una serie de pequeños detalles que escapan a nuestra consciencia, que nos guían a actuar de una manera o de otra. ¿Por qué hay páginas que visitamos diariamente si sabemos que hay otras que son mejores? ¿Cómo consigue una página web destacar ante la competencia?
El neuromarketing es la linea de investigación que da respuesta a estas cuestiones. Consiste en una serie de tendencias basadas en el estudio del efecto de la publicidad en el cerebro, que analiza los factores que, sin darnos cuenta, quedan incorporados en nuestro subconsciente y orientan nuestras elecciones.
Aunque, en una tienda online es donde se pueden aplicar un mayor número de recomendaciones, en cualquier proyecto Web podemos seguir muchas de las directrices del siguiente decálogo: Leer más

Comparte
26 Ago 2011

Marcar una fila de un jTableMarking a row in a JTable

Captura de pantalla de las propiedades de un jTable desde NetbeansLa entrada de hoy va a ser más concreta y técnica que de costumbre. Viene motivada por un proyecto Java con cierta complejidad que estamos acabando y donde muchas de las cosas que hemos programado no tienen documentación (por lo menos en español).

Al grano. Si queremos obtener cual es la fila (row) seleccionada en un jTable de Java utilizamos la función jTable.getSelectedRow() que nos devuelve un entero con la fila seleccionada:

Selec All Code:
1
int numFilaSeleccionada=miJTable.getSelectedRow();

Si lo que queremos, es hacer la operación inversa; marcar o seleccionar una fila desde código, es muy tentador hacer (sí, nosotros también lo hemos intentado)

Selec All Code:
1
miJTable.getSelectedRow(intFilaSeleccion); //ojo, que esto no funciona

Pero no podía ser tan fácil, la manera correcta de hacerlo es con el modelo de tabla (que aunque no lo hayamos especificado siempre existe uno por omisión):

Selec All Code:
1
miJTable.getSelectionModel().setSelectionInterval(intPrimeraFila,intUltimaFila);

De este modo, podemos seleccionar todo el intervalo de filas que necesitemos.

Comparte
13 Ago 2011

Instalar phpScheduleIt

Como ya os contamos en el post anterior, phpScheduleIt es una aplicación Web libre para la gestión de reservas de usuarios, en este post os vamos a explicar todo lo necesario para instalarlo.

1. Requisitos

  • PHP 4.3.0 o superior
  • Base de Datos soportada por PEAR (MySQL es lo más recomendable)

2. Descargar la aplicación

Para instalar la aplicación, lo que primero que tenemos que hacer es descargar el programa. Vamos a www.php.brickhost.com y lo descargamos, al ser una aplicación Web no hay versiones para cada sistema operativo. Una vez descargado el programa, creamos una carpeta llamada phpscheduleit y descomprimimos la aplicación dentro de esa carpeta. Después, copiamos la carpeta phpScheduleIt en la carpeta donde tengamos nuestro servidor:

  • Si estamos en Linux: normalmente /var/www/html/
  • Si estamos en Windows y usamos XAMPP: normalmente c:\xampp
  • Si estamos usando un Hosting: lo subimos a la raíz del hosting Leer más
Comparte
04 Ago 2011

phpScheduleIt. Sistema de reserva de recursos

Captura de pantalla de phpScheduleItDespués de algunos meses de trabajo, ya tenemos en fase de pruebas Beta un nuevo proyecto en la Facultad de Ciencias de la Universidad de Granada. Consiste en un sistema de Reserva de Aulas, donde los usuarios (profesorado, PAS …) pueden hacer peticiones de reserva de un espacio de la Facultad y los Administradores las validan, editan o revocan. Para conseguir todo esto estamos adaptando la aplicación web de Software Libre: phpScheduleIt.
En este primer artículo os vamos a explicar qué es phpScheduleIt y para qué se usa. En siguientes artículos os enseñaremos como instalar esta aplicación Web en diferentes entornos y sistemas operativos. Más adelante, escribiremos una serie de artículos donde nos adentremos en el uso, gestión y programación de la herramienta.

¿Qué es phpScheduleIt?

phpScheduleIt es una aplicación Web construida en  PHP y HTML con algunas partes concretas en JavaScript. Pero lo que es más importante … ¡¡es Software Libre!!, lo que nos permite poder programar nuevas utilidades sin ningún problema. Además está realmente bien construida, siguiendo una orientación a objetos muy formal, de manera que podemos adaptar la aplicación a nuestras necesidades si tenemos ganas de programar. De todos modos, la aplicación permite cambiar muchas opciones desde su menú, sin que tengamos que escribir ni una linea de código. Leer más

Comparte

© 2010 Ruvic Soluciones Informáticas

Subir