Todas las entradas por Rubén Lacasa Mas

Atajo de teclado para mostrar escritorio en Ubuntu – Ubuntu Tips

No se vosotros, pero yo suelo a tener un montón de ventanas abiertas cuando trabajo, y generalmente los archivos importantes que puedo necesitar en el trabajo que este haciendo en ese momento los tengo en el escritorio. Cuando trabajo con Mac puedo mostrar rápidamente el escritorio con un movimiento de ratón hacia una esquina, yo lo tengo en la de arriba. Cuando trabajo con Windows, que nos son muchas veces, pues o bien tienes el botón de mostrar escritorio, o bien mueves el ratón abajo a la derecha (window 7 y Vista)

¿Y en Ubuntu? Pues bien, antes cuando usaba Gnome estaba el botón de mostrar escritorio, ahora con Unity pues no esta. La manera mas rápida de hacerlo es con la siguiente combinación de teclas

Ctrl + Super(tecla Win) + d

De esta manera se ocultaran todas las ventanas que tengamos abiertas y se nos mostrara el escritorio

Si quereis mas información acerca de los atajos de teclado de ubuntu se pueden consultar aqui https://help.ubuntu.com/12.10/ubuntu-help/shell-keyboard-shortcuts.html

Enhanced by Zemanta

Tutorial en video del uso de Sublime Text 2

Tuts+ Premium Course: Perfect Workflow in Sublime Text 2.

Browser Refresh – Plugins para Sublime Text 2

Hace un tiempo hablaba de los IDEs para programar con PHP y entre ellos se encontraba el Sublime Text 2 el cual tengo que decir que cada día me gusta y lo uso mas.

Hoy con esta entrada voy a comenzar con una serie de entradas con plugins que me parecen muy interesantes y útiles a la hora de usar este programa. Uno de estos plugins es el Browser Refresh el cual nos permite, utilizando nuestro navegador web preferido, ver como van quedando nuestros cambios, y así evitarnos el tener que estar pasando del entrono de programación al navegador.

http://gcollazo.github.com/BrowserRefresh-Sublime/

Enhanced by Zemanta

HTML5 en versiones anteriores de Internet Explorer 9 – HTML5 Tips

Uno de los problemas que nos encontramos a la hora de diseñar paginas con HTML5 es la compatibilidad con navegadores antiguos. Hay muchos usuarios que usan versiones anteriores a Internet Explorer 9, y en esas versiones, no reconocen los nuevos elementos de HTML5. Una de las maneras de solucionar esto es incluyendo el script HTML5 shiv en la cabecera dentro de un condicional, para que cuando el navegador sea menor que esa versión lo cargue y así pueda leer los elementos HTML5.


<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

El atributo Charset – HTML5 Tips

Uno de los atributos que debemos especificar en toda pagina web es el atributo Charset, este va a definir que tipo de caracteres vamos a utilizar en la web, para que el navegador lo detecte y lo visualice correctamente.

Este atributo, en HTML4 lo definimos de la siguiente manera


<meta http-equiv="content-type" content="text/html; charset=UTF-8">

Con HTML5 definir se ha introducido el atributo charset el y es mas sencillo


<meta class="charset="UTF-8">

Para asegurarnos que todos los navegadores leen la propiedad de codificación de caracteres, la declaración de este debe ser incluida en los primeros 512 caracteres de nuestro documento, es decir, para evitar problemas, debería definirse inmediatamente después de la etiqueta head.

W3schools HTML meta tag

Enhanced by Zemanta

Bucle For vs Bucle For/in en JavaScript – JavaScript Tips

A la hora de recorrer un conjunto de datos o un Array en JavaScript, lo normal es usar el bucle for de toda la vida

var valores = new Array('uno', 'dos', 'tres');
for (var i=0; i < valores.length; i++ ) {
document.write(valores[i]);
}

