Contenido

Ficheros de configuración dependientes del servidor

29 Sep

+ 14

Cuando desarrollamos una aplicación, generalmente trabajamos, inicialmente en local con unos datos para conectar a la base datos, unos ficheros con datos, unas rutas diferentes,… y esto suele provocar ediciones de fichero para que al subirlo a producción (al servidor online) no provoquen un error.

Una solución sencilla que podemos usar es la siguiente:

<?php
    // Nombre del fichero
    $configfile = $_SERVER["SERVER_NAME"].".php";

    // Cargamos el fichero
    if (file_exists($configfile)) require $configfile;
    else die("Fichero ".$configfile." no existe");

?>

De esta forma podemos tener 2 ficheros con los datos necesarios para conectar en ambas bases de datos, con las rutas correctas para cada servidor,… completamente independientes. En mi caso, los ficheros son:

  1. localhost.php
  2. www.anieto2k.com.php

Automáticamente al entrar en la aplicación, comprobaremos $_SERVER["SERVER_NAME"] y cargaremos el fichero que sea oportuno.

Es una tontería, pero yo estuve mucho tiempo modificando los ficheros antes de subirlos y volviendo a modificarlos al volver a descargarlos :D

Evitando la caché con plugins en Wordpress

29 Sep

+ 5

La gente de AyudaWordpress comenta en ¿Utilizo caché o no? que uno de los problemas de usar plugins para cachear en contenido es el propio cacheo de secciones/ficheros que no deberían ser cacheadas/os.

Pues eso tiene fácil solución :D

En nuestros themes, simplemente tendremos que añadir estas líneas, dependiendo de si es un fichero o una función lo que queremos evitar que sea cacheado.

Ficheros

<!--mclude file.php-->
<?php include_once(ABSPATH . 'file.php'); ?>
<!--/mclude-->

La ruta del fichero ha de ser relativa desde la raiz de Wordpress. Evamos un ejemplo que uso en mi theme.

<!--mclude wp-content/themes/anieto2k08/ad.php-->
<?php include_once(ABSPATH . 'wp-content/themes/anieto2k08/ads.php'); ?>
<!--/mclude-->

Funciones

<!--mfunc function_name('parameter', 'another_parameter') -->
<?php function_name('parameter', 'another_parameter') ?>
<!--/mfunc-->

Este código funciona en WP-Cache, 1BlogCacher, WP Super Cache.

Parámetros por defecto en funciones Javascript

28 Sep

+ 7

Una de las propiedades de PHP que más me gustan es la posibilidad de especificar un valor por defecto a los parámetros que pasamos a un función.

function miFuncion(param = "uno", param2="dos"){
...
}
// Ejemplo
miFuncion();

De esta forma definimos un valor para los parámetros que en caso de no ser definidos será cargados inicialmente con dichos valores.

Javascript es un lenguaje que no permite especificar el valor de estos parámetros por defecto, pero el ingenio y la imaginación permite que grandes mentes puedan superar estas dificultades.

Function.prototype.defaults = function()
{
  var _f = this;
  var _a = Array(_f.length-arguments.length).concat(
    Array.prototype.slice.apply(arguments));
  return function()
  {
    return _f.apply(_f, Array.prototype.slice.apply(arguments).concat(
      _a.slice(arguments.length, _a.length)));
  }
}

Extendiendo el elemento Function nos evitamos tener que controlar en el interior de nuestra función los parámetros que recibimos:

function foo(a, b)
{
  a = typeof(a) != 'undefined' ? a : 42;
  b = typeof(b) != 'undefined' ? b : 'default_b';
  ...
}

Al haber extendido la función, ahora disponemos de un sistema con el que podemos definir los valores por defecto de los parámetros.

var foo = function(a, b)
{
  ...
}.defaults(42, 'default_b');

En este ejemplo, vemos como definimos por defecto los valores 42 para el parámetro a y ‘default_b’ para el parámetro b.

Listas Genius de canciones similares con PHP

16 Sep

+ 15

Hace unos días Apple lanzó el Firmware 2.1 para el iPhone/iTouch y la verdad es que las mejoras han sido sustanciales, no solo en cuanto a consumo de batería, velocidad del dispositivo, o mejoras visuales. Sinó que  han añadido un nuevo sistema llamado Genius.

Genius es un algoritmo que dado una canción el te sugiere canciones similares a las que tienes incluidas en el iPhone/iTouch (o tambien mediante iTunes 8 en tu equipo).

A mi personalmente me ha encantado la idea. Y he estado pensando en como deberían tener montado el tinglado para obtener esas similitudes. Evidentemente no creo que tenga los datos relacionados en su poder, deben usar una aplicación externa para sacar esas similitudes. Supongo que Last.fm es la mejor opción, pero no he leido nada y no sé exactamente si lo han sacado de ahi…. YO SI!!:D

He hecho una prueba con la API de Last.fm, que es muy sencilla de usar y he montado un buscador de similitudes de canciones, para ello tendremos que introducir un artísta y una canción, entonces Last.fm nos devuelve las canciones similares que sus millones de usuarios sabiamente han relacionado :D

