Facebook nos presenta HipHop for PHP

Ayer hablabamos que el compilador de PHP era un JIT.

Hoy podemos obtener más información gracias a vivaPHP!

Según el ingeniero Haiping Zhao, HipHop for PHP les permitió reducir un 50% el uso de sus CPU lo cual implica un mejor rendimiento en la aplicación Facebook.

Hip Hop for PHP lleva ya 2 años de desarollo, pero reconocen que aún no está finalizado y que la actual versión puede considerarse una beta.
Se ha liberado bajo la misma licencia de PHP lo que permitirá a la comunidad acabar el desarollo de la aplicación dando su punto de vista y sus ideas.

Zhao nos explica que es realmente HipHop:

“HipHop no es técnicamente un compilador. En su lugar es un transformador de código. HipHop transforma tu código fuente PHP en un altamente optimizado código C++ y luego usa g++ (GNU C++) para compilarlo. HipHop ejecuta el código fuente en una manera semánticamente equivalente y sacrifica algunas características raramente usadas -como eval()- a cambio de una performance mejorada. HipHop incluye el transformador de código, una reimplementación del runtime de PHP y una re-escritura de varias extensiones de PHP comunes para aprovechar estas optimizaciones”.

Fuente: vivaPHP!

Sistema de comentarios simple con captcha

Bueno he avierto otro post porque en el otro hay muchos comentarios de todo tipo, no se si aún lo necesias pero como hace poco me pidieron lo mismo te dejo el trabajo:

El sistema de comentarios estaba pensado para funcionar igual en diferentes secciones de la web... compartiendo tablas de la DB y solo modificando un campo entre las diferentes secciones.

SQL: 


