Archivo de 'software'

Internet Explorer 9 sigue imparable

Todos estamos siendo testigos del empujón que están dando desde Microsoft a la próxima versión de su navegador, Internet Explorer 9. Si bien hace poco veíamos que ya obtenía una puntuación de 83/100 en el Acid3 test, su última Plaform Preview ya logra un increíble 95/100.

Y es que ya es la Fourth Platform Preview, la versión que precede a la Beta de IE9, donde ya podremos probar de verdad cómo funciona el nuevo navegador.

Una de las principales novedades que trae es la aceleración hardware HTML5, esto es, aceleración completa tanto en texto, gráficos, audio y vídeo. Presentan una completa lista de ejemplos demostrando el rendimiento del navegador, comparándolo además con otros.

SVG, ya plenamente funciona dentro de IE9. Lo venden, no sólo como una herramienta para realizar diagramas estáticos, sino como un una excelente elección que permite crear un nuevo escenario de animaciones.

La integración nativa de JavaScript, hasta ahora una pieza fuera del navegador. En IE9, su nuevo motor de JavaScript (Chakra), mejora muy notablemente el rendimiento si lo comparamos con sus antecesores. Como nota curiosa, parece que ya oficialmente han abandonado la terminología JScript para referirse a JavaScript. Además, han mejorado el árbol DOM.

Vemos también como siguen mejorando posiciones en la batalla por el mejor motor de JavaScript, superando ya las últimas versiones de Safari y de Firefox.

Todo parece indicar que para finales de este año, cuando salga IE9, realmente va a suponer el principio de una revolución en la web, ya que podremos por fin empezar a usar HTML5. Sólo veo una pega: No estará disponible para Windows XP, que a día de hoy, mantiene todavía una cuota de mercado de casi el 60%.

Más información, en IEBlog.

http://blogs.msdn.com/b/ie/archive/2010/08/04/html5-modernized-fourth-ie9-platform-preview-available-for-developers.aspx

Crear un componente en Joomla! 1.5

Joomla! es, junto con WordPress, quizás el CMS más popular que existe. Lo que no mucha gente sabe, o tiene en cuenta, es que es además un completo Framework de desarrollo web. No en vano, nos proporciona muchas de las funcionalidades que esperamos de un Framework:

  • Arquitectura basada en Modelo-Vista-Controlador.
  • Seguridad, con un completo sistema de perfiles de acceso.
  • Acceso a base de datos.
  • Sistema de cachés.
  • Gestión de errores.
  • Administración de formularios.
  • Sesiones.
  • Plantillas.
  • Utilidades para fechas, criptografía, XML, ficheros…

Con todo esto, podemos crear diferentes extensiones de Joomla!:

  • Component. Son las extensiones más complejas. Se trata de aplicaciones completas que se ejecutan dentro del espacio de Joomla!. Tenemos muchas de serie, como por ejemplo el componente Content (/components/com_content/), que es el encargado de manejar los artículos, categorías y secciones.
  • Module. Se trata de pequeñas piezas de contenido que se muestran en la página. A menudo, dependen de un componente, como es el caso del módulo “latest news” (/modules/mod_latestnews/). Otro ejemplo de módulos, son los menús. En los módulos, además, se debe especificar su posición dentro de la página.
  • Plugins. Son bloques de código que se disparan ante determinados eventos. Antes de Joomla! 1.5 se los llamaba Mambots.
  • Templates. Plantillas que modifican el aspecto visual de la aplicación web.
  • Languages. Las extensiones de este tipo contienen ficheros que definen cadenas de texto traducidas para distintas partes de Joomla!.

A partir de Joomla 1.6, además, tendremos dos nuevos tipos de extensiones. Library, que se tratará de un bloque de código que contenta un conjunto de funciones relacionadas entre sí. Por ejemplo, para acceder a la API de Twitter. Y también se incluirá la extensión Packages.

Como vemos, la extensión más compleja y flexible son los components. Con ellos podremos crear, por ejemplo, una completa agenda de eventos o un sistema de ecommerce. Veamos cómo podemos crear un componente básico “Hola Mundo”. Vamos a utilizar la primera parte del ejemplo que viene en la documentación de Joomla!.

Modelo Vista Controlador

