lunes, 22 de agosto de 2011

Codeigniter 2.0.3

Acaba de salir codeigniter 2.0.3, en est anueva version an habiado pequeños cambios lo principal es que se cambio de Github a Git, y ahora ademas codeigniter Core ya no se más publicamente mantenido ahora Codeigniter Reactor va a ser Codeigniter, la version mantenida por la comunidad va a ser la que se va a usar como Codeigniter. Un ¡hurra! por Codeigniter.


  • En esta version se an echo algunos cambios en el driver de MYSQL para evitar algunos vectores de ataques
  • Se le hicieron unas mejoras visuales al welcome de codeigniter
  • Se agrego "application/x-csv" a mimes.php
  • Agregaron un tercer parametro a la función heading para poder agregar atributos html a las tags html
  • Se agrego is_unique a la libreria de validación de formularios.

sábado, 20 de agosto de 2011

Excelente juego en html5

Despues de la salida del html5, an sido muchas las paginas que an salido aprovechando las bondades del nuevo estandar, este estandar da para todo inclusive para crear juegos, aqui les dejo un ejemplo de un juego echo con html 5 muy bueno, se los recomiendo:

Enlace:

viernes, 19 de agosto de 2011

Manual de codeigniter 2.0.2


Aqui les dejo el manual en español de Codeigniter 2.0.2, esta bajo licencia Creative Commons, y para empezar esta muy buena.

http://www.areadepruebas.com.ar/downloads/CodeIgniter_Guia_Usuario.pdf



Acerca de la Guía de Usuario en Español
La traducción fue realizada en el otoño/invierno austral de 2011, liberándola con la esperanza de serle útil a quien la lea.
Julio de 2011
Fernando “seacat” Velo
seacat.area@gmail.com
Esta Guía se distrubuye con licencia
http://creativecommons.org/licenses/by-sa/3.0/
 

lunes, 15 de agosto de 2011

PHP: Como averiguar si un usuario existe o no en twitter

Después de tratar fallida mente con jquery de averiguar si NO EXISTE un usuario en twitter pues ahora lo hice con php, con php déjenme decirles que si se puede lograr si existe o no un usuario en twitter, ya en http://sosinformatico.blogspot.com/2011/08/como-averiguar-si-un-usuario-existe-o.html puse algunos datos básicos, aquí voy a poner el script con el ejemplo ya echo:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"  "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> 
<html>
<head>
	<script type="text/javascript" src="jquery.min.js"></script>
	<title>Twitter application</title>

</head>
<body>
	<form action='' >
	<input type='text' name='twitter'>
	<input type='submit'>
	</form>
	<?php
	if(isset($_GET['twitter']))
	{
		$var = @fopen("http://api.twitter.com/1/users/show.json?screen_name=".$_GET['twitter'],'rb');
		if($var)
		{
			echo "<p>usuario existe</p>";
			echo "<pre>";
			var_dump(json_decode(stream_get_contents($var)));
			echo "</pre>";
			fclose($var);
		}
		else
		{
			echo "usuario no existe";
		}
	}

	?>
</body>
</html>

Jquery: Como averiguar si un usuario existe o no en twitter

A la hora de integrar, una pagina web con twitter una de las cosas que podemos requerir es averiguar si un usuario existe o no en twitter, en Internet no encontré mucha info, por eso me decidí a mostrar como lo hice.

Lo primero que tenemos que saber es que las llamadas ajax no se permite cruzar dominios, solamente que sean scripts o que tenga callback, porque de esa manera el sistema sabe que estamos llamando a el api del otro dominio.

Para poder averiguar informacion sobre un usuario, se debe usar la siguiente url: http://api.twitter.com/1/users/show.format y aqui conseguiremos la documentación oficial del API https://dev.twitter.com/docs/api/1/get/users/show. Los formatos que permiten son json y xml. permiten varios parámetros el más importante es scree_name, con el cual especificaremos cual es el usuario que estamos buscando. ahora bien el script que averiguar si un usuario existe o no:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"  "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> 
<html>
<head>
	<script type="text/javascript" src="jquery.min.js"></script>
	<title>Twitter application</title>
	<script>
	$(function(){
		$('#twitter').change(function(){
			$.ajax({
				url:'http://api.twitter.com/1/users/show.json?callback=?',
				data: {screen_name:$('#twitter').val()},
				dataType:'json',
				type:'get',
				error: function(){
					$('#tweet').text("usuario no esiste");
				},
				success: function(data){
					$('#tweet').text("USUARIO EXISTE");
				}
			});
		});
	});
	</script>
</head>
<body>
	<input type='text' id='twitter'>
	<div id='tweet'></div>
