Category Archives: Uncategorized

PHP – Load 2 classes with the same name in different files

When you are dealing with code that is used in different sites or a site with different languages at least once you will find yourself in this situation: the need of using the same class coming from 2 different files. For example, using a configuration file from different sites in the same script.

If you tried, or even if you don’t, you will know that this results in a fatal error. The solution is usually doing a wrapper to execute the the script for the different situations you need, this is a good solution but the downside is the performance when you need to launch the script with a exec or passthru (because of the process fork).

Looking for a solution I found the runkit PHP extension that allows you, among other things, to load a different class with the same name overwriting the current one. This is done with the runkit_import function and passing the path of the class file as a parameter.

The bad thing is that this PECL library is not maintained since 2006 and you know what that means… in this case the library doesn’t work in PHP 5.2+ versions. But then… someone at the office sent me a link of a github project that continues this library and made it work with PHP 5.2 and 5.3.

You will only need to download the last version from github and compile the code with these simple commads:

phpize
./configure
make
make install

When you have that you will have a runkit.so file in the dynamic modules folder of PHP, so now you only need to add it to php.ini or use the dl function to dynamically load the extension.

in php.ini

extension=runkit.so

Now you can use the following code to prove that all I’m saying is right:

a.php

class A 
{
    function overloading()
    {
        echo 'I am calling from A class' ;
    }
}

b.php

class A 
{
    function overloading()
    {
        echo 'I am calling from A class from file b.php' ;
    }
}

runkit_test.php

class A
{
    function overloading ()
    {
        echo 'Calling for the same script' ;
    }
}

$a = new A() ;
$a->overloading() ;
echo "n";
// no need for so many flags but now you can see the possibilities
if(runkit_import('/full/path/to/a.php', RUNKIT_IMPORT_CLASS_METHODS | RUNKIT_IMPORT_OVERRIDE | RUNKIT_IMPORT_CLASSES | RUNKIT_IMPORT_CLASS_PROPS | RUNKIT_IMPORT_CLASS_STATIC_PROPS)) {
    $a1 = new A();
    $a1->overloading() ;
}
echo "n";
if(runkit_import('/full/path/to/b.php', RUNKIT_IMPORT_CLASS_METHODS | RUNKIT_IMPORT_OVERRIDE | RUNKIT_IMPORT_CLASSES | RUNKIT_IMPORT_CLASS_PROPS | RUNKIT_IMPORT_CLASS_STATIC_PROPS)) {
    $b = new A();
    $b->overloading() ;
}

Will result in

Calling for the same script
I am calling from A class
I am calling from A class from b.php

And that should do it ;)

How git changed everything

I have migrated almost all the source code at work to git… yeah I’m not the first and it’s not the first time you’ve heard something like that, but git is great. If you are not using a version control system or using Subversion you may ask why, I’ll try to explain.

Git is not another version control system, the way git works it will change the way you work. Branches, tags, merges, checkouts, … I know all of this exist in Subversion too, but in git there’s a difference. Your interaction in git is 90% done locally so all the commits, checkouts, merges and operations that you will need to do are done in your local filesystem… that means speed. If you use or had used Subversion you know that a switch between 2 branches gets slower every time your project grows and projects tend to be bigger, not smaller, but the same operation in git is instantaneous. And this applies to all local operations, but someone can think that the downside is in remote operations… wrong! Remote operations are also fast (excluding latency time) including merges, fetch, push and anything you can imagine.

For me Subversion was so slow that when I needed to upload some file to production that I was doing something I ended copying this content to a text editor, reverting the changes and applying the new changes to the Subversion and to the code in the text editor, that was my faster switch for Subversion. Now I can commit my changes in the feature branch I have created and switch to another one to pull the changes from the remote repository, that one increased my life quality. But what happens if you don’t want to commit the changes to the feature branch yet… you can use the stash, using the git stash command all the changes that you have in your current branch are stored in the stash and your code is clean, in that moment you can do whatever you want and when you are finished, go back to the branch and apply the changes from the stash. That’s great!

Now I’m planning on switch from FTP uploads to git deployments… that will be a great improve too because what about those situations where some code is incorrect and you have to revert it, in Subversion this was a hell of a task (well, maybe not that hard) but if you use git tags you only need to deploy the previous tag and you’re done.