Este es el bucle al cual estamos acostumbrados, y siempre tenemos que usar length para calcular la dimensión del Array
En cambio si usamos el bucle for/in no hace falta tener que calcularlo

var valores = new Array('uno', 'dos', 'tres');
for (var i in valores) {
document.write(valores[i]);
}

Como se puede ver es bastante mas sencillo usar el bucle for/in que el for. Este bucle seria al equivalente en PHP del foreach
Otra ventaja mas que tiene es que nos permite recorrer un objeto de JavaScript, algo que con el bucle for usando length no nos permite hacer, por lo menos de una manera sencilla.

var person={fname:"John", lname:"Doe", age:25};
for ( x in person) {
document.write(person[x]);
}

Bucles for W3Schools (en inglés)

Enhanced by Zemanta

Web Storage – Novedades HTML5

¿Que es el HTML5 Web Storage?

Una de las novedades en el HTML5 es el uso de Web Storage para almacenar los datos de la web en el navegador. Hasta aquí parecería que estoy hablando de las cookies pero a diferencia de estas el Web Storage es mas seguro y rápido y los datos no se incluyen en cada consulta, solo cuando se necesitan, ademas es posible guardar mucha cantidad de datos sin afectar al rendimiento de la web.

Navegadores Soportados

El Web Storage esta soportado en Internet Explorer 8+, Firefox, Opera, Chrome y Safari.

localStorage y sessionStorage

Hay dos nuevos objetos para almacenar los datos del cliente:

* localStorage – Almacena los datos sin limite de tiempo.

*sessionStorage – Almacena los datos durante una sesión.

El Objeto localStorage

El objeto localStorage almacena los datos indefinidamente. Los datos no son borrados cuando el navegador se cierra y estarán disponibles al día siguiente, semana, o año.


localStorage.propiedad = 'valor' //guarda el dato

console.log(localStorage.propiedad) //devuelve el dato

El objeto sessionStorage

El objeto sessionStorage es igual que el objeto localStorage, excepto que almacena el datos solo una sesión. Los datos son eliminados cuando el usuario cierra la ventana del navegador

HTML5 Web Storage (en ingles)

Cómo crear un servicio definido por el usuario – Windows Tips

No soy muy dado a usar Windows, pero a veces por necesidades del trabajo tengo que recurrir a usar este sistema operativo, así que con esta entrada voy a comenzar esta categoría de Tips para windows.

A veces nos podemos encontrar que los usuarios tienen que utilizar un programa o servicio en red y tenemos que instalarlo en un Windows y que para que lo puedan usar este programa tiene que estar abierto con la sesión de un usuario. Esto implica que el ordenador tenga que estar con la sesión iniciada, o en el caso que tengamos un fallo eléctrico o se reinicie, tengamos que tener configurado el inicio de sesión automático y el programa metido en el inicio del usuario.

Esto puede ser un poco comprometido, aunque siempre se puede bloquear la sesión, y también un poco aparatoso.

Para solucionar esto podemos usar los programas instsrv.exe y srvany.exe, incluidos en el kit de recursos de windows NT.

Siguiendo los pasos que nos indicados podremos configurar nuestra aplicación como servicio y ya no tendremos que preocuparnos de lo anterior.

Enhanced by Zemanta

Problemas con cliente SOAP – PHP Tips

En uno de los proyectos en los cuales estoy trabajando ahora mismo, necesitaba la implementación de un entorno cliente – servidor SOAP. El servidor, vamos a decir que debido a motivos de ecosistema, lo implemente con Delphi, y el cliente con PHP.

Bien, una vez el entorno implementado, y después de hacer las pruebas pertinentes entre el cliente y servidor, los que yo denomino test de «hola mundo», me puse a implementar los servicios que necesitaba, y aquí comenzaron los problemas.

Aparentemente estaba todo bien, pero el servidor me devolvia este error:

Uncaught SoapFault exception: [Client] Function function_nameis not a valid method for this service

