GetDeb anuncia Playbuntu

Como estaba leyendo en Digg, getdeb.net acaba de anunciar Playbuntu, un futuro repositorio de paquetes para ser utilizado en Ubuntu y derivados y que contendría las últimas versiones de muchos juegos para Linux. De esta forma, sería posible instalar los juegos con mucha facilidad, como por ejemplo, utilizando Synaptic, apt-get, el Administrador de Paquetes, etc. Todas las dependencias de los juegos estarían también en el repositorio, por lo que no habrá problemas con esto.

Mientras que el repositorio se crea, puedes obtener juegos nuevos y actualizados de GetDeb en esta dirección.

Obviamente, para montar estos repositorios de paquetes se necesitan servidores, que cuestan dinero. Si tu puedes proveer de uno (o varios, por que no), o puedes ayudar a crear paquetes para el repositorio, contacta a GetDeb. Si no, también puedes realizar una donación mediante PayPal para colaborar. Todo el dinero recaudado será utilizado para comprar servidores y ancho de banda.

Fuente | Blog GetDeb

Detectar el Idioma de los Visitantes

Bueno, hoy vamos a hablar de como detectar los idiomas de los visitantes, esto es posible realizarlo mediante los datos que poseemos en $_SERVER['HTTP_ACCEPT_LANGUAGE']. En esta cabecera, se listan los idiomas que el usuario prefiere para las páginas que recibe, siendo el primero el que más prefiere, y el último el menos preferido. Generalmente vienen en un formato como por ejemplo “es-AR, es, en, en-US, en-GB”, que vendría a ser Español de Argentina, Español, Inglés, Inglés de Estados Unidos e Inglés de Gran Bretaña. Pueden leer más sobre esto aquí: http://www.w3.org/International/articles/language-tags/

Ahora a lo nuestro, ¿Cómo reconocemos los idiomas en PHP?

<?php

function code_it($var)
{
	//Saca los espacios en blanco, toma los dos primeros
	//caracteres y los pasa a minúsculas
	return strtolower(substr(trim($var),0,2));
}

//Si el navegador nos envía los datos
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) &&
	!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
	//Pasamos cada valor de los separados por comas
	//por code_it y los almacenamos en un array
	$langs = array_map('code_it',split(',',
	 $_SERVER['HTTP_ACCEPT_LANGUAGE']));
}else{
	//Si no teníamos los datos damos un array en blanco
	$langs = array();
}

?>

Bueno, con esto obtendremos un array que posea códigos de 2 letras, con el ejemplo anterior, el array contendría los valores es, es, en, en, en. Ahora, ¿cómo hacemos para mostrar al usuario la web de su idioma? Bueno, deberemos pasar por el array con un bucle foreach y fijarnos si tenemos ese idioma disponible, y si lo tenemos, pues redirigirlo con un header(’Location: http://www.nuestrositio.com/idioma’)

Aquí les dejo un ejemplo de como implementé el sistema en la web de Gufw (Firewall Gráfico para Linux):

<?php

function code_it($var)
{
	return strtolower(substr(trim($var),0,2));
}

if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) &&
	!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
	$langs = array_map('code_it',split(',',
	 $_SERVER['HTTP_ACCEPT_LANGUAGE']));

	foreach($langs as $lang)
	{
		if($lang != 'en' && file_exists('./'.$lang.'/'))
		{
			header('Location: http://gufw.tuxfamily.org/'
			 .$lang.'/index.html');
			exit;
		}elseif($lang == 'en')
		{
			header('Location: http://gufw.tuxfamily.org/index.html');
			exit;
		}
	}
}

header('Location: http://gufw.tuxfamily.org/index.html');

?>

Obviamente tendrás que modificarlo para que use tu sitio, tu estructura de web, etc. Eso lo dejo como ejercicio para el lector ;)

Horóscopo en PHP

Estando esta función en PHP-Hispano tan abandonada, y el autor que no aparece ni la actualiza, con todas las sugerencias que hay, la reparé un poco y la optimizé por mi cuenta, porque la idea era realmente original.

La función arreglada puede descargarse de aquí, y es realmente fácil de usar. Aquí les dejo un ejemplo:

<?php

//Incluimos la función
include('horoscopo.php');

