Instalar Internet Explorer en Ubuntu Linux

The horror, the horror. Está claro, nadie en su sano juicio querría instalar Explorer en su equipo de forma voluntaria (sacando que la alternativa a este fuera Safari… pero eso es otra historia). Pero si alejamos la vista del usuario medio y nos pasamos al perfil de desarrollador web nos encontramos con que ahí la cosa cambia.

Y es que por mucho que lo odiemos, y aunque ha bajado bastante estos años, Explorer sigue teniendo una cuota de mercado muy alta, además de seguir sin acatar al 100% los stándares de la W3C. Esto nos lleva a que si hacemos una web tenemos que testearla en el navegador de Microsoft. ¿Opciones? O máquina virtual con Windows o tirar de Wine para instalar y ejecutar Explorer en tu Ubuntu.

Wine lo puedes descargar desde la página del proyecto, desde el centro de software de Ubuntu o puedes hacerlo desde línea de comandos. En el enlace a la web del proyecto ya verás las instrucciones de instalación, si bien en mi ejemplo de abajo puedes ver como instalar Wine y Explorer desde el terminal:

##Añadimos el repositorio de Wine a la lista de repositorios
sudo add-apt-repository ppa:ubuntu-wine/ppa

##Instalamos wine, en el ejemplo la 1.4 que es la última versión estable hasta el momento, aunque hay betas de la 1.5 si quieres probar
sudo apt-get update && sudo apt-get install wine1.4 winetricks

##Instalamos la versión de Explorer que queremos, en mi caso era la 8
winetricks ie8

##Si quieres lanzar explorer desde la línea de comandos, basta con teclear
wine iexplorer

En fin, con esto ya tienes el navegador más ágil, potente, configurable, seguro y respetuoso con los estándares del mercado (no veáis lo que me estaba riendo mientras escribía eso, no se lo cree ni Steve Ballmer). Enjoy it!

Análisis de eMobc Lander, servicio para crear webs móviles con html5

Creo que alguna vez en el pasado hablé del framework libre para desarrollo móvil eMobc. Basado en plantillas, cuya estructura y contenido se definen a través de un xml, nos permite crear de forma sencilla y sin conocimientos de programación apps móbiles en HTML5 o nativas para Android e iOS.

Ahora ofrecen un nuevo servicio, eMobc Lander. Este nos permite crear apps móviles en HTML5 y alojarlas en su nube.

El sistema de creación es sencillísimo, en serio, tanto como hacerse un blog en WordPress o Blogger. Tras registrarte llegas a un panel donde puedes crear varias páginas, con cuatro pasos definidos:

  1. Configuration: A su vez tiene cuatro secciones. En Social Media podéis incluir enlaces a redes sociales, en Templates elegir una plantilla, en SEO añadir título, descripción, palabras clave, autor… y en Domain elegís el dominio de vuestra app.
  2. Content: Aquí está la chicha, desde este paso metéis contenido a vuestra app. Puede ser de todo tipo: audio, video, fotos, html local, una web, una fuente rss… incluso tiene un chat.
  3. Appearance: Elige tu icono, el logo, fotos, colores de fuentes, fondos, menús… en fin, desde aquí puedes meterle mano a la maquetación para modificar tu plantilla.
  4. Statistics: Este paso ya no forma parte de redacción, simplemente es un módulo con estadísticas donde podremos ver el número de visitas, qué pantallas han visto y cuántas conversiones hemos obtenido.

En fin, hasta aquí la parte buena: es muy fácil de usar y logra resultados muy atractivos en poco tiempo, es muy productivo. En cosa de media hora hice esto esta mañana.

Claro está, tenía que haber puntos negros como en cualquier servicio: el primero es que al trabajar con plantillas se pierde flexibilidad respecto a un desarrollo puro y duro, cosa que era de esperar. El segundo… que el servicio gratuito está limitado a 1000 visitas al mes. Pagando 19 euros al mes podrás conseguir aumentar el límite hasta las 5000 visitas mensuales y además podrás usar tu propio dominio. Y finalmente hay un plan de 39 euros mensuales que te permite visitas ilimitadas, eliminar el branding de eMobc e insertar publicidad para monetizar tu aplicación.

Llegados a este punto debes analizar si te interesa pagar un plan, si vas a superar o no el número de visitas y si te será más rentable pagar el precio de uno de sus planes o, por contra, encargar un app a una empresa. Todo depende del uso que quieras dar a tu aplicación web. En todo caso se trata de una herramienta cómoda que no está de más probar y que para ciertas cosas es muy válida.