That’s my experience based in 1 month of git usage.

Concatenation vs Interpolation

Looks like one of the PHP’s eternal discussions could be over, the interpolation of variables in strings versus the concatenation of its values.

I’ve always been a fan of concatenation, it’s more readable and looked more natural in the code and several days ago while discussing some changes in the way we create code at Trovit we had this classic confrontation.

We looked for this in the Internet a little bit and we found a comment in the PHP forums with some benchmark info about this particular subject.

This image shows that the code used for this benchmark took less (half of the time to be exact) when using concatenation with single quotes to send the code to the user, but the strange thing is when sending the same code to the output buffer the interpolation is faster… that’s hard to believe.

In this stackoverflow post all the commenters agree, concatenation with single quotes is way faster than other options (concatenation with double quotes is like the worst of both worlds).

So if you’re one of those using:

<?php
echo "Hello, {$user_name}" ;
?>

instead of using:

<?php
echo 'Hello, ' . $user_name ;
?>

you should switch now.

By the way, if you want to get more optimization ideas, this presentation by Ilia Alshanetsky is really good.

Thanks Gonzalo for the tips.

En defensa de los derechos fundamentales en internet

Ante la inclusión en el Anteproyecto de Ley de Economía Sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que:

1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

Críticas a los sites de clasificados

Hoy me han pasado un enlace de un artículo en el que se habla de los buscadores verticales y los sites de clasificados, antes que nada decir que yo trabajo en Trovit así que soy parte implicada, pero me ha surgido la duda de porqué se habla con tanta rabia de estos tipos de sites.

El autor, un tal Cesar, ya escribió este tweet hace unos días:

trovit.com – mitula.com – yakaz.com…. porque google no los vanea de una vez por todas? tanto dinero gana con ellos?

y hoy probablemente intenta explicar o razonar con un post en su blog el comentario de twitter.

Pero al leer el post del blog lo que se ve es lo siguiente.

Critica a páginas como OLX diciendo que no generan valor… es cierto que hay anuncios que no valen para nada o que son spam, pero yo creo que ese es el precio de generar una comunidad de usuarios que pueden publicar anuncios de forma gratuita y sin “obligarles” a rellenar ciertos campos para poder categorizar los anuncios, o simplemente teniendo una buena tecnología anti-spam. Aún así el ejemplo de Loquo, que aunque ahora parece que está un poco de capa caída, sigue siendo una de las webs más efectivas para alquilar un piso, ofrecer empleo, …

Critica a los sites de clasificados y buscadores verticales (que también habría que diferenciarlos ligeramente, pero bueno) diciendo que los sites están creados para que el usuario pinche en los anuncios publicitarios. Eso no es para nada cierto, ya que aunque prácticamente todos los sites de los que habla en parte se financian con publicidad (en muchos casos de Google) los formatos que se usan, por lo menos en el caso de Trovit, son para diferenciar claramente lo que es publicidad de los resultados orgánicos.

Habla, en una parte del post, de como evaluar una web… el punto de siempre: y si Google te banea… pues si Google te banea estás jodido. Pero eso no solo los sites de clasificados o buscadores verticales, prácticamente el 99% de las páginas web del mundo ya que la presencia en los buscadores es esencial, digan lo que digan, para generar marca, para generar tráfico, para no perder presencia en Internet y un largo etcétera.

Estadísticas en Trovit (widgets & twitter)

Desde hace ya un tiempo estamos dando un énfasis especial a los datos estadísticos que calculamos con nuestro catálogo de anuncios, de esta manera podemos ver precios medios de pisos en venta por ciudades o regiones en el vertical de casas, como por ejemplo precios medio de los pisos en Valencia, o por marcas y modelos en el vertical de coches, por ejemplo precio medio del renault clio, y ahora también en el vertical de empleo, como por ejemplo salario medio de director comercial en Madrid.

Pero estos datos no solo se pueden ver en la web de Trovit ya que hemos desarrollado unos widgets para que todo el mundo pueda ponerse en su blog o página web estadísticas que puedan ser de interés para sus lectores. Por ejemplo para este blog puede ser de interés una comparativa entre programador php y programador java:

Trovit

O la evolución histórica del precio medio de los pisos de alquiler en Barcelona:

Trovit, ¿Buscas Casa? – Alquiler pisos barcelona

Y aunque quizá no sea muy útil, pero para poner los 3 ejemplos, el precio de venta de un Audi TT dependiendo del año de fabricación:

Trovit, ¿Buscas Coche? – Audi TT

Y para rizar el rizo… también disponemos de un servicio para Twitter que nos permite saber a través de un twitt el sueldo medio de una profesión, para ello solo tenemos que mandar @trovit_empleo nombre_profesión y recibiremos la respuesta. Más instrucciones en el blog de Trovit.

Hablando de Facebook

facebook_logoCuando digo ‘Hablando de Facebook’ no me voy a poner a analizar las claves de su éxito, aunque por poner un ejemplo tener un gestor de subidas de fotos mejor que algunos servicios de almacenamiento de fotos puede indicar el camino, sino de dos de sus últimos movimientos. En primer lugar la nueva y tan criticada página principal, una especie de twitter con comentarios, muy parecido de hecho a lo que hoy ha anunciado WordPress: una nueva versión de su tema anteriormente llamado Prologue (ahora P2) y que permite convertir un blog de WordPress en un sistema de micro-blogging (una gran elección para empresas de Internet), que parece que confunde más al usuario, y contra la que ya hay grupos que han descubierto como volver a la versión anterior.

He de decir, antes que nada, que a mi no me gusta mucho la nueva página, no se distinguen bien lo que es cambios de estado de los usuarios, con subidas de fotos, publicaciones de enlaces u otro tipo de eventos y principalmente porque la barra lateral, aunque son eventos destacados de tus contactos (aunque no sé realmente como deciden que es destacado y que no) parece publicidad.

En segundo lugar está el tema de los términos de uso, aunque eso quedó en agua de borrajas, ya que la presión de los usuarios hizo que se tirara para atrás, lo que te lleva a pensar el peligro que les puede conllevar a estas redes sociales un cambio que no guste a sus usuarios. Supongo que por eso Tuenti hará referendum para cambiar sus términos de uso (aunque en este caso tras una huelga de usuarios).

Por otro lado hay que hablar de la noticia que he leído hoy en OJOInternet en la que se anuncia que si Facebook sigue con este ritmo de crecimiento será más grande que Google en 2011. Aunque estos estudios de consultoras “independientes” siempre me han parecido bastante inútiles solo he de hacer una comparación, si Pepito, un chico de 11 años, sigue creciendo al ritmo que creció el verano pasado en 2011 medirá 2.85 metros. Es bastante ingenuo pensar que habiendo sido 2008 el año del boom de Facebook, mantendrá ese ritmo de crecimiento durante otros 3 años, por supuesto puede que me equivoque, pero probablemente si buscamos en el tiempo veremos noticias similares, puede que hasta de las mismas consultoras, donde decían lo mismo de Google comparándola con algún otro gigante de Internet.

Finalmente quiero comentar que aunque parezca que no me gusta Facebook, creo que está haciendo un gran porcentaje de su trabajo de una manera espectacular y genial, así que es de esperar que aunque su crecimiento no mantenga esos número tan astronómicos siga ganando adeptos, tráfico y, suponemos, ingresos.

Actualizado a WordPress 2.7

Ya me he acutalizado WordPress a la última versión gracias al plugin Automatic Upgrade, el interfaz me recuerda mucho al infame Netscape Navigator y creo que la tipografía del menú no es la más adecuada, pero ¡me gustan mucho otras funcionalidades como el QuickPress o las estadísticas de Akismet!

Street View en Trovit

Como ya se puede leer en el blog de Trovit, hemos añadido soporte a la recién estrenada funcionalidad Street View, que por cierto… es impresionante. Funciona para España y Francia, que son los únicos países en los que Trovit tiene presencia en los que hay Street View.

Un lujazo tener eso en nuestra página de resultados. Aquí tenéis un pantallazo de cómo se ve.

Future of web applications

Aunque de forma un poco precipitada esta mañana hemos reservado todo lo necesario para salir mañana hacia Londres para asistir al FOWA que se celebra esta semana. Los talleres y conferencias son bastante interesantes y han llevado gente que, a priori, ha de saber sobre las aplicaciones web.

A la vuelta ya contaré que tal ha ido… pero pinta bastante bien.