Archivo de la categoría: Programación

Cosas relacionadas con la programación y los algoritmos.

Ejemplos de estilos CSS para tablas

ejemplo-tabla-cssA quién le interese, he encontrado dos enlaces muy útiles para los que necesiten ver algunos ejemplos de tablas realizadas con CSS.

A veces cuando diseño mis páginas me tengo que romper la cabeza buscando buenas páginas con ejemplos o cosas específicas de las CSS, pero con estas dos webs se acabaron mis problemas:

  • TABLAS CSS EN PLAN RÁPIDO: CSS Table Gallery,  es una galería de ejemplos de tablas CSS. Pulsando en el título del tema te cambia toda la tabla y puedes ver como queda. Es genial.
  • PARA APRENDER SOBRE TABLAS EN CSS: Mamita que pedazo de tablas, este artículo lo ha escrito un “radical” de las CSS con ejemplos y consejos sobre como programar tablas en CSS que están muy bien. Personalmente no comparto su opinión sobre el tema de las etiquetas <CENTER>, pero no importa, este tipo es un genio de las CSS y pienso que hay que intentar seguir sus recomendaciones lo máximo posible.

Espero que os sea tan útil como a mi.

Con PHP, detectar idioma, redireccionar página y guardar preferencia del lenguaje en una cookie

Selector idiomas con PHP

En vista que no encontramos un ejemplo completo, publicamos nuestra propia solución.

Mediante lenguaje PHP, queremos detectar el idioma del navegador y redireccionar automáticamente al visitante a la página en su idioma. En caso que el visitante desee otro idioma y no el “detectado”, pues puede seleccionarlo y su preferencia del lenguaje elegido se guarda en una cookie.

Nuestro ejemplo es muy sencillo, básicamente consta de dos archivos.

Por un lado tenemos el código que se inserta en todas las páginas de tu web, (por ejemplo en index.php, index-pt.php, index-fr.php, etc). Este código hace un include de un archivo común a todos llamado “redireccionador.php“, y contiene todo lo necesario para hacer la web multilingüe .

Empezamos creando los dos archivos “index.php”, “redireccionador.php” para hacer las pruebas.

En “index.php” y más tarde en los demás archivos de idiomas “index-fr.php”, “index-en.php”, “index-de.php”… escribimos:

NOTA: quita el espacio que hay entre el “<” y el “?php” del inicio, y el “?” y “>” que hay un poco más abajo. Es que si no le pongo el espacio, esta web peta y sale un error sin que aparezca el código siguiente.

< ?php 

$thisPageLang="es"; // idioma de esta página 
include 'redireccionador.php'; 
? >

<html><body>
<a href="index-ca.php?wlang=ca"><img src="pics/nca.jpg" alt="catala flag" /></a> 
<a href="index-de.php?wlang=de"><img src="pics/nde.gif" alt="german flag" /></a>
<a href="index-en.php?wlang=en"><img src="pics/nen.jpg" alt="english flag" /></a>
<a href="index.php?wlang=es"><img src="pics/nes.jpg" alt="spanish flag" /></a>
<a href="index-eu.php?wlang=eu"><img src="pics/neu.png" alt="Basque flag" /></a>
<a href="index-ga.php?wlang=ga"><img src="pics/nga.png" alt="galician flag" /></a>
<a href="index-fr.php?wlang=fr"><img src="pics/nfr.gif" alt="french flag" /></a>
<a href="index-it.php?wlang=it"><img src="pics/nit.jpg" alt="italian flag" /></a>
<a href="index-pt.php?wlang=pt"><img src="pics/npo.gif" alt="portuguese brazilian flag" /></a>
<br /><br />Web española!
</body></html>

En la variable $thisPageLang escribiremos el idioma con el formato típico, es decir, si la página está en español será “es”, si está en catalán será “ca”, si es inglesa sera “en”, etc. Esto es necesario por si estamos por ejemplo en la página en español, no nos redireccione automáticamente a la página en español, y así infinitamente.

Y ahora la parte final, el código que detecta el idioma del visitante, se guarda la cookie y redirecciona:

Archivo “redireccionador.php”


< ?php