Cinco herramientas gratuitas para monitorizar Twitter

Estos días estoy realizando un curso de comunicación 2.0 y gestión de comunidades y me gustaría comentar una serie de herramientas para monitorizar perfiles o actividad en Twitter, que a día de hoy es la red social referente para muchos casos. Existen variedad de herramientas de pago, pero también varias gratuitas, que para los casos de gente que quiere manejar su propio negocio o sólo unas pocas cuentas cumplen perfectamente su función.

Logo Twitter
Logo twitter
  • HootSuite: Si bien tiene programas de pago, HootSuite nos ofrece un plan gratuito que perfectamente puede cubrir las necesidad de muchos usuarios, permitiendo gestionar hasta 5 perfiles sociales, generar informes de actividad, programar mensajes,tener dos canales de RSS… Usado con inteligencia puede ser una gran herramienta a la hora de comprobar en la red menciones, actividad, etc…
  • Mention: Como HootSuite, Mention tiene también plan gratuito. Es bastante limitado en su plan gratis, así que si tienes que monitorizar mucha actividad en las redes no te va a ayudar mucho pero puede cubrir las necesidades de PYMES o usuarios sin excesiva actividad de comprobar las menciones que se hacen de ellos en las redes.
  • twazzup: Se trata de una aplicación veterana que combina la faceta de herramienta de monitorización de Twitter con la de herramienta de uso. Muy fácil de usar, twazzup nos permite seguir una serie de palabras clave y nos da información detallada de la actividad alrededor de ese término.
  • Tweet-tag: Si lo que quieres es monitorizar un hashtag, esta herramienta made in Spain te permite seguir la actividad del mismo en las últimas 24 horas y ver los usuarios más participativos, la influencia del hashtag, ver una gráfica de participación/tiempo… Tweet-tag es una gran herramienta para analizar la influencia de un tema.
  • Klout: Finalmente si lo que pretendes es medir la influencia que tus publicaciones tienen dentro de las redes sociales la aplicación estrella es Klout. Su importancia es tal que hay hoteles o aerolíneas que ofrecen servicios extra a clientes con un Klout alto a cambio de que twiteen recomendaciones sobre los mismos. A la hora de medir la influencia de un usuario Klout casi se ha convertido en un standar.

En fin, estas cinco herramientas tal vez no sean la panacea para el gran profesional, pero sí serán una gran ayuda, como ya he dicho, a pequeños negocios, bloggers, etc. Y bueno, si te vas a dedicar a esto profesionalmente tampoco está demás que busques una herramienta de pago, que te puede dar mayor funcionalidad.

Obtener la url de una página en PHP

Cuando trabajamos con CMS o con frameworks suele ser habitual tener una función que nos indique la url de la página con la que estás trabajando. Pero claro, no siempre trabajamos con frameworks o CMS, a veces nos vemos metidos en el hard-code puro y duro.

En ese caso ¿cómo conseguimos la url? En fin, tendremos que usar la variable $_SERVER.

La variable $_SERVER es un array que almacena cierta información sobre el servidor. En la variable $_SERVER[‘HTTP_HOST’] se guarda la información sobre el nombre de domino, En $_SERVER[‘SERVER_PORT’] el puerto contra el que realizamos la conexión y en $_SERVER[‘REQUEST_URI’] la URI.

Con lo cual si queremos obtener la url basta con usar dos o tres de estas variables, dependiendo de si queremos o no el puerto. Abajo un ejemplo:

//Con puerto
$url_port="http://".$_SERVER['HTTP_HOST'].":".$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];
//sin puerto
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

Y si vamos a usarlo a menudo lo mejor es utilizarlo dentro de una función que nos devuelva el resultado, para no andar repitiendo código.

Usar codificación utf-8 con MySQLi

Como estos días estoy hablando de MySQLi voy a seguir un poco más con el tema y comentar una peculiaridad: si quieres recuperar datos de una BD donde se hayan guardado en utf-8 y manipularlos e imprimirlos sin problemas de codificación tienes que especificarlo.

Es decir, no basta con que los datos estén en la base codificados como utf-8 y que, además, en la web también esté definido que usaremos esta codificación. No, además debemos indicar a MySQLi que queremos trabajar con utf-8 específicamente. Esto no es para nada complicado porque ya hay una función que te permite elegir la codificación. Un ejemplillo de código simplón os lo aclarará:

$con = new mysqli("server", "user", "password");
if (mysqli_connect_errno($con)) { //comprobamos que no haya fallo en la conexión
	die("Fallo al conenctar a MySQL: " . mysqli_connect_error());
}
				
if (!$con->set_charset("utf8")) {//asignamos la codificación comprobando que no falle
       die("Error cargando el conjunto de caracteres utf8");
}

Como podéis ver, es simple: creamos la conexión y luego simplemente definimos un juego de caracteres. En el ejemplo he usado utf-8, pero vamos, que podéis usar cualquiera de los soportados por MySQL.

Bucles en PHP: do, while, foreach y for

Hoy vamos con una lección de PHP básico: el uso de los distintos bucles existentes en este lenguaje de programación. Esencialmente tenemos cuatro bucles, por lo que no es muy difícil aprendérselos. Lo curioso es que muchas veces la gente hace un mal uso de ellos, os lo digo yo que en los últimos meses casi he trabajado más sobre código de otros (plugins de CMS, terminar trabajos a medias) que creando el mío.

Empezamos por el bucle for. Este debe usarse cuando queremos ejecutar una instrucción o bloque de instrucciones un número conocido de veces. Es decir, si sabes que tienes que repetir una instrucción exactamente, por ejemplo, diez veces entonces usa for. La sintaxis sería for(inicialización; condición de terminación; incremento) pero mejor te la explico en un ejemplillo:

for($i=0; $i<10; $i++){
    echo 'Voy a imprimir esto 10 veces y esta es la '.$i;
}

Es habitual ver a programadores usando el for de forma abusiva e inadecuada.

El siguiente bucle a comentar será el while. En este caso el código de este bucle se ejecuta si una condición dada es cierta y se repite mientras esta sigue siendo cierta. Es decir, si no se da la condición antes de entrar ya no se ejecuta, y se se entra se hará hasta que la condición deje de darse, evaluándola en cada iteración. Debemos usar este bucle cuando no sepamos con exactitud la cantidad de veces que tiene que ejecutarse el bucle, pero sí el valor que queremos alcanzar. La sintaxis es while(condición). Un ejemplo:

<?php
$i=0;
$precio = 50;

while( $precio < 5000)
{
   $precio*2;
   $i++;
}
echo ("Hemos doblado el precio  ".$i." veces hasta superar los 5000");
?>

Parecido, pero no igual, es el bucle do-while. La diferencia es que este se ejecuta siempre al menos una vez, aunque la condición de salida no se cumpla a la entrada. Es decir, en el ejemplo anterior entró en el bucle porque la variable precio era menor de 5000, pero en caso de un do-while habría entrado y ejecutado el código al menos una vez aunque hubiéramos inicializado la variable con un valor superior a 5000. La sintaxis es do{código}while(condición). Veamos un ejemplo simple donde lo diferenciamos del while:

$i=5;
while($i<4)
{
   echo 'Esto no se va a imprimir porque no va a entrar';
}

do
{
    echo 'Aunque la condición es la misma, esto se imprimirá al menos una vez';
}while($i<4);

Finalmente tenemos el foreach, pensado para iterar dentro de arrays. En este bucle lo que hacemos es recorrer todos los elementos de un array. La sintaxis es foreach(array as valor). Es el bucle que debemos utilizar siempre para este propósito. Un ejemplo donde imprimimos los nombres de una serie de frutas:

$frutas = array('melón','limón','fresa','manzana');
echo 'Existencias:'
foreach($frutas as $fruta){
   echo $fruta;
}

Con esto ya estarían repasados los cuatro bucles. Existen, además, dos sentencias que pueden usarse para romper/modificar el flujo natural del bucle: break y continue.

La sentencia break fuerza la salida de un bucle, saltando a la siguiente línea tras el mismo. Su uso natural es para las condicionales switch/case, si bien a veces se ve dentro de bucles. Por cuestiones de elegancia y comprensión del código se recomienda no usarlo. El ejemplo sería:

while( $i < 10)
{
   $i++;
   if( $i == 5 )break;
}

En cuanto a continue se utiliza con un condicional antes y lo que hace es saltarse las instrucciones cuando se cumpla esa condición, pero sin salir del bucle. Por ejemplo imaginemos que queremos recorrer una serie de números pero imprimir sólo los pares:

$i=1;
while($i<10)
{
  if($i % 2 != 0) continue;
  echo $i;
}

El código del ejemplo no haría nada cuando se cumpliera la condición, y cuando no se cumpliera imprimiría el valor.

En fin, con esto ya damos por terminada la lección sobre bucles en PHP. Espero que haya sido de ayuda a alguien. Y recordad, usad cada bucle cuando sea necesario, no de forma indiscriminada.

PHP prepared statement (consulta parametrizada) con MySQLi

Si bien en el pasado ya vimos como hacer una consulta parametrizada en este blog de una forma primitiva (fue un artículo antiguo y a día de hoy no lo haría así ni lo recomiendo, por lo que quedaos con este) o haciendo uso de PDO, toca ahora ver cómo hacerlo con MySQLi.

¿Por qué usar MySQLi y no PDO? En fin, todo depende del caso. PDO nos permite abstraernos del SGBD, con sólo cambiar un parámetro en la creación nuestro código funcionará en Postgres, MySQL, Oracle… MySQLi, en cambio, sólo funciona con MySQL. En principio parece que no hay ningún motivo para usar MySQLi, pero si nos metemos en temas de rendimiento veremos que MySQLi va a penalizar menos el rendimiento de la página que PDO. Es decir, trabajando con MySQL nuestra web requerirá menos recursos usando MySQLi que PDO. Si por lo que sea estás con un proyecto que estás seguro de que no a tener que migrarse de SGBD, si sabes positivamente que se va a usar MySQL durante mucho tiempo, entonces MySQLi es tu opción.

Entonces ¿cómo hacemos una consulta parametrizada con MySQLi? Bueno, veamos como se hace una SELECT que recogería unos datos de la BD vinculados a un id del que disponemos en nuestro PHP?


$mysqli = new mysqli ("servidor", "usuario", "password", "nombre_base_de_datos"); //creamos el objeto MySQLi<code>
</code>

if($mysqli->connect_errno){ //comprobamos que no haya errores de conexión

die( 'La cagaste, esto no va'); //mensaje de error

}

if(!$prepared_st = $mysqli->prepare("SELECT * FROM tabla WHERE id = ?")){//creamos el statment y controlamos los errores

die("La cagaste again"); //mensaje de error

}

&nbsp;

//ahora toca vincular el parámetro id a la consulta

$id=5;

if(!$prepared_st->bind_param("i",$id)){ //vinculamos el parámetro

die("Fallito en la vinculación");

}

if(!$prepared_st->execute()){//ejecutamos la consulta

die("Fallo en la ejecución");

}

$resultado = $prepared_st->get_result(); //recogemos resultado

$prepared_st->close(); //cerramos el prepare

$mysqli->close(); //cerramos la conexión a la base de datos

Bueno, toca una pequeña explicación de bind_param: como veis en este caso recibe dos parámetros. El primer parámetro de bind param siempre es una cadena donde le pasamos una serie de letras que identificarán los tipos de datos que le vamos a proporcionar luego con las variables. Es decir, en el ejemplo le decimos primero que le va a llegar un entero, y luego pasamos la variable de ese entero. Si quisiéramos pasar un entero y una cadena (en se orden) el primer parámetro sería «is» y luego irían la variable entera y la variable cadena. El orden es fundamental.

Finalmente recogemos el resultado (para usar get_result() tienes que tener instalada la extensión mysqlnd, si no tendrás que usar bind_result()), que podemos convertir a array con las funciones fetch_array o fetch_assoc según convenga. En cualquier caso en la web de php.net tenéis más información con la que trabajar. Para el resto de operaciones CRUD la cosa va siendo similar: consulta, vinculamos parámetros, ejecutamos, recogemos resultado si procede.

Bajar y subir el volumen en LXDE (sobre Ubuntu)

Por vicisitudes de la vida, por andar jugando con versiones de desarrollo de Ubuntu, he acabado instalando LXDE en mi equipo. Y de repente me topo con un curioso hecho: no veo por ninguna parte ningún control de volumen.

En fin, soluciones hay varias. La más inmediata, por si las urgencias (tipo, como me ha pasado a mi, os salta a todo volumen un anuncio en medio de la biblioteca) es abrir un terminal y teclear alsamixer. Desde ahí tenéis una consola de control de sonido.

Para una vez está bien, pero es un pelín coñazo andar abriendo y cerrando terminales cada vez que quieres modificar el volumen. Tranquilo y don’t worry.