Pues bien todo el problema venia que el cliente tenia almacenado en cache los servicios anteriores, y no los nuevos. Podemos solucionar este error de varias maneras. Una seria deshabilitando la cache wsdl en tiempo de ejecución, asi prevenimos que si implementamos servicios nuevos, el cliente no lo reconozca. Que decir que esta opción esta bien en desarrollo, ya que una vez que este todo establecido definitivamente lo podemos deshabilitar.

ini_set("soap.wsdl_cache_enabled", "0");

Otra manera de  hacerlo seria, si usamos la clase SoapClient para crear el cliente SOAP, es pasándolo como parámetro en la creación del objeto

$clienteSoap = new SoapClient('http://misitio.com?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE));

Configuración SOAP en tiempo de ejecución
Clase SoapClient

Averiguar el genero de un nombre con PHP – PHP Tips

El otro día tuve un pequeño problema, tenia que diseñar un formulario, en el cual se recogen los datos desde una base de datos de nombres para luego procesarlos en otro sitio, bien pues cuando obtenía los datos quería que me apareciera el tratamiento (Don o Doña) de la persona que estaba seleccionando y esto quería hacerlo automáticamente.  Una de las primeras cosas que hago cuando me suceden estos dilemas es ponerme a programarlo por mi cuenta, gran fallo, ya que una de las cosas que tenemos que pensar es que esto es una situación habitual y seguramente hay alguna función que nos permita hacerlo de una manera sencilla.

Antes de ponerme a pensar que existiera esa función intente crear una función para solucionar este problema de una manera sencilla. En principio todos los nombres que tengo en la base de datos están en castellano,  entonces pense, a ver la inmensa mayoría de los nombres de chica finalizan con ‘a’, pues bien voy a crear una función para obtener el ultimo carácter del nombre y si es ‘a’ es una chica, si no es un chico. Esta no es una buena solución, aunque tengo que decir que en la mayoría de los casos acierta, pero tenemos excepciones, por ejemplo, en el caso de las chicas (Rocio, Isabel,..) y en el caso de los chicos (Borja). Podríamos optar por agregar una array de excepciones, y cada vez que nos ocurriera una ‘mala coincidencia’ agregar esa excepción. Esta función quedaria de esta manera.

function detectaGenero($nombre) {
    $genero = "Chico";
    $excepcionesChico = array('Borja',);
    $excepcionesChica = array('Rocio','Isabel');
    $letra = substr($nombre, -1);
    if (($letra == 'a' || in_array($nombre, $excepcionesChica)) && !in_array($nombre, $excepcionesChico)) {
        $genero = "Chica";
    }
    return $genero;
}

Si esta función la ponemos a comparar nombres en otro idioma no nos serviria de nada, y luego seria tambien un inconveniente tener que estar cada vez que encontráramos una excepción agregarla al array.

La buena noticia es que existe una extensión PECL Gender, que una vez instalada en nuestro servidor nos permite llamar a la clase Gender y poder conocer el genero de ese nombre. El inconveniente, que es una extensión PECL y si nuestra aplicación web, esta en un hosting en el cual no podemos agregar este tipo de extensiones no nos sirve de nada, a no ser que el proveedor quiera instalarla.

Esta extensión es un port del programa gender.c escrito originalmente por Joerg Michael. Su base de datos de nombres contiene mas de 40000 nombres de 54 países.
La función anterior usando Gender quedaria así:

function detectaGenero($nombre) {
    $genero = "Chico";
    $gender = new Gender;
    $result = $gender->get($nombre);
    if ($result === Gender::IS_FEMALE OR $result === Gender::IS_MOSTLY_FEMALE) {
        $genero = "Chica";
    }
    return $genero;
}

Como podemos ver es mas sencilla que la anterior, mas fiable, y no tenemos que estar agregando excepciones, y pensar en los nombres en otros idiomas.
PHP: Gender – Manual