// Si el idioma esta en la URL, grabarlo en una cookie 
$webLang=trim($_GET["wlang"]);
if ($webLang<>"") {
        $expire=time()+60*60*24*30*6; // 6 meses
        setcookie("clang", $webLang, $expire);
} else {

    // Hay una cookie de idioma definida
    if (isset($_COOKIE["clang"])) {    
        // leer idioma en la cookie
        $webLang=$_COOKIE["clang"];

    // No hay ninguna cookie de idioma definida    
    } else {      
        // detectar idioma del navegador
        $webLang = substr ($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2);
        if (($webLang<>"ca") AND ($webLang<>"de") AND ($webLang<>"en") AND ($webLang<>"es") AND ($webLang<>"eu")
            AND ($webLang<>"fr") AND ($webLang<>"ga") AND ($webLang<>"it") AND ($webLang<>"pt") ) {
                // Idioma por defecto, en caso de detectar un idioma raro que no tengamos
                $webLang="es";
        }
        $expire=time()+60*60*24*30*6; // 6 meses
        setcookie("clang", $webLang, $expire);
    }  

    // Anti bucles infinitos (evita que si estamos en la página española, nos redirija a la página española y así una y otra vez sin parar.
    if ($thisPageLang<>$webLang) {
        // redireccionar al idioma correspondiente            
        switch ($webLang) {
            case "ca":
                Header('Location: http://www.tuweb.com/index-ca.php');
                break;
            case "de":
                Header('Location: http://www.tuweb.com/index-de.php');
                break;
            case "en":
                Header('Location: http://www.tuweb.com/index-en.php');
                break;
            case "es":
                Header('Location: http://www.tuweb.com/index.php');
                break;
            case "eu":
                Header('Location: http://www.tuweb.com/index-eu.php');
                break;
            case "fr":
                Header('Location: http://www.tuweb.com/index-fr.php');
                break;
            case "ga":
                Header('Location: http://www.tuweb.com/index-ga.php');
                break;
            case "it":
                Header('Location: http://www.tuweb.com/index-it.php');
                break;
            case "pt":
                Header('Location: http://www.tuweb.com/index-pt.php');
                break;
            default: 
                Header('Location: http://www.tuweb.com/index.php');
        }        
    }

}
? >

Y ya para acabar, si eres tan vago como nosotros y no quieres copiar/pegar, te dejamos un archivo comprimido en ZIP con ejemplos de todos los archivos de este artículo (para 8 idiomas), y hasta te incluimos las banderitas para que te ahorres buscar con Google.

DESCARGAR:
Ejemplo completo de detector de idioma, redireccionador y cookie (formato ZIP, 20 KB)

Importante 1: En los archivos ZIP, no está corregido el problema con el portugués. Todo lo que tenga que ver con el idioma portugués, hay que poner “pt” y no “po”. Por ejemplo el archivo portugués sería index-pt.php (y no index-po.txt), o en el archivo “redireccionador.php”, donde dice “case “po”:” hay que poner “pt” y no “po”. El “pt” es el idioma hablado sobretodo en Brasil y Portugal, pero el “po” es el idioma que se habla en Polonia. :P

Importante 2: En caso que “no funcione bien”, seguramente es por el tema de la caché. En nuestro caso tenemos activada la caché con el archivo “.htaccess” y por eso el tema de la cookie tarda unos días en hacer efecto (la gente no va cambiando de idioma cada minuto). Si al hacer las pruebas os aparece este problema de la caché, se puede evitar si se pulsa el botón “mayúsculas” (tecla shift del teclado) y sin soltarla, se clica con el botón izquierdo del ratón encima del icono de recargar del navegador (el dibujo que aparece una “flecha circular”). Esto fuerza a que el navegador no utilice la cache y cargue los datos desde la web.

Si te gusta este artículo, por favor comenta más abajo. Y si no te gusta, pues también pero sin pasarse. ;)

Programa antirrobo para portátiles y PC

Sistema antirrobo de portátiles

Me preguntaba si había algún modo para proteger mi portátil en caso de robo y me he encontrado un programa muy interesante.

Básicamente consiste en instalar un programa en el PC que se queda “dormido” y en caso que lo roben o se pierda, se activa remotamente el programa antirrobo desde la web antirroboPC.com. Su efectividad es alta. Que se lo digan al propietario del portátil que la policía además de atrapar al ladrón, pudo recuperar el aparato. Lo explican en la noticia que salió en el Diario de Mallorca el pasado 26 de octubre 2010.

Cuando el ladrón utiliza el ordenador, este le hace fotos mediante la webcam del portátil, hace capturas screenshots (foto de la pantalla), graba sonido, puedes enviar mensajes al ladrón y lo mejor es que recoge datos de la red donde se encuentra, incluyendo Wifis cercanos, IP, coordenadas, etc que es lo que realmente utiliza la policía para atraparlo en el 100% de los casos.

