WordPress 3.3 “Sonny”

Una nueva versión acaba de salir con bastantes mejoras a nivel de la interfaz de usuario y también con respecto al rendimiento en el tema de permalinks, sobre todo para sitios que usan URLs del tipo %postname%.

PHP Fail

Aparentemente un "string" no es un "string" en PHP.
php:
<?php
interface IPhpSucks {
        function foo(string $bar);
}
class PhpSucks implements IPhpSucks {
    function foo(string $bar) {}
}
$f = new PhpSucks();
$f->foo('demo');
Al ejecutar ese script, se obtiene un lindo error.
Catchable fatal error: Argument 1 passed to PhpSucks::foo() must be an instance of string, string given, called in demo.php on line 10 and defined in demo.php on line 6
Actualización: Averiguando un poco más, al parecer esta característica (Type Hinting) funciona sólo para nombres de clases o el tipo array (s/PhpSucks/ISuckInPhp/).

Probando nuevo servidor – Parte 2

Hace unos días comentaba que nos habíamos mudado el sitio a otro lado. Inicialmente nos vimos obligados a hacer esto porque nuestro antiguo proveedor JaguarPC suspendió la cuenta diciendo que se consumían demasiados recursos. Este es el mail que nos enviaron:

Top Process  %CPU 53.0  /usr/bin/php /home/buayacor/public_html/index.php
Top Process  %CPU 48.3  /usr/bin/php /home/buayacor/public_html/index.php
Top Process  %CPU 45.5  /usr/bin/php /home/buayacor/public_html/index.php

...
We had no choice but to disable the web access of your account to stabilize the server. Please involve a web developer to check and optimize the code to decrease the resource usage. You should optimize your scripts/queries a little further because we believe that there is always some room for improvement.

El blog tenía instalado WP-Cache desde hace años, nunca había dado problemas y el número de visitas tampoco ha variado drásticamente estos últimos meses -- basta decir que antes recibíamos más visitas. Mi primera sospecha era WP-Cache, lo desactivamos y comunicamos el cambio para que activen nuevamente el blog. Estuvo así por unos cuantos días hasta que volvieron ha suspender el sitio indicando el mismo problema. Dada la falta de ayuda por parte de JaguarPC para intentar determinar la causa del problema, decidimos intentar replicar el problema en otro lado.

Asi que contratamos el plan más básico ofrecido por Linode. Mientras el DNS se actualizaba, instalamos rápidamente PHP, Nginx y MySQL. Al cabo de unas horas teníamos nuevamente en pie el sitio. Desde entonces no hemos notado incrementos dramáticos en el uso de CPU. Hay picos eventuales de 15%. Algo que hemos notado también es que ahora el sitio carga bastante más rápido que antes, sin ningún plugin que haga caché de datos.

Desde hace unos días, instalé también PHP APC y se nota una gran diferencia con respecto a antes. A estas alturas estoy empezando a pensar que en realidad era más problema de JaguarPC que de nosotros. Algo que seguramente también hagamos es mantener el sitio en este VPS.

RIP: Google Reader

Como anunciaban hace unos días sobre los cambios que se harían en Google Reader, lamentablemente esta mañana mi cuenta tiene un nuevo look. Si bien es cierto que la interfaz es mucho más ligera, una de las funcionalidades que más usaba ya no está más disponible. Lo que más fastidio da es el hecho de tener que crear un perfil en G+ para recuperar algo de lo que se perdió.

Probando nuevo servidor

Por problemas de rendimiento y la falta de detalles de nuestro antiguo proveedor, acabamos de mudar nuestro defunto blog a un nuevo servidor vps. Por el momento las cosas parecen ir bien.

Google+ lanza su esperada API

Hoy Google lanzó lo que muchos desarrolladores estaban esperando con ansias, por fin tenemos el API de Google+.

Después del lanzamiento de Google+ y la avalancha de curiosos que quisieron probarlo, la red social ha tenido un bajón grande en estos últimos meses. Esto se debe mas que nada a la monotonía de publicar "manualmente", y la falta de integración de productos como Google Reader.

Lo único que hizo que Google+ no se caiga totalmente fue la introducción de los juegos que en un primer momento también tuvo un gran revuelo, sin embargo, hoy también parece relegado.

Hoy después de mucha espera y espectativas tenemos una primera versión de la API que sirve para mostrar información publica de usuarios registrados.

Por ejemplo para ver la información de cierto perfil, sólo se hace una simple petición via GET

CODE:
GET https://www.googleapis.com/plus/v1/people/107447198372749768472?pp=1&key={YOUR_API_KEY}

y obtenemos datos en JSON:

JAVASCRIPT:

{
 "kind": "plus#person",
 "id": "107447198372749768472",
 "displayName": "Braulio Soncco",
 "tagline": "Misio pero feliz :)",
 "gender": "male",
 "aboutMe": "Super mormón :)",
 "url": "https://plus.google.com/107447198372749768472",
 "image": {
  "url": "https://lh5.googleusercontent.com/-5JLDS7_WVoU/AAAAAAAAAAI/AAAAAAAAANc/SQqkX0081z4/photo.jpg"
 }
}
 

