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

<channel>
	<title>BlogoDev</title>
	<atom:link href="http://www.bluby.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bluby.org/blog</link>
	<description>Un blog para desarrolladores</description>
	<lastBuildDate>Mon, 28 Jun 2010 17:34:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>No se puede cargar el ensamblado &#8220;System.EnterpriseServices.Wrapper.dll&#8221;</title>
		<link>http://www.bluby.org/blog/2010/06/no-se-puede-cargar-el-ensamblado-system-enterpriseservices-wrapper-dll/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=no-se-puede-cargar-el-ensamblado-system-enterpriseservices-wrapper-dll</link>
		<comments>http://www.bluby.org/blog/2010/06/no-se-puede-cargar-el-ensamblado-system-enterpriseservices-wrapper-dll/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 17:34:00 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Soluciones]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[Errores]]></category>
		<category><![CDATA[Solucion]]></category>
		<category><![CDATA[VB.Net]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=111</guid>
		<description><![CDATA[Recientemente en una aplicación que desarrollé, saltó un error que decía: No se puede cargar el archivo o ensamblado &#8216;System.EnterpriseServices.Wrapper.dll&#8217; ni una de sus dependencias. El sistema no puede hallar el archivo especificado Aun no identifico cual fue la causa del problema, pero he aquí la solución: Hay que ir a la carpeta: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 Buscar [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente en una aplicación que desarrollé, saltó un error que decía:</p>
<blockquote><p>No se puede cargar el archivo o ensamblado  &#8216;System.EnterpriseServices.Wrapper.dll&#8217; ni una de sus dependencias. El  sistema no puede hallar el archivo especificado</p></blockquote>
<p>Aun no identifico cual fue la causa del problema, pero he aquí la solución:</p>
<p>Hay que ir a la carpeta:</p>
<p><strong>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727</strong></p>
<p>Buscar todos los archivos que inicien con <strong>System.EnterpriseServices</strong></p>
<p>Y copiar estos archivos a la carpeta:</p>
<p><strong>C:\WINDOWS\WinSxS\x86_System.EnterpriseServices_b03f5f7f11d50a3a_2.0.0.0_x-ww_7d5f3790</strong></p>
<p>Una vez que hayamos copiado estos archivos, el error se habrá solucionado.</p>
<p>La aplicación en la que me ocurrió este error está hecha en Visual Basic .net, utilizando el Framework de .NET 2.0 y conectandose a una base de datos hecha en Access.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2010/06/no-se-puede-cargar-el-ensamblado-system-enterpriseservices-wrapper-dll/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como hacer debug de PHP</title>
		<link>http://www.bluby.org/blog/2010/04/como-hacer-debug-de-php/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=como-hacer-debug-de-php</link>
		<comments>http://www.bluby.org/blog/2010/04/como-hacer-debug-de-php/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 16:06:10 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=103</guid>
		<description><![CDATA[Un tutorial para poder hacer debug de una aplicación PHP desde Eclipse.]]></description>
			<content:encoded><![CDATA[<p>Esta ocasión les presento un tutorial para poder debugguear nuestras aplicaciones PHP de manera local. Para ello necesitaremos tener instalado y configurado Apache con PHP en nuestra computadora. Si no lo tienes aún, la manera más sencilla es mediante <a href="http://www.wampserver.com/en/">WAMP</a>, <a href="http://www.lamphowto.com/">LAMP</a> o <a href="http://www.mamp.info/en/index.html">MAMP</a> según nuestro sistema operativo.</p>
<p>Requerimos también <a href="http://www.eclipse.org/pdt/downloads/">Eclipse con PDT</a> (PHP Developer Tools). Lo descargamos, y lo desempacamos en un sitio facil de recordar.</p>
<p>Desde la página de <a href="http://xdebug.org/download.php">XDebug</a> descargamos la versión más reciente, y que corresponda a nuestra versión de PHP instalada, y según si nuestro equipo es de 32 ó 64 bits. De las variantes, utilizaremos la llamada simplemente VC6, y la guardaremos en la carpeta donde está instalado PHP.</p>
<p>Una vez hecho esto, hay que modificar el archivo php.ini para que se tome en cuenta esta nueva extensión, agregando lo siguiente al final del archivo:</p>
<p><code>[XDebug]</code><br />
<code>zend_extension_ts=</code><code>"C:\php\php_xdebug-2.0.4-5.2.8.dll"</code><br />
<code>xdebug.remote_enable=1</code><br />
<code>xdebug.remote_host=127.0.0.1</code><br />
<code>xdebug.remote_port=9000</code><br />
<code>xdebug.remote_handler=dbgp</code><br />
<code>xdebug.profiler_enable=1</code><br />
<code>xdebug.profiler_output_dir="RUTA DE UN DIRECTORIO PARA ARCHIVOS TEMPORALES"</code></p>
<p>NOTA 1:  La ruta de la extensión puede variar según en donde se haya instalado PHP. Para el caso de que estés utilizando WAMP, la ruta será: &#8220;C:\wamp\bin\php\php5.3.0\&#8221;. Verifica que el nombre del archivo corresponda al que se descargó.</p>
<p>NOTA 2: Para el caso de que se utilice PHP 5.3.0, habrá que cambiar &#8220;zend_extension_ts&#8221; por &#8220;zend_extension&#8221;. De lo contrario no funcionará.</p>
<p>Si se tiene instalado Zend Server, hay que deshabilitarlo, ya que entrarán en conflicto si no se hace. Para ello, todas las entradas del mismo archivo php.ini que inicien con &#8220;zend.&#8221; (sin comillas) hay que convertirlas en comentario agregando un ; al principio:</p>
<p><code>[Zend]</code><br />
<code>;zend.install_dir=</code><code>"C:\Program Files\Zend\ZendServer"</code><br />
<code>;zend.conf_dir=</code><code>"C:\Program Files\Zend\ZendServer\etc\"</code><br />
<code>;zend.pid_dir=</code><code>"C:\Program Files\Zend\ZendServer\logs"</code><br />
<code>;zend.temp_dir=</code><code>"C:\Program Files\Zend\ZendServer\tmp"</code><br />
<code>;zend.log_dir=</code><code>"C:\Program Files\Zend\ZendServer\logs"</code><br />
<code>;zend.data_dir=</code><code>"C:\Program Files\Zend\ZendServer\data"</code><br />
<code>;zend.httpd_uid=HTTPD_UID</code><br />
<code>;zend.httpd_gid=HTTPD_GID</code><br />
<code>;zend.ini_scandir=cfg</code><br />
<code>;zend.serial_number=</code><br />
<code>;zend.user_name=</code></p>
<p>Ya que esté nuestro archivo listo, lo guardamos y reiniciamos el servidor Apache para que los cambios surtan efecto.</p>
<p>Para verificar que esté todo correcto, veamos la información que hay en nuestro phpinfo, haciendo un archivo .php con lo siguiente:</p>
<p><code>&lt;?php phpinfo(); ?&gt;</code></p>
<p>y lo abrimos desde nuestro navegador.</p>
<p>Si al buscar en esta página encontramos los diferentes valores de XDebug, significa que todo va por buen camino.</p>
<p>Ahora configuremos Eclipse.</p>
<p>Abrimos Eclipse, y vamos al menú Window -&gt; Preferences.  En el menú de la izquierda, expandimos el apartado de PHP y entramos a Debug.  En la parte derecha, la entrada &#8220;PHP Debugger&#8221; la establecemos en &#8220;XDebug&#8221;.</p>
<p>Creamos un proyecto con cualquier instrucción de PHP para usarlo como prueba.</p>
<p>Una vez que tengamos algo listo para debugguear, vamos al menú Run -&gt; Debug, y ya estaremos debuggueando nuestro código PHP.</p>
<p>Podemos cambiar la vista del IDE a modo &#8220;PHP Debug&#8221; para que nos muestre las barras de herramientas y un esquema más apto para esta tarea. Por default, eclipse detendrá la ejecución en la primera línea de php, y se puede cambiar en la ventana de preferencias, en el apartado de php debug que abrimos momentos antes, y quitandole la marca a &#8220;Break at first line&#8221;.</p>
<p>Todo esto lo he probado en Windows, pero deben ser los mismos principios para aplicarse a mac o linux.</p>
<p>Tomado en parte de: <a href="http://www.pabloviquez.com/2009/06/como-instalar-eclipse-pdt-y-xdebug-en-windows/">Pablo Viquez Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2010/04/como-hacer-debug-de-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalar Windows Vista / 7 desde una memoria USB</title>
		<link>http://www.bluby.org/blog/2010/03/instalar-windows-vista-7-desde-una-memoria-usb/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=instalar-windows-vista-7-desde-una-memoria-usb</link>
		<comments>http://www.bluby.org/blog/2010/03/instalar-windows-vista-7-desde-una-memoria-usb/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 20:51:38 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Instalaciones]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=97</guid>
		<description><![CDATA[Aunque este post no tiene que ver mucho con programación, me pareció adecuado para publicarlo. Esta guía sirve para instalar un poco más rápido este sistema operativo, o tambien para computadoras que no tengan unidad de DVD (netbooks). Se requiere que contemos con una memoria USB de por lo menos 4GB completamente vacía, y los [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque este post no tiene que ver mucho con programación, me pareció adecuado para publicarlo. Esta guía sirve para instalar un poco más rápido este sistema operativo, o tambien para computadoras que no tengan unidad de DVD (netbooks).</p>
<p>Se requiere que contemos con una memoria USB de por lo menos 4GB completamente vacía, y los archivos de instalación de Windows.</p>
<p>Primero hay que preparar la memoria USB para poder arrancar desde ella. Conectamos la memoria y abrimos una ventana de consola de windows en modo de administrador, ya sea:</p>
<ul>
<li>Inicio, ejecutar, y escribimos &#8220;<strong>cmd</strong>&#8221; (sin comillas) y presionamos ctrl + shift + enter</li>
<li>Inicio, Todos los programas, Accesorios, y en el de linea de comandos, con el boton derecho y ejecutar como administrador.</li>
</ul>
<p><img class="aligncenter" title="diskpart" src="http://www.intowindows.com/wp-content/uploads/2009/01/12.jpg" alt="" width="523" height="142" /></p>
<p>Desde la linea de comandos, ejecutamos la instrucción <strong>DISKPART</strong> para entrar a la aplicación. Dentro de ella, que también es de linea de comandos, ejecutamos la instrucción <strong>LIST DISK</strong> que nos mostrará los discos de los que disponemos, como el disco duro, y nuestra memoria USB. Podemos identificar cual es cual gracias al tamaño de cada uno.</p>
<p>Una vez que identificamos cual es la memoria, escribimos <strong>SELECT DISK 1</strong> donde DISK 1 es el valor de la primera columna para nuestra memoria USB. Seún el idioma de nuestro sistema operativo será DISCO o DISK.</p>
<p>A continuación, ejecutamos las siguientes sentencias:</p>
<ul>
<li><strong>CLEAN</strong></li>
<li><strong>CREATE PARTITION PRIMARY</strong></li>
<li><strong>SELECT PARTITION 1</strong></li>
<li><strong>ACTIVE</strong></li>
<li><strong>FORMAT FS=NTFS</strong> (PUEDE TARDAR UN RATO)<strong><br />
</strong></li>
<li><strong>ASSIGN</strong></li>
<li><strong>EXIT</strong></li>
</ul>
<p><img class="aligncenter" title="diskpart" src="http://www.intowindows.com/wp-content/uploads/2009/01/115.jpg" alt="" width="437" height="452" /></p>
<p>Insertamos el disco de windows en nuestra computadora, y suponiendo que el DVD esté en la unidad D: ejecutamos:</p>
<ul>
<li><strong>D:</strong></li>
<li><strong>CD BOOT</strong></li>
<li><strong>BOOTSECT.EXE /NT60 H:</strong> (suponiendo que H: es la letra asignada a la memoria USB)</li>
</ul>
<p><img class="aligncenter" title="boot" src="http://www.intowindows.com/wp-content/uploads/2009/01/14.jpg" alt="" width="533" height="220" /></p>
<p>Copiamos todo el contenido del disco de windows a nuestra memoria USB</p>
<p>Listo, ahora nuestra memoria está lista. Lo que resta es verificar que la computadora a la que se le instalará windows arranque desde USB y trabajará exactamente igual que como si fuera de un DVD.</p>
<p>Tomado de <a href="http://www.intowindows.com/how-to-install-windows-7vista-from-usb-drive-detailed-100-working-guide/">Into Windows</a>. Las imágenes utilizadas son de su propiedad.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 290px; width: 1px; height: 1px;">
<p><strong>CLEAN</strong></p>
<p><strong>CREATE PARTITION PRIMARY</strong></p>
<p><strong>SELECT PARTITION 1</strong></p>
<p><strong>ACTIVE</strong></p>
<p><strong>FORMAT FS=NTFSc</strong></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2010/03/instalar-windows-vista-7-desde-una-memoria-usb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Crystal Reports con DataSet&#8217;s en ASP.Net</title>
		<link>http://www.bluby.org/blog/2010/01/crystal-reports-con-datasets-en-asp-net/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=crystal-reports-con-datasets-en-asp-net</link>
		<comments>http://www.bluby.org/blog/2010/01/crystal-reports-con-datasets-en-asp-net/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 07:18:25 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Técnicas]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Crystal Reports]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=90</guid>
		<description><![CDATA[Esta ocasión me topé con la necesidad de mostrar un reporte de Crystal Reports en un formulario .aspx de .NET tomando como origen de datos un DataSet. Tras un buen rato de probar con diferentes métodos que me encontré en Google y varios foros que no lograron resolver mis dudas, he aqui una forma sencilla [...]]]></description>
			<content:encoded><![CDATA[<p>Esta ocasión me topé con la necesidad de mostrar un reporte de Crystal Reports en un formulario .aspx de .NET tomando como origen de datos un DataSet. Tras un buen rato de probar con diferentes métodos que me encontré en Google y varios foros que no lograron resolver mis dudas, he aqui una forma sencilla para lograr este cometido.</p>
<p>Lo primero que hay que hacer es crear el DataSet (archivo .xsd). No mostraré aqui como crearlo pues ya hay muchos sitios con esa información, así que supondremos que ya lo tenemos creado.</p>
<p>Ahora crearemos nuestro reporte. Agregamos un nuevo elemento a nuestro proyecto de tipo &#8220;Crystal Reports&#8221; y en el &#8220;Field Explorer&#8221; en el nodo &#8220;Database Fields&#8221; seleccionamos &#8220;Database Expert&#8221; en el menú contextual:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-91" title="DatabaseExpert" src="http://www.bluby.org/blog/wp-content/uploads/2010/01/DatabaseExpert.jpg" alt="DatabaseExpert" width="401" height="349" /></p>
<p style="text-align: left;">Dentro del arbol en el cuadro izquierdo se mostrarán los DataSets que tenemos en nuestra solución. Agregamos el (los) DataSet o Tabla que requerimos y aceptamos. Una vez hecho esto, en el &#8220;Field Explorer&#8221; se mostrarán las tablas y campos que hayamos seleccionado. Arrastramos estos campos a nuestro reporte para diseñarlo segun nuestras necesidades.</p>
<p style="text-align: left;">Ahora en nuestro archivo .aspx agregamos un CrystalReportViewer para mostrar nuestro reporte.</p>
<p style="text-align: left;">En la parte de código, la parte medular es la siguiente:</p>
<h3 style="text-align: left;">Visual Basic:</h3>
<p style="text-align: left;"><code>' Llenar DataSet ya sea desde una base de datos, un web service, o datos ingresados por el usuario<br />
Dim dsDatos as dsClientes() = ObtenerDatos()<br />
' Creamos el objeto<br />
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument()<br />
' Indicamos la ruta del archivo del reporte que requerimos. En este caso suponemos que está en la raiz de nuestro proyecto<br />
rpt.FileName = Server.MapPath("~\rptListadoClientes.rpt")<br />
' Establecemos nuestro DataSet como origen de datos de nuestro reporte<br />
rpt.SetDataSource(dsDatos)<br />
' Indicamos al Report Viewer cual es el reporte que queremos mostrar<br />
CrystalReportViewer1.ReportSource = rpt</code></p>
<h3 style="text-align: left;">C#</h3>
<p style="text-align: left;"><code>// Llenar DataSet ya sea desde una base de datos, un web service, o datos ingresados por el usuario<br />
dsClientes dsDatos = ObtenerDatos();<br />
//Creamos el objeto<br />
CrystalDecisions.CrystalReports.Engine.ReportDocument rpt = New CrystalDecisions.CrystalReports.Engine.ReportDocument();<br />
// Indicamos la ruta del archivo del reporte que requerimos. En este caso suponemos que está en la raiz de nuestro proyecto<br />
rpt.FileName = Server.MapPath("~\rptListadoClientes.rpt");<br />
// Establecemos nuestro DataSet como origen de datos de nuestro reporte<br />
rpt.SetDataSource(dsDatos);<br />
//Indicamos al Report Viewer cual es el reporte que queremos mostrar<br />
CrystalReportViewer1.ReportSource = rpt;</code></p>
<p style="text-align: left;">Con esto nuestro reporte se mostrará en la ventana del navegador de internet de nuestro usuario sin la necesidad de que tenga que descargar un archivo PDF o DOC.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2010/01/crystal-reports-con-datasets-en-asp-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Consumir WebServices JSon desde PHP</title>
		<link>http://www.bluby.org/blog/2009/11/consumir-webservices-json-desde-php/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=consumir-webservices-json-desde-php</link>
		<comments>http://www.bluby.org/blog/2009/11/consumir-webservices-json-desde-php/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 18:50:21 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Funciones]]></category>
		<category><![CDATA[Técnicas]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[JSon]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=85</guid>
		<description><![CDATA[Hoy gracias a que estuve apoyando a un proyecto de unos amigos, les traigo un simple ejemplo de como consumir WebServices hechos con JSon desde PHP. Para este ejemplo utilizaremos una búsqueda en Twitter, ya que cumple con estas características. Primero tenemos que formar una dirección URL con la ubicación de nuestro WebService, que para [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy gracias a que estuve apoyando a un proyecto de unos amigos, les traigo un simple ejemplo de como consumir WebServices hechos con JSon desde PHP.</p>
<p>Para este ejemplo utilizaremos una búsqueda en Twitter, ya que cumple con estas características.</p>
<p>Primero tenemos que formar una dirección URL con la ubicación de nuestro WebService, que para nuestro caso sería:<br />
<code>$URL="http://search.twitter.com/search.json?q=" . $Busqueda;</code><br />
donde $Busqueda es el término que vamos a buscar.</p>
<p>Primero vamos a abrir esta dirección como un archivo cualquiera y guardamos su contenido en una variable:<br />
<code>$archivo = fopen ($URL, "r");<br />
$texto = fgets($archivo);</code></p>
<p>Ahora, aprovechamos una función de PHP 5.2.0 o superior, llamada json_decode() que nos regresa un objeto con el contenido del JSon, cuyas propiedades son los valores entregados por el WebService, y podremos mostrar su contenido:</p>
<p><code>$json = json_decode($texto);<br />
echo "max_id=".$json->max_id;<br />
echo "next_page=".$json->next_page;</code></p>
<p>Para este caso particular, Twitter nos entrega un arreglo con los resultados, que facilmente podemos meter en un foreach:</p>
<p><code>foreach($json->results as $valor)<br />
{<br />
	echo "&lt;img src='".$valor-&gt;profile_image_url."' style='width:60px;height:60px;' /&gt;&lt;br /&gt;";<br />
	echo "&lt;h1&gt;".$valor-&gt;from_user."&lt;/h1&gt;&lt;br /&gt;";<br />
	echo $valor-&gt;text."&lt;br /&gt;";<br />
}</code></p>
<p>y así de facil tenemos un cliente que muestra los resultados de busqueda en twitter desde PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2009/11/consumir-webservices-json-desde-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Widgets con PHP</title>
		<link>http://www.bluby.org/blog/2009/09/widgets-con-php-parte-1/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=widgets-con-php-parte-1</link>
		<comments>http://www.bluby.org/blog/2009/09/widgets-con-php-parte-1/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 02:05:07 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Funciones]]></category>
		<category><![CDATA[Técnicas]]></category>
		<category><![CDATA[MySql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[widgets]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=66</guid>
		<description><![CDATA[En este post voy a exponer un método para crear widgets. Como mencionaba al principio de este blog, parte de mi objetivo al escribir aqui es obtener retroalimentación de su parte con tal de que todos mejoremos en los desarrollos que hacemos. Lo que estoy haciendo con esto utiliza una base de datos para gestionar [...]]]></description>
			<content:encoded><![CDATA[<p>En este post voy a exponer un método para crear widgets. Como mencionaba al principio de este blog, parte de mi objetivo al escribir aqui es obtener retroalimentación de su parte con tal de que todos mejoremos en los desarrollos que hacemos.</p>
<p>Lo que estoy haciendo con esto utiliza una base de datos para gestionar que widgets estan disponibles, que paneles tenemos disponibles para mostrarlos y los parámetros que se utilizarán para cada instancia de los widgets. Las tablas tienen la siguiente estructura:</p>
<p>Widgets: Aqui se almacenan los widgets que tenemos disponibles</p>
<ul>
<li>IdWidget &#8211; Int &#8211; PK &#8211; Identificador del widget</li>
<li>Nombre &#8211; varchar(30) &#8211; Nombre del Widget</li>
<li>Archivo &#8211; varchar(30) &#8211; Nombre del archivo que contiene el widget. Incluir la extensión del archivo</li>
<li>Clase &#8211; varchar(30) &#8211; Nombre de la clase que representará el widget. Se separa del nombre del archivo para el caso de que haya 2 o más widgets dentro de un mismo archivo de PHP</li>
</ul>
<p>Paneles: Representa cada una de las zonas capaz de mostrar los widgets, por ejemplo, las columnas derecha e izquierda, un bloque al pie de la página, etc.</p>
<ul>
<li>IdPanel &#8211; Int &#8211; PK &#8211; Identificador del panel</li>
<li>Nombre &#8211; varchar(30) &#8211; Nombre que tiene el panel</li>
</ul>
<p>PanelWidget: Indica que widgets se muestran en cada panel</p>
<ul>
<li>IdPanelWidget &#8211; Int &#8211; PK &#8211; Identifica a cada uno de los widgets que se mostrarán</li>
<li>IdPanel &#8211; Int &#8211; Id del panel al que se hace referencia</li>
<li>IdWidget &#8211; Int &#8211; Id del tipo de widget que se utilizará</li>
<li>Orden &#8211; Int &#8211; Indica el orden en que se mostrarán los widgets</li>
</ul>
<p>ParametrosWidget: En caso de que los widgets que tengamos requieran algún tipo de parámetro, aqui es donde se almacenarán</p>
<ul>
<li>IdParametro &#8211; Int &#8211; PK &#8211; Identificador del parámetro</li>
<li>IdPanelWidget &#8211; Int &#8211; Identifica la instancia del widget para el que se aplicará este parámetro</li>
<li>NombreParametro &#8211; varchar(30) &#8211; El nombre del parámetro</li>
<li>Valor &#8211; varchar(100) &#8211; El valor del parámetro</li>
</ul>
<p>En todas estas tablas es posible agregar campos según sean requeridos para nuestra aplicación.</p>
<p>Ya estando en nuestra aplicación de PHP, crearemos una clase abstracta que nos servirá de molde para crear nuestros widgets que estará en un archivo llamado &#8220;absWidget.php&#8221;:</p>
<p><code>&lt;?php<br />
abstract class absWidget {<br />
&nbsp;&nbsp;&nbsp;&nbsp;public $params;<br />
&nbsp;&nbsp;&nbsp;&nbsp;public $idPanelWidget = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;function ObtenerParametros(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global $mySql;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;params = new ArrayObject();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($this-&gt;idPanelWidget!=0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$res=$mySql-&gt;consulta("select NombreParametro, Valor from ParametrosWidget where IdPanelWidget= ".$this-&gt;idPanelWidget);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while($arr=$mySql-&gt;fetch_assoc($res)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;params[$arr['NombreParametro']]=$arr['Valor'];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;abstract function MostrarWidget();<br />
}<br />
?&gt;<br />
</code><br />
En esta clase se está utilizando una variable global llamada $mySql, esta es la <a href="http://www.bluby.org/blog/2009/04/clase-para-conectar-php-con-mysql/">clase para conextarse a MySql</a> que expuse tiempo atras, y se crea desde antes, ya sea en el index, o donde se instancía el framework que estemos utilizando / creando).</p>
<p>A continuación sigue la creación del widget propiamente dicho. Como podran imaginarse, ésta hereda de la clase abstracta <code>absWidget</code>. He aquí un ejemplo sencillo:</p>
<p><code><br />
&lt;?php<br />
require_once ('Framework/modulos/absModulos.php');<br />
class modBuscar extends absModulos {<br />
&nbsp;&nbsp;&nbsp;&nbsp;function MostrarModulo() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;Buscar&lt;/h1&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form id="modBusqueda" method="get" action="index.php" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Buscar:&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type="text" name="busqueda" /&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type="submit" value="Buscar" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
?&gt;</code></p>
<p>Este ejemplo lo que hace es solicitar una búsqueda. Ya depende de cada aplicación que se esté haciendo si se utiliza el método POST o el método GET para procesar la llamada al servidor, así como el nombre de las variables. Estos temas no son materia del presente post, así que no los tocaré por el momento.</p>
<p>Lo único que hacemos es crear una función que implemente a <code>MostrarWidget()</code> y lo que hace es, como su nombre lo indica, mostrar el widget que se está creando. Si recuerdan, cada ocasión que se muestra un widget puede tener diferentes parámetros. Para obtener estos parámetros de la base de datos, hay que hacer una llamada a <code>$this-&gt;ObtenerParametros()</code>. Una vez hecho esto, los parámetros los tendremos en el array asociativo <code>$this-&gt;params[]</code> y podremos utilizarlo a nuestro gusto.</p>
<p>Por último, nos queda llamar desde nuestra plantilla cada uno de los páneles que queremos. Para esto, he aquí una funcion (mal hecho, pero yo la tengo como una función global o estatica) para buscar en la base de datos cuales son los widgets que se mostraran en un panel y mostrarlos:</p>
<p><code>function MostrarPanel($nombrePanel)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;global $mySql;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Obtener los modulos correspondientes a este panel<br />
&nbsp;&nbsp;&nbsp;&nbsp;$res=$mySql-&gt;consulta("SELECT idPanelWidget, archivo, clase<br />
FROM paneles<br />
INNER JOIN panelWidget ON paneles.idpanel = panelWidget.idpanel<br />
inner join Widgets on panelWidget.idWidget = Widgets.idWidget<br />
where descripcion = '$nombrePanel'<br />
order by orden");<br />
&nbsp;&nbsp;&nbsp;&nbsp;while($arr=$mySql-&gt;fetch_assoc($res))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Instanciar las clases adecuadas<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require_once("Framework/Widgets/".$arr['archivo']);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$widget = new $arr['clase']();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$widget-&gt;idPanelWidget = $arr['idPanelWidget'];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Mostrar el contenido del módulo<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$modulo-&gt;MostrarWidget();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</code></p>
<p>Una vez teniendo esta, ya podemos llamarla mandandole como parámetro el nombre del panel que vamos a mostrar, por ejemplo:<br />
<code>MostrarPanel('IZQUIERDO');</code><br />
Esto ya pudiera ser dentro de nuestra plantilla.</p>
<p>Lo único que quedaría pendiente, y lo dejo para cada quien, es un pequeño panel de control para administrar que widgets mostrar en cada panel, en que orden mostrarlos, y que parametros utilizará cada uno de ellos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2009/09/widgets-con-php-parte-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[VB.Net] Exportar DataSet a Excel</title>
		<link>http://www.bluby.org/blog/2009/08/vb-net-exportar-dataset-a-excel/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=vb-net-exportar-dataset-a-excel</link>
		<comments>http://www.bluby.org/blog/2009/08/vb-net-exportar-dataset-a-excel/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 03:09:17 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Funciones]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[VB.Net]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=77</guid>
		<description><![CDATA[Recientemente me solicitaron para un proyecto que los reportes se mandaran directamente a Excel. He aquí una pequeña función capaz de exportar cualquier DataSet a un archivo de Excel: Public Sub ExportarArchivo(ByVal archivo As String, ByVal datos As DataSet) Dim xl As New Microsoft.Office.Interop.Excel.ApplicationClass Dim wBook As Microsoft.Office.Interop.Excel.Workbook Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet wBook = xl.Workbooks.Add [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente me solicitaron para un proyecto que los reportes se mandaran directamente a Excel. He aquí una pequeña función capaz de exportar cualquier DataSet a un archivo de Excel:</p>
<p><code>Public Sub ExportarArchivo(ByVal archivo As String, ByVal datos As DataSet)<br />
        Dim xl As New Microsoft.Office.Interop.Excel.ApplicationClass<br />
        Dim wBook As Microsoft.Office.Interop.Excel.Workbook<br />
        Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet<br />
        wBook = xl.Workbooks.Add<br />
        wSheet = wBook.ActiveSheet<br />
        Dim colIndex As Integer = 0<br />
        Dim rowIndex As Integer = 0<br />
        For Each dc As System.Data.DataColumn In datos.Tables(0).Columns<br />
            colIndex = colIndex + 1<br />
            xl.Cells(1, colIndex) = dc.ColumnName<br />
        Next<br />
        For Each dr In datos.Tables(0).Rows<br />
            rowIndex = rowIndex + 1<br />
            colIndex = 0<br />
            For Each dc In datos.Tables(0).Columns<br />
                colIndex = colIndex + 1<br />
                xl.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)<br />
            Next<br />
        Next<br />
        wSheet.Columns.AutoFit()<br />
        Dim blnFileOpen As Boolean = False<br />
        Try<br />
            Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(archivo)<br />
            fileTemp.Close()<br />
        Catch ex As Exception<br />
            blnFileOpen = False<br />
        End Try<br />
        If System.IO.File.Exists(archivo) Then<br />
            System.IO.File.Delete(archivo)<br />
        End If<br />
        wBook.SaveAs(archivo)<br />
        xl.Workbooks.Open(archivo)<br />
        xl.Visible = True<br />
    End Sub<br />
</code><br />
Para que no cause errores, hay que agregar como referencia la siguiente:<br />
<code>Microsoft.Office.Interop.Excel</code></p>
<p>Espero les sea tan util como a mi!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2009/08/vb-net-exportar-dataset-a-excel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Objetos dinámicos con PHP</title>
		<link>http://www.bluby.org/blog/2009/07/objetos-dinamicos-con-php/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=objetos-dinamicos-con-php</link>
		<comments>http://www.bluby.org/blog/2009/07/objetos-dinamicos-con-php/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 16:06:32 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Funciones]]></category>
		<category><![CDATA[Técnicas]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=64</guid>
		<description><![CDATA[Con php utilizando OOP, existe una forma sencilla para utilizar la herencia y polimorfismo. La idea es instanciar un objeto teniendo el nombre de la clase en un string, ya sea constante o una variable. La forma típica de hacer esto (o al menos la unica que yo conocía) era la siguiente: $objeto = new [...]]]></description>
			<content:encoded><![CDATA[<p>Con php utilizando OOP, existe una forma sencilla para utilizar la herencia y polimorfismo. La idea es instanciar un objeto teniendo el nombre de la clase en un string, ya sea constante o una variable. La forma típica de hacer esto (o al menos la unica que yo conocía) era la siguiente:</p>
<p><code>$objeto = new clase();</code></p>
<p>Si lo que queríamos es instanciar diferentes clases heredadas de una misma, o que implementen una interfase, lo que hacía era un switch para definir cual utilizar:</p>
<p><code>switch(condicion){<br />
case 1: $objeto = new clase1(); break;<br />
case 2: $objeto = new clase2(); break;<br />
}</code></p>
<p>Sin embargo, despues de buscar mucho por internet, me encontré con que es posible instanciar un objeto en base a un string, esto es:</p>
<p><code>$objeto = new "clase1"();</code></p>
<p>Una vez que comprobé esto, probé con éxito el utilizar una variable para el mismo fin:</p>
<p><code>$objeto = new $nombreClase();</code></p>
<p>¿Para que puede servir esto? Estoy trabajando en un sistema para mostrar widgets, los cuales se cargan en base a la información guardada en una base de datos, con la intensión de facilitar la inclusión y administración de los mismos. El cómo lo pondré más adelante en un nuevo post, pero basicamente es lo siguiente:</p>
<p><code>&lt;?php<br />
function Mostrar($nombre){<br />
require_once($nombre.".php");<br />
$objeto=new $nombre();<br />
$objeto-&gt;MostrarWidget();<br />
}<br />
?&gt;</code></p>
<p>De esta manera, la función recibe el nombre de la clase que se desea mostrar, incluye el archivo correspondiente (suponiendo que la clase está en un archivo con el mismo nombre) y llama a una función específica.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2009/07/objetos-dinamicos-con-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[VB.Net] Obtener una imagen desde Web</title>
		<link>http://www.bluby.org/blog/2009/05/vbnet-obtener-una-imagen-desde-web/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=vbnet-obtener-una-imagen-desde-web</link>
		<comments>http://www.bluby.org/blog/2009/05/vbnet-obtener-una-imagen-desde-web/#comments</comments>
		<pubDate>Sat, 16 May 2009 16:40:53 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Funciones]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Imagenes]]></category>
		<category><![CDATA[VB.Net]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=52</guid>
		<description><![CDATA[Ahorita solo por gusto estoy haciendo un scrren saver que obtiene imagenes desde Internet. Para ello, modifiqué un poco una función encontrada aqui para que al darle a la función la dirección URL de la imagen que deseamos, nos regrese un objeto de tipo Image para hacer con ella lo que necesitemos: Public Function LoadWebImage(ByVal [...]]]></description>
			<content:encoded><![CDATA[<p>Ahorita solo por gusto estoy haciendo un scrren saver que obtiene imagenes desde Internet. Para ello, modifiqué un poco una función encontrada <a href="http://www.cy2online.net/Snippet/VBNet/Internet/34/Load_web_image_into_picturebox.html">aqui</a> para que al darle a la función la dirección URL de la imagen que deseamos, nos regrese un objeto de tipo Image para hacer con ella lo que necesitemos:</p>
<p><code>Public Function LoadWebImage(ByVal ImageURL As String) As Image</code><br />
<code style="padding-left: 30px;">Dim objImage As IO.MemoryStream</code><br />
<code style="padding-left: 30px;">Dim objwebClient As System.Net.WebClient</code><br />
<code style="padding-left: 30px;">Dim sURL As String = Trim(ImageURL)</code><br />
<code style="padding-left: 30px;">Dim img As Image = Nothing</code><br />
<code style="padding-left: 30px;">Try</code><br />
<code style="padding-left: 60px;">If Not sURL.ToLower().StartsWith("http://") Then sURL = "http://" &amp; sURL</code><br />
<code style="padding-left: 60px;">objwebClient = New Net.WebClient()</code><br />
<code style="padding-left: 60px;">objImage = New  IO.MemoryStream(objwebClient.DownloadData(sURL))</code><br />
<code style="padding-left: 60px;">img = Image.FromStream(objImage)</code><br />
<code style="padding-left: 30px;">Catch ex As Exception</code><br />
<code style="padding-left: 60px;">'Cargar una imagen que indique que no se pudo leer la imagen de Internet</code><br />
<code style="padding-left: 60px;">img = new Bitmap("noimage.jpg")</code><br />
<code style="padding-left: 30px;">End Try</code><br />
<code style="padding-left: 30px;">Return img</code><br />
<code>End Function</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2009/05/vbnet-obtener-una-imagen-desde-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FullCalendar con jQuery</title>
		<link>http://www.bluby.org/blog/2009/04/fullcalendar-con-jquery/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=fullcalendar-con-jquery</link>
		<comments>http://www.bluby.org/blog/2009/04/fullcalendar-con-jquery/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 14:43:58 +0000</pubDate>
		<dc:creator>P-los</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.bluby.org/blog/?p=49</guid>
		<description><![CDATA[Calendario de eventos con jQuery.]]></description>
			<content:encoded><![CDATA[<p>FullCalendar es un plugin para jQuery que genera un calendario completo con drag &amp; drop. Utiliza AJAX para obtener la información de los eventos de cada mes  &#8220;on-the-fly&#8221; y es facilmente configurable para utilizar tu propio formato de feed (una extensión provista por Google Calendar). Es visualmente personalizable y expone los manejadores para eventos generados por el usuario (como hacer click o drag a un evento).</p>
<p>NOTA: Este post fue traducido tal cual desde <a title="http://arshaw.com/fullcalendar/" href="http://arshaw.com/fullcalendar/">http://arshaw.com/fullcalendar/</a> desde donde se puede encontrar la documentación, ejemplos y ligas de descarga. Hasta el momento no he utilizado este plugin, pero lo publico porque se que en un proyecto próximo muy probablemente haré uso de éste o una herramienta similar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bluby.org/blog/2009/04/fullcalendar-con-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