</body>
</html>
Ademas de decirnos si existe o no el usuario nos da información relevante, como la imagen de perfil, los seguidores, etc.

Ejemplo: http://api.twitter.com/1/users/show.json?callback=jQuery16208318964859936386_1313448625668&screen_name=publisnet&_=1313449005574

Cree un articulo relacionado con este sobre dice como se hace para averiguar si existe o no existe un usuario con php, que podría ser la solución para apoyar al jquery.

NOTA: Este script función a la perfección si un usuario existe, pero si no existe no da ningún tipo de error, lo cual no se puede terminar de saber si el usuario no existe, de verdad no entiendo porque el jquery no responde como es debido, pero cuando consiga la solución la posteo.

martes, 9 de agosto de 2011

Libreria GD, Crear imagenes con transparencia.



En php para crear imágenes con php como ya e comentado como hace con la librería GD en estos dos tutoriales:

http://sosinformatico.blogspot.com/2011/02/tutorial-creando-un-bonito-y-estilizado.html
http://sosinformatico.blogspot.com/2011/02/tutorial-creando-un-bonito-y-estilizado_24.html

Ahora les voy a mostrar como manejar los colores con transparencia y crear imágenes con transparencias.

Cuando creamos una imagen con gd pues por defecto esta tiene color negro y no esta preparada para usar transparencias  para poder usar las transparencias hay que primero activarlas como tal en la imagen para después poderlas usar, las funciones que se necesitan para trabajar con imagenes se usan las siguientes funciones:

imagecolorallocatealpha
Imagecolortransparent
imagealphablending
imagesavealpha

Lo primero que debemos saber es que se necesita tener instalado la version 2 de la libreria db, si ya la tenemos instalada podemos continuar tranquilamente, lo segundo que hay que denotar es que solo podemos trabajar con imágenes gif y png, ya que estas son los unicos dos formatos que soportan canales alfa. La primera función que vamos a analizar es:

Imagecolortransparent

Con esta función definimos un color en una imagen como transparente, para que puede funcionar las imagenes deben haber sido creadas con imagecopymerge() o imagecreatetruecolor(), y lo que hace es especificar un color como transparente en el la imagen, por ejemplo:

<?php
// Crear una imagen de 100x100
$im = imagecreatetruecolor(100, 100);
$rojo = imagecolorallocate($im, 255, 0, 0);
$negro = imagecolorallocate($im, 0, 0, 0);

// Hacer el fondo transparente
imagecolortransparent($im, $negro);

// Dibujar un rectángulo rojo
imagefilledrectangle($im, 4, 4, 50, 25, $rojo);
header('Content-type: image/png');
// Guardar la imagen
imagepng($im);
imagedestroy($im);
exit();
?>

si hacemos esto y lo guardamos con png o gif, pues guarda una imagen con un cuadrado rojo y el fondo transparente, si cambiamos el color transparente de $negro a $rojo veremos que el fondo sale negro y el rectángulo rojo, eso funciona y windows y los navegadores agarran la transparencia de las imágenes png pero photoshop no, photoshop se da cuenta y lo dibuja con el color como es. Por eso recomiendo hacerlo de la siguiente manera:


Imagealphablending y Imagesavealpha


Imagealphablending especifica en que modo serán mezclado los colores a la hora de dibujar una imagen, cuando se establece en true pues al dibujar colores el canal alpha que sea establecido para dibujar sera tomado como la cantidad que va a brillar el color subyacente a través de colores de la imagen, y cuando se establece en false pues se guarda de verdad el canal alpha en la imagen.

A la hora de crear imagenes el uso de estas funciones depende de en que formato lo vamos a guardar si es gif con la función imagealphablending es suficiente pero si vamos a crear una imagen png debemos usar la función imagesavealpha para especificar la bandera de que se debe guardar toda la imagen alpha. 

Imagecolorallocatealpha

Ahora bien para poder dibujar un color transparente o semi trasnparente en una imagen, pues debemos usar la función imagecolorallocatealpha, y que es casi la misma que imagecolorallocate lo unico es que agrega un parametro que es el nivel de alfa que va a tener ese colo que el rango es de 0 a 127 siendo 127 el trasnparente absoluto.


Aqui esta el mismo ejemplo anterior pero acomodado para png:

<?php
// Crear una imagen de 100x100
$im = imagecreatetruecolor(100, 100);
imagealphablending($im, false);
imagesavealpha($im, true);
$rojo = imagecolorallocate($im, 255, 0, 0);
$negro = imagecolorallocatealpha($im, 0, 0, 0,127);

// Dibujar el fondo transparente
imagefilledrectangle($im, 0, 0, 100, 100, $negro);
// Dibujar un rectángulo rojo
imagefilledrectangle($im, 4, 4, 50, 25, $rojo);
header('Content-type: image/png');
// Guardar la imagen

