Valencia, 19/10/2012, G.B. Website Suggestions (websitesuggestions.net) es una web que nos ofrece un informe online gratuito de nuestro sitio, considerando prácticamente todos los factores y mostrándonos un informe con los resultados y consejos a seguir para enmendar aquellos errores -de todo tipo- que podamos haber cometido, y siempre cometemos errores, como seguro sabéis.
Yo he probado este servicio online y me ha gustado mucho. Además, he hecho algunos cambios siguiendo las recomendaciones de Website Suggestions y al volver a analizar la web concreta -que ha sido esta misma, knowhow– apenas 3 minutos más tarde, he visto que dichos errores ya no aparecían y que el raking (de 0 a 100) de Website Suggestions había subido algunos puntos.
Hay muchos servicios online disponibles para analizar tu web o blog, pero Website Suggestions me ha parecido bastante sencillo, con resultados muy claros y detallados, sin ‘florituras’, muy al grano y con resultados sólidos y reales. Eso sí, está en inglés, para aquellos que pueda ser un handicap. En ese caso, utilizad algún servicio de traducción online para traducir el informe, y que Dios os pille confesados, je, je, je…
Os recomiendo que echéis un ‘vistacillo’. Y sí, se puede contratar el servicio de pago para disponer de más características, más herramientas que permitan ‘afilar’ y optimizar todavía más vuestra web. Os dejo captura de pantalla de Website Suggestions:
Un post muy rápido, que la semana ha sido muy complicada… y no, esto no es un post patrocinado ni nada por el estilo; simplemente me apetecía comentarlo
Valencia, 18/10/2012, G.B. Por fin tengo el Amazon Kindle, un regalo por mi cumpleaños. Me faltan un par de accesorios que también pedí desde la página oficial de Amazon. Imagino que los recibiré en breve. Lo importante es que el Kindle ya está aquí y en buen uso…
He estado probando mi nuevo Kindle y me ha encantado, de verdad. Como añadido para mí, ya que no era algo que esperaba, deciros que dispone de conexión Wifi y un navegador web propio, suficiente para realizar consultas y, por supuesto, comprar ebooks a Amazon…
Este verano probé en Dénia el Kindle de mi amigo Jaime – un saludo desde aquí, compadre!- y me llamó mucho la atención. Conocía al Kindle desde que salió al mercado, pero nunca lo había visto de cerca.
¿Las características del Kindle? Las tenéis en su web, pero os las adjunto, pudiendo afirmar que son totalmente ciertas:
Kindle: pequeño, ligero y rápido
Más ligero que un libro de bolsillo, sólo pesa 170 gramos
Nuevas fuentes más oscuras y ajustadas manualmente para que la lectura resulte aún más fácil
Se lee como en papel, sin reflejos, incluso a plena luz del sol
Descarga libros en 60 segundos gracias al wifi integrado
Lleva tu biblioteca a todas partes: puede contener hasta 1.400 libros
Amplio catálogo de libros. 8.000 títulos por menos de 5,99€ Fuente: Amazon Kindle
Ahora indagaré sobre recursos para el Kindle, tales como páginas de descarga de ebooks gratuitas. Una de ellas que quiero mencionar ahora mismo es la del Proyecto Gutemberg, de la cual ya me he descargado ya varios libros (y empezado a leer), pudiendo elegir entre varios formatos disponibles. Es un portal realmente magnífico, una iniciativa cultural y social impresionante. Hay muchas más páginas de consulta y descarga de libros electrónicos que ya iré probando y comentando, poco a poco.
En cuanto a los formatos de ebooks más adecuados para el Kindle, además del suyo nativo, tenía mis dudas, pero ya las he resuelto gracias a este foro: Kindle foro, sitio no oficial. En principio me quedo con el formato .mobi, pero probaré todos. El siguiente paso será buscar programas para convertir archivos .pdf, .doc, .odt, etc., a formatos compatibles. Hay muchos recursos en la Red, pero quiero probar unos cuántos para quedarme con el que más me guste. Poco a poco…
Comentaros que la mayor parte de los ebooks disponibles de forma gratuita y completamente legal en el proyecto Gutemberg están en inglés, pero también hay alguno que otro en castellano. Esta es la dirección de la Wiki del proyecto Gutemberg en castellano: www.gutenberg.org/wiki/ES_Portada.
Bien, seguiré con estos temas que realmente me interesan mucho. Abriré el foro de ebooks en INDAGA.net, si no lo he hecho ya.
Valencia, 13/10/2012, G.B. Antes que nada, una definición del Splogging y los Splogs. El splogging es una práctica ilícita que se basa en la obtención de contenido de un blog a través de su feed de noticias. El Splog o falso blog ‘absorbe’ a través de sistemas automáticos, como por ejemplo plugins, el contenido publicado en un blog y lo publica en el suyo, sin atribuir la autoría al blog original. El término Splog viene de la unión de los términos ingleses Spam y Blog (ver definición de la wikipedia. http://en.wikipedia.org/wiki/Spam_blog)
Con la práctica ilícita del splogging, los sploggers consiguen publicar de forma automatizada una gran cantidad de contenidos ajenos, haciéndolos propios, consiguiendo así aumentar el tráfico de su web y obtener más beneficios en sistemas de publicidad online, tales como Google Adsense, por nombrar uno de los más conocidos y utilizadas hoy por hoy, al disponer de una gran cantidad de contenido -aunque ajeno- en el que mostrar los anuncios para que los usuarios hagan ‘clic’ en ellos o simplemente beneficiarse del número de impresiones de los mismos. Su objetivo es ‘cuanto más contenido, mejor’, sin importarles demasiado lo que se publica, siempre y cuando venga de alguna web o blog que publique de forma regular. Además, en el caso de WordPress, cambian la fecha de publicación para que la suya sea anterior al post o artículo original.
Lo malo es que, al parecer, muchos buscadores parecen ‘premiar’ de forma inconsciente (al menos eso creo y espero) a los splogs, posicionándolos en los resultados de búsqueda muchas veces por delante del contenido original, de las webs o blogs que han publicado ese contenido que ellos ‘hacen suyo’ con prácticas fraudulentas. Así son las cosas, por ahora…
¿Y cómo luchar cotra el splog y su práctica, el splogging? Por desgracia, no hay soluciones 100 por 100 efectivas, a menos que denuncies al Splog o falso blog. Lo que sí puedes hacer es minimizar sus efectos y ‘ponerlos en evidencia’. Os dejo algunas ideas y prácticas que yo he puesto en marcha, al sufrir los efectos de los sploggers en uno de mis blogs, NCV (noticiascomunitat.es). Aquí van.
– Créate una licencia de Creative Commons y muéstrala en tu web o blog. así, además de demostrar la autoría, podrás defender tus derechos en el caso de que quieras dar un paso más.
– Protege tu contenido insertando una firma que lo identifique, así como imágenes. Hay muchas formas de hacerlo, tanto manuales como automáticas. Yo he utilizado una mezcla de ambas.
– Si tienes una cuenta de Feedburner, protege tu feed mostrando un enlace a la licencia e insertando la autoría del mismo.
– Protege tu archivo .htaccess (en el caso de que tu CMS esté hajo la tecnología AMP, servidor Apache, MySQL y PHP, como es el caso de WordPress). Puedes incluso banear IPs, aunque es una solución algo drástica.
– Modifica tu archivo robots.txt para alejar ‘agentes’ indeseados
– Instala plugins para evitar el robo de contenido. aunque no sean la solución perfecta, pondrás un poco más difícil el ‘robo’ de contenidos
– Contacta con el webmaster del’Splog’ y dile que deje de hacer lo que está haciendo. esto último sospecho que no funcionará…
– En última instancia, y si ya estás demasiado harto, denuncia al Splog, aunque no es algo sencillo…
También deciros que sí existe una forma radical de evitar el Splogging, anque no os la recomiendo. Simplemente debes deshabilitar el feed de tu sitio, con la consecuente pérdida de flexibilidad y alcance de tu web. Yo lo he probado y funciona, pero he decidido no utilizar esa opción al ser contraria de la filosofía de un blog.
Valencia, 03/10/2012, G.B. Siguiendo con las mejoras de Blogger, CMS que también utilizo y me gusta bastante –aunque no tanto como WordPress…-, se me olvidó comentar que en la nueva interfaz de Blogger hay un par de nuevas características muy interesantes en cuanto a la mejora del SEO y la indexación se refiere.
Para acceder a las mismas, debemos loguearnos en nuestro Escritorio de Blogger, pulsar en Configuración y luego en Preferencias de búsqueda (Escritorio -> Configuración -> Preferencias de búsqueda). Encontraremos tres nuevos apartados con sus respectivos subapartados: 1) Etiquetas meta
Descripción
2) Errores y redireccionamientos
Mensaje de página no encontrada personalizado
Redireccionamiento personalizado
3) Rastreadores e indexación
Archivo robots.txt personalizado
Etiquetas de encabezado de robots personalizadas
Os dejo captura de pantalla (ejemplo de eventalia.blogspot):
Con estas mejoras Blogger se acerca más a la flexibilidad y versatibilidad de WordPress, aunque todavía le quede mucho camino… De todas formas, son buenas noticias.
Valencia, 02/10/2012 El lenguaje PHP dispone también de un tipo instrucciones llamadas iterativas o de repetición ‘heredadas’ del lenguaje C. Son los conocidos ‘bucles‘, instrucciones que realizan una determinada acción un número determinado de veces que se especifica a través de un contador. Es como si diéramos cuerda a una instrucción para que se realice hasta que finalice el contador que hemos especificado, el ‘paso’, por llamarlo de algún modo. Se llaman bucles porque se repiten hasta que la condición deja de cumplirse, o lo que es lo mismo, se evalúa como falsa (FALSE).
Las instrucciones iterativas o bucles en PHP son las siguientes:
for
foreach
while
do… while
Veamos la primera de ellas, las instrucciones o bucles for. Su sintaxis es la siguiente:
for ([Inicialización de la variable] ; [Condición] ; [Incremento o decremento de la variable])
{
[Instrucciones];
}
O como lo explica el portal oficial PHP.net:
for (expr1; expr2; expr3) sentencia
Veamos algunos ejemplos prácticos para entenderlo mejor:
<?php
/* ejemplo sencillo de bucle for en PHP */
for ($n = 1; $n <= 10; $n++)
{
echo "$n <br />";
//añadimos un salto de línea en HTML (<br />)
}
?>
Lo muestro también con otro formato de visualización:
<?php /* ejemplo sencillo de bucle for en PHP */ for ($n = 1; $n <= 10; $n++) { echo «$n <br />»; //añadimos un salto de línea en HTML (<br />) } ?> Ejecutar ejemplo
EXPLICACIÓN del ejemplo: En primer lugar hemos inicializado la variable $n y le hemos dado el valor 1.Esto sólo se realizará la primera vez. En segundo lugar, hemos establecido la condición, que la variable $n sea menor de 15 para que se realice la instrucción o sentencia que veremos al final . En tercer lugar, hemos establecido el ‘paso’ -incremento o decremento- de la variable cada vez que ‘dé una vuelta’, es decir, cada vez que acabe y vuelva a la condición para evaluarla ($n <= 10;). En nuestro ejemplo, ha sido con un incremento de +1 a través del operador de incremento ($n++). Por último, y entre brackets, hemos especificado cuál es la instrucción que debe realizar e bucle for (echo $n;) mientras se cumpla la condición -sea verdadera o TRUE) ($n <= 10;) y con qué incremento ($n++), $n+1 en nuestro caso. La instrucción for finaliza en cuanto la condición se evalúa como falsa (FALSE): en nuestro primer ejemplo, en cuanto la variable $n alcanza el valor de 10.
NOTA: Os debo unos cuantos ejemplos más. En breve, prometido…
«More Spring Cleaning» es como titula Google en su blog oficial al cierre de productos
Valencia, 30/09/2012, G.B. Acabo de leer en el blogoficial de Google que este otoño, ‘la pequeña’ empresa de Mountain View va a cerrar unos cuantos productos y servicios más, aunque no dejará a los usuarios en ‘el aire’, sino que los fusionará con otros ya existentes y que han tenido mejor respuesta y beneficios, supongo. Google ha titulado el artículo o post que anuncia estos ‘recortes’ como «More Spring Cleaning» (no, no voy a comentar…).
Los productos y servicios que «sufren este recorte«, es decir, que desaparecerán a partir de este otoño, son los siguientes:
AdSense for Feeds
Classic Plus
Google Storage, que pasa a Picasa y Google Drive
Spreadsheet Gadgets
Google News Badges
Insights for Search, que pasa al rediseñado Google Trends
[Control de flujo o estructuras de control en PHP VI] Operador Ternario
Valencia, 28/09/2012, G.B. Como os comenté en el anterior post, para finalizar con las instrucciones condicionales en PHP, vamos a conocer ahora el denominado operador ternario. En realidad, no es una nueva clase de instrucción condicinal, sino una forma distinta de representar las instrucciones condicionales if/else, pero utilizando menos líneas de código, por decirlo de algún modo.
Toma el nombre de ternario porque utiliza 3 argumentos; tiene tres partes definidas: (PARTE1) ? (PARTE2) : (PARTE3);
La primera parte es la condición o expresión que incluye la variable
La segunda el resultado de esa condición o expresión si el valor de la variable es verdadero (TRUE), cuando la condición se cumple
La tercera parte es el valor o expresión si el resultado es falso (FALSE), cuando no se cumple la condición
Sintaxis del operador ternario:
$NombreVariable = (condición) ? sentencia1-cuando-se-cumple : sentencia2-cuando-no-se-cumple; Si utilizamos alguna instrucción o expresión como por ejemplo echo, la sintaxis sería: echo ($NombreVariable = (condición)) ? sentencia1-cuando-se-cumple : sentencia2-cuando-no-se-cumple;
Otra forma de representarlo sería como lo hace la Wikipedia (añadiendo el punto y coma final de la expresión):
expresión boleana ? valor si cierto : valor si falso; ó variable = condición ? valor si es cierto : valor si es falso;
Como podemos observar se constituye de(PARTE1) ? (PARTE2) : (PARTE3); que significa (CONDICIÓN) ? (RESULTADO1) : (RESULTADO2); También podemos representarlo así: INSTRUCCIÓN (CONDICIÓN) ? (RESULTADO-SI-SE-CUMPLE) : (RESULTADO-SI-NO-SE-CUMPLE);
Vamos a verlo con un ejemplo. Primero escribiremos la instrucción condicional utilizando la estructura if/else que ya conocemos. En segundo lugar, la reescribiremos utilizando la sintaxis del operador ternario. El ejemplo, muy sencillo, nos mostrará el mensaje «Son las 7 y cuarto de la mañana, hora de levantarse!!«, si son las 7:15 horas de la mañana (TRUE) y el mensaje «Estoy aprendiendo PHP, poco a poco.» , si lo ejecutamos a cualquier otra hora del día, es decir, si la condición es falsa ya que el valor de la variable es distinto (FALSE):
Primero, la instrucción if/else que ya conocemos:
<?php $hora = date ('H:i');
// formato de hora y minutos en PHP
if ($hora == ('7:15'))
{
echo 'Son las 7 y cuarto de la mañana, hora de levantarse!!';
}
else
{
echo
'Estoy aprendiendo PHP, poco a poco!';
}
?>
<?php
$hora = date ('H:i');
echo ($hora == ('7:15')) ? 'Son las 7 y cuarto de la mañana, hora de levantarse!!' : 'Estoy aprendiendo PHP, poco a poco!';
?>
El resultado será exactamente el mismo. Tened en cuenta que echo no necesita paréntesis, ya que no es una función, sino una sentencia del lenguaje.
Con esto finalizamos las instrucciones condicionales o de control de flujo en PHP. Lo siguiente que veremos serán las instrucciones de iteracción o bucles. De todas formas, las seguiremos utilizando en los próximos ejemplos.
[Control de flujo o estructuras de control en PHP V] Instrucciones Switch
Valencia, 27/09/2012, G.B. Tras haber conocido ya las estructuras condicionales en PHP con if, if/else y if/elseif/else, pasamos ya a la última: la estructura switch. Ya sabemos que las sentencias o estructuras condicionales se utilizan para realizar distintas acciones basadas en diferentes condiciones. Switch actúa de la misma manera que lo hace la estructura if/elseif/else, pero permite simplificar el código cuando las condiciones o posibilidades son muchas.
La expresión o variable que va después de la palabra reservada switch se evalúa utilizando la palabra case (caso en inglés) seguida de dos puntos. Si hay un equivalente, una coincidencia, se ejecutará la sentencia tras ‘case‘. En caso contrario, se sale de la instrucción utilizando la palabra reservada break y se pasa al siguiente ‘caso’ o case, en donde se evaluará la siguiente sentencia, y así hasta llegar a un case en el que se cumpla. En el caso de que no se cumple ninguna de las equivalencias presentadas tras cada uno de los ‘case’, es decir, en el caso de que no haya ninguna equivalencia, se puede utilizar una instrucción por defecto representada por la palabra default, también seguida de dos puntos. La estructura condicional switch está ‘encerrada’ entre brackets { }.
Pero mejor veamos una representación de la sintaxis de switch:
switch ($nombreVariable) { case valor1: (sentencia1); break; // salida que se utiliza opcionalmente case valor2: (sentencia2); break; case valor3: (sentencia3); break; case valor4: (sentencia4); break; case valor5: (sentencia5); break; defaulf: (sentencia o instrucción predeterminada); // esta se ejecutará en caso de que ninguna de las equivalencias anteriores se cumpla }
Para entenderlo mejor, vamos a adaptar el ejemplo del post anterior a la estructura switch, aumentando con esa instrucción las posibilidades:
<?php
$hora = date ('H');
switch ($hora) {
case 7:
echo 'Es hora de levantarse, campeón';
break; // salida que se utiliza opcionalmente
case 8:
echo '¿Estás despierto ya?';
break;
case 10:
echo '¿Un cafetito?';
break;
case 13:
echo 'Falta menos para comer. ¿Tienes hambre ya?';
break;
case 14:
echo 'A comer!';
break;
case 16:
echo '¿Te apetece otro café?';
break;
case 19:
echo 'Descansa un poco: apaga el ordenador.';
break;
case 20:
echo 'Queda menos para cenar. ¿Tienes hambre?';
break;
case 23:
echo 'El día ya casi ha pasado. Debes estar cansado';
break;
case 24:
echo '¿Por qué no te vas a dormir?';
break;
default:
echo '<h2>Bienvenido a Aprendiendo PHP</h2>'; /* Esta es la frase por defecto que aparecerá en formato Título 2 en el caso de que no se cumpla ninguna de las equivalencias presentadas */
break;
}
?>
Ya sólo nos queda ver -respecto a las estructuras condicionales en PHP- otro tipo de operador condicional que equivale a la estructura if/else denominado operador ternario. En el próximo post…
Abril 2016: Post recuperado de Aprendiendo PHP (web ya inactiva)
[Control de flujo o estructuras de control en PHP IV] Instrucciones IF/Elseif/Else
Valencia, 24/09/2012, G.B. Tras las estructuras condicionales o de control de flujoif y if… else, ahora toca el turno a la siguiente: if… elseif… else. Con elseif añadimos más posibilidades, más alternativas.
Elseif (también escrito else if, aunque menos frecuentemente) es una combinación de if y else y una ampliación de if. Si la condición contenida en el if es falsa (FALSE, que no se cumple), entonces el control de flujo saltará al primer elseif. Si éste tampoco se cumple, pasaría al siguiente, hasta llegar a un elseif en que la condición sí se cumpliera, que fuera verdadera (TRUE). En el caso de que no se cumpliera ninguno de los elseif, pasaríamos por último al else para ejecutar las sentencias contenidas en el mismo.
Como observamos, las estructuras elseif pueden anidarse, es decir, ir abriendo distintas posibilidades si no se cumplen las anteriores. La sintaxis es la siguiente:
if (condición1) { sentencia1; // Si esto no se cumple, saltamos al primer elseif } elseif (condición2) { sentencia2; }// Tras esta línea pueden ir anidados más elseif else { sentencia3; // Si ninguno de los elseif se han cumplido, se ejecutará estas sentencias }
En caso de que la primera condición, la del if, no se cumpla, pasamos al primer elseif. Si este tampoco se cumple, pasaríamos al siguiente, hasta llegar al else, en caso de que no se cumpliera ninguno de ellos. Veamos un pequeño ejemplo:
<?php $numero1 = '2'; $numero2 = '3'; $numero3 = '4'; $numero4 = '2'; if ($numero1 == $numero2) { print "El $numero1 es igual al $numero2."; } elseif ($numero2 == $numero3) { print "El $numero2 es igual al $numero3"; } elseif ($nunero3 == $nunero4) { print "El $numero3 es igual al $numero3"; } else { print "El $numero1 es igual al $numero4. ¿Lógico, no?"; } ?>
Ejecutar ejemplo
Otro ejemplo tonto, lo sé, pero espero que explicativo. También podemos ampliar el ejemplo que hemos utilizado en los anteriores posts sobre las estructuras condicionales, especificando franjas horarias más pequeñas:
<?php $hora = date (H); if ($hora == ('7') or $hora < ('8')){ echo 'Es hora de levantarse, campeón'; } elseif ($hora == ('14')){ echo '¿Qué vas a comer hoy?'; } elseif ($hora <= ('16')){ echo '¿Demasiado tarde para comer, ¿no crees?'; } elseif ($hora <= ('20')){ echo 'No, todavía no es hora de cenar'; } elseif ($hora == ('21') or $hora <= ('22')){ echo 'Ve pensando en lo que vas a cenar, si tienes hambre, claro'; elseif ($hora == ('23')){ echo 'Demasiado tarde para cenar, ¿no crees?'; / } elseif ($hora == ('1') or $hora <= ('2')){ echo 'Si no te has ido a dormir todavía, deberías hacerlo!'; } else echo 'Bienvenido'; ?>
Ejecutar ejemplo 2
Por último, comentaros que puede ser realmente engorroso tener que contemplar todas las posibilidades y así estar ‘obligados’ a utilizar un montón de elseif anidados. Este último ejemplo se puede hacer de una forma mucho mejor y más cómoda (sin tener en cuenta los posibles fallos de cálculo entre las franjas horarias que yo haya podido cometer al hacerlo…). Para ello, disponemos de la estructura switch, la cual es más sencilla de escribir (ahorramos líneas de código y conseguimos el mismo resultado que con if/elseif/else) y que veremos en el siguiente post. Hasta pronto!
Abril 2016: Post recuperado de Aprendiendo PHP (web ya inactiva)
[Control de flujo o estructuras de control en PHP III] Instrucciones IF/Else
Valencia, 23/09/2012, G.B. Como hemos visto en el anterior post sobre instrucciones If sencillas, esta estructura condicional puede que no nos sea suficiente para lograr nuestro objetivo. Así, en el ejemplo anterior, se muestra un mensaje si abrimos la página después de las 07:00 a.m. (después de las siete de la mañana). ¿Y si queremos ajustar más el margen y mostrar mensajes distintos en franjas horarias distintas, más ‘pequeñas’? Pues que entonces tendremos que utilizar alguna de las tres construcciones o estructuras condicionales siguientes: if/else; if/elseif/else; switch. Vamos a ver ahora las estructuras condicionales if…else en PHP.
El bloque if/else es una decisión en dos direcciones. Si la expresión o condición if es verdadera (TRUE), se ejecutará el bloque se sentencias o expresiones. Si la expresión o condición es falsa (FALSE), se ejecutará en su lugar las sentencias o expresiones del bloque else. La sintaxis es la siguiente:
if (expresión) { sentencias1; } else { sentencias2; }
Recordad que cada bloque debe ir siempre encerrado entre brackets, apertura y cierre { }. Veámoslo con este sencillo (y naive) ejemplo:
<?php $hora = date (“H”); if ($hora == (‘7’)) { echo ‘<h2>Es hora de levantarse, campeón</h2>’; // Si son las 7 de la mañana, se mostrará este mensaje en Título2 (H2) } else { echo ‘<b>Aún no son las 7, aprovecha!</b>’; // Si todavía no son las 7 de la mañana, se mostrará este otro mensaje en negrita } ?>
Bien, pero todavía podemos afinar mucho más para que este código sea útil ¿verdad? Lo veremos con las sentencias if/elseif/else y switch. Cuando hallamos visto todas las estructuras condicionales, utilizaremos ejemplos más interesantes, más útiles. Hasta muy pronto!