Lo primero es conocer el patrón Modelo-Vista-Controlador. Queda fuera del alcance de este artículo explicar en qué consiste, de modo que en resumen diremos que se trata de una arquitectura que permite dividir una aplicaciones en tres apartados:

  1. Controlador, que es el que gobierna el comportamiento principal, y el que responde las peticiones del usuario. En Joomla: JController.
  2. Vista. Se trata del código que se encarga de generar el contenido que se le devolverá al usuario. Generalmente en HTML. En Joomla: JView.
  3. Modelo. Es una abstracción de los datos que usa la aplicación. Si bien normalmente encapsulan bases de datos, también pueden utilizar otros origines de datos como un feed RSS. En Joomla: JModel.

Crear árbol de directorios

El primer paso consiste en crear el siguiente árbol de directorio y ficheros:

Además de los ficheros en blanco index.html (Para prevenir accesos a los directorios), vemos que tenemos 5 ficheros:

  1. /site/hello.php – Punto de entrara a nuestro componente
  2. /site/controller.php – Fichero que contiene nuestro controlador.
  3. /site/views/hello/view.html.php – Clase que extiende JView que se encarga de construir la vista
  4. /site/views/hello/tmpl/default.php – Plantilla
  5. /hello.xml – Fichero XML que indica a Joomla! cómo instalar el componente.

Crear el punto de entrada

Vamos a editar el fichero /site/hello.php y vamos a guardar en el lo siguiente:

/**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * components/com_hello/hello.php
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2
 * @license    GNU/GPL
 */

// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Require the base controller

require_once( JPATH_COMPONENT.DS.'controller.php' );

// Require specific controller if requested
if ($controller = JRequest::getWord('controller')) {
	$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
	if (file_exists($path)) {
		require_once $path;
	} else {
		$controller = '';
	}
}

// Create the controller
$classname	= 'HelloController'.$controller;
$controller	= new $classname();

// Perform the Request task
$controller->execute( JRequest::getVar( 'task' ) );

// Redirect if set by the controller
$controller->redirect();

¿Qué es lo que hemos hecho? Veámoslo paso a paso:

  1. En primer lugar comprobamos que estamos ejecutando éste código dentro de Joomla mirando si está definido _JEXEC. En caso contrario, finalizamos la aplicación.
  2. Cargamos con require_once nuestro controlador.
  3. El siguiente bloque de código comprueba si se necesitan más controladores. Por ahora no es necesario, pero lo mantenemos ahí para un futuro.
  4. Después, creamos el controlador. En este caso, siempre se creará un controlador de la clase HelloController(), dado que en este ejemplo, como vimos en el paso anterior, no hay más.
  5. Posteriormente indicamos al controlador que lleve a cabo la tarea solicitada. Por defecto, si no hay ninguna, la tarea es ‘display’.
  6. Finalmente, pasamos el control al controlador, para que, si fuera necesario, lleve a cabo una redirección.

Creamos el controlador

Nuestro controlador sólo hace una cosa: Mostrar el mensaje Hello World, de modo que no se hace necesaria ninguna manipulación de datos. Guardamos el siguiente código en /site/controller.php

 /**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
 * @license    GNU/GPL
 */

// No direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

/**
 * Hello World Component Controller
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class HelloController extends JController
{
    /**
     * Method to display the view
     *
     * @access    public
     */
    function display()
    {
        parent::display();
    }

}

Como vemos, creamos una clase llamada HelloController que hereda a JController. Tan sólo define el método display(), pues es la tarea por defecto (Salvo que no se especifique otra). Este método tan sólo invoca al método JController::display(), que determina y carga la vista y plantilla a utilizar. En nuestro ejemplo, sólo tenemos una vista y una plantilla.

Crear la vista

La vista tan sólo carga datos y los guarda para usar en la plantilla. Para ello se usa el método assignRef(), donde el primer parámetro es el nombre de la variable en la plantilla, y el segundo la variable que se comparte.

Código de /site/views/hello/view.html.php:

/**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
 * @license    GNU/GPL
*/

// no direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View class for the HelloWorld Component
 *
 * @package    HelloWorld
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $greeting = "Hello World!";
        $this->assignRef( 'greeting', $greeting );

        parent::display($tpl);
    }
}

Y ahora definimos el código de la plantilla en /site/views/hello/tmpl/default.php:

<?php

// No direct access

defined('_JEXEC') or die('Restricted access'); ?>

<?php echo $this->greeting; ?>

Se trata de un fichero PHP convencional en el que tenemos accesibles todas las variables que hemos compartido desde la vista.

Juntándolo todo