Echarle un vistazo a phpGenius (a veces me asusto con lo ingenioso que soy con los nombres xDD) y el código (no controlo muchas carácteres especiales, así que acentos o comillas harán que la aplicación cause error).

Hey Social, primer plugin de Wordpress con heySilver

3 Sep

+ 7

Andrea Olivato ha desarrollado hey social, un plugin para Wordpress que usa heySilver y que te permite incorporar a tu Wordpress un interface de teclado similar a QuickSilver en MacOs o a Ubiquity en Firefox 3con el que poder enviar un artículo a las principales redes sociales.

hey_social

Podeis verlo funcionando en la propia página de Andrea y descargarlo directamente desde el directorio de plugins de Wordpress.

CommentFeed: Novedades

29 Ago

+ 9

Bueno, ante todo, quiero dar las gracias a todos los que con sus pruebas me han ayudado a solucionar un par de problemas y a plantearme las cosas de una forma diferente. Esta tarde he podido dedicarle un poco de tiempo y he podido hacer alguna modificación a lo que os mostré ayer, os las enumero una a una.

1) Comentarios

Evidentemente, el no ver los comentarios previos podría suponer problemas para algunos casos, como bien comenta _SxR_ en su comentario.

Para ello he añadido los comentario relacionados al post, necesita un poco de diseño pero ahora lo importante es la funcionalidad.

commenfeed-comentarios

2) Diferencia entre “Expanded View” y “List View”.

Google Reader, permite usar 2 diferentes formas para visualizar los feeds, la “Expanded List” que nos presenta los artículo abiertos y a medida que vamos haciendo scroll hacia abajo,  nos va seleccionando el post que se encuentre en el centro.

Por otro lado, tenemos “List View”, que nos muestra las entradas cerradas, mostrando únicamente el título y al hacer click sobre él, nos abre el artículo dejando los demás cerrados.

Dependiendo del modo usado, la funcionalidad puede ser diferente.

a) Expanded View

Una vez cargado el script, haciendo click sobre el artículo haremos aparecer la opción de “Comenta”.

b) List View

Para este modo, y realmente para cualquiera, he hecho que el testigo que vemos justo arriba, al lado del motor de busqueda, sea un enlace que al hacer click sobre él, nos mostrará la opción de “Comenta”.

Posibles problemas

Al tratarse de un fichero JS, puede verse afectado por algún tipo de caché y no disponer de alguna de las mejoras. Podemos hacer 3 cosas:

1. Armarnos de paciencia y esperar a que se recarge por si solo.

2. Acceder al enlace siguiente y recargar la página para así hacer una recarga nueva del fichero.

http://www.anieto2k.com/demo/commentfeed/commentfeed.js

3. Añadir al final del enlace del Marcador (Math.random()) dejando el marcado así:

javascript:(function(s){s.type='text/javascript';s.src='http://www.anieto2k.com/demo/commentfeed/commentfeed.js?rand='+Math.random(); document.getElementsByTagName('head')[0].appendChild(s)})(document.createElement('script'));

Gracias de nuevo a todos los que me están ayudando con sus ideas, consejos y sugerencias.

WIPmania, geolocalización gratis

29 Ago

+ 9

WIPmania es un aplicación que ofrece una base de datos con la que podremos geolocalizar direcciones IP, de una forma completamente gratuita y sin tener que disponer de una gran base de datos con todas las que van apareciendo.

http://api.wipmania.com/[IPADDR]?[URL]

La API que ofrecen es realmente escueta y simple, así que cualquiera puede usar este sistema sin demasiados dolores de cabeza. El resultado de la misma es un texto plano con las iniciales del pais en el que se encuentra esa IP.

Desde Wordpress podemos tener una pequeña función para disfrutar de este nuevo servicio:

function getUserCountry() {
	$url = 'http://api.wipmania.com/'.$_SERVER ['REMOTE_ADDR'].'?'.get_bloginfo('home');
	if (function_exists('file_get_contents')){
		return file_get_contents($url);
	} else {
		$ch = curl_init();
		$timeout = 5;
		curl_setopt ($ch, CURLOPT_URL, $url);
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
		content = curl_exec($ch);
		curl_close($ch);
		return $content;
	}
}
// USO
echo "Pais del Usuario: ".getCountrUser();
// --> Pais del Usuario: ES.

Su uso es libre y únicamente está limitado 10.000 peticiones por día.

CommentFeed, comenta en aNieto2k desde Google Reader

28 Ago

+ 40

En el Congreso de Webmasters de 2007, Jose de Corral (de Macbookers) me comentó una idea que le daba vueltas por la cabeza y quería saber si era posible

La idea era la de comentar en el blog directamente desde tu lector de feeds.

Pros:

  • El usuario perezoso comenta.
  • Disminución de tiempo empleado por el usuario en leer y comentar sus feeds.
  • Ofrecer una opción más al usuario.
  • Incremento de comentario