Para hacer estas peticiones, necesitamos un API Key.

Por ahora son funciones básicas, pero ya es un avance para estar construyendo aplicaciones simples.

Y a tí ¿Qué se te ocurre hacer con la API?

Enlaces: Lanzamiento del Google+ API | Documentación de la API | Invitaciones a Google+

Usando Javascript en Drupal 7, algunos cambios

Haciendo algunos cambios en un theme de Drupal 6 a Drupal 7, he notado que los scripts antiguos no funcionan.

Buscando mucho, he encontrado que jQuerya hora está "namespaced", por lo tanto si tenías un código parecido a este:

JAVASCRIPT:

$(document).ready(function() {
        // Código
});
 

Ahora tiene que ser:

JAVASCRIPT:

(function($) {
    $(document).ready(function() {
        // Código
    });
})(jQuery);
 

Funciona y parece ser la solución final, sin embargo no se si hay otro tipo de solución. Si es asi, házmelo saber.

Actualización

Alejandro Barrio, me escribe y me sugiere que use los "behaviors" de Drupal para agregar los scripts:

Para Drupal 6

JAVASCRIPT:

Drupal.behaviors.exampleModule = function (context) {
    $('.example', context).click(function () {
            $(this).next('ul').toggle('show');
    });
}
 

Para Drupal 7

JAVASCRIPT:

(function ($) {
    Drupal.behaviors.exampleModule = {
        attach: function (context, settings) {
            $('.example', context).click(function () {
                $(this).next('ul').toggle('show');
                });
        }
    };
}(jQuery));
 

De la misma manera Eber Irigoyen sugiere no usar document.ready, sino:

JAVASCRIPT:

jQuery(function ($) {
        // codigo, puedes usar $ sin conflictos
});
 

Gracias por sus aportes :)

Enlace: Managing Javascript in Drupal 7

Adobe mata a Flash y lanza Adobe Edge, su plataforma de animaciones HTML5, Javascript y CSS3

No he podido creer la noticia, después de haber invertido millones de dólares en el desarrollo de Flash, de haber escrito y reescrito ActionScript; Adobe se "echa" ante lo nuevo y reemplaza a Flash por HTML5, JavaScript y CSS3.

Lo hace mediante Edge, la herramienta por ahora gratuita que genera animaciones e interaccion del usuario.

Adobe Edge

La herramienta la puedes usar gratis por sólo 152 días desde su instalación.

Probando un poco he visto que para las animaciones usan jQuery y otras herramientas propias de Adobe. La interfaz recuerda a Lightroom pero el uso del timeline es igual a Flash. El código resultante es limpio y fácil de editar. Personalmente le veo mucho futuro.

HTML:

<script type="text/javascript" src="edge_includes/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="edge_includes/jquery.easing.1.3.js"></script>
    <script type="text/javascript" src="edge_includes/edge.0.1.1.min.js"></script>
    <script type="text/javascript" src="edge_includes/edge.symbol.0.1.1.min.js"></script>
    <script type="text/javascript" charset="utf-8" src="Untitled-1_edge.js"></script>
    <link rel="stylesheet" href="Untitled-1_edge.css"/>
 

Javascript que se usa en un ejemplo

Las características que más me llaman la atención las pongo en negrita:

  • Crea nuevas composiciones con las herramientas de dibujo y texto.
  • Importa los tipos de imágenes SVG, PNG, JPG or GIF files.
  • Crea animaciones con un editor de línea de tiempo. Anima posición, tamaño, color, fondo, rotación y más.
  • Añade archivos HTML existentes con animación, mientras se preserva la integridad de los layouts.
  • Copia y pega transiciones, las invierte y se puede escoger entre más de 25 efectos existentes.

Otras características se añadirán poco a poco, si quieres estar informado puedes seguir la página en Facebook o la cuenta en Twitter.

Enlace: Adobe Edge Preview

No puedo encontrar mysql al instalar Drupal 7

Hace ya unos años estoy trabajando fuertemente con Drupal 6, sólo hace unas semanas he empezado a usar la versión 7 y me parece un avance excelente. Poco a poco estaré publicando información relacionada a Drupal.

Instalando Drupal 7 bajo Windows y Apache he encontrado que no me da la opción de usar MySQL:

Instalación Drupal y MySQL

Esto es porque ahora Drupal 7 tiene como requerimiento el uso de la extensión PDO, además que requiere MySQL 5.015 o mayor.

Para solucionarlo, sólo debemos abrir el archivo php.ini, buscar y descomentar las líneas que permiten el uso de estas extensiones:

;extension=php_openssl.dll
extension=php_pdo.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll

Reiniciamos Apache y listo:

Instalación Drupal y MySQL

Es posible que tengas algunos otros errores, si es así, los comentarios están abiertos

Por cosas pequeñas y sencillas... :)