Nos queda definir el fichero Manifiest que define el componente para poder instalarlo fácilmente (Sin tener que copiar los ficheros a mano y actualizar la base de datos nosotros). Contiene distinta información, como por ejemplo:

  • Descripción del componente.
  • Lista de ficheros que incluye.
  • Un fichero opcional PHP que realizar tareas de instalación.
  • Un fichero opcional SQL que se ejecuta al instalar o desinstalar


 Hello
 
 2007-02-22
 John Doe
 john.doe@example.org
 http://www.example.org
 Copyright Info
License Info
 
 1.01
 
 Description of the component ...

 
 
 
  controller.php
  hello.php
  index.html
  views/index.html
  views/hello/index.html
  views/hello/view.html.php
  views/hello/tmpl/default.php
  views/hello/tmpl/index.html
 

 
  
Hello World!

  
  
   hello.php
   index.html
  

 

Finalmente, guardamos en los ficheros index.html un contenido trivial, como por ejemplo:

<html><body bgcolor="#FFFFFF"></body></html>

Por último, comprimimos en un fichero ZIP el contenido de la carpeta com_hello, y ya podemos instalar nuestro componente desde el instalador de extensiones de Joomla.

Mostrando el componente

Ahora, para poder ver el resultado, debemos consultar el componente. Para ello, debemos acceder a la siguiente URL:

/index.php?option=com_hello&view=hello

Vemos que no se define ninguna tarea (Recordemos que por defecto se usa Display). En caso de querer ejecutar otra tarea, tendríamos que definir el parámetro GET task, por ejemplo para la tarea ‘save’:

/index.php?option=com_hello&view=hello&task=save

Quitar iconos de PDF, Mail e Imprimir en Joomla

A veces las tareas más sencillas son las que más se me complican. Un ejemplo es la gestión de Joomla!, conocido CMS por su sencillez y comunidad, pero que al menos a mí a veces me resulta bastante complicado. Supongo que debe ser porque mi enfoque es el de un programador, y me cuesta resolver problemas típicamente de programación a golpe de ratón.

En este caso en concreto, se trata de establecer las configuraciones por defecto de los artículos en Joomla!, esto es, los parámetros avanzados que se pueden configurar para cada artículo en el menú de la derecha. El método de fuerza bruta es ir artículo por artículo quitándolo. Pero esto no escala :)

Pues bien, si queremos desactivar de una vez por todas los iconos de exportar a PDF, enviar por email e imprimir, simplemente debemos ir al menú Contenidos, apartado Gestor de artículos. Una vez ahí, pulsamos el botón Preferencias, y ya podremos activar los valores por defecto.

Simplemente marcamos la opción “ocultar” de los campos:

  • Iconos
  • Icono PDF
  • Icono Imprimir
  • Icono e-mail

Y de paso, para quitar más basura, oculto también:

  • Nombre del autor
  • Creado en fecha y hora
  • Modificado en fecha y hora
  • Muestra navegación
  • Enlace leer más…
  • Valoración/Votación de artículos
  • Impresiones
  • Nombre de la sección
  • Título de la categoría

De esta forma, Joomla! parecerá un poquito menos Joomla!, algo que siempre procuro hacer con todo CMS: Que no se aprecie el software que hay por debajo.

¿Qué diferencias hay entre Google Chrome y Chromium?

Es posible que, al igual que a mí, os haya surgido esa duda. Si bien desde hoy tenemos a nuestra disposición Google Chrome para Linux y de Mac, hace tiempo que podíamos disfrutar de Chromium. ¿No habíamos quedado en que era lo mismo? ¿Qué diferencias hay? Voy a tratar de dar respuesta a estas dudas.

chrome_vs_chromium

Si consultamos la Wikipedia en castellano veremos que:

  • Google Chrome es un navegador web desarrollado por Google y compilado con base en componentes de código abierto [...]
  • Chromium es el proyecto de software libre detrás de Google Chrome[...]

O dicho de otra forma, Google Chrome es la compilación y el paquete que Google hace del software Chromium. Algo así como los distints paquetes que las distribuciones de GNU/Linux hacen del kernel.

Si eso es todo… ¿Qué más me da usar uno u otro? ¿No son lo mismo pero empaquetado por entidades diferentes? Bien, Google tiene una página explicativa al respecto que con vuestro permiso voy a traducir:

Chromium en Linux tiene en general dos sabores: Puedes instalar o bien Google Chrome o bien un navegador Chromium. Esta página trata de explicar la diferencia entre ambos:

Google Chrome

Google Chrome es el proyecto de software libre Chromium construído, empaquetado y distribuído por Google. Tiene las siguientes diferencias respecto a Chromium:

  • Logo coloreado
  • Opción de informe de errores
  • Opción de métrias de usuarios
  • Soporte para H.264, AAC, MP3, Vorbis y Theora con las etiquetas audio y video.
  • Aislamiento de procesos
  • Un sólo paquete deb/rpm
  • Los ficheros de los perfiles se almacenan en  ~/.config/google-chrome

La compilación del canal de desarrollo se actualiza alrededor de una vez por semana, tras pasar los test automáticos y unos pocos test manuales de garantía de calidad.

Chromium

  • Logo azul
  • Soporte para Vorbis y Theora con las etiquetas video y audio
  • El aislamiento de procesos es opcional, depende del mantenedor del paquete
  • Los paquetes dependen de la distribución, a veces se dividen en múltiples partes.
  • Los ficheros de perfiles se almacenan en ~/.config/chromium

Bien, ahora queda un poco más claro. La principal diferencia que veo yo es el soporte para los codecs de compresión de audio y vídeo. Google, como compañía, está dispuesta a pagar royalties por la licencia de la patente de dichos codecs, no así las ediciones libres.

Por otra parte, mientras nada me haga pensar lo contrario, creo que el nivel de calidad que ofrecen las distribuciones Linux en general es bastante elevado, por lo que no considero que ese hecho otorgue ventaja a Google Chrome.

¿Cuál elegir? Yo personalmente seguiré usando Chromium como navegador secundario y Firefox como primario. Principalmente para promover el uso de tecnologías libres y estándar, como son Vorbis para el audio y Theora para el vídeo.

Firefox 3.5 está en la calle, descárgatelo

firefox

Y llegó el día. A partir de hoy HTML5 poco a poco comenzará a hacerse una realidad, gracias a la nueva versión de Firefox.

Quizá no os funcionen muchas de las extensiones, pero ya corre por ahí un truco para hacerlas funcionar:

  1. Abre ‘about:config’.
  2. Clic derecho y añade un nuevo booleano llamado ‘extensions.checkCompatibility’.
  3. Asígnalo el valor false.
  4. Reinicia el navegador.

En este nuevo Firefox se ha tratado de mejorar su rendimiento, especialmente en el motor de JavaScript TraceMonkey. Por el momento esperaré ansioso los resultados del benchmark para ver si ahora funciona mejor la versión nativa de Linux que aquélla emulada por wine (Hasta ahora no sucede así).

En resumen, las novedades que trae son:

  • Mejoras de rendimiento. Sobre todo gracias a TraceMonkey
  • Vídeo y audio de código abierto. ¡Viva!
  • Privacidad. También conocido como modo porno.
  • Navegación por localización. Para compartir con las páginas nuestra ubicación.

Aquí tenéis los enlaces para descargarlo en castellano para Windows, Mac y Linux.

Precios de Windows 7

Microsoft acaba de anunciar su programa de actualizaciones a Windows 7 y los precios por licencia en EEUU. Aun no están disponibles los precios de Europa, pero viendo éstos podremos hacernos una idea de por cuánto nos saldrá.

Actualizaciones:

  • Windows 7 Home Premium: $119.99
  • Windows 7 Professional: $199.99
  • Windows 7 Ultimate: $219.99

Paquete completo:

  • Windows 7 Home Premium: $199.99
  • Windows 7 Professional: $299.99
  • Windows 7 Ultimate: $319.99

De ese modo, mantendrán exactamente los mismos precios que sus equivalentes en Windows Vista. La única diferencia es que ya no estará disponible una versión Home Basic, por lo que Windows 7 Home Premium costará $60 menos que su equivalente en Windows Vista. Personalmente se me antoja excesivamente caro, sobre todo si tenemos en cuenta que este nuevo sistema operativo pretende competir en el mercado de los netbooks. Un incremento en éstos de $200 es mucho dinero.

También informan de que los OEM incorporarán esta nueva versión a partir del próximo 22 de octubre. Estará disponible en 14 idiomas: Inglés, Español, Japonés, Alemán, Francés, Italiano, Holandés, Ruso, Polaco, Portugués (Brasil), Koreano, Chino simplificado, Chino tradicional and Chino (Hong Kong). 2 semanas después, el 31 de octubre, se presentará en 21 idiomas más.