<?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>Mundo Osukaru &#187; Osukaru</title>
	<atom:link href="http://www.osukaru.es/author/osukaru/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.osukaru.es</link>
	<description>Desarrollo web y Tecnología</description>
	<lastBuildDate>Thu, 05 Aug 2010 10:51:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<script type="text/javascript">

if (typeof Meebo == 'undefined') {

Meebo=function(){(Meebo._=Meebo._||[]).push(arguments)};
(function(q){

	var args = arguments;
	if (!document.body) { return setTimeout(function(){ args.callee.apply(this, args) }, 100); }
	var d=document, b=d.body, m=b.insertBefore(d.createElement('div'), b.firstChild); s=d.createElement('script');
	m.id='meebo'; m.style.display='none'; m.innerHTML='<iframe id="meebo-iframe"></iframe>';
	s.src='http'+(q.https?'s':'')+'://'+(q.stage?'stage-':'')+'cim.meebo.com/cim/cim.php?network='+q.network;
	b.insertBefore(s, b.firstChild);

})({network:'mundoosukaru_xa39vo'});	}</script>	<item>
		<title>Jornadas sobre Symfony en Castellón</title>
		<link>http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/</link>
		<comments>http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 08:37:38 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=188</guid>
		<description><![CDATA[Los pasados 5 y 6 de Julio he tenido el placer de asistir a las Jornadas sobre Symfony celebradas en la Universidad Jaume I de Castellón. Mi intención era hacer un pequeño resumen de cada una de las charlas, pero siguiendo la máxima del framework de no reinventar la rueda os invito a que leáis [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Los pasados 5 y 6 de Julio he tenido el placer de asistir a las <a href="http://decharlas.uji.es/symfony/">Jornadas sobre Symfony</a> celebradas en la Universidad Jaume I de Castellón.</p>
<p style="text-align: justify;">Mi intención era hacer un pequeño resumen de cada una de las charlas, pero siguiendo la máxima del framework de no reinventar la rueda os invito a que leáis la <a href="http://www.symfony.es/2010/07/06/cronica-de-las-primeras-jornadas-de-symfony/">crónica</a> de mi cada vez más admirado Javier Eguiluz (su charla sobre Symfony2 fue magistral).</p>
<p style="text-align: justify;">En cada una de las charlas se mostraron unas diapositivas y se grabó el audio, por lo que pronto podremos ver colgadas en internet todas las charlas, una vez más en el <a href="http://www.symfony.es/2010/07/06/todas-las-presentaciones-de-las-jornadas-symfony/">blog de Symfony.es</a>.</p>
<p style="text-align: justify;">Me gustaría agradecer el esfuerzo realizado por David Castelló para organizar estas jornadas, creo que puede sentirse muy orgulloso del resultado.</p>
<p style="text-align: justify;">Y ya un poco al margen de las jornadas en sí mismas, pues decir que me lo he pasado genial, 5 días en Castellón con sol y playa.</p>
<p style="text-align: justify;">Para acabar, dejo los vídeos de cada una de las charlas para que las podáis ver con detenimiento:<span id="more-188"></span></p>
<ul>
<li><a href='http://vimeo.com/13297305' >Introducción a Symfony</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13297305&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13297305&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13324354' >El ORM Doctrine</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13324354&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13324354&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13324539' >Domesticando las vistas</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13324539&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13324539&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13325576' >Admin generator</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13325576&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13325576&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13325855' >Arquitectura y diseño de un entorno de desarrollo</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13325855&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13325855&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13325958' >Caso práctico I: voota.es</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13325958&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13325958&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326079' >Caso práctico II: Symfony en CETA-CIEMAT</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326079&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326079&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326172' >Domesticando los formularios</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326172&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326172&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326256' >Plugins, no reinventes la rueda</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326256&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326256&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326324' >MongoDB y symfony</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326324&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326324&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326483' >Symfony, cloud computing y web escalables</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326483&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326483&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326625' >Symfony2</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326625&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326625&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
</ul>
<img style='display:none' id="post-188-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/',title:'Jornadas sobre Symfony en Castellón',tweet:'Los pasados 5 y 6 de Julio he tenido el placer de asistir a las Jornadas sobre Symfony celebradas en',description:'Los pasados 5 y 6 de Julio he tenido el placer de asistir a las Jornadas sobre Symfony celebradas en'})"><script type='text/javascript'>document.getElementById("post-188-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ipad, Flash y HTML 5</title>
		<link>http://www.osukaru.es/tecnologia/ipad-flash-y-html-5/</link>
		<comments>http://www.osukaru.es/tecnologia/ipad-flash-y-html-5/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 10:25:01 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[Ipad]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=153</guid>
		<description><![CDATA[El reciente lanzamiento del iPad ha traido consigo mucha polémica. Polémica por el aparato en sí, porque mucha gente intenta desacreditarlo, y polémica por la decisión de Steve Jobs de darle la patada a Flash. Como en la vida misma, no todo es blanco o negro (tampoco gris, que para eso tenemos monitores de millones [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">El reciente lanzamiento del iPad ha traido consigo mucha polémica. <a rel="attachment wp-att-182" href="http://www.osukaru.es/tecnologia/ipad-flash-y-html-5/attachment/ipad-flash/"><img class="alignright size-medium wp-image-182" title="ipad-flash" src="http://www.osukaru.es/wp-content/uploads/2010/06/ipad-flash-300x160.png" alt="" width="300" height="160" /></a>Polémica por el aparato en sí, porque mucha gente intenta desacreditarlo, y polémica por la decisión de Steve Jobs de darle la patada a Flash. Como en la vida misma, no todo es blanco o negro (tampoco gris, que para eso tenemos monitores de millones de colores). <span id="more-153"></span></p>
<p style="text-align: justify;">Vamos a analizar primero el nuevo producto de Apple. Cuando adquieres un nuevo producto lo primero que tienes que tener claro es saber qué estás comprando. Con el iPad no queda claro, hace muchas cosas, algunas de forma excelente, pero si yo tuviese que elegir una de sus características en las que probablemente sea (o tenga el potencial para serlo) el líder del mercado indiscutiblemente creo que diría que es un navegador web portátil. No hay aparato en el mundo que me permita navegar por internet de una forma tan rápida, cómoda y eficaz. Una vez que sabemos lo que hemos comprado, vemos que además podemos contar con todas las aplicaciones de la AppStore, que podremos ver películas o escuchar música, leer libros electrónicos, etc. El aparato es simplemente espectacular, al igual que otros productos de Apple, pero hay que recordar que sin una función principal que consiga que lo use diariamente no sería para tanto (si el iPhone no fuese un teléfono o el iTouch no fuese un reproductor de música, dudo mucho que hubiesen vendido nada). Entonces, si aceptamos que es un navegador web portátil, ¿por qué no soporta Flash?</p>
<p style="text-align: justify;">Sin duda, esta característica hace que la experiencia web del usuario se vea limitada (muy limitada). Si he pagado en torno a 500 euros por un aparato que me va a permitir navegar por internet sin tener que levantarme de la cama, que no pueda acceder a todos los contenidos flash realmente supone un fastidio. Flash hace que la experiencia del usuario web sea enriquecida de una manera espectacular. Flash se utiliza en muchas páginas para reproducir vídeo porque hasta hace bien poco era la manera más óptima de hacerlo, pero Flash no es un reproductor multimedia, es mucho más que eso. Aún así, aunque ahora se pueda reproducir vídeo de forma más eficiente, muchas páginas siguen usando Flash y no tienen por qué plantearse cambiar (¿es Apple quien se tiene que adaptar al mundo o es el mundo el que se tiene que adaptar a Apple?). Pero además de los vídeos (que no es poco), ¿qué más nos perdemos? Hay muchas más cosas que aunque se podrían hacer de otra forma, están hechas en Flash y muchas otras que si no existiese Flash, simplemente no existirían. Voy a poner como ejemplos cosas que yo utilizo, pero hay tantas más&#8230;</p>
<p style="text-align: justify;">En primer lugar, uso <a href="http://www.google.com/intl/es/analytics/" target="_blank">Google Analitycs</a> para consultar las estadísticas de mi blog, y los gráficos están hechos en Flash. Como en mi trabajo soy un profesional de Oracle, necesito consultar el <a href="https://support.oracle.com/CSP/ui/flash.html" target="_blank">Metalink</a>, que está hecho en Flex (Flash). Ahora estoy organizando mi boda, ya que me caso en Septiembre, y uso una web (<a href="http://es.wedtool.com/" target="_blank">Wedtool</a>) que me permite organizar el evento y crear la página web de la boda: está hecha en Flex (Flash). Mientras escribo esto, estoy escuchando música con mi cuenta de <a href="http://listen.grooveshark.com" target="_blank">GrooveShark</a> (más Flash). Tengo mi cuenta de Facebook y a veces mis amigos juegan a algún jueguecito que está hecho en Flash y consiguen que me termine enganchando (aunque sé que hay juegos mejores en otras tecnologías, pero el hecho es ese). FarmVille tiene más de 80 millones de usuarios, que se dice pronto, y aunque un juego de tanto éxito pueda plantearse sacar versiones que se adpaten al iPad, no todos los jueguecitos podrán o querrán hacerlo. Suelo leer la prensa deportiva, y tanto en <a href="http://www.marca.com/" target="_blank">Marca</a> como en <a href="http://www.elmundodeportivo.es/" target="_blank">Mundo Deportivo</a> los vídeos aún están en Flash, la sección de Última Hora de Marca que se actualiza sóla en tiempo real está en Flash y el nuevo juego de <a href="http://www.marca.com/promo/futbolinklickoff/" target="_blank">Futbolín Virtual</a> de Marca está hecho en Flash. Si voy a apostar en <a href="http://www.miapuesta.com/" target="_blank">MiApuesta</a> o <a href="https://www.bwin.com/" target="_blank">Bet&amp;Win</a>, la mayoría de contenidos (sobretodo los que son LIVE) están en Flash. A veces leo revistas o prensa en <a href="http://www.youkioske.com/" target="_blank">YouKioske</a>, pero está en Flash. Si voy a <a href="http://maps.google.es/maps?hl=es&amp;tab=wl" target="_blank">Google Maps</a> y quiero situarme en algún sitio con su espectacular <a href="http://maps.google.es/?f=q&amp;source=s_q&amp;hl=es&amp;geocode=&amp;q=catedral+de+santiago+de+compostela,+espa%C3%B1a&amp;sll=37.178817,-3.590276&amp;sspn=0.01272,0.01929&amp;ie=UTF8&amp;layer=c&amp;cbll=42.880829,-8.545506&amp;panoid=om4Jt5kjkscWEBrmA5qaBg&amp;cbp=12,129.65,,0,-15.67&amp;hq=&amp;hnear=Cathedral+of+Santiago+de+Compostela,+Praza+das+Prater%C3%ADas,+15704+Santiago+de+Compostela,+Corunna,+Galicia,+Spain&amp;ll=42.880508,-8.54569&amp;spn=0.016274,0.037143&amp;z=16&amp;utm_campaign=es&amp;utm_medium=lp&amp;utm_source=es-lp-emea-es-gns-svn&amp;utm_term={keyword}" target="_blank">Street View</a>, me vuelvo a topar con Flash. Y además, hay empresas muy serias, como <a href="http://www.codeoscopic.com/#/type=home" target="_blank">Codeoscopic</a>, que hacen un trabajo fantástico con esta tecnología (visiten su web sólo para comprobar que la experiencia de usuario no tiene nada que ver con la web convencional). Y por no mencionar la cantidad de publicidad que hay en banners hechos en Flash, que aunque al usuario le parezcan molestos no creo que se lo parezca a los patrocinadores. O Intros muy chulas en páginas web. Hay muchas más empresas y muchas más aplicaciones que podría mencionar, pero todo lo que aquí he relatado lo uso de manera habitual (diariamente la mayoría), ¿de verdad me puede compensar comprar un iPad? ¿Y a vosotros, no usáis Flash para nada?</p>
<p style="text-align: justify;">La gente que intenta desprestigiar Flash nos presentan a HTML 5, pero ¿qué es HTML 5? ¿viene a sustituir a Flash? ¿viene siquiera a competir con él? Yo veo HTML 5 y me parece genial, es una evolución de HTML 4 que consigue que una web tenga muchísimo más sentido semántico. Me proporciona nuevas etiquetas para contenidos concretos (cabecera, pie, contenido multimedia, etc.) y me proporciona una etiqueta Canvas donde se podrá dibujar. Sin duda es una buena evolución, por ejemplo facilitará la labor de los buscadores por lo que los usuarios podrán buscar contenido de una forma mucho más restrictiva y eficiente. También nos va a permitir reproducir vídeo (y otros contenidos multimedia) de una forma más convincente que Flash. Pero que sustituya a Flash en este aspecto no significa que venga a destronar a Flash, que junto con CSS 3 y javascript (AJAX) podamos hacer muchas cosas (sólo hay que ver las posibilidades que nos cuenta <a href="http://www.apple.com/html5/" target="_blank">Apple</a>), algunas mejor incluso que Flash, no significa nada más que eso, son tecnologías para crear RIAs (Rich Internet Applications) y hay programadores tanto en un bando como en otro (¿acaso no se programa tanto en Java como en .NET o PHP?). Y Steve Jobs se equivoca mucho si piensa que Flash va a desaparecer. Sólo miren la cantidad de páginas que ni siquiera siguen el estándar HTML 4 o XHTML (vale, son una chapuza de páginas, pero las hay) y se darán cuenta de que el mundo no cambia ante nada, y lo mismo que los programadores de webs intentamos que nuestros contenidos se vean igual en todas las plataformas posibles (está claro que intentaremos que también en el iPad) los fabricantes (y los desarrolladores de los navegadores web) tienen que conseguir que los usuarios puedan ver la mayor cantidad de contenidos, porque si no, no están ofreciendo un buen producto.</p>
<p style="text-align: justify;">¿Y por qué Apple no permite habilitar el uso de Flash como opción de usuario advirtiendo de los riesgos? Admitir que el uso de Flash puede colgar el iPad es admitir las limitaciones tecnológicas del producto que estás vendiendo (no conozco muchos aparatos con 1 Ghz de RAM que se cuelguen con Flash), decir que con Flash se acaba antes la batería es una obviedad (¿reproduciendo películas en HD no se acaba antes la batería que viendo webs de texto plano?) y decir que hay agujeros de seguridad es inexacto, todas las tecnologías tienen o pueden tener agujeros de seguridad, lo que Apple quiere decir es que no se puede hacer responsable de esos agujeros de seguridad en el momento que existan (Adobe corrije los posibles fallos de seguridad que van existiendo muy rápidamente). No hay duda de que los verdaderos motivos de Apple son económicos, no le interesa ni le apetece vender un aparato fabricado por ellos para ganar dinero con sus aplicaciones para que vengan otros a reventarle el negocio con otras aplicaciones. A mí me parece que viéndolo desde ese ángulo, puede ser una decisión empresarial aceptable, pero el que paga las consecuencias es el usuario, o sea, nosotros, y a la larga, cuando el usuario esté descontento, lo empezarán a pagarlo ellos también.</p>
<p style="text-align: justify;">Consecuencia: Yo no me voy a comprar un iPad, pero tomar la decisión de comprarlo o no comprarlo no es motivo para desacreditar productos y especificaciones tan buenos como el iPad, Flash y HTML 5.</p>
<img style='display:none' id="post-153-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/tecnologia/ipad-flash-y-html-5/',title:'Ipad, Flash y HTML 5',tweet:'El reciente lanzamiento del iPad ha traido consigo mucha polémica. Polémica por el aparato en sí,',description:'El reciente lanzamiento del iPad ha traido consigo mucha polémica. Polémica por el aparato en sí,'})"><script type='text/javascript'>document.getElementById("post-153-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/tecnologia/ipad-flash-y-html-5/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ubuntu en VirtualBox</title>
		<link>http://www.osukaru.es/programacion/ubuntu-en-virtualbox/</link>
		<comments>http://www.osukaru.es/programacion/ubuntu-en-virtualbox/#comments</comments>
		<pubDate>Sun, 16 May 2010 20:48:49 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=137</guid>
		<description><![CDATA[Ya estamos a mediados de Mayo y todavía no he probado la última versión de una de las más populares distribuciones Linux: Ubuntu. Esta última versión es la 10.04 LTS y su nombre en código es Lucid Lynx. Recordemos que sale una versión de Ubuntu cada 6 meses y que la numeración de la versión [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ya estamos a mediados de Mayo y todavía no he probado la última versión de una de las más populares distribuciones Linux: Ubuntu. Esta última versión es la 10.04 LTS y su nombre en código es Lucid Lynx. Recordemos que sale una versión de Ubuntu cada 6 meses y que la numeración de la versión corresponde al año y mes del lanzamiento de la versión (en nuestro caso, la 10.04 es la versión de Abril de 2010), mientras que el nombre en código es un nombre no oficial que se le da a la versión y que se compone del nombre de un animal y un adjetivo (ahora tenemos un Lince Lúcido) que comienzan por una misma letra que en cada versión crece alfabéticamente. Además, cada 4 versiones (2 años) la versión de Ubuntu ofrece un soporte técnico extendido (LTS = Long Term Support) que nos asegura que contará con actualizaciones de seguridad durante un período de 3 años (frente a los 18 meses del resto de versiones). Podemos descargarnos una <a href="http://www.ubuntu.com/getubuntu/download">imagen ISO</a> directamente de la página oficial de Ubuntu.<br />
<span id="more-137"></span><br />
Una de las bondades de Ubuntu es que podemos probar una demo de la distribución únicamente arrancando nuestro PC con el CD de instalación, ya que Ubuntu se carga en memoria con los paquetes básicos sin necesidad de instalar nada en nuestro ordenador. Esto está muy bien para probar la distribución en líneas generales y poder realizar una pequeña evaluación, pero si realmente queremos probar esta distribución o incluso utilizarla diariamente (por ejemplo para disponer un entorno de desarrollo completamente virgen), y queremos seguir sin tener que instalarlo en nuestro ordenador, tenemos una mejor opción: virtualizarlo en VirtualBox.</p>
<p style="text-align: justify;">La virtualización en VirtualBox es realmente sencilla y muy potente. La instalación de VirtualBox no tiene ningún problema, simplemente lo descargamos de la <a href="http://www.virtualbox.org/wiki/Downloads">página web</a> y lo instalamos siguiendo los pasos del asistente.</p>
<p style="text-align: justify;">Una vez tenemos VirtualBox instalado en nuestro sistema, jugar con él es bastante intuitivo. Para nuestro propósito únicamente tenemos que crear una nueva máquina virtual (elegimos el S.O. adecuado, creamos el disco duro, etc.), montar la ISO de Ubuntu en la unidad de CD/DVD y arrancar la máquina. Una vez hecho esto, seguimos los pasos de instalación de Ubuntu. Después instalaremos <em>Guest Additions</em> que es un paquete especial de software que forma parte de VirtualBox  y que debe instalarse en cada una de las máquinas virtuales para mejorar el rendimiento y añadir nuevas funciones (integración del cursor del ratón, mejor soporte de vídeo, carpetas compartidas, etc.). Para ello sólo tenemos que descargar y montar la imagen <em>VBoxGuestAdditions.iso</em> (esto lo automatiza VirtualBox desde el menú <em>Dispositivos&#8211;&gt;Instalar Guest Additions&#8230;</em>) y ejecutar el autorun.sh (si es que no se inicia automáticamente).</p>
<p style="text-align: justify;">Una vez que ya tenemos nuestra máquina virtual lista para darle el uso que deseemos podemos hacer una cosa más: <a href="http://www.feitam.es/DocumentacionTAGs/faces/pages/index.jspx?filtro=1641&amp;modoBusqueda=id&amp;idIMC=1641">clonar el disco duro virtual</a>. De esta forma podremos crear una nueva máquina virtual sin tener que volver a instalar el sistema operativo, las guest additions y los programas básicos que siempre instalamos.</p>
<p style="text-align: justify;">El siguiente paso es poder acceder a los ficheros y directorios del sistema anfitrión. Para ello (y con la máquina virtual apagada) sólo tenemos que ir al apartado de &#8220;Carpetas compartidas&#8221; de la configuración de VirtualBox y crear las carpetas compartidas que deseemos, con la opción de hacerlas permanentes y también de sólo lectura.</p>
<p style="text-align: justify;">Una vez hecho esto, tenemos que montar la carpeta compartida dentro de nuestro sistema de Ubuntu. Supongamos que le hemos dado el nombre vBox a la carpeta compartida y que vamos a montar dicha carpeta en /media/compartida. Las instrucciones para realizar esto son:</p>
<p>[shell]<br />
sudo mkdir /media/compartida<br />
sudo mount -t vboxsf VBox /media/compartida<br />
[/shell]</p>
<p style="text-align: justify;">Y si queremos tener montado este directorio cada vez que iniciemos nuestra máquina virtual, tendremos que editar el archivo fstab:</p>
<p>[shell]<br />
sudo vim /etc/fstab<br />
[/shell]</p>
<p style="text-align: justify;">Y añadirle una línea:</p>
<p>[shell]<br />
VBox /media/compartida vboxsf rw,gid=1000,uid=1000,auto 0 0<br />
[/shell]</p>
<img style='display:none' id="post-137-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/ubuntu-en-virtualbox/',title:'Ubuntu en VirtualBox',tweet:'Ya estamos a mediados de Mayo y todavía no he probado la última versión de una de las más popula',description:'Ya estamos a mediados de Mayo y todavía no he probado la última versión de una de las más popula'})"><script type='text/javascript'>document.getElementById("post-137-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/ubuntu-en-virtualbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creando un plugin para Symfony</title>
		<link>http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/</link>
		<comments>http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 17:40:05 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=123</guid>
		<description><![CDATA[En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos utilizar esta nueva funcionalidad en otro proyecto tendríamos que volver a realizar todos los pasos que se especifican en el post. Sin embargo, existe una forma de añadir esta funcionalidad de manera que nos podamos ahorrar gran parte de estos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos utilizar esta nueva funcionalidad en otro proyecto tendríamos que volver a realizar todos los pasos que se especifican en el post. Sin embargo, existe una forma de añadir esta funcionalidad de manera que nos podamos ahorrar gran parte de estos pasos: crear un plugin.<br />
<span id="more-123"></span><br />
Los plugins permiten encapsular clases, filtros, event listeners, helpers, archivos de configuración, tareas, módulos, esquemas y extensiones para el modelo, fixtures, archivos estáticos, etc. En nuestro caso, crearemos un plugin que contenga el helper, los archivos de configuración, el módulo de ejemplo y la hoja de estilos XSL. El plugin se llamará <em>sfXSLTransformerPlugin</em>.</p>
<p style="text-align: justify;">Lo único que tenemos que hacer es crear un directorio que se llame <em>sfXSLTransformerPlugin</em> y crear allí la estructura de directorios que necesitamos, es decir, la carpeta <em>config</em> con el archivo <em>settings.yml</em>, la carpeta <em>lib/helper</em> donde incluiremos nuestro helper <em>XSLHelper.php</em>, la carpeta <em>modules</em> donde estará nuestro módulo de prueba y la carpeta <em>web/xsl</em> donde se encontrará nuestra hoja de estilos XSL.</p>
<p style="text-align: justify;">El archivo <em>settings.yml</em> contendrá el siguiente código:</p>
<p style="text-align: justify;">[css]<br />
all:<br />
.settings:<br />
standard_helpers: [XSL]<br />
xsl_doc:  sfXSLTransformerPlugin/xsl/collection.xsl<br />
[/css]</p>
<p style="text-align: justify;">El plugin quedaría <a href="http://www.osukaru.es/wp-content/uploads/2010/04/sfXSLTransformerPlugin.zip">así</a>. Para instalarlo en cualquier proyecto, sólo tenemos que descargarlo y descomprimirlo en el directorio <em>plugins</em>. Después, en el <em>ProjectConfiguration.class.php</em> habilitamos el plugin:</p>
<p style="text-align: justify;">[php]<br />
$this-&gt;enablePlugins(&#8216;sfDoctrinePlugin&#8217;, &#8216;sfXSLTransformerPlugin&#8217;);<br />
[/php]</p>
<p style="text-align: justify;">Con esto ya podríamos usar el plugin. Si queremos verlo en funcionamiento en el módulo de prueba, sólo tenemos que habilitar este módulo en el <em>settings.yml</em>:</p>
<p style="text-align: justify;">[css]<br />
all:<br />
.settings:<br />
enabled_modules: [prueba]<br />
[/css]</p>
<p style="text-align: justify;">Limpiamos la caché y ejecutamos la tarea <em>plugin:publish-assets</em> (para que los archivos de la carpeta web del plugin se publiquen en la carpeta web del proyecto) y listo.</p>
<p style="text-align: justify;">Evidentemente, la hoja de estilos XSL que viene por defecto en el plugin no nos sirve de mucho, ya que en nuestro proyecto querremos utilizar nuestra propia hoja de estilos. Podríamos editar la hoja de estilos del plugin, pero no es una buena práctica editar los archivos de un plugin, ya que si lo actualizásemos se sobreescribirían nuestros cambios. Así que lo que tenemos que hacer es crear nuestra propia hoja de estilos en el directorio <em>web/xsl</em> de nuestro proyecto y después editar el archivo settings.yml (el de nuestra aplicación, no el del plugin):</p>
<p style="text-align: justify;">[css]<br />
all:<br />
.settings:<br />
xsl_doc:  xsl/mi_hoja_de_estilos.xsl<br />
[/css]</p>
<p style="text-align: justify;">Una vez que tenemos realizado nuestro plugin, podemos subirlo a un repositorio subversion para poder llevar un control de versiones y poder actualizarlo estemos donde estemos. Por ejemplo, en <a href="http://code.google.com/hosting/">Google Code</a> se puede crear de forma gratuita un repositorio de subversion. Si tenemos instalado Tortoise en nuestro equipo, hacer un checkout del proyecto, añadir archivos al repositorio y realizar un commit es bastante intuitivo (para subir cambios al repositorio tenemos que tener permisos, por lo que se nos pedirá una contraseña que podremos encontrar en la página de configuración del proyecto de Google Code). Nuestro plugin está subido en http://osukaru-plugins.googlecode.com/svn/trunk/sfXSLTransformerPlugin.</p>
<p style="text-align: justify;">Si quisieramos distribuir nuestro plugin desde el sitio web del proyecto Symfony tendríamos un poco más de trabajo, ya que deberíamos crearlo como un paquete PEAR, escribir el archico <em>package.xml</em>, el archivo README (con sintáxis Markdown) y el archivo LICENSE y después crearnos una cuenta de usuario en Symfony y crear allí nuestro plugin.</p>
<img style='display:none' id="post-123-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/',title:'Creando un plugin para Symfony',tweet:'En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos ',description:'En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos '})"><script type='text/javascript'>document.getElementById("post-123-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transformaciones XSL en Symfony</title>
		<link>http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/</link>
		<comments>http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 15:58:32 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=102</guid>
		<description><![CDATA[Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony? Lo que podemos hacer es que las vistas generen XML y después en el layout transformamos este XML en XHTML mediante nuestra hoja de estilos XSL. Vamos a utilizar el mismo ejemplo que en el post anterior. Lo primero [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony?</p>
<p>Lo que podemos hacer es que las vistas generen XML y después en el layout transformamos este XML en XHTML mediante nuestra hoja de estilos XSL.<br />
<span id="more-102"></span></p>
<p>Vamos a utilizar el mismo ejemplo que en el post anterior. Lo primero que haremos es crear una carpeta 	<em>xsl</em> dentro del directorio <em>web</em>. Ahora metemos ahí los archivos de ejemplo (collection.xsl y collection.xml). En el layout, en el lugar que queramos (total, es sólo para probar) incrustamos el código de ejemplo:<br />
[php]<br />
<?php<br />
   $xslDoc = new DOMDocument();<br />
   $xslDoc->load(&#8220;xsl/collection.xsl&#8221;);</p>
<p>   $xmlDoc = new DOMDocument();<br />
   $xmlDoc->load(&#8220;xsl/collection.xml&#8221;);</p>
<p>   $proc = new XSLTProcessor();<br />
   $proc->importStylesheet($xslDoc);<br />
   echo $proc->transformToXML($xmlDoc);<br />
?><br />
[/php]<br />
Si ahora ejecutamos nuestro proyecto veremos que la transformación se realiza correctamente. Pero esto no es lo que queríamos, ya que estamos cargando el XML de ejemplo directamente desde un archivo y lo que queremos es cogerlo de una vista. Bien, creemos entonces un nuevo módulo y en el <em>indexSuccess.php</em> metamos el XML de ejemplo. Ahora sólo tenemos que cambiar el código de ejemplo del layout y utilizar la función <em>loadXML</em> y la variable <em>$sf_content</em>:<br />
[php]<br />
<?php<br />
   $xslDoc = new DOMDocument();<br />
   $xslDoc->load(&#8220;xsl/collection.xsl&#8221;);</p>
<p>   $xmlDoc = new DOMDocument();<br />
   $xmlDoc->loadXML($sf_content);</p>
<p>   $proc = new XSLTProcessor();<br />
   $proc->importStylesheet($xslDoc);<br />
   echo $proc->transformToXML($xmlDoc);<br />
?><br />
[/php]<br />
Con esto ya hemos conseguido lo que queríamos, aunque es un poco engorroso poner todo ese trozo de código en el layout, así que podemos crear un helper que nos ayude a simplificar la tarea. Para ello, dentro de la carpeta <em>lib</em> (por ejemplo, dentro de la aplicación <em>frontend</em>) creamos un nuevo directorio <em>helper</em> y dentro de él nuestro helper <em>XSLHelper.php</em> que contendrá el siguiente código:<br />
[php]<br />
<?php<br />
function XSLTransform($xmlString)<br />
{<br />
    $xslDoc = new DOMDocument();<br />
    $xslDoc->load(&#8220;xsl/collection.xsl&#8221;);</p>
<p>    $xmlDoc = new DOMDocument();<br />
    $xmlDoc->loadXML($xmlString);</p>
<p>    $proc = new XSLTProcessor();<br />
    $proc->importStylesheet($xslDoc);</p>
<p>    return $proc->transformToXML($xmlDoc);<br />
}<br />
?><br />
[/php]<br />
Ahora en nuestro <em>layout</em> sólo tenemos que poner el siguiente código:<br />
[php]<br />
<?php<br />
    <?php use_helper('XSL') ?><br />
    <?php echo XSLTransform($sf_content) ?><br />
?><br />
[/php]<br />
Y si queremos simplificar aún más, podemos hacer que nuestro nuevo helper se cargue por defecto y así no tener que incluirlo manualmente. Para ello, en el archivo <em>settings.yml</em> dentro de la carpeta <em>config</em> de nuestra aplicación <em>frontend</em> lo incluimos en una lista de helpers por defecto:<br />
[css]<br />
all:<br />
  .settings:<br />
    standard_helpers: [XSL]<br />
[/css]<br />
Así, en nuestro layout ya sólo tendremos que escribir:<br />
[php]<br />
<?php<br />
    <?php echo XSLTransform($sf_content) ?><br />
?><br />
[/php]<br />
Bien, ahora sólo nos quedaría solucionar un pequeño problema de la forma más elegante que se nos ocurra, y es que la hoja de estilos XSL con la que realizaremos las transformaciones la hemos puesto directamente en la función de nuestro helper. Podríamos incluir un nuevo parámetro en nuestra función para especificar la hoja de estilos, pero esto no sería muy ágil si hacemos muchas llamadas al helper y en un futuro cambiamos de nombre o de ruta la hoja de estilos, así que lo mejor sería que pudiésemos obtener este dato de un archivo de configuración, por ejemplo del <em>settings.yml</em>. Lo que tenemos que hacer es definir una constante en ese archivo:<br />
[css]<br />
all:<br />
  xsl_doc:    xsl/collection.xsl<br />
[/css]<br />
Y después utilizar la clase sfConfig de Symfony para recuperar el valor en nuestro helper:<br />
[php]<br />
<?php<br />
function XSLTransform($xmlString)<br />
{<br />
    $xslDoc = new DOMDocument();<br />
    $xslDoc->load(sfConfig::get(&#8216;sf_xsl_doc&#8217;));</p>
<p>    $xmlDoc = new DOMDocument();<br />
    $xmlDoc->loadXML($xmlString);</p>
<p>    $proc = new XSLTProcessor();<br />
    $proc->importStylesheet($xslDoc);</p>
<p>    return $proc->transformToXML($xmlDoc);<br />
}<br />
?><br />
[/php]</p>
<img style='display:none' id="post-102-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/',title:'Transformaciones XSL en Symfony',tweet:'Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony',description:'Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony'})"><script type='text/javascript'>document.getElementById("post-102-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transformaciones XSL desde PHP 5</title>
		<link>http://www.osukaru.es/programacion/transformaciones-xsl-desde-php-5/</link>
		<comments>http://www.osukaru.es/programacion/transformaciones-xsl-desde-php-5/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 11:46:56 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[XSL PHP]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=95</guid>
		<description><![CDATA[En mi trabajo actual estamos adaptando todas las aplicaciones web para que en vez de generar código HTML generen un XML y se transformen en HTML mediante una plantilla XSL que es común a todas. De esta forma se pueden realizar cambios en la presentación de todas las aplicaciones sin que los responsables de cada [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">En mi trabajo actual estamos adaptando todas las aplicaciones web para que en vez de generar código HTML generen un XML y se transformen en HTML mediante una plantilla XSL que es común a todas. De esta forma se pueden realizar cambios en la presentación de todas las aplicaciones sin que los responsables de cada aplicación tengan que tocar nada.<br />
<span id="more-95"></span><br />
En mi cliente trabajamos varias empresas y cada una de ellas emplea tecnologías diferentes (unos realizan las webs en .Net, otros en Java y nosotros lo hacemos directamente desde Oracle). En las 3 tecnologías hemos encontrado la forma de realizar las transformaciones XSL (en Oracle me ha dado algún quebradero de cabeza y a los de .NET me consta que también) y poder realizar una aplicación web completa utilizando esta metodología.</p>
<p style="text-align: justify;">Y ahora lo que me pregunto es lo siguiente: ¿será sencillo realizar eso mismo en PHP? Bueno, la respuesta es que sí (no entro a valorar si es la forma más correcta de desarrollar una aplicación web). Lo único que tenemos que hacer es habilitar la extensión <em>php_xsl</em> (si trabajamos en Windows basta con descomentar la línea <em>extension=php_xsl.dll</em> en nuestro <em>php.ini</em>).</p>
<p style="text-align: justify;">Podemos probar con este <a href="http://es2.php.net/manual/en/xsl.examples.php">ejemplo </a>y con sus respctivos <a href="http://es2.php.net/manual/en/xsl.examples-collection.php">archivos</a> xml y xsl.</p>
<img style='display:none' id="post-95-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/transformaciones-xsl-desde-php-5/',title:'Transformaciones XSL desde PHP 5',tweet:'En mi trabajo actual estamos adaptando todas las aplicaciones web para que en vez de generar código',description:'En mi trabajo actual estamos adaptando todas las aplicaciones web para que en vez de generar código'})"><script type='text/javascript'>document.getElementById("post-95-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/transformaciones-xsl-desde-php-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Añadir información extra a SfGuardUser</title>
		<link>http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/</link>
		<comments>http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 11:56:55 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=93</guid>
		<description><![CDATA[Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tiempo y ganas, básicamente) y en parte también porque no tenía nada relevante que contar. Y la verdad es que el asunto sigue igual, pero acabo de leer un pequeño post de mi primo que además de ser [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tiempo y ganas, básicamente) y en parte también porque no tenía nada relevante que contar. Y la verdad es que el asunto sigue igual, pero acabo de leer un pequeño post de <a href="http://www.flai.es/">mi primo</a> que además de ser muy interesante e instructivo, parece que es el paso lógico posterior a la instalación del plugin SfDoctrineGuardPlugin, que era la última entrada que había hecho en el blog. Así, que sin más dilación, enlazo el post:</p>
<p style="text-align: justify;"><a href="http://networkedblogs.com/p26040835">Relaciones 1:1 transparentes en Doctrine</a></p>
<img style='display:none' id="post-93-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/',title:'Añadir información extra a SfGuardUser',tweet:'Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tie',description:'Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tie'})"><script type='text/javascript'>document.getElementById("post-93-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalando sfDoctrineGuardPlugin</title>
		<link>http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/</link>
		<comments>http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 11:43:11 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=66</guid>
		<description><![CDATA[Una de las características más habituales de cualquier aplicación es la autentificación de usuarios para asegurar diferentes partes de la aplicación. El plugin sfDoctrineGuardPlugin nos facilita la implementación de esta tarea. Para instalar y habilitar este plugin tenemos que seguir estos sencillos pasos: Lo primero que tenemos que hacer es instalar el plugin en nuestro [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Una de las características más habituales de cualquier aplicación es la autentificación de usuarios para asegurar diferentes partes de la aplicación. El plugin sfDoctrineGuardPlugin nos facilita la implementación de esta tarea. Para instalar y habilitar este plugin tenemos que seguir estos sencillos pasos:<br />
<span id="more-66"></span></p>
<ul style="text-align: justify;">
<li>Lo primero que tenemos que hacer es instalar el plugin en nuestro proyecto. Podemos ejecutar la tarea de instalación:<br />
<code>symfony plugin:install sfDoctrineGuardPlugin</code><br />
para lo que tenemos que tener instalado PEAR, pero como últimamente PEAR y yo no nos hablamos, pues vamos a descargarnos el <a href="http://plugins.symfony-project.org/get/sfDoctrineGuardPlugin/sfDoctrineGuardPlugin-4.0.1.tgz">paquete</a> y lo descomprimimos en la carpeta plugins de nuestro proyecto (lo renombramos quitándole la numeración de la versión: sfDoctrineGuarPlugin).</li>
<li>Ahora activamos el plugin en el <em>archivo config/ProjectConfiguration.class.php</em> de nuestro proyecto:<br />
[php]<br />
class ProjectConfiguration extends sfProjectConfiguration<br />
{<br />
public function setup()<br />
{<br />
$this-&gt;enablePlugins(array(<br />
&#8216;sfDoctrinePlugin&#8217;,<br />
&#8216;sfDoctrineGuardPlugin&#8217;,<br />
&#8216;&#8230;&#8217;<br />
));<br />
}<br />
}<br />
[/php]</li>
<li>Reconstruimos el modelo y actualizamos la base de datos:<br />
<code>symfony doctrine:build --all</code></li>
</ul>
<p style="text-align: justify;">Ahora ya tenemos el plugin instalado. Lo siguiente que vamos a hacer es cargar los datos de prueba (que consisten en un usuario administrador):</p>
<ul style="text-align: justify;">
<li>Copiamos el fichero <em>plugins/sfDoctrineGuardPlugin/data/fixtures/fixtures.yml.sample</em> en <em>data/fixtures/sfGuard.yml</em> y cargamos los datos:<br />
<code>symfony doctrine:data-load</code></li>
</ul>
<p style="text-align: justify;">Bien, ya sólo nos queda habilitar los módulos que vayamos a utilizar y configurarlos correctamente.</p>
<ul style="text-align: justify;">
<li>En el frontend, abrimos el archivo <em>settings.yml</em> y añadimos el módulo sfGuardAuth y lo configuramos:<br />
[css]<br />
all:<br />
.settings:<br />
enabled_modules:      [default, sfGuardAuth]<br />
login_module:           sfGuardAuth<br />
login_action:           signin<br />
secure_module:          sfGuardAuth<br />
secure_action:          secure<br />
[/css]</li>
<li>Editamos la clase myUser.class.php para cambiar la clase de la que hereda:<br />
[php]<br />
class myUser extends sfGuardSecurityUser<br />
{<br />
}<br />
[/php]</li>
<li>Opcionalmente podemos cambiar el archivo routing.yml añadiendo la siguiente configuración al comienzo del archivo:<br />
[css]<br />
sf_guard_signin:<br />
url:   /login<br />
param: { module: sfGuardAuth, action: signin }</p>
<p>sf_guard_signout:<br />
url:   /logout<br />
param: { module: sfGuardAuth, action: signout }</p>
<p>sf_guard_password:<br />
url:   /request_password<br />
param: { module: sfGuardAuth, action: password }<br />
[/css]</li>
<li>En el archivo security.yml podemos asegurar los módulos que queramos o la aplicación completa:<br />
[css]<br />
default:<br />
is_secure: true<br />
[/css]</li>
</ul>
<p style="text-align: justify;">Y ya está!!! Ahora si accedemos a cualquier módulo de la aplicación y no estamos autentificados nos pedirá el usuario y el password:<br />
<a href="http://www.osukaru.es/wp-content/uploads/2009/12/login.jpg"><img class="size-full wp-image-84" title="login" src="http://www.osukaru.es/wp-content/uploads/2009/12/login.jpg" alt="login" width="265" height="129" /></a></p>
<p style="text-align: justify;">Para el backend podemos habilitar los módulos sfGuardGroup, sfGuardPermission, sfGuardUser que nos permitirán manejar usuarios, grupos y permisos.</p>
<img style='display:none' id="post-66-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/',title:'Instalando sfDoctrineGuardPlugin',tweet:'Una de las características más habituales de cualquier aplicación es la autentificación de usuar',description:'Una de las características más habituales de cualquier aplicación es la autentificación de usuar'})"><script type='text/javascript'>document.getElementById("post-66-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nos pasamos a Symfony 1.4!!!</title>
		<link>http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/</link>
		<comments>http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 20:05:15 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=64</guid>
		<description><![CDATA[Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactamente las mismas características, salvo que la versión 1.3 tiene una capa de retro-compatibilidad con las versiones anteriores. Este hecho hace que precisamente la versión 1.4 sea más mucho más limpia y algo más rápida. Para empezar nuevos proyectos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactamente las mismas características, salvo que la versión 1.3 tiene una capa de retro-compatibilidad con las versiones anteriores. Este hecho hace que precisamente la versión 1.4 sea más mucho más limpia y algo más rápida. Para empezar nuevos proyectos lo recomendable es utilizar la versión 1.4, que además será mantenido durante 3 años (hasta Noviembre de 2012) por el equipo de desarrollo de Symfony, mientras que la versión 1.3 sólo será mantenida durante un año.<br />
<span id="more-64"></span><br />
Como habíamos utilizado PEAR para instalar Symfony, pasarnos a esta nueva versión es muy sencillo, basta con desinstalar la versión actual:</p>
<p style="text-align: justify;">[shell]pear uninstall symfony/symfony[/shell]</p>
<p style="text-align: justify;">y posteriormente instalar la versión 1.4:</p>
<p style="text-align: justify;">[shell]pear install symfony/symfony-1.4.0[/shell]</p>
<p style="text-align: justify;">Como elegimos Netbeans 6.8 con soporte para Symfony como IDE para desarrollar nuestros proyectos no tenemos nada más que hacer, ya que ahora Netbeans utilizará la nueva instalación de Symfony a la hora de crear un nuevo proyecto. Entre otras cosas, veremos que al crear un nuevo proyecto ya no tenemos que habilitar el plugin para usar Doctrine, ya que éste es el que viene activado por defecto.</p>
<img style='display:none' id="post-64-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/',title:'Nos pasamos a Symfony 1.4!!!',tweet:'Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactame',description:'Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactame'})"><script type='text/javascript'>document.getElementById("post-64-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando XDebug en PHP 5.3</title>
		<link>http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/</link>
		<comments>http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 21:32:09 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=56</guid>
		<description><![CDATA[Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automáticas para nuestros proyectos. Symfony nos proporciona Lime, una librería para pruebas muy simple que está basada en PHPUnit. Al escribir pruebas para nuestro código es fácil olvidar alguna porción del mismo, por eso Symfony nos proporciona la [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automáticas para nuestros proyectos. Symfony nos proporciona Lime, una librería para pruebas muy simple que está basada en PHPUnit. Al escribir pruebas para nuestro código es fácil olvidar alguna porción del mismo, por eso Symfony nos proporciona la tarea <em>test:coverage</em>, que nos dirá qué porcentaje de nuestro código está cubierto por las pruebas (aunque esto no garantice que están probadas todas las posibilidades, sólo que cada línea de nuestro código ha sido ejecutada por alguna prueba). Sin embargo, para que esta tarea funcione tenemos que tener instalado y habilitado XDebug.</p>
<p style="text-align: justify;"><span id="more-56"></span></p>
<p style="text-align: justify;">Para instalar XDebug debemos ir a a la <a href="http://xdebug.org/index.php" target="_blank">página oficial</a>, descargar los <a href="http://xdebug.org/download.php" target="_blank">archivos necesarios</a> y seguir las <a href="http://xdebug.org/docs/install" target="_blank">instrucciones de instalación</a>. En nuestro caso estamos trabajando bajo Windows y con PHP 5.3 , por lo que nos tendremos que descargar la dll correspondiente y colocarla en algún lugar de nuestro disco duro (por ejemplo bajo el directorio <em>ext</em> de la instalación de PHP). Ahora sólo tenemos que editar el archivo php.ini de la instalación de PHP 5.3 y añadir la siguiente línea al final:</p>
<pre style="text-align: justify;"><strong>zend_extension="(ruta completa a php5.3.0)\ext\php_xdebug-2.0.5-5.3-vc6.dll"</strong></pre>
<p style="text-align: justify;">Ahora sólo tenemos que asegurarnos de que la ruta al ejecutable <em>php.exe</em> está incluida en la variable de entorno <em>Path</em> y ya podemos ejecutar la tarea <em>test:coverage</em>.</p>
<img style='display:none' id="post-56-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/',title:'Instalando XDebug en PHP 5.3',tweet:'Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automát',description:'Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automát'})"><script type='text/javascript'>document.getElementById("post-56-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