Haz click derecho sobre la barra de tareas y vete a Añadir/Eliminar elementos del Panel. En la ventana que se te abra te encontrarás una pestaña llamada Applets del Panel. Ahí, en los botones de la derecha pulsas Añadir y, en el menú que sale, seleccionas Control de Volumen. (en la imagen de abajo te señalo todo)

Control de volumen en LXDE
Ventana de agregar Applets

Esto hará que ya te salga un icono en la barra para controlar el volumen. Por defecto el software de sonido es Alsa, aunque podéis cambiarlo.

Crear un botón Pin it para compartir en Pinterest desde tu web

Cierto es que Pinterest ha sacado un complemento para el navegador que agrega un botón Pin-it a tu Firefox o Chrome, pero con todo es recomendable agregar un botón de compartir en Pinterest a tu web. Puede que en España no sea todavía muy popular esta red social (y desconozco las estadísticas para América Latina)  pero para sitios de fotografía y moda se ha vuelto indispensable.

Como en todas las redes sociales, crear el botón es fácil (a ellos les interesa facilitarte el trabajo): Tan sólo tienes que irte al generador de widgets de Pinterest y crearlo desde allí.

Para el botón de Pin It verás que se te ofrecen 3 opciones: One Image, Any Image o Image Hover. La primera opción es para crear el botón sólo para una imagen concreta, de ahí el formulario donde se te pedirá el url de la imagen y que elijas donde ubicar un contador. Debes copiar tanto la notación HTML como el script que te da y ubicarlo donde te sea más cómodo.

Boton Pin it
Pin it!!!

La opcion Any Image te permitirá crear un botón para insertar cualquier imagen de la página en que esté ubiado en Pinterest (similar al que hay implementado a día de hoy en los productos de la web de la marca Mango, por ejemplo). Tienes que pegar un HTML en tu código para que genere el botón y un script.

Finalmente Image Hover hará que sobre cada imagen de la página en que ubiques el script aparezca un botón de compartir en Pinterest al sobrevolarla con el ratón. En este caso no habrá HTML y sólo tendrás que copiar el script.

Y así, de forma sencilla tienes el botón insertado en tu web. Para insertar el botón Pin It en un blog de Blogger podéis seguir esta guía.

Configurar servidor Apache para que nos muestre los errores de nuestro PHP

Un poco de sistemas y un poco de PHP mezclado en esta entrada, porque aunque sean tareas muy básicas no está demás comentarlas.

Lo primero es decir que esto NUNCA debe hacerse en un servidor de producción, JAMÁS. Es decir, esta configuración es una ayuda para el programador, por lo que lo recomendable es hacerlo en el servidor de desarrollo/local. Mostrar los errores en producción supondrá una debilidad en la seguridad de la página, así que recuerda: Sólo para desarrollo.

Apache Foundation

Una vez dicho esto, comentar también que si instaláis Apache en un servidor Linux, o si utilizáis XAMPP en Windows, por defecto vendrá con la detección de errores desconectada. En ese caso si tenéis un fallo se mostrará una página en blanco. Este es el comportamiento adecuado en producción, pero en vuestro equipo de desarrollo lo más cómodo es que os muestre el error y en qué línea se ha detectado.

Para cambiar la configuración tenéis que iros a buscar el archivo de configuración de PHP (php.ini), que en Ubuntu por defecto está en etc/php5/apache2/php.ini y en XAMPP podéis acceder a él desde el panel de control principal. Si no lo encontráis basta con que hagáis una página que imprima la función phpinfo() y ahí veréis la ruta completa al archivo (aparece como Loaded Configuration File).

Una vez abierto el archivo con un editor de texto os vais a buscar la instrucción display_errors, que estará por defecto en Off y la cambiáis por On. Vamos que quedará display_errors = On y, tras esto, guardáis los cambios en el archivo. Tras eso reiniciáis el servicio (en XAMPP desde el panel, en Ubuntu con sudo/etc/init.d/apache2 restart) y ya debería estar cantándoos los errores. En todo caso, ejecutad un script con algún fallo que sepáis dónde está (tipo dejaros fuera una coma en la primera fila o un paréntesis sin abrir) para ver que todo funciona correctamente.

Con esto habréis configurado ya vuestro servidor para que detecte los errores, lo que será una enorme ayuda a la hora de desarrollar páginas PHP.