Contras:

  • El usuario no ha de entrar al blog a comentar.
  • Posible de reducción de visitas.

Bueno, despues de casí 300 días creo que os puedo presentar la versión alpha y exclusiva para aNieto2k de CommentFeed (me he estrujado el cerebro ¿eh? :D)

¿Por que exclusiva?

Por un motivo muy sencillo, aún está muy verde. La versión que tengo está desarrollada para aNieto2k y he de pensar como montar un plugin para poder usarlo en cualquier blog sin problemas, pero me gustaría ponerme a ello después de haber testado bien el código que interviene.

¿Como funcionaría?

La idea es muy sencilla, pero requiere la intervención de las dos partes involucradas en la lectura de feeds. Por una parte, el blogger, deberá activar un plugin (aún no tengo muy claro si hará falta algo más) para permitir comentar en el blog, si el blogger no lo activa, el usuario no podrá comentar en el blog directamente desde Google Reader.

Por otra parte, el usuario deberá tener un Marcador (o Script del GreaseMonkey, o algún otro método que se me ocurra) que ejecutará cuando quiera comentar en un blog desde Google Reader.

* El funcionamiento aún puede variar, pero la idea general es la explicada anteriormente.

¿Por que Google Reader?

Por el momento es solo Google Reader, principalmente por que es el lector de feeds que utilizo, y me ha ido perfecto para hacer las pruebas, la idea es intentar conseguir exactamente lo mismo desde cualquier otro Lector de Feeds online (los offline no creo que sea factible, pero no lo descarto por el momento).

¿Como puedo comentar en aNieto2k desde Google Reader?

Pues por el momento, solo tenemos un Marcado que deberemos ejecutar cada vez que queramos comentar.

Una vez guardado el Marcador, ya podemos ir a Google Reader y pulsar sobre él.

commentfeed-testigo

En la parte superior de la pantalla veremos, junto al formulario de busqueda de Google Reader, un testigo verde, indicando que podemos hacer uso de CommentFeed.

Una vez activado, veremos en la parte inferior del post, en la barra de acciones una nueva opción más, “Comentar”.

commentfeed-comenta

Al hacer click sobre la nueva acción, nos mostrará un formulario, ubicado en la parte superior-izquierda de la ventana en la que nos encontramos un formulario con el que podemos comentar directamente en la entrada que tenemos abierta.

commentfeed

¿Posibles problemas?

Muchos y muy variados. He probado en Firefox y Safari, ha funcionado perfectamente, pero pueden producirse problemas que aún no he podido detectar.

Uno que se me ocurre ahora, es la URL con la que se guardó el Feed en Google Reader, el correcto es el siguiente:

http://www.anieto2k.com/feed/

Al usar el plugin de FeedBurner, puede ser que la URL del feed no sea la correcta. Lo podemos saber si el enlace de los artículos apunta directamente a aNieto2k o a FeedBurner.

Si ocurre algún problema, me sería muy útil que me lo comentarais para intentar solucionarlo.

¿Que te parece?

pChart, gráficas profesionales con PHP

18 Ago

+ 5

Si necesitas crear gráficas para tus aplicaciones web desde PHP, pChart es lo que estás buscando. pChart nos ayuda a crear gráficas muy profesionales para nuestras aplicaciones, he estado echando un ojo y haciendo alguna prueba y he de decir que la curva de aprendizaje de la librería tiene mucha pendiente y inicialmente es un poco complicada de entender, pero despues crear unas gráficas sencillas es relativamente fácil.[Ejemplos]

query_posts() y el problema de la paginación

13 Ago

+ 12

Hace ya mucho tiempo, hablamos de las maravillas que se podían hacer con query_posts(). Esta función, nos permite personalizar los posts que queremos que aparezcan, para ello disponemos de una buena batería de parámetros con los que podemos personalizar la query que nos obtiene de la base de datos.

Los que hemos lidiado con ella, somos conscientes del problema que tiene dicho método con la paginación ya que esta función es aplicada siempre y repite una y otra vez los resultados de la primera petición.

Para solventar dicho problema debemos recurrir a una condición para que nos informe de en que página nos encontramos, y así condicionar, más aún, nuestra query_posts();

query_posts() sin paginación

<?php if (have_posts()) : ?>
    <?php query_posts("category_name=somecat"); ?>
        <?php while (have_posts()) : the_post(); ?>

Este ejemplo, muestra el método sencillo de usar esta función, mediante query_posts() condicionaremos la petición para que nos devuelva los posts de la categoría cuyo nombre sea “somecat“.

query_posts(); con paginación

<?php if (have_posts()) : ?>
     <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            query_posts("category_name=somecat&paged=$paged"); ?>
        <?php while (have_posts()) : the_post(); ?>

Como podemos ver en negrita, la única modificación es que añadimos la paginación por defecto a nuestra query, comprobando con get_query_var() la existencia de la variable paged, seleccionamos la página en la que se encuentra la query y en caso de no existir, informaremos que nos encontramos en la página 1, mostrando los primeros resultados.

Via