Error con setlocale()… devuelve false

i18nLos usuarios de Ubuntu, pueden encontrarse con un problema al hacer una llamada a la función setlocale() encargada de asignar el idioma correcto para, por ejemplo, llamar a la función getText() y que recoja las traducciones en el idioma correcto.

El problema está en que únicamente podemos cargar los idiomas que están presentes en el sistema operativo y si intentamos cargar uno diferente, setlocale() nos devolverá siempre false.

Podemos saber los idiomas cargados en el sistema operativo mediante el comando:

locale -a

Esto nos devolverá un listado similar a este:

C
en_GB.utf8
en_IN
en_NG
en_US.utf8
POSIX

Si estámos intentando cargar el idioma es_ES (como era mi caso), le resultará imposible… la solución, instalar los idiomas que necesitamos lanzando el comando:

apt-get install language-pack-es-base

Posteriormente, reiniciaremos Apache:

/etc/init.d/apache2 reload

Y le indicaremos a nuestro programa que cargue el idioma con el mismo nombre que lo encontramos en nuestro sistema, es decir, en mi caso:

setlocale( LC_MESSAGES, “es_ES.UTF8” );

Y con esto conseguiremos que nuestro programa quede internacionalizado de manera correcta.

Pasar segundos a horas:minutos:segundos

Una sencilla función que dado un número de segundos, nos devuelve el tiempo en formato hh:mm:ss


protected function makeTimeFromSeconds( $total_seconds )
{
    $horas              = floor ( $total_seconds / 3600 );
    $minutes            = ( ( $total_seconds / 60 ) % 60 );
    $seconds            = ( $total_seconds % 60 );

    $time['horas']      = str_pad( $horas, 2, "0", STR_PAD_LEFT );
    $time['minutes']    = str_pad( $minutes, 2, "0", STR_PAD_LEFT );
    $time['seconds']    = str_pad( $seconds, 2, "0", STR_PAD_LEFT );

    $time               = implode( ':', $time );

    return $time;
}

Espero os sea de utilidad.

La clase sfConfig de Symfony

Aquí os dejo algo de información sobre como solicitar variables de configuración en symfony además de un listado muy útil con todas las variables que Symfony trae predefinidas.

Cómo pedir variables definidas

Se puede llamar a la función estática get del objeto sfConfig para solicitar cualquier variable definida pasándo dos valores. El primero indica el nombre de la variable solicitada y el segundo, el valor que retornará en caso de no existir dicha variable.

sfConfig::get('sf_config_variable', 'The default value'); // The default is optional

Continue reading

Cómo optimizar tus aplicaciones Web

Optimizar aplicaciones PHPManuel Aguilar publicó una magnífica presentación sobre cómo optimizar aplicaciones Web dada en la PHP Barcelona Conference 2008 y he considerado interesante recopilar a modo de resumen las ideas más importantes de ese artículo, en cualquier caso, recomiendo la lectura del mismo para recoger toda su esencia y ampliar información.

Partiendo de un estudio de Yahoo! que dice que el 80% del tiempo de carga de una web corresponde al lado del cliente, podemos seguir una serie de reglas que aumentarán significativamente la percepción de velocidad del usuario. Continue reading

Implementando un sistema de caché en PHP

Hace unos días, os comentaba que es una caché y como entenderla en el marco de la programación web. Para seguir con el aprendizaje de este sistema, he desarrollado una pequeña clase que permite cachear información (strings, arrays, resultados de base de datos, objetos…) en nuestra máquina y descongestionar así el motor de base de datos, por poner un ejemplo.

Lo primero que debemos hacer es pensar en que necesitamos para su correcto funcionamiento, así que, manos a la obra.

Como sabemos, una caché es un sistema al que le pasamos un objeto X y él lo almacenará en su sistema de una manera determinada, por lo tanto, necesitaremos una función que dado un identificador único y unos datos, guardará la información. Además de esto, necesitamos indicarle un tiempo de vida (ttl) a esa información cacheada, sino estaremos devolviendo eternamente el valor almacenado. Continue reading

