<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ajaxman &#187; Xul</title>
	<atom:link href="http://www.ajaxman.net/tag/xul/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ajaxman.net</link>
	<description>Servicios Web, Desarrollo de aplicaciones, tutoriales sobre software</description>
	<lastBuildDate>Sun, 01 Apr 2012 06:18:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>[SongBird] El reproductor de Audio Songbird ya es Beta!!!</title>
		<link>http://www.ajaxman.net/songbird-el-reproductor-de-audio-songbird-ya-es-beta.html</link>
		<comments>http://www.ajaxman.net/songbird-el-reproductor-de-audio-songbird-ya-es-beta.html#comments</comments>
		<pubDate>Thu, 21 Aug 2008 20:01:05 +0000</pubDate>
		<dc:creator>ajaxman</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Songbird]]></category>
		<category><![CDATA[Beta]]></category>
		<category><![CDATA[Reproductor de Audio]]></category>
		<category><![CDATA[Xul]]></category>

		<guid isPermaLink="false">http://www.ajaxman.net/?p=1159</guid>
		<description><![CDATA[<p>Les cuento, esta muy agradable noticia que me acabo de enterar, y es que el reproductor de audio songbird, ha salido de ser &#8220;developer preview&#8221; a &#8220;Beta&#8221;. ¿Esto que es?, bueno que ya estamos muy cerca de conocer la versión estable, o la versión que es para usarse y que debe de funcionar muy bien, [...]</p>
 ]]></description>
			<content:encoded><![CDATA[<p>Les cuento, esta muy agradable noticia que me acabo de enterar, y es que el reproductor de audio <strong>songbird, </strong>ha salido de ser <strong>&#8220;developer preview&#8221;</strong> a <strong>&#8220;Beta&#8221;</strong>.</p>
<p>¿Esto que es?, bueno que <strong>ya estamos muy cerca de conocer la versión estable, o la versión que es para usarse</strong> y que debe de funcionar muy bien, para todos los usuarios, anteriormente estaba en <strong>&#8220;Developer preview</strong>&#8220;, osea <strong>solo era recomendable para desarrolladores ya que probablemente tendría varios errores</strong>, y hace unos dias salio la <strong>version 0.7.0</strong>, la cual ya ha salido como <strong>Beta, </strong>unos pasos previos antes de que salga la versión definitiva.</p>
<p style="text-align: center;"><img class="size-full wp-image-1160 aligncenter" src="http://www.ajaxman.net/wp-content/uploads/2008/08/summited.png" alt="Songbird 0.7.0 Beta" width="500" height="464" /></p>
<p>Dentro de la mejoras tenemos.</p>
<p><strong>Una nueva interfaz</strong></p>
<p><img class="size-full wp-image-1161 alignleft" style="margin: 10px;" src="http://www.ajaxman.net/wp-content/uploads/2008/08/07new-ui.png" alt="Songbird 0.7.0 Beta" width="180" height="110" /></p>
<p>Se ha rediseñado de nuevo la interfaz para que sea mas simple y mas fácil de usar, también han mejorado el <strong>drag &amp; drop</strong> de toda la aplicación, en este caso, aun creo que falta que se puedan mover las canciones para personalizar nuestra reproducción sin hacer una lista.</p>
<p><strong>Album Artwork</strong></p>
<p><img class="size-full wp-image-1162 alignleft" style="margin: 10px;" src="http://www.ajaxman.net/wp-content/uploads/2008/08/07album-art.png" alt="Songbird 0.7.0 Beta" width="180" height="110" /></p>
<p>Una mejora que realmente, me gusto mucho la con la cual podemos ver la imagen o portada del disco, sin necesidad de instalar ningún plugin, como antes <del datetime="2008-08-21T18:38:56+00:00">creo que</del> era.</p>
<p>Y muchas cosas mas, las cuales pueden consultar en el blog de Songbird, pero lo que me impacto bastante fue el rediseño de la interfaz, ya que la nueva se ve muy bien, muy limpia, ademas de que se ve muy estilizada, simplemente mucho mejor que la anterior, muy bien por el equipo de Songbird.</p>
<p>Desde aquí, muchas felicidades, por el paso tan importante de su reproductor, el pasar de <strong>Developer Preview a Beta</strong>, Ojala y pronto veamos la noticia de que sale la versión definitiva.</p>
<p>Mas informacion en | <a href="http://blog.songbirdnest.com/2008/08/20/songbird-beta-is-released/" target="_blank">Songbird Beta is Released!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxman.net/songbird-el-reproductor-de-audio-songbird-ya-es-beta.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Javascript-Songbird] Manipulando nuestra musica con Javascript y Songbird</title>
		<link>http://www.ajaxman.net/javascript-songbird-manipulando-nuestra-musica-con-javascript-y-songbird.html</link>
		<comments>http://www.ajaxman.net/javascript-songbird-manipulando-nuestra-musica-con-javascript-y-songbird.html#comments</comments>
		<pubDate>Thu, 06 Mar 2008 19:10:40 +0000</pubDate>
		<dc:creator>ajaxman</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Recursos]]></category>
		<category><![CDATA[Xul]]></category>

		<guid isPermaLink="false">http://www.ajaxman.net/611/javascript-songbird-manipulando-nuestra-musica-con-javascript-y-songbird/</guid>
		<description><![CDATA[<p>Cuando deseamos escuchar musica, y vemos que reprodutor usar, mucha gente suele utilizar Windows Media, otra gran mayoria suele usar iTunes, alguinos mas usan Winamp, que son los mas usados. Sin embargo la fundacion Mozilla, esta desarrollado desde hace bastante tiempo una alternativa bastante interesante, que se llama Songbird, de el cual hace algunos posts [...]</p>
 ]]></description>
			<content:encoded><![CDATA[<p>Cuando deseamos escuchar musica, y vemos que reprodutor usar, mucha gente suele utilizar Windows Media, otra gran mayoria suele usar iTunes,  alguinos mas usan Winamp, que son los mas usados.</p>
<p>Sin embargo la fundacion Mozilla, esta desarrollado desde hace bastante tiempo una alternativa bastante interesante, que se llama Songbird, de el cual hace algunos posts les platique.</p>
<p>Ahora van en la version 0.4</p>
<p><img src='http://www.ajaxman.net/wp-content/uploads/2008/03/songbird-version.jpg' alt='songbird version' /></p>
<p>Tiene muchas cosas que talvez en muchos otros podremos encontrar sin embargo algo que no podemos ver como algo importante es que es &#8220;Open source&#8221;, y que  ademas se puede personalizar a nuestros gusto.</p>
<p>Pero hay algo aun mas interesante, como esta desarrollado con XUL, se puede manipular con Javascript, claro que para esto debemos adentrarnos un poco con XUL y con SongBird.</p>
<p>Keisuke, Desarrollo un script el cual, valga la redundacia esta escrito en Javascript, muuy simple  y sencillo que nos permite mostrar en forma de un nube de tags nuestra biblioteca.</p>
<p>solo basta introducir la url del script y Songbird nos pedira confirmacion para ejecutar dicho script y listo ya tenemos nuestra nube de tags.</p>
<p><img src='http://www.ajaxman.net/wp-content/uploads/2008/03/songbird-tagcloud.png' alt='songbird nube de tags tagcloud' /></p>
<p><strong>El codigo de la pagina que se ejecuta es el siguiente</strong></p>
<p></p><pre class="crayon-plain-tag">&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;TagCloud Library View&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;./tagCloud.css&quot; /&gt;
    &lt;script type=&quot;application/javascript&quot;
            src=&quot;./tagCloud.js&quot;&gt;
    &lt;/script&gt;
  &lt;/head&gt;

  &lt;body onload=&quot;load();&quot; onunload=&quot;unload();&quot;&gt;
    &lt;div id=&quot;menu&quot;&gt;

      &lt;a class=&quot;genre&quot; href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:setCloud('genre', 'genres');&quot;&gt;Genres&lt;/a&gt;
      &lt;a class=&quot;artist&quot; href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:setCloud('artistName', 'artists');&quot;&gt;Artists&lt;/a&gt;
      &lt;a class=&quot;album&quot; href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:setCloud('albumName', 'albums');&quot;&gt;Albums&lt;/a&gt;
      &lt;a class=&quot;year&quot; href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:setCloud('year', 'years');&quot;&gt;Years&lt;/a&gt;
    &lt;/div&gt;
    &lt;div id=&quot;cloud&quot;&gt;
    &lt;/div&gt;

  &lt;/body&gt;
&lt;/html&gt;</pre><p></p>
<p><strong>Y el contenido de el archivo tagcloud.js es el siguiente</strong></p>
<p><span id="more-611"></span></p>
<p></p><pre class="crayon-plain-tag">var cloudDiv;
var clouds = new Object();
var listcache = new Array();
var siteLib = songbird.siteLibrary;
var mainLib = songbird.mainLibrary;
const SB_NS = &quot;http://songbirdnest.com/data/1.0#&quot;;

/*****************************************************************************
 *
 *  This example has 2 steps to it.
 *  1) The first step is the fetching of the cloud of items for
 *     a given 'menu' item (from tagCloud.html) - Genre, Artist, Album, Year.
 *     The entry point is setCloud() and it creates a LibraryCloud object and
 *     caches it in the clouds object for performance reasons. Currently there
 *     is a downside to this caching that means newly added tracks won't
 *     appear in the cloud until the page is re-loaded.
 *
 *     The visual output of the cloud is the final phase of this step and is
 *     generated by the dumpCloud() method which outputs the html anchor
 *     elements containing the values in the cloud.
 *
 *  2) The second step covers the clicking of an item in the cloud. That
 *     action triggers a call to setWebPlaylist. That method pulls some data
 *     from the anchor element itself to populate a medialist that contains
 *     all the tracks that match that property/value pairing. These medialists
 *     are cached in the listCache array and suffer the same downside of lack
 *     of refresh.
 *
 ****************************************************************************/

function load() {
  cloudDiv = document.getElementById(&quot;cloud&quot;);
}

function unload() {
  // remove all the garbage we just created.
  siteLib.clear();
}

// debugging
function dump(stuff) {
  cloudDiv.appendChild(document.createTextNode(stuff));
  cloudDiv.appendChild(document.createElement(&quot;br&quot;));
}

// converts a percentage to a number that will be used to define the class
// so it matches the class names in tagCloud.css
function percentToClassNum( aPercent ) {
    var classNum = 0;
    if (aPercent &gt;= 99)
      classNum = 1;
    else if (aPercent &gt;= 70)
      classNum = 2;
    else if (aPercent &gt;= 60)
      classNum = 3;
    else if (aPercent &gt;= 50)
      classNum = 4;
    else if (aPercent &gt;= 40)
      classNum = 5;
    else if (aPercent &gt;= 30)
      classNum = 6;
    else if (aPercent &gt;= 20)
      classNum = 7;
    else if (aPercent &gt;= 10)
      classNum = 8;
    else if (aPercent &gt;= 5)
      classNum = 9;

    return classNum;
}

function LibraryCloud( aPropertyName ) {
  this.propName = aPropertyName;
  this.values = new Array();
  this.numItems = 0;
  this.populateCloud();
}

// A cloud is the data representation for a particular property (propName)
// and all the values (and their frequency) in the main library.
LibraryCloud.prototype = {
  SB_NS: &quot;http://songbirdnest.com/data/1.0#&quot;,
  propName: &quot;&quot;,
  values: null,

  // this method gets all the possible values for a property and then
  // counts the occurences of each. It then uses the count to generate
  // a class number that will correspond to css which will size the display.
  populateCloud: function() {
    var valueEnum =
      mainLib.getDistinctValuesForProperty( this.SB_NS + this.propName );
    while ( valueEnum.hasMore() ) {
      var propValue = valueEnum.getNext();
      this.currentPropValue = propValue;
      this.values[propValue] = new Array();
      this.values[propValue].name = propValue;
      this.values[propValue].numItems = 0;
      mainLib.enumerateItemsByProperty( this.SB_NS + this.propName,
                                        propValue, this, 1 );
    }
    for each ( var item in this.values ) {
      item.percentage =
        Math.floor(( item.numItems / this.numItems ) * 100);
      item.classNum = percentToClassNum(item.percentage);
    }
  },

  // implementation of enumeration listener to count the items
  onEnumerationBegin: function() {
  },
  onEnumeratedItem: function(list, item) {
    this.values[this.currentPropValue].numItems += 1;
    this.numItems += 1;
  },
  onEnumerationEnd: function() {
  }
}

// Generate anchor DOM elements for all the values in a library cloud
// and push them into the specified div.
function dumpCloud( aLibraryCloud, aCloudDiv ) {
  aCloudDiv.innerHTML = &quot;&quot;;
  for each ( var item in aLibraryCloud.values ) {
    var span = document.createElement(&quot;span&quot;);
    span.innerHTML = &quot; &lt;a class='size&quot; + item.classNum + &quot;' &quot; +
                     &quot;href='javascript:void(0);' &quot; +
                     &quot;propName='&quot; + aLibraryCloud.propName + &quot;' &quot; +
                     &quot;propKey='&quot; + SB_NS + aLibraryCloud.propName + &quot;?val=&quot; + item.name + &quot;' &quot; +
                     &quot;onclick='javascript:setWebPlaylist(this);'&gt;&quot; +
                     item.name +
                     &quot;&lt;/a&gt; &quot;;
    aCloudDiv.appendChild(span);
  }
}

// builds up the medialist to display - we're taking items from the main
// library and adding them to a mediaList from the site library so we can't
// test to see if they exist already because that does a GUID check and the
// item will never match because at the data model we are referring to 2
// different items.
var listener = {
  _list: null,
  onEnumerationBegin: function() {
    // XXXredfive - name of list really should be the propkey
    //              but that is causing duplicate items in the list because
    //              we can't compare across libraries for containment.
    this._list = siteLib.createSimpleMediaList(Date());
  },
  onEnumeratedItem: function(list, item) {
    if ( this._list ) {
      // XXXredfive - should check to see if item is in list before adding but
      //              the item is mainLib and the list is siteLib
      this._list.add(item);
    }
  },
  onEnumerationEnd: function() {
  }
};

// called by the link from one of the property values in the cloud
function setWebPlaylist(aAnchor) {
  var prop = SB_NS + aAnchor.getAttribute(&quot;propName&quot;);
  var propkey = aAnchor.getAttribute(&quot;propKey&quot;);

  // use the cached list if there is one - it never gets refreshed
  if ( typeof( listcache[propkey] ) != &quot;undefined&quot; ) {
    songbird.webPlaylist.mediaList = listcache[propkey];
    return;
  }

  // populate the list by iterating over the items with the property/value
  // value that we're asking for. listener does the work
  mainLib.enumerateItemsByProperty( prop, aAnchor.innerHTML, listener, 1 );

  // Cache the mediaList for quick access on subsequent loads.
  listcache[propkey] = listener._list;

  // Set the list as the web playlist.
  songbird.webPlaylist.mediaList = listcache[propkey];
}

// entry point from the 'menu' links
function setCloud( aPropertyName, aPropertyEnumName ) {
  // Cache the clouds for quick look-up. Property values won't get seen until
  //   a refresh of the page.
  if ( typeof( clouds[aPropertyName] ) == &quot;undefined&quot; )
    clouds[aPropertyName] = new LibraryCloud(aPropertyName);
  // XXXredfive - could be an else case here that does a refresh on the cloud
  //              to make sure it has all the current values for the property

  // Display the tag cloud of values for the property name.
  dumpCloud( clouds[aPropertyName], cloudDiv );

}</pre><p></p>
<p>Les deje el codigo para que vean como es muy sencillo hacer grandes cosas con Javascript,Ajax y Xul.</p>
<p>Gracias a Mozilla por darnos tanto poder usando solo Javascript</p>
<p>Mas Informacion de estos temas sobre Songbird en | <a href="http://www.songbirdnest.com/node/2797">Blog de Songbird en ingles</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxman.net/javascript-songbird-manipulando-nuestra-musica-con-javascript-y-songbird.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Manual]Programando aplicaciones con XUL: Botones</title>
		<link>http://www.ajaxman.net/manualprogramando-aplicaciones-con-xul-botones.html</link>
		<comments>http://www.ajaxman.net/manualprogramando-aplicaciones-con-xul-botones.html#comments</comments>
		<pubDate>Wed, 21 Nov 2007 06:34:14 +0000</pubDate>
		<dc:creator>ajaxman</dc:creator>
				<category><![CDATA[Descargas]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Xul]]></category>

		<guid isPermaLink="false">http://www.ajaxman.net/423/manualprogramando-aplicaciones-con-xul-botones/</guid>
		<description><![CDATA[<p>Capitulo 2: Bien continuemos con nuestro manual de XUL, ya sabemos como hacer un Hola mundo, en Xul, así que hagamoslo mas interesante. Ahora vamos a trabajar con botones(recuerden que aqui no hay visual studio jaja). Botones en XUL Para que podamos interactuar con nuestro entorno es necesario disponer de botones, como cualquier otro lenguaje [...]</p>
 ]]></description>
			<content:encoded><![CDATA[<p>Capitulo 2:</p>
<p>Bien continuemos con nuestro manual de XUL, ya sabemos como hacer un Hola mundo, en Xul, así que hagamoslo mas interesante.</p>
<p>Ahora vamos a trabajar con botones(<del datetime="2007-11-15T20:14:08+00:00">recuerden que aqui no hay visual studio jaja</del>).</p>
<p><strong>Botones en XUL</strong></p>
<p>Para que podamos interactuar con nuestro entorno es necesario disponer de botones, como cualquier otro lenguaje de programación, de la misma forma que HTML, tambien XUL, dispone de una serie de etiquetas para crear los elementos de las interfaces de los usuarios.</p>
<p>Estos botones estan basados en la mas basica de estas etiquetas, esta es llamada <strong>Plantilla:XULElem</strong> que nos servira para crear un boton.</p>
<p class="info">Cada elemento de tipo Boton, tiene dos propiedades asociadas <em>label e image</em>, mutuamente compatibles, se pueden tener un boton con imagen y/o con etiqueta</p>
<p>La etiqueta Plantilla:XULElement usa la siguiente sintaxis</p>
<p></p><pre class="crayon-plain-tag">&amp;lt;button id=&amp;quot;identificador&amp;quot;&amp;gt;
 label=&amp;quot;Aceptar&amp;quot;
 image=&amp;quot;imagenes/imagen.jpg&amp;quot;
 disabled=&amp;quot;true&amp;quot;
 accesskey=&amp;quot;t&amp;quot;/&amp;gt;</pre><p></p>
<p>Cabe mencionar que todos estos atributos son opcionales y aceptan los siguientes datos.</p>
<ul>
<li><strong>id</strong>:Un identificador único (dentro de la página actual) que represente de forma inequívoca al botón. Es muy útil para referirse al botón desde una hoja de estilos CSS o desde un script de código, por ejemplo. Es recomendable rellenar este atributo en todas las etiquetas que uno declare.</li>
<li><strong>class</strong>: Este atributo se refiere a que a un boton se le puede asignar una clase, con la cual le aplicaremos cierto estilo, usando CSS, como si fuera HTML, aunque no es necesario usar una clase, para poder aplicar estilos en los botones.</li>
<li> <strong>label</strong>: Este atributo se refiere a el texto que mostrara nuestro boton, si lo dejamos en blanco, simplemente no tendra texto.</li>
<li> <strong>image</strong>: El atributo image nos indica que imagen aparecera dentro del boton, claro si deseamos usar alguna imagen, si no se le indica alguna imagen simplemente nos aparecera sin ella, tambien se le puede especifiar una imagen a un boton mediante una hoja de estilos usando <strong>list-style-image</strong>.</li>
<li> <strong>disabled</strong>: Esta opcion creo que ya todos (o casi) la conocemos, esta opcion se refiere a que si  la indicamos como <em>true</em>, el boton estara deshabilitado (no respondera a los click&#8217;s),  y si lo ponemos como <em>false</em> el boton estara habilitado,  si no se indica, el boton siempre estara habilitado.</li>
<li><strong>acceskey</strong>: con este atributo, le podemos indicar que reaccione a cierta tecla de atajo (o tecla de acceso directo), con la cual le pasaremos el foco, a este elemento , que en este caso es el boton.</li>
</ul>
<p>Aqui tenemos un ejemplo, de como quedaria nuestro archivo main.xul<br />
<span id="more-423"></span></p>
<p></p><pre class="crayon-plain-tag">&amp;lt; ?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt; ?xml-stylesheet href=&amp;quot;chrome://global/skin/&amp;quot; type=&amp;quot;text/css&amp;quot;?&amp;gt;
 &amp;lt;button id=&amp;quot;boton_buscar&amp;quot;&amp;gt;

&amp;lt;/button&amp;gt;</pre><p></p>
<p>Recuerden usar los ejemplos de los capitulos anteriores para poder ir armando sus aplicaciones.</p>
<p>Les dejo el ejemplo, como siempre funcionando.</p>
<p><a title="Ejemplos de botones en XUL" href="http://www.ajaxman.net/wp-content/uploads/2007/11/botones.zip">Ejemplos de botones en XUL</a></p>
<p>Basado en | <a href="http://developer.mozilla.org/es/docs/Tutorial_de_XUL:A%C3%B1adiendo_botones">Desarrollo con xul mozilla</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxman.net/manualprogramando-aplicaciones-con-xul-botones.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Mozilla Prism] Paginas web como aplicaciones de escritorio</title>
		<link>http://www.ajaxman.net/mozilla-prism-paginas-web-como-aplicaciones-de-escritorio.html</link>
		<comments>http://www.ajaxman.net/mozilla-prism-paginas-web-como-aplicaciones-de-escritorio.html#comments</comments>
		<pubDate>Mon, 29 Oct 2007 20:44:27 +0000</pubDate>
		<dc:creator>ajaxman</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Xul]]></category>

		<guid isPermaLink="false">http://www.ajaxman.net/383/mozilla-prims-paginas-web-como-aplicaciones-de-escritorio/</guid>
		<description><![CDATA[<p>Via anieto2k me entero de Mozilla Prism, una Herramienta que saco la fundacion Mozilla, la cual nos permitira ejecutar paginas web como si se trataran de Aplicaciones de escritorio, copio y pego los detalles. ¿Qué és? Prism, antes conocido como Webrunner, es un sistema capaz de simular aplicaciones de escritorio apartir de aplicaciones web. Recibe [...]</p>
 ]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://www.anieto2k.com">anieto2k</a> me entero de <a href="http://labs.mozilla.com/2007/10/prism/">Mozilla Prism</a>, una Herramienta que saco la fundacion Mozilla, la cual nos permitira ejecutar paginas web como si se trataran de Aplicaciones de escritorio, copio y pego los detalles.</p>
<p><img src='http://www.ajaxman.net/wp-content/uploads/2007/10/prismlogo400.png' alt='' /></p>
<p><strong>¿Qué és?</strong></p>
<p>Prism, antes conocido como Webrunner, es un sistema capaz de simular aplicaciones de escritorio apartir de aplicaciones web. Recibe el nombre del famoso experimento de Issac Newton en el que descompuso la luz solar, haciendo una analogía a este experimento en el que transforma cualquier aplicación web en un haz de aplicaciones</p>
<p><img src='http://www.ajaxman.net/wp-content/uploads/2007/10/startmenu550.png' alt='mozilla prism'  width="499" height="320" /></p>
<p><strong>Como funciona</strong></p>
<p> XULRunner es el corazón de Prism, al igual que el de Firefox. Ya que él se encarga de ejecutar las páginas XUL que componen el interface de Firefox. De igual forma Prism, se encarga de crear plantillas en XUL con nuestras aplicaciones para ejecutarlas posteriormente.</p>
<p><img src='http://www.ajaxman.net/wp-content/uploads/2007/10/refracting550.png' alt='mozilla prism'  width="499" height="320"/></p>
<p><span id="more-383"></span></p>
<p><strong>Algunas aplicaciones</strong></p>
<p>Para XULRunner podemos encontrar una <a href="http://developer.mozilla.org/en/docs/XULRunner_Hall_of_Fame">serie de aplicaciones</a> ya existentes que nos permiten interactuar con la red, desde nuestro propio escritorio sin necesidad de disponer de ningún navegador.</p>
<p>Mas info en | <a href="http://www.anieto2k.com/2007/10/29/mozilla-prism-convierte-cualquier-pagina-en-una-aplicacion/">Mozilla prism convierte cualquier pagina en una aplicacion</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxman.net/mozilla-prism-paginas-web-como-aplicaciones-de-escritorio.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>[Manual]Programando aplicaciones con XUL capitulo 1</title>
		<link>http://www.ajaxman.net/manualprogramando-aplicaciones-con-xul-capitulo-1.html</link>
		<comments>http://www.ajaxman.net/manualprogramando-aplicaciones-con-xul-capitulo-1.html#comments</comments>
		<pubDate>Sun, 21 Oct 2007 19:00:30 +0000</pubDate>
		<dc:creator>ajaxman</dc:creator>
				<category><![CDATA[Ajaxman]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Xul]]></category>

		<guid isPermaLink="false">http://www.ajaxman.net/360/manualprogramando-aplicaciones-con-xul-capitulo-1/</guid>
		<description><![CDATA[<p>Ahora si empezaremos con lo bueno de XUL, haber hasta donde logramos llegar. Ya sabemos que es XUL, y a pesar de servir para hacer extensiones para Firefox, Thunderbird, Songbird, etc. Nosotros lo usaremos para realizar aplicaciones de escritorio primero sencillas aprendiendo los controles y posteriormente aplicaciones mas profesionales. Empecemos. CREACION DE UN HOLA MUNDO [...]</p>
 ]]></description>
			<content:encoded><![CDATA[<p>Ahora si empezaremos con lo bueno de XUL, haber hasta donde logramos llegar.</p>
<p>Ya sabemos que es XUL, y a pesar de servir para hacer extensiones para Firefox, Thunderbird, Songbird, etc. Nosotros lo usaremos para realizar aplicaciones de escritorio primero sencillas aprendiendo los controles y posteriormente aplicaciones mas profesionales.</p>
<p>Empecemos.</p>
<p>CREACION DE UN HOLA MUNDO EN WINDOWS (XP, no probado en vista).</p>
<p>Recomendacion: De preferencia no uses windows vista, ya que Xulrunner, no lo he probado en ese sistema y es probable que te de fallos, usa XP en este caso.</p>
<p>Bien primero necesitamos bajarnos el Xul Runner, que viene siendo algo asi como la maquina virtual de java, pero en este caso es para ejecutar aplicaciones xul.</p>
<p>Para bajarlo iremos a la siguiente dirección web <a href="http://developer.mozilla.org/es/docs/XULRunner">http://developer.mozilla.org/es/docs/XULRunner</a>, y desde ahi podemos bajarnos el XUlRunner que en este caso corresponde a la versión 1.0.8.1, version conocida como pre-version estable, esta disponibles hasta el momento 3 opciones de descarga.</p>
<p>Para Linux, Windows y Mac OSx, si desean las cosas mas rapidamente aqui les pongo los enlaces de descarga directa.</p>
<p>Descargar XulRunner para Windows: <a  href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.8.0.1/win32/en-US/xulrunner-1.8.0.1.en-US.win32.zip">Aqui</a><br />
Descargar XulRunner para Linux: <a  href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.8.0.1/linux-i686/en-US/xulrunner-1.8.0.1.en-US.linux-i686.tar.gz">Aqui</a><br />
Descargar XulRunner para Mac OS X: <a  href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/1.8.0.1/mac/en-US/xulrunner-1.8.0.1.en-US.mac.dmg">Aqui</a></p>
<p>Bien ya que lo tenemos descargado procedemos a descomprimirlo, en mi caso lo realizare en la unidad D:<br />
<span id="more-360"></span><br />
Quedando de esta forma en D:xulrunner, los siguientes archivos.</p>
<p>[source:java]<br />
 Directorio de D:xulrunner</p>
<p>21/10/2007  11:24 a.m.    <dir>          .<br />
21/10/2007  11:24 a.m.    <dir>          ..<br />
26/01/2006  08:42 a.m.             8,314 AccessibleMarshal.dll<br />
21/10/2007  11:24 a.m.    <dir>          chrome<br />
21/10/2007  11:24 a.m.    <dir>          components<br />
21/10/2007  11:24 a.m.    <dir>          defaults<br />
26/01/2006  08:37 a.m.                48 dependentlibs.list<br />
26/01/2006  08:39 a.m.            10,894 GenerateJavaInterfaces.exe<br />
21/10/2007  11:24 a.m.    <dir>          greprefs<br />
26/01/2006  08:40 a.m.             4,825 javaxpcom.jar<br />
26/01/2006  08:42 a.m.             8,826 javaxpcomglue.dll<br />
26/01/2006  08:42 a.m.           414,303 js3250.dll<br />
05/10/1999  07:14 p.m.            30,869 LICENSE<br />
26/01/2006  08:42 a.m.           194,686 mozctl.dll<br />
26/01/2006  08:42 a.m.             7,814 mozctlx.dll<br />
26/01/2006  08:42 a.m.           155,750 nspr4.dll<br />
26/01/2006  08:42 a.m.           364,638 nss3.dll<br />
26/01/2006  08:42 a.m.           237,669 nssckbi.dll<br />
26/01/2006  08:42 a.m.            28,779 plc4.dll<br />
26/01/2006  08:42 a.m.            24,678 plds4.dll<br />
21/10/2007  11:24 a.m.    <dir>          plugins<br />
12/03/2004  10:25 p.m.             9,542 README.txt<br />
21/10/2007  11:24 a.m.    <dir>          res<br />
21/10/2007  11:24 a.m.    <dir>          sdk<br />
26/01/2006  08:42 a.m.           106,594 smime3.dll<br />
26/01/2006  08:42 a.m.               476 softokn3.chk<br />
26/01/2006  08:42 a.m.           364,646 softokn3.dll<br />
26/01/2006  08:42 a.m.           110,686 ssl3.dll<br />
26/01/2006  08:34 a.m.           123,004 updater.exe<br />
26/01/2006  08:42 a.m.             7,778 xpcom.dll<br />
26/01/2006  08:34 a.m.            63,598 xpicleanup.exe<br />
26/01/2006  08:42 a.m.         7,133,797 xul.dll<br />
26/01/2006  08:41 a.m.             9,839 xulrunner-stub.exe<br />
26/01/2006  08:41 a.m.            81,001 xulrunner.exe</p>
<p>[/source]</p>
<p>Una vez teniendo esto  vamos a escribir nuestro proyecto &#8220;holamundo&#8221;, nuevamente trabajare en D: ,les recomiendo ampliamente que trabajen en raiz ya sea en C:, D: , e: etc, pero no en el escritorio o en mis documentos ya que esto les confundira con las rutas o paths que usaremos.</p>
<p>Hagamos Una carpeta en <strong>D: llamada XUL</strong>, no es necesario que se llame asi pero si es muy recomendable.</p>
<p>Una vez ahi creamos nuestra carpeta del proyecto la cual debera llevar el mismo nombre que el nombre de la aplicacion en este caso se llamara holamundo.</p>
<p>Dentro de la carpeta anterior (holamundo) crearemos 2 carpetas mas una llamada &#8220;<strong>chrome</strong>&#8221; y otra &#8220;<strong>defaults</strong>&#8220;, en este caso estas carpetas si son necesarias y obligatorias, ademas crearemos tambien un archivo llamado &#8220;<strong>applicacion.ini</strong>&#8221; este lo creamos con el block de notas o algo similar, revisen que el archivo realmente tenga la extension <strong>.ini</strong>.</p>
<p>De esta forma tenemos.</p>
<p>D:XULholamundo<br />
  |<br />
  &#8212;&#8211; application.ini<br />
  |<br />
  |<br />
  &#8212;&#8212;chrome/<br />
  |<br />
  |<br />
  &#8212;&#8212;defaults/</p>
<p>Ahora veamos que contendra el archivo <strong>application.ini</strong>.</p>
<p>Nota: para poner comentarios en el archivo application.ini es necesario poner punto y coma (;) la pricipio de la linea</p>
<p>[source:java]</p>
<p>[App]<br />
; Nombre de la organizacion que distribuira la aplicacion , no es necesario pero es recoemndable ponerlo<br />
;opcional<br />
Vendor=Ajaxman<br />
;<br />
; Nombre de la aplicacion<br />
; Requerido<br />
Name=holamundo<br />
;<br />
; Version de la aplicacion<br />
;Opcional<br />
Version=1.0<br />
;<br />
; Campo de fecha de creacion el cual sirve como ID esta en formato &#8220;timestamp&#8221; , es requerido<br />
;<br />
BuildID=20060101<br />
;<br />
; Derechos de la aplicacion<br />
; opcional<br />
Copyright= Creative commons</p>
<p>[Gecko]<br />
;<br />
; Este campo dice que version de motor Gecko (XulRunner) necesitaremos para ejecutar la aplicación<br />
; Requerida<br />
MinVersion=1.8<br />
;<br />
; Este campo dice que version sera la maxima version que aceptara nuestra aplicacion en este caso es opcionaly no la pondre<br />
;<br />
;<br />
;MaxVersion=1.8</p>
<p>[/source]</p>
<p>Bien ahora dentro de la carpeta &#8220;chrome&#8221;, creamos un archivo llamado  &#8220;chrome.manifest&#8221; , es obligatorio tambien crear este archivo.<br />
el cual contendra lo siguiente<br />
<strong><br />
content holamundo file:content/</strong></p>
<p>Con esto le indicamos que el archivo Xul que usara estara en la carpeta content, dentro de nuestra aplicacion XUL.<br />
Obviamente necesitaremos crear tambien la carpeta &#8220;content&#8221;, y dentro de esta carpeta crearemos nuestro archivo XUL.</p>
<p>El archivo se llamara &#8220;main.xul&#8221; y ahora agregemos el contendido</p>
<p>[source:xml]</p>
<p><?xml version="1.0"?><br />
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?></p>
<p><window id="main" title="Mi primera aplicacion con XUL" width="300" height="300" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"></p>
<caption label="Hola mundo"/>
</window></p>
<p>[/source]</p>
<p>Como vemos basicamente se trata de un XML,  lo unico que destacaremos que es para crear una ventana necesitamos usar la TAG window, por el momento no entraremos en mas detalles podemos ir experimentando posteriormente pero de momento lo dejaremos asi.<br />
y le agrege tambien un tag &#8220;caption label&#8221; que no hara otra cosa mas que mostarnos dentro de nuestra ventana XUL, el texto &#8220;Hola mundo&#8221;</p>
<p>Ahora en en la carpeta &#8220;defaults&#8221; que creamos anteriormente, creamos otroa carpeta llamada &#8220;<strong>preferences</strong>&#8221;</p>
<p>Y dentro de esta carpeta creamos un archivo llamado &#8220;<strong>prefs.js</strong>&#8221; el cual contendra lo siguiente</p>
<p><strong>pref(&#8220;toolkit.defaultChromeURI&#8221;, &#8220;chrome://holamundo/content/main.xul&#8221;);</strong></p>
<p>este archivo tiene las preferencias en este caso es donde tenemos nuestro achivo de inicio XUL</p>
<p>Ahora bien ejecutemos nuestra aplicacion</p>
<p><strong>En la carpeta que guardara nuestra aplicacion el nombre debe ser con  minusculas no usen mayusculas si no, no jalara ejemplo. usen holamundo en lugar de Holamundo y similares<br />
</strong></p>
<p>Para  correrlo nos pasamos a la carpeta xulrunner y desde ahi lo ejecutamos de la siguiente manera.</p>
<p><strong>D:xulrunnerxulrunner.exe D:XULholamundoapplication.ini</strong></p>
<p>De esta forma nos mostrara nuestra primera aplicacion xul ,y notaran que se trata de una ventana estandar de Windows, la cerramos y listo ya creamos nuestra pirmera aplicacion con XUL.</p>
<p>Pueden Descargar el ejemplo que use desde aqui <a href='http://www.ajaxman.net/wp-content/uploads/2007/10/holamundo.zip' title='Hola mundo en XUL'>Hola mundo en XUL</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxman.net/manualprogramando-aplicaciones-con-xul-capitulo-1.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Xul parte 2: Estructura XUL</title>
		<link>http://www.ajaxman.net/xul-parte-2-estructura-xul.html</link>
		<comments>http://www.ajaxman.net/xul-parte-2-estructura-xul.html#comments</comments>
		<pubDate>Fri, 28 Sep 2007 15:07:39 +0000</pubDate>
		<dc:creator>ajaxman</dc:creator>
				<category><![CDATA[Ajaxman]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Xul]]></category>

		<guid isPermaLink="false">http://www.ajaxman.net/283/xul-parte-2-introduccion/</guid>
		<description><![CDATA[<p>Ahora veremos como se procesara xul por parte de Mozilla &#8230;. Cómo se procesa XUL En Mozilla, XUL se procesa en forma similar al procesamiento de HTML y otros tipos de contenido. Cuando el usuario escribe la URL de una página HTML en el campo de dirección del navegador, éste busca el sitio web y [...]</p>
 ]]></description>
			<content:encoded><![CDATA[<p>Ahora veremos como se procesara xul por parte de Mozilla &#8230;.</p>
<p><strong>Cómo se procesa XUL </strong></p>
<p>En Mozilla, XUL se procesa en forma similar al procesamiento de <a href="http://developer.mozilla.org/es/docs/HTML" title="HTML">HTML</a> y otros tipos de contenido. Cuando el usuario escribe la URL de una página HTML en el campo de dirección del navegador, éste busca el sitio web y descarga su contenido. El motor de presentación de Mozilla toma el contenido en el formato HTML y lo transforma en un árbol de documento. Este árbol se convierte en un conjunto de objetos que pueden mostrarse en la pantalla. Los estilos <a href="http://developer.mozilla.org/es/docs/CSS" title="CSS">CSS</a>, imágenes y otras tecnologías son usados para controlar la presentación. El procesamiento de XUL es muy similar.</p>
<p>De hecho, en Mozilla, todos los tipos de documento, sin importar si son HTML, XUL o aún <a href="http://developer.mozilla.org/es/docs/SVG" title="SVG">SVG</a> son procesados por el mismo código. Esto significa que las mismas propiedades CSS pueden usarse para definir el estilo tanto del HTML como de XUL, y muchas de las características pueden compartirse entre ambos. Sin embargo, hay características que son específicas del HTML como son los formularios, y otras que son específicas de XUL como son los <strong>overlays</strong> (revestimientos). Ya que XUL y HTML se procesan de la misma forma, se pueden cargar desde el sistema de archivos local del usuario, desde una página web, desde una extensión del navegador o desde una aplicación <a href="http://developer.mozilla.org/es/docs/XULRunner" title="XULRunner">XULRunner</a>.</p>
<p>El contenido de fuentes remotas, como por ejemplo: <tt>http://localhost/~username/</tt>, sin importar si es HTML, XUL o cualquier otro tipo de documento, está limitado en la clase de operaciones que pueden realizar, por razones de seguridad. Por este motivo, Mozilla proporciona un método para instalar contenido en forma local y registrar los archivos instalados para que formen parte del sistema chrome. Esto permite usar una URL especial llamada la URL <code>chrome://</code>. Al acceder a un archivo usando la URL chrome, éstos reciben privilegios para acceder a archivos locales, preferencias, marcadores de página y ejecutar otras operaciones privilegiadas. Obviamente, las páginas web no obtienen estos privilegios, a menos que estén firmadas con un certificado digital y el usuario dé el permiso para ejecutar estas operaciones.</p>
<p>Este registro en el paquete chrome es la forma en la que las extensiones de Firefox pueden añadir características al navegador. Las extensiones son pequeños paquetes con archivos XUL, Javascript, hojas de estilo e imágenes empaquetados en un sólo archivo. Este archivo puede crearse usando una utilidad ZIP. Cuando el usuario descarga la extensión, ésta es instalada en su máquina. La extensión se ensambla en el navegador usando una característica especial de XUL llamada overlay (revestimiento), la cual permite que se combinen el XUL de la extensión y el XUL del navegador. Para el usuario, puede parecer que la extensión ha modificado al navegador, pero en realidad el código está separado y la extensión se puede desinstalar fácilmente.<br />
<span id="more-283"></span></p>
<p>Por supuesto, no es necesario que los paquetes registrados usen revestimientos. Si no los usan, no se puede acceder a ellos desde la interfaz del navegador, pero sí por medio de la URL chrome, si se sabe cuál es.</p>
<p>Las aplicaciones XUL autónomas (que no necesitan el navegador) pueden incluir código XUL de la misma forma, pero este código se incluirá como parte de la instalación, en lugar de tener que instalarse de forma separada como una extensión. Sin embargo, este código XUL debe ser registrado en el sistema chrome de tal forma que las aplicaciones puedan mostrar la UI.</p>
<p>Vale la pena anotar que el navegador Mozilla realmente es un conjunto de paquetes que contienen archivos XUL, JavaScript y hojas de estilo. Estos paquetes son accesibles usando una URL chrome, tienen privilegios ampliados y trabajan como cualquier otro paquete. Por supuesto, el navegador es más grande y más sofisticado que la mayoría de las extensiones. Firefox, Thunderbird y muchos otros componentes también están escritos en XUL y se puede acceder a ellos usando la URL chrome. Se puede examinar estos paquetes mirando el directorio chrome donde Firefox o cualquier otra aplicación XUL esté instalada.</p>
<p>La URL chrome siempre comienza por &#8216;chrome://&#8217;. De la misma forma que la URL <code>'http://'</code> se refiere a sitios web remotos accesibles por medio de HTTP y la URL <code>'file://'</code> siempre se refiere a archivos locales, la URL <code>'chrome://'</code> se refiere a los paquetes y extensiones instalados. En la próxima sección veremos con detalles la sintaxis de la URL chrome. Es importante anotar que si se accede a un contenido a través de una URL chrome, éste gana los privilegios ampliados que se han mencionado anteriormente y que otras clases de URL no tienen. Por ejemplo, una URL HTTP no tiene ningún privilegio especial, y ocurrirá un error si la página web intenta leer un archivo local. Sin embargo, un archivo cargado por medio de una URL chrome podrá leer archivos sin restricciones.</p>
<p>Esta diferenciación es importante. Significa que hay ciertas cosas que el contenido de las páginas web no puede hacer, tales como leer los marcadores de página del usuario. Esta diferenciación no está basada en la clase de contenido a ser mostrado, sólo en el tipo de URL empleada. Tanto el HTML como el XUL colocados en un sitio web no tienen permisos adicionales, sin embargo si el HTML o el XUL son cargados por medio de una URL chrome tendrán permisos ampliados.</p>
<p>Si Ud. va a usar XUL en un sitio web, debe colocar el archivo XUL en el sitio web tal como lo haría con un archivo HTML, y luego cargar su URL en el navegador (<tt>http://localhost/xul.php</tt>). Debe asegurarse que el servidor web esté configurado para enviar los archivos XUL con el tipo de contenido de <strong>application/vnd.mozilla.xul+xml</strong> (con PHP sería: <code>header('content-type: application/vnd.mozilla.xul+xml');</code>). Este tipo de contenido permite a Mozilla diferenciar entre HTML y XUL. Mozilla no usa la extensión del archivo, a menos que esté leyendo archivos del disco local, pero se debería usar la extensión <tt>.xul</tt> para todos los archivos XUL. Es posible abrir archivos XUL desde el navegador o el gestor de archivos.<br />
<span class="nocommentsadd2">Recuerde que los archivos XUL remotos tienen restricciones significativas sobre lo que pueden hacer.</span></p>
<p><strong>Tipos de documentos: HTML XML XUL CSS</strong><br />
Mozilla emplea una clase totalmente diferente de objeto de documento (<a href="http://developer.mozilla.org/es/docs/DOM" title="DOM">DOM</a>) para el HTML y el XUL, aunque compartan mucha funcionalidad. En Mozilla existen tres tipos principales de documentos: HTML, XML y XUL. Naturalmente, el documento HTML se usa para los documentos HTML, el documento XUL se utiliza en los documentos XUL y el documento XML se emplea para otros tipos de documentos XML. Ya que el formato XUL también es XML, el documento XUL es una subclase del documento XML que es más genérico. Existen diferencias sutiles de funcionalidad. Por ejemplo, mientras los controles de un formulario en HTML es accesible por medio de la propiedad <code>document.forms</code>, en los documentos XUL no está disponible ya que XUL no tiene formularios en el mismo sentido que HTML. De otro lado, características específicas de XUL como los revestimientos y las plantillas sólo están disponibles en los documentos XUL.</p>
<p>La distinción entre documentos es importante. Es posible usar muchas características de XUL en documentos HTML o XML ya que no son específicas al tipo de documento, sin embargo, otras características requieren un tipo de documento específico. Por ejemplo, se pueden usar los tipos de disposición de XUL en otros documentos ya que no dependen del tipo de documento XUL para funcionar.</p>
<p>Para resumir los puntos expuestos anteriormente:</p>
<ul>
<li> Mozilla muestra el <a href="http://developer.mozilla.org/es/docs/HTML" title="HTML">HTML</a> y el <a href="http://developer.mozilla.org/es/docs/XUL" title="XUL">XUL</a> con el mismo motor de resultado y emplea <a href="http://developer.mozilla.org/es/docs/CSS" title="CSS">CSS</a> para especificar su presentación.</li>
<li> XUL puede cargarse desde un sitio remoto, desde el sistema de archivos local o ser instalado como un paquete y ser accesible con una URL chrome. Esto es lo que hacen las extensiones del navegador.</li>
<li> Las URL chrome sirven para acceder a los paquetes instalados y abrirlos con privilegios ampliados.</li>
<li> HTML, XML y XUL cada uno representa un diferente tipo de documento. Algunas características se pueden usar en cualquier tipo de documento, mientras que otras son específicas de un tipo de documento.</li>
</ul>
<p>En las próximas secciones describiremos la estructura básica de un paquete chrome que será instalado dentro de Mozilla. Sin embargo, si desea comenzar a construir una aplicación simple, puede saltar a <a href="http://developer.mozilla.org/es/docs/Tutorial_de_XUL:Creando_una_ventana" title="Tutorial de XUL:Creando una ventana">creando una ventana</a> y volver más tarde.</p>
<p><strong>Organización del paquete</strong></p>
<p>Mozilla está organizado de tal forma que te permite tener tantos componentes pre-instalados como quieras. Cada extensión es, además, un componente con un chrome URL distinto. Además tendrá un componente para cada tema o configuración regional instalado. Cada uno de estos componentes o paquetes, está compuesto de un conjunto de ficheros que describen la interfaz de usuario para cada uno. Por ejemplo, el componente de mensajería tendrá descripciones de la ventana de listado de mensajes de correo, la ventana de composición y los cuadros de la libreta de direcciones.</p>
<p>Los paquetes que vienen con Mozilla están localizados en la carpeta chrome, que puedes encontrar en el directorio donde instalaste Mozilla. La carpeta chrome es donde encontrarás todos estos archivos que describen la interfaz de usuario para el navegador Mozilla, el cliente de correo y para otras aplicaciones. Habitualmente pondrás todos los archivos XUL para una aplicación en esta carpeta, excepto para las extensiones, que serán instaladas en la carpeta de extensiones de un usuario concreto. El simple hecho de copiar un archivo XUL a la carpeta &#8216;chrome&#8217; no proporcionará al archivo ningún permiso extra ni será accesible a través de chrome URL. Para conseguir estos privilegios extras, tendrás que crear un archivo manifest y ponerlo en la carpeta chrome. Este archivo es fácil de crear, y habitualmente sólo contiene un par de líneas de código. Se usa para enlazar un chrome URL a un archivo o ruta de una carpeta del disco donde están los archivos XUL. Detalles de cómo crear este archivo serán vistos en la siguiente sección.</p>
<p>La única forma de acceder a contenido a través de una URL chrome es crear un paquete como se describe en las siguientes secciones. Esta carpeta se denomina &#8216;chrome&#8217; porque parece ser un nombre conveniente para el directorio donde se mantienen los paquetes chrome que se incluyen con Mozilla.</p>
<p>Para agrandar la confusión, hay otros dos sitios donde la palabra chrome puede aparecer. El primero es el argumento &#8216;-chrome&#8217;, y el segundo el modificador chrome para la función window.open(). La llamada de estas características no otorga privilegio alguno. Son usadas para abrir una nueva ventana arriba del todo sin el menú o la barra de herramientas del navegador. Habitualmente se usará esta característica en aplicaciones XUL donde no se quiera que aparezca las diferentes barras del navegador alrededor de los cuadros de diálogo.</p>
<p>Los archivos para un paquete son normalmente unidos en un simple archivo JAR. Un archivo JAR debe ser creado y examinado usando una aplicación ZIP. Por ejemplo, puedes abrir un archivo JAR en la carpeta chrome de Mozilla para ver la estructura básica de un paquete. Aunque es normal unir los archivos en un archivo JAR, los paquetes pueden ser accesibles de forma expandida en un directorio. No es habitual distribuir un paquete de esta forma, pero es práctico durante su desarrollo, ya que puedes editar el archivo directamente para después recargarlo sin tener que volver a empaquetar o reinstalar los archivos.</p>
<p>Por defecto, las aplicaciones Mozilla analizan los archivos XUL y los scripts, y guardan una versión pre-compilada en la memoria para mejorar el resto de la sesión. Esto mejora la ejecución. Sin embargo, por culpa de esto, el archivo XUL no será recargado aún cuando el archivo fuente haya cambiado. Para desactivar este mecanismo, es necesario cambiar las preferencia nglayout.debug.disable_xul_cache. En Firefox, ésta preferencia se puede añadir a las preferencias del usuario poniendo &#8220;about:config&#8221; en la barra de dirección y cambiar ese valor por verdadero (true). O manualmente editando el archivo de preferencias user.js y añadiéndole la siguiente línea:</p>
<p>[source:java]</p>
<p>pref(&#8220;nglayout.debug.disable_xul_cache&#8221;, true);</p>
<p>[/source]</p>
<p>Habitualmente hay tres partes distintas en un paquete chrome, aunque son opcionales. Cada parte está almacenada en una carpeta distinta. Estas tres partes son el contenido, la piel (skin) y la configuración regional, explicados más abajo. Un paquete particular debe proporcionar una o más pieles (skins) y locales, pero un usuario puede reemplazarlos con los suyos propios. Además, el paquete debe incluir varias aplicaciones distintas cada una accesible a través de diferentes chrome URLs. El sistema de paquetes es suficientemente flexible por lo que puedes incluir todas las partes que necesites y permitir que otras partes, como el texto para diferentes idiomas, sean descargadas de forma separada.</p>
<p>Los tres tipos de paquetes chrome son:</p>
<ul>
<li><strong>Contenido</strong> &#8211; ventanas y scripts.<br />
Las declaraciones de las ventanas y los elementos de la interfaz de usuario contenidos con ellos. Se almacenan en archivos XUL, que tienen extension <code>.xul</code>. Un paquete de contenido puede tener múltiples archivos XUL, pero la ventana principal debe tener el mismo nombre de archivo que el nombre del paquete. Por ejemplo, el paquete &#8216;editor&#8217; tendrá un archivo que se llamará <code>editor.xul</code>. Los scripts están situados en archivos separados junto a los archivos XUL.</li>
<li><strong>Aspecto (skin)</strong> &#8211; Hojas de estilo, imágenes y otros archivos específicos al tema.<br />
Las hojas de estilo describen detalles de la apariencia de una ventana. Se almacenan de forma separada a los archivos XUL para facilitar modificar el aspecto (skin o tema) de una aplicación. Algunas imágenes usadas también se almacenan aquí.</li>
<li><strong>Configuración regional</strong> &#8211; Archivos locales específicos.<br />
Todo el texto que se muestra en una ventana se almacena de forma separada. De esta forma, un usuario puede tener un conjunto para su propio idioma.</li>
</ul>
<p><strong> Paquetes de contenido</strong></p>
<p>El nombre de un archivo JAR debe describir lo que contiene, pero no se puede asegurar el contenido si no se mirar a dentro. Vamos a usar el paquete del navegador incluido con Firefox como ejemplo. Si extraemos los archivos de browser.jar, nos encontraremos con una jerarquía de directorios similar a la que se muestra a continuación:</p>
<p>[source:java]</p>
<p>content<br />
browser<br />
browser.xul<br />
browser.js<br />
&#8211; otros ficheros XUL y JS van aquí &#8211;<br />
bookmarks<br />
&#8211; los archivos de marcadores, aquí &#8211;<br />
preferences<br />
&#8211; los archivos de preferencias, aquí &#8211;<br />
.<br />
.<br />
.<br />
[/source]<br />
Ésto es fácilmente reconocible como un paquete de contenido, ya que el directorio superior se llama <code>content</code>. Para aspectos(skins) esta carpeta normalmente será denominada skin y para configuración regional se le llamará locale. Este esquema de nombres no es necesario pero es una práctica habitual para hacer más claras las partes de un paquete. Algunos paquetes deben incluir una sección de contenidos, una piel (skin) y un locale. En este caso, encontraremos un sub-directorio para cada tipo. Por ejemplo, Chatzilla está distribuido de esta forma.</p>
<p>La carpeta content/browser contiene un número de archivos con extensiones .xul y .js. Los archivos XUL son los que tienen la extensión .xul. Los archivos con extensiones .js son archivos JavaScript que contienen los scripts que se encargan de la funcionalidad de una ventana. Muchos archivos XUL tienen un archivo script asociado con ellos, y muchos deben tener más de uno.</p>
<p>En el listado superior, dos archivos han sido vistos. De hecho hay otros, pero para simplificar no serán vistos. El archivo browser.xul es el archivo XUL que describe la ventana principal del navegador. La ventana principal para un paquete de contenido debe tener el mismo nombre que el paquete con una extensión .xul. En este caso, el nombre del paquete es &#8220;browser&#8221;, por eso esperaremos encontrarnos con browser.xul. Algunos de los otros archivos XUL describen ventanas distintas. Por ejemplo, el archivo pageInfo.xul describe el cuadro de información de la página.</p>
<p>Muchos paquetes incluirán un archivo contents.rdf que describe el paquete, su autor y el revestimiento que usa. Sin embargo, este archivo está obsoleto y ha sido reemplazado con un mecanismo más simple. Este nuevo método es el archivo manifest mencionado anteriormente, y encontraremos estos archivos con la extensión .manifest en el directorio chrome. Por ejemplo, browser.manifest describe el paquete del navegador.</p>
<p>Varias subcarpetas, como son marcadores y preferencias (bookmarks y preferences), describen secciones adicionales del navegador. Están ubicadas en diferentes carpetas sólo para mantener los archivos más organizados.</p>
<p><strong>Aspectos (skins) o Temas</strong><br />
Al código subyacente de Mozilla se le llama aspectos (skins), aunque a la interfaz de usuario se la llama temas, pero ambos se refieren a la misma cosa. El archivo <strong>classic.jar</strong> describe el tema por defecto que viene con Firefox. La estructura es similar a los paquetes de contenido. Por ejemplo, examinando <strong>classic.jar&lt;/&gt;:</strong><br />
[source:java]</p>
<p>skin<br />
classic<br />
browser<br />
&#8211; browser skin files go here &#8211;<br />
global<br />
contents.rdf<br />
&#8211; global skin files go here &#8211;.<br />
.<br />
.<br />
[/source]<br />
Nuevamente, esta estructura de carpetas no es necesaria y es usada por comodidad. Realmente puedes colocar todos los archivos en una carpeta arriba del todo y no usar subcarpetas. Sin embargo, para aplicaciones mayores, las subcarpetas son usadas para separar los diferentes componentes. En el ejemplo anterior, una carpeta es para los archivos del tema para el navegador y otra para los archivos del tema global. La carpeta global contiene archivos de la piel (skin) que son comunes a todos los paquetes. Estos archivos se aplicarán a todos los componentes y serán incluídos para tus aplicaciones autónomas. La parte global define el aspecto de todos los chismes comunes XUL, mientras que las otras carpetas contienen archivos que son específicos de estas aplicaciones. Firefox incluye tanto los archivos del tema global como los del navegador en un archivo, pero ambos pueden ser incluídos por separado.</p>
<p>Una piel (skin) se compone de archivos CSS y de un número de imágenes usadas para definir el aspecto y la interfaz. El archivo &lt;tt&gt;browser.css es usado por <strong>browser.xul</strong> y contiene estilos que definen el aspecto de varias partes de la interfaz del navegador. Nuevamente, nótese como el archivo <strong>browser.css</strong> tiene el mismo nombre que el paquete. Cambiando los archivos CSS, puedes ajustar el aspecto de una ventana sin cambiar su función. De esta forma puedes crear un nuevo tema. La parte XUL continúa igual pero la parte de la piel (el skin) cambia independientemente.</p>
<p><strong>Configuración regional</strong></p>
<p>El archivo en-US.jar describe la información del idioma para cada componente, en este caso para US English. Como las pieles (skins), cada idioma contendrá archivos que especifican texto usado por el paquete pero para un idioma concreto. La estructura para la configuración regional es similar a las otras, por eso no será explicada aquí.</p>
<p>El texto de idioma es almacenado en dos tipos de archivos: archivos DTD y archivos de propiedades. Los archivos DTD tienen una extensión .dtd y contienen declaraciones de identidad, una para cada cadena de texto usada en una ventana. Por ejemplo, el archivo browser.dtd contiene declaraciones de identidad para cada comando del menú. Además, los atajos de teclado para cada comando también están definidos, ya que pueden ser diferentes en cada idioma. Los archivos DTD son usados por los archivos XUL por eso, en general, tendrás uno por cada archivo XUL. La parte de configuración regional también contiene archivos de propiedades, que son similares, pero son usados por archivos script. El archivo browser.properties contiene algunas cadenas de idioma.</p>
<p>Esta estructura nos permite traducir Mozilla o un componente a un idioma distinto sólo añadiendo una nueva configuración regional para ese idioma. No tienes que cambiar la parte de XUL. Además, otra persona puede proporcionar un paquete separado que aplica una piel (skin) o configuración regional a tu parte de contenido, proporcionando soporte de esta manera a un nuevo tema o idioma sin tener que modificar el paquete original.</p>
<p><strong>Otros paquetes</strong></p>
<p>Hay un paquete especial llamado toolkit (o global). Vimos anteriormente el directorio global para skins (pieles). El archivo toolkit.jar contiene el contenido correspondiente para ello. Contiene algunos diálogos globales y definiciones. Además, define la apariencia por defecto y la funcionalidad de varios chismes XUL comunes como son los cuadros de texto y los botones. Los archivos localizados en la parte global de un paquete skin contienen la apariencia por defecto para todos los elementos de la interfaz XUL. El paquete toolkit es usado por todas las aplicaciones XUL.<br />
[editar] Añadiendo un paquete</p>
<p>Mozilla coloca los paquetes incluidos con la instalación en la carpeta chrome. Sin embargo, no es necesario colocarlos aquí. Si tienes otro paquete instalado, puede ser colocado en cualquier parte del disco, siempre que un archivo manifest apunte a él. Es una práctica frecuente colocar los paquetes en la carpeta chrome simplemente por ser conveniente, sin embargo sólo funcionarán correctamente desde otro directorio o desde algún lugar de tu red local. No puedes almacenarlos en un lugar remoto, a no ser que el sitio remoto sea montado a través del sistema de ficheros local.</p>
<p>Hay dos carpetas chrome usadas para las aplicaciones XUL, una está instalada en el mismo sitio donde las aplicaciones están instaladas, y la otra es parte del perfil del usuario. La primera permite a los paquetes ser compartidos por todos los usuarios, mientras que la segunda permite la creación de paquetes sólo por un usuario o grupo específico. Las extensiones, cuando son instaladas en una carpeta de extensiones diferente, son también normalmente específicas del usuario. Cualquier archivo manifest situado en cualquier carpeta chrome será examinado para ver que los paquetes instalados.</p>
<p>Fuente | <a href="http://developer.mozilla.org/es/docs/Tutorial_de_XUL:Estructura_XUL">Tutorial de XUL:Estructura XUL</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxman.net/xul-parte-2-estructura-xul.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Songbird El reproductor de musica de la fundacion Mozilla.</title>
		<link>http://www.ajaxman.net/songbird-el-reproductor-de-musica-de-la-fundacion-mozilla.html</link>
		<comments>http://www.ajaxman.net/songbird-el-reproductor-de-musica-de-la-fundacion-mozilla.html#comments</comments>
		<pubDate>Tue, 11 Sep 2007 04:45:05 +0000</pubDate>
		<dc:creator>ajaxman</dc:creator>
				<category><![CDATA[Computadoras]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Xul]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Multimedia]]></category>

		<guid isPermaLink="false">http://www.ajaxman.net/253/songbird-el-reproductor-de-musica-de-la-fundacion-mozilla/</guid>
		<description><![CDATA[<p>Cada día me sorprende la cantidad de aplicaciones que surgen para Linux. Cuando busque un buen reproductor para musica en linux, use Rhythmbox, luego use muy poco xmms, sin embargo niguno satisfacia plenemente mis necesidades; por desgracia aun uso windows,por algunas cuestiones, y tambien queria un buen reproductor, ya me habia hartado estar usando iTunes. [...]</p>
 ]]></description>
			<content:encoded><![CDATA[<p>Cada día me sorprende la cantidad de aplicaciones que surgen para Linux.</p>
<p>Cuando busque un buen reproductor para musica en linux, use Rhythmbox, luego use muy poco xmms, sin embargo niguno satisfacia plenemente mis necesidades; por desgracia aun uso windows,<strike>por algunas cuestiones</strike>,  y tambien queria un buen reproductor, ya me habia hartado estar usando iTunes.</p>
<p>Asi fue como di con SongBird.</p>
<p>A songbird la wikipedia lo define asi.</p>
<blockquote><p>Songbird es una alternativa de código abierto a iTunes que está actualmente en desarrollo. Está construido en la plataforma XULRunner de Mozilla. Gracias a ello, Songbird funciona en aquellos ordenadores con Windows, Mac OS X, y Linux.</p>
<p>El motor principal de Songbird, mig, ha revelado que Songbird utiliza el plugin del cliente VideoLAN (VLC) para la reproducción multimedia, y SQLite como motor de almacenamiento para la biblioteca multimedia.</p>
<p>El lanzamiento de la primera versión pública de Songbird, con número de versión 0.1, tiene el nombre código &#8220;Hilda,&#8221; y fue lanzada el 8 de febrero de 2006.</p></blockquote>
<p><span id="more-253"></span></p>
<p><img src="http://www.ajaxman.net/wp-content/uploads/2007/09/songbird11.png" alt="songbird" height="350" width="510" /></p>
<p>Songbird es un reproductor multimedia, que corre sobre Xul, esta desarrollado por la fundación mozilla, entre sus características: podemos encontrar.</p>
<ul>
<li>    Compatibilidad multiplataforma con Microsoft Windows, en sus versiones 2000, XP así como Mac OS X (PPC, Intel) y Linux (Intel).</li>
<li>    Capacidad de reproducir archivos de múltiples formatos, como MP3, AAC, Ogg Vorbis, FLAC y Windows Media Audio.</li>
<li>    Una interfaz personalizable.</li>
<li>    Los archivos multimedia almacenados en páginas web se muestran como archivos reproducibles en Songbird.</li>
<li>    Descarga de archivos MP3 y suscripciones RSS incorporadas.</li>
<li>    La capacidad de suscribirse a Blogs de mp3 así como listas de reproducción.</li>
<li>    Favoritos creados por el usuarios.</li>
<li>    Capacidad de construir mezclas personalizadas.</li>
<li>    Capacidad de escanear el computador del usuario en busca de archivos de audio para agregarlos a la librería local.</li>
<li>    Una interfaz gráfica de usuario configurable y plegable, así como el modo de mini-reproductor.</li>
<li>    Atajos del teclado y teclados multimedia soportados.</li>
<li>    Actualizaciones automáticas.</li>
<li>   Actualmente hay 39 idiomas disponibles.</li>
<li>   Funciona en Microsoft Windows, Mac OS X y Linux.</li>
</ul>
<p>Fuente | <a href="http://es.wikipedia.org/wiki/Songbird">wikipedia</a></p>
<p>Yo lo tengo instalado tanto en windows como en GNU/Linux Debian Etch , y dejenme decirles que es muy bueno , claro tiene fallas, pero muy pocas, recordemos que la ultima versión que esta para la descarga es la 0.2.5 Developer Preview. todaia no es ni beta.</p>
<p>Sin duda deberían echarle un vistazo.</p>
<p>Enlace a la pagina oficial | <a href="http://www.songbirdnest.com/">Songbird</a></p>
<p><a href="http://songbirdnest.com/partners"><img src="http://songbirdnest.com/files/images/button_jetpack.png" alt="Get Songbird" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxman.net/songbird-el-reproductor-de-musica-de-la-fundacion-mozilla.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.ajaxman.net @ 2012-05-23 06:34:12 -->