Luego lo envía todo a la web y con estos datos la policía puede atraparle de manera bastante sencilla. Con los Windows XP, Vista y Seven hace geolocalización total, es decir, muestra en un mapa de Google la posición casi exacta del portátil.  Curiosamente, para poder localizar al portátil robado no utiliza GPS ni nada parecido, si no que localiza las conexiones Wifis cercanas y con unas bases de datos y triangulizando las señales Wifi, detecta la posición casi exacta del portátil. ¡Parece magia!

En la web te dejan una semana de prueba y si te gusta cuesta 10€ (o menos), las licencias son para siempre, sin cuotas anuales ni nada de eso. También te permiten que, en caso de cambiarte el ordenador puedas trasladar el programa del antiguo PC al nuevo sin coste alguno. De momento he realizado pruebas y estoy muy satisfecho, al final me he comprado 5 licencias y me ha costado 6,5€ cada una, no está nada mal. También he quitado el password a mis ordenadores de manera que ahora arrancan directamente desde el usuario principal, prefiero dejárselo fácil al ladrón para que se confíe y recuperarlo después fácilmente si me lo roban o lo pierdo.

Por fortuna o desgracia, hay métodos muy sencillos para quitar cualquier contraseña inicial de Windows, ya sea XP, Vista o incluso de Windows Siete, como descargar un fichero de tipo “imagen ISO”, se graba en un CD con el programa ImgBurn y luego se enciende el portátil con ese CD… y ya está,  con eso puedes eliminar la contraseña que quieras.

En la web de antirroboPC tienen varios ejemplos de geolocalización (como la foto de abajo), que aunque no es exacto (el margen de error está entre 5 y 200 metros en cualquier ciudad civilizada del mundo) los datos te pueden dar pistas en el caso, por ejemplo, que te lo robe un compañero del trabajo como pasó en uno de los sitios donde trabajé, donde desapareció un portátil y seguro que fue uno de los que allí trabajaban.

En la foto de abajo aparece en el círculo azul el área probable donde se encuentra el portátil y el punto rojo ha sido añadido posteriormente para indicar donde estaba realmente y poder comparar.  Desde luego para mi es impresionante lo que se puede llegar a hacer hoy en día.

Encuentra en un mapa donde está tu portátil perdido o robado.
Encuentra en un mapa donde está tu portátil perdido o robado.

Evitar la cache en programación ASP, PHP, Javascript, HTML y en formularios

programacionAlgunos programadores se encuentran con problemas a la hora de refrescar una página web porque a veces la caché nos incordia ofreciendo resultados antiguos.

A mi concretamente me ha pasado en los formularios, cuando se cambia los valores de un “Select” y al refrescar la página, el “Select” del formulario sigue sin cambiar, y eso aunque tenga activado la etiqueta “select” : selected=”selected”.

Para desconectar o evitar la cache, he reunido los siguientes trucos, espero que le sea útil a algún programador de webs:

Evitar la caché en los formularios

En todos los elementos “problematicos” en el form, como los select, hay que escribir: autocomplete=”off”

Por ejemplo, en un “Select” se haría así:

<select  name="OnOff10" id="OnOff10" autocomplete="off">
  <option value="0">Off</option>
  <option value="1">On</option>
</select>

Evitar la caché con ASP

En programación con ASP, para no tener caché al inicio del código se utiliza lo siguiente  :

<%
 Response.CacheControl = "no-cache"
 Response.AddHeader "Pragma", "no-cache"
 Response.Expires = -1
%>

Evitar la caché con PHP

Para forzar saltar la caché en programación con PHP, al inicio del código se utiliza lo siguiente  :

<$$$
    header( "Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
    header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
    header( "Cache-Control: no-cache, must-revalidate" );
    header( "Pragma: no-cache" );
$$$>

NOTA: sustituir donde pone “$$$” por el caracter “?”, ya que mi WordPress no me deja ponerlo correctamente.

Evitar la caché de una imagen con PHP

Para que una imagen no quede en la caché y siempre se refresque, se puede utilizar lo siguiente:

<img src="image.php?id?12<$$$=date(ymdHi)$$$>" />

NOTA: sustituir donde pone “$$$” por el caracter “?”, ya que mi WordPress no me deja ponerlo correctamente.

Evitar la caché con HTML

En el HTML hay que poner lo siguiente entre las etiquetas <HEAD> y </HEAD>:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

Evitar la caché con JavaScript

Utilizando Javascript, se puede poner el siguiente código en la etiqueta <BODY>, por ejemplo:

<BODY  onLoad="if ('Navigator' == navigator.appName)
document.forms[0].reset();">

Y esto es todo, si alguien tiene más formas, que las escriba en los comentarios. :)

programacion2