Qué es una Caché y como aplicarla a la programación Web

Vamos a ver que es una caché con un ejemplo muy ilustrativo que leí hace algún tiempo. Supongamos que estamos trabajando en una centralita que facilita números de teléfono de un pueblo relativamente pequeño; para ello, tenemos un listín telefónico común con todos los teléfonos del pais.

Cada vez que recibimos una llamada, cogemos el listín, realizamos la búsqueda y facilitamos el número encontrado al usuario. Al poco tiempo, nos damos cuenta que la gente suele pedir los teléfonos de los mismos restaurantes y comercios una y otra vez, así que cogemos una libreta pequeña y vamos anotando los números de teléfono que nos solicitan ordenados alfabéticamente para poder acceder a ellos de manera más rápida la próxima vez… felicidades, acabas de crear una caché! Continue reading

PHP Barcelona Conference 2009

phpbarcelonaconference2009Después del éxito obtenido la pasada edición, el grupo PHPBarcelona ha vuelto a organizar una conferencia para este año. El lugar de encuentro será el CitiLab de Cornellà los días 30 y 31 de Octubre.

Ya se ha abierto la venta anticipada de entradas a un precio increiblemente bajo: 25€ un día y 40€ los dos. Puedes adquirir las entradas desde la web oficial.

Según anuncian: “Este año el evento viene cargado de muchas e interesantes novedades: dos días de duración (Viernes y Sábado), distintas actividades entremezcladas (ponencias teóricas, talleres prácticos, concursos de programación, etc.), dos líneas de idioma (español e inglés), nuevos y potentes patrocinadores, más celebridades invitadas, divertidos regalos y mucho más!”

Realmente este año los chicos de PHPBarcelona se han puesto las pilas, pues en el cartel de charlas aparecen nombres tan importantes como Rasmus Lerdorf (Uno de los creadores de PHP), Fabien Potencier (Lead Developer de Symfony), Derick Rethans (XDebug) y Sebastian Bergmann (Creador de PHPUnit).

Code Golf – Pasatiempo para programadores

Code GolfCode golf es un adictivo pasatiempos para programadores en el que el objetivo es conseguir una solución a un sencillo problema con el menor número de teclas picadas al programarlo (o lo que es lo mismo el archivo con menor peso en bytes es el que gana).

En la web se plantean diferentes retos y a partir de ahí se van marcando los mejores resultados a medida que los usuarios van subiendo sus scripts. Puedes subir tu mini-programa en uno de los siguientes lenguajes: PERL, PHP, Phyton o Ruby. Continue reading

Novedades de PHP6

php6Los desarrolladores del motor de PHP llevan ya varios meses trabajando en la versión 6. De momento no parece que vaya a ver la luz en breve, pues acaban de liberar la versión 5.3 para postergar en la medida de lo posible la aparición de la nueva versión. En cualquier caso, es interesante estar al día e ir preparando nuestros desarrollos actuales para las posibles incompatibilidades con la nueva versión.

Recientemente preguntaban a Zeev Suraski, co-fundador de Zend Technologies Inc. sobre la versión 6 de PHP de la que se lleva algún tiempo hablando pero que parece que no acaba de ver la luz. En la entrevista, Zeev nos comentaba:

PHP6 es un proyecto mucho más difícil que PHP4 y 5 principalmente por dos razones:

  • La cantidad de código PHP que hay afuera, es tan inmensa.
  • Cada pequeña incompatibilidad que uno introduce se convierte en un horrible dolor de cabeza para mucha gente. Y combinado con la principal cosa que queremos hacer con PHP6, que es la introducción de soporte nativo para Unicode, es imposible no introducir una cantidad significativa de incompatibilidades en el lenguaje. No sé cómo va a resultar esto, estoy siendo completamente honesto.

Continue reading