CREATE TABLE IF NOT EXISTS `web_michelmin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`autor` varchar(50) NOT NULL,
`hora` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`comentario` text NOT NULL,
`seccion` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



<?php

#~~ Connect.php
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'z_test'; //nombre de la bd
$tabla = 'web_michelmin'; //nombre de la tabla a usar

$con = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($db,$con) or die(mysql_error());

?> 



Parte que se agrega a la página:


<?php 
session_start
();
#~~ Comentarios a final de página; 

include_once('conect.php');

$seccion = 'index'; //Nombre que le quieras dar a ala seccion 

$comentarios = mysql_query("SELECT comentario, autor FROM ".$tabla." WHERE seccion = '".$seccion."' ", $con) or die(mysql_error());

echo 
'<table border="1">';

 

    while (
$coments = mysql_fetch_array($comentarios)) { 

 

       echo 
'<tr><td colspan="2"><sub><strong>'.$coments['autor'] .'</strong></sub></td></tr> 

               <tr><td colspan="2">'
. nl2br(htmlentities($coments['comentario'])) . '</td></tr>'; 

    } 

 

echo 
'<tr><td colspan="2"></td> 

      </tr><tr><td colspan="2">Escribe tu comentario: </td></tr> 

      <tr><td colspan="2"> 

          <form method="post" action="update.php"> 

            Autor: <input type="text" name="autor" size="31" maxlength="50" value="" /> 

        </td>
    </tr>
    <tr> 

        <td colspan="2"> 

            Comentario: <br /> 

            <textarea name="coment" cols="31"></textarea>  

            <input name="seccion" type="hidden" value="'
.$seccion.'" />
            
        </td>
    <tr>
        <td>
            Captcha:
        </td>
        <td>
            <img src="captcha.php" /> <br />
            <input type="text" name="captcha" size="10" maxlength="7" value="" />
            </div>
            <br /> 

            

        </td>
    </tr>

        <td colspan="2" align="center">
            <input name="Enviar" type="submit" /> 
        </td>
    </tr> 

        </form> 

    </table>'
;
    
    if (
$_GET['err'])
        echo 
"<b>Ha introducido un captcha incorrecto</b>";

?> 



se modifica la variable $seccion dandole el nombre de la página donde se incrustara el código sin el .php de esta forma separamos las diferentes páginas que tendrán un comentario y a la vez redirijimos en el update.php

update.php:
por errores con los headers no hago un include a conect.php...

<?php
session_start
();


$coment = $_POST['coment'];
$seccion = $_POST['seccion'];
$autor = $_POST['autor'];

if (
$_POST['captcha'] && $_POST['captcha'] == $_SESSION['rand'])
{


$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'z_test';
$tabla = 'web_michelmin';
$con = mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($db,$con) or die(mysql_error());


$update = mysql_query("INSERT INTO " . $tabla . " (id, autor, hora, comentario, seccion) VALUES (NULL, '" . $autor . "', CURRENT_TIMESTAMP, '" . $coment . "', '" . $seccion . "') ", $con) or die (mysql_error());

header("location: ". $seccion .".php");

} else
    
header("location: ".$seccion .".php?err=badcaptcha");
?> 


captcha.php (esta parte es de shell root si no me equivoco)

<?php

# Em3trix

session_start();

$x = ImageCreateFrompng("captcha.PNG");

$numeros = rand(0000,9999);
$letras = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

$final = $letras{rand(1,50)};
$final .= $letras{rand(1,50)};
$final .= $letras{rand(1,50)};

$rand = $numeros.$final;

$rand2 = $rand[3].$rand[5].$rand[1].$rand[6].$rand[2].$rand[7].$rand[3];

$color = imagecolorallocate($x,"250","0","0");
$string = imagestring($x,5,"13","7","$rand2",$color);

$color1 = imagecolorallocate($x,"250","250","0");
$color2 = imagecolorallocate($x,"0","250","0");
$color3 = imagecolorallocate($x,"0","0","250");

$linea = imageline($x,"0","20","100","10",$color3);
$linea = imageline($x,"0","10","20","100",$color1);
$linea = imageline($x,"50","0","100","100",$color2);

ImageGIF($x);

$_SESSION['rand'] = $rand2;

?> 


Estilos css = 0 soy malo con eso y al final cada uno tiene su estilo xD así que espero os sirva.

Diferentes formas de usar condicionales if

Hoy vamos a hablar un poco de las diferentes formas de escribir un If().
Resulta, quizá, un tanto extraño hablar de cómo escribir un condicional pero a lo largo de mi etapa como programador en PHP he visto tantas formas que creo es bueno tener una recopilación de, sino todas, la mayoría.

Como ya sabemos If es una condicional que sirve para guiar el flujo de un programa según ciertos parámetros. La estructura más común es:

<?php
if ($condicion) {
   
$acciones1;
}else if (
$otra_condicion) {
   
$acciones2;
} else {
   
$acciones3;
}
?>


Si no se cumple la condición se nos envía al else if y si tampoco se cumple nos redirige al else y si se cumple se ejecutan las primeras.
Cuando contamos con un if para uan sola acción podemos hacerlo de la siguiente forma


<?php if ($condicion)
   
$accion1; $accion2; ?>


En este caso la acción uno se ejecutará solo en caso de que se cumpla la condición, sin embargo la condición dos se ejecuta siempre.
También podemos usar else if y else


<?php
if ($condicion)
   
$accion1;
else if (
$otra)
   
$accion2;
else
   
$accion3; ?>


Esta quizá es la forma más difícil de aprender (así que ya veis lo complicado del tema..) y se utiliza mucho en SMF por lo que si suelen trabajar con su código es bueno conocerla.

<?php
$numero 
= 3; $variable = ($color == 3 ? 'Es 3' : 'No es 3'); ?>


Como veis es parecido a colocar un if, pero todo mientras damos el valor a la variable, para que quede más claro esta es la equivalencia con un if normal.

<?php
if  ($color == 3)
   
$varoabñe = 'Es 3';
else
   
$variable = 'No es 3'; ?>

El compilador de Facebook es un JIT

Hasta el momento PHP es un lenguaje interpretado durante el runtime.
Eso quiere decir que al hacer una petición a una página web el servidor envía el código PHP al intérprete y este devuelve el resultado en HTML.

Este método de trabajo hace de PHP un lenguaje muy versátil, seguro y menos tedioso ya que no hay que estar compilando el código a cada cambio como sucede en C y C++.

Hay una tercera forma de compilación que son los llamados JIT (Just-In-Time) como ejemplos podemos tener Java o .NET.

Eso (JIT) es lo que facebook ha desarrollado y especulado durante semanas, según dicen ha mejorado el rendimiento de sus aplicaciones un 80% por lo que puede ser un gran avance para la comunidad PHP y posiblemente veremos mejoras a lo largo de este año con respecto al compilador.

Si lo que buscabais es un nombre para el compilador de Facebook se rumoreaba que se llamaría HPHP o Hiper-PHP, pero en realidad aún no conozco el nombre exacto solo estos detalles.

Fuente el-hacker.net

Entradas recomendadas: Enero

Bueno ayer acabó el mes y hoy abro una nueva prácica que consiste en recomendar las mejores entradas que me he encontrado a lo largo del mes.

Programación:

YQL: Yahoo Querry Language

Introduccion a Pygame

JavaScript toma el control del sonido en HTML5

IE Conditional Comments


SEO:

Información sobre el rendimiento de tu sitio en Herramientas para Webmater de Google


Open Site Explorer - Herramienta de analisis de enlaces entrantes y su popularidad

Son estos los famosos 200 parámetros del algoritmo de Google?

Ranking de problemas de seguridad web


The Death of Tag Clouds


Ubuntu:

Remover repositorios PPA

Comandos para obneter información en internet

GDM2Setup

Firefox 3.6 Stable PPA


Redes Sociales:

Powering Your Website With Social Media

Top 10: Best Social Media Presentations

Facebook for iPhone 3.1 Is Good ....

Otros
Teeworlds: Opensource Arcade Online