<?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/"
>

<channel>
	<title>Planeta Código</title>
	<link>http://www.planetacodigo.com</link>
	<description>Planeta Código</description>
	<pubDate>Fri, 03 Jul 2009 12:46:01 +0000</pubDate>
	<language>es</language>

		<item>
		<title>xailer.info (esp): Nueva versión de Xailer 2</title>
		<link>http://xailer.info/esp/?p=194</link>
		<pubDate>Fri, 03 Jul 2009 12:46:01 +0000</pubDate>
		<dc:creator>Ignacio OZ</dc:creator>
		
	<category>Noticias</category>
		<guid>http://xailer.info/esp/?p=194</guid>
		<description><![CDATA[Estimados usuarios de Xailer, 
Ya está disponible una nueva versión de Xailer 2 Beta en la cual hemos intentado subsanar todos los problemas econtrados (de momento) por el rediseño de los &#8216;Datacontrols&#8217; y además incluimos un nuevo control TListView que había sido solicitado desde hace mucho tiempo.
Se han incuido varios ejemplos para demostrar la potencia [...]]]></description>
			<content:encoded><![CDATA[<p>Estimados usuarios de Xailer, </p>
<p>Ya está disponible una nueva versión de Xailer 2 Beta en la cual hemos intentado subsanar todos los problemas econtrados (de momento) por el rediseño de los &#8216;Datacontrols&#8217; y además incluimos un nuevo control TListView que había sido solicitado desde hace mucho tiempo.</p>
<p>Se han incuido varios ejemplos para demostrar la potencia del control TListView. Os dejo unas imagenes de los mismos:</p>
<table>
<tr>
<td>
<a class="imagelink" href="http://xailer.info/esp/esp/wp-content/uploads/2009/07/2009-07-03_143231.png" title="2009-07-03_143231.png"><img id="image198" src="http://xailer.info/esp/esp/wp-content/uploads/2009/07/2009-07-03_143231.miniatura.png" alt="2009-07-03_143231.png" /></a>
</td>
<td>
<a class="imagelink" href="http://xailer.info/esp/esp/wp-content/uploads/2009/07/2009-07-03_143302.png" title="2009-07-03_143302.png"><img id="image195" src="http://xailer.info/esp/esp/wp-content/uploads/2009/07/2009-07-03_143302.miniatura.png" alt="2009-07-03_143302.png" /></a>
</td>
<td>
<a class="imagelink" href="http://xailer.info/esp/esp/wp-content/uploads/2009/07/2009-07-03_143341.png" title="2009-07-03_143341.png"><img id="image197" src="http://xailer.info/esp/esp/wp-content/uploads/2009/07/2009-07-03_143341.miniatura.png" alt="2009-07-03_143341.png" /></a>
</td>
</tr>
</table>
<p> </p>
<p>No obstante, aún falta por realizar una mejor integración del control en el IDE y su documentación, que seguro estará para la próxima publicación de Xailer 2.</p>
<p>Podéis encontrar la nueva versión de Xailer 2 Beta en el siguiente enlace: </p>
<p><a href="http://www.xailer.com/files/xailer20beta.exe">http://www.xailer.com/files/xailer20beta.exe</a></p>
<p>También podéis descargar la versión xHarbour, que no ha cambiado desde la anterior publicación, desde la siguiente dirección:</p>
<p><a href="http://www.xailer.com/files/xharboursetup2.exe">http://www.xailer.com/files/xharboursetup2.exe</a></p>
<p>Os recordamos que está versión de Xailer sólo está disponible para usuarios con suscripción activa. Leer el artículo <a href=http://xailer.info/esp/?p=114 >Novedades de Xailer 2.0</a> para más información.</p>
<p>Un cordial saludo, </p>
<p>[El equipo de Xailer]
</p>
]]></content:encoded>
		</item>
		<item>
		<title>xailer.info (esp): Componentes externos (II)</title>
		<link>http://xailer.info/esp/?p=165</link>
		<pubDate>Fri, 03 Jul 2009 08:15:53 +0000</pubDate>
		<dc:creator>José Lalín</dc:creator>
		
	<category>Componentes</category>
	<category>Como hacer ...</category>
		<guid>http://xailer.info/esp/?p=165</guid>
		<description><![CDATA[En esta ocasión aprenderemos qué son los editores de propiedades, cómo usarlos en nuestros componentes y desarrollaremos un sencillo editor de propiedades paso a paso. 

Un editor de propiedades es una extensión del IDE que permite manipular una propiedad publicada de un componente en tiempo de diseño y ofrece una manera sencilla de establecer y/o [...]]]></description>
			<content:encoded><![CDATA[<p>En esta ocasión aprenderemos qué son los editores de propiedades, cómo usarlos en nuestros componentes y desarrollaremos un sencillo editor de propiedades paso a paso. </p>
<p><a id="more-165"></a></p>
<p>Un editor de propiedades es una extensión del IDE que permite manipular una propiedad publicada de un componente en tiempo de diseño y ofrece una manera sencilla de establecer y/o recuperar su valor, haciendo más cómoda la utilización y configuración de un componente.</p>
<p>Los editores de propiedades son una poderosa herramienta que puede marcar la diferencia entre un componente aceptable y uno realmente formidable. A través de ellos podremos dotarlos de nuevas características que van más allá de la simple validación del valor de las propiedades, pudiendo mostrar una lista de valores, acotar valores, mostrar formularios que permitan la asignación del valor de una o varias propiedades, etc.</p>
<p>Para introducir el valor de las propiedades en tiempo de diseño se utiliza el inspector de objetos, el cuál muestra una columna con el nombre de la propiedad y otra con el valor de dicha propiedad. Su uso es sencillo, se introduce un nuevo valor y listo. ¿Fácil, eh? Aunque externamente parece algo trivial, internamente, el inspector de objetos se comunica con los componentes usando sus editores de propiedades para obtener o fijar el valor, para informar de cómo se debe almacenar una propiedad, etc.</p>
<h3>Editores estándar</h3>
<p>Xailer incluye una serie de editores de propiedades por defecto que son suficiente para la mayoría de las propiedades con las que trabajamos habitualmente, pero también permite que creemos nuestros propios editores, derivemos de ellos y que incluso reemplacemos los que una determinada propiedad tiene por defecto.</p>
<p>PE_Color<br />
PE_Icon<br />
PE_Anchors<br />
PE_Font<br />
PE_Cursor<br />
PE_Brush<br />
PE_StringOrNil<br />
PE_ExtendedString<br />
PE_Picture<br />
PE_StringList<br />
PE_NumberList<br />
PE_MultiList<br />
PE_Control<br />
PE_Component<br />
PE_ImageList<br />
PE_Menu<br />
PE_Edit<br />
PE_DataField<br />
PE_BrowseFolder<br />
PE_BrowseFile<br />
PE_BrwRecSel<br />
PE_ButtonBitmap<br />
PE_Tooltip<br />
PE_DbfField<br />
PE_ADOConnect<br />
PE_DataSourceTables<br />
PE_DbfDataSetName<br />
PE_WideString<br />
PE_DbfDataSource<br />
PE_SQLiteDataSource<br />
PE_DataSourceCatalogs<br />
PE_TreeView</p>
<h3>El editor básico TPropertyEditor</h3>
<p>Estos editores derivan de la clase básica TPropertyEditor que provee el interface para que cualquiera de ellos se comunique con el inspector de objetos y el IDE.</p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >CLASS</span> TPropertyEditor</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA oObj</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA cProperty</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA aProperty</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA nProperty</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA cType</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA cDataType</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA <span >Value</span></div>
</li>
<li >
<div >&nbsp; &nbsp;DATA cValue</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA <span >Default</span></div>
</li>
<li >
<div >&nbsp; &nbsp;DATA aValues</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA lRun&nbsp; &nbsp; &nbsp; <span >INIT</span> .<span >F</span>.</div>
</li>
<li >
<div >&nbsp; &nbsp;DATA lExpand&nbsp; &nbsp;<span >INIT</span> .<span >F</span>.</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> <span >Get</span><span >&#40;</span> oObj, nProperty <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> <span >Set</span><span >&#40;</span> <span >Value</span>, nIndex <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> <span >Load</span><span >&#40;</span> cValue <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> <span >Save</span><span >&#40;</span> cPrefix, cSufix <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> <span >DblClick</span><span >&#40;</span> <span >Value</span> <span >&#41;</span> VIRTUAL</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> Run<span >&#40;</span> <span >Value</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >ENDCLASS</span></div>
</li>
</ol>
</div>
<p></p>
<p>* DATA cProperty<br />
   Contiene el nombre de la propiedad inspeccionada</p>
<p>* DATA cType<br />
   Es el tipo de dato del valor actual de la propiedad</p>
<p>* DATA cDataType<br />
   Es el tipo de dato indicado en la cláusula AS &#8230; de la declaración de la propiedad</p>
<p>* DATA Value<br />
   El valor actual de la propiedad</p>
<p>* DATA cValue<br />
   Es el valor actual de la propiedad en formato cadena para mostrar en el inspector</p>
<p>* DATA Default<br />
   Es el valor por defecto para la propiedad (cláusula INIT de la declaración)</p>
<p>* DATA aValues<br />
   Es el array de valores para mostrar en un combo en el inspector. Es un array de dos dimensiones (nºelementos x 2 columnas), donde la primera columna es el valor de cadena a mostrar en el combo del inspector, y la segunda columna es el valor real que hay que asignar a la propiedad.</p>
<p>* DATA oObj<br />
   Contiene una instancia del objeto al que pertenece la propiedad</p>
<p>* DATA lRun<br />
   Indica si se muestra el botón &#8220;&#8230;&#8221; cuando la propiedad tiene el foco.</p>
<p>* DATA lExpand<br />
   Muestra el pequeño triángulo naranja en el inspector que sirve para abrir un formulario con un memo con el valor de la propiedad.</p>
<p>* METHOD DblClick( @Value )<br />
   Se ejecuta al hacer doble click en el inspector y recibe el valor actual de la propiedad por referencia. Si no se define este método, por defecto, llama a Run().</p>
<p>* METHOD Run( @Value )<br />
  Se encarga de mostrar el interface de usuario si la propiedad lo requiere y se ejecuta al pulsar el botón &#8220;&#8230;&#8221;. También recibe el valor actual de la propiedad por referencia. Debe devolver .T. para actualizar la propiedad y .F. para dejar su valor anterior.</p>
<p>* METHOD Get( oObj, nProperty )<br />
   Obtiene el valor asignado a la propiedad <cProperty>|<nProperty> del objeto <oObj> y asigna el resto de las datas del editor de propiedades (cProperty, cType, Value, etc.). Siempre conviene llamar a Super:Get(&#8230;)</p>
<p>* METHOD Set( Value, nIndex )<br />
  Asigna el valor <Value> a la propiedad correspondiente del objeto inspeccionado. <nIndex> sólo tiene valor cuando en el inspector aparece un combo para cambiar el valor de la propiedad. Siempre conviene llamar a Super:Set(&#8230;)</p>
<p>* METHOD Load( cValue )<br />
   Asigna el valor de la propiedad a partir de la cadena leida desde el fichero .xfm</p>
<p>* METHOD Save( cPrefix, cSufix )<br />
   Devuelve la cadena que hay que guardar en el fichero .xfm a partir del valor de la propiedad</p>
<h3>Escribir un editor de propiedades</h3>
<p>Vamos a desarrollar nuestro primer editor de propiedades, que será editable sobre el propio inspector de objetos y también mostrará un formulario para cambiar el valod de la propiedad.</p>
<p>Los pasos necesarios para escribir un editor de propiedades son los siguientes:</p>
<p>    * Crear una nueva clase que descienda de TPropertyEditor o de algún editor estándar.<br />
    * Desarrollar los métodos necesarios para dotar al editor de propiedades de la funcionalidad deseada. </p>
<p>Como norma general, se suele anteponer el prefijo PE_ a las clases que definen un editor de propiedades, por ejemplo: PE_MyColorEditor, aunque no es obligatorio.</p>
<h3>Creando nuestro primer editor</h3>
<p>Imaginemos que tenemos un componente con una propiedad que guarda una dirección de correo electrónico:</p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >CLASS</span> TMyComponent <span >FROM</span> TComponent</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >PUBLISHED:</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >PROPERTY</span> cEmail <span >INIT</span> <span >&quot;&quot;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >ENDCLASS</span></div>
</li>
</ol>
</div>
<p>
La opción más sencilla cuando definimos el componente sería dejarlo como está en el ejemplo pero deberíamos pensar en hacer la vida más fácil a quien vaya a usarlo, así que vamos a establecer un editor que haga una validación básica de la propiedad.</p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >CLASS</span> PE_EmailEditor <span >FROM</span> TPropertyEditor</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >PUBLIC</span>:</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >DATA</span> lRun&nbsp; &nbsp;<span >INIT</span> .<span >T</span>.</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> Run<span >&#40;</span> <span >Value</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> <span >DblClick</span><span >&#40;</span> <span >Value</span> <span >&#41;</span> INLINE ::<span >Run</span><span >&#40;</span> @<span >Value</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >METHOD</span> MailValidate<span >&#40;</span> oSender <span >&#41;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >ENDCLASS</span></div>
</li>
</ol>
</div>
<p>
En la definición del editor establecemos lRun a .T. para indicar que la propiedad debe mostrar el botón de acción (los puntos &#8220;&#8230;&#8221;) y hacemos que se lance la misma acción al hacer doble click que al pulsar el botón de acción.</p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >METHOD</span> Run<span >&#40;</span> <span >Value</span> <span >&#41;</span> <span >CLASS</span> PE_EmailEditor</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >LOCAL</span> oForm</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >LOCAL</span> oEditMail</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >LOCAL</span> lReturn := .<span >F</span>.</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >WITH</span> <span >OBJECT</span> oForm := TMailEditForm<span >&#40;</span><span >&#41;</span>:<span >New</span><span >&#40;</span> <span >Application</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >SetBounds</span><span >&#40;</span> <span >235</span>, <span >197</span>, <span >302</span>, <span >145</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >SetClientSize</span><span >&#40;</span> <span >294</span>, <span >118</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >cText</span> := <span >&quot;Email PropertyEditor&quot;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >nBorderStyle</span> := bsDIALOG</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >lHideOnClose</span> := .<span >T</span>.</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >Create</span><span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >END</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >WITH</span> <span >OBJECT</span> TLabel<span >&#40;</span><span >&#41;</span>:<span >New</span><span >&#40;</span> oForm <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >SetBounds</span><span >&#40;</span> <span >12</span>, <span >12</span>, <span >27</span>, <span >14</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >cText</span> := <span >&quot;EMail&quot;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >Create</span><span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >END</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >WITH</span> <span >OBJECT</span> oEditMail := <span >TEdit</span><span >&#40;</span><span >&#41;</span>:<span >New</span><span >&#40;</span> oForm <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >SetBounds</span><span >&#40;</span> <span >12</span>, <span >28</span>, <span >270</span>, <span >20</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >Create</span><span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >END</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >WITH</span> <span >OBJECT</span> TButton<span >&#40;</span><span >&#41;</span>:<span >New</span><span >&#40;</span> oForm <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >SetBounds</span><span >&#40;</span> <span >12</span>, <span >80</span>, <span >80</span>, <span >25</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >cText</span> := <span >&quot;&amp;Validate&quot;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >lDefault</span> := .<span >T</span>.</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >OnClick</span> := <span >&quot;MailValidate&quot;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >Create</span><span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >END</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >WITH</span> <span >OBJECT</span> TButton<span >&#40;</span><span >&#41;</span>:<span >New</span><span >&#40;</span> oForm <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >SetBounds</span><span >&#40;</span> <span >112</span>, <span >80</span>, <span >80</span>, <span >25</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >cText</span> := <span >&quot;Ok&quot;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >nModalResult</span> := mrOK</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >Create</span><span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >END</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >WITH</span> <span >OBJECT</span> TButton<span >&#40;</span><span >&#41;</span>:<span >New</span><span >&#40;</span> oForm <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >SetBounds</span><span >&#40;</span> <span >204</span>, <span >80</span>, <span >80</span>, <span >25</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >cText</span> := <span >&quot;Cancel&quot;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >nModalResult</span> := mrCANCEL</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; :<span >Create</span><span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >END</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp;<span >IF</span> :<span >ShowModal</span><span >&#40;</span><span >&#41;</span> == mrOK</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; &nbsp; <span >IF</span> ::<span >MailValidate</span><span >&#40;</span> oEditMail:<span >Value</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span >Value</span> := oEditMail:<span >Value</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lReturn := .<span >T</span>.</div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; &nbsp; <span >ENDIF</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; &nbsp; :<span >End</span><span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp;<span >ENDIF</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >END</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >RETURN</span> lReturn</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >METHOD</span> MailValidate<span >&#40;</span> oSender <span >&#41;</span> <span >CLASS</span> PE_EmailEditor</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >LOCAL</span> lValid := .<span >F</span>.</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >//Comprobamos que incluye la arroba y el punto</span></div>
</li>
<li >
<div >&nbsp; &nbsp;<span >IF</span> <span >Empty</span><span >&#40;</span> oSender:<span >Value</span> <span >&#41;</span> .<span >OR</span>. <span >At</span><span >&#40;</span> <span >&quot;@&quot;</span>, oSender:<span >Value</span> <span >&#41;</span> > <span >0</span> .<span >OR</span>. <span >At</span><span >&#40;</span> <span >&quot;.&quot;</span>, oSender:<span >Value</span> <span >&#41;</span> > <span >0</span></div>
</li>
<li >
<div >&nbsp; &nbsp; &nbsp; lValid := .<span >T</span>.</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >ENDIF</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >RETURN</span> lValid</div>
</li>
</ol>
</div>
<p>
Este sencillo editor muestra un formulario con un TEdit para introducir la dirección de email y tres botones para validar la dirección y para Aceptar o Cancelar el formulario.</p>
<p>Tras cerrar el formulario, volvemos a comprobar si la dirección es correcta llamando a ::MailValidate() y sólo actualizamos la propiedad y devolvemos .T. en caso de que la validación sea correcta.</p>
<p>Sólo nos queda enlazar a nuestra propiedad con su nuevo editor, así que la declaramos:</p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >CLASS</span> TMyComponent <span >FROM</span> TComponent</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >PUBLISHED:</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >PROPERTY</span> cEmail <span >INIT</span> <span >&quot;&quot;</span> EDITOR PE_EmailEditor</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >ENDCLASS</span></div>
</li>
</ol>
</div>
<p></p>
<p>En el ZIP adjunto se encuentran todos los fuente del componente de ejemplo y una DLL ya compilada para probarla en el IDE (ver <a href="http://xailer.info/esp/?p=130">post</a>)
</p>
]]></content:encoded>
		</item>
		<item>
		<title>xailer.info (esp): Componentes externos (I)</title>
		<link>http://xailer.info/esp/?p=132</link>
		<pubDate>Fri, 03 Jul 2009 08:15:43 +0000</pubDate>
		<dc:creator>José Lalín</dc:creator>
		
	<category>Componentes</category>
	<category>Como hacer ...</category>
		<guid>http://xailer.info/esp/?p=132</guid>
		<description><![CDATA[En la serie de artículos que empieza hoy, vamos a aprender paso a paso cómo crear un componente para Xailer 2.0 y cómo integrarlo en el IDE.

En este capítulo aprenderemos lo más básico para crear un nuevo componente, generar la DLL para el IDE y la librería estática (.LIB) para enlazar con las aplicaciones en [...]]]></description>
			<content:encoded><![CDATA[<p>En la serie de artículos que empieza hoy, vamos a aprender paso a paso cómo crear un componente para Xailer 2.0 y cómo integrarlo en el IDE.</p>
<p><a id="more-132"></a></p>
<p>En este capítulo aprenderemos lo más básico para crear un nuevo componente, generar la DLL para el IDE y la librería estática (.LIB) para enlazar con las aplicaciones en las que queramos usarlo.</p>
<p>Lo primero que vamos a hacer es crear un nuevo proyecto, al que llamaremos MyFirstComponentDll, en la carpeta samples\MyFirstComponent.</p>
<p><img id="image149" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/nuevadll.jpg"/></p>
<p><p>
Cuando el IDE muestre el formulario &#8220;Propiedades del proyecto&#8221;, seleccionaremos la opción DLL en &#8220;Tipo de proyecto&#8221; y haremos un pequeño cambio. En la opción carpetas, en la entrada Obj el IDE nos ofrecerá c:\xailer2\samples\MyFirstComponentDll\<strong>Obj</strong> como directorio por defecto, pero le añadiremos &#8220;Dll&#8221; a esta ruta, quedando c:\xailer2\samples\MyFirstComponentDll\<strong>ObjDll</strong>. Una vez hecho esto, aceptaremos el resto de opciones por defecto para continuar.</p>
<p><img id="image142" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/projdll.jpg"/></p>
<p><p>
En estos dos pasos anteriores hemos generado el archivo de proyecto para construir la librería dinámica para el IDE. Lo siguiente será repetir estos pasos pero cambiando un par de cosas:</p>
<p>Creamos otro proyecto en el <strong>mismo directorio</strong> (esto es importante), donde hemos guardado el anterior, pero con otro nombre, esta vez le llamaremos &#8220;MyFirstComponent&#8221;.</p>
<p><img id="image150" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/nuevalib.jpg"/></p>
<p><p>
Otra vez el IDE nos muestra el formulario &#8220;Propiedades del proyecto&#8221;, seleccionaremos la opción LIB en &#8220;Tipo de proyecto&#8221; y aceptamos.</p>
<p><img id="image144" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/projlib.pg"/></p>
<p><p>
Si los dos pasos anteriores se han completado correctamente, debemos tener dos archivos de proyecto &#8220;MyFirstComponentDll&#8221; y &#8220;MyFirstComponent&#8221; en la carpeta samples\MyFirstComponent.</p>
<p><img id="image143" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/projexplore.jpg"/></p>
<p><p>
Para no complicar demasiado este artículo, el componente que vamos a crear, TMyLabel, será un control derivado de TLabel y cuya única diferencia con la clase padre es que va a tener como color de fondo por defecto el blanco y no va a ser transparente.</p>
<p>
<p><h3>Construir la librería</h3>
<p>Una vez que ya tenemos el espacio de trabajo listo, podemos empezar con la definición del componente. Añadimos un nuevo módulo PRG (CTRL+N) y lo salvamos (CTRL+S) con el nombre MyLabel.prg</p>
<p><img id="image148" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/newmodule.jpg"/></p>
<p><p>
En este nuevo módulo desarrollamos la clase TMyLabel:</p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >CLASS</span> TMyLabel <span >FROM</span> TLabel</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >PUBLISHED:</div>
</li>
<li >
<div >&nbsp; &nbsp;<span >PROPERTY</span> nClrPane&nbsp; &nbsp; &nbsp; &nbsp;<span >INIT</span> clWhite</div>
</li>
<li >
<div >&nbsp; &nbsp;PROPERTY lTransparent&nbsp; &nbsp;<span >INIT</span> .<span >F</span>.</div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >ENDCLASS</span></div>
</li>
</ol>
</div>
<p><p>
Compilamos (F9) y si todo ha ido bien, el IDE habrá construído MyFirstComponent.Lib en la carpeta del proyecto.</p>
<p>
<img id="image136" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/compilelib.jpg"/></p>
<p>
<p><h3>Construir la DLL</h3>
<p>Para terminar de construir el componente, abrimos el proyecto MyFirstComponentDll que creamos al principio y con Proyecto->Añadir archivo al proyecto, añadimos el archivo MyLabel.prg con la definición de la clase.</p>
<p>Creamos un nuevo módulo PRG (CTRL+N) y lo salvamos (CTRL+S) con el nombre MyLabelDll.prg y le añadimos el código que se encargará de registrar el componente en el IDE:</p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >INIT</span> <span >PROCEDURE</span> InitDLL<span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;RegisterComponent<span >&#40;</span> <span >&quot;Samples&quot;</span>, <span >&quot;mylabel&quot;</span>, <span >&quot;TMyLabel&quot;</span>, <span >&#123;</span>|| TMyLabel<span >&#40;</span><span >&#41;</span> <span >&#125;</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >RETURN</span></div>
</li>
</ol>
</div>
<p>
<br />
En el caso de un proyecto que tenga más de un componente, la única diferencia es que será necesario llamar a RegisterComponent() tantas veces como necesitemos, por ejemplo: supongamos que tenemos un proyecto que contiene tres controles tal que TMyLabel, TMyEdit y TMyButton, registrarlos es tan sencillo como: </p>
<div class="ch_code_container" >
<ol>
<li >
<div ><span >INIT</span> <span >PROCEDURE</span> InitDLL<span >&#40;</span><span >&#41;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div >&nbsp; &nbsp;RegisterComponent<span >&#40;</span> <span >&quot;Samples&quot;</span>, <span >&quot;mylabel&quot;</span>, <span >&quot;TMyLabel&quot;</span>, <span >&#123;</span>|| TMyLabel<span >&#40;</span><span >&#41;</span> <span >&#125;</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;RegisterComponent<span >&#40;</span> <span >&quot;Samples&quot;</span>, <span >&quot;myedit&quot;</span>, <span >&quot;TMyEdit&quot;</span>, <span >&#123;</span>|| TMyEdit<span >&#40;</span><span >&#41;</span> <span >&#125;</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp; &nbsp;RegisterComponent<span >&#40;</span> <span >&quot;Samples&quot;</span>, <span >&quot;mybutton&quot;</span>, <span >&quot;TMyButton&quot;</span>, <span >&#123;</span>|| TMyButton<span >&#40;</span><span >&#41;</span> <span >&#125;</span> <span >&#41;</span></div>
</li>
<li >
<div >&nbsp;</div>
</li>
<li >
<div ><span >RETURN</span></div>
</li>
</ol>
</div>
<p>
<br />
Por supuesto, recordando siempre que deberemos añadir al archivo de recursos una imagen por cada componente para identificarlos correctamente en la paleta del IDE.</p>
<p><p>
<img id="image138" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/newmoduledll.jpg"/></p>
<p><p>
Para completar la construcción del componente, necesitaremos una imagen que lo identifique en la paleta del IDE. Para ello abrimos el Gestor de recursos del menú Vista, pulsamos en el botón &#8220;Nuevo recurso&#8221; y aceptamos el nombre por defecto que nos ofrece el IDE.</p>
<p>Una vez creado el archivo de recursos, añadimos el bitmap que identificará al nuevo componente y cerramos el gestor de recursos. </p>
<p><img id="image134" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/addresource.jpg"/></p>
<p>
<p><h4>Consideraciones</h4>
<p>La función RegisterComponent() le indica al IDE el nombre de la paleta en la que colocar el componente, el nombre del bitmap, la tooltip que se mostrará al poner el puntero del ratón encima del componente y la función de clase que crea el componente y hay que llamarla siempre que queramos registrar un componente externo.</p>
<p>Como norma general, el nombre del procedimiento que registra el componente puede ser cualquiera, la única condición es que sea un INIT PROCEDURE.</p>
<p>Hay que recordar que el bitmap debe tener unas dimensiones de 24&#215;24 para que se muestre correctamente en la paleta y en caso de que el componente no tenga ningún bitmap asociado, el IDE le asignará uno por defecto.</p>
<p>Es posible incluir información en el propio componente usando la opción Proyecto->Propiedades del proyecto->Versión. La información de número de versión, copyright, etc. que se introduzca será accesible luego desde el botón &#8220;Información&#8230;&#8221; del Gestor de componentes.</p>
<p>Una vez completados los pasos anteriores, compilamos (F9) el proyecto y se creará la DLL con el nuevo componente listo para ser usado desde el IDE.</p>
<p><img id="image135" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/compiledll.jpg"/></p>
<p>
<p><h3>Instalar el componente</h3>
<p>Para utilizar el componente desde el IDE, seleccionamos la opción Componentes->Gestor de componentes del menú principal, pulsamos el botón &#8220;Añadir&#8221; y desde el cuadro de diálogo que se muestra, apuntamos a samples\MyFirstComponent para seleccionar la DLL que acabamos de construir.</p>
<p><img id="image145" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/registerdll.jpg"/></p>
<p><p>
Una vez que pulsemos en el botón Aceptar y comprobamos que la pestaña &#8220;Samples&#8221; ya tiene correctamente registrado el nuevo componente.</p>
<p><img id="image141" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/palette.jpg"/></p>
<p>
<p><h3>Utilizar el componente</h3>
<p>En aquellos proyectos donde queramos utilizar el componente, deberemos informar al IDE para que enlace la librería con nuestra aplicación, así que abrimos el formulario &#8220;Propiedades del proyecto&#8221; y en la opción &#8220;Librerías&#8221; añadimos la librería que construimos al principio y que estará en samples\MyFirstComponent\MyFirstComponent.lib</p>
<p><img id="image152" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/addlib.jpg"/></p>
<p><p>
Para probar el nuevo componente, creamos un nuevo formulario en un proyecto nuevo (o en uno de nuestros proyectos), seleccionamos la pestaña &#8220;Samples&#8221; de la paleta de componentes, pinchamos en el componente y lo soltamos en el formulario. </p>
<p><img id="image146" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/testdll.jpg"/></p>
<p><p>
¡Funciona! Ahora habrá que probarlo también en tiempo de ejecución, así que F9 y &#8230;</p>
<p><img id="image147" src="http://xailer.info/esp/esp/wp-content/uploads/2009/01/testruntime.jpg"/></p>
<p>
<p><h3>Notas finales</h3>
<p>Si se quiere hacer algún cambio en el código del componente y la DLL está cargada en el IDE, es importante no olvidar que antes de recompilar, hay que eliminarla con el Gestor de componentes, si no el enlazador nos dará un mensaje de error avisando que la DLL está siendo usada.</p>
<p>El <a id="p151" href="http://xailer.info/esp/esp/wp-content/uploads/2009/01/myfirstcomponent.zip"/>ZIP</a>adjunto incluye el proyecto completo para generar la librería y la DLL.
</p>
]]></content:encoded>
		</item>
		<item>
		<title>Cerebro en la Sombra » Técnico: Webservices: Tratando con cabeceras SOAP en PHP</title>
		<link>http://blog.osusnet.com/2009/07/02/webservices-tratando-con-cabeceras-soap-en-php/</link>
		<pubDate>Thu, 02 Jul 2009 09:06:03 +0000</pubDate>
		<dc:creator>Osus</dc:creator>
		
	<category>Técnico</category>
	<category>Programación</category>
	<category>PHP</category>
	<category></category>
	<category>PHP</category>
	<category>SOAP</category>
	<category>PHP</category>
	<category>PHP</category>
	<category>PHP</category>
	<category>PHP</category>
	<category>webservice</category>
		<guid>http://blog.osusnet.com/2009/07/02/webservices-tratando-con-cabeceras-soap-en-php/</guid>
		<description><![CDATA[Llevo ya un tiempo bastante liado con webservices a los que debo llamar con PHP y hoy me ha tocado lidiar con cabeceras SOAP. La verdad es que es un mundo bastante oscuro y me he encontrado con muchas trabas. Os contaré cuales y cómo las he solucionado, pero veamos primero algo de teoría.
Los servicios [...]]]></description>
			<content:encoded><![CDATA[<p>Llevo ya un tiempo bastante liado con <em>webservices</em> a los que debo llamar con <a href="http://www.php.net">PHP</a> y hoy me ha tocado lidiar con cabeceras <strong>SOAP</strong>. La verdad es que es un mundo bastante oscuro y me he encontrado con muchas trabas. Os contaré cuales y cómo las he solucionado, pero veamos primero algo de teoría.</p>
<p>Los <a href="http://es.wikipedia.org/wiki/Servicios_Web">servicios web</a> se han convertido en el principal modo de intercambio de  información entre aplicaciones independientemente de plataformas, sistemas operativos y lenguajes de programación. <a href="http://es.wikipedia.org/wiki/SOAP">SOAP</a> es uno de los protocolos sobre los que se realiza el intercambio de los datos y está basado en XML, de manera que la parte cliente interroga al servidor con un código XML en el formato adecuado y recibe la respuesta en otro XML. Para entender de qué estamos hablando veamos la estructura de una petición <strong>SOAP</strong> y su respuesta.</p>
<p>Llamada (<strong>request</strong>):</p>
<div class="dean_ch" >
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1"><?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1"><SOAP-ENV:Envelope</span> <span class="re0">xmlns:SOAP-ENV</span>=<span class="st0">&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;</span> xmlns:ns1=<span class="st0">&quot;com.xplota.ws&quot;</span><span class="re2">></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"><SOAP-ENV:Header<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><ns1:entity<span class="re2">></span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Code<span class="re2">></span></span></span>1<span class="sc3"><span class="re1"></Code<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Desc<span class="re2">></span></span></span><span class="sc3"><span class="re1"></Desc<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"></ns1:entity<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><ns1:language<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Code<span class="re2">></span></span></span>1<span class="sc3"><span class="re1"></Code<span class="re2">></span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Desc<span class="re2">></span></span></span><span class="sc3"><span class="re1"></Desc<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"></ns1:language<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><ns1:userId<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Code<span class="re2">></span></span></span>1<span class="sc3"><span class="re1"></Code<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Desc<span class="re2">></span></span></span><span class="sc3"><span class="re1"></Desc<span class="re2">></span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"></ns1:userId<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"></SOAP-ENV:Header<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"><SOAP-ENV:Body<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"></SOAP-ENV:Body<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1"></SOAP-ENV:Envelope<span class="re2">></span></span></span></div>
</li>
</ol>
</div>
<p>Respuesta (<strong>response</strong>):</p>
<div class="dean_ch" >
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1"><?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1"><soap:Envelope</span> <span class="re0">xmlns:soap</span>=<span class="st0">&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;</span> <span class="re0">xmlns:xsi</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span class="re0">xmlns:xsd</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema&quot;</span><span class="re2">></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"><soap:Header<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Status</span> <span class="re0">xmlns</span>=<span class="st0">&quot;com.xplota.ws&quot;</span><span class="re2">></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Code<span class="re2">></span></span></span>0<span class="sc3"><span class="re1"></Code<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"><Desc<span class="re2">></span></span></span>Ok<span class="sc3"><span class="re1"></Desc<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1"></Status<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"></soap:Header<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"><soap:Body<span class="re2">></span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1"></soap:Body<span class="re2">></span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1"></soap:Envelope<span class="re2">></span></span></span></div>
</li>
</ol>
</div>
<p>Como se puede ver en los listados anteriores, tanto el <strong><em>request</em></strong> como el <strong><em>response</em></strong> constan de dos nodos XML, <em>header</em> y <em>body</em>. El que se utiliza habitualmente es el <em>body</em> (que yo he dejado en blanco pues no nos interesa en este momento) y es el que contendría tanto los parámetros que se envían al <em>webservice</em> en el <em><strong>request </strong></em>como los que devuelve en el <strong><em>response</em></strong>.</p>
<h3>Enviando headers soap</h3>
<p>En el caso que nos ocupa debía enviar determinados parámetros en el <em>header</em> y leer de allí los potenciales códigos de error si los hubiese habido. El envío, pese a ser una estructura en vez de un parámetro simple, fue sencillo, se define una clase con los parámetros adecuados y se le envía directamente. El motor de <strong>SOAP</strong> de PHP se encarga de la traducción. Veamos un caso práctico.</p>
<div class="dean_ch" >
<ol>
<li class="li1">
<div class="de1"><span class="co1">//definimos la clase para las cabeceras</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> wsHeader</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$Code</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$Desc</span> = <span class="st0">&#8221;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$code</span>, <span class="re0">$desc</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-><span class="me1">Code</span>=<span class="re0">$code</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-><span class="me1">Desc</span>=<span class="re0">$desc</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//instanciamos el cliente soap</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$par</span>=<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$client</span> = <span class="kw2">new</span> SoapClient<span class="br0">&#40;</span><span class="st0">&quot;http://midominio.com/ws?wsdl&quot;</span>, <span class="re0">$par</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//añadimos las cabeceras a las peticiones</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$headers</span>=<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$headers</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw2">new</span> SoapHeader<span class="br0">&#40;</span><span class="st0">&quot;com.xplota.ws&quot;</span>, <span class="st0">&#8216;entity&#8217;</span>, <span class="kw2">new</span> wsHeader<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="st0">&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$headers</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw2">new</span> SoapHeader<span class="br0">&#40;</span><span class="st0">&quot;com.xplota.ws&quot;</span>, <span class="st0">&#8216;language&#8217;</span>, <span class="kw2">new</span> wsHeader<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="st0">&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$headers</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw2">new</span> SoapHeader<span class="br0">&#40;</span><span class="st0">&quot;com.xplota.ws&quot;</span>, <span class="st0">&#8216;userId&#8217;</span>, <span class="kw2">new</span> wsHeader<span class="br0">&#40;</span><span class="nu0">1</span>, <span class="st0">&#8221;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$client</span>->__setSoapHeaders<span class="br0">&#40;</span><span class="re0">$headers</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//lanzamos la llamada al metodo del ws</span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$result</span> = <span class="re0">$client</span>-><span class="me1">TuMetodo</span><span class="br0">&#40;</span><span class="re0">$parametros</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Como veis es bastante sencillo de entender. Al añadir una cabecera hay que indicarle el <em>namespace</em> al que pertenece para que el motor <strong>SOAP</strong> sepa como tratarla, se le da un nombre y el objeto que la contiene.</p>
<p>Con esto hemos solucionado la parte del envío de nuestras cabeceras <strong>SOAP</strong> y tendremos un <em>request</em> como indicábamos en el primer XML.</p>
<h3>Recibiendo headers SOAP</h3>
<p>Ahora resulta que el método de nuestro <em>webservice</em> nos responde con otras cabeceras que debemos saber interpretar según el XML de <em>response</em> del segundo listado. Pues tenemos un problema y muy gordo. No hay forma de obtener estas cabeceras, el motor <strong>SOAP</strong> de PHP sólo devuelve el <em>body</em>, nunca los <em>headers</em>.</p>
<p>Según el manual de PHP el método <a href="http://www.php.net/manual/en/soapclient.soapcall.php">__soapCall</a> del cliente <strong>SOAP</strong> permite definir un <em>array</em> en el que se devolverán estas cabeceras, pero no fui capaz de hacer funcionar la invocación de un método del <em>webservice</em> con esta sintaxis mientras que invocándolos directamente en el cliente (cómo la documentación indica que se puede hacer) sí que me funcionaba perfectamente. Es decir, la teoría dice que con el primer método puedo recibir las cabeceras pero no me funcionó mientras que el segundo me funcionaba pero no me devuelve las cabeceras ni hay ningún método para recuperarlas.</p>
<p>Tras pelearme mucho con las funciones <strong>SOAP</strong> e investigar todavía más no llegué a ninguna conclusión, es como si no le hubiese pasado a nadie, no encontré absolutamente nada útil. Sólo me quedaba una solución, hacer mi propia clase <strong>SOAP</strong> a partir de la original y procesar el XML del response <strong>a mano</strong> para obtener los datos que necesitaba. Dicho y hecho. Veamos la solución.</p>
<p>Primero creo mi propia clase de <strong>SOAP</strong> y compruebo si voy a poder hacer lo que quiero.</p>
<div class="dean_ch" >
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> XSoapClient <span class="kw2">extends</span> SoapClient<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$wsdl</span>, <span class="re0">$options</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; parent::__construct<span class="br0">&#40;</span><span class="re0">$wsdl</span>, <span class="re0">$options</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __doRequest<span class="br0">&#40;</span><span class="re0">$request</span>, <span class="re0">$location</span>, <span class="re0">$action</span>, <span class="re0">$version</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span>=parent::__doRequest<span class="br0">&#40;</span><span class="re0">$request</span>, <span class="re0">$location</span>, <span class="re0">$action</span>, <span class="re0">$version</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$response</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$client</span> = <span class="kw2">new</span> XSoapClient<span class="br0">&#40;</span><span class="st0">&quot;http://midominio.com/ws?wsdl&quot;</span>, <span class="re0">$par</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Parece que voy a tener suerte, si pruebo este nuevo cliente <strong>SOAP</strong> funciona perfectamente, pero además si compruebo el contenido de <em>$response</em> veo que contiene íntegramente el XML de la respuesta del <em>webservice</em>. Cómo veis lo único que cambia al instanciarlo es que le paso el nombre de la nueva clase. Buen comienzo, si juego bien mis cartas podré sacar las cabeceras en el método <em>__doRequest</em> <img src='http://blog.osusnet.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Tratemos pues ese XML para obtener lo que buscamos. Gracias a las funciones <a href="http://es.php.net/book.dom">DOM</a> y <a href="http://us2.php.net/domxpath">XPATH</a> de PHP será muy sencillo. Este es el resultado final de mi cliente <strong>SOAP</strong> con recuperación de cabeceras:</p>
<div class="dean_ch" >
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> XSoapClient <span class="kw2">extends</span> SoapClient</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$responseHeaders</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$wsdl</span>, <span class="re0">$options</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; parent::__construct<span class="br0">&#40;</span><span class="re0">$wsdl</span>, <span class="re0">$options</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __doRequest<span class="br0">&#40;</span><span class="re0">$request</span>, <span class="re0">$location</span>, <span class="re0">$action</span>, <span class="re0">$version</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span>=parent::__doRequest<span class="br0">&#40;</span><span class="re0">$request</span>, <span class="re0">$location</span>, <span class="re0">$action</span>, <span class="re0">$version</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$dom</span> = <span class="kw2">new</span> DOMDocument;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$dom</span>-><span class="me1">loadXML</span><span class="br0">&#40;</span><span class="re0">$response</span>, LIBXML_NOWARNING<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$path</span> = <span class="kw2">new</span> DOMXPath<span class="br0">&#40;</span><span class="re0">$dom</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$path</span>-><span class="me1">registerNamespace</span><span class="br0">&#40;</span><span class="st0">&#8217;soap&#8217;</span>, <span class="st0">&#8216;http://schemas.xmlsoap.org/soap/envelope/&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$xml</span> = <span class="re0">$path</span>-><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&#8216;//soap:Header/*&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-><span class="me1">responseHeaders</span>=<span class="re0">$this</span>-><span class="me1">headers2array</span><span class="br0">&#40;</span><span class="re0">$xml</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$response</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> getResponseHeaders<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span>-><span class="me1">responseHeaders</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> headers2array<span class="br0">&#40;</span><span class="re0">$response</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$headers</span>=<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$response</span> <span class="kw1">as</span> <span class="re0">$node</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$node</span>-><span class="me1">hasChildNodes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$headers</span><span class="br0">&#91;</span><span class="re0">$node</span>-><span class="me1">nodeName</span><span class="br0">&#93;</span>=<span class="re0">$this</span>-><span class="me1">headers2array</span><span class="br0">&#40;</span><span class="re0">$node</span>-><span class="me1">childNodes</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$headers</span><span class="br0">&#91;</span><span class="re0">$node</span>-><span class="me1">nodeName</span><span class="br0">&#93;</span>=<span class="re0">$node</span>-><span class="me1">nodeValue</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$headers</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><pre lang=<span class="st0">&quot;php&quot;</span>><span class="re0">$client</span> = <span class="kw2">new</span> XSoapClient<span class="br0">&#40;</span><span class="st0">&quot;http://midominio.com/ws?wsdl&quot;</span>, <span class="re0">$par</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$result</span> = <span class="re0">$client</span>-><span class="me1">TuMetodo</span><span class="br0">&#40;</span><span class="re0">$parametros</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$soapheaders</span>=<span class="re0">$client</span>-><span class="me1">getResponseHeaders</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
</pre>
<p>Problema solucionado y de manera bastante elegante. Si alguien sabe cómo conseguir las cabeceras sin montar todo este lio que me lo cuente por favor.</p>
]]></content:encoded>
		</item>
		<item>
		<title>Blog de Julio César Pérez Arques: Cuanto vale un experto en programacion</title>
		<link>http://feedproxy.google.com/~r/BlogDeJulioCesarPerezArques/~3/fa9QNgZ0tgk/cuanto-vale-un-experto-en-programacion.html</link>
		<pubDate>Thu, 02 Jul 2009 05:54:00 +0000</pubDate>
		<dc:creator>jcesarperez</dc:creator>
		
	<category>mundo it</category>
		<guid>http://feedproxy.google.com/~r/BlogDeJulioCesarPerezArques/~3/fa9QNgZ0tgk/cuanto-vale-un-experto-en-programacion.html</guid>
		<description><![CDATA[Estamos acostumbrados a enfrentarnos a nuevos problemas por nosotros solos a diario. No nos queda otra. El aprendizaje a base de ostias investigación, prueba y error es una realidad por la que todos pasamos y que viene a cubrir las carencias de los si...]]></description>
			<content:encoded><![CDATA[Estamos acostumbrados a enfrentarnos a nuevos problemas por nosotros solos a diario. No nos queda otra. El aprendizaje a base de <s>ostias</s> investigación, prueba y error es una realidad por la que todos pasamos y que viene a cubrir las carencias de los sistemas de formación profesionales.<br></br><br></br>Pero muchas veces podemos dedicar días y días, incluso semanas, para dar con la solución. Se soluciona sí. Se aprende también. Pero no es eficiente. Por un lado, tiene un coste psicológico en la persona o equipo en forma de stress, desmotivación y quemado. Por otro, tiene también un coste económico en las cuentas del proyecto. Y hasta puede tener un coste en imagen si el cliente se entera o simplemente por entregar con retraso.<br></br><br></br>Contar con un experto podría resolver el problema de forma eficiente a la vez que mejoraría la formación del equipo. Por problema no sólo me refiero a un marrón, puede ser un conjunto de tareas importantes sobre las que el equipo no tiene aptitudes ni experiencia.<br></br><br></br>Conozco algunas compañías donde se cuenta con esa figura de experto al más puro estilo <span >Señor Lobo</span> de Pulp Fiction. Aunque son muy pocas y a veces el experto no es tan experto. Pero siempre está la opción de subcontratar a un verdadero experto para resolver el problema. En España no se lleva. Una pena.<br></br><br></br>Y todo este rollo al hilo de un<a href="http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;item=180375524276"> sorprendente anuncio</a> de <a href="http://es.wikipedia.org/wiki/Kent_Beck">Kent Beck</a> en ebay, donde ofrece una sesión remota de programación en pareja de 2 horas. La sesión se hará mediante VNC para compartir la pantalla y Skype para comunicarse. Aunque puede ser para revisar código, las dos horas se pueden emplear en temas de diseño, testing o lo que se quiera. Va por 305 dolares pero aún faltan días para que se cierre la puja. Veremos como termina la cosa.<div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/1481755160576909631-1557756090187653325?l=jcesarperez.blogspot.com"></img></div><img src="http://feeds.feedburner.com/~r/BlogDeJulioCesarPerezArques/~4/fa9QNgZ0tgk" height="1" width="1"></img>]]></content:encoded>
		</item>
		<item>
		<title>Picando Código: Disponible revista Linux+ DVD julio 2009</title>
		<link>http://feedproxy.google.com/~r/picandocodigo/~3/7aFUWqsOp4k/</link>
		<pubDate>Thu, 02 Jul 2009 01:48:20 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
		
	<category>GNU/Linux</category>
	<category>gnu</category>
	<category>Seguridad</category>
	<category>hacking</category>
		<guid>http://feedproxy.google.com/~r/picandocodigo/~3/7aFUWqsOp4k/</guid>
		<description><![CDATA[Linux+ 7-8/2009 (56)
El tema central de este número es Seguridad y Ethical Hacking
 
 
En el DVD adjunto:
# Ubuntu 9.04  Jaunty Jackalope
La última versión de la distribución Linux más popular
Versión 32 bit, bootable
# BackTrack
Distribución basada en Slax con más de 300 herramientas de seguridad
Versiones 3.0 (estable) y 4 beta
También podréis leer los siguientes artículos:
BackTrack
Herramienta [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Linux+ 7-8/2009 (56)</strong><br />
El tema central de este número es <strong>Seguridad</strong> y <strong>Ethical Hacking</strong></p>
<p><strong> </strong></p>
<div id="attachment_2374" class="wp-caption aligncenter" ><strong><strong><img class="size-full wp-image-2374" title="Linux + DVD Julio 2009" src="http://picandocodigo.net/wp-content/uploads/2009/07/linux-dvd_56_200.jpg" alt="Linux + DVD Julio 2009" width="200" height="286" /></strong></strong><p class="wp-caption-text">Linux + DVD Julio 2009</p></div>
<p><strong> </strong></p>
<p>En el DVD adjunto:</p>
<p># <strong>Ubuntu 9.04  Jaunty Jackalope</strong><br />
La última versión de la distribución Linux más popular<br />
Versión 32 bit, bootable</p>
<p># <strong>BackTrack</strong><br />
Distribución basada en Slax con más de 300 herramientas de seguridad<br />
Versiones 3.0 (estable) y 4 beta</p>
<p>También podréis leer los siguientes artículos:</p>
<p><strong>BackTrack</strong><br />
Herramienta perfecta para ethical hacking</p>
<p><strong>Xprobe2</strong><br />
Técnicas de fingerprinting</p>
<p><strong>Criptografía de curva elíptica</strong><br />
Aplicaciones básicas de la criptografía ECC a nivel de usuario</p>
<p><strong>Programación en Gambas</strong><br />
Acceso a base de datos SQLite</p>
<p><strong>Historia del Hacking</strong><br />
¿Quiénes fueron los primeros hackers?</p>
<p><strong>Formularios Web</strong><br />
Creación, validación y filtros con MUUU</p>
<p><strong>Seguridad en Linux</strong><br />
¿Cómo protegernos?</p>
<p><strong>¡¡¡ CONCURSO !!!</strong></p>
<p>Toma parte en nuestro concurso y gana el libro Hacking Ethico por Carlos Tori y otros&#8230;</p>
<p><a href="http://www.lpmagazine.org/prt/view/pag-prin/issue/1050.html">http://www.lpmagazine.org/prt/view/pag-prin/issue/1050.html</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/picandocodigo?a=7aFUWqsOp4k:-7xH86XdmoI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/picandocodigo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/picandocodigo?a=7aFUWqsOp4k:-7xH86XdmoI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/picandocodigo?i=7aFUWqsOp4k:-7xH86XdmoI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/picandocodigo?a=7aFUWqsOp4k:-7xH86XdmoI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/picandocodigo?i=7aFUWqsOp4k:-7xH86XdmoI:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/picandocodigo/~4/7aFUWqsOp4k" height="1" width="1"/>]]></content:encoded>
		</item>
		<item>
		<title>Fetishcode...Thinking in objects: JDeveloper 11g R1.</title>
		<link>http://fetishcode.wordpress.com/2009/07/01/jdeveloper-11g-r1/</link>
		<pubDate>Wed, 01 Jul 2009 18:28:51 +0000</pubDate>
		<dc:creator>fetishcode</dc:creator>
		
	<category>ADF</category>
	<category>jira</category>
	<category>Jdeveloper</category>
		<guid>http://fetishcode.wordpress.com/2009/07/01/jdeveloper-11g-r1/</guid>
		<description><![CDATA[
Así es como es llamada la nueva release productiva de JDeveloper. El lanzamiento coincide con Fusion Middelware 11g.
Y las  novedades que se incluyen son:



Oracle ADF Desktop Integration: 	Una potente integración entre ADF y Microsoft Office.


Oracle SOA Suite extenion


Customizations and Personalization


Oracle WebCenter Framework and 	Services extension


Oracle Team Productivity Center: Para gestionar el ciclo de 	vida [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fetishcode.wordpress.com&#038;blog=742058&#038;post=549&#038;subd=fetishcode&#038;ref=&#038;feed=1" />]]></description>
			<content:encoded><![CDATA[A]]></content:encoded>
		</item>
		<item>
		<title>más que código - Articulo - Programación: PragPub</title>
		<link>http://www.juanjonavarro.com/masquecodigo/2009/07/01/pragpub</link>
		<pubDate>Wed, 01 Jul 2009 15:27:19 +0000</pubDate>
		<dc:creator>Juanjo Navarro</dc:creator>
		
	<category>Programacion</category>
	<category></category>
	<category>PROGRAMACION</category>
	<category>PROGRAMACION</category>
		<guid>http://www.juanjonavarro.com/masquecodigo/2009/07/01/pragpub</guid>
		<description><![CDATA[
<p>La gente de <a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&#38;s=books&#38;qid=1246462233&#38;sr=8-1">The Pragmatic Programmer</a> han lazado una revista <em>digital</em>: <a href="http://www.pragprog.com/magazines">PragPub</a>.</p>

	<p class="centrado"><a href="http://www.pragprog.com/magazines"><img src="http://www.juanjonavarro.com/masquecodigo/images/18.png" title="Portada de PragPub" alt="Portada de PragPub" /></a></p>

	<p>Sólo he leído el índice así que no es que pueda decir si está bien o no, pero viniendo de quien viene, merece la pena echarle un vistazo.</p>

	<p>Como curiosidad: Aparte del <span class="caps">PDF</span>, lo proporcionan en formatos de &#8220;libro electrónico&#8221; como epub y mobi. Los tiempos están cambiando.</p>
]]></description>
			<content:encoded><![CDATA[
<p>La gente de <a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1246462233&amp;sr=8-1">The Pragmatic Programmer</a> han lazado una revista <em>digital</em>: <a href="http://www.pragprog.com/magazines">PragPub</a>.</p>

	<p class="centrado"><a href="http://www.pragprog.com/magazines"><img src="http://www.juanjonavarro.com/masquecodigo/images/18.png" title="Portada de PragPub" alt="Portada de PragPub" /></a></p>

	<p>Sólo he leído el índice así que no es que pueda decir si está bien o no, pero viniendo de quien viene, merece la pena echarle un vistazo.</p>

	<p>Como curiosidad: Aparte del <span class="caps">PDF</span>, lo proporcionan en formatos de &#8220;libro electrónico&#8221; como epub y mobi. Los tiempos están cambiando.</p>
]]></content:encoded>
		</item>
		<item>
		<title>MadeInFlex: El principio de Inversion of control y Flex</title>
		<link>http://www.madeinflex.com/2009/07/01/el-principio-de-inversion-of-control-y-flex/</link>
		<pubDate>Wed, 01 Jul 2009 14:05:58 +0000</pubDate>
		<dc:creator>Sergi Dote Teixidor</dc:creator>
		
	<category>Artículos</category>
		<guid>http://www.madeinflex.com/2009/07/01/el-principio-de-inversion-of-control-y-flex/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Inversion of Control o IoC, es un principio de la ingeniería del software. Este patrón que se ha puesto de moda actualmente gracias a frameworks como Swiz. En este artículo veremos indagaremos un poco en todos estos conceptos usando Swiz como base para el estudio...
]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Inversion of Control o IoC, es un principio de la ingeniería del software. Este patrón que se ha puesto de moda actualmente gracias a frameworks como Swiz. En este artículo veremos indagaremos un poco en todos estos conceptos usando Swiz como base para el estudio...</p>
<p> <a href="http://www.madeinflex.com/2009/07/01/el-principio-de-inversion-of-control-y-flex/#more-854" class="more-link">(more...)</a></p>
]]></content:encoded>
		</item>
		<item>
		<title>más que código - Articulo - Programación: Libro: Founders at Work</title>
		<link>http://www.juanjonavarro.com/masquecodigo/2009/07/01/libro-founders-at-work</link>
		<pubDate>Wed, 01 Jul 2009 13:24:31 +0000</pubDate>
		<dc:creator>Juanjo Navarro</dc:creator>
		
	<category>Programacion</category>
	<category>Tecnologia</category>
	<category></category>
	<category>PROGRAMACION</category>
	<category>PROGRAMACION</category>
		<guid>http://www.juanjonavarro.com/masquecodigo/2009/07/01/libro-founders-at-work</guid>
		<description><![CDATA[
<p class="derecha"><img src="http://www.juanjonavarro.com/masquecodigo/images/17.jpg" title="Portada de Founders at Work" alt="Portada de Founders at Work" /></p>

	<p>Leyendo hoy la entrada sobre una <a href="http://brigomp.blogspot.com/2009/06/la-historia-de-hotornot.html">entrevista al fundador de HOTorNOT</a> en <em>Pensamientos ágiles</em> he recordado un libro de entrevistas a fundadores de empresa de tecnología que ley hace algún tiempo: <strong>Founders at Work</strong></p>

	<p>Es un libro que me gustó mucho y que recomiendo a cualquiera interesado en estos temas. En él se entrevista a muchísimos emprendedores, los fundadores de empresas como flickr, delicious, paypal, 37signals y así 33 entrevistas a cual más interesante. </p>

	<p>Una cosa que me gustó mucho fue las distintas perspectivas que te ofrece toda esta gente: Ideas, escalabilidad, momentos bajos y altos, &#8230;</p>

	<p>Se puede leer una buena parte del mismo en <a href="http://books.google.com/books?id=ktm885vGIXEC&#38;lpg=PA24&#38;pg=PA24">Google Books</a>.</p>

	<p>Eso sí, es un libro <em>infeccioso</em>. Leerlo y querer montarnos nuestra propia empresa, es todo uno :-)</p>
]]></description>
			<content:encoded><![CDATA[
<p class="derecha"><img src="http://www.juanjonavarro.com/masquecodigo/images/17.jpg" title="Portada de Founders at Work" alt="Portada de Founders at Work" /></p>

	<p>Leyendo hoy la entrada sobre una <a href="http://brigomp.blogspot.com/2009/06/la-historia-de-hotornot.html">entrevista al fundador de HOTorNOT</a> en <em>Pensamientos ágiles</em> he recordado un libro de entrevistas a fundadores de empresa de tecnología que ley hace algún tiempo: <strong>Founders at Work</strong></p>

	<p>Es un libro que me gustó mucho y que recomiendo a cualquiera interesado en estos temas. En él se entrevista a muchísimos emprendedores, los fundadores de empresas como flickr, delicious, paypal, 37signals y así 33 entrevistas a cual más interesante. </p>

	<p>Una cosa que me gustó mucho fue las distintas perspectivas que te ofrece toda esta gente: Ideas, escalabilidad, momentos bajos y altos, &#8230;</p>

	<p>Se puede leer una buena parte del mismo en <a href="http://books.google.com/books?id=ktm885vGIXEC&amp;lpg=PA24&amp;pg=PA24">Google Books</a>.</p>

	<p>Eso sí, es un libro <em>infeccioso</em>. Leerlo y querer montarnos nuestra propia empresa, es todo uno :-)</p>
]]></content:encoded>
		</item>
		<item>
		<title>4 bits blog: Windows System Programming</title>
		<link>http://blog.4bits.es/windows-system-programming/</link>
		<pubDate>Tue, 30 Jun 2009 14:45:38 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
		
	<category>Libros</category>
	<category>windows</category>
	<category>C/C++</category>
		<guid>http://blog.4bits.es/windows-system-programming/</guid>
		<description><![CDATA[Windows System Programming es un libro de introducción a la programación sobre Windows (Win32, aunque hay una breve introducción a Win64), con el lenguaje C.
He de decir que este libro no me ha sorprendido mucho, ya que en cuanto llevas algo de tiempo programando sobre Win32 y visitando la MSDN a menudo, te acabas conociendo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.4bits.es/wp-content/uploads/2009/06/wsp_3.gif" alt="Windows System Programming" class="alignleft" width="150" height="188" /><strong>Windows System Programming</strong> es un libro de introducción a la programación sobre Windows (<a href="http://en.wikipedia.org/wiki/Windows_API">Win32</a>, aunque hay una breve introducción a Win64), con el lenguaje C.</p>
<p>He de decir que este libro no me ha sorprendido mucho, ya que en cuanto llevas algo de tiempo programando sobre Win32 y visitando la <a href="http://www.msdn.com">MSDN</a> a menudo, te acabas conociendo las partes más utilizadas. Además, <strong>este libro es bastante antiguo (del 2004).</strong></p>
<p>En general, no me convence la forma de explicar los temas por parte del autor, <strong>casi todos los capítulos se limita a copiar las diferentes funciones</strong> que se utilizan para hacer lo que sea, y a explicar cada uno de sus parámetros. Por lo que el libro se transforma en una especie de resumen de la MSDN.</p>
<p>De todo el contenido <strong>del libro me quedaría con los capítulos sobre los servicios de Windows y las estructuras de seguridad</strong> (SIDs, ACLs, ACEs) de Windows.</p>
<p>Aún así, puede servir como punto de partida para empezar a programar sobre Windows utilizando Win32, si no fuera por las pegas que he comentado.</p>
<p><strong>Recomendación:</strong> Baja.<br />
<strong>Nivel:</strong> Medio.<br />
<strong>Idioma:</strong> Inglés.</p>
]]></content:encoded>
		</item>
		<item>
		<title>programania: Sale la versión definitiva de PHP 5.3</title>
		<link>http://www.programania.net/php/sale-la-version-definitiva-de-php-5-3/</link>
		<pubDate>Tue, 30 Jun 2009 14:41:20 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
		
	<category>PHP</category>
	<category>WebDev</category>
	<category>ZEND FRAMEWORK</category>
	<category>PHP</category>
	<category>PHP</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>PHP</category>
	<category>WEBDEV</category>
	<category>PHP</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>PHP 6</category>
	<category>php 5.3</category>
	<category>WEBDEV</category>
	<category>PHP</category>
	<category>WEBDEV</category>
	<category>php closures</category>
	<category>php namespaces</category>
		<guid>http://www.programania.net/php/sale-la-version-definitiva-de-php-5-3/</guid>
		<description><![CDATA[publicado php 5.3 con todas sus novedades]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://bolsadeideas.cl/zsamer/2009/06/php-530-liberado/">blogosfera ya comienza a hacerse eco</a>, y se puede descargar <a href="http://php.net/downloads.php#v5.3.0">aquí</a>. Recordemos que ésta versión trae mayor velocidad, nuevas características de POO, closures, namespaces, y todo de lo que ya hemos hablado por aquí.</p>
<p>Recordemos también que <a href="http://www.programania.net/patrones-de-diseno/zend-framework-20-no-sera-compatible-hacia-atras/">comienza la cuenta atrás para la llegada de Zend Framework 2.0</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/xcmZvwRTC1tNuIusFM0vwb6P3oU/0/da"><img src="http://feedads.g.doubleclick.net/~a/xcmZvwRTC1tNuIusFM0vwb6P3oU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xcmZvwRTC1tNuIusFM0vwb6P3oU/1/da"><img src="http://feedads.g.doubleclick.net/~a/xcmZvwRTC1tNuIusFM0vwb6P3oU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
		</item>
		<item>
		<title>Picando Código: [Video] – Hug a developer / Abraza a un desarrollador</title>
		<link>http://feedproxy.google.com/~r/picandocodigo/~3/5pSwhLbfPHA/</link>
		<pubDate>Mon, 29 Jun 2009 16:07:19 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
		
	<category>Programación</category>
	<category>video</category>
		<guid>http://feedproxy.google.com/~r/picandocodigo/~3/5pSwhLbfPHA/</guid>
		<description><![CDATA[Creo que vi este video por primera vez en Microsiervos, pero lo encontré de nuevo hace poco recorriendo el archivo de Casi un buen blog.
Muchos probablemente ya lo hayan visto, tiene su tiempo. Pero vale la pena verlo de nuevo, seguro con algo se sentirán identificados si trabajan en la industria del software. Abajo la [...]]]></description>
			<content:encoded><![CDATA[<p>Creo que vi este video por primera vez en <a href="http://www.microsiervos.com/archivo/humor/abraza-a-un-programador.html">Microsiervos</a>, pero lo encontré de nuevo hace poco recorriendo el archivo de <a href="http://www.diegosalama.com/category/humor/">Casi un buen blog</a>.</p>
<p>Muchos probablemente ya lo hayan visto, tiene su tiempo. Pero vale la pena verlo de nuevo, seguro con algo se sentirán identificados si trabajan en la industria del software. Abajo la traducción de los comentarios&#8230;</p>
<p><embed src="http://blip.tv/play/gYwjwZJqjdEh" type="application/x-shockwave-flash" width="640" height="390" allowscriptaccess="always" allowfullscreen="true"></embed> </p>
<blockquote><p>Los desarrolladores en todos lados están sufriendo un dolor terrible.</p></blockquote>
<blockquote><p>Siento dolor</p></blockquote>
<blockquote><p>Vamos 4 meses de un cronograma de 5 meses y acabo de recibir los requerimientos finales ayer (¡y cambiaron de nuevo!)
</p></blockquote>
<blockquote><p>Paso la mitad de mis días en reuniones sobre cómo terminar mas trabajo (en vez de estar trabajando)</p></blockquote>
<blockquote><p>Mi jefe leyó en una revista que los desarrolladores que usan el lenguaje de programación &#8220;______&#8221; son dos veces más productivos. Así que nos compró una coopia y recortó nuestras fechas a la mitad.</p></blockquote>
<blockquote><p>Todos los días mi jefe cambia de parecer sobre lo que estamos construyendo.</p></blockquote>
<blockquote><p>La gente me sigue pidiendo que les arregle el e-mail, así que no tengo tiempo de escribir código.</p></blockquote>
<blockquote><p>Mi papá no tiene más tiempo para mí.</p></blockquote>
<blockquote><p>Un consultor le dijo a mi jefe que podían construir nuestra próxima versión en la mitad del tiempo, por la mitad del dinero. Él le creyó pero ahora se gastaron todo su presupuesto, usaron todo su tiempo y&#8230;<br />
Apenas terminaron la mitad. Ahora se han ido y su código es un desastre. Tenemos que arreglarlo y terminar lo que comenzaron.</p></blockquote>
<blockquote><p>Abraza a un desarrollador hoy.</p></blockquote>
<p>Y el último, gigante para los programadores de Visual Basic un </p>
<blockquote><p>Acabo de terminar un curso intensivo de 6 semanas de Visual Basic.</p></blockquote>
<p>El video fue creado por <a href="http://devshop.com/">Devshop</a> una aplicación hosteada de gestión de proyectos diseñada para planear proyectos de software específicamente.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/picandocodigo?a=5pSwhLbfPHA:-gnKFkpyV38:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/picandocodigo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/picandocodigo?a=5pSwhLbfPHA:-gnKFkpyV38:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/picandocodigo?i=5pSwhLbfPHA:-gnKFkpyV38:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/picandocodigo?a=5pSwhLbfPHA:-gnKFkpyV38:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/picandocodigo?i=5pSwhLbfPHA:-gnKFkpyV38:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/picandocodigo/~4/5pSwhLbfPHA" height="1" width="1"/>]]></content:encoded>
		</item>
		<item>
		<title>MadeInFlex: Flex y SEO</title>
		<link>http://www.madeinflex.com/2009/06/29/flex-y-seo/</link>
		<pubDate>Mon, 29 Jun 2009 12:44:34 +0000</pubDate>
		<dc:creator>Carlos Rovira</dc:creator>
		
	<category>Eventos</category>
	<category>Recursos</category>
	<category>Tutoriales</category>
	<category>Artículos</category>
		<guid>http://www.madeinflex.com/2009/06/29/flex-y-seo/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->A continuación la presentación sobre Flex + SEO que Gonzalo Pezzi y yo dimos es la última reunión de MIF en Barcelona con motivo del Adobe Global Tour 2009.
La presentación trata sobre como tener los mismos beneficios que ya disfrutábamos con webs HTML tradicionales aplicados a una web Flex. Es decir, que el contenido sea [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>A continuación la presentación sobre <a href='http://www.madeinflex.com/wp-content/uploads/2009/06/flexsearchfriendly_preso.pdf' title='Flex y SEO'>Flex + SEO</a> que <strong>Gonzalo Pezzi</strong> y yo dimos es la última reunión de <strong>MIF</strong> en Barcelona con motivo del <strong>Adobe Global Tour 2009</strong>.</p>
<p>La presentación trata sobre como tener los mismos beneficios que ya disfrutábamos con webs HTML tradicionales aplicados a una web Flex. Es decir, que el contenido sea indexable por buscadores, enlaces de profundidad ha contenidos, que tengamos habilitados los botones del navegador para ir adelante o atrás por las páginas de la web Flex y otros temas adicionales como es el multidioma, por poner un ejemplo.</p>
<p>La presentación se basa en la nueva web de <a href="http://www.codeoscopic.com">Codeoscopic</a> donde se implementan todos estos conceptos y que todavía estamos terminando de completar pero que ya vuestra a nivel técnico todas estas posibilidades.</p>
<p>También y como se anunció al final de la charla, pretendemos hacer la base de esta plataforma Open Source de forma que Codeoscopic empiece a realizar aportes a la comunidad dentro del ámbito OS.</p>
<div align="center"><a href='http://www.madeinflex.com/wp-content/uploads/2009/06/flexsearchfriendly_preso.pdf' title='Flex y SEO'><img src='http://www.madeinflex.com/wp-content/uploads/2009/06/flexseo.jpg' alt='Flex + SEO' /></a></div>
]]></content:encoded>
		</item>
		<item>
		<title>MadeInFlex: Fx4 I: Espacios de nombre</title>
		<link>http://www.madeinflex.com/2009/06/28/fx4-i-espacios-de-nombre/</link>
		<pubDate>Sun, 28 Jun 2009 14:13:24 +0000</pubDate>
		<dc:creator>Joan | Garnet</dc:creator>
		
	<category>Tutoriales</category>
		<guid>http://www.madeinflex.com/2009/06/28/fx4-i-espacios-de-nombre/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->En esta cuarta versión de Flex se han producido cambios considerables en la arquitectura de componentes así como en el lenguaje MXML. Esto se ha hecho para potenciar varios aspectos como son la productividad, facilitar el workflow designer / developer o la integración con herramientas externas.
En esta entrada se hará una introducción a los espacios [...]]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>En esta cuarta versión de Flex se han producido cambios considerables en la arquitectura de componentes así como en el lenguaje MXML. Esto se ha hecho para potenciar varios aspectos como son la productividad, facilitar el workflow designer / developer o la integración con herramientas externas.<br />
En esta entrada se hará una introducción a los espacios de nombres de Flex 4.</p>
<p> <a href="http://www.madeinflex.com/2009/06/28/fx4-i-espacios-de-nombre/#more-850" class="more-link">(more...)</a></p>
]]></content:encoded>
		</item>
		<item>
		<title>Fetishcode...Thinking in objects: Productividad y mejoras en JDeveloper 11g</title>
		<link>http://fetishcode.wordpress.com/2009/06/26/productividad-y-mejoras-en-jdeveloper-11g/</link>
		<pubDate>Fri, 26 Jun 2009 19:18:43 +0000</pubDate>
		<dc:creator>fetishcode</dc:creator>
		
	<category>productividad</category>
	<category>Jdeveloper</category>
		<guid>http://fetishcode.wordpress.com/2009/06/26/productividad-y-mejoras-en-jdeveloper-11g/</guid>
		<description><![CDATA[Un presentación en ppt de Shay.Shmeltzer que nos muestra las novedades mas importantes que trae JDeveloper como herramienta de desarrollo, como obtener una mayor productividad a la hora de trabajar y por ultimo indica las principales fuentes de información oficiales por parte de la compañía Oracle.
Como saben desde aquí añadimos JDeveloperLA.
En fin, una buena presentación [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fetishcode.wordpress.com&#038;blog=742058&#038;post=546&#038;subd=fetishcode&#038;ref=&#038;feed=1" />]]></description>
			<content:encoded><![CDATA[A]]></content:encoded>
		</item>
		<item>
		<title>Joan Garnet :: Arquitectura y desarrollo RIA: rialvalue.com/blog: Xavi Beumala</title>
		<link>http://www.joangarnet.com/blog/?p=653</link>
		<pubDate>Fri, 26 Jun 2009 09:29:43 +0000</pubDate>
		<dc:creator>Joan | Garnet</dc:creator>
		
	<category></category>
	<category>quickie</category>
	<category>Plataforma Flash</category>
		<guid>http://www.joangarnet.com/blog/?p=653</guid>
		<description><![CDATA[Ayer me enteré de que nuestro querido exiliado  Xavi Beumala tiene nuevo blog: http://www.rialvalue.com/blog/.
Con lo ocupado que anda no sé qué nivel de actualización tendrá pero estoy seguro que el contenido será excelente y de gran interés para todos los Flasheros / Flexeros.
]]></description>
			<content:encoded><![CDATA[<p>Ayer me enteré de que nuestro querido exiliado  Xavi Beumala tiene nuevo blog: <a href="http://www.rialvalue.com/blog/">http://www.rialvalue.com/blog/</a>.<br />
Con lo ocupado que anda no sé qué nivel de actualización tendrá pero estoy seguro que el contenido será excelente y de gran interés para todos los Flasheros / Flexeros.</p>
]]></content:encoded>
		</item>
		<item>
		<title>Picando Código: JUGUY: Evento Web 2.0 en Java EE y nuevo sitio web</title>
		<link>http://feedproxy.google.com/~r/picandocodigo/~3/rw4Qqh9Om38/</link>
		<pubDate>Fri, 26 Jun 2009 01:14:20 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
		
	<category>Java</category>
	<category>Eventos</category>
	<category>JAVA</category>
	<category>JAVA</category>
	<category>JAVA</category>
	<category>juguy</category>
	<category>java ee</category>
		<guid>http://feedproxy.google.com/~r/picandocodigo/~3/rw4Qqh9Om38/</guid>
		<description><![CDATA[El JUGUY renueva su sitio web, y anuncia un evento en Montevideo.
Lanzamiento de la nueva Web del Juguy &#8211; www.juguy.org
Se lanza oficialmente la nueva página Web del Grupo de Usuarios &#8211; www.juguy.org
Ya se encuentra disponible y esperamos sus comentarios y críticas sobre la misma.
Mayor interacción
Esta nueva Web tiene como objetivo presentar el sitio mucho más [...]]]></description>
			<content:encoded><![CDATA[<p>El <strong><abbr title="Grupo de Usuarios Java del Uruguay">JUGUY</abbr></strong> renueva su sitio web, y anuncia un evento en Montevideo.</p>
<blockquote><p><strong>Lanzamiento de la nueva Web del Juguy &#8211; <a href="http://www.juguy.org">www.juguy.org</a></strong></p>
<p>Se lanza oficialmente la nueva página Web del Grupo de Usuarios &#8211; www.juguy.org</p>
<p>Ya se encuentra disponible y esperamos sus comentarios y críticas sobre la misma.</p>
<p><strong>Mayor interacción</strong><br />
Esta nueva Web tiene como objetivo presentar el sitio mucho más simple y moderno, publicando noticias en forma más constante.</p>
<p><strong>Mas eventos presenciales</strong><br />
Una nueva idea que el grupo promotor está encarando es la de generar mós y mejores eventos presenciales en distintos lugares como Universidades, Empresas, etc.<br />
Pronto se publicará el calendario de eventos ya confirmados que tendremos en el 2009</p></blockquote>
<div id="attachment_2359" class="wp-caption aligncenter" ><img class="size-full wp-image-2359" title="Sitio del JUGUY renovado" src="http://picandocodigo.net/wp-content/uploads/2009/06/juguy-renovado.jpg" alt="Sitio del JUGUY renovado" width="300" height="210" /><p class="wp-caption-text">Sitio del JUGUY renovado</p></div>
<p>El primero de estos eventos presenciales:</p>
<h3>Evento &#8211; Web 2.0 en Java EE (frameworks y productividad)</h3>
<h3>Agenda</h3>
<p><strong>18:00 &#8211; Charla de presentación del evento</strong><br />
<strong>18:30 &#8211; Grails in action</strong><br />
<strong>Descripción:</strong> Grails es uno de los principales frameworks de desarrollo de aplicaciones Web en Java EE. Esta charla pretende presentar este framework ejemplificando y viendo casos prácticos.<br />
Expositores: Ing. Alejandro Mateo, Ing. Pablo Kamil, Ing. Leandro Bertolami</p>
<p><strong>19:30 &#8211; JBoss Seam + Richfaces + JGenUI</strong><br />
Descripción: Analizar Jboss Seam como framework de aplicación utiilizando un proyecto open source uruguayo para generar código sobre esta tecnología<br />
Expositores: Ing. Horacio Vico, Lic. Rodolfo Vazquez</p>
<p><strong>20:20 &#8211; JBoss Seam experiencia real. Medidas de productividad e integración</strong><br />
Expositores: Ing. Ariel Ludueña, Ing. Martin Cabrera</p>
<p><strong>21:00 &#8211; Mesa redonda sobre tecnologías para la capa de presentación (GWT, Seam, Grails, Java FX, JSF)</strong></p>
<h3>¿Dónde y Cuándo?</h3>
<p>Lugar: Aula Magna de la Universidad Catolica del Uruguay<br />
Fecha: 30 de julio de 2009<br />
Horario: de 18:00 a 21:30 horas.</p>
<p><strong>Contacto</strong></p>
<p>Correo: mailto:info@juguy.org<br />
Sitio web JUGUY: &#8211; <a href="http://www.juguy.org">www.juguy.org</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/picandocodigo?a=rw4Qqh9Om38:2Pld67NxJLc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/picandocodigo?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/picandocodigo?a=rw4Qqh9Om38:2Pld67NxJLc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/picandocodigo?i=rw4Qqh9Om38:2Pld67NxJLc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/picandocodigo?a=rw4Qqh9Om38:2Pld67NxJLc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/picandocodigo?i=rw4Qqh9Om38:2Pld67NxJLc:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/picandocodigo/~4/rw4Qqh9Om38" height="1" width="1"/>]]></content:encoded>
		</item>
		<item>
		<title>Yet Another Programming Weblog: MinGW publica GCC 4.4.0</title>
		<link>http://yapw.blogspot.com/2009/06/mingw-publica-gcc-440.html</link>
		<pubDate>Thu, 25 Jun 2009 21:25:00 +0000</pubDate>
		<dc:creator>mig21</dc:creator>
		
	<category>windows</category>
	<category>gcc</category>
	<category>win32</category>
	<category>excepciones</category>
	<category>gcc4.4</category>
		<guid>http://yapw.blogspot.com/2009/06/mingw-publica-gcc-440.html</guid>
		<description><![CDATA[El equipo de MinGW ha publicado los binarios de la versión 4.4.0 de de GCC para Windows. De entre las novedades de esta versión destacan un mejor tratamiento de excepciones, una versión de libstdc++ en forma de librería compartida, y soporte para T...]]></description>
			<content:encoded><![CDATA[El equipo de <a href="http://www.mingw.org/">MinGW</a> ha publicado <a href="http://sourceforge.net/project/shownotes.php?release_id=691876">los binarios de GCC 4.4.0 para Windows</a>. De entre las novedades destacan un mejor tratamiento de excepciones, una versión de libstdc++ en forma de librería compartida, y soporte para <a href="http://en.wikipedia.org/wiki/Thread-local_storage">TLS (thread-local storage)</a>, además de todas las novedades de <a href="http://gcc.gnu.org/gcc-4.4/">la versión 4.4.0</a>. Hay que recordar que la anterior versión soportada oficialmente era GCC 3.4.5. Más en <a href="http://www.reddit.com/r/programming/comments/8v5dz/mingw_updates_to_gcc_440/">reddit</a>.<br></br><br></br>El manejo de las excepciones ha mejorado drásticamente debido a que se ha usado una implementación basada en <a href="http://en.wikipedia.org/wiki/DWARF">DWARF</a>, dejando de lado el viejo modelo <a href="http://en.wikipedia.org/wiki/Setjmp.h">SJLJ</a>, que ya no estará disponible. Además con esta versión las excepciones ya pueden atravesar las fronteras de las DLL sin problemas.<br></br><br></br><a href="http://barrapunto.com/article.pl?sid=09/06/25/2121226">La misma noticia y más comentarios en <em>MinGW publica GCC 4.4.0</em> en barrapunto</a><div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/11818694-2406545680858133939?l=yapw.blogspot.com"></img></div>]]></content:encoded>
		</item>
		<item>
		<title>MadeInFlex: Transparencias de las presentaciones</title>
		<link>http://www.madeinflex.com/2009/06/25/transparencias-de-las-presentaciones/</link>
		<pubDate>Thu, 25 Jun 2009 10:42:23 +0000</pubDate>
		<dc:creator>Xavi Beumala</dc:creator>
		
	<category>Eventos</category>
	<category>Recursos</category>
		<guid>http://www.madeinflex.com/2009/06/25/transparencias-de-las-presentaciones/</guid>
		<description><![CDATA[<!-- matched  --><!-- final 0 -->Al final he encontrado el tiempo para colgar las presentaciones y el codigo que utilizé para mis sesiones de MIF Onsite IV.

Hello Gumbo
Assert( Gumbo )

Cualquier duda no dudeis en preguntar.
]]></description>
			<content:encoded><![CDATA[<!-- matched  --><!-- final 0 --><p>Al final he encontrado el tiempo para colgar las presentaciones y el codigo que utilizé para mis sesiones de MIF Onsite IV.</p>
<ul>
<li><a href="http://www.rialvalue.com/blog/2009/06/09/hello-gumbo-presentation/">Hello Gumbo</a></li>
<li><a href="http://www.rialvalue.com/blog/2009/06/09/assert-gumbo/">Assert( Gumbo )</a></li>
</ul>
<p>Cualquier duda no dudeis en preguntar.</p>
]]></content:encoded>
		</item>
		<item>
		<title>Blog de Julio César Pérez Arques: Sobre pruebas y errores</title>
		<link>http://feedproxy.google.com/~r/BlogDeJulioCesarPerezArques/~3/1joj3uO1AZ8/sobre-pruebas-y-errores.html</link>
		<pubDate>Wed, 24 Jun 2009 15:20:00 +0000</pubDate>
		<dc:creator>jcesarperez</dc:creator>
		
	<category>testing</category>
	<category>ingenieria software</category>
	<category>mundo it</category>
		<guid>http://feedproxy.google.com/~r/BlogDeJulioCesarPerezArques/~3/1joj3uO1AZ8/sobre-pruebas-y-errores.html</guid>
		<description><![CDATA[Veo en las noticias las imagenes de una prueba de carga en un nuevo puente de una autovía en Galicia (España). Durante un momento me quedo absorto mirando la larga flota de camiones sobre el majestuoso puente. Impresiona. No puedo evitar pensar: Vaya...]]></description>
			<content:encoded><![CDATA[<img  src="http://4.bp.blogspot.com/_wU4MuFZcKsM/SkI9L1k80HI/AAAAAAAAAC0/xEOoGRNm9Gw/s200/prueba_carga_puente.JPG" alt="" id="BLOGGER_PHOTO_ID_5350906580839485554" border="0"></img>Veo en las noticias las imagenes de una prueba de carga en un nuevo puente de una autovía en Galicia (España). Durante un momento me quedo absorto mirando la larga flota de camiones sobre el majestuoso puente. Impresiona. No puedo evitar pensar: <span >Vaya! eso sí que es una prueba manual. Y luego yo quejándome sobre las pruebas manuales que hacemos en el desarrollo de proyectos software...</span><br></br><br></br>Bastan un par de segundos para darme cuenta de la tontería de mi reflexión. <span >Si eso fuera una primera ejecución de una prueba exigente sobre un proyecto software recien construido, el puente se habría caido arrastrando a la flota de camiones tras él</span>.<br></br><br></br>En el caso del puente, lo que no estamos viendo es todo el proceso de pruebas y control de calidad, que se ha realizado previamente en cada una de las fases del proyecto para evitar errores.<br></br><br></br>Pero comparar nuestro mundo de desarrollo software -¿ingeniería software?- con el de la construcción o cualquier otra ingeniería es una <span >equivocación</span>. Una equivocación torpe, injusta y desafortunada, porque, entre otras cosas, hace imaginarse a un programador como a un obrero. Así nos va.<br></br><br></br>Aunque centrémonos en los errores. <span >Errar es humano</span>. Obvio. A veces estamos distraidos, cansados, estresados, desmotivados o simplemente no somos perfectos y se nos escapan cosas.<br></br><br></br>Otro hecho es que <span >los proyectos software salen a producción con demasiados errores</span>. También obvio si estudiamos el ineficaz proceso de pruebas que se sigue en la mayoría de proyectos, basado en unas pruebas mínimas, manuales y sin documentar. Por lo que las pruebas dificilmente se repiten en el tiempo, aunque se modifique código afectado, haciendo aparecer nuevos errores o, peor aun, haciendo reaparecer viejos errores. ¿Vosotros compraríais algo cuyo proceso de pruebas fuera así?<br></br><br></br>Lo primero no tiene solución. Pero sí se puede minimizar el efecto. Contratando <span >talento</span> y con motivación.<br></br>Lo segundo sí tiene solución. Aplicar un proceso <span >profesional</span> de pruebas, basado en pruebas automatizadas, completas, independiente y repetibles. Los errores seguirán produciéndose, pero la mayoría serán detectados antes de llegar a producción.<br></br><br></br>Por supuesto, siempre hará falta alguna prueba manual pero, al igual que en el puente, será más un mero trámite de aceptación que el actual infierno de prueba y error sin fin.<div class="blogger-post-footer"><img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/1481755160576909631-8528992990391721384?l=jcesarperez.blogspot.com"></img></div><img src="http://feeds.feedburner.com/~r/BlogDeJulioCesarPerezArques/~4/1joj3uO1AZ8" height="1" width="1"></img>]]></content:encoded>
		</item>
		<item>
		<title>programania: Integración continua en PHP: ¿ Xinc o phpUnderControl?</title>
		<link>http://www.programania.net/desarrollo-agil/integracion-continua-en-php-%c2%bf-xinc-o-phpundercontrol/</link>
		<pubDate>Wed, 24 Jun 2009 07:25:12 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
		
	<category>PHP</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>PRUEBAS FUNCIONALES</category>
	<category>PRUEBAS UNITARIAS</category>
	<category>PRUEBAS UNITARIAS</category>
	<category>WebDev</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>PRUEBAS FUNCIONALES</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>PRUEBAS UNITARIAS</category>
	<category>PRUEBAS FUNCIONALES</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>PRUEBAS FUNCIONALES</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>PHP</category>
	<category>PRUEBAS FUNCIONALES</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>integración continua</category>
	<category>PRUEBAS UNITARIAS</category>
	<category>PHP</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>PRUEBAS UNITARIAS</category>
	<category>PRUEBAS FUNCIONALES</category>
	<category>WEBDEV</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>WEBDEV</category>
	<category>PHP</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>WEBDEV</category>
	<category>PHP</category>
	<category>PRUEBAS UNITARIAS</category>
	<category>WEBDEV</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>WEBDEV</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>WEBDEV</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>WEBDEV</category>
	<category>PHP</category>
	<category>PRUEBAS UNITARIAS</category>
	<category>WEBDEV</category>
	<category>DESARROLLO DE SOFTWARE</category>
	<category>METODOLOGÍAS ÁGILES</category>
	<category>PHPUnit</category>
	<category>phpundercontrol</category>
	<category>xinc</category>
		<guid>http://www.programania.net/desarrollo-agil/integracion-continua-en-php-%c2%bf-xinc-o-phpundercontrol/</guid>
		<description><![CDATA[comparativa entre xinc y phpundercontrol: dos servidores de integración continua en PHP]]></description>
			<content:encoded><![CDATA[<p>Un servidor de integración continua es algo mucho más sencillo de lo que parece. Básicamente sólo se dedica a ejecutar un proceso periódicamente (cada cierto tiempo, o cada commit del repositorio) que automatiza el proceso de construcción del software (build). Para entendernos, uno podría programar un script de terminal que llamara al framework de pruebas unitarias, y al generador de la documentación y a los analizadores de métricas de código, etc&#8230; y que se ejecutara cada cierto tiempo mediante el cron, y con eso estaría haciendo integración continua. Siendo esto así, <strong>el servidor de integración continua es independiente del lenguaje en el que esté escrito el software que está integrando (t</strong>odo esto ya <a href="http://www.programania.net/desarrollo-agil/la-verguenza-de-la-ingenieria-del-software/#comment-15049">lo comentaba Blaxter en un post anterior de este blog</a>).</p>
<p>Sin embargo, me inclino por utilizar un servidor de integración continua específico para PHP. Y es que estos aportan soporte específico para herramientas de PHP como phpUnit, phpDocumentor, etc&#8230; con lo que simplifica mucho la configuración y, sobre todo, la visualización de los resultados obtenidos (Front End). Como siempre, dentro del software libre, tenemos bastantes soluciones de calidad variable. Para mí destacan principalmente dos: <a href="http://code.google.com/p/xinc/">Xinc</a> y <a href="http://phpundercontrol.org/about.html">phpUnderControl</a>.</p>
<p>phpUnderControl es una adaptación de Cruise Control a PHP. Cruise Control es el servidor de integración continua (originalmente para Java, pero ahora con versión para .NET, Ruby, etc.) con una comunidad de desarrolladores más grande y activa. Como consecuencia, tiene una enorme cantidad de documentación y de extensiones desarrolladas. Para funcionar, utiliza herramientas típicas de Java como Ant, etc. aunque a efectos prácticos, configurar un proyecto para utilizarlo con CruiseControl es escribir un XML.</p>
<p>Xinc significa Xinc is not CruiseControl. Como se puede ver por su propio nombre, nace como alternativa a phpUnderControl. Su idea es crear una herramienta más específica para el desarrollo en PHP, escrita en PHP y que, por ejemplo, utilice Phing (el Ant de PHP) en vez del propio Ant. A efectos prácticos, también supone escribir un XML. Una de sus ventajas es que <strong>no necesita Java</strong>, así que puede funcionar en un LAMP necesidad de instalar nada más. Su comunidad de desarrolladores es mucho menor que la de CruiseControl, pero también es más específica para PHP.</p>
<p>Finalmente, <a href="http://www.programania.net/david-gonzalez/">David</a> y yo nos hemos inclinado por phpUnderControl, por varias razones:</p>
<ul>
<li> Más documentación y extensiones desarrolladas. He sufrido muchas veces la falta de documentación. Da igual lo potente que sea un framework, herramienta o servidor: si la documentación no es extensa y rica en detalles.. no sirve.</li>
<li>Desde el momento en que nuestras pruebas funcionales van en Selenium,  ya necesitamos instalar Java&#8230; así que la posibilidad de utilizar un LAMP sin nada más desaparece.</li>
<li>Aprendiendo Selenium y CruiseControl no solo aprendemos integración continua específica para PHP, sino que también obtenemos conocimientos aplicables a Java u otros lenguajes. Aprender Phing sólo es útil en PHP&#8230;</li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/P-xP__MSR7my-pylv7_p4oRyptU/0/da"><img src="http://feedads.g.doubleclick.net/~a/P-xP__MSR7my-pylv7_p4oRyptU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/P-xP__MSR7my-pylv7_p4oRyptU/1/da"><img src="http://feedads.g.doubleclick.net/~a/P-xP__MSR7my-pylv7_p4oRyptU/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
		</item>
		<item>
		<title>Arragonán: Acerca del Sun Open Communities Forum</title>
		<link>http://feedproxy.google.com/~r/danilat/~3/drDQvokpsXo/</link>
		<pubDate>Wed, 24 Jun 2009 00:43:17 +0000</pubDate>
		<dc:creator>Dani</dc:creator>
		
	<category>Java</category>
	<category>JAVA</category>
	<category>JAVA</category>
	<category>JAVA</category>
		<guid>http://feedproxy.google.com/~r/danilat/~3/drDQvokpsXo/</guid>
		<description><![CDATA[Los pasados 18 y 19 de Junio, estuve en Madrid para asistir al Sun Open Communities Forum, mi opinión sobre el evento es que hubieron más oscuros que claros, aunque tampoco me sorprendió demasiado vista la web del evento y la agenda publicada.
Sobre las charlas, opino como Abel Mendivil, se pueden agrupar en fuera de [...]]]></description>
			<content:encoded><![CDATA[<p>Los pasados 18 y 19 de Junio, estuve en Madrid para asistir al <a href="http://sunopencommunitiesforum.es/">Sun Open Communities Forum</a>, mi opinión sobre el evento es que hubieron <a href="http://twitter.com/dani_latorre/status/2242735036">más oscuros que claros</a>, aunque tampoco me sorprendió demasiado vista la web del evento y la agenda publicada.</p>
<p>Sobre las charlas, opino <a href="http://vsbabylon.blogspot.com/2009/06/sun-open-communities-forum.html">como Abel Mendivil</a>, se pueden agrupar en <em>fuera de lugar</em>, <em>falta de profundidad</em> y <em>las que tenían fundamento</em>.</p>
<p>Como suele ser habitual en estos eventos, los patrocinadores tenían charlas y algunas eran paja en un evento para programadores, o lo parecían, ya que el segundo día no fuí a ninguna de las que tenían esa pinta: la mesa redonda sobre open source, la de redes sociales, madridonrails&#8230; al menos para mi no son productivas. Otras me resultaron aburridas, un tanto básicas, y sobre todo en las que eran en inglés, desconectaba con facilidad. Por lo que, como ya he dicho, me pegué parte del segundo día trabajando en unas mesas fuera de las salas, que en algunos momentos casi se quedaban hasta pequeñas.</p>
<p>Pero también hubieron charlas interesantes: </p>
<ul>
<li>Las de <a href="http://blogs.sun.com/jorgeSanchez/">Jorge Sánchez</a> sobre ESB, que por no haber trabajado mucho en integración me resultaron curiosas.</li>
<li>La -no- charla de <a href="http://www.peyrona.com/">Francisco Morero</a>, donde nos pedía a los asistentes que comentásemos aplicaciones <em>exóticas</em> desarrolladas con Java, y se acabó regalando un iPod como premio :).</li>
<li>La de <a href="http://formatinternet.wordpress.com/">Javier Ramírez</a> acerca de JRuby on Rails, que aunque para mi no dijo nada nuevo, me gustó el enfoque que le dió a su charla de pasar un poco por Ruby, luego por Rails y finalmente ver como integrar con Java usando JRuby.</li>
<li>La de Dave Currie acerca de escalabilidad con MySQL, donde tampoco se dijeron cosas especialmente novedosas que no haya escuchado ya en otros eventos, pero siempre es interesante ver las soluciones tomadas en un caso real concreto(también me resultó gracioso que usara el topicazo de que Ruby on Rails no escala XD).</li>
<li>Desarrollo y test de componentes Ajax de <a href="http://icoloma.blogspot.com/">Ignacio Coloma</a>, sobre todo la parte de testing es la que más me gustó, y junto a la charla que dió el año pasado, tengo muy claro que sabe mucho de desarrollo web.</li>
</ul>
<p>En cuanto a los talleres, el primer día asistí al de Spring 3.0 que impartía <a href="http://sergialmar.wordpress.com/">Sergi Almar</a>, donde hubieron problemas de espacio en la sala, no habían suficientes tomas de corriente y los usuarios de Mac no pudimos seguir el taller por un problema de última hora, una pena que ante tantos problemas nos quedáramos sin tiempo para ver finalizar el taller completo, tal y como pasó el año anterior :S. El segundo día, fuí al de Grails que impartían conjuntamente <a href="http://groovy.org.es/">Nacho Brito</a> y <a href="http://blogs.salenda.es/alvaro_sanchez/">Álvaro Sánchez-Mariscal</a>, donde de nuevo nos quedamos sin concluir el taller completo, realmente había mucho que decir y el tiempo se terminó consumiendo :S.</p>
<p><a href="http://www.flickr.com/photos/dlato/3654973217/" title="Desarrollo y test de componentes Ajax  por Dani Latorre, en Flickr"><img src="http://farm3.static.flickr.com/2483/3654973217_4f9645d863.jpg" width="500" height="375" alt="Desarrollo y test de componentes Ajax " /></a></p>
<p>Sobre el tema puramente organizativo, hubieron algunos detalles mejorables: Las salas estaban bien pero no habían enchufes, nada más llegar al campus Montepríncipe no había ningún cartel ni indicación, tampoco se nos dieron identificaciones a los asistentes y ponentes, la tarde del segundo días se cambió la sala de las charlas del track 1 y no se pudieron emitir por streaming&#8230;<br />
Pero lo que más eché en falta fué más tiempo para charlar/saludar/conocer a otros asistentes y ponentes, que hubiera sido fácilmente solucionable &#8220;convocando&#8221; a quien quisiera a quedar en algún lugar a tomar unas cervezas(lo que los modernos llaman <em>networking</em> :P), cosa que sí pude hacer con unos pocos y a otros no pude más que saludarlos y poco más :S.</p>
<p>Como podéis ver, un poco de todo en el evento. Veremos si Sun/Oracle siguen celebrando un evento de estas características en España, y si lo hacen, esperemos que intenten organizarlo para que resulte más interesante.</p>
]]></content:encoded>
		</item>
		<item>
		<title>programania: Control de las funcionalidades de un producto con Google Docs</title>
		<link>http://www.programania.net/desarrollo-agil/control-de-las-funcionalidades-de-un-producto-con-google-docs/</link>
		<pubDate>Tue, 23 Jun 2009 07:17:59 +0000</pubDate>
		<dc:creator>Luis Artola</dc:creator>
		
	<category>WebDev</category>
	<category>scrum</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>WEBDEV</category>
	<category>SCRUM</category>
	<category>SCRUM</category>
	<category>METODOLOGÍAS ÁGILES</category>
	<category>gestión de proyectos</category>
	<category>google docs</category>
	<category>increment</category>
	<category>iteration backlog</category>
	<category>product backlog</category>
		<guid>http://www.programania.net/desarrollo-agil/control-de-las-funcionalidades-de-un-producto-con-google-docs/</guid>
		<description><![CDATA[Gestión funcional con google Docs]]></description>
			<content:encoded><![CDATA[<p>Animado por el artículo de Enrique sobre <a href="http://phpsenior.blogspot.com/2009/06/google-docs-para-gestionar-proyectos.html">el uso de Google Docs para la gestión funcional de un proyecto</a>, publico un artículo que llevaba tiempo pensando sobre cómo lo estoy haciendo yo ahora mismo. Obviamente, el sistema que os expongo está basado en SCRUM, aunque no me atrevería a decir que estoy &#8220;haciendo SCRUM&#8221; precisamente. Si los términos que utilizo en el artículo (Product Backog, Iteration Backlog, etc&#8230;) te son nuevos, <a href="http://www.navegapolis.net/content/view/694/">quizá te interese leerte éste estupendo libro de introducción a SCRUM</a>. La captura que muestro a continuación, como se puede ver claramente, es inventada.</p>
<p><a href="http://www.programania.net/wp-content/uploads/captura-backlog2.jpg"><img class="alignnone size-full wp-image-694" title="captura-backlog" src="http://www.programania.net/wp-content/uploads/captura-backlog2.jpg" alt="captura-backlog" width="580" height="353" /></a></p>
<p>La razón por la que utilizamos Google Docs y no la clásica pizarra de SCRUM es porque el equipo no se encuentra físicamente en el mismo sitio. Quizá en el futuro utilicemos herramientas más específicas para la gestión de las user stories, iteration backlog e increment &#8230; pero a día de hoy éste sistema nos está funcionando por lo sencillo y visual que es.</p>
<p>El <a href="http://www.programania.net/desarrollo-agil/gestion-de-proyectos-objetivos/">objetivo de la gestión es planificar, ejecutar y controlar</a>. Veamos a continuación cómo planificamos, ejecutamos y controlamos el valor funcional de la aplicación.</p>
<p>Algunos apuntes sobre la <strong>ejecución</strong>:</p>
<ul>
<li>El documento recoge tanto el Iteration Backlog como el Increment. Pero es un documento que sólo ve el equipo. El cliente puede ver el Product Backlog (que está en un documento a parte) y se le envía una versión &#8220;más redactada&#8221; del Increment.</li>
<li>Cada iteración está en una tabla. Las tablas se guardan todas en el mismo documento, de tal manera que si vamos bajando por el documento podremos ver el backlog de las anteriores iteraciones. Las iteraciones se nombran con el primer día que se ejecutan (Iteración 18-05-2009) . Suelen ser de dos semanas.</li>
<li>Todos los proyectos son gestionados desde el mismo Iteration Backlog.</li>
<li>Marcamos la prioridad de una funcionalidad dentro de una iteración con <strong>[1]</strong>,<strong>[2]</strong> y <strong>[3]</strong>.</li>
<li>Se puede saber en qué estado está una Iteración porque:
<ul>
<li>Si está a la izquierda y sólo pone la prioridad([1]), es que está <strong>sin empezar</strong>.</li>
<li>Si está a la izquierda pero pone la prioridad  y un dueño ([1][Luis]), es que <strong>está empezada</strong> y la está haciendo Luis.</li>
<li>Si está a la derecha, es que <strong>está terminada</strong>.</li>
</ul>
</li>
<li>En el incremento, además de los items terminados en la iteración, se añaden los unplanned items (<strong>[U]</strong>), defectos (<strong>[D]</strong>) y cuestiones técnicas abordadas (<strong>[T]</strong>). Supongo que para los defectos sería mucho mejor utilizar un Issue Tracker, pero normalmente los clientes suelen querer comunicarse solo por teléfono, y bastante cuesta ya hacerles escribir un mail&#8230; como para intentar que se peguen con un Issue Tracker&#8230;</li>
<li>Los <strong>defectos tienen siempre prioridad</strong> sobre el desarrollo de nuevas funcionalidades.</li>
<li>La <strong>trazabilidad</strong> del proyecto es enorme, no sólo porque así tenemos un histórico de todas las iteraciones, sino porque el Google Docs guarda versiones de cada cambio que se hace.. así que podríamos retrotraernos a cualquier situación pasada del documento.</li>
</ul>
<p>Forma de detectar cómo va la iteración (<strong>controlar</strong>):</p>
<ul>
<li>Si se están generando muchos Unplanned Items (<strong>[U]</strong>) es que algo se diseñó mal.</li>
<li>Si se están generando muchos Defectos (<strong>[D]</strong>) es que la aplicación no está suficientemente probada.</li>
<li>Si se están atacando funcionalidades de prioridad [2] sin haber terminado las de prioridad [1], o se están atacando funcionalidades sin haber corregido los Defectos, probablemente se esté programando en el orden incorrecto.</li>
<li>Otras cuestiones muy relacionadas con las funcionalidades, las iteraciones, sería el <strong>control de costes y plazos</strong>: lo voy a dejar fuera del artículo por no extenderme.</li>
</ul>
<p>Algunos apuntes sobre <strong>planificación</strong> de las funcionalidades que se incluyen en cada iteración. En cada iteración se meten una serie de funcionalidades de el/los Product Backlog. Esas funcionalides cumplen que:</p>
<ul>
<li>Es la mayor cantidad de funcionalidades que se pueden hacer en dos semanas.</li>
<li>Son las funcionalidades que más valor añaden a la aplicación.</li>
<li>Camino crítico: desarrollar esas funcionalidades ayudan a descubrir posibles nuevos requisitos de forma lo más temprana posible (aunque no sea la que más valor añade), eliminar incertidumbres y hacer pensar al cliente (feedback) en qué es lo que quiere realmente. Esto también puede incluir desarrollar funcionalidades que ayuden a descubrir el diseño técnico (orientación a objetos, patrones de diseño) de la aplicación.</li>
<li>La que el cliente exija (a veces no hay más remedio: hay que implementar funcionalidades que el cliente exija aunque se le argumente que no son las que más valor añaden o las que más ayudan a descubrir la forma exacta de la aplicación).</li>
<li>Se evita programar funcionalides que no puedan probarse o ponerse en producción cuanto antes. Ejemplo: &#8220;Informe anual de ventas&#8221;, implementar éste informe en la primera iteración del producto, cuando todavía la empresa no ha introducido ni una sola venta, hará que no pueda probarse correctamente y traerá problemas meses después.</li>
<li>Resolver defectos tiene más prioridad que desarrollar nuevas funcionalidades, aunque dependerá de la gravedad del defecto. Los defectos son difíciles de planificar porque no sabes ni cuando ni cómo saldrán.</li>
<li>Es importante saber dividir o juntar funcionalidades para poder adaptarlas al tamaño de la iteración. No sirve para nada hacer &#8220;Listar facturas&#8221;, si no tienes un &#8220;añadir facturas&#8221;. Deberán ir en la misma iteración. Quizá &#8220;buscar facturas&#8221; pueda ir en la siguiente iteración, pese a que todo ello fuera planificado originalmente como &#8220;gestionar facturas (listar, añadir, modificar, eliminar, buscar)&#8221;.</li>
</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/PLuDO1Pe_y4zysKbPv8cNHO1VOY/0/da"><img src="http://feedads.g.doubleclick.net/~a/PLuDO1Pe_y4zysKbPv8cNHO1VOY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PLuDO1Pe_y4zysKbPv8cNHO1VOY/1/da"><img src="http://feedads.g.doubleclick.net/~a/PLuDO1Pe_y4zysKbPv8cNHO1VOY/1/di" border="0" ismap="true"></img></a></p>]]></content:encoded>
		</item>
		<item>
		<title>Fetishcode...Thinking in objects: JDeveloperLA en el Kaleidoscope 2009</title>
		<link>http://fetishcode.wordpress.com/2009/06/22/jdeveloperla-en-el-kaleidoscope-2009/</link>
		<pubDate>Mon, 22 Jun 2009 13:49:38 +0000</pubDate>
		<dc:creator>fetishcode</dc:creator>
		
	<category>Noticias</category>
	<category>Jdeveloperla</category>
		<guid>http://fetishcode.wordpress.com/2009/06/22/jdeveloperla-en-el-kaleidoscope-2009/</guid>
		<description><![CDATA[Desde el portal JDeveloperla  seguimos el evento de Kaleidoscope, el encuentro mas importante de usuarios de herramientas ORACLE en USA.
Invitamos a todos los usuarios del portal a que nos indiquen sus preguntas, a fin de poder compartirlas con los especialistas de este evento. Indiquen sus preguntas a modo de comentario en la noticia del [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fetishcode.wordpress.com&#038;blog=742058&#038;post=544&#038;subd=fetishcode&#038;ref=&#038;feed=1" />]]></description>
			<content:encoded><![CDATA[A]]></content:encoded>
		</item>
	</channel>
</rss>