//Mostramos el horóscopo de alguien nacido el 25 de Mayo
echo 'Naci el 25/5 y soy de '.horoscopo(25,05);

?>

Descarga: Función Horóscopo

SoundManager 2: API de sonido para JavaScript

¿Alguna vez has necesitado reproducir sonidos o música en tus webs, pero no haz podido, o el resultado que logras no es compatible en todos los navegadores? SoundManager 2 viene a nuestro rescate, ofreciéndonos un API en Javascript para reproducir archivos de audio (actualmente solo MP3). Para reproducir los sonidos hace uso de Flash, y aplicarlo en nuestra web resulta muy sencillo.

Pueden ver ejemplos de su uso en estos links (la mayoría incluye documentación):

Para obtener más información, ver la documentación o descargarlo, ingresen a la página oficial de SoundManager 2

El bucle “para” (o “for”)

Dentro de los bucles disponibles en PHP podemos encontrar al bucle for (en Español, llamado “para”). Este bucle permite iterar sobre un trozo de código una cierta cantidad de veces hasta que una condición deje de cumplirse, ejecutando al iniciar y entre iteraciones otra porción de código.

Un ejemplo de for podría ser:

<?php

//Iniciamos con $i=0
//Mientras que $i sea menor que 6
//Iteramos y sumamos 1 a $i al terminar
for($i=0;$i<6;$i++)
{
	echo $i."\n";
}

?>

Esto nos daría como resultado:

0
1
2
3
4
5

Nótese que cada expresión del bucle no tiene por que estar conformada por una sola sentencia. Puede tener más de una, o se pueden dejar vacías. Por ejemplo, esto estaría correcto también:

<?php

//Iniciamos con $i=0 y $h=0
//Mientras que $i sea menor que 6
//Iteramos y sumamos 1 a $i y a $h al terminar
for($i=0, $h=0;$i<6;$i++, $h++)
{
	echo $i.$h."\n";
}

?>

Dentro del bucle for se pueden utilizar dos construcciones del lenguaje: break, que finaliza el bucle, y continue, que salta a la próxima iteración. Un ejemplo:

<?php

for($i=0;$i<10;$i++)
{
	if($i==4)
	{
		//Saltamos el 4
		continue;
	}elseif($i==8){
		//Terminamos en el 8
		break;
	}

	echo $i."\n";
}

?>

El resultado de esto sería:

0
1
2
3
5
6
7

Si quieren información más técnica, o más ejemplos, les recomiendo que lean la página de for en el Manual Oficial de PHP.

¿Comillas simples o dobles?

Esta es una gran duda entre los programadores de PHP que recién comienzan, asi que voy a tratar de explicarles un poco este tema.

En PHP se pueden usar 2 formas para concatenar strings (cadenas de texto):

<?php

//Forma 1 - Comillas dobles ("")
//Las comillas dobles parsean nuestra cadena en busca de
//posibles variables a interpretar por PHP
$concatenar = "concateno con comillas dobles";
echo "Yo $concatenar"; //$concatenar es parseado por PHP

//Forma 2 - Comillas simples ('')
//Las comillas simples muestran el contenido tal y como
//lo hemos escrito
$concatenar = 'concateno con comillas simples';
echo 'Yo '.$concatenar;

?>

¿Y que consecuencias trae esta diferencia? Las comillas simples son más rápidas de interpretar ya que PHP no busca variables para reemplazar, como sucede en las comillas dobles.

Miremos otro ejemplo:

<?php

$txt="Google";
echo 'Yo busco en $txt'; // muestra: Yo busco en $txt
echo "Yo busco en $txt"; // muestra: Yo busco en Google

?>

Bueno, creo que ya debe de estar entendido :D

Sigamos con otras ventajas/desventajas:

  • Las comillas simples nos ayudan a evitar la necesidad de escapar caracteres
    <?php
    
    //Comillas simples, no se escapa "
    echo '<input name="campo" type="text" />';
    //Comillas dobles, hay que escapar
    echo "<input name=\"campo\" type=\"text\" />";
    
    ?>
    
  • Las comillas dobles nos permiten introducir caracteres especiales, como \r, \n o \t
    <?php
    
    //Hace una tabulación, muestra Que Bonito!
    //e introduce un salto de línea
    echo "\tQue Bonito!\n";
    
    //Comillas simples: Muestra \tQue Bonito!\n
    echo '\tQue Bonito!\n';
    
    ?>
    