imagepng($im);
imagedestroy($im);
exit();
?>
Resultado final:

Ahora aparte les dejo dos ejemplos de imágenes con transparencia:


1. 3 círculos semitransparentes con fondo transparente:

<?php
$tamaño = 300;
$imagen=imagecreatetruecolor($tamaño, $tamaño);
imagealphablending($imagen, false);
imagesavealpha($imagen, true);
// algo para obtener un fondo transparente
$fondo = imagecolorallocatealpha($imagen, 255, 255, 255,127);
imagefilledrectangle($imagen, 0, 0, $tamaño, $tamaño, $fondo);

$amarillo_x = 100;
$amarillo_y = 75;
$rojo_x     = 120;
$rojo_y     = 165;
$azul_x     = 187;
$azul_y     = 125;
$radio      = 150;
// asignar colores con valores alfa
$amarillo = imagecolorallocatealpha($imagen, 255, 255, 0, 75);
$rojo     = imagecolorallocatealpha($imagen, 255, 0, 0, 75);
$azul     = imagecolorallocatealpha($imagen, 0, 0, 255, 75);
// dibujar 3 círculos solapados
imagefilledellipse($imagen, $amarillo_x, $amarillo_y, $radio, $radio, $amarillo);
imagefilledellipse($imagen, $rojo_x, $rojo_y, $radio, $radio, $rojo);
imagefilledellipse($imagen, $azul_x, $azul_y, $radio, $radio, $azul);
// ¡no olvide imprimir la cabecera correcta!
header('Content-type: image/png');
// y finalmente, imprimir el resultado
imagepng($imagen);
imagedestroy($imagen);
?>
Resultado final:
http://courch7642.webcindario.com/blog/gd3.php


2. Este codigo genera fondos semitransparentes muy útiles a la hora de diseñar una pagina web. y lo mejor es que podemos especificar que color queremos.

<?php
if(isset($_GET['hex']))
{
	$hex=$_GET['hex'];
	header('Content-Transfer-Encoding: binary');
	header('Content-type: image/png');
	//creo imagen
	if(strlen($hex)==6)
	{
		$hcnt=strlen($hex)/3;
		$color['red']=hexdec(substr($hex,0,$hcnt));
		$color['green']=hexdec(substr($hex,$hcnt,$hcnt));
		$color['blue']=hexdec(substr($hex,$hcnt*2));
	}
	else
	{
		$color['red']=0;
		$color['green']=0;
		$color['blue']=0;
	}
	$fondo = imagecreatetruecolor(10,10);
	imagealphablending($fondo, false);
	imagesavealpha($fondo, true);
	$color['img']=imagecolorallocatealpha($fondo, $color['red'], $color['green'], $color['blue'],75);
	imagefilledrectangle($fondo, 0, 0, 10, 10, imagecolorallocatealpha($fondo, 255, 255, 255,0));
	imagefilledrectangle($fondo, 0, 0, 10, 10, $color['img']);

	imagepng($fondo);
	imagedestroy($fondo);
}
?>

Resultado final:
http://courch7642.webcindario.com/blog/gd.php?hex=ff0000

http://courch7642.webcindario.com/blog/gd.php?hex=79B7E7



lunes, 8 de agosto de 2011

PHP: Modificar la codificación de un texto.

Para modificar la codificación de caracteres con php se hace con la funcion iconv, esta funcion nos permite cambiar la codificación de caracteres de un texto puede ser a utf-8 o iso-8859-1, aqui les dejo un ejemplo donde pasamos caracteres de utf-8 a iso-8859-1:

<?php
$text = "Este es el símbolo del euro: '€'.";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>

Si se añade el string //TRANSLIT la codificación de salida, se activa la transliteración. Esto significa que cuando un caracter no puede ser representado en el set de caracteres final, se puede aproximar a uno o varios caracteres parecidos. Si se añade el string //IGNORE, los caracteres que no puedan ser representados en el set de caracteres final son descartados sin generar error. Sino especificamos ninguno de los dos lo más probable es que nos de un error.

Tambien existen las siguientes funciones que sirven para trabajar con cabeceras de mensajes:

iconv_mime_encode
iconv_mime_decode
iconv_mime_decode_headers

Averiguar y modificar la codificación de un archivo. por consola en linux

Para averiguar la codificación de un archivo y el mime-type en linux es bastante sencillo, se puede hacer con el comando file, con "file -i" nos dirá que tipo de archivo es el archivo que se analiza y cual es la codificación de caracteres.

Para modificar la codificación de caracteres de un archivo desde la consola se hace con el comando iconv, para obtener un lista de las codificaciones se puede hacer con iconv -l