﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Subgurim.NET</title>
    <link>http://www.subgurim.net</link>
    <description>Blog ASP.NET 2.0 con C# en castellano</description>
    <ttl>1200</ttl>
    <language>es</language>
    <generator>RSS.Subgurim.NET 1.1</generator>
    <item>
      <title>Kata de las gasolineras</title>
      <description>Paso a publicar la Kata que los candidatos a .NET Developer de thinkandcloud deben superar:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: 10pt;"&gt;Estás viajando con tu coche desde un punto A hasta un punto B por un bonito plano finito de 1000x1000.&lt;/span&gt;&lt;br /&gt;En ese plano finito hay 10 gasolineras repartidas aleatoriamente con una distancia mínima entre ellas de 5.&lt;br /&gt;De repente te quedas sin gasolina. Lo bueno es que sabes dónde estás y dónde están las gasolineras.&lt;br /&gt;&lt;br /&gt;¿Cuál es la gasolinera más cercana?&lt;br /&gt;&lt;br /&gt;Resumen de las normas:&lt;br /&gt;- Ubicar aleatoriamente las 10 gasolineras en el plano, con una distancia mínima entre ellas de 5.&lt;br /&gt;- Ubicar aleatoriamente el punto A y el punto B en el plano, con una distancia mínima de 200.&lt;br /&gt;- El coche viaja en línea recta entre A y B. Se nos acaba la gasolina en un punto aletario de esa línea.&lt;br /&gt;&lt;br /&gt;¿Qué se valora?&lt;br /&gt;- Más que la solución se valora cómo nos enfrentamos al problema.&lt;br /&gt;- Uso de TDD.&lt;br /&gt;- Ante cualquier duda del enunciado, tomar decisiones valientes.&lt;br /&gt;- Organización.&lt;br /&gt;- Simplicidad.&lt;br /&gt;- Fácil lectura de código.&lt;/i&gt;&lt;br /&gt;</description>
      <link>http://www.subgurim.net/Articulos/mundo-web/196/kata-de-las-gasolineras.aspx</link>
      <pubDate>Fri, 26 Apr 2013 12:30:00 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/mundo-web/196/kata-de-las-gasolineras.aspx</guid>
    </item>
    <item>
      <title>Enviar emails usando plantillas con sintaxis Razor</title>
      <description>Para ser sincero, desde siempre el envío de emails ha sido una de las cosas que más he odiado del mundo de la programación No sé por qué... quizás porque siempre me fallaba algo, usar plantillas/templates era demasiado trabajoso...&lt;br /&gt;&lt;br /&gt;Hasta ahora lo solucionaba usando NVelocity para rellenar los templates y el IIS para enviarlos... y creedme que los templates para el NVelocity eran un complejo XML difícil de tratar y con versiones para HTML y texto plano con duplicación de textos... un infierno de mantenimiento.&lt;br /&gt;&lt;br /&gt;Así que ante un nuevo proyecto que requiere envío de emails he hecho lo que en principio parece más difícil, aunque realmente es lo más fácil: hacerle caso a &lt;a href="http://www.eduardpunset.es/"&gt;Punset&lt;/a&gt;, desaprender.&lt;br /&gt;&lt;br /&gt;Así que me puse a buscar librerías que me solucionaran el problema. Las premisas que me marqué son las siguientes:&lt;br /&gt;- Plantillas con sintaxis Razor&lt;br /&gt;- Sin dependencias con MVC&lt;br /&gt;- Que la solución esté en nuget&lt;br /&gt;- Extremadamente fácil de usar&lt;br /&gt;&lt;br /&gt;El objetivo de este artículo no es sino ahorraros tiempo. He probado más de 6 librerías y definitivamente me quedo con &lt;a href="http://lukencode.com/2011/04/30/fluent-email-now-supporting-razor-syntax-for-templates/"&gt;FluentEmail&lt;/a&gt; (&lt;a href="http://nuget.org/packages/fluent-email"&gt;nuget&lt;/a&gt; / &lt;a href="https://github.com/lukencode/FluentEmail"&gt;github&lt;/a&gt;) de &lt;a href="http://lukencode.com/"&gt;lukencode&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Su uso es muy sencillo... y encima es Fluent:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;            Email&lt;br /&gt;&amp;nbsp; &amp;nbsp;.FromDefault()&lt;br /&gt;&amp;nbsp; &amp;nbsp;.To(&amp;quot;email@destino.com&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp;.Subject(&amp;quot;Asunto del email&amp;quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp;.UsingTemplateFromFile(Server.MapPath(&amp;quot;~/MailTemplates/Template.cshtml&amp;quot;), model)&lt;br /&gt;&amp;nbsp; &amp;nbsp;.Send();&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;- FromDefault: coge los parámetros por defecto del MailSettings del web.config.&lt;br /&gt;- To: los destinos a quienes va el email. Puede ser un string un listado de strings. También tenemos los métodos BB y BCC&lt;br /&gt;- Subject: el asunto, surprise!&lt;br /&gt;-&amp;nbsp;UsingTemplateFromFile: apuntamos a un fichero .cshtml, la típica view de Razor, vamos. También tenemos la propiedad&amp;nbsp;UsingTemplate, donde en lugar de la url a un fichero le damos directamente el texto.&lt;br /&gt;- Send: envía el email, y SendAsync lo hace de forma asíncrona.&lt;br /&gt;&lt;br /&gt;¿En algún momento he dicho Razor? ¡Nooop!&lt;br /&gt;Con la propiedad&amp;nbsp;UsingTemplateEngine podemos elegir el motor de templates que queremos usar... vale, y por defecto es Razor :D&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Y quién hace el envío?, ¿El IIS?&lt;br /&gt;&lt;/b&gt;Pues podríamos, sin problemas... pero personalmente me he enamorado de &lt;a href="http://sendgrid.com/"&gt;sendgrid&lt;/a&gt;. No hay más que crearse una cuenta (si lo haces desde azure tiene algunos miles de emails gratis al mes) y configurar tu web.config con algo como esto:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;  &amp;lt;system.net&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;mailSettings&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;smtp from=&amp;quot;email@origen.com&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;network host=&amp;quot;smtp.sendgrid.net&amp;quot; password=&amp;quot;sendgridpassword&amp;quot; userName=&amp;quot;sendgriusername&amp;quot; port=&amp;quot;587&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/smtp&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/mailSettings&amp;gt;&lt;br /&gt;  &amp;lt;/system.net&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;¿Qué más me cuentas?&lt;br /&gt;&lt;/b&gt;Lo primero es que FluentEmail no está preparado para trabajar con IoC y poder testear... pero vamos, problemas cero. Lo metemos nosotros en un servicio, le sacamos una bonita interfaz y ale, a fakear y/o mokear al gusto.&lt;br /&gt;&lt;br /&gt;Lo segundo es que, personalmente, odio los magic strings a niveles enfermizos. Vamos, que poner&amp;nbsp;&lt;i&gt;&amp;quot;~/MailTemplates/Template.cshtml&amp;quot;&lt;/i&gt; me mata. Por eso aprovecho el T4MVC (&lt;a href="http://nuget.org/packages/T4MVC/"&gt;nuget&lt;/a&gt; / &lt;a href="http://t4mvc.codeplex.com/"&gt;codeplex&lt;/a&gt;) para acabar poniendo &lt;i&gt;MailTemplates._AboutYourProject2TaC_cshtml&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;El único detalle es que los mailtemplates los pongo dentro del directorio &amp;quot;MailTemplates&amp;quot;, y añado &amp;quot;&amp;lt;FileFolder&amp;gt;MailTemplates&amp;lt;/FileFolder&amp;gt;&amp;quot; al elemento StaticFilesFolder del T4MVC.tt.settings.xml&lt;br /&gt;&lt;br /&gt;Para los que hayáis trabajado con T4MVC sabréis que esto último solo sirve si la carpeta &amp;quot;MailTemplates&amp;quot; está en el mismo proyecto que el T4MVC. Si no es así y sacáis los templates a otro proyecto (y por tanto lo hacéis como debe ser), tendréis que inventaros algo rollo usar enums para diferenciar templates.</description>
      <link>http://www.subgurim.net/Articulos/asp-net-general/195/enviar-emails-usando-plantillas-con-sintaxis-razor.aspx</link>
      <pubDate>Mon, 04 Mar 2013 09:22:40 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/asp-net-general/195/enviar-emails-usando-plantillas-con-sintaxis-razor.aspx</guid>
    </item>
    <item>
      <title>Mis chrome extensions: traductor y otras más</title>
      <description>Veo con tristeza que llevo mucho tiempo sin escribir en serio en este blog. Supongo que puedo poner mil excusas, pero aunque algunas sean ciertas, lo bien claro es que ninguna es lo suficientemente buena.&lt;br /&gt; &lt;br /&gt; A veces me cuesta distinguir entre mi hobby y mi trabajo, porque prácticamente son lo mismo. Lo bueno es que trabajar en tu hobby es la leche. Lo malo es que decidir cambiar de hobby es algo dramático. Pero que no cunda el pánico, de momento mi hobby sigue igual.&lt;br /&gt; &lt;br /&gt; La última &amp;quot;ramificación&amp;quot; de mi hobby ha sido la de hacer Chrome extensions. Empiezan a ocurrírseme y no puedo parar. A día de hoy he publicado 4 extensiones de Chrome propias y otra en Avanzis (de momento en fase de test).&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bold;"&gt;Subgurim Translator&lt;/span&gt;&lt;br /&gt; De todas esas extensiones, hay una en la que he invertido un poco más de tiempo e interés. La he llamado &amp;quot;&lt;a target="_self" href="https://chrome.google.com/webstore/detail/cdalmddifklficcbjgppcibjglmpbjjm"&gt;Subgurim translator&lt;/a&gt;&amp;quot; y he procurado que fuera una herramienta de traducción tan potente como me ha sido posible. Si usais chrome y os es relativamente frecuente traducir, no puedo dejar de recomendárosla. Básicamente he cogido todo lo que hacían otras extensiones, lo he procurado mejorar y he añadido cosas nuevas que ninguna tenía. &lt;br /&gt; &lt;br /&gt; Algunas de sus características:&lt;br /&gt; &lt;ul&gt; &lt;li&gt;Traducción instanténea.&lt;/li&gt; &lt;li&gt;Detecta el lenguage de tu navegador y lo guarda.&lt;/li&gt; &lt;li&gt;Si cambias el lenguaje origen o el lenguaje destino te los guarda para que no tengas que volver a seleccionarlos. Esto es así porque la mayor parte de las veces solemos traducir siempre entre los mismos idiomas.&lt;/li&gt; &lt;li&gt;Si no tienes claro cuál es el lenguaje origen, el botón de &amp;quot;detectar idioma&amp;quot; está muy a mano.&lt;/li&gt; &lt;li&gt;Una de las cosas que más me gusta: si eliges un texto en la página en la que estás y haces clic sobre la extensión, ésta te traduce el texto de inmediato. De hecho no importa ni si conoces el texto que has seleccionado. Lamentablemente, por cuestiones de seguridad de javascript, en las páginas HTTPS esta funcionalidad no está activada.&lt;/li&gt; &lt;li&gt;Una vez está el texto traducido, copiarlo al portapapeles es un único clic.&lt;/li&gt; &lt;li&gt;Por defecto está activada la opción de si se te cierra la extensión puedas mantener el texto original en el que estabas trabajando.&lt;/li&gt; &lt;li&gt;Por supuesto tienes un botón para traducir la página entera en un nuevo tab.&lt;/li&gt;&lt;/ul&gt;Os dejo un vídeo para que le echéis un vistazo.&lt;br /&gt; &lt;br /&gt; &lt;embed height="385" width="480" src="http://www.youtube.com/v/ZZ4_W_FEfkM?fs=1&amp;hl=es_ES" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" /&gt; &lt;br /&gt; &lt;br /&gt;Enlace del subgurim translator: &lt;a href="https://chrome.google.com/webstore/detail/cdalmddifklficcbjgppcibjglmpbjjm"&gt;https://chrome.google.com/webstore/detail/cdalmddifklficcbjgppcibjglmpbjjm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo que más me gusta de esta extensión es la arquitectura javascript que le he aplicado. Me encanta como lo he hecho. Es el código javascript más limpio que he hecho nunca.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Otras extensiones&lt;/span&gt;&lt;br /&gt;Antes del &lt;a href="https://chrome.google.com/webstore/detail/cdalmddifklficcbjgppcibjglmpbjjm" target="_self"&gt;Subgurim translator&lt;/a&gt; he estado trabajando en otras tres extensiones.&lt;br /&gt;&lt;br /&gt;Una de ellas es poco útil se trata del &lt;a href="https://chrome.google.com/webstore/detail/lbababfbcegfljifhgdemlhpjnhoakme" target="_self"&gt;Duplicate Tab&lt;/a&gt;, que te duplica el tab actual en un único clic. Algo que, como sabéis, se puede hacer clicando con el botón central sobre &amp;quot;recargar&amp;quot; o haciendo botón de la derecha --&amp;gt; duplicar al tab en cuestión... pero yo lo hice porque me apetecía... y para probar mi velocidad de creación de extensiones, jejeje. La verdad no me costó más de un cuarto de hora desde que se me ocurrió hasta que lo publiqué con vídeo incluído.&lt;br /&gt;&lt;br /&gt;Las otras dos extensiones son &amp;quot;&lt;a href="https://chrome.google.com/webstore/detail/fmbimfhbdlefhlnepgnicegnnpldcink" target="_self"&gt;tab back&lt;/a&gt;&amp;quot; y &amp;quot;&lt;a href="https://chrome.google.com/webstore/detail/ckciihiambeegbpkoandnbepgcedkhnj" target="_self"&gt;tab foward&lt;/a&gt;&amp;quot;. Éstas si me gustan más y son bastante más útiles. Internamente guardan el historial de las pestañas/tabs que vas activando, de forma que navegar sobre ellas es muy fácil. A mí me pasa muchas veces que tengo un montón de pestañas abiertas, voy abriendo una y otra y en un momento dado quiero volver a la anterior pero no sé ni dónde está... pues con estas extensiones se resuelve. Por cierto, la segunda (la &lt;a href="https://chrome.google.com/webstore/detail/ckciihiambeegbpkoandnbepgcedkhnj" target="_self"&gt;tab foward&lt;/a&gt;) es inútil por si misma (requiere la &lt;a href="https://chrome.google.com/webstore/detail/fmbimfhbdlefhlnepgnicegnnpldcink" target="_self"&gt;tab back&lt;/a&gt;). Y de paso aprendí cómo comunicarme entre extensiones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Cómo aprender a hacer extensiones?&lt;/span&gt;&lt;br /&gt;Pues la premisa es tener un conocimiento javascript ágil. Una extensión al final no es más que páginas html sobre las que realizas acciones javascript usando la API/librería que Chrome te ofrece. Es un resumen un poco malo, pero es poco más que eso: javascript + html.&lt;br /&gt;&lt;br /&gt;Podría dar más explicaciones, pero es que el &lt;a href="http://code.google.com/chrome/extensions/getstarted.html" target="_self"&gt;tutorial de la api&lt;/a&gt; es sencillo, breve y directo.&lt;br /&gt; </description>
      <link>http://www.subgurim.net/Articulos/mundo-web/194/mis-chrome-extensions-traductor-y-otras-mas.aspx</link>
      <pubDate>Mon, 20 Dec 2010 19:16:14 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/mundo-web/194/mis-chrome-extensions-traductor-y-otras-mas.aspx</guid>
    </item>
    <item>
      <title>Html5, primeras pinceladas</title>
      <description>HTML5 está al caer, y nos tendremos que adaptar sí o sí.&lt;br /&gt; &lt;br /&gt; Llevo varios días investigando y la verdad es que en líneas generales me gusta bastante. Aún no voy a escribir artículos al respecto hasta que no lo pruebe bien probado, pero para empezar os adjunto interesantes enlaces.&lt;br /&gt; &lt;br /&gt; &lt;a href="http://javiercasares.com/"&gt;Javier Casares&lt;/a&gt; tiene varios artículos sobre &lt;b&gt;HTML5&lt;/b&gt; muy interesantes. Estos son los que considero más interesantes:&lt;br /&gt; - &lt;a href="http://javiercasares.com/blog/html-5-enlaces-que-cobran-vida/"&gt;Enlaces que cobran vida&lt;/a&gt;.&lt;br /&gt; - &lt;a href="http://javiercasares.com/blog/html-5-como-estructurar-ahora-una-pagina/"&gt;Cómo estructurar una página&lt;/a&gt;.&lt;br /&gt; - &lt;a href="http://javiercasares.com/blog/html-5-los-bloques-de-contenido-textual/"&gt;Los bloques de contenido textual&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt; El propio blog de Javier Casares es un buen caso de uso de HTML5, así como uno de sus proyectos: &lt;a href="http://www.tumanitas.com/"&gt;tumanitas.com&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; En todo caso, y como siempre, ante la duda... &lt;a href="http://dev.w3.org/html5/spec/Overview.html"&gt;w3c&lt;/a&gt;.</description>
      <link>http://www.subgurim.net/Articulos/mundo-web/193/html5-primeras-pinceladas.aspx</link>
      <pubDate>Wed, 08 Sep 2010 23:26:31 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/mundo-web/193/html5-primeras-pinceladas.aspx</guid>
    </item>
    <item>
      <title>Sobre mi nuevo proyecto</title>
      <description>Como ya os he comentado alguna vez, a parte de mis 8 horas diarias en Avanzis mi tiempo libre lo dedico casi exclusivamente a mis propias Webs, lo que acaban siendo otras 20 o 25 horas semanales.&lt;br /&gt;  &lt;br /&gt;  Hasta hace dos años dedicaba ese tiempo a webs sin demasiada intención comercial, hacía simplemente lo que me daba la gana sin preocuparme por el retorno. Me valía con dar rienda suelta a mi &amp;quot;creatividad&amp;quot;.&lt;br /&gt;  &lt;br /&gt;  Pero hace dos años decidí iniciar un proyecto &amp;quot;serio&amp;quot;... y así ha sido. Sin duda el proyecto más grande y serio que he hecho hasta ahora, tanto a nivel técnico como por su fin comercial.&lt;br /&gt;  &lt;br /&gt;  La web/producto en cuestión se enfoca a un mercado que existe y creo que está mal cubierto, y la forma de monetización es directamente la de acceso premium. No llega a ser freemium porque los usuarios no-premium sólo tienen el rol de &amp;quot;ver-pero-no-actuar&amp;quot;. Es más, sólo se ven entre ellos, no a los usuarios premium.&lt;br /&gt;  &lt;br /&gt;  Pero me dejo de ideas abstractas, concretemos.&lt;br /&gt;  &lt;br /&gt;  La web es trickeo.com, y podría definirse como una red social de gente que quiere hacer &lt;a href="http://www.trickeo.com"&gt;&lt;b&gt;tríos&lt;/b&gt;&lt;/a&gt; y/o &lt;a href="http://www.trickeo.com"&gt;&lt;b&gt;intercambios de pareja&lt;/b&gt;&lt;/a&gt;. De hecho su lema es tan explícito como elegante &amp;quot;¿Trío o intercambio? Tú eliges&amp;quot;.&lt;br /&gt;  &lt;br /&gt;  A la hora de registrarte hay dos tipos de usuarios, la persona que va &amp;quot;sola&amp;quot; y cuya intención es hacer tríos; y la pareja, cuya intención es hacer tríos y/o intercambios.&lt;br /&gt;  &lt;br /&gt;  Existen varias webs de contactos que podrían tener cierta similitud, pero trickeo trata de diferenciarse en varios aspectos:&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  &lt;u&gt;Se dirige única y exclusivamente a &lt;/u&gt;&lt;b&gt;&lt;u&gt;tríos e intercambios&lt;/u&gt;&lt;/b&gt;&lt;u&gt;. &lt;br /&gt;  &lt;/u&gt;Toda la web gira entorno a ello. Existe la figura del &amp;quot;pretrickeo&amp;quot; que viene a ser algo así como &amp;quot;dos personas que se ponen en contacto para buscar una tercera para hacer un trío&amp;quot;. Obviamente en ningún caso se impide que esas dos personas queden antes para &amp;quot;probar&amp;quot;.&lt;br /&gt;  &lt;br /&gt;  &lt;u&gt;Está dirigido a usuarios premium. &lt;br /&gt;  &lt;/u&gt;Dicho de otra forma, sólo entra el que está interesado de verdad. &lt;b&gt;Nada de trolls ni spammers&lt;/b&gt;. El que está interesado paga una pequeña subscripción (que varía de 10 a 70 euros según la duración de la suscripción). &lt;br /&gt;  Evidentemente, al principio no hay una base suficiente de usuarios, con lo que de buenas a primeras no puedes exigir un pago, pero cuando lleguemos a un base de usuarios respetable (500~1000) aplicaremos ese método.&lt;br /&gt;  Este método exige la existencia del usuario no-premium. Éste podrá navegar por la web y conocerla (sólo a otros usuarios no-premium) pero a la hora de ponerse en contacto con alguien deberá hacerse premium.&lt;br /&gt;  &lt;br /&gt;  &lt;u&gt;Diseño &lt;/u&gt;&lt;b&gt;&lt;u&gt;serio y elegante&lt;/u&gt;&lt;/b&gt;&lt;u&gt;. &lt;br /&gt;  &lt;/u&gt;&lt;a href="http://www.trickeo.com"&gt;Trickeo&lt;/a&gt; quiere dar la sensación de ser una página respetable respecto a las otras alternativas. Ni si quiera tenemos publicidad (no la necesitamos dado nuestra forma de monetizar). &lt;br /&gt;  Tampoco permitimos fotos eminentemente pornográficas. Es muy difícil trazar la línea de separación, pero queremos que queden como mucho en eróticas.&lt;br /&gt;  &lt;br /&gt;  &lt;u&gt;Absoluta &lt;/u&gt;&lt;b&gt;&lt;u&gt;privacidad&lt;/u&gt;&lt;/b&gt;&lt;u&gt;. &lt;br /&gt;  &lt;/u&gt;Hay diferentes niveles de privacidad, el mínimo permite que cualquier usuario registrado pueda verte, y el máximo es un modo de invisibilidad total. &lt;br /&gt;  Por defecto al usuario premium sólo lo podrá ver otro usuario premium, y el usuario no premium sólo podrá ver a usuarios no premium y ser visto por otros usuarios premium.&lt;br /&gt;  &lt;br /&gt;  &lt;u&gt;Máxima &lt;b&gt;usabilidad&lt;/b&gt;&lt;br /&gt;  &lt;/u&gt;Está pensado para que usuarios de nivel&amp;nbsp;bajo&amp;nbsp;tengan que hacer apenas dos o tres clics para empezar a &amp;quot;trickear&amp;quot;, mientras que los usuarios de nivel medio o avanzado podrán disfrutar de un montón de herramientas y mucha navegación interesante.&lt;br /&gt;  Resumiendo mucho, trickeo te pregunta por tus gustos sexuales (sexo, orientación sexual, qué tipos de trío o intercambio buscas...) y automáticamente te muestra los usuarios con los que eres perfecto candidato, así como eres mostrado a otros.&lt;br /&gt;  A partir de ahí puedes refinar las búsquedas tanto como quieras.&lt;br /&gt;  En todo caso tienes la opción de ver a los demás usuarios, su ficha, sus fotos, etc. y si lo crees conveniente ponerte en contacto con ellos.&lt;br /&gt;  Todo esto con muy poquitos clics y procurando centrarse mucho en la facilidad.&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  Podría estar describiendo el funcionamiento mucho más, pero casi mejor si lo probáis vosotros mismo. Os adjunto un código con el que podréis probar trickeo.com en modo premium durante tres meses... y si os gusta ya sabéis ;)&lt;br /&gt;  &lt;br /&gt;  Web: &lt;a href="http://www.trickeo.com"&gt;www.trickeo.com&lt;/a&gt;&lt;br /&gt;  Código de invitación:&amp;nbsp;&lt;b&gt;459TESS&lt;br /&gt;  &lt;br /&gt;  &lt;span class="Apple-style-span" style="font-weight: normal; "&gt;Ya os iré contando qué tal va, qué decisiones tomamos, nuestro marketing, etc.&lt;br /&gt;  &lt;br /&gt;  Quería acabar dando las gracias a los que han hecho posible la existencia de trickeo.com, desde los que simplemente se ilusionaron y aportaron ideas, hasta el actual equipo trickeo, pasando por aquellos que formaron parte del equipo y ya no están. De verdad: gracias.&lt;/span&gt;&lt;/b&gt;</description>
      <link>http://www.subgurim.net/Articulos/mundo-web/192/sobre-mi-nuevo-proyecto.aspx</link>
      <pubDate>Wed, 08 Sep 2010 23:25:31 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/mundo-web/192/sobre-mi-nuevo-proyecto.aspx</guid>
    </item>
    <item>
      <title>Plugin de jQuery: mejora del datepicker</title>
      <description>Últimamente le estoy dando mucha caña a &lt;b&gt;jQuery&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;jQuery no es más que una capa por encima a javascript, además de una forma de establecer unas convenciones de uso. Esto último permite un buen ecosistema de plugins que a su vez redunda en hacer jQuery más estandarizado.&lt;br /&gt;&lt;br /&gt;Pero vamos al grano: he estado trabajando en el &lt;b&gt;plugin de jquery UI&lt;/b&gt;: &lt;a href="http://docs.jquery.com/UI/Datepicker"&gt;&lt;b&gt;Datepicker&lt;/b&gt;&lt;/a&gt;. Es bastante completito. Yo lo estoy usando de modo que haciendo click sobre un textbox aparezca un calendario.&lt;br /&gt;&lt;br /&gt;Éste actualiza el textbox con la fecha en la que te encuentras, pero sólo al hacer click en el día elegido. El problema es que cuando cambias de mes o de año, no actualiza el textbox, con lo que se está comportando de forma extraña... por lo menos diferente a como se comportan otros calendarios como el propio de Windows. &lt;br /&gt;&lt;br /&gt;Pero con un pequeño truquito tiene solución fácil, gracias al evento&amp;nbsp;onChangeMonthYear.&lt;br /&gt;&lt;br /&gt;El código es éste:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;        $(&amp;quot;.Calendar&amp;quot;).datepicker({&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;onChangeMonthYear: function(year, month, inst) {&lt;br /&gt;                &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(this).val($.datepicker._formatDate(inst, inst.currentDay, month-1, year));&lt;br /&gt;            &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;        });&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Espero que os sea útil ;)</description>
      <link>http://www.subgurim.net/Articulos/ajax-y-javascript/191/plugin-de-jquery-mejora-del-datepicker.aspx</link>
      <pubDate>Fri, 29 Jan 2010 20:42:49 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/ajax-y-javascript/191/plugin-de-jquery-mejora-del-datepicker.aspx</guid>
    </item>
    <item>
      <title>jQuery, Ajax y ASP.NET WebForms</title>
      <description>Admito que al principio era reticente a usar &lt;a href="http://www.subgurim.net/Articulos/ajax-y-javascript/185/jquery-para-asp-net.aspx" target="_self"&gt;jQuery&lt;/a&gt;. Al fin y al cabo, todo lo que hace &lt;a href="http://www.subgurim.net/Articulos/ajax-y-javascript/185/jquery-para-asp-net.aspx" target="_self"&gt;jQuery&lt;/a&gt; se puede hacer con javascript, y no lo veía más que como otro framework javascript más.&lt;br /&gt;&lt;br /&gt;Sin embargo, conforme he ido utilizándola por necesidades de nuestro nuevo proyecto en &lt;a href="http://www.avanzis.com" target="_self"&gt;Avanzis&lt;/a&gt;, más me ha ido gustando... y ahora me es prácticamente imprescindible :D&lt;br /&gt;&lt;br /&gt;De la funcionalidad que quería hablar es sobre cómo se trabaja con &lt;span style="font-weight: bold;"&gt;Ajax en jQuery&lt;/span&gt;, y su aplicación para &lt;span style="font-weight: bold;"&gt;ASP.NET Webforms&lt;/span&gt; (con ASP.NET MVC es algo más fácil).&lt;br /&gt;&lt;br /&gt;En la &lt;a href="http://docs.jquery.com/" target="_self"&gt;página oficial de jQuery&lt;/a&gt; encontramos una muy buena documentación de su uso con &lt;a href="http://docs.jquery.com/Ajax" target="_self"&gt;Ajax&lt;/a&gt;. Personalmente el método que más uso es el de &lt;a href="http://docs.jquery.com/Ajax/jQuery.getJSON" target="_self"&gt;getJSON&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Vayamos directamente al ejemplo. Bien sencillo: tenemos un TextBox y un Button. En el texto escribiremos un entero, y al presionar sobre el botón se ejecutará una función &lt;span style="font-weight: bold;"&gt;jQuery&lt;/span&gt;/&lt;span style="font-weight: bold;"&gt;Ajax &lt;/span&gt;que enviará el dato a servidor. En el servidor procesaremos el dato y devolveremos un resultado que nuestro javascript procesará. Vamos una ida-y-vuelta al navegador usando &lt;span style="font-weight: bold;"&gt;Ajax&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nuestro HTML:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;box&amp;quot; /&amp;gt;&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;button&amp;quot; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nuestro javascript:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready(function() {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('#button').click(function() {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var idValue = $('#box').val();&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (idValue &amp;amp;&amp;amp; (idValue != '')) {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendData(idValue);&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function sendData(idValue) {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var actionData = { id: idValue };&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.getJSON('/test/ajaxtest.aspx', actionData, function(data) {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (data == true) {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('par');&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (data == false) {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('impar');&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nuestro código en servidor:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!string.IsNullOrEmpty(Request.QueryString[&amp;quot;id&amp;quot;]))&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int id = Convert.ToInt32(Request.QueryString[&amp;quot;id&amp;quot;]);&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (id%2 == 0)&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; returnJSON(true);&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; returnJSON(false);&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void returnJSON(object data)&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (data.GetType() == typeof(bool))&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = data.ToString().ToLower();&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;br style="font-style: italic;" /&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Clear();&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.ContentType = &amp;quot;application/json&amp;quot;;&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Flush();&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(data);&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.End();&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Como vemos, en nuestro código javascript lo primero que hacemos es decirle al navegador que en el momento esté preparado (&amp;quot;ready&amp;quot;) coja el elemento con el identificador &amp;quot;button&amp;quot; y le asigne una función a su evento &amp;quot;click&amp;quot;.&lt;br /&gt;&lt;br /&gt;Dicha función lo único que hace es coger el valor del elemento con identificador &amp;quot;box&amp;quot;, y si este valor es válido se ejecuta la funcion &amp;quot;sendData&amp;quot;. La función &amp;quot;sendData&amp;quot; es la importante... y para ser importante es bien sencillita :D&lt;br /&gt;&lt;br /&gt;Lo primero que hacemos es crear el elemento JSON, que será el dato que mandaremos a servidor.&lt;br /&gt;&lt;br /&gt;Luego ejecutamos la función getJSON. Ésta se compone de tres parámetros. El primero es la URL a la que apuntamos. En nuestro caso ponemos un página .aspx normal y corriente. También podríamos crearnos un HttpHandler que gestionara todas las llamadas AJAX, o si estuvieramos usando ASP.NET MVC no tendríamos más que poner la ruta correspondiente.&lt;br /&gt;&lt;br /&gt;El segundo parámetro es la variable json con los datos que enviaremos a servidor. Y el tercer parámetro es la función que se ejecutará cuando vuelva de servidor y que luego analizaremos. Lo importante de esta función es que el dato que devuelven ya está en JSON, con lo que es muy fácil trabajar con él.&lt;br /&gt;&lt;br /&gt;En cuanto al código de servidor, también es muy sencillo. Lo único que hace es recoger el dato que hemos enviado (y que en este caso se recibe como querystring), tratarlo y devolver una respuesta.&lt;br /&gt;&lt;br /&gt;El quid de la cuestión está en que la respuesta debe ser un JSON, de lo cual se encarga el método &amp;quot;returnJSON&amp;quot;. En nuestro ejemplo sólo devolvemos true o false, pero si creamos una variable JSON cualquiera igual nos vale (por ejemplo &amp;quot;{text:'texto de respuesta'}&amp;quot;).&lt;br /&gt;&lt;br /&gt;Y volviendo a la función javascript, vemos que tratar con JSON es muy sencillo. En nuestro caso sólo tratamos el &amp;quot;true&amp;quot; o el &amp;quot;false&amp;quot;. Para mí es muy común trabajar sólo con eso, puesto que lo normal es mandar un dato a servidor, realizar una acción y devolver un booleano como diciendo &amp;quot;todo correcto&amp;quot; o &amp;quot;ups, ha habido un error&amp;quot;.&lt;br /&gt;&lt;br /&gt;Fácil, ¿no?&lt;br /&gt;</description>
      <link>http://www.subgurim.net/Articulos/ajax-y-javascript/190/jquery-ajax-y-asp-net-webforms.aspx</link>
      <pubDate>Fri, 27 Feb 2009 10:05:34 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/ajax-y-javascript/190/jquery-ajax-y-asp-net-webforms.aspx</guid>
    </item>
    <item>
      <title>Mi blog personal</title>
      <description>Hace tiempo que le tenía ganas, y por fin me ha lanzado.&lt;br /&gt;&lt;br /&gt;Ya tengo blog personal como &lt;a href="http://www.javiernavarro.net/" target="_self"&gt;Javier Navarro&lt;/a&gt;. (&lt;a href="http://www.javiernavarro.net/"&gt;http://www.javiernavarro.net/&lt;/a&gt;). No sé si es un error, porque Subgurim.net está muy bien posicionado y me lee bastante gente. Comenzar con &lt;a href="http://www.javiernavarro.net/" target="_self"&gt;JavierNavarro.net&lt;/a&gt; desde cero es algo atrevido... pero qué narices, lo hago porque quiero y no espero apenas visitas.&lt;br /&gt;&lt;br /&gt;Lo separo porque en este blog quiero seguir hablando en exclusiva de ASP.NET, Javascript, C#, Bases de datos, etc, y en mi &lt;a href="http://www.javiernavarro.net/" target="_self"&gt;blog personal&lt;/a&gt; hablaré de más o menos lo que me venga en gana, desde cosas personales hasta, sobretodo, temas del mundo de los emprendedores, la tecnología e Internet.&lt;br /&gt;&lt;br /&gt;Ya sabéis, estáis todos invitados a mi blog: &lt;a href="http://www.javiernavarro.net/" target="_self"&gt;Javier Navarro&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;PD: Si me considero un SEO mínimamente razonable, tengo que salir primero en Google como &amp;quot;&lt;a href="http://www.javiernavarro.net/" target="_self"&gt;Javier Navarro&lt;/a&gt;&amp;quot;.&lt;br /&gt;</description>
      <link>http://www.subgurim.net/Articulos/mundo-web/189/mi-blog-personal.aspx</link>
      <pubDate>Wed, 10 Dec 2008 15:50:09 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/mundo-web/189/mi-blog-personal.aspx</guid>
    </item>
    <item>
      <title>Dicatio y su primer proyecto</title>
      <description>Como se puede ver fácilmente en el menú izquierdo de este blog, y como saben todos los que me conocen, no me puedo estar quieto y siempre estoy pensando en nuevos proyectos Web.&lt;br /&gt;&lt;br /&gt;En los últimos meses sólo había tenido tiempo para mantener los proyectos que fui creando compulsivamente con mi no menos compulsiva &amp;quot;creatividad&amp;quot;.&lt;br /&gt;&lt;br /&gt;Ahora sólo mantengo el control de &lt;a href="null"&gt;&lt;/a&gt;&lt;a href="http://googlemaps.subgurim.net/"&gt;GoogleMaps para ASP.NET&lt;/a&gt;, y los contenidos de &lt;a href="http://www.discotequeros.com"&gt;discotequeros.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Los demás proyectos los he hecho OpenSource... ojalá tuviera tiempo para mantenerlo :(&lt;br /&gt;&lt;br /&gt;Este mismo blog sufre de mi falta de tiempo, pero más sufren otros de mis proyectos que considero que son herramientas muy buenas, sobretodo tusencuestas.com. Es una lástima que a una Web que está tan bien posicionada en Google (aparece el tercero por &amp;quot;encuestas&amp;quot;) no pueda dedicarle tiempo. ¡¡Por falta de ideas no será!!&lt;br /&gt;&lt;br /&gt;Postrándose ante la teoría del de quien mucho abarca poco aprieta, creo que ha llegado el momento de centrarse en un solo proyecto, aunque continuando un mínimo mantenimiento de los más importantes (discotequeros y googlemaps).&lt;br /&gt;&lt;br /&gt;De ahí ha nacido Dicatio. Dicatio es el nombre en clave de un grupo de amigos/socios con ideas frescas y ganas de trabajar. Bajo el nombre de Dicatio tenemos pensado agrupar una serie de proyectos (unos Web y otros no tanto), y ya estamos comenzando por el primero.&lt;br /&gt;&lt;br /&gt;De momento no os puedo hablar de ese nuevo proyecto, porque está en fase de desarrollo y no me gusta enseñar cosas que están a medio hacer, pero a mí me gusta mucho la idea. De hecho me motiva mucho, y la motivación es la clave de tener ganas de trabajar cuando acabas de trabajar.&lt;br /&gt;&lt;br /&gt;Este sábado 8 de Noviembre tenemos la &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Primera Jornada Dicatio&lt;/span&gt;, en una reunión maratoniana donde definiremos las bases de Dicatio y de su &amp;nbsp;primer proyecto.&lt;br /&gt;&lt;br /&gt;Por cierto, el nombre de Dicatio significa &amp;quot;Dedicación&amp;quot; en latín. Es curiosa la similitud con &lt;a href="http://www.avanzis.com"&gt;Avanzis&lt;/a&gt;, la empresa en que trabajo... pero no tiene nada que ver. De hecho, el nombre &amp;quot;Dicatio&amp;quot; surgió años antes de que yo comenzara a trabajar en Avanzis, y el que se lo inventó (no sé si fue Roberto o Jaumonla) ni tal si quiera conocía que existía Avanzis.&lt;br /&gt;&lt;br /&gt;De hecho, lo más curioso es que la empresa de mi padre se llama Vincit Decoración, que fue creada en el siglo pasado (1998), así que por lo visto estoy rodeado de latinismos, jajaja.&lt;br /&gt;&lt;br /&gt;Lo dicho, ya os iré hablando más de Dicatio, de sus componentes, de su primer proyecto, etc.</description>
      <link>http://www.subgurim.net/Articulos/mundo-web/188/dicatio-y-su-primer-proyecto.aspx</link>
      <pubDate>Wed, 05 Nov 2008 09:43:19 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/mundo-web/188/dicatio-y-su-primer-proyecto.aspx</guid>
    </item>
    <item>
      <title>Concurso SEO de Hazruido.com: comunactivo es la palabra elegida.</title>
      <description>El pasado 15 de Octubre comenzó la tercera edición del concurso de Hazruido.com en busca de &amp;quot;quién hace más ruido en Internet&amp;quot;.&lt;br /&gt;            &lt;br /&gt;            El concurso tiene dos modalidades: posicionamiento y marketing viral.&lt;br /&gt;            &lt;br /&gt;            Personalmente siempre me había llamado la atención este concurso así que este año he decidido participar en la modalidad de posicionamiento.&lt;br /&gt;            &lt;br /&gt;            En esta modalidad, Hazruido.com hizo pública una palabra que no estaba indexada en Google, de modo que el ganador será quien esté en primera posición en una búsqueda de Google España el día 15 de diciembre a las 12:00.&lt;br /&gt;            &lt;br /&gt;            La palabra en cuestión es &lt;a href="http://comunactivo.subgurim.net"&gt;comunactivo&lt;/a&gt;. Es una palabra graciosa, la verdad. La Web desde la que concurso es &amp;quot;&lt;a href="http://comunactivo.subgurim.net/"&gt;http://comunactivo.subgurim.net&lt;/a&gt;&amp;quot; y como podréis comprobar es un clon de este blog si tengo tiempo ya le cambiaré el diseño.&lt;br /&gt;            &lt;br /&gt;            Así pues, &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;el que crea que este blog le ha servido&lt;/span&gt; de algo en el mundo de ASP.NET y quiere agradecérmelo de alguno forma, puede hacerlo de forma muy sencilla sin más que enlazar a &amp;quot;&lt;a href="http://comunactivo.subgurim.net/"&gt;http://comunactivo.subgurim.net&lt;/a&gt;&amp;quot; utilizando el anchor &amp;quot;&lt;a href="http://comunactivo.subgurim.net/"&gt;comunactivo&lt;/a&gt;&amp;quot;. Aunque os creáis que vuestra web/blog es demasiado pequeña y que no servirá de ayuda, estáis equivocados. Un pequeño enlace es también muy importante. Para facilitaros más el trabajo, os pongo el código HTML que más me beneficiaría:&lt;br /&gt;            &lt;br /&gt;           &lt;span class="Apple-style-span" style="font-style: italic; font-weight: bold; "&gt; &amp;lt;a href=&amp;quot;http://comunactivo.subgurim.net&amp;quot; alt=&amp;quot;comunactivo&amp;quot;&amp;gt;comunactivo&amp;lt;/a&amp;gt;&lt;br /&gt;           &lt;/span&gt;&lt;br /&gt;           ¡¡Gracias por vuestro apoyo!!</description>
      <link>http://www.subgurim.net/Articulos/mundo-web/187/concurso-seo-de-hazruido-com-comunactivo-es-la-palabra-elegida.aspx</link>
      <pubDate>Mon, 20 Oct 2008 08:57:02 GMT</pubDate>
      <guid>http://www.subgurim.net/Articulos/mundo-web/187/concurso-seo-de-hazruido-com-comunactivo-es-la-palabra-elegida.aspx</guid>
    </item>
  </channel>
</rss>