Espero les sirva, y cualquier duda que tengan, comenten ;)

Fuente de la Información: PHP-Hispano

WeatherFetcher, el clima en PHP

Tras un tiempo sin escribir, les voy a dejar un poco de código para que prueben :D

Lo que les dejo es una Clase PHP llamada WeatherFetcher, que les permite obtener datos del estado del tiempo de una zona desde Yahoo! Weather, a través de un feed RSS que Yahoo! provee. Para parsear el feed RSS se utiliza otra clase llamada SimplePie, se puede descargar la última versión desde su web, http://www.simplepie.org/. La clase trae documentación, pero nunca está de más dar un ejemplo, ¿no?

<?php

//Cargamos la clase WeatherFetcher

include('weatherfetcher.php');

//Inicializamos la clase, esto carga los datos para

//el código de ciudad que le especifiquemos.

//En este caso cargamos los datos de Rosario, Argentina

$datos = new WeatherFetcher('ARSF0078');

//Mostramos los datos disponibles

//La clase se convierte en un objeto con propiedades

echo '<pre>';

print_r($datos);

echo '</pre>';

//Mostramos la temperatura actual, como ejemplo

echo 'Temperatura Actual: '.$datos->temperatura;

?>

Por si lo quieren probar, este ejemplo está en el README del código.

Esto podría usarse para, por ejemplo, cambiar la cabezera de la web de nuestra ciudad dependiendo del clima, o oscurecer nuestra web los días nublados en nuestra ciudad natal.

Descarga: WeatherFetcher

LiveYeah Group

Bueno, en este último tiempo he estado trabajando en la web del LiveYeah Group, que es básicamente un grupo de personas (webmasters, diseñadores, programadores, bloggers, etc) que ofrecemos servicios gratis a gente con menos experiencia en este mundo.

Por ahora he montado Live Files, que es básicamente un servicio para compartir archivos de hasta 400MB, sin límite de descarga, y he estado trabajando en la web de LiveYeah en si. Incluye mucho pero mucho AJAX, por lo que he tenido que pensar en la compatibilidad con navegadores antiguos y no tan antiguos (véase IE). Por eso, he implementado un sistema de plantillas paralelo al de AJAX, no vaya a ser que Google no nos indexe ;)

Y ya que iba a hacer un sistema de plantillas, hice algo bueno. Le he incluido algo que llamo “PHP Mágico”, que permite a través de tags especiales, utilizar Javascript en la plantilla. Aún no lo publicaré aquí porque es Beta, pero cuando esté más estable, lo podrán ver.

Asi que ya saben, para Blogs, Foros y Hosting, nada mejor que OGameHost y LiveYeah!

Emular un navegador web

Esto se puede realizar facilmente gracias a la grandiosa clase QuestZ de thessoro,que funciona en PHP 4 y 5. Y se preguntarán para que sirve, ¿no?. Bueno, con esto se pueden hacer muchas cosas, como aplicaciones que hasta pueden a su vez interactuar con otras aplicaciones web. Por ejemplo, yo la uso para que un usuario, utilizando mi web, pudiera crear subdominios, y Virtual Hosts en mi Hosting, cosa que solo se puede hacer con un panel via web.

Otros usos puede ser subir archivos, entrar en webs utilizando cookies (¿robadas con JavaScript tal vez?), bajar archivos a tu hosting (Yo lo uso para bajar de RapidShare con 2 descargas a la vez, tal vez ponga el script algún día), etc, etc. Virtualmente hay infinitas posibilidades.

Un ejemplo de como usar esto lo pueden ver en el archivo de ayuda que incluye la clase, tiene ejemplos de todos las funciones, y está muy bien explicado, por lo que no tendrán problemas.

Y bueno, acá termino el post. ¡Los espero pronto!

¡Hola a todos!

¡Hola a mis lectores! Están leyendo el blog personal de Turl, el creador de Turl (no se lo imaginaban, ¿no?). Acá van a encontrar trozos de PHP, notas sobre mis nuevos proyectos de programación, tips de PHP, ayuda, etc, etc. Asi que espero que se enganchen si les gusta el tema: Tenemos RSS :)

Saludos! Espero verlos pronto.