The PHP Benchmark es un sitio que realiza tests de prueba para ver rendimientos de funciones y así programar de forma más eficiente. La página está bastante completa, ya que también ofrece el código de las funciones que ha ejecutado.
Gracias a las pruebas podemos darnos cuenta de:
Realizar un foreach es siempre más rápido, y si no recuperamos la clave del array mejor aún.
Un for es más rápido si no calculamos previamente en una variable el tamaño del array que recorremos, y que sizeof es más rapido que count.
Cuando vamos a asignar el valor de una posición de un array a una variable para tratar con ella, es conveniente hacerlo por referencia ($alias = &$aSingleDimArray[$i]).
No es más rápido crear un objeto como referencia ($obj =& new SomeClass();).
if es más rápido que switch/case, y ligeramente más rápido es usar == que ===.
Parece ser que el uso de comilla simple o doble en las últimas versiones se ha mejorado y no existe apenas diferencia.
Phalanger es una implementación de PHP que permite incluir código PHP en el entorno del framework .NET de forma rápida y compatible con la mayorÃa del código PHP.
El desarrollador podrá beneficiarse de la facilidad y eficiencia de PHP y del poder y riqueza de .NET. Phalanger compila los scripts PHP en código MSIL, el cual puede ser ejecutado en .NET o Mono.
Phalanger incluye funciones de tratamiento de strings o arrays que han sido reimplementadas, teniendo un buen rendimiento. Lo único malo es que por ahora solo soporta código para PHP4. Phalanger
VÃa / AjaxLine
WordPress 3.4 ha añadido la opción de theme customizer, la cual permite modificar las opciones del theme y darle el aspecto que deseas de forma muy visual y sencilla. En estos momentos, por lo que he podido ver, solo permite modificar el background y poco más. Pero viendo y pegándome con el código he podido ver cómo añadir mis propias opciones.
El ejemplo que voy a poner permite elegir entre tres tipos de fuente de Google Webfonts y modificar las css para usar ese tipo de letra.
Aviso que el código quizás no sea el mejor, pero realizar ingeniería inversa no siempre es fácil y tampoco he visto otro sitio donde lo hagan.
Lo primero que se tiene que hacer es crear las opciones en el panel de customizer. Para ello hay que crear una sección (section “Fuente”) y asignarle unas opciones (settings) y añadirle unos controles (control) a las opciones. Existen controles por defecto, el de elegir el color está muy bien, pero en mi caso me he creado uno personalizado que muestra un control radio modificado para que el label del radio muestre la tipo de letra en cuestión.
add_action('customize_register', 'mi_theme_customizer', 1);
function mi_theme_customizer() {
global $customize;
if($customize) {
// La seccion
$customize->add_section('mi_font', array(
'title'=>'Fuente'
) );
// La opcion
$customize->add_setting( 'mi_font_family', array(
'control' => 'color', // esto ni idea de para que sirve, realmente no es un control tipo color y funciona
'type' => 'option'
) );
$customize->add_control( 'mi_font_family', array(
'settings' => 'mi_font_family',
'section' => 'mi_font',
'type' => 'font_radio',
'choices' => array('Trocchi', 'Great Vibes', 'Bad Script') // las fuentes de google
) );
}
}
Una vez creado los controles, añado el código que dibuja (render) mi control personalizado, primero añado los css para que dibuje las fuentes de Google y luego dibujo el control en sí. He usado Javascript en vez de PHP porque parece ser que el código no está del todo completo, y no hay un filtro para crear tu propio control, por lo que tengo que añadirlo mediante jQuery a un elemento para que el Javascript del customizer tenga en cuenta cuando selecciono una opción y refresque el preview del theme.
// Añado los css de google webfonts mediante javascript para tener luego el nombre de las fuentes y usarlo para crear los radio buttons
add_action('customize_controls_print_scripts', 'mi_customize_scripts');
function mi_customize_scripts() {
$fonts = array('Trocchi', 'Great Vibes', 'Bad Script');
?>
type == 'font_radio') {
if ( empty( $control->choices ) )
return;
$name = '_customize-font-radio-' . $control->id;
?>
label ); ?>
Y ya por último solo falta usar la opción guardada para mostrarla en el theme
add_action('wp_head', 'mi_custom_styles');
function mi_custom_styles() {
$option = get_option('mi_font_family');
// El customizer modifica este filtro para refrescar el preview
$option = apply_filters('option_mi_font_family', $option);
if ($option) {
echo "";
echo '';
}
}
Y esto es todo, no sé si hay una forma mejor de hacerlo, estoy abierto a sugerencias.
Si queremos indicar que hay novedades en algún elemento del menú del admin de WordPress, tendremos que añadir un simple filtro en nuestro functions.php. Esto puede ser necesario por ejemplo si tenemos un Custom Post Type y se actualiza mediante un cron, el usuario podría tener un vistazo rápido de como ha ido el cronjob si usamos ese tipo de notificaciones.
Para añadir estas notificaciones tendremos que hacer uso del filtro add_menu_classes, que aunque no creo que esté pensado para esto, nos permite modificar el menú antes de ser dibujado. En el filtro tendremos que buscar la opción del menú por la acción que realiza (posición 2 del array) y añadir un pequeño HTML en el título (posición 0 del array). Buscamos por la acción y no por el título ya que si usamos multi-lenguaje nos puede dar problemas.
add_filter( 'add_menu_classes', 'admin_menu_updates');
function admin_menu_updates( $menu ) {
foreach($menu as $i=>$item) {
if ($item[2] == 'edit.php?post_type=miposttype') {
$c = get_transient( 'contador_updates_miposttype' );
if ($c) $menu[$i][0] .= ' '.$c.'';
}
}
return $menu;
}
Yo en este caso el valor lo almaceno usando la API de Transients, pero vosotros lo podéis gestionar como os venga mejor.
Las curvas Bézier son muy utilizadas en diseño 3D y gráficos vectoriales, pero también nos puede ser muy útil cuando queremos realizar una determinada curva entre dos puntos.
De forma resumida, la curva Bézier está formada por cuatro puntos: punto origen (p0), punto final (p3) y dos puntos más (p1 y p2) con los que se realizan vectores que forman la curva:
El script que lo realiza es muy sencillo, tan solo hay que pasarle los 4 puntos y el valor de t (que va desde 0 a 1).
¿Y todo esto por qué? pues porque estamos realizando mejoras en el Top de Bitacoras.com y necesitábamos una curva que ofreciera una pendiente poco pronunciada entre dos puntos.
También os paso un ejemplo para que juguéis con los posibles valores de los puntos, teniendo una escala de 1000×100.
pChart es una clase PHP que nos ayuda a crear gráficas. Los datos que se muestran se recuperan de sentencias SQL, ficheros CSV o simplemente introduciéndolos de forma manual.
Permite realizar gráficas de líneas, barras y circulares. Su uso es bastante sencillo. Incluso permite añadir ficheros de esquemas de colores. pChart
Entendiendo por Data Stores los sistemas de almacenamiento tanto RDBMS o NoSQL, el PDF que referencio compara los distintos tipos de data stores que hay:
Almacenamientos clave-valor
Almacenamiento de documentos
Similares al BigTable de Google
BD relacionales escalables
De cada tipo de data store explica cuales son y que características tiene, y por último hace comparativa entre ellos. También nos dice posibles ejemplos de uso:
Sistemas clave-valor: útil cuando los datos almacenados se basan en el acceso de información mediante un ID (sin joins) y que se actualiza pocas veces o se actualiza siempre de la misma manera.
Almacenamiento de documentos: cuando la información almacenada depende de varios campos (por ejemplo un stock de vehículos).
Sistemas basados en BigTable: se puede tratar de aplicaciones similares a los almacenamientos documentales, pero con la diferencia de que es necesario un elevado número de registros.
RDBMS escalables: cuando nuestra aplicación necesita de relaciones entre distintos datos y nuestro servidor se queda corto para aguantar el volumen de datos o de transacciones.