Un naúfrago en una isla


Archive for the ‘Informática’ Category

La mejor manera de capturar una tecla pulsada con javascript

<script>
function callkeydownhandler(evnt) {
   var ev = (evnt) ? evnt : event;
   var code=(ev.which) ? ev.which : event.keyCode;
   alert("El código de la tecla pulsada es: " + code);
}
if (window.document.addEventListener) {
   window.document.addEventListener("keydown", callkeydownhandler, false);
} else {
   window.document.attachEvent("onkeydown", callkeydownhandler);
}
</script>

Utilizando este pequeño código podremos saber que tecla ha pulsado un usuario en la página actual. Funciona perfectamente en Internet Explorer 8, que es especialmente conflictivo con antiguos métodos de detección :)

Hope that helps!!!!

  • Share/Bookmark

Excluir registros de acceso a páginas o imágenes en nuestro log de Apache

Uno de los problemas que trae consigo la tecnología Ajax es que, al ejecutarse muchos scripts en el background, el tamaño del fichero log de nuestro servidor Web, puede incrementarse de manera sustancial. Imaginaos un script que es ejecutado cada 3 segundos para comprobar si alguien ha escrito en un chat y mostrarlo por pantalla. O por ejemplo Facebook, que chequea cada poco tiempo si hay contenido nuevo. Por cada petición que se hace al script que se encarga de esos chequeos, se guarda un registro en el log del servidor web. Multiplicad cada petición por todos los usuarios que puede tener un sitio web…en cuanto te descuidas tienes un log de varios gigas.

Pero si el servidor web que estáis usando es Apache, hay una forma muy sencilla de evitar que los accesos a ciertas páginas (o imágenes, o cualquier cosa susceptible de ser alojada en un servidor) sean guardados en el log. Es tan sencillo como irse a la configuración de Apache (en principio httpd.conf) y añadir lo siguiente:

SetEnvIfNoCase Request_URI "pagina_no_quiero_en_log.php" dontlog

Podéis usar “SetEnvIf” en vez de “SetEnvIfNoCase” si queréis que sea sensible a mayúsculas y minúsculas. Es decir, para que no sea lo mismo “PaGina.php” que “pagina.php” o “PAGINA.PHP”. La palabra “dontlog” es de invención propia, es decir, podéis usar la que queráis, por ejemplo, “noguardar”. Si queréis excluir varias páginas simplemente tendréis que añadir varias líneas, una por cada página, pero todas tienen que tener en común la palabra que aparece al final, en este caso “dontlog”.

Una vez añadida esa línea (o líneas), tendremos que acudir a la línea donde se hace referencia al log de Apache y añadir al final de la misma lo siguiente, “env!=dontlog”

CustomLog /var/log/access_log combined env=!dontlog

Reiniciamos Apache y, si todo ha ido bien, los accesos a esas páginas no se guardarían en nuestro log.

  • Share/Bookmark

La alternativa de Irfanview en Linux

Un programa que siempre me ha encantado, por su facilidad de uso y su potencia (para ser un visualizador de imágenes), ha sido Irfanview. Desde que lo descubrí, hace ya bastantes años, es de los primeros programas que instalo después de reinstalar Windows.

Como le estoy dando otra oportunidad a Linux (la enésima) estuve buscando algo parecido a Irfanview en dicho sistema operativo…y me fue imposible. No había nada intermedio entre un visualizador y un editor de imágenes. Yo pretendía poder redimensionar, girar o recortar una imagen sin tener que usar GIMP, es decir, sin matar moscas a cañonazos (aparte de que odio la interfaz de múltiples ventanas de GIMP)

Y aunque no he encontrado un sustituto al 100%, sí que al menos he encontrado uno que consigue que no lo eche tanto de menos….FOTOXX

http://kornelix.squarespace.com/fotoxx/

Puedo redimensionar, recortar o hacer más “sharp” una imagen…que es lo que hago el 90% de las veces…Lo malo…solamente es capaz de guardar las imagenes en tiff, png o jpg (no, no incluye el gif). Pero bueno, algo es algo, no? :)

  • Share/Bookmark

Una forma elegante de formatear una fecha

Todos sabemos que MySQL devuelve los campos de tipo fecha con el formato “YYYY/MM/DD” que en Europa es poco práctico, así que a la hora de presentar dichos campos siempre tenemos que formatearlos. En PHP Se puede formatear usando la función substr pero lo cierto es que la forma más elegante sería usando la función date:

function formatDate($mydate){
		return date('d/m/Y H:i:s',strtotime($mydate));
}

Donde $mydate sería el campo fecha devuelto por MySQL.

  • Share/Bookmark

Como logarse a una cuenta de Google con PHP y cURL (II)

Hace ya varios meses que posteé una forma de logarse a una cuenta de Google usando cURL. Yo particularmente lo usaba para obtener ciertos datos de Google Analytics y procesarlos. Pero hace algunos días este script dejó misteriosamente de funcionar y, tras una ardua búsqueda en Internet, descubrí que el problema estaba en un nuevo parámetro que hay que enviar por POST a la hora de logarse. El parámetro se llama GALX y el problema está en que su valor no es estático sino que se genera dinámicamente cada vez que se accede a la página de login.

Pero “a grandes males, grandes remedios”. Así que la solución está en extraer el valor de GALX (que se almacena en un input type hidden) del formulario de login y enviarlo como parametro a través de cURL. Como una imagen valen más que mil palabras os dejo el script tal y como debería quedar para logarse sin problemas

<?
//authentication

$churl ="https://www.google.com/accounts/ServiceLoginBoxAuth";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.25 Safari/532.0");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_URL, $churl);
$response=curl_exec ($ch);

$pattern = '/name="GALX"\s+value="(.+)"/';
preg_match($pattern, $response, $matches);
$GALX=$matches[1];

$churl ="https://www.google.com/accounts/ServiceLoginBoxAuth";
$username=urlencode('usuario@dominio.com'); //por lo general será usuario@gmail.com
$password="tupassword";
$postdata="GALX=$GALX&Email=$username&Passwd=$password";

curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_URL, $churl);
curl_exec ($ch);

//end authentication
?>
  • Share/Bookmark

Comando en linux para reemplazar texto

Reemplazar un texto por otro en varios ficheros a la vez se puede convertir en algo tedioso, sobre todo si esos ficheros no están ubicados en el mismo directorio, o incluso puede darse el caso de que no sepamos que ficheros necesitan ser reemplazados. Para ello tenemos este pequeña sentencia que nos ayudará a hacerlo del tirón :)

find . -name  "*.txt" -exec sed -i 's/TEXTO1/TEXTO2/g' {} \;

Este comando lo que hará es buscar todos los ficheros con extensión txt en el directorio y subdirectorios desde donde estamos lanzando el comando, y reemplazará en todos los ficheros que encuentre la palabra TEXTO1 por la palabra TEXTO2.

En el caso de que queramos cambiar cualquier fichero sin importar la extensión tan solo tenemos que sustituir -name  ”*.txt” por -type f

find . -type f -exec sed -i 's/TEXTO1/TEXTO2/g' {} \;

Nunca está de más recordar que es una sentencia bastante peligrosa ya que no hay marcha atrás. Hay que estar muy seguro de lo que queremos sustituir y donde queremos sustituirlo ;)

  • Share/Bookmark

La puÑetera eÑe

Uno de los primeros problemas al que nos enfrentamos los hispanoparlantes cuando vivimos en el extranjero es a la ausencia en nuestros teclados de nuestra querida letra Ñ.  Solucionarlo es relativamente fácil cuando posees un teclado normal, ya que como todos sabéis, con la combinación de teclas “ALT+164 y ALT+165″ podemos insertar la letra ñ tanto en minúsculas como en mayúsculas.  Pero qué pasa cuando no tenemos teclado numérico como sucede en la mayoría de portátiles?.

Yo durante bastante tiempo tuve instalado en Windows los dos teclados (el irlandés y el español) y pasaba de uno a otro con la combinación de teclas  ”ALT+SHIFT”.  Pero muchas veces no pulsaba correctamente las teclas y escribía un “;”, otras veces (y no sé por qué) se quedaba marcado el bloqueo mayúsculas…total, que al final tardabas más que copiando y pegando la ñ de otro lado.

Así que ese fue el siguiente paso, tener siempre a mano la página de Google España y así poder copiar alguna de las ñ’s que salían en su web…pero el método me parecía (y me parece) super cutre así que me dije…”vamos, por dios, tiene que haber otra manera”. Y sí que la hay y consiste en…remapear el teclado.

En algunos teclados, como el irlandés o el de UK, pulsando “Alt Gr + vocal” consigues que esa vocal salga acentuada. Así es como yo pongo las tildes, me parece la forma más rápida.  Yo quería poder hacer lo mismo para la ñ pulsando “Alt Gr + n”. Pues bien, cómo podemos hacer eso?, pues remapeando el teclado como ya hemos comentado antes.

La propia Microsoft nos pone a disposición un programa muy sencillo de usar para poder hacerlo, el Microsoft Keyboard Layout Creator . Una vez instalado el programa sólamente hay que seguir unos cuantos pasos.

1) Nos vamos al menú “File” y seleccionamos la opción “Load existing Keyboard…”

keyboard1

2) En este ejemplo vamos a usar el teclado de UK,  por lo que será el que seleccionaremos en la lista:

keyboard2

3)  Una vez cargado el teclado que deseamos modificar, marcamos la casilla “Alt + Ctrl (AltGr) ” y hacemos click sobre la tecla “n” del teclado virtual que aparece en el programa. Se nos abrirá una ventanita donde deberemos poner la letra que queremos que se corresponda con esa combinacion de teclas (en nuestro caso la letra ñ). Después hacemos lo mismo pero marcando además la casilla “Shift” para así poder introducir la Ñ mayúscula.

keyboard3

4)  Ahora que ya hemos remapeado el teclado, nos vamos al menú “Proyect” y seleccionamos la opción “Properties”.  Rellenamos los campos a nuestro gusto (no dejar ninguno en blanco) teniendo en cuenta que el campo “Name” no puede tener más de 8 caracteres, y le damos al botón “Ok”

keyboard4

5)  Ya por último nos vamos de nuevo al menú “Project” y seleccionamos “Build DLL and Setup Package”. Si todo ha ido bien el programa nos mostrará un mensaje diciéndonos dónde se ha creado el instalador del nuevo teclado e incluso dándonos la opción de abrir el directorio donde se encuentra (por defecto en la carpeta de “Mis Documentos”). Decimos que sí para que abra el directorio y nos encontraremos, entre otros ficheros, un fichero llamado “setup.exe” que es el que ejecutaremos para instalar nuestro nuevo teclado. Se va a instalar como si se tratara de un programa normal. De hecho podremos más tarde desinstalarlo yéndonos a “añadir o quitar programas” del Panel de Control de Windows, como cualquier otro programa.

6) Y por fín, el último paso :) . Ahora solamente nos queda seleccionar el nuevo teclado en nuestra configuración regional de Windows y borrar nuestro antiguo teclado.

keyboard5

Todo este proceso no lleva más de 5 minutos aunque a primera vista parezca un poco enrevesado.  Además, si tenemos que hacer esto en varios ordenadores con el mismo teclado, no hace falta decir que no es necesario instalar el Keyboard Layout Creator en todos ellos, simplemente con ejecutar el instalador del nuevo teclado que hemos creado es suficiente :)

Espero que os sea de ayuda este post ;)

  • Share/Bookmark

Como situarse en un punto concreto en un vídeo de Youtube

¿Cuántas veces hemos dicho (probablemente escrito) “lo interesante empieza en el minuto 1:37 del vídeo” o “fíjate en la chica que sale en el minuto 4:37″?, ¿muchas verdad?.

Pues bien,  todos sabemos que no es  muy complicado moverse por un vídeo de Youtube usando la barra de progreso del mismo, pero nunca está de más saberse este pequeño truco para poder enlazar directamente con la posición del vídeo que queremos mostrar.

Para ello solamente tenemos que añadir al final de la URL el siguiente texto:

#t=5m21s

Donde el 5 serían los minutos y 21 los segundos de la posición del vídeo que queremos ver.  Con este ejemplo quedará más claro. Vamos a situarnos en el segundo 32 del vídeo:

http://www.youtube.com/watch?v=sCRT2KzsPaM#t=0m32s

Supongo que todos habéis visto la luna reflejándose en el agua de una piscina sin tener que visionar los 31 segundos previos verdad?.

Pues eso es todo amigos, sé que olvidaréis como se hace en el momento que necesitéis hacerlo pero oye, lo importante es la salud!! :)

  • Share/Bookmark

Dentro de 20 años

Siempre he pensado que estuve acertado a la hora de decidir como ganarme la vida. Ser programador me ha servido para poder cambiar de trabajo cuando he querido, de forma rápida y con un sueldo, que sin ser alto, sí que era superior al de la media. Aunque programar es lo que menos me gusta dentro de lo que es la informática, lo cierto es que no se me da mal y en ocasiones hasta  me entretiene (que eso en un trabajo no es poco). Hasta ahí todo bien…pero hay una cosa que desde que cumplí los 30 años me inquieta bastante…qué pasará dentro de 20 años?.

Puedo imaginarme a un panadero, a un profesor…a un montón de profesionales cumpliendo su labor dignamente a cualquier edad…pero un programador?, podré competir con los jóvenes? la experiencia será suficiente?. Y si me reconvierto dentro de la profesión…qué sabré hacer?, mis conocimientos son tan técnicos que si me sacas de ellos no soy nadie. No tengo madera de líder, ni cualidades organizativas o comerciales. Yo necesito un teclado y un problema informático, es lo único que sé hacer. Tal vez sería hora de empezar a labrarme otro porvenir.

Lo que tengo claro es que dentro de 20 años, si la salud me acompaña, sabremos la respuesta ;)

P.d: aunque en todos los posts parezca un amargado siempre llevo mi sonrisa a cuestas eh? :)

  • Share/Bookmark

Cambiar el formato de una fecha devuelta por Microsoft SQL Server

No sé por qué extraña razón MS SQL Server devuelve las fechas en el formato “1 Jan 1900 0:00″ que es bastante poco práctico, todo sea dicho. Así que si estáis programando con PHP podéis formatear la fecha a vuestro antojo simplemente añadiendo esta sentencia:

$format="d/m/Y H:i";
date($format,strtotime($mydate));

siendo $mydate la fecha devuelta por MSSQL y $format el formato que le queráis dar

Una cosa más para finalizar. Sí no os muestra los segundos (os muestra siempre cero segundos) simplemente añadid esta línea a vuestro script php

ini_set('mssql.datetimeconvert',false);
  • Share/Bookmark