<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>Blog personal de Fernando F. Gallego &#187; Programacion</title>
	<atom:link href="http://www.forgottenprojects.com/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.forgottenprojects.com</link>
	<description>Devigner: 1/3 developer, 1/3 designer, 1/3 serial killer</description>
	<lastBuildDate>Wed, 28 Jul 2010 22:47:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Empezando con PhoneGap + Windows</title>
		<link>http://www.forgottenprojects.com/empezando-con-phonegap-windows/</link>
		<comments>http://www.forgottenprojects.com/empezando-con-phonegap-windows/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 19:04:44 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[phonegap]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=635</guid>
		<description><![CDATA[
			
				
			
		
En la Campus Party 2010 he asistido a una charla de espresso-team relacionada con aplicaciones web para móviles que se ejecutan como si fueran nativas. En este ámbito PhoneGap se lleva la palma y dado que las instrucciones de la web no son todo lo aclarativas que deberían ser, voy a a indicar algunos consejos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fempezando-con-phonegap-windows%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fempezando-con-phonegap-windows%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=android,phonegap" height="61" width="50" /><br />
			</a>
		</div>
<p>En la Campus Party 2010 he asistido a una charla de <a href="http://github.com/espresso-team/charlacampus2010">espresso-team</a> relacionada con aplicaciones web para móviles que se ejecutan como si fueran nativas. En este ámbito <a href="http://phonegap.com/">PhoneGap</a> se lleva la palma y dado que las instrucciones de la web no son todo lo aclarativas que deberían ser, voy a a indicar algunos consejos que me han ayudado a compilar el .jar con las librerías y a crear el proyecto de prueba:</p>
<p>Pasos:</p>
<p><strong>1. Instalar el Java JDK:</strong><br />
<a href="http://java.sun.com/javase/downloads/index.jsp">http://java.sun.com/javase/downloads/index.jsp</a></p>
<p><strong>2. Instalar Eclipse:</strong><br />
<a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a> (extraer en algún sitio)</p>
<p><strong>3. Instalar Android SDK:</strong><br />
<a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a> (descomprimir en alguna ruta sin espacios, ej e:\android-sdk)<br />
Importante para evitar dolores de cabeza después, añadir a la variable de entorno PATH la ruta hasta la carpeta del SDK (ej e:\android-sdk) <strong>y</strong> a la carpeta tools (ej. e:\android-sdk\tools) </p>
<p><strong>4. Instalar el plugin ADT para Eclipse:</strong><br />
<a href="http://developer.android.com/sdk/eclipse-adt.html">http://developer.android.com/sdk/eclipse-adt.html</a></p>
<p><strong>5. Añadir componentes del SDK:</strong><br />
<a href="http://developer.android.com/sdk/adding-components.html">http://developer.android.com/sdk/adding-components.html </a></p>
<p>Si hay alguna duda hasta aquí, es como seguir la guía de Android para desarrolladores: <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a></p>
<p><strong>6. Instalar Apache ANT:</strong><br />
<a href="http://ant.apache.org/index.html">http://ant.apache.org/index.html</a> (descomprimir en una carpeta sin espacios ej. e:\apache-ant)<br />
IMPORTANTE: Crear dos variables de entorno, JAVA_HOME con la ruta al java_sdk (ej. C:\Program Files (x86)\Java\jdk1.6.0_20) y ANT_HOME con la ruta a la carpeta de ANT (ej. e:\apache-ant), además, añadir la ruta al /bin de ANT al PATH (ej. e:\apache-ant\bin)</p>
<p><strong>7. Instalar ruby</strong><br />
Con instalador: <a href="http://rubyinstaller.org/">http://rubyinstaller.org/</a></p>
<p><strong>8. Instalar PhoneGap:</strong><br />
Hay dos opciones, instalar un cliente de github y bajárselo con él, o descargarte la última versión a mano de <a href="http://github.com/phonegap/phonegap-android">http://github.com/phonegap/phonegap-android</a> (descomprimir en una carpeta)</p>
<p><strong>9. Correr el comando mágico que creará tu .jar y el proyecto de ejemplo:</strong><br />
Dentro de la carpeta de phonegap-android:<br />
ruby ./droidgap [ruta al android sdk] [nombre aplicacion] [nombre del package] [ruta al www] [ruta al proyecto de prueba]</p>
<p>dónde:<br />
[ruta al android sdk] = ruta donde has descomprimido el SDK de android<br />
[nombre aplicacion] = el que quieras, será el nombre de la aplicación<br />
[nombre del package] = el que quieras, será el nombre del paquete<br />
[ruta al www] = ruta donde están las fuentes html, que si no tienes, puedes poner la carpeta example de phonegap-android<br />
[ruta al proyecto de prueba] = carpeta donde se creará el proyecto para abrir con Eclipse</p>
<p>En mi caso:<br />
ruby ./droidgap e:\\Android\\android-sdk-windows test com.forgotten example/ e:\\Android\\proyectos\\phonegap1</p>
<p><strong>10. Abrir Eclipse</strong>, crear un nuevo proyecto Android e indicar que lo queremos crear a partir de un código fuente existente, que será el que hemos indicado en [ruta al proyecto de prueba]</p>
<p><strong>11. En el árbol de ficheros</strong>, clic derecho en libs/phonegap.jar > Build path > Add to build path</p>
<p><strong>12. Clic derecho en la carpeta del proyecto</strong> dentro de Ecplise > Run As > Android Aplication.<br />
Debes tener configurado un AVD compatible con el build target indicado en el manifest.xml.<br />
Para más info sobre esto mejor ver el quick start de http://developers.android.com</p>
<p>Posibles errores:<br />
./droidgap:37:in &#8220;&#8217;: No such file or directory &#8211; ant jar (Errno::ENOENT)<br />
Solución, añadir la ruta de ANT a la variable de entorno PATH.</p>
<p>./droidgap:49:in &#8220;&#8217;: No such file or directory &#8211; android create project<br />
Solución, añadir la ruta a las tools de Android SDK a la variable de entorno PATH.</p>
<p>Esto me ha llevado un montón conseguirlo por no leer las cosas, así que espero que sirva de ayuda</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/empezando-con-phonegap-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: explode vs split</title>
		<link>http://www.forgottenprojects.com/php-explode-vs-split/</link>
		<comments>http://www.forgottenprojects.com/php-explode-vs-split/#comments</comments>
		<pubDate>Fri, 14 May 2010 10:44:23 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=583</guid>
		<description><![CDATA[Diferencias entre las funciones explode y split de PHP]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fphp-explode-vs-split%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fphp-explode-vs-split%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=php" height="61" width="50" /><br />
			</a>
		</div>
<p><script type="text/javascript"><!--
google_ad_client = "pub-5634867144059811";
/* piedepost */
google_ad_slot = "0908368167";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
El otro día, hablando con mi compañero de curro, le planteé la duda de por qué usaba split en lugar de explode para separar cadenas en un array dado un delimitador, cómo no supo responderme ni yo tampoco sabía la diferencia, fui a mirar el manual en php.net y la diferencia realmente es que:</p>
<ul>
<li><strong>explode()</strong> toma como parámetros la <strong>cadena</strong> con el delimitador, la cadena sobre la que se aplica y un parámetro opcional para limitar el número de elementos que se van a separar conteniendo el último el resto de la cadena sin partir</li>
<li><strong>split()</strong> toma como parámetro una <strong>expresión regular</strong> cómo delimitador,  la cadena sobre la que se aplica y un parámetro opcional para limitar el número de elementos.</li>
</ul>
<p>La función split en realidad es mucho más flexible para según que cosas pero <strong>más costoso</strong> si sólo queremos partir por un carácter que suele ser lo habitual, entonces es mejor usar explode(). Además, <strong>desde PHP 5.3, split() está obsoleta</strong> (por lo que provocará un Warning) y se recomienda usar <strong>preg_split()</strong> en su lugar, que además admite otro parámetro flag para modificar su comportamiento.</p>
<p>Espero que hayáis aprendido una cosa más <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Referencias:<br />
<a href="http://php.net/manual/es/function.explode.php">explode()</a><br />
<a href="http://php.net/manual/es/function.split.php">split()</a><br />
<a href="http://es2.php.net/manual/en/function.preg-split.php">preg_split()</a><br />
<script type="text/javascript"><!--
google_ad_client = "pub-5634867144059811";
/* fp,mediopost,bara 5links */
google_ad_slot = "9129521640";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/php-explode-vs-split/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autenticarse en Google a través de un proxy y PHP</title>
		<link>http://www.forgottenprojects.com/autenticarse-en-google-a-traves-de-un-proxy-y-php/</link>
		<comments>http://www.forgottenprojects.com/autenticarse-en-google-a-traves-de-un-proxy-y-php/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 13:40:43 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://74.220.219.74/~forgotu9/?p=556</guid>
		<description><![CDATA[Cómo autenticarse con Google usando su API a través de un proxy]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fautenticarse-en-google-a-traves-de-un-proxy-y-php%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fautenticarse-en-google-a-traves-de-un-proxy-y-php%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Como en los otros posts (I  y II) sobre la API de Google Calendar no quedó muy claro el proceso de conexión y autenticación Google, voy a pegarte un trocito de código que además de cargar las librerías necesarias para usar las APIs de Google, también te enseña como hacerlo a través de un proxy, como es el caso de mi empresa.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Zend/Loader.php'</span><span style="color: #339933;">;</span>
	Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">loadClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend_Gdata_App_HttpException'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
	Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">loadClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend_Gdata_ClientLogin'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  	  
	Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">loadClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend_Http_Client_Exception'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
	Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">loadClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend_Http_Client'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
	Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">loadClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend_Http_Client_Adapter_Proxy'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
	Zend_Loader<span style="color: #339933;">::</span><span style="color: #004000;">loadClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Zend_Gdata_Calendar'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>  
	    <span style="color: #0000ff;">'adapter'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Zend_Http_Client_Adapter_Proxy'</span><span style="color: #339933;">,</span>  
	    <span style="color: #0000ff;">'proxy_host'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'proxy.empresa.es'</span><span style="color: #339933;">,</span>  
	    <span style="color: #0000ff;">'proxy_port'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">8080</span>  <span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'proxy_user'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'usuario_proxy'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'proxy_pass'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'contraseña_proxy'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'proxy_auth'</span> <span style="color: #339933;">=&gt;</span> Zend_Http_Client<span style="color: #339933;">::</span><span style="color: #004000;">AUTH_BASIC</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
	<span style="color: #000088;">$proxiedHttpClient</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Gdata_HttpClient<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://www.google.com:443'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
&nbsp;
	<span style="color: #000088;">$service</span> <span style="color: #339933;">=</span> Zend_Gdata_Calendar<span style="color: #339933;">::</span><span style="color: #004000;">AUTH_SERVICE_NAME</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;usuario@gmail.com&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$pass</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;password&quot;</span><span style="color: #339933;">;</span>
&nbsp;
	try <span style="color: #009900;">&#123;</span>  
		<span style="color: #000088;">$httpClient</span> <span style="color: #339933;">=</span> Zend_Gdata_ClientLogin<span style="color: #339933;">::</span><span style="color: #004000;">getHttpClient</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pass</span> <span style="color: #339933;">,</span> <span style="color: #000088;">$service</span><span style="color: #339933;">,</span>  <span style="color: #000088;">$proxiedHttpClient</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
	<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Zend_Gdata_App_HttpException <span style="color: #000088;">$httpException</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>  
	<span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;An error occurred trying to connect to the proxy server<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">.</span>          
		<span style="color: #000088;">$httpException</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
	<span style="color: #009900;">&#125;</span>  
&nbsp;
&nbsp;
	<span style="color: #666666; font-style: italic;">// Create an instance of the Calendar service</span>
	<span style="color: #000088;">$service</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Gdata_Calendar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$proxiedHttpClient</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>En caso de que el proxy no requiera usuario y contraseña, omitiremos las líneas de proxy_user y proxy_pass.</p>
<p>Una vez auténticados, ya podemos operar con el objeto $service para operar con Google Calendar en este caso pero también sirve para Google Docs, Youtube, etc. añadiendo las librerías correspondientes.</p>
<p>Cabe destacar que si te da un error de SSL (<strong>stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto in …</strong>) debes incluir la extensión OpenSSL en el php.ini añadiendo la linea<em> extension=”openssl.so”</em> y reiniciando el servidor para que se active.</p>
<p>También es posible que de un error <strong>Fatal error: Call to undefined method Zend_Http_Client::setClientLoginToken() in C:\xampp\php\ZendGdata\library\Zend\Gdata\ClientLogin.php on line ***</strong>, por eso he cambiado una línea que ponía<br />
<em>new Zend_Http_Client(’http://www.google.com:443?, $config);</em><br />
por la que pone<br />
<em>new Zend_Gdata_HttpClient(’http://www.google.com:443?, $config);</em></p>
<p>Ahora ya podemos por ejemplo listar todos nuestros calendarios así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>36
37
38
39
40
41
42
43
44
45
46
47
48
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
	    <span style="color: #000088;">$listFeed</span><span style="color: #339933;">=</span> <span style="color: #000088;">$service</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getCalendarListFeed</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Zend_Gdata_App_Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Error: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;h1&gt;Calendar List Feed&lt;/h1&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;ul&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$listFeed</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$calendar</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;li&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$calendar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">.</span>
	         <span style="color: #0000ff;">&quot; (Event Feed: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$calendar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">id</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;)&lt;/li&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;/ul&gt;&quot;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Fuentes:<br />
<a href="http://gdatatips.blogspot.com/2008/09/using-php-client-library-through-proxy.html">GData Tips</a><br />
<a href="http://framework.zend.com/manual/en/zend.http.client.adapters.html">Zend Framework</a><br />
<a href="http://archive.netbsd.se/?ml=squirrelmail-plugins&#038;a=2007-07&#038;t=4669364">http://archive.netbsd.se/?ml=squirrelmail-plugins&#038;a=2007-07&#038;t=4669364</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-5634867144059811";
/* piedepost */
google_ad_slot = "0908368167";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/autenticarse-en-google-a-traves-de-un-proxy-y-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Developer Lab Madrid 2010</title>
		<link>http://www.forgottenprojects.com/android-developer-lab-madrid-2010/</link>
		<comments>http://www.forgottenprojects.com/android-developer-lab-madrid-2010/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 13:27:38 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://74.220.219.74/~forgotu9/?p=552</guid>
		<description><![CDATA[
			
				
			
		
Este sábado pasado asistí al Android Developer Lab organizado por Google y que se celebró en Fuenlabrada, en la Universidad Rey Juan Carlos I.
El día antes corría el rumor por twitter de que Google estaba regalando su nuevo móvil Nexus One a los asistentes de los demás eventos de Android que estaban haciendo por Europa. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fandroid-developer-lab-madrid-2010%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fandroid-developer-lab-madrid-2010%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Este sábado pasado asistí al Android Developer Lab organizado por Google y que se celebró en Fuenlabrada, en la Universidad Rey Juan Carlos I.</p>
<p>El día antes corría el rumor por twitter de que Google estaba regalando su nuevo móvil Nexus One a los asistentes de los demás eventos de Android que estaban haciendo por Europa. Ese rumor se volvió confirmación mientras se celebraban los eventos de Paris y NY (sólo que en Nueva York regalaban Motorola Droid). Así que con ese aliciente, el madrugón del Sábado para estar allí a las 10 de la mañana no sabía tan mal.</p>
<p>Al llegar lo primero que hicieron fue repartir los teléfonos a los asistentes registrados que éramos bastantes y llenamos la sala de conferencias.<br />
<img alt="" src="http://lh5.ggpht.com/_GsirukKY5SA/S3aYLi7MQWI/AAAAAAAAGD4/i-wmQgpH5Zg/15.jpg" class="alignleft" width="640" height="480" /></p>
<p>El evento en sí, me resulto un poco decepcionante, puede ser que fuese influenciado en que el inglés del ponente me resultaba más difícil de entender que el de su compañero que hablaba menos. También porque no hicimos nada de networking (iba con <a href="http://twitter.com/mr_villa">@mr_villa</a> y su amigo <a href="http://twitter.com/olerud">@olerud</a>). Parece ser que hubo gente de And.roid.es, de <a href="http://www.geeksphone.com/en/">GeeksPhone</a>, <a href="http://droiders.com/">Droiders </a>y de <a href="http://www.inizziativa.com/">Inizziativa </a>(ganadores del ADC2). Pero especialmente porque pedían que llevásemos un portátil con el SDK 2.1 instalado, supuestamente para ver algo de código, pero de eso nada.</p>
<p>Después de la charla de introducción con datos de lo bueno que es Android y de lo que está creciendo y de ver cómo los usuarios de Android usan más sus aplicaciones y las borran menos que respecto al iPhone, nos invitaron a comer unos sandwiches y unas cocacolas para seguir después con otra pequeña charlita sobre el SDK y las APIs de desarrollo donde enseñaron un par de snippets de código para emplear geolocalización y fondos animados.</p>
<p>En general, si no hubiese sido por el Nexus One del cual haré una reseña en breve, la charla me habría resultado decepcionante aunque doy por hecho que otras personas la habrán aprovechado mucho más que yo desvirtualizando otros usuarios de twitter con los que se comunican, al estilo de lo que hicimos nosotros en el <a href="http://www.forgottenprojects.com/congreso-webmasters-2009/">congreso de webmasters</a>.</p>
<p><!--adsense#piedepost--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/android-developer-lab-madrid-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mésa multitáctil, reconociendo dedos + proyección de imagen</title>
		<link>http://www.forgottenprojects.com/mesa-multitactil-reconociendo-dedos-y-proyeccion-de-imagen/</link>
		<comments>http://www.forgottenprojects.com/mesa-multitactil-reconociendo-dedos-y-proyeccion-de-imagen/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 13:55:23 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Freaks]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[hci]]></category>
		<category><![CDATA[MTablev1]]></category>
		<category><![CDATA[multitouch]]></category>
		<category><![CDATA[surface]]></category>
		<category><![CDATA[touch]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=546</guid>
		<description><![CDATA[Video demostrando el funcionamiento de nuestra propia mesa multitáctil con reconocimiento de dedos y retroproyección]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fmesa-multitactil-reconociendo-dedos-y-proyeccion-de-imagen%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fmesa-multitactil-reconociendo-dedos-y-proyeccion-de-imagen%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=hci,MTablev1,multitouch,surface,touch" height="61" width="50" /><br />
			</a>
		</div>
<p>Pues por fin hemos integrado ambas partes, el reconocimiento de dedos y tracking con la retroproyección de la imagen en pantalla y la verdad es que funciona bastante bien. En el vídeo que hay más abajo se puede ver el resultado. Va bastante lento debido a que el ordenador que hemos conectado es un netbook con un procesador Atom de 1Gb de RAM y una gráfica Intel GMA de las báscias, aún así, hace el tratamiento de imagen bastante bien pero cuando hagamos la prueba con el Core2Duo será otro cantar y la aplicación de demostración irá como un avión. Entre tanto dejo aquí el vídeo.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/YoVa5d12m10&#038;hl=es_ES&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/YoVa5d12m10&#038;hl=es_ES&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><!--adsense#piedepost--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/mesa-multitactil-reconociendo-dedos-y-proyeccion-de-imagen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reconociendo dedos en la mesa táctil</title>
		<link>http://www.forgottenprojects.com/reconociendo-dedos-en-la-mesa-tactil/</link>
		<comments>http://www.forgottenprojects.com/reconociendo-dedos-en-la-mesa-tactil/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 18:49:05 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Freaks]]></category>
		<category><![CDATA[Interesante]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[hci]]></category>
		<category><![CDATA[MTablev1]]></category>
		<category><![CDATA[multitouch]]></category>
		<category><![CDATA[surface]]></category>
		<category><![CDATA[touch]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=461</guid>
		<description><![CDATA[Resumen del montaje de la mesa multitáctil casera, prueba de tracking de los dedos.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Freconociendo-dedos-en-la-mesa-tactil%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Freconociendo-dedos-en-la-mesa-tactil%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=hci,MTablev1,multitouch,surface,touch" height="61" width="50" /><br />
			</a>
		</div>
<p>Como algunos ya sabéis, <a href="http://www.fjfnaranjo.com">Naranjo </a>y yo andamos montando una mesa multitáctil al estilo de la Microsoft Surface, pero en plan casero, y ahorrarnos unos 11000€ que vale el bicho.</p>
<p>El caso es que estamos construyéndola desde cero, montando nosotros la estructura de la mesa, a nuestro gusto, pensada para sentarse alrededor con sillas normales como si fuese una mesa de comedor. La idea original es usarla para juegos de rol, donde en el centro tengamos la pantalla y desde la posición sentada podamos llegar a cualquier punto de la mesa. Así podríamos mostrar mapas de las regiones, del campo de batalla, la cuadrícula de combate, etc. Pero por supuesto nuestra ambición va más allá, queremos terminarla y ofrecerla como un producto terminado a cualquiera que esté interesado en disponer de una mesa multitáctil. Además, queremos desarrollar más aplicaciones que hagan un uso innovador de esta tecnología y convertirlo en algo a tener en cuenta de cara al futuro de las nuevas tecnologías e interfaces multitouch.</p>
<p>Hay unas cuantas fotos de la construcción de la mesa más abajo y también encontrarás el vídeo que he colgado en YouTube en el que se ve como la aplicación creada por <a href="http://www.nuigroup.com/">NuiGroup </a>reconoce los dedos con el montaje que tenemos hecho que de momento no son más que un monton de leds infrarrojos dispuestos en 8 grupos de 8 leds un poco al tuntún y una webcam modificada para que filtre la luz natural y vea la infraroja.</p>
<p><object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=es-us&#038;page_show_url=%2Fphotos%2Fferdy182%2Fsets%2F72157622813192400%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fferdy182%2Fsets%2F72157622813192400%2F&#038;set_id=72157622813192400&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=es-us&#038;page_show_url=%2Fphotos%2Fferdy182%2Fsets%2F72157622813192400%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fferdy182%2Fsets%2F72157622813192400%2F&#038;set_id=72157622813192400&#038;jump_to=" width="400" height="300"></embed></object></p>
<p>Vídeo de la primera prueba de tracking con un portátil<br />
<object width="580" height="360"><param name="movie" value="http://www.youtube.com/v/UOpzFXPZrVM&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6&#038;hd=1&#038;border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/UOpzFXPZrVM&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6&#038;hd=1&#038;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/reconociendo-dedos-en-la-mesa-tactil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iWeekend Madrid</title>
		<link>http://www.forgottenprojects.com/iweekend-madrid/</link>
		<comments>http://www.forgottenprojects.com/iweekend-madrid/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 23:22:26 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Interesante]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=462</guid>
		<description><![CDATA[Crónica del iweekend madrid de 2009 ]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fiweekend-madrid%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fiweekend-madrid%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Hacía tiempo que no escribía por aquí!</p>
<p>Estan siendo unos días intensos, desde que terminó en congreso he estado hablando con gente muy interesante a través de twitter, y me he ido enterando a través de ellos de otros eventos orientados al negocio en internet, muy en auge, y otro tipo de iniciativas emprendedoras. </p>
<p>Después de perderme el Evento Blog España de Sevilla que pintaba muy muy bien, y el FICOD en Madrid por ser entre semana, a los cuales me habría encantado ir y que al menos pude seguir por twitter e internet, al menos estoy asistiendo al <a href="http://www.iweekend.org">iWeekend</a>. </p>
<p>Consiste en juntarnos 50 personas interesadas en emprender un proyecto y elegir entre todos, una de las ideas propuestas para ser lanzada durante los días que dura el evento. El domingo tiene que haber una versión funcional muy básica de la idea, y esto se está haciendo en 10 lugares simultáneamente, lo cual es un indicador de que la iniciativa está gustando. En Madrid es la segunda edición ya.</p>
<p>La idea que se ha seleccionado para Madrid es un sitio web donde emprendedores buscan microinversiones de instituciones y particulares colgando sus ideas de empresa para ser revisadas por dichos inversiones que pueden elegir cuanto invertir en cada propuesta. Yo, para no ser menos, estoy en la parte de desarrollo, pero es un gustazo trabajar en equipo, con los demás desarrolladores y con los demás equipos, sobre todo los de diseño, que son los directamente relacionados con nosotros. Esperamos lanzar una beta funcional para el domingo a última hora.</p>
<p>Además, estoy aprendiendo mucho sobre como lanzar una empresa, cosas a tener en cuenta, modelos de financiación, gente que ya ha emprendido, etc. Hoy nos ha dado una charla uno de los fundadores de BuyVip y nos ha contado su experiencia y la verdad es que me parece apasionante todo este mundo. ¡Mamá! ¡quiero ser emprendedor!</p>
<p>Por otra parte, a través de twitter se puede seguir los comentarios del resto de iWeekends que se están desarrollando en paralelo siguiendo las etiquetas de #iweekend, #iw_mad, #iwcs, etc&#8230; </p>
<p>Cuando tenga un rato colgaré fotos pero se pueden ir viendo algunas en el <a href="http://www.patriciaaraque.es/blog/2009/11/21/iweekend-madrid-en-imagenes/">Blog de Patricia Araque</a>.También puedes ver una <a href="http://twitter.com/javimonsalupe/iweekendmadrid2009">lista de twitteros del iWeekend de Madrid aquí</a></p>
<div class="wp-caption alignnone" style="width: 510px"><img alt="@laurixi y yo agotados tras el segundo dia de iWeekend y viendo la presentación del plan de negocio" src="http://img113.yfrog.com/img113/6033/mmv.jpg" title="@laurixi y yo agotados tras el segundo dia de iWeekend y viendo la presentación del plan de negocio" width="75%" height="75%" /><p class="wp-caption-text">@laurixi y yo agotados tras el segundo dia de iWeekend y viendo la presentación del plan de negocio</p></div>
<div id="attachment_468" class="wp-caption aligncenter" style="width: 296px"><a href="http://www.forgottenprojects.com/wp-content/uploads/2009/11/logo_emprendemas.jpg"><img src="http://www.forgottenprojects.com/wp-content/uploads/2009/11/logo_emprendemas-286x300.jpg" alt="Diseño elegido para el logo de emprendemás" title="logo_emprendemas" width="286" height="300" class="size-medium wp-image-468" /></a><p class="wp-caption-text">Diseño elegido para el logo de emprendemás</p></div>
<p><embed type="application/x-shockwave-flash" src="http://picasaweb.google.es/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.es&#038;hl=es&#038;feat=flashalbum&#038;RGB=0x000000&#038;feed=http%3A%2F%2Fpicasaweb.google.es%2Fdata%2Ffeed%2Fapi%2Fuser%2Faraque.patricia%2Falbumid%2F5406583970210268225%3Falt%3Drss%26kind%3Dphoto%26hl%3Des" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/iweekend-madrid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Javascript] Crear objetos en Javascript</title>
		<link>http://www.forgottenprojects.com/crear-objetos-en-javascript/</link>
		<comments>http://www.forgottenprojects.com/crear-objetos-en-javascript/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 16:37:16 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=404</guid>
		<description><![CDATA[Cómo se crean nuevos objetos o clases en javascript usando el método prototype para añadirle métodos.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fcrear-objetos-en-javascript%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fcrear-objetos-en-javascript%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Como siempre se me olvida, voy a apuntar aquí cómo se hacen objetos o clases nuevas en javascript.</p>
<p>Lo primero es crear una función con el nombre del objeto, ya demás puede llevar parámetros, por ejemplo:</p>
<p><strong>function miObjeto(parametro1, parametro2)<br />
{<br />
   this.primerParam = parametro1;<br />
   this.segundoPara = parametro2;<br />
}<br />
</strong><br />
Fijarse que para añadir atributos, se usa this.atributo.</p>
<p>Con eso podemos crear instancias de esa clase así:<br />
<strong>var instancia1 = new miObjeto(&#8221;p1&#8243;,&#8221;p2&#8243;);</strong></p>
<p>Si ahora hiciesmos un <strong>alert(instancia1.primerParam);</strong> nos saldría &#8220;<strong>p1</strong>&#8220;.</p>
<p>Hasta ahora esto vendría a ser como un struct de C, pero si queremos convertirlo en un objeto, con métodos, se declaran así:</p>
<p><strong>miObjeto.prototype.metodo = function(parametro1,parametro2)<br />
{<br />
   this.primerParam = parametro1;<br />
   this.segundoParam = parametro2;<br />
}</strong></p>
<p>ahora podemos llamar así:<br />
<strong>instancia1.metodo(&#8221;a1&#8243;,&#8221;a2&#8243;);</strong><br />
y al hacer el<strong> alert(instancia1.primerParam);</strong> nos daría &#8220;<strong>a1</strong>&#8220;.</p>
<p>Así de simple se usa el método prototype, para prototipar nuevas funciones a un objeto, hale, ya os he desvelado el secreto de esas webs tan chulas en javascript, ¡a trabajar!.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/crear-objetos-en-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Calendar API + PHP (II), consultar eventos de otros calendarios</title>
		<link>http://www.forgottenprojects.com/google-calendar-api-consultar-eventos-de-otros-calendarios-ii/</link>
		<comments>http://www.forgottenprojects.com/google-calendar-api-consultar-eventos-de-otros-calendarios-ii/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 18:39:17 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[google calendar api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=341</guid>
		<description><![CDATA[Cómo hacer una query a un calendario distinto del de por defecto.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fgoogle-calendar-api-consultar-eventos-de-otros-calendarios-ii%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fgoogle-calendar-api-consultar-eventos-de-otros-calendarios-ii%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=google+calendar+api,php,zend" height="61" width="50" /><br />
			</a>
		</div>
<p>Bueno, sigo en mis trece de hacer que esto funcione, y quién sabe, hacer algo rentable de ello.</p>
<p>El caso es que como ya conseguí insetar los eventos en mi calendario recién creado, quería ver que los eventos que iba a meter no existían ya.</p>
<p>Para esto lo más cómodo es averiguar la cadena que identifica al calendario, pero ojo, porque no es ni el id del calendario ($calFeed[i]->id->text) ni la URL ($calFeed[i]->link[0]->href) sino una cadena que las contiene. Lo más rapido es quitar la URL base que no nos interesa para que nos quede el userID del calendario (que parece ser distinto para cada calendario).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span>Zend_Gdata_Calendar<span style="color: #339933;">::</span><span style="color: #004000;">CALENDAR_FEED_URI</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/default/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$calFeed</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">id</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">text</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Después, hacemos una query a ESE calendario:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$gdataCal</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Gdata_Calendar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$client</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$gdataCal</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">newEventQuery</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setUser</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVisibility</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'private'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setProjection</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'full'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setOrderby</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'starttime'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setStartMin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fechaIni</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setStartMax</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fechafin</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$eventFeed</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$gdataCal</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getCalendarEventFeed</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Y luego ya, podemos reccorer sus eventos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$eventFeed</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$event</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	 	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Comprobando &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$event</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">text</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #339933;">;</span>	    
		<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$event</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">when</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$when</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$when</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">startTime</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Si no queremos hacer una búsqueda por parámetros sino sacarlos todos, es más fácil, primero sacamos el enlace al calendario:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$calFeed</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">href</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Y después pedimos los eventos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$events</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$gdataCal</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getCalendarEventFeed</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>(Fuente: <a href="http://www.zfforums.com/zend-framework-components-13/web-web-services-22/gdata-how-get-other-calendar-than-default-one-245.html">http://www.zfforums.com/zend-framework-components-13/web-web-services-22/gdata-how-get-other-calendar-than-default-one-245.html</a>)</p>
<p>De verdad que no se por qué la API esta está tan mal documentada&#8230;<br />
<!--adsense#piedepost--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/google-calendar-api-consultar-eventos-de-otros-calendarios-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Calendar API + PHP (I)</title>
		<link>http://www.forgottenprojects.com/google-calendar-api-php-i/</link>
		<comments>http://www.forgottenprojects.com/google-calendar-api-php-i/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 15:29:12 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[include_path]]></category>
		<category><![CDATA[new]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wamp]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=333</guid>
		<description><![CDATA[Como crear un calendario de Google Calendar con php y Zend]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fgoogle-calendar-api-php-i%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fgoogle-calendar-api-php-i%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=api,calendar,create,feed,google,include_path,new,php,wamp,xml,zend" height="61" width="50" /><br />
			</a>
		</div>
<p>Bueno, llevo un par de días pegándome con una chorrada  de aplicación que se me había ocurrido hacer por entretenimiento y al final ha resultado la mar de estresante, aunque eso si, puedo decir que he aprendido algunos entresijos de las APIs de Google, en concreto de la de calendar, aunque en definitiva son todas parecedas, ya que se basan en el <strong>envío de XML a través de métodos POST previa autenticación con Google</strong> por 3 vías diferentes.</p>
<p>Como hay miles de tutoriales por ahí para empezar, prefiero comentar problemas que haya ido encontrando, además, como todo buen programador masoquista, paso de usar la libreria-para-tontos de PHP basada en Zend Framework que hay creada para usar, aunque al final he tenido que sucumbir, no por voluntad propia, sino por un<strong> error <em>411 Length Required</em> que no hacía más que salirme por mucho que cambiase las cabeceras del POST</strong>, así que solución 1, pasarse a la librería Zend, solución 2, ver como porras lo hace la librería para copiarlo xD</p>
<p>Para mas inri, el error me lo estaba dando al crear un nuevo calendario enviando por POST el xml que hace falta para indicar que se desea crearlo, me pasé a la librería Zend pensando que ahí habría algún método mágico tipo createCalendar al igual que hay uno para crear eventos. Craso error amigo mío, cuando veo que ni por asomo hay una función para crear calendarios. Menos mal que rebuscando por ahí, un alma caritativa da una solución que ya se me había ocurrido y no sabía hacer, que es, nuevamente, enviar por POST el xml a pelo (pero esta vez con la libreria Zend) y voilá! funcionó <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Para crear un calendario nuevo, se debe escribir el XML correspondiente, se puede usar una plantilla como la siguiente:<br />
<code>$xmlEntry = "&lt;entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005' xmlns:gCal='http://schemas.google.com/gCal/2005'&gt;  &lt;title type='text'&gt;[TITLE]&lt;/title&gt;  &lt;summary type='text'&gt;[SUMMARY]&lt;/summary&gt;  &lt;gCal:timezone value='Spain/Madrid'&gt;&lt;/gCal:timezone&gt;  &lt;gCal:hidden value='false'&gt;&lt;/gCal:hidden&gt;  &lt;gCal:color value='[COLOR]'&gt;&lt;/gCal:color&gt;  &lt;gd:where rel='' label='' valueString='Madrid'&gt;&lt;/gd:where&gt; &lt;/entry&gt;";</code></p>
<p>De ahí solo hay que rellenar 3 cosas, <strong>[TITLE]</strong> que es el nombre del calendario, <strong>[SUMMARY]</strong> que es el resumen (y no es importante) y <strong>[COLOR]</strong> que define el color de la etiqueta del calendario <strong>y no puede ser cualquier color</strong> sino uno de estos:<br />
<code>'#A32929'<br />
'#B1365F',<br />
'#7A367A',<br />
'#5229A3',<br />
'#29527A',<br />
'#2952A3',<br />
'#1B887A',<br />
'#28754E',<br />
'#0D7813',<br />
'#528800',<br />
'#88880E',<br />
'#AB8B00',<br />
'#BE6D00',<br />
'#B1440E',<br />
'#865A5A',<br />
'#705770',<br />
'#4E5D6C',<br />
'#5A6986',<br />
'#4A716C',<br />
'#6E6E41',<br />
'#8D6F47',</code></p>
<p>(que no se cual es cual&#8230;)</p>
<p>Total, que una vez sustituidos los campos de la plantilla con nuestros datos del calendario, pues hay que autenticarse si no lo estamos ya, y enviar el POST así:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> crearCalendario<span style="color: #009900;">&#40;</span><span style="color: #000088;">$nombre</span><span style="color: #339933;">,</span> <span style="color: #000088;">$resumen</span><span style="color: #339933;">,</span> <span style="color: #000088;">$client</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$gdataCal</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Gdata_Calendar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$client</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$uri</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://www.google.com/calendar/feeds/default/owncalendars/full'</span><span style="color: #339933;">;</span>	
	<span style="color: #000088;">$xmlEntry</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'[TITLE]'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nombre</span><span style="color: #339933;">,</span> <span style="color: #000088;">$xmlEntry</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$xmlEntry</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'[SUMMARY]'</span><span style="color: #339933;">,</span>	<span style="color: #000088;">$resumen</span><span style="color: #339933;">,</span> <span style="color: #000088;">$xmlEntry</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$gdataCal</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlEntry</span><span style="color: #339933;">,</span> <span style="color: #000088;">$uri</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>También se puede guardar el xml en un archivo plantilla, por ejemplo createcal.xml y cargarlo antes de sustituir:<br />
<code>$xml = file_get_contents('createcal.xml');</code></p>
<p>Después de ejecutar esto vamos a Google Calendar (o listamos de nuevo los calendarios) y vemos que el calendario que le hemos dicho se ha creado correctamente.</p>
<p>Por cierto, para los que usan <strong>WAMP </strong>como servidor local de prueba, para usar las librerias Zend hay que ir al php.ini pero no el de la carpeta PHP sino <strong>al de Apache (C:\wamp\bin\apache\Apache2.2.11\bin\php.ini)</strong> y buscar la línea que empieza por ;include_path, quitarle el ; del principio y añadir al final la ruta del disco duro hasta la carpeta library del directorio donde hemos descargado el Zend (<strong>línea 528: include_path = &#8220;.;c:\php\includes;C:\wamp\apps\ZendGdata-1.8.4\library&#8221;</strong>)</p>
<p><!--adsense#piedepost--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/google-calendar-api-php-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tooltip en css y javascript para menu desplegable que funciona en internet explorer 6</title>
		<link>http://www.forgottenprojects.com/tooltip-en-css-y-javascript-para-menu-desplegable-que-funciona-en-internet-explorer-6/</link>
		<comments>http://www.forgottenprojects.com/tooltip-en-css-y-javascript-para-menu-desplegable-que-funciona-en-internet-explorer-6/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 09:00:08 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[explorer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tooltip]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=302</guid>
		<description><![CDATA[Cómo implementar un tooltip en IE6]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Ftooltip-en-css-y-javascript-para-menu-desplegable-que-funciona-en-internet-explorer-6%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Ftooltip-en-css-y-javascript-para-menu-desplegable-que-funciona-en-internet-explorer-6%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=explorer,javascript,tooltip" height="61" width="50" /><br />
			</a>
		</div>
<p>Antes de que sigas leyendo, no, no es posible hacer un tooltip en cada opción del desplegable en IE6 ya que ni el atributo title ni los eventos de ratón están disponibles para la etiqueta option. Para otros navegadores consulta <a href="http://www.forgottenprojects.com/tooltip-desplegables-select-combo-dropdown/">mi post anterior</a>.</p>
<p>Para hacer un tooltip funcional en IE6, se debe incluir el código siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">&lt;style<span style="color: #00AA00;">&gt;</span>
<span style="color: #cc00cc;">#tooltip</span> <span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #933;">2px</span> <span style="color: #933;">1px</span> <span style="color: #933;">2px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #000000; font-weight: bold;">black</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#FFFF99</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">400px</span><span style="color: #00AA00;">;</span>
  <span style="color: #000000; font-weight: bold;">z-index</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">1000</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>			
&lt;/style<span style="color: #00AA00;">&gt;</span></pre></td></tr></table></div>

<p>Esto crea la clase tooltip en CSS para asignar al div que almacenerá el texto del tooltip.</p>
<p>Ahora incluimos las funciones en javascript:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script language<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;javascript&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #006600; font-style: italic;">// This function checks the mouse event</span>
<span style="color: #003366; font-weight: bold;">function</span> checkEvent<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>e<span style="color: #009900;">&#41;</span> <span style="color: #003366; font-weight: bold;">var</span> e <span style="color: #339933;">=</span> window.<span style="color: #660066;">event</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">target</span><span style="color: #009900;">&#41;</span> targ <span style="color: #339933;">=</span> e.<span style="color: #660066;">target</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">srcElement</span><span style="color: #009900;">&#41;</span> targ <span style="color: #339933;">=</span> e.<span style="color: #660066;">srcElement</span><span style="color: #339933;">;</span>
	showHideToolTip<span style="color: #009900;">&#40;</span>targ<span style="color: #339933;">,</span> e<span style="color: #339933;">,</span> e.<span style="color: #660066;">type</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #006600; font-style: italic;">// This function shows/hides the tooltip</span>
<span style="color: #003366; font-weight: bold;">function</span> showHideToolTip <span style="color: #009900;">&#40;</span>theDropDown<span style="color: #339933;">,</span> e<span style="color: #339933;">,</span> eType<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #003366; font-weight: bold;">var</span> toolTipObj <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Object<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 toolTipObj <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;tooltip&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 toolTipObj.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> theDropDown.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>theDropDown.<span style="color: #660066;">selectedIndex</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span><span style="color: #339933;">;</span>
 <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>eType <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;mouseout&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  toolTipObj.<span style="color: #660066;">style</span>.<span style="color: #660066;">display</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;none&quot;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span>
 <span style="color: #009900;">&#123;</span>
  toolTipObj.<span style="color: #660066;">style</span>.<span style="color: #660066;">display</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;inline&quot;</span><span style="color: #339933;">;</span>
  toolTipObj.<span style="color: #660066;">style</span>.<span style="color: #660066;">top</span> <span style="color: #339933;">=</span> e.<span style="color: #660066;">y</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">15</span><span style="color: #339933;">;</span>
  toolTipObj.<span style="color: #660066;">style</span>.<span style="color: #660066;">left</span> <span style="color: #339933;">=</span> e.<span style="color: #660066;">x</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Esto sirve para comprobar el evento sobre el control y para mostrar u ocultar el tooltip.</p>
<p>Luego solo hay que añadir en el html el siguiente div</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;tooltip&quot;&gt;&lt;/div&gt;</pre></div></div>

<p>Y añadir al select o dropdown que tengamos lo siguiente antes de cerrar el tag (>):</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">onMouseOver<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;checkEvent(this.event);&quot;</span> 
onMouseOut<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;checkEvent(this.event);&quot;</span> 
onMouseMove<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;checkEvent(this.event);&quot;</span></pre></div></div>

<p>Ver <a href="http://www.forgottenprojects.com/ferdy182/ejemplo/select2.html">demo </a>(solo IE7+)</p>
<p><!--adsense#piedepost--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/tooltip-en-css-y-javascript-para-menu-desplegable-que-funciona-en-internet-explorer-6/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tooltip en menús desplegables tipo select,combo y dropdown</title>
		<link>http://www.forgottenprojects.com/tooltip-desplegables-select-combo-dropdown/</link>
		<comments>http://www.forgottenprojects.com/tooltip-desplegables-select-combo-dropdown/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 09:00:30 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Viaje a italia]]></category>
		<category><![CDATA[fotolog]]></category>
		<category><![CDATA[explorer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tooltip]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=297</guid>
		<description><![CDATA[Cómo hacer un tooltip en menus desplegables con javascript]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Ftooltip-desplegables-select-combo-dropdown%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Ftooltip-desplegables-select-combo-dropdown%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=explorer,javascript,tooltip" height="61" width="50" /><br />
			</a>
		</div>
<p>Buenas, siguiendo estos días unos posts dedicados al infernal Internet Explorer y cómo algunas empresas, no sólo se empeñan en jorobar empleandolo, sino además manteniendo la versión 6 como &#8220;corporativa&#8221;, hoy vamos a aprender como implementar un tooltip para menús desplegables tipo select (html) o dropdown(asp.net)</p>
<p>Para IE7 y navegadores que funcionan bien como Firefox, podemos hacer uso del atributo title de los elementos html ya que se dispara el tooltip en el evento mouseover automáticamente (cosa que en IE6 no ocurre por eso hay que hacerlo de otra manera).</p>
<p>Si tenemos un desplegable que se llena dinámicamente, no podemos poner el title a cada option, ya que aun no existen a la hora de diseñar el formulario, por esto se puede echar mano de javascript con la siguiente funcion:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> tooltips<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>			
        items <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;option&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>items.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	       items<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">title</span><span style="color: #339933;">=</span>items<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span><span style="color: #339933;">;</span>				
	<span style="color: #009900;">&#125;</span>
	drop <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	drop.<span style="color: #660066;">onchange</span> <span style="color: #339933;">=</span> tooltipselect<span style="color: #339933;">;</span>
	tooltipselect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>llamando a esta funcion en el body así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;body onload=&quot;javascript:tooltips()&quot;;&gt;</pre></td></tr></table></div>

<p>Con esto añadiremos el title a todos los dropdowns de la página así al desplegar el select, nos aparecerá un tooltip para cada option.</p>
<p>Para añadir también un tooltip a la opción seleccionada se incluye la siguiente función, que como se ve, es llamada al final de la anterior (asumiendo que el select tiene como id=&#8221;select&#8221;):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> tooltipselect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	drop <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;select&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	drop.<span style="color: #660066;">title</span> <span style="color: #339933;">=</span> drop.<span style="color: #660066;">options</span><span style="color: #009900;">&#91;</span>drop.<span style="color: #660066;">selectedIndex</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">text</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Esto hace que al cambiar la opción, se actualice el tooltip del desplegable cerrado.</p>
<p>Ver una <a href="http://www.forgottenprojects.com/ferdy182/ejemplo/select.html">demo</a></p>
<p><!--adsense#piedepost --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/tooltip-desplegables-select-combo-dropdown/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instalar múltiples versiones de Internet Explorer</title>
		<link>http://www.forgottenprojects.com/instalar-multiples-versiones-internet-explorer/</link>
		<comments>http://www.forgottenprojects.com/instalar-multiples-versiones-internet-explorer/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 14:00:12 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[explorer]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[multiple]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=292</guid>
		<description><![CDATA[Cómo tener mútiples versiones de internet explorer en windows xp]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Finstalar-multiples-versiones-internet-explorer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Finstalar-multiples-versiones-internet-explorer%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=explorer,internet,multiple" height="61" width="50" /><br />
			</a>
		</div>
<p><!-- adsense#piepost --></p>
<p>A raíz del post anterior donde podemos detectar la version del internet explorer, hoy podemos instalar más de una versión simultánea del mismo con el fin de probar distintas maquetaciones, dada la gran afición del Internet Explorer 6 a <del datetime="2009-03-16T16:20:40+00:00">joder</del> modificar la maquetación debido a mútiples <del datetime="2009-03-16T16:20:40+00:00">bugs</del> features, siempre viene bien tener distintas versiones a mano para optimizar el diseño y aplicación a mútiples navegadores con sus <del datetime="2009-03-16T16:20:40+00:00">tocahuevos </del> usuarios detrás.</p>
<p>No voy a explicar como funciona, para eso lo veis <a href="http://tredosoft.com/Multiple_IE">aquí</a> pero se puede instalar descargandolo de <a href="http://tredosoft.com/files/multi-ie/multiple-ie-setup.exe">Multiple IE Setup</a>(10,3 MB sólo Win XP )</p>
<p>Como sólo te instala hasta el IE6, recomiendo instalar el 7 de forma normal y luego instalar esto para disponer de las demás versiones.</p>
<p><img src="http://tredosoft.com/files/multi-ie/setup1.png" alt="Menu de instalacion de multiples IE" /></p>
<p><strong>Forgotten Projects recomienda encarecidamente usar <a href="http://www.mozilla-europe.org/es/firefox/">Mozilla Firefox</a> que es más seguro, más estable, más útil, más bonito, más ampliable, más opensource y más más</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/instalar-multiples-versiones-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript, detectar la versión de Internet Explorer</title>
		<link>http://www.forgottenprojects.com/javascript-detectar-version-internet-explorer/</link>
		<comments>http://www.forgottenprojects.com/javascript-detectar-version-internet-explorer/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 16:18:32 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=282</guid>
		<description><![CDATA[Cómo averiguar la versión de internet explorer desde javascript]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fjavascript-detectar-version-internet-explorer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fjavascript-detectar-version-internet-explorer%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><!--adsense#piedepost--></p>
<p>Como hace mucho que no escribo, voy a hacerlo comentando algo que he necesitado hoy en el curro, que es identificar la versión de internet explorer para poder realizar una función u otra, que sabemos que no va a ser compatible en una versión y en otra si, vamos, lo típico.</p>
<p>Una manera es a partir de la versión de javascript, la cual <strong>no es muy fiable</strong>.</p>
<p>El código que nos sirve para almacenar la versión en una variable es el siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> ieVer<span style="color: #339933;">=</span><span style="color: #006600; font-style: italic;">/*@cc_on function(){ switch(@_jscript_version){ case 1.0:return 1; case 3.0:return 3; case 5.0:return 5; case 5.1:return 5; case 5.5:return 5.5; case 5.6:return 6; case 5.7:return 7; case 5.8:return 5.8; }}()||@*/</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/MSIE 6.0/i</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">userAgent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>ieVer<span style="color: #339933;">=</span><span style="color: #CC0000;">6</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Las instrucciones entre /*@cc_on  y */ son comentarios condicionales (y que ni yo sabía que existía tal cosa) y por lo visto es tan poco estándar que sólo internet explorer lo lee, así que de entrada ignoramos que otros navegadores se metan por ahí y la lien. De este modo valdrá 0 para el resto de navegadores (y podemos entonces comparar la versión de éstos de otras maneras).</p>
<p>La parte de dentro del comentario chungo, asocia un valor a cada versión del IE, de este modo, la versión 1 devuelve 1, la versión 3 devuelve 3, etc&#8230;</p>
<p>Se comprueba hasta el 5.8, luego el 6 se comprueba fuera del comentario. La versión 7 y 8 del Internet Explorer devuelve 7 u 8 según proceda pese a no estar contemplado en el código (intuyo que va implícito en la versión de javascript que implementen).</p>
<p>Así, para comprobar si el navegador es inferior a una versión, solo hay que hacer:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>ieVer<span style="color: #339933;">&lt;=</span><span style="color: #CC0000;">6</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>funcionEjecutada<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Otro método <b>más fiable</b> es parsear con una expresión regular la versión del navegador. El código es el siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> vIE<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">appName</span><span style="color: #339933;">==</span><span style="color: #3366CC;">'Microsoft Internet Explorer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>parseFloat<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;MSIE ([0-9]{1,}[.0-9]{0,})&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>navigator.<span style="color: #660066;">userAgent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:-</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Devuelve la versión de internet explorer devuelta por la variable UserAgent en caso de ser Internet Explorer o -1 para el resto de navegadores (curioso que el appName del firefox sea el difunto Netscape aunque luego en el userAgent se indique Firefox).</p>
<p>Fuente:<a href="http://outbook.blogspot.com/2007/12/detectar-la-versin-de-internet-explorer.html">outbook</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/javascript-detectar-version-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Music while coding</title>
		<link>http://www.forgottenprojects.com/music-while-coding/</link>
		<comments>http://www.forgottenprojects.com/music-while-coding/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 11:39:22 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[La nueva vida]]></category>
		<category><![CDATA[Musica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[matrix]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/?p=266</guid>
		<description><![CDATA[¿Qué musica oyes mientras programas o haces deporte?]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fmusic-while-coding%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fmusic-while-coding%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly&amp;hashtags=coding,matrix,Musica" height="61" width="50" /><br />
			</a>
		</div>
<p>Estaba escuchando en <a href="http://www.spotify.com/en/download/windows/">Spotify</a> la banda sonora de Matrix Revolutions mientras escribo código en el curro y he llegado a la canción &#8220;<a href="http://open.spotify.com/track/1m92ngkxEKnE8nBzH4iafY">Tetsujin</a>&#8220;, de <a href="http://es.wikipedia.org/wiki/Juno_Reactor">Juno Reactor</a> vs. <a href="http://es.wikipedia.org/wiki/Don_Davis">Don Davis</a> y he pensado, &#8216;que canción más cojonuda para programar&#8217;, lo que me ha llevado a buscar en internet que oye la gente mientras programa. </p>
<p>Programar es una tarea que requiere concentración pero al ser bastante mecánico, se puede hacer oyendo música sin problemas, no es como estudiar, que puede ser un poco contraproducente según lo que se oiga.</p>
<p>Cuando programo me gusta escuchar música cañera que me espabile, que tenga un ritmo muy marcado más o menos constante y además me motive a programar a toda pastilla. La música electrónica es un buen aliado en este sentido pero como no soy muy fan y no conozco muchos grupos buenos, intento oir cosas que me suenen. Por ejemplo, la banda sonora de las tres películas de <a href="http://es.wikipedia.org/wiki/The_Matrix">Matrix </a>me parecen estupendas para programar. Ahora mismo estoy oyendo &#8216;<a href="http://open.spotify.com/track/1Bjgk8W01w4wx2SMCldsYZ">Navras</a>&#8216; y me está motivando. También me gusta escuchar <a href="http://open.spotify.com/album/4VqPuC0LLhgb1Gp3SVEd1u">Nightwish </a>o <a href="http://open.spotify.com/album/6hPkbAV3ZXpGZBGUvL6jVM">Linkin Park</a> ya que tienen ritmos que motivan a darle caña a lo que estemos haciendo.</p>
<p>Por eso animo a los lectores y visitantes que me digan que oyen mientras programan o hacen ejercicio y así descubrir nuevos temas interesantes <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><!-- adsense --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/music-while-coding/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Insertar en Excel desde C# con OleDb</title>
		<link>http://www.forgottenprojects.com/excel-insertar-datos-c/</link>
		<comments>http://www.forgottenprojects.com/excel-insertar-datos-c/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 16:28:25 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/excel-insertar-datos-c/</guid>
		<description><![CDATA[
			
				
			
		
En muchos sitios se explica como insertar filas en excel por OleDb así que voy a poner un fragmento y una breve explicación de cómo se hace porque lo realmente interesante es como corregir el error &#8220;La operación debe usar una consulta actualizable&#8221; que me surgió a mi y que me costó un montón averiguar [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fexcel-insertar-datos-c%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fexcel-insertar-datos-c%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>En muchos sitios se explica como insertar filas en excel por OleDb así que voy a poner un fragmento y una breve explicación de cómo se hace porque lo realmente interesante es como corregir el error <em>&#8220;La operación debe usar una consulta actualizable&#8221;</em> que me surgió a mi y que me costó un montón averiguar dado que no me funcionaban las indicaciones que encontraba en otras páginas.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">        <span style="color: #FF0000;">string</span> file <span style="color: #008000;">=</span> Server.<span style="color: #0000FF;">MapPath</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;pruebaExcel.xls&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">string</span> connectionString <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot;</span> <span style="color: #008000;">+</span> file <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;;Extended Properties='Excel 8.0;HDR=Yes;IMEX=0;'&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">System.<span style="color: #0000FF;">Data</span></span>.<span style="color: #0000FF;">OleDb</span>.<span style="color: #0000FF;">OleDbConnection</span> oCon <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Data</span></span>.<span style="color: #0000FF;">OleDb</span>.<span style="color: #0000FF;">OleDbConnection</span><span style="color: #000000;">&#40;</span>connectionString<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        oCon.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">string</span> q <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;INSERT INTO [Hoja1$B1:B1] VALUES (1)&quot;</span><span style="color: #008000;">;</span>
        <span style="color: #FF0000;">int</span> r <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Data</span></span>.<span style="color: #0000FF;">OleDb</span>.<span style="color: #0000FF;">OleDbCommand</span><span style="color: #000000;">&#40;</span>q, oCon<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">ExecuteNonQuery</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        oCon.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>Este código busca la ruta física del archivo de excel en el servidor de ASP.NET para crear la cadena de conexión que nos conectará al archivo de Excel que hemos especificado. Importante el código en negrita IMEX=0 ya que tiene que ver con los tipos de los datos de las columnas y puede dar problemas a la hora de escribir desde código y es el problema que estaba teniendo. Si lo ponemos a uno nos dará un error que dice &#8220;Operation must use an updateable query&#8221; o &#8220;La operación debe usar una consulta actualizable&#8221;, para solucionarlo ponemos IMEX=0 o lo omitimos del connection string.</p>
<p>Después creamos la conexión con OleDB usando la connection string que acabamos de crear la abrimos para poder empezar a operar.</p>
<p><!--adsense--></p>
<p>La notación sql de Excel y Access difiere un poco a lo que estamos acostumbrados ya que es posible que los nombres de columnas tengan caracteres raros como acentos o espacios, por eso, al decirle en que tabla queremos operar, se lo ponemos entre corchetes, y en excel además ponemos un $ al final para indicarle que hoja del libro vamos a usar.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #66cc66;">&#91;</span>Hoja1$<span style="color: #66cc66;">&#93;</span></pre></div></div>

<p>nos devolvería todas las filas de la hoja 1 del libro de excel, salvo que hayamos indicado en el connection string la propiedad HDR=1 con lo cual le indicamos que la primera fila no contiene datos sino los nombre de columnas.<br />
Si solo queremos usar un rango de celdas podemos decirle</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #66cc66;">&#91;</span>Hoja1$A2:H10<span style="color: #66cc66;">&#93;</span></pre></div></div>

<p> que nos devolvería las filas de la 2 a la 10 y las columnas de la A a la H.</p>
<p>En excel también podemos definir nombres a un conjunto de celdas. Para ello, dentro de Excel, seleccionamos un rango de celdas y vamos al menu Insertar > Nombre > Definir y le damos un nombre. Este nombre también es accesible desde código pudiendo hacer:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> NombreQueHemosDado <span style="color: #66cc66;">&#40;</span>col1<span style="color: #66cc66;">,</span> col2<span style="color: #66cc66;">,</span> col3<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Si nuestras columnas tienen nombres raros, hay que ponerlas entre corchetes pero no pasa nada si se los ponemos a todas aunque no tengan nombres raros:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> NombreQueHemosDado <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>col1<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#91;</span>col2<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&#91;</span>col3<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">,</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p> también es válido.</p>
<p>Aprovecho para recomendar la página <a href="http://www.connectionstrings.com/">connectionstrings.com</a> donde se puede buscar qué cadena de conexión hay que escribir para conectarse a cualquier base de datos y dónde encontré una pista para solucionar el error que tenía.<br />
<span id="more-198"></span><br />
<!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/excel-insertar-datos-c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Plantilla para mostrar Google Maps en 4images</title>
		<link>http://www.forgottenprojects.com/plantilla-google-maps-4images/</link>
		<comments>http://www.forgottenprojects.com/plantilla-google-maps-4images/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 16:00:10 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/10/15/plantilla-para-mostrar-google-maps-en-4images/</guid>
		<description><![CDATA[
			
				
			
		
¿Usas 4images y necesitas añadir una plantilla a tu template para mostrar archivos kml en la galería?
Copia el siguiente código en un archivo de texto, guardalo como kml.html y súbelo al directorio /media dentro de la carpeta del template que estés utilizando, y habilita los archivos kml como extensión válida de archivos que se pueden [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fplantilla-google-maps-4images%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fplantilla-google-maps-4images%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>¿Usas 4images y necesitas añadir una plantilla a tu template para mostrar archivos kml en la galería?</p>
<p>Copia el siguiente código en un archivo de texto, guardalo como kml.html y súbelo al directorio <strong>/media</strong> dentro de la carpeta del template que estés utilizando, y habilita los archivos kml como extensión válida de archivos que se pueden subir, en el panel de control de 4images.<br />
Recuerda que debes sustituir donde pone <strong>&#8220;tuKeyDeGoogleMaps&#8221;</strong> en la primera línea por una <a href="http://code.google.com/apis/maps/signup.html">clave que te proporciona google</a> para permitir tener mapas en tu dominio.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;map&quot;</span> style<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;width: 700px; height: 500px&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://maps.google.com/maps?file=api&amp;v=2&amp;key=tuKeyDeGoogleMaps&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script languaje<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;javascript&quot;</span><span style="color: #339933;">&gt;</span>
	map <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> GMap2<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;map&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	map.<span style="color: #660066;">setCenter</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> GLatLng<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">43.337164854911</span><span style="color: #339933;">,-</span><span style="color: #CC0000;">3.8960266113281</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span>G_SATELLITE_MAP<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	map.<span style="color: #660066;">addControl</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> GSmallZoomControl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	url <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;{media_src}&quot;</span><span style="color: #339933;">;</span>
	url <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://www.ambiental-hitos.com/4images/&quot;</span><span style="color: #339933;">+</span>url.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	geo <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> GGeoXml<span style="color: #009900;">&#40;</span>url<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span> cargado<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>geo.<span style="color: #660066;">loadedCorrectly</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		    geo.<span style="color: #660066;">gotoDefaultViewport</span><span style="color: #009900;">&#40;</span>map<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>map.<span style="color: #660066;">getZoom</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">15</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				map.<span style="color: #660066;">setZoom</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		  <span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	map.<span style="color: #660066;">addOverlay</span><span style="color: #009900;">&#40;</span>geo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>y quedaría así:<br />
<a href='http://www.forgottenprojects.com/wp-content/uploads/2008/10/screenshot004.png' title='captura www.ambiental-hitos.com/4images'><img src='http://www.forgottenprojects.com/wp-content/uploads/2008/10/screenshot004.thumbnail.png' alt='captura www.ambiental-hitos.com/4images' /></a></p>
<p><!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/plantilla-google-maps-4images/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Emular el selector max-width en IE con expression</title>
		<link>http://www.forgottenprojects.com/emular-selector-max-width-ie-expression/</link>
		<comments>http://www.forgottenprojects.com/emular-selector-max-width-ie-expression/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 16:05:28 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/10/14/emular-el-selector-max-width-en-ie-con-expression/</guid>
		<description><![CDATA[
			
				
			
		
Hace poco descubrí la existencia de la etiqueta expression en los archivos CSS que permiten ejecutar una sentencia de javascript para dar valor a un selector.
Bien, lo primero decirte que evites esto totalmente salvo que sea realmente necesario, siempre que puedas, hazlo con cosas estándar.
Lo segundo, esto puede venir bien a la hora de limitar [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Femular-selector-max-width-ie-expression%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Femular-selector-max-width-ie-expression%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Hace poco descubrí la existencia de la etiqueta expression en los archivos CSS que permiten ejecutar una sentencia de javascript para dar valor a un selector.</p>
<p>Bien, lo primero decirte que evites esto totalmente salvo que sea realmente necesario, siempre que puedas, hazlo con cosas estándar.</p>
<p>Lo segundo, esto puede venir bien a la hora de limitar el ancho o alto máximo o mínimo de un elemento html en IE6 o anteriores ya que la etiqueta max-width no existe en ellos.</p>
<p>Un ejemplo extraído de <a href="http://www.svendtofte.com/code/max_width_in_ie/">aquí </a>nos dice como usarlo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">&lt;html<span style="color: #00AA00;">&gt;</span>
&lt;style<span style="color: #00AA00;">&gt;</span>
p <span style="color: #00AA00;">&#123;</span>
<span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #993333;">red</span><span style="color: #00AA00;">;</span>
<span style="color: #000000; font-weight: bold;">width</span><span style="color: #3333ff;">:width</span><span style="color: #00AA00;">:</span>expression<span style="color: #00AA00;">&#40;</span>document<span style="color: #6666ff;">.body</span><span style="color: #6666ff;">.clientWidth</span> <span style="color: #00AA00;">&gt;</span> <span style="color: #cc66cc;">800</span>? <span style="color: #ff0000;">&quot;800px&quot;</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">&quot;auto&quot;</span> <span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&lt;/style<span style="color: #00AA00;">&gt;</span>
&lt;body<span style="color: #00AA00;">&gt;</span>
&lt;p<span style="color: #00AA00;">&gt;</span>
<span style="color: #00AA00;">&#91;</span>mucho texto<span style="color: #00AA00;">&#93;</span>
&lt;/p<span style="color: #00AA00;">&gt;</span></pre></td></tr></table></div>

<p>De esta manera decimos que si el ancho de la ventana cliente es mayor que 800px, la mantenemos en 800px o si es menor, la dejamos automática. <a href="http://www.svendtofte.com/code/max_width_in_ie/pixels_maxwidth.html">Ejemplo</a></p>
<p><!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/emular-selector-max-width-ie-expression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Insertar imagenes en Excel desde C#</title>
		<link>http://www.forgottenprojects.com/insertar-imagenes-excel-c/</link>
		<comments>http://www.forgottenprojects.com/insertar-imagenes-excel-c/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 10:41:51 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/10/13/insertar-imagenes-en-excel-desde-c/</guid>
		<description><![CDATA[
			
				
			
		
Siguiendo con los post sobre cachitos de código que te hacen las vida más fácil (y que por lo visto hacen que aumenten las visitas del blog) hoy voy a hablar sobre como insertar una imagen en una hoja de Excel desde C# .NET
Todos estos fragmentos de código que voy subiendo solucionan problemillas concretos con [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Finsertar-imagenes-excel-c%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Finsertar-imagenes-excel-c%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Siguiendo con los post sobre cachitos de código que te hacen las vida más fácil (y que por lo visto hacen que aumenten las visitas del blog) hoy voy a hablar sobre como insertar una imagen en una hoja de Excel desde C# .NET</p>
<p>Todos estos fragmentos de código que voy subiendo solucionan problemillas concretos con los que me topo en los proyectos en los que trabajo y sobre los cuales tampoco encuentro información relevante en Google.</p>
<p>Empecemos, escribo el código y lo comento:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #FF0000;">object</span> oMissing <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Reflection</span></span>.<span style="color: #0000FF;">Missing</span>.<span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span>
Application apl <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Excel.<span style="color: #0000FF;">ApplicationClass</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Workbook libro <span style="color: #008000;">=</span> apl.<span style="color: #0000FF;">Workbooks</span>.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\archivoexcel.xls&quot;</span>, oMissing, oMissing, oMissing, oMissing,
                  oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #008080;">#region Insertar imagen en excel</span>
Excel.<span style="color: #0000FF;">Worksheet</span> sheet <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>Excel.<span style="color: #0000FF;">Worksheet</span><span style="color: #000000;">&#41;</span>libro.<span style="color: #0000FF;">Sheets</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">System.<span style="color: #0000FF;">Drawing</span></span>.<span style="color: #0000FF;">Image</span> logo1 <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Drawing</span></span>.<span style="color: #0000FF;">Image</span>.<span style="color: #0000FF;">FromFile</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\logoAena.png&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
sheet.<span style="color: #0000FF;">Shapes</span>.<span style="color: #0000FF;">AddPicture</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\logoAena.png&quot;</span>, MsoTriState.<span style="color: #0000FF;">msoFalse</span>, MsoTriState.<span style="color: #0000FF;">msoCTrue</span>, 1f, 1f, logo1.<span style="color: #0000FF;">Width</span>, logo1.<span style="color: #0000FF;">Height</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008080;">#endregion</span>
&nbsp;
libro.<span style="color: #0000FF;">SaveAs</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\excel.xls&quot;</span>, Excel.<span style="color: #0000FF;">XlFileFormat</span>.<span style="color: #0000FF;">xlExcel9795</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">false</span>, <span style="color: #0600FF;">false</span>, Excel.<span style="color: #0000FF;">XlSaveAsAccessMode</span>.<span style="color: #0000FF;">xlNoChange</span>, Excel.<span style="color: #0000FF;">XlSaveConflictResolution</span>.<span style="color: #0000FF;">xlLocalSessionChanges</span>, <span style="color: #0600FF;">false</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">null</span>, <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>Vamos a ver línea por línea que hace cada cosa</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">Application apl <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Excel.<span style="color: #0000FF;">ApplicationClass</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
Workbook libro <span style="color: #008000;">=</span> apl.<span style="color: #0000FF;">Workbooks</span>.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\archivoexcel.xls&quot;</span>, oMissing, oMissing, oMissing, oMissing,
                  oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>Con estas lineas abrimos un archivo de Excel desde código, notaremos como se abre un proceso Excel.exe en el Administrador de Tareas, es necesario tener Excel Instalado e incluir la referencia al objeto COM: Excel Objects 11.0</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">Excel.<span style="color: #0000FF;">Worksheet</span> sheet <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>Excel.<span style="color: #0000FF;">Worksheet</span><span style="color: #000000;">&#41;</span>libro.<span style="color: #0000FF;">Sheets</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">System.<span style="color: #0000FF;">Drawing</span></span>.<span style="color: #0000FF;">Image</span> logo1 <span style="color: #008000;">=</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Drawing</span></span>.<span style="color: #0000FF;">Image</span>.<span style="color: #0000FF;">FromFile</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\ArchivoImagen.png&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
sheet.<span style="color: #0000FF;">Shapes</span>.<span style="color: #0000FF;">AddPicture</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\logoAena.png&quot;</span>, MsoTriState.<span style="color: #0000FF;">msoFalse</span>, MsoTriState.<span style="color: #0000FF;">msoCTrue</span>, 1f, 1f, logo1.<span style="color: #0000FF;">Width</span>, logo1.<span style="color: #0000FF;">Height</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>Con esas líneas seleccionamos la primera hoja del libro que hemos abierto, luego cargamos una imagen en un objeto Image y con sheet.Shapes.AddPicture añadimos la imagen en las coordenadas 1,1 (ojo, no son celdas, son coordenadas en pixeles (y de tipo float)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>12
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">libro.<span style="color: #0000FF;">SaveAs</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">@&quot;c:\temp\excel.xls&quot;</span>, Excel.<span style="color: #0000FF;">XlFileFormat</span>.<span style="color: #0000FF;">xlExcel9795</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">false</span>, <span style="color: #0600FF;">false</span>, Excel.<span style="color: #0000FF;">XlSaveAsAccessMode</span>.<span style="color: #0000FF;">xlNoChange</span>, Excel.<span style="color: #0000FF;">XlSaveConflictResolution</span>.<span style="color: #0000FF;">xlLocalSessionChanges</span>, <span style="color: #0600FF;">false</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">null</span>, <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>Con esa línea salvamos el archivo con el nombre que queramos y ya está, ya tenemos un excel con una imagen. No hace falta que el Excel esté vacío, podemos abrir un excel con contenido y poner la imagen donde queramos.</p>
<p>¿Te ha servido? Apoya este blog:<br />
<!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/insertar-imagenes-excel-c/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Capitalize string en javascript</title>
		<link>http://www.forgottenprojects.com/capitalize-string-en-javascript/</link>
		<comments>http://www.forgottenprojects.com/capitalize-string-en-javascript/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 15:32:22 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/10/09/capitalize-string-en-javascript/</guid>
		<description><![CDATA[
			
				
			
		
He encontrado por ahí una función muy útil para capitalizar cada palabra de un string en javascript, viene con autor y sitio web

1
2
3
4
5
6
7
//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/string/capitalize [rev. #1]
String.prototype.capitalize = function&#40;&#41;&#123;
    return this.replace&#40;/\w+/g, function&#40;a&#41;&#123;
        return a.charAt&#40;0&#41;.toUpperCase&#40;&#41; + a.slice&#40;1&#41;.toLowerCase&#40;&#41;;
    &#125;&#41;;
&#125;;

Uso:
capitalizada = cadena.capitalize();
Ejemplo:
a="hola [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fcapitalize-string-en-javascript%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fcapitalize-string-en-javascript%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>He encontrado por ahí una función muy útil para capitalizar cada palabra de un string en javascript, viene con autor y sitio web</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//+ Jonas Raoni Soares Silva</span>
<span style="color: #006600; font-style: italic;">//@ http://jsfromhell.com/string/capitalize [rev. #1]</span>
String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">capitalize</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\w+/g</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> a.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> a.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Uso</strong>:<br />
<code>capitalizada = cadena.capitalize();</code><br />
<strong>Ejemplo</strong>:<br />
<code>a="hola MUNDO mua hahahaha haha ha";<br />
a.capitalize();<br />
Devuelve:Hola Mundo Mua Hahahaha Haha Ha<br />
</code></p>
<p>objeto.<strong>prototype</strong>.metodo permite añadir métodos nuevos a objetos que antes no los tenian, así <strong>String.prototype.capitalize</strong> hace que se añada al objeto string un nuevo método llamado capitalize, el cual decimos que es una función con <strong>capitalize=function(){&#8230;}</strong></p>
<p><strong>/\w+/g</strong> es una expresion regular que hace que busquemos en la cadena cualquier dígito, letra o guión bajo (no espacios)(mediante \w), que haya almenos un carácter (con +) y que esté al comienzo (mediante /g).</p>
<p>Así por cada palabra llamamos a la función que hace mayúscula la primera letra y minúscula las demás y las devolvemos.</p>
<p>y si solo queremos poner en mayúsculas la primera letra de todo el string</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">capitalize2</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">charAt</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>Uso</strong>:<br />
<code>frase=cadena.capitalize2();</code><br />
<strong>Ejemplo</strong>:<br />
<code>a="hola MUNDO mua hahahaha haha ha";<br />
a.capitalize2();<br />
Devuelve:Hola mundo mua hahahaha haha ha<br />
</code></p>
<p>¿Te ha gustado? ¿Un clic aquí?<br />
<!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/capitalize-string-en-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recursos para diseño web</title>
		<link>http://www.forgottenprojects.com/recursos-para-diseno-web/</link>
		<comments>http://www.forgottenprojects.com/recursos-para-diseno-web/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:30:36 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/10/08/recursos-para-diseno-web/</guid>
		<description><![CDATA[
			
				
			
		
Para aquellos que nos gusta diseñar aplicaciones web o tenemos un blog en wordpress, vía Anieto2K encuentro un par de enlaces a 15000 iconos divididos en 7500 y otros 7500 y 70 temas para wordpress, a ver si algún día me animo y hago mi propio tema, aunque para variar ando enfrascado en varios proyectos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Frecursos-para-diseno-web%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Frecursos-para-diseno-web%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Para aquellos que nos gusta diseñar aplicaciones web o tenemos un blog en wordpress, vía <a href="http://www.anieto2k.com/">Anieto2K</a> encuentro un par de enlaces a 15000 iconos divididos <a href="http://wydstudios.com/blog/mega-coleccion-de-iconos-mas-de-7500/" target="_blank">en 7500</a> y <a href="http://wydstudios.com/blog/mega-coleccion-de-iconos-2-mas-de-7500-nuevos/" target="_blank">otros 7500</a> y <a href="http://www.1stwebdesigner.com/wordpress/70-free-and-premium-wordpress-themes/" target="_blank">70 temas para wordpress</a>, a ver si algún día me animo y hago mi propio tema, aunque para variar ando enfrascado en varios proyectos <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Y para aquellos que quieran depurar javascript pero no usan <a href="http://www.mozilla-europe.org/es/firefox/">Firefox</a> y no pueden descargarse la maravillosa e imprescindible extensión <a href="http://getfirebug.com/">Firebug</a> para depuración y desarrollo web, existe <a href="http://www.sitecrafting.com/jscommandlet/">JSComandlet</a>, para depurar javascript con javascript y es virtualmente funcional en cualquier navegador que soporte javascript (si, depurar javascript en <abbr title="IE">internet explorer</abbr>)</p>
<p><a href="http://www.anieto2k.com/">Anieto2k</a> es un blog muy interesante para desarrolladores web ya que se tratan multitud de temas sobre javascript, CSS, Wordpress entre otras aplicaciones interesantes destinadas a la web.</p>
<p><!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/recursos-para-diseno-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social jBox, seleccion democrática de canciones</title>
		<link>http://www.forgottenprojects.com/social-jbox-seleccion-democratica-de-canciones/</link>
		<comments>http://www.forgottenprojects.com/social-jbox-seleccion-democratica-de-canciones/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 19:00:01 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[La nueva vida]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/10/02/social-jbox-seleccion-democratica-de-canciones/</guid>
		<description><![CDATA[
			
				
			
		
Después de la Campus Party en la que participé con un juego programado entre 3 en 72 horas, me animé en aquello de los concursos de desarrollo y encontré un concurso de OpenMovilForum que también hacían acto de presencia y un concurso en la Campus.
Este concurso consistía en hacer un mashup con varias librerías de [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fsocial-jbox-seleccion-democratica-de-canciones%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fsocial-jbox-seleccion-democratica-de-canciones%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Después de la Campus Party en la que participé con un juego programado entre 3 en 72 horas, me animé en aquello de los concursos de desarrollo y encontré un concurso de <a href="http://open.movilforum.com">OpenMovilForum </a>que también hacían acto de presencia y un concurso en la Campus.</p>
<p>Este concurso consistía en hacer un mashup con varias librerías de movistar que ellos proporcionaban y orientadas a servicios de terminales móviles tales como Envio/Recepción de SMS y MMS, Localización geográfica, videollamada, CopiAgenda, etc.</p>
<p>Me animé a participar, mayormente motivado por los suculentos premios de 6000€, y dos de 2000€ que otorgaban a los ganadores y que veía asequible de obtener al menos el tercer puesto (y que no fue así).</p>
<p>Para ello diseñé una aplicación de escritorio orientada a Bares y Pubs. Los usuarios envían un SMS a un número de teléfono proporcionado por el pub para hacer una de las dos siguientes cosas:</p>
<p>Una de ellas consiste en enviar un mensaje de texto con una palabra clave y ese mensaje es mostrado cada cierto tiempo en pantallas y monitores instalados en el local, de una manera similar a los mensajes de texto que se muestran en la parte baja de la pantalla del televisor durante los programas de debate. Dispone de una lista de palabras para filtrar los SMS con contenido ofensivo.</p>
<p>Otra de las opciones es poder elegir de forma democrática las canciones que suenan en el local al más puro estilo de jukebox (caja de música). Para ello hay listas publicadas en el local donde se muestra un código y una canción y los asistentes envían una SMS con la palabra clave seguida del código de la canción para agregarla a la lista de reproducción que está sonando en el local.</p>
<p>Para motivar a los asistentes a enviar estos SMS, se les premia con cupones de descuento o 2&#215;1 o lo que se desee al enviar determinado número de SMS, que se les envía al móvil con el código del cupón. La idea inicial era enviar un MMS con el logo del local y el código pero por falta de tiempo solo se envía un SMS con el código.</p>
<p>Empleé SqLite como motor de base de datos por ser ligero, sencillo y no requerir instalación de ningúna cosa.<br />
Para proyectar los SMS se usa Adobe AIR (como el Flash pero con acceso a base de datos) que lee los mensajes del fichero de sqlite y los muestra con fundidos en negro en una ventana.<br />
Las librerías que originalmente estaban en PHP, Ruby y C++ se pasaron a C# (.NET Framework 2.0)<br />
Se usa OpenPOP para acceder a una cuenta de correo donde llegan los SMS</p>
<p>Como digo no gané pero aprendi unas cuantas cosas interesantes y la aplicación funciona y es código libre bajo licencia Apache 2.0.</p>
<p>El wiki de proyecto se encuentra <a href="http://open.movilforum.com/wiki/index.php/Social_jBox">aquí</a><br />
Los participantes <a href="http://open.movilforum.com/concurso/3/proyectos">aquí</a><br />
Los ganadores <a href="http://open.movilforum.com/concurso/3/ganadores">aquí</a><br />
El código y el instalador del proyecto <a href="http://code.google.com/p/social-jbox/downloads/list">aquí</a></p>
<p>De todos modos, si algún propietario está interesado en el proyecto, que contacte conmigo y veremos la forma de comercializarlo y sacarle partido así como mejorarlo y adaptarlo <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Un clic aqui?<br />
<!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/social-jbox-seleccion-democratica-de-canciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Select Distinct en un DataTable o DataSet</title>
		<link>http://www.forgottenprojects.com/select-distinct-en-un-datatabledataset/</link>
		<comments>http://www.forgottenprojects.com/select-distinct-en-un-datatabledataset/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 09:05:08 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/09/22/select-distinct-en-un-datatabledataset/</guid>
		<description><![CDATA[
			
				
			
		
(Este post es solo para programadores)
Buenas, el otro día andaba buscando como hacer un select distinct sobre un data table de .NET y resulta que con la función select del DataTable no se puede hacer un distinct para obtener las filas que son distintas dada una columna.
Estuve buscando en internet y encontré un par de [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fselect-distinct-en-un-datatabledataset%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fselect-distinct-en-un-datatabledataset%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>(Este post es solo para programadores)</p>
<p>Buenas, el otro día andaba buscando como hacer un select distinct sobre un data table de .NET y resulta que con la función select del DataTable no se puede hacer un distinct para obtener las filas que son distintas dada una columna.</p>
<p>Estuve buscando en internet y encontré un par de soluciones pero no me servían porque devolvían los resultados en una sola columna con las filas distintas(en concreto <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;326176#1">esta de Microsoft</a> y <a href="http://weblogs.asp.net/eporter/archive/2005/02/10/370548.aspx">esta</a>).</p>
<p>Así que como necesitaba algo que se pareciese más a un select distinct de SQL me hice mi propia función que es la siguiente:</p>
<p>C#:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> DataSetHelper
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> DataTable selectDisctinct<span style="color: #000000;">&#40;</span>DataTable dt, <span style="color: #FF0000;">string</span> columnName<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">try</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>columnName <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">||</span> columnName.<span style="color: #0000FF;">Length</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
                       <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> ArgumentNullException<span style="color: #000000;">&#40;</span>columnName, <span style="color: #666666;">&quot;El parámetro no puede ser nulo&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                DataTable distintos <span style="color: #008000;">=</span> dt.<span style="color: #0000FF;">DefaultView</span>.<span style="color: #0000FF;">ToTable</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">true</span>, columnName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                DataTable aux <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> DataTable<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>DataColumn dc <span style="color: #0600FF;">in</span> dt.<span style="color: #0000FF;">Columns</span><span style="color: #000000;">&#41;</span>
                    aux.<span style="color: #0000FF;">Columns</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> DataColumn<span style="color: #000000;">&#40;</span>dc.<span style="color: #0000FF;">Caption</span>,dc.<span style="color: #0000FF;">DataType</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>DataRow dr <span style="color: #0600FF;">in</span> distintos.<span style="color: #0000FF;">Rows</span><span style="color: #000000;">&#41;</span>
                <span style="color: #000000;">&#123;</span>
                    aux.<span style="color: #0000FF;">ImportRow</span><span style="color: #000000;">&#40;</span>dt.<span style="color: #0000FF;">Select</span><span style="color: #000000;">&#40;</span>columnName <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; = '&quot;</span> <span style="color: #008000;">+</span> dr<span style="color: #000000;">&#91;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;'&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #000000;">&#125;</span>
                <span style="color: #0600FF;">return</span> aux<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #000000;">&#40;</span>ex<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>es necesario incluir el namespace System.Data:<br />
<code>using System.Data;</code></p>
<p>Espero que sea útil.<br />
Referencias:<br />
<a href="http://weblogs.asp.net/eporter/archive/2005/02/10/370548.aspx">http://weblogs.asp.net/eporter/archive/2005/02/10/370548.aspx</a><br />
<a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;326176#1">http://support.microsoft.com/default.aspx?scid=kb;en-us;326176#1</a></p>
<p><!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/select-distinct-en-un-datatabledataset/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Wiibrew, juegos caseros en wii</title>
		<link>http://www.forgottenprojects.com/wiibrew-juegos-caseros-en-wii/</link>
		<comments>http://www.forgottenprojects.com/wiibrew-juegos-caseros-en-wii/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 17:33:02 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Freaks]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/08/27/wiibrew-juegos-caseros-en-wii/</guid>
		<description><![CDATA[
			
				
			
		

Ayer instalé en mi Wii el canal hombrew para wii mediante el Twilight Hack.
Vamos por partes.
El homebrew son programas caseros desarrollados por la comunidad, y generalmente gratuitos. Está de moda el desarrollo de este tipo de juegos y programas para las consolas de última generación. Tanto que XBOX360 cuenta con una comunidad oficial para comercializar [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fwiibrew-juegos-caseros-en-wii%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fwiibrew-juegos-caseros-en-wii%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><img src='http://www.forgottenprojects.com/wp-content/uploads/2008/08/canal-homebrew-logo.jpg' alt='canal homebrew logo' /><br />
Ayer instalé en mi Wii el canal hombrew para wii mediante el <a href="http://wiibrew.org/wiki/Twilight_Hack/es">Twilight Hack</a>.</p>
<p>Vamos por partes.</p>
<p>El <a href="http://es.wikipedia.org/wiki/Homebrew">homebrew </a>son programas caseros desarrollados por la comunidad, y generalmente gratuitos. Está de moda el desarrollo de este tipo de juegos y programas para las consolas de última generación. Tanto que XBOX360 cuenta con una comunidad oficial para comercializar los juegos creados con XNA pero este no es el tema que nos concierne.</p>
<p>Empecé a conocer el mundo de la scene (comunidad de programadores que se dedican a extraer el máximo partido a todo el hardware que pillan por mano) por la PSP, en la que haciendo un downgrade del software de la consola se podía explotar una vulnerabilidad para ejecutar código casero. Pese a que la primera utilidad que se nos ocurre es el poder jugar a juegos pirateados, esta funcionalidad encierra mucho, muchísimo más. Es la comunidad la que se dedica a hacer juegos amateur para PSP, a crear nuevas aplicaciones para PSP, tales como clientes/servidores de ftp (para escribir en la memoy card sin tener que conectar la consola por usb o sacar la tarjeta), servidores web, reproductores de vídeo de cualquier formato, agendas, calendarios, mensajería instantánea&#8230;. En definitiva, hay miles de aplicaciones que pueden hacer que una consola diseñada para jugar y navegar por internet, se convierta en un miniordenador con multitud de posibilidades que no solo no son soportadas por el fabricante, ni éste intenta potenciarlo, sino todo lo contrario, se persigue. Persiguen a gente que se dedica a mejorar su aparato de forma no oficial sólo porque no pueden sacar dinero de ello, pero que podrían sacarlo si lo fomentasen, vendiendo más consolas, o llevandose una parte de beneficios de venta de aplicaciones, o de otross medios, pero como siempre, se niegan a cambiar su anticuado modelo de negocio.</p>
<p>A lo que iba, ayer abrí mi consola a un nuevo abanico de posibilidades al instalar el <a href="http://wiibrew.org/">canal homebrew de wii,</a> que permite acceder a una lista por internet donde descargar e instalar de una forma ultrasencilla, aplicaciones caseras tales como juegos, emuladores, herramientas, demos, etc. Es tal el afán de la comunidad por exprimir la consola que incluso han sacado un programa para reproducir películas en DVD, que increiblemente el software oficial no permite, y gracias a ellos sí. Y no solo eso, hay una versión del reproductor libre MPlayer, que permite a la consola reproducir cualquier formato de vídeo, incluso por streaming, en la consola. Impensable para una Wii recién comprada. Así que lo próximo serán dos cosas:<br />
1. Montarme un servidor de medios en mi portatil para acceder desde la Wii (la PS3 lo hace de serie)<br />
2. Instalarme el ScummVM para Wii y probar el Monkey Island <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Me parece increíble esta gente, que se dedica a encontrar fallos de seguridad con los que luego trapichear y que dan pie a todas estas posibilidades para los usuarios de estos dispositivos. Un bravo por ellos y un servidor que se muere de envidia y que le gustaría saber hacer todas esas cosas. Esta gente es capaz de modificar una partida salvada de un juego para hacer un buffer overflow y ejecutar código casero, y que parece ser la forma más común de entrar, ya que en PSP se hizo para el GTA y en Wii se hace para el Zelda. Una vez se tiene acceso al núcleo, y por ingeniería inversa, averiguan cómo explotar toda la funcionalidad. Sencillamente increible, y ya no hablemos de los que desmontan la consola y averiguan cómo saltarse la protección de los juegos&#8230;.</p>
<p>Por qué no enseñarán estas cosas en la universidad <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Enlaces:<br />
<a href="http://lifehacker.com/400581/hack-your-wii-for-homebrew-apps-and-dvd-playback">Tutorial en inglés para instalarlo para torpes</a> (con instalador para windows y todo)<br />
<a href="http://www.elotrolado.net/hilo_wii-brew-sd-installer-para-windows-homebrew-para-torpes-3-3_1044132">Hilo </a>en ElOtroLado (también para torpes)<br />
<a href="http://www.google.com">Google </a>buscando twilight hack, wii brew, wii homebrew channel para los mas hardcore</p>
<p><!--adsense--></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/wiibrew-juegos-caseros-en-wii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Libros sobre SDL</title>
		<link>http://www.forgottenprojects.com/libros-sobre-sdl/</link>
		<comments>http://www.forgottenprojects.com/libros-sobre-sdl/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 12:39:46 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/03/12/libros-sobre-sdl/</guid>
		<description><![CDATA[
			
				
			
		
Buenas!
He encontrado un par de libros muy buenos sobre el desarrollo de juegos en SDL.
El primero es de Alberto García Serrano y tiene licencia CC.
Lo podéis bajar de aquí, bien de la web de su autor. Son menos de 2 Mb y unas 155 páginas. Lo conozco desde hace bastante y lo he usado y [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Flibros-sobre-sdl%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Flibros-sobre-sdl%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Buenas!</p>
<p>He encontrado un par de libros muy buenos sobre el desarrollo de juegos en SDL.</p>
<p>El primero es de Alberto García Serrano y tiene licencia CC.</p>
<p>Lo podéis bajar de <a href="http://rapidshare.com/files/98953591/_ebook_Programacion_de_videojuegos_con_SDL.pdf">aquí,</a> bien de la <a href="http://www.agserrano.com/publi.html">web </a>de su autor. Son menos de 2 Mb y unas 155 páginas. Lo conozco desde hace bastante y lo he usado y está muy bien.</p>
<p>El segundo es de Antonio García Alba y creo que la licencia también es CC.</p>
<p>Es supercompleto, unas 700 páginas y pesa 14 Mb. Incluye mucho código de ejemplo y lo he subido <a href="http://rapidshare.com/files/98947550/TutorialSDL-30012008.pdf">aquí</a> porque no se cual es la web del autor.</p>
<p>A ver si voy practicando con la SDL otra vez para el concurso de programación de videojuegos de la CAMPUS PARTY de este año a ver si puedo ir <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/libros-sobre-sdl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[40.5348072453261, -3.6260032653808594]">40.5348072453261 -3.6260032653808594</georss:point>
	</item>
		<item>
		<title>Concurso INCREA</title>
		<link>http://www.forgottenprojects.com/concurso-increa/</link>
		<comments>http://www.forgottenprojects.com/concurso-increa/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 23:40:47 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[fotolog]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2008/02/12/concurso-increa/</guid>
		<description><![CDATA[
			
				
			
		
En diciembre me presenté a un concurso sobre proyectos innovadores que había en mi universidad organizado por la cátedra INCREA. Me presenté con el proyecto de fin de carrera con la ayuda de mi tutor Raúl Montoliu que me aconsejó cómo hacer el informe. Para presentarse, aparte de un informe y una ficha, hacia falta [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fconcurso-increa%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fconcurso-increa%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>En diciembre me presenté a un concurso sobre proyectos innovadores que había en mi universidad organizado por la cátedra INCREA. Me presenté con el proyecto de fin de carrera con la ayuda de mi tutor <a href="http://www.raulmontoliu.com/">Raúl Montoliu</a> que me aconsejó cómo hacer el informe. Para presentarse, aparte de un informe y una ficha, hacia falta un cartel tamaño descomunal (A2) para colgar allí en la UJI. </p>
<p>El otro día me mandaron un correo comunicándome que los carteles iban a ser expuestos en breve en la universidad pero no tengo ni idea de dónde ni cuando, ni cuando se resuelve el concurso, mientras tanto, os dejo con el cartel que resume <a href="http://www.forgottenprojects.com/2007/09/05/proyecto-de-fin-de-carrera/">mi proyecto</a> para aquellos que aun no han entendido de que va o no he sabido explicarselo <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href='http://www.forgottenprojects.com/wp-content/uploads/2008/02/cartel-copia.jpg' title='cartel-copia.png'><img src="http://www.forgottenprojects.com/wp-content/uploads/2008/02/cartel-copia.png" width=80% height=80% /></a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/concurso-increa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple Youtube Video Watcher Addin for MSN Messenger</title>
		<link>http://www.forgottenprojects.com/simple-youtube-video-watcher-addin-for-msn-messenger/</link>
		<comments>http://www.forgottenprojects.com/simple-youtube-video-watcher-addin-for-msn-messenger/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 23:12:20 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2007/12/27/simple-youtube-video-watcher-addin-for-msn-messenger/</guid>
		<description><![CDATA[
			
				
			
		
Hola!
En una estupenda tarde de aburrimiento en la que no sabía qué hacer, encontré por mi mesa unos papeles sobre el desarrollo de addins para MSN Live Messenger, lo que significa que con un poco de programación en .Net se puede ampliar la funcionalidad del cliente de mensajería de Microsoft (no mucho, al menos al [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fsimple-youtube-video-watcher-addin-for-msn-messenger%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fsimple-youtube-video-watcher-addin-for-msn-messenger%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Hola!</p>
<p>En una estupenda tarde de aburrimiento en la que no sabía qué hacer, encontré por mi mesa unos papeles sobre el desarrollo de addins para MSN Live Messenger, lo que significa que con un poco de programación en .Net se puede ampliar la funcionalidad del cliente de mensajería de Microsoft (no mucho, al menos al principio, está muy restringido, pero se puede apañar para quitar algunas limitaciones). Es por ello, que basándome en un plugin para el cliente Emesene de linux el cual permite embeber vídeos de youtube en la propia conversación, he decidido crear un plugin similar para el cliente oficial, que si bien no los incrusta en la conversación (lo cual intentaré hacer mas adelante) abre cada vídeo en una ventana externa para poder verlo sin tener que abrir el navegador y entrar en la página web.</p>
<p>Para instalar el addin hay que seguir los siguientes pasos:<br />
1. <a href="http://www.forgottenprojects.com/ferdy182/Simple%20Youtube%20Video%20Watcher%20Setup.msi">Descargar</a> el instalador. (Requiere .Net Framework 2.0 que se puede bajar <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=es&#038;FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5">aquí</a> y flash instalado en internet explorer)<br />
2. Instalar.<br />
3. Si tenias el MSN abierto, cierralo del todo y vuelve a abrirlo. Si lo tenias cerrado, simplemente ábrelo de nuevo.<br />
4. En el MSN Live Messenger, ve a Herramientas > Opciones. Abajo aparecerá la ficha &#8220;Accesorios&#8221;. Pincha<br />
5. Agrega el archivo .dll que se encuentra en la carpeta donde se ha instalado el programa (por defecto en c:/Archivos de Programa/Simple Youtube Video Watcher)<br />
6. En la ficha de contactos, haz clic en tu nick, y debajo de los estados que puedes poner, aparece &#8220;Activar plugin&#8221;, activalo.</p>
<p>Ahora cada vez que recibas un enlace a un vídeo de youtube, se abrirá una ventana con el vídeo.</p>
<p>También he subido el código fuente, para que luego digan que los que desarrollamos en Windows no liberamos el código, está <a href="http://www.forgottenprojects.com/ferdy182/MSNLiveAdd.rar">aquí</a>.</p>
<p>Notas sobre el desarrollo (para desarrolladores):<br />
Tutorial sobre el desarrollo de addins para Messenger <a href="http://www.messengeradictos.com/13/474/documentos.php">aquí</a> y <a href="http://community.bartdesmet.net/blogs/bart/archive/2006/09/17/4431.aspx">aquí</a><br />
El principal problema de los addins para Messenger es que se ejecutan en un entorno controlado (CAS, code access security) que no permite leer/escribir ficheros, acceder a internet, etc. pero para poder hacerlo, rebuscando por ahí, encontre <a href="http://cerocoma.blogspot.com/2007/10/addins-para-msn-messenger.html">aquí</a> la solución, la cual consiste en firmar digitalmente el ensamblado (Project Properties > Signing > Sign) y añadirlo a la caché de ensamblados global (GAC) escribiendo:<br />
<code>"C:\Archivos de programa\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i  "C:\Archivos de programa\MSN Messenger\NombreDelAddin.AddIn.dll"</code></p>
<p>Con esto podemos hacer cosas interesantes.</p>
<p>Luego para el deployment, se crea un setup project y se añade la carpeta especial Global Assembly Cache Folder donde pondremos la dll del plugin para que el instalador la coloque correctamente en c:/Windows/assembly y funcione completamente.</p>
<p><img src="http://www.weblogssl.com/images/meneame.png" alt="icono meneame.net" /><a href="http://www.meneame.net/submit.php?url=http://www.forgottenprojects.com/2007/12/27/simple-youtube-video-watcher-addin-for-msn-messenger/">Comparte</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/simple-youtube-video-watcher-addin-for-msn-messenger/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Proyecto de fin de carrera</title>
		<link>http://www.forgottenprojects.com/proyecto-de-fin-de-carrera/</link>
		<comments>http://www.forgottenprojects.com/proyecto-de-fin-de-carrera/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 14:26:23 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2007/09/05/proyecto-de-fin-de-carrera/</guid>
		<description><![CDATA[Resumen de mi proyecto de fin de carrera basado en vision artificial.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fproyecto-de-fin-de-carrera%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fproyecto-de-fin-de-carrera%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Pese a que no es la versión definitiva, he colgado en <a href="http://stage6.divx.com/">stage6</a> un vídeo demo de mi proyecto.</p>
<p>Consiste en un sistema de visión por computador, que consta de una webcam normal y corriente, una plantilla con forma de media pista de baloncesto y unas fichas de colores. Una vez se calibra la cámara para obtener una imagen perpendicular de la pista, en la pantalla del ordenador se observa un entorno virtual donde unos muñecos en 3 dimensiones toman posiciones sobre una pista de basket virtual correspondiendo con las posiciones de las fichas de colores sobre la plantilla. De este modo, moviendo las fichas de colores con la mano, conseguimos que los muñecos de la pantalla se muevan por la pista pudiendo así plantear estrategias como si de una pizarra se tratase, o analizar jugadas.</p>
<p>En la versión final, hay muñecos de dos colores para diferenciar ambos equipos, una de las fichas hace de pelota que va dando botes por la pantalla y hay una canasta donde debería estar.</p>
<p>La librería de visión se llama OpenCV, la de gráficos es Irrlicht, está programado en C++ con Visual Studio, la canasta (que en el video no estaba aún) la hice con 3ds Max 9 y las texturas con Photoshop CS3.</p>
<p>Recomiendo verlo a pantalla completa activando el modo HD. Por desgracia no es una versión final.</p>
<p><object width="445" height="364"><param name="movie" value="http://www.youtube.com/v/moRkliKaT5o&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/moRkliKaT5o&#038;hl=es_ES&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999&#038;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"></embed></object></p>
<p>Actualizado: Al final saqué un 9! Si alguien quiere la memoria del proyecto que me lo diga.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/proyecto-de-fin-de-carrera/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>OpenGL 3</title>
		<link>http://www.forgottenprojects.com/opengl-3/</link>
		<comments>http://www.forgottenprojects.com/opengl-3/#comments</comments>
		<pubDate>Sat, 18 Aug 2007 18:58:20 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Graficos]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2007/08/18/opengl-3/</guid>
		<description><![CDATA[
			
				
			
		
En el siggraph se ha anunciado por fin una versión nueva de Opengl después de que estuviese peligrando su desarrollo. Esta nueva versión tendrá como novedad el fin de estructuras como glBegin/glEnd y se orientará mas al uso de objetos como serán los objetos buffer, shader, texture filter, vertex array, image, format, rasterization, operaciones por-sample, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fopengl-3%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fopengl-3%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>En el siggraph se ha anunciado por fin una versión nueva de Opengl después de que estuviese peligrando su desarrollo. Esta nueva versión tendrá como novedad el fin de estructuras como glBegin/glEnd y se orientará mas al uso de objetos como serán los objetos buffer, shader, texture filter, vertex array, image, format, rasterization, operaciones por-sample, framebuffer entre otras. Mas info <a href="http://www.khronos.org/developers/library/2007_08_siggraph/siggraph%202007%20bof-gl3%20overview.pdf">aqui </a></p>
<p>A ver si cuando salga le echo un ojo y de paso vuelvo a meterle mano que lo tengo un poco olvidado!</p>
<p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/opengl-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SDL joystick + Playstation DualShock</title>
		<link>http://www.forgottenprojects.com/sdl-joystick-playstation-dualshock/</link>
		<comments>http://www.forgottenprojects.com/sdl-joystick-playstation-dualshock/#comments</comments>
		<pubDate>Sat, 18 Aug 2007 11:46:39 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Graficos]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2007/08/18/sdl-joystick-playstation-dualshock/</guid>
		<description><![CDATA[
			
				
			
		
Pues me encontraba yo haciendo una chorradita con la libreria SDL que va genial para hacer juegos con gráficos en 2D o en 3D si le añadimos OpenGL y quería usar un mando de la play. Tengo un adaptador de Play a USB que se llama Super Dual Box Pro, fabricado por MayFlash con el [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fsdl-joystick-playstation-dualshock%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fsdl-joystick-playstation-dualshock%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Pues me encontraba yo haciendo una chorradita con la libreria SDL que va genial para hacer juegos con gráficos en 2D o en 3D si le añadimos OpenGL y quería usar un mando de la play. Tengo un adaptador de Play a USB que se llama Super Dual Box Pro, fabricado por MayFlash con el que lo tengo conectado al PC y que podéis conseguir en cualquier tienda de videojuegos. El caso es que con el último driver para vista (el de agosto del 2007 que por lo visto salió 3 días antes de que me diese por probarlo) no detecta la cruceta y la segunda palanca la mapea como una cosa rara así que para usarlo recomiendo el driver anterior que aunque no pone que soporte vista, a mi no me hace falta (<a href="http://www.mayflash.com/Download/Super5%20pro.EXE">http://www.mayflash.com/Download/Super5%20pro.EXE</a>).</p>
<p>Bueno, usando las funciones de la SDL para obtener información del joystick y con el driver más o menos bien configurado, el perfil del DualShock es el siguiente:</p>
<p>5 Axes (5 ejes aunque las dos setas solo deberían ser 4)<br />1 Hat (la cruceta)<br />0 Balls (ni idea)<br />16 Buttons (16 botones, que con el código que hay al final corresponde con los siguientes valores)</p>
<p>triángulo = 0<br />O = 1<br />X = 2<br />Cuadrado = 3<br />L2 = 4<br />R2 = 5<br />L1 = 6<br />L2 = 7<br />Start = 8<br />Select = 9<br />L3 = 10<br />R3 = 11<br />Pad Arriba = 12<br />Pad Derecha&nbsp; = 13<br />Pad Abajo = 14<br />Pad Izquierda = 15</p>
<p>Estas correspondencias se pueden cambiar desde la pantalla de configuración del driver.</p>
<p>Código que muestra los botones:</p>
<p><code>while(!done){&nbsp; &nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; while(SDL_PollEvent(&amp;ev)){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(ev.type == SDL_JOYBUTTONDOWN){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; (int)ev.jbutton.button &lt;&lt; endl;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(ev.type == SDL_KEYDOWN){<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; done=true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}</code>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; </p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/sdl%20joystick%20playstation%20dualshock" rel="tag">sdl joystick playstation dualshock</a></p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/sdl-joystick-playstation-dualshock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Competición de robótica en periódicos</title>
		<link>http://www.forgottenprojects.com/competicion-de-robotica-en-periodicos/</link>
		<comments>http://www.forgottenprojects.com/competicion-de-robotica-en-periodicos/#comments</comments>
		<pubDate>Thu, 24 May 2007 22:36:15 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Tecnología]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2007/05/24/competicion-de-robotica-en-periodicos/</guid>
		<description><![CDATA[
			
				
			
		
Pues si, como era de esperar, también salió la supernoticia de la competición en los periódicos de la zona, el levante de castellón y el ABC de la comunidad valenciana, se ve que no hay noticias más importantes que salir nosotros en la portada jajaja, esto de la robótica triunfa, debería dedicarme a ello en [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fcompeticion-de-robotica-en-periodicos%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fcompeticion-de-robotica-en-periodicos%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Pues si, como era de esperar, también salió la supernoticia de la competición en los periódicos de la zona, el levante de castellón y el ABC de la comunidad valenciana, se ve que no hay noticias más importantes que salir nosotros en la portada jajaja, esto de la robótica triunfa, debería dedicarme a ello en el futuro&#8230;. espera&#8230; esto ya lo he dicho antes&#8230;.<br />
Dejo los dos enlaces a los PDFs, ojo que uno tiene dos páginas, y como no, salgo yo en las fotos jajaja, ¿que pasa? ¿Que no había más gente? Si éramos un montón&#8230;</p>
<p><a href="http://www.forgottenprojects.com/ferdy182/abc.pdf">ABC de la comunidad valenciana</a><br />
<a href="http://www.forgottenprojects.com/ferdy182/levante.pdf">Levante de Castellón</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/competicion-de-robotica-en-periodicos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Robonova vs. The Mighty CardBoard Box</title>
		<link>http://www.forgottenprojects.com/rovonova-vs-the-mighty-cardboard-box/</link>
		<comments>http://www.forgottenprojects.com/rovonova-vs-the-mighty-cardboard-box/#comments</comments>
		<pubDate>Tue, 22 May 2007 22:14:39 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2007/05/22/rovonova-vs-the-mighty-cardboard-box/</guid>
		<description><![CDATA[
			
				
			
		

Este es un montaje de video que he hecho con motivo de las prácticas de robótica de la uni con el robot Robonova-I, el trabajo consistía primero en montar el robot con las piezas del kit y luego programarlo en roboBASIC para que busque la caja de cartón y la derribe. El vídeo son trozos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Frovonova-vs-the-mighty-cardboard-box%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Frovonova-vs-the-mighty-cardboard-box%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/I7p3MtGdCuw"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/I7p3MtGdCuw" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object><br />
Este es un montaje de video que he hecho con motivo de las prácticas de robótica de la uni con el robot Robonova-I, el trabajo consistía primero en montar el robot con las piezas del kit y luego programarlo en roboBASIC para que busque la caja de cartón y la derribe. El vídeo son trozos de las pruebas que íbamos haciendo hasta conseguir que tirase la caja en al menos el 90% de las veces.<br />
Al final en la competición contra la caja lo hicimos bien en el modo de frente y de espaldas, en ambos a la primera y sin caer, cosa que otros equipos no hicieron y aun así puntuaron mejor por su cara bonita&#8230;<br />
Veremos mañana en la competición de sumo Robot vs. Robot.</p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/robotics%20robonova" rel="tag">robotics robonova</a></p>
<p class="poweredbyperformancing">Powered by <a href="http://scribefire.com/">ScribeFire</a>.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/rovonova-vs-the-mighty-cardboard-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KMLparser</title>
		<link>http://www.forgottenprojects.com/kmlparser/</link>
		<comments>http://www.forgottenprojects.com/kmlparser/#comments</comments>
		<pubDate>Fri, 09 Feb 2007 21:47:28 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2007/02/09/kmlparser/</guid>
		<description><![CDATA[
			
				
			
		
(This post is in two languages / Este post está en dos idiomas)
Español
Estos días que he estado trabajando en una aplicación para Google Maps, necesitaba poder cargar un track desde KML con una ruta y waypoints con descripciones y fotos. En mapki encontré un fragmento de código de JavaScript que cargaba solo placemarks pero me [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fkmlparser%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fkmlparser%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>(<em>This post is in two languages / Este post está en dos idiomas)</em></p>
<p>Español</p>
<p>Estos días que he estado trabajando en una aplicación para Google Maps, necesitaba poder cargar un track desde KML con una ruta y waypoints con descripciones y fotos. En <a target="_blank" href="http://mapki.com/index.php?title=Main_Page">mapki</a> encontré un fragmento de código de JavaScript que cargaba solo placemarks pero me sirvió como base para desarrollar mi propio parser cargándolo asíncronamente con AJAX y usando funciones de DOM para obtener los nodos que me interesaban. El resultado es el siguiente&#8230;</p>
<p><em>Descargar: <a href="http://www.ambiental-hitos.com/KMLparser.js">KMLparser.js </a></em></p>
<p>English:</p>
<p>These days I was working on an application using Google Maps, I needed to load tracks from KML files which should have a track and some waypoints with descriptions and photos. At mapki I found a fragment of JavaScript code that loads just placemarks but I used it to develop mi own kml parser that loads the file asynchronously with AJAX and uses DOM functions in order to obtain the nodes I needed.<br />
<em>Download: <a href="http://www.ambiental-hitos.com/KMLparser.js">KMLparser.js</a> </em></p>
<p><strong><em>Updated</em></strong>: He arreglado el enlace que estaba mal. The link has been fixed.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/kmlparser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>University Tour 2007</title>
		<link>http://www.forgottenprojects.com/university-tour-2007-2/</link>
		<comments>http://www.forgottenprojects.com/university-tour-2007-2/#comments</comments>
		<pubDate>Sun, 17 Dec 2006 23:54:46 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.forgottenprojects.com/2006/12/18/university-tour-2007-2/</guid>
		<description><![CDATA[
			
				
			
		
Este jueves pasó por mi universidad el Microsoft University Tour 2007, en el que nos explicaron las nuevas tecnologías de reciente aparición en la plataforma de desarrollo .NET Framework, entre ellas estaba el nuevo soporte de ASP.NET 2.0 para AJAX (ATLAS como lo llamaban ellos), las librerias XNA para el desarrollo simplificado de juegos, programación [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Funiversity-tour-2007-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Funiversity-tour-2007-2%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.microsoft.com/spanish/msdn/estudiantes/eventos/universitytour.mspx"><img width="602" height="73" src="http://www.microsoft.com/spanish/msdn/estudiantes/images/secciones/university_tour.jpg" /></a>Este jueves pasó por mi universidad el Microsoft University Tour 2007, en el que nos explicaron las nuevas tecnologías de reciente aparición en la plataforma de desarrollo .NET Framework, entre ellas estaba el nuevo soporte de ASP.NET 2.0 para AJAX (ATLAS como lo llamaban ellos), las librerias XNA para el desarrollo simplificado de juegos, programación de smartphones y PDAs (lo mismo de todos los años pero cambiando la versión de windows mobile) y el nuevo Windows Presentation Foundation (WPF pa&#8217; abreviar) que es la nueva capa de presentación que realmente me ha impresionado. Cabe destacar el uso masivo que van a hacer de XAML, un subconjunto del XML orientado a las aplicaciones, es decir, ahora los windows forms estaran en un archivo xaml y el código en otro, similar a lo que se hacía con ASP.NET.<span id="more-54"></span><br />
<img align="left" src="http://blogs.developpeur.org/photos/tom/images/22391/original.aspx" /><br />
Ahora todos los componentes pueden ser a la vez contenedores, por lo que podemos tener por ejemplo, una foto del gato lima, dentro de un listbox, que está dentro de un botón, que a su vez forma parte de un video&#8230; mismo&#8230; y además los componentes son vectoriales por lo que se pueden escalar y rotar sin perder calidad, les puedes poner estilos, hacer un boton pez animado que cambie de color al hacer clic&#8230;por ejemplo&#8230; y muchas cosillas más, aunque lo que mas me ha molado es que puedes tener cosas en 3d dentro de los forms, como por ejemplo, para pasar de página, sería una página en 3d la que se mueve, o un estuche de cds al que le pones las caratulas, or whatever&#8230;aunque respecto a esto, sigo pensando que muy práctico no es, solo es bonito, ya que un pc viejo no lo va a mover y es lo que normalmente hay en sitios donde sólo se manejan datos.<img align="right" alt="Gato lima" title="Gato lima" src="http://gallery.mithril.ca/albums/forum_pics/limecat.thumb.jpg" /></p>
<p>Otro de los puntos fuertes fue la demo de XNA, aunque en versión beta, como concepto no dejaba de ser interesante. Uno tiene unos game components, que no son mas que controles (para variar, aqui todo es arrastrar controles&#8230;) y por ejemplo, tienes un game component que maneja terrenos, otro q maneja la camara y otro q hace q algo de vueltas, pues coges y los combinas y tienes un terreno q se ve por la cámara dando vueltas. Yo pienso que algo así puede dar mucho jugo cuando la gente haga sus propios componente y los cuelgue por internet para bajarselos y usarlos, puede estar bien. Además tendrán soporte para XBOX360 lo que significa que muy probablemente las demás consolas se abran y permitan desarrollo Indie (o amateur). <img align="left" alt="xna logo" title="xna logo" src="http://files.xboxic.com/corporate/microsoft/ms-xna.jpg" /></p>
<p class="poweredbyperformancing">powered by <a href="http://performancing.com/firefox">performancing firefox</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/university-tour-2007-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UJI Racer</title>
		<link>http://www.forgottenprojects.com/uji_racer/</link>
		<comments>http://www.forgottenprojects.com/uji_racer/#comments</comments>
		<pubDate>Wed, 03 May 2006 15:36:51 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Graficos]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[
			
				
			
		

Hola, hoy he decidido subir el juego de carreras que hicimos Kike, Carlos y yo para la asignatura de informática gráfica 2 para la universidad, el trabajo consistía en hacer un pequeño juego en OpenGL empleando un minimotor ya creado que venia en el libro de OpenGL Game Programming que se llama simpengine y trae [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fuji_racer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fuji_racer%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><img width="420" height="300" src="http://www.forgottenprojects.com/media/mrt_SP32-20060503-163111.png" /><br />
Hola, hoy he decidido subir el juego de carreras que hicimos Kike, Carlos y yo para la asignatura de informática gráfica 2 para la universidad, el trabajo consistía en hacer un pequeño juego en OpenGL empleando un minimotor ya creado que venia en el libro de <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0761533303?v=glance">OpenGL Game Programming</a> que se llama simpengine y trae lo básico, crear una ventana, clases para los objetos y vectores tridimensionales, soporte para modelos md2, una clase para texturas (bitmaps cargados con GLaux&#8230;), luces, animación, cámara,sonido&#8230; al que ampliamos un poco para satisfacer nuestras necesidades, por ejemplo, usamos una libreria para cargar todo tipo de archivos de imagen llamada <a href="http://freeimage.sourceforge.net/">freeimage</a>, también conseguimos un cargador de modelos de 3d studio con el que conseguimos poner un coche que teniamos en 3d, arreglamos unos cuantos bugs que había, por ejemplo el de la cámara, que no se movía correctamente cuando le pediamos que fuese de un punto a otro suavemente, incluimos una skybox y modelamos la uji en 3d, cogimos un plano del suelo montando fragmentos en photoshop (hay un automatismo) que capturamos con <a href="http://www.provtech.co.uk/software/screenprint32.asp">screenprint32</a> de la página de <a href="http://sigpac.mapa.es/fega/visor/">sigpac</a> que es como el Google Maps pero orientado a la agricultura y que tiene mejores fotos de España.<br />
Total, que nos lo curramos mil veces mas de lo que tocaba, ganamos un premio de las jornadas de gráfica de 100€ (que se quedaron en 60€ a repartir entre los 3&#8230;), nos puso un 10 en el trabajo y ahora he decidido subir el juego.<br />
<strong><a href="http://www.forgottenprojects.com/ferdy182/UJI%20Racer.rar">Aquí teneis el link</a></strong></p>
<p>Se abre con UJI Racer.exe y los controles son W,A,S,D. Aun hay bugs pero bueno, quizá algún dia me de por continuar mejorandolo, pero con tanto proyecto en la cabeza probablemente se quede así. Se sale con ESC <img src='http://www.forgottenprojects.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
Probablemente necesites la libreria de OpenGL si no la tienes, está para descargar en internet y es un archivo .dll que se mete en c:\windows\system32 la pondrá por aquí cuando la encuentre.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/uji_racer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adventure Games Studio</title>
		<link>http://www.forgottenprojects.com/adventure_games_studio/</link>
		<comments>http://www.forgottenprojects.com/adventure_games_studio/#comments</comments>
		<pubDate>Tue, 11 Apr 2006 19:36:24 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[
			
				
			
		
Indagando por internet encontré la herramienta definitiva para implementar la aventura gráfica que tenemos pensada desde hace tiempo y cuyo esbozo del guion del primer acto lo podéis encontrar en el wiki.

La herramienta en cuestión se llama Adventure Games Studio (http://www.adventuregamestudio.co.uk/) y es una API para crear aventuras gráficas que ya tiene solucionados la mayoria [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fadventure_games_studio%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fadventure_games_studio%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Indagando por internet encontré la herramienta definitiva para implementar la aventura gráfica que tenemos pensada desde hace tiempo y cuyo esbozo del guion del primer acto lo podéis encontrar en el <a href="http://www.forgottenprojects.com/wiki/">wiki</a>.</p>
<p><img src="http://www.forgottenprojects.com/wiki/uploads/botones.png" alt="" title="" /></p>
<p>La herramienta en cuestión se llama Adventure Games Studio (http://www.adventuregamestudio.co.uk/) y es una API para crear aventuras gráficas que ya tiene solucionados la mayoria de problemas que presentan este tipo de juegos, escenarios, item, interacción, dialogos, puzzles, busqueda de caminos, musicas, sprites&#8230; y por lo que he comprobado se pueden hacer unas aventuras muy chulas, el problema es el de siempre, los gráficos, no mola hacerlos con gráficos encontrados por internet y lo que mola es tener tus propios gráficos pero.. quién los hace? y que quden bien! :S Dificil dificil&#8230;</p>
<p><img src="http://herculeaneffort.adventuredevelopers.com/app2shot4b.jpg" alt="" title="" /></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/adventure_games_studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Motor de terrenos</title>
		<link>http://www.forgottenprojects.com/motor_de_terrenos/</link>
		<comments>http://www.forgottenprojects.com/motor_de_terrenos/#comments</comments>
		<pubDate>Tue, 04 Apr 2006 10:50:50 +0000</pubDate>
		<dc:creator>Fernando Gallego</dc:creator>
				<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[
			
				
			
		
He encontrado un motorcillo sencillo y aun en desarrollo que renderiza terrenos dinámicos que admiten modificaciones en tiempo real, ciclos de dia/noche, arboles, LOD, shaders, búsqueda de caminos, meteorología y decals entre otras suculentas características y que me ha parecido bastante interesante, la web es Lilith3D y sería un buen sitio para empezar algunos proyectillos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fmotor_de_terrenos%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.forgottenprojects.com%2Fmotor_de_terrenos%2F&amp;source=ferdy182&amp;style=normal&amp;service=ow.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>He encontrado un motorcillo sencillo y aun en desarrollo que renderiza terrenos dinámicos que admiten modificaciones en tiempo real, ciclos de dia/noche, arboles, LOD, shaders, búsqueda de caminos, meteorología y decals entre otras suculentas características y que me ha parecido bastante interesante, la web es <a href="http://www.grinninglizard.com/lilith/index.htm">Lilith3D</a> y sería un buen sitio para empezar algunos proyectillos simples que tenia en mente con terrenos deformables que a saber cuando los empezaré así que por eso dejo aquí esta referencia, para poder buscarla en un futuro cuando me haga falta.<br />
<img src="http://www.grinninglizard.com/lilith/engine6.jpg" alt="" title="" /></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save">Compártelo</a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.forgottenprojects.com/motor_de_terrenos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
