<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1834718609066569382</id><updated>2012-02-04T06:22:04.714-08:00</updated><category term='consejos'/><category term='stored procedures'/><category term='tabla'/><category term='colegio'/><category term='silverlight'/><category term='web'/><category term='dependencias'/><category term='seguridad'/><category term='SPs'/><category term='relacion'/><category term='mejorar'/><category term='role'/><category term='post'/><category term='metodo'/><category term='primer post'/><category term='sql server'/><category term='pdf'/><category term='c'/><category term='codigo davinci'/><category term='c#'/><category term='clave foranea'/><category term='tablas'/><category term='site administration tool'/><category term='programación'/><category term='buen diseño'/><category term='tips'/><category term='html'/><category term='formulario'/><category term='script'/><category term='animación'/><category term='membership'/><category term='asp.net'/><category term='optimizar'/><category term='.net'/><category term='practicas'/><category term='itextsharp'/><category term='sp'/><category term='fk'/><category term='base de datos'/><category term='humor'/><title type='text'>Código DaVinci PuntoNet</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-6480235073397218296</id><published>2010-06-22T07:53:00.000-07:00</published><updated>2010-06-22T07:57:50.041-07:00</updated><title type='text'>Disculpas y... working</title><content type='html'>Gente, este post es más que nada para pedir disculpas.&lt;br /&gt;&lt;br /&gt;Perdón por abandonar el blog, he estado muy ocupado con temas varios y los he abandonado.&lt;br /&gt;&lt;br /&gt;Les comento que estoy trabajando para mudarme mi propia página y no depender de blogger :D&lt;br /&gt;&lt;br /&gt;Me voy a basar en BlogEngine de .Net&lt;br /&gt;&lt;br /&gt;Tengo pensado actualizarlos en Silverlight, XNA, y demás cosillas que tengo en el cajón.&lt;br /&gt;&lt;br /&gt;Saludos gente (a todos los que lo lean)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-6480235073397218296?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/6480235073397218296/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/06/disculpas-y-working.html#comment-form' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/6480235073397218296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/6480235073397218296'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/06/disculpas-y-working.html' title='Disculpas y... working'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-9086483457394327298</id><published>2010-01-13T06:20:00.000-08:00</published><updated>2010-01-13T07:23:39.857-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='consejos'/><category scheme='http://www.blogger.com/atom/ns#' term='mejorar'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='optimizar'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='buen diseño'/><title type='text'>Tips para mejorar tu sitio Web - Parte II</title><content type='html'>Hola gente!&lt;br /&gt;&lt;br /&gt;Bueno, continúo con el &lt;a href="http://codigodavincipuntonet.blogspot.com/2010/01/tips-para-mejorar-tu-sitio-web-parte-i.html"&gt;post anterior&lt;/a&gt; para dejarle un par de pequeños tips más para optimizar su sitio web.&lt;br /&gt;&lt;br /&gt;Ya vimos cómo optimizar el tema de estilos, datos y un par de consejos más.&lt;br /&gt;&lt;br /&gt;Ahora sigo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7-) Validar nuestro sitio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Algo que no muchos diseñadores hacen es validar su sitio. ¿A qué nos referimos con &lt;span style="font-style:italic;"&gt;validar el sitio&lt;/span&gt;? Bueno, básicamente es asegurarnos que la codificación ha sido correcta, para que cada navegador lo interperte de la manera correcta.&lt;br /&gt;Hoy acá les dejo dos formas de hacerlo, pero pueden encontrar algunas más.&lt;br /&gt;&lt;br /&gt;La primera, y creo que muy importante, es validarlo a través de la W3C, nos ofrece su &lt;a href="http://validator.w3.org/"&gt;validador&lt;/a&gt;. Lo que debemos hacer es entrar en él e ingresar la url de nuestro sitio, para así recibir un informe en detalle con los errores y problemas de nuestra página.&lt;br /&gt;&lt;br /&gt;Otra forma de validarlo es a través de los navegadores. En Internet Explorer 8 (el que yo uso) se puede hacer a través de la herramienta para desarrolladores, acá les dejo alguna &lt;a href="http://msdn.microsoft.com/en-us/library/dd565628%28VS.85%29.aspx"&gt;info oficial&lt;/a&gt;. Se darán cuenta que es muy fácil de usar, pueden validar HTML, CSS, Links y además, depurar JavaScript. Para Mozilla Firefox vienen ciertos addons que nos pueden ayudar, acá les dejo el &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Web Developer&lt;/a&gt; y el &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;Firebug&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;8-) Alt y Title para imágenes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este es un tip que trae bonus. Más adelante les contaré.&lt;br /&gt;Es algo que ciertamente no se tiene muy en cuenta, y que no es fundamental para la visualización, pero sí ayuda a la validación del código. De nuevo, recalco otra ventaja con la que contamos los que trabajamos con tecnologías Microsoft, y es que Visual Studio nos lanza warnings si no le agregamos la propiedad &lt;span style="font-style:italic;"&gt;alt&lt;/span&gt; a las etiquetas img.&lt;br /&gt;Además, un dato para mí sumamente importante es la integración con personas con capacidades diferentes (&lt;a href="http://selvareyes.blogspot.com"&gt;blog recomendado&lt;/a&gt;). Los sistemas de navegación web para no-videntes utilizan estos atributos para dar una explicación del contenido del sitio. &lt;span style="font-weight:bold;"&gt;Así que a no olvidar!&lt;/span&gt;.&lt;br /&gt;Otra propiedad que algunos navegadores suelen interpretar también es la &lt;span style="font-style:italic;"&gt;title&lt;/span&gt;, por lo que nunca viene mal agregarla :)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;NO!:&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;img src=”miimagen.png”&amp;gt;&lt;br /&gt;SI!:&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;img src=”imagen.png” alt=”Mi imagen” title="Mi imagen"&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Bueno, ahora le cuento el bonus de este tip:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;Agregar esta info a las imágenes de nuestro sitio favorece al posicionamiento, ya que los motores de búsqueda leen esto, y nos da una ayuda extra :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;10-) Primer acto: CSS, Segundo Acto: Contenido, Tercer acto: JavaScript&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Más allá del nombre que le he dado a este tip :P, es algo bastante serio.&lt;br /&gt;Hace muy poco he descubierto esto. Algo ya sabido por mí, es lo de agregar el link a la hoja de estilo al comienzo del documento. La explicación: Esto nos asegura que los estilos se carguen junto con el contenido, y si el usuario detiene la carga o se le cae la conexión, pueda ver el documento estilizado. Imaginense que vea el html solo!! No queremos eso, ¿no?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Mi sitio optimizado :)&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;link rel=”stylesheet” type=”text/css” href=”misestilos.css” media=”screen”&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Bueno, ahora paso a explicar el dato nuevo para mí. Poner el JavaScript al final del documento. Es recomendable, muchas veces, debido al tamaño (o peso) de las librerías JS, lo contrario a lo mencionado acerca del css.&lt;br /&gt;¿Why? Porque es preferible presentarle el documento completo al usuario, para que ya comience a navegar, sin que tenga que esperar a que se cargue tooodo el JavaScript. Una vez que se ha mostrado el contenido, se puede cargar efectos, y demás aportes JS.&lt;br /&gt;&lt;br /&gt;Ojo! Que hay casos, en los que el JS es esencial en la página, por lo que este tip no se aplicaría. Es un tanto relativo.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;...&lt;br /&gt;&lt;br /&gt;&amp;lt;script type=”text/javascript” src=”libreria.js”&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;11-) Intercambio de links&lt;/span&gt;&lt;br /&gt;Bueno, ya cerrando este tema de la optimización de un sitio web. Les dejo un úlitmo tip, que sin duda es el mayor consejo respecto a posicionamiento.&lt;br /&gt;Lo óptimo para un buen posicionamiento es el intercambio de link. No podemos esperar figurar en los primeros resultados de los buscadores sin que la web sepa de nosotros!&lt;br /&gt;Tampoco es de esperar que los sitios añadan referencias a nosotros sin nada a cambio, por lo que aquí entra en juego la cooperación.&lt;br /&gt;Mientras más links mencionen nuestro contenido y/o tengan enlaces al nuestro, más posibilidades de hacernos conocidos por el mundo tenemos! Además es bueno, siempre, colocar la fuente de la cual obtenemos nuestra info, ya que la red de links siempre enriquece el tráfico hacia nuestro sitio.&lt;br /&gt;&lt;br /&gt;Espero sinceramente que estos humildes tips les hayan servido de algo.&lt;br /&gt;&lt;br /&gt;Éxitos con sus emprendimientos web!&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-9086483457394327298?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/9086483457394327298/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/01/tips-para-mejorar-tu-sitio-web-parte-ii.html#comment-form' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/9086483457394327298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/9086483457394327298'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/01/tips-para-mejorar-tu-sitio-web-parte-ii.html' title='Tips para mejorar tu sitio Web - Parte II'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-8479358189876014914</id><published>2010-01-12T18:17:00.000-08:00</published><updated>2010-01-12T19:44:43.767-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='consejos'/><category scheme='http://www.blogger.com/atom/ns#' term='practicas'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='buen diseño'/><title type='text'>Tips para mejorar tu sitio Web - Parte I</title><content type='html'>Hola gente.&lt;br /&gt;&lt;br /&gt;Hoy, a diferencia de los otros post, les voy a dejar un contenido que no es exclusivo de .Net pero que, a mi parecer, es bastante útil para todos los diseñadores web.&lt;br /&gt;&lt;br /&gt;Les voy a dar unos tips para optimizar nuestros sitios on-line. Espero que les venga bien. No se olviden de dejar sus comentarios por favor.&lt;br /&gt;&lt;span style="font-weight:bold;font-decoration:underline"&gt;&lt;br /&gt;1-) Utilizar hojas de estilo, nunca estilizar etiquetas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es algo bastante básico en el diseño actual de sitios web, pero es un error que todavía muchas personas tienen al momento de hacer sus páginas.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Jamás se debe estilizar etiquetas!&lt;/span&gt; Siempre (siempre!) usar ojas de estilo.&lt;br /&gt;Es fundamental tener separado la estructura del sitio de su diseño o estilo. Imaginemos que tenemos un sitio con estilización aplicada a las etiquetas, ¿qué hacemos cuando queramos modificar la interfaz? Vamos a tener que modificar cada una de nuestras páginas en el sitio, algo sin duda molesto y tedioso. En cambio al tener el estilo en nuestra hoja css, sólo basta con modificar el estilo que deseamos cambiar y listo. No es mucho más fácil?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;NO!:&lt;/span&gt;&lt;br /&gt;&amp;lt;p style:=”color: black; font-family:Arial;”&amp;gt;Texto de párrafo con estilo en la etiqueta&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SI:&lt;/span&gt;&lt;br /&gt;CSS:&lt;br /&gt;.estilo1{&lt;br /&gt;color:black;&lt;br /&gt;font-family:Arial;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-decoration:underline"&gt;&lt;br /&gt;2-) Estilos para cada navegador&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Continuando con el tip anterior, como para terminar de optimizar el tema de los estilos, cabe destacar que una buena práctica (tal vez un poco molesta para algunos, pero que vale la pena) es la de hacer hojas de estilo diferentes para cada navegador.&lt;br /&gt;Muchos nos hemos pasado horas renegando con estilos que se ven bien en Internet Explorer pero no en Mozilla Firefox, y una vez que logramos que se vea bien en MFirefox, volvemos al IE y ya perdimos nuestro estilo :(&lt;br /&gt;Una solución práctica a esto es la que acá propongo. Armar dos hojas de estilo e incluir el siguiente código:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;!– [if lte IE 7]&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;link rel=”stylesheet” media=”screen” type=”text/css” href=”estiloparaIE7.css”&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!– [endif]–&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Observemos el código que he dejado. La palabra &lt;span style="font-style:bold;"&gt;lte&lt;/span&gt; significa &lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;L&lt;/span&gt;ess &lt;span style="font-weight:bold;"&gt;T&lt;/span&gt;han or &lt;span style="font-weight:bold;"&gt;E&lt;/span&gt;qual&lt;/span&gt; (igual o menor a). Si en lugar de esto queremos aplicarlo sólo a versiones anterior, se la debe reemplazar por &lt;span style="font-weight:bold;"&gt;lt&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-decoration:underline"&gt;&lt;br /&gt;3-) Declarar el DocType.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Algo no muy aplicado por los diseñadores es la declaración del tipo de documento, y esto es clave para los navegadores, así pueden interpretar correctamente el contenido de nuestras páginas.&lt;br /&gt;Aunque este tip es un poco relativo ya que la mayoría de los programas de diseño web actuales lo escriben automáticamente. Es una de las ventajas con las que contamos los programadores de .Net, ya que Visual Studio lo trae por defecto es las páginas aspx.&lt;br /&gt;Igualmente para aquellos que no utilizan estas herramientas, este tip viene bien. A continuación los ejemplos más comunes:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;!DOCTYPE HTML PUBLIC&amp;#160;&amp;#160;“-//W3C//DTD HTML 4.01//EN” “http://www.w3c.org/TR/html4/strict.dtd”&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3c.org/TR/html4/loose.dtd”&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;!DOCTYPE html PUBLIC”-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd”&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;4-) Utilizar preferentemente PNGs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esto tip es algo que he empezado a aplicar hace poco. Se habrán dado cuenta que cuando tenemos una conexión lenta, las imágenes se cargan desde arriba hacia abajo, quedando a veces a medias y no podemos comprender la imagen en cuestión. Esto se debe a las imágenes JPGs que son las más utilizadas, pero no por ellos las mejores.&lt;br /&gt;El consejo acá es utilizar imágenes con extensión PNG. Este tipo de imágenes tiene un determinado entrelazado que hace que se carguen en &lt;span style="font-style:italic;"&gt;capas&lt;/span&gt;, por lo que si el cliente tiene un ancho de banda reducido, la irá visualizando de a poco "del fondo hacia el frente" (por así decirlo), dando desde el principio una idea del contenido, aunque se vea pixelada.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;5-) Tablas para datos, Divs para diseño&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Recuerdo que uno de los primeros consejos que me dieron el primer día en Raona fue éste.&lt;br /&gt;En otros tiempos era muy común, casi una regla, organizar el diseño en tablas y frames (Si!! Frames!! Jaja :P). Hoy en día, con la evolución del HTML esto es totalmente obsoleto.&lt;br /&gt;La idea de este tip es utilizar bloques o &lt;span style="font-style:italic;"&gt;divs&lt;/span&gt; para la organización del sitio, aplicándole estilo de posicionamiento a estos divs, y dejar las tablas para mostrar información tabular.&lt;br /&gt;&lt;br /&gt;Imaginen que tenemos nuestro diseño basado en tablas. A la hora de cambiar el diseño, tendremos que reescribir nuestra página web (y a quién no le han sacado canas las tablas!), en cambio utilizando divs esto se solucionaría ya sea modificando el estilo que los afecta, o bien cambiarles la clase o id.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;NO!:&lt;/span&gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;lt;td&amp;gt;Superior izquierdo&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;lt;td&amp;gt;Superior derecho&amp;lt;/td&amp;gt;&lt;br /&gt; &amp;lt;/tr&amp;gt;&lt;br /&gt; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;lt;td&amp;gt;Inferior izquierdo&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;lt;td&amp;gt;Inferior derecho&amp;lt;/td&amp;gt;&lt;br /&gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SI:&lt;/span&gt;&lt;br /&gt;&amp;lt;div class="superiorizquierdo"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="superiorderecho"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="inferiorizquierdo"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="inferiorderecho"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;text-decoration:underline;"&gt;6-) Cerrar TODAS las etiquetas (bonus)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Al escribir el tip anterior, me acordé automáticamente de este, por lo que lo dejo de bonus :D.&lt;br /&gt;Tal vez parezca algo tonto, pero muchas veces olvidamos cerrar alguna etiqueta html.&lt;br /&gt;Esta es otra de las ventajas con las que contamos los desarrolladores .Net, ya que es algo que hace automáticamente Visual Studio (y también otros programas). Pero incluso utilizándolos, a veces, al modificar algo que ya escribimos no nos damos cuenta que hemos dejado una etiqueta sin cerrar.&lt;br /&gt;Y esto, aunque a veces no lo notemos, es crucial para la validación de nuestro documento en el navegador.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;NO!:&lt;/span&gt;&lt;br /&gt;&amp;lt;p&amp;gt;Párrafo 1&lt;br /&gt;&amp;lt;p&amp;gt;Párrafo 2&lt;br /&gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;Primer elemento&lt;br /&gt; &amp;lt;li&amp;gt;Segundo elemento&lt;br /&gt; &amp;lt;li&amp;gt;Tercer elemento&lt;br /&gt; &amp;lt;li&amp;gt;Cuarto elemento&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SI:&lt;/span&gt;&lt;br /&gt;&amp;lt;p&amp;gt;Párrafo 1&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Párrafo 2&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;ul&amp;gt&lt;br /&gt; &amp;lt;li&amp;gt;Primer elemento&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;Segundo elemento&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;Tercer elemento&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;Cuarto elemento&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Bueno amigos míos, espero que esto les haya servido. Y les pido me dejen sus dudas o comentarios. Mucha gente pasa por aquí pero pocos son los comentarios.&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-8479358189876014914?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/8479358189876014914/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/01/tips-para-mejorar-tu-sitio-web-parte-i.html#comment-form' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/8479358189876014914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/8479358189876014914'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/01/tips-para-mejorar-tu-sitio-web-parte-i.html' title='Tips para mejorar tu sitio Web - Parte I'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-1729863642771514389</id><published>2010-01-04T14:21:00.000-08:00</published><updated>2010-01-04T15:10:13.419-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='animación'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Tutorial de Introducción a Silverlight</title><content type='html'>Hola Gente, cómo están?&lt;br /&gt;&lt;br /&gt;Antes que nada, les comento que hace un tiempo agregué un contador de visitas a la página y me sorprendió la cantidad de gente que entra.&lt;br /&gt;&lt;br /&gt;No es WOW! Pero entra mucho más de lo que yo imaginaba. Me gustaría que además me dejaran su comentario acerca de si les gustó, les sirvió o si necesitan alguna ayuda con otro tema.&lt;br /&gt;&lt;br /&gt;Disulpen mi demora al actualizar pero estas épocas siempre vienen atareadas.&lt;br /&gt;&lt;br /&gt;Hoy les dejo un pequeño tutorial de cómo empezar con Silverlight. Es todo práctico, si quieren ver teoría les sugiero que busquen fuentes oficiales de Microsoft.&lt;br /&gt;&lt;br /&gt;Es algo muy sencillo, pero que les puede servir para aquello que quieren empezar con Silverlight.&lt;br /&gt;&lt;br /&gt;Let's work!&lt;br /&gt;&lt;br /&gt;Primero y antes que nada crearemos nuestro proyecto. Yo por comodidad elijo el lenguaje C#.&lt;br /&gt;&lt;br /&gt;Seleccionamos Aplicación de SIlverlight. De nombre le pondremos "MiPrimerSilverlight".&lt;br /&gt;&lt;br /&gt;Optamos por la versión 3 de Silverlight y dejamos marcada la opción para generar automáticamente una página para hostear nuestra animación Silverlight.&lt;br /&gt;&lt;br /&gt;Bueno, una vez creado nuestro proyecto podrán ver el código que ha generado VS en nuestra Page.xaml. Debe ser similar al siguiente:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;UserControl x:Class="MiPrimerSilverlight_cs.Page"&lt;br /&gt;&lt;br /&gt; xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt; xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt; xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&lt;br /&gt; xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;br /&gt; mc:Ignorable="d"&lt;br /&gt; d:DesignHeight="300" d:DesignWidth="400"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/Grid&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Si observan ese código verán dos elementos. Un UserControl y una grilla Grid. Bien, para este ejemplo reemplacemos la gilla por el siguiente elemento:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;Canvas x:Name="LayoutRoot" Background="White&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/Canvas&amp;gt;&lt;/code&gt;&lt;br /&gt;Este elemento, no es más que un lienzo que va a contener a nuestra animación.&lt;br /&gt;&lt;br /&gt;Ahora agreguaremos tres elementos a nuestra animación. Primero dos botones:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;Button x:Name="btnComenzar" Canvas.Top="10" Canvas.Left="250" Content="Comenzar" Click="btnComenzar_Click" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button x:Name="btnParar" Canvas.Top="40" Canvas.Left="250" Content="Detener" Click="btnParar_Click"  /&amp;gt;&lt;/code&gt;&lt;span style="font-family:monospace;"&gt;&lt;br /&gt;&lt;/span&gt;Observen las propiedades que hemos seteado para nuestros botones.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Canvas.Top&lt;/span&gt; determina la distancia del botón respecto del Top de nuestro lienzo.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Canvas.Left&lt;/span&gt; determina la distancia del botón respecto de la izquierda de nuestro lienzo.&lt;br /&gt;&lt;br /&gt;En sí, estas son propiedades del método, que se aplican de manera indirecta a nuestros botones. No entraré mucho en detalle, para más info pueden consultar documentación de Silverlight.&lt;br /&gt;&lt;br /&gt;Ahora incluímos nuestro tercer elemento dentro del lienzo. Un círculo.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;Ellipse x:Name="pelota" Fill="Red" Canvas.Top="10" Canvas.Left="100" Height="50" Width="50" /&amp;gt;&lt;/code&gt;&lt;br /&gt;Hasta acá nuestra animación luciría así.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_BMcgIGVCnrM/S0JvsHStp3I/AAAAAAAAAB0/DN2ZPfZ3TmM/s1600-h/imagen1.jpg"&gt;&lt;img style="cursor: pointer; width: 284px; height: 200px;" src="http://2.bp.blogspot.com/_BMcgIGVCnrM/S0JvsHStp3I/AAAAAAAAAB0/DN2ZPfZ3TmM/s320/imagen1.jpg" alt="" id="BLOGGER_PHOTO_ID_5423019704969963378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ok, pero esto no se mueve no?&lt;br /&gt;&lt;br /&gt;Vamos a comenzar con la animación propiamente dicha.&lt;br /&gt;&lt;br /&gt;Primeramente, para ello, crearemos nuestra sección de recursos de la animación si? Entonces agregamos las etiquetas:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;UserControl.Resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/UserControl.Resources&amp;gt;&lt;/code&gt;&lt;br /&gt;Y qué pondremos en ella? Bueno, aquí deberíamos detenernos un ratito a pensar qué es una animación.&lt;br /&gt;Cuando pensamos en animación, pensamos en algo moviéndose, o cambiando de color, ect. Es decir, cambiar las propiedades de un objeto, dentro de un período de tiempo.&lt;br /&gt;Bien ahora pensemos en cómo funciona una animación. Basicamente, en una línea de tiempo no? Y esa línea de tiempo la podemos dividir en pequeñas celdas o fotogramas, en cada uno de los cuales ocurren movimientos y/o acciones.&lt;br /&gt;Teniendo en mente que estos fotogramas, uno al lado de otro forman básicamente la animación, dentro de una o más líneas de tiempo, podemos completar nuestros recursos.&lt;br /&gt;&lt;br /&gt;Primeramente agregamos nuestra "línea de tiempo" (nuevamente les recomiendo que para mayores detalles se remitan a la documentación de Silverlight, estos son simples ejemplos)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;Storyboard x:Key="bounce"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/Storyboard&amp;gt;&lt;/code&gt;&lt;br /&gt;Una vez agregado nuestro Stodyboard, agregaremos en él nuestra primer animación o fotograma como hablamos anteriormente, en este caso por ser una de las más comunes optamos por una DoubleAnimation&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;DoubleAnimation Storyboard.TargetName="pelota"&lt;br /&gt;             Storyboard.TargetProperty="(Canvas.Top)"&lt;br /&gt;             To="250" From="10"  Duration="0:0:2" /&amp;gt;&lt;/code&gt;&lt;br /&gt;Ok, otra vez observemos las propiedades que hemos seteado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Storyboard.TargetName&lt;/span&gt; determina el objeto que se modificará&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Storyboard.TargetProperty&lt;/span&gt; determina la pripiedad que cambiará de dicho objeto&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;From&lt;/span&gt; indica el valor que obtendrá esta propiedad al comenzar el fotograma&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To&lt;/span&gt; indica el valor que obtendrá esta propiedad al terminar el fotograma&lt;br /&gt;Duration determina la duración en HH:MM:SS&lt;br /&gt;&lt;br /&gt;Miremos también que a &lt;span style="font-weight: bold;"&gt;Storyboard.TargetProperty&lt;/span&gt; le hemos puesto un valor entre paréntesis. Esto es por, como mencioné anteriormente, es una propiedad "indirecta".&lt;br /&gt;&lt;br /&gt;Bueno, casi hemos terminado, quedaría ahora asignar acciones a los eventos de los botones para poder ver nuestra animación.&lt;br /&gt;Hasta ahora nuestro código luciría así:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;UserControl x:Class="MiPrimerSilverlight_cs.Page"&lt;br /&gt; xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt; xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt; xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&lt;br /&gt; xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;br /&gt; mc:Ignorable="d"&lt;br /&gt; d:DesignHeight="300" d:DesignWidth="400"&amp;gt;&lt;br /&gt; &amp;lt;UserControl.Resources&amp;gt;&lt;br /&gt;     &amp;lt;DoubleAnimation Storyboard.TargetName="pelota"&lt;br /&gt;             Storyboard.TargetProperty="(Canvas.Top)"&lt;br /&gt;             To="250" From="10"  Duration="0:0:2" /&amp;gt;&lt;br /&gt;     &amp;lt;/Storyboard&amp;gt;&lt;br /&gt; &amp;lt;/UserControl.Resources&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;Canvas x:Name="LayoutRoot" Background="White"&amp;gt;&lt;br /&gt;     &amp;lt;Button x:Name="btnComenzar" Canvas.Top="10" Canvas.Left="250" Content="Comenzar" Click="btnComenzar_Click" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Button x:Name="btnParar" Canvas.Top="40" Canvas.Left="250" Content="Detener" Click="btnParar_Click"  /&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;Ellipse x:Name="pelota" Fill="Red" Canvas.Top="10" Canvas.Left="100" Height="50" Width="50" /&amp;gt;&lt;br /&gt; &amp;lt;/Canvas&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;/code&gt;&lt;br /&gt;Ahora procederemos a modificar el CodeBehind de nuestra animación de Silverlight.&lt;br /&gt;&lt;br /&gt;Primero, en el evento del botón btnComenzar agregamos un objeto de tipo Storyboard y lo instanciamos obteniendo el que creamos anteiormente.&lt;br /&gt;Teniendo este objeto ya, podemos llamar a su método Begin para comenzar la animación&lt;br /&gt;&lt;br /&gt;&lt;code&gt;private void btnComenzar_Click(object sender, RoutedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Storyboard sb = this.Resources["bounce"] as Storyboard;&lt;br /&gt;&lt;br /&gt;            sb.Begin();&lt;br /&gt;&lt;br /&gt;    }&lt;/code&gt;&lt;br /&gt;Haciendo algo casi igual, escribimos el evento del botón btnParar para detener nuestra animación:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;private void btnParar_Click(object sender, RoutedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Storyboard sb = this.Resources["bounce"] as Storyboard;&lt;br /&gt;        sb.Pause();&lt;br /&gt;    }&lt;/code&gt;&lt;br /&gt;Bueno, con esto ya hemos finalizado, nuestro CodeBehind debe lucir así:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.Windows;&lt;br /&gt;using System.Windows.Controls;&lt;br /&gt;using System.Windows.Documents;&lt;br /&gt;using System.Windows.Input;&lt;br /&gt;using System.Windows.Media;&lt;br /&gt;using System.Windows.Media.Animation;&lt;br /&gt;using System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;namespace MiPrimerSilverlight_cs&lt;br /&gt;{&lt;br /&gt;public partial class Page : UserControl&lt;br /&gt;{&lt;br /&gt;    bool isstarted = false;&lt;br /&gt;    public Page()&lt;br /&gt;    {&lt;br /&gt;        InitializeComponent();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;private void btnComenzar_Click(object sender, RoutedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Storyboard sb = this.Resources["bounce"] as Storyboard;&lt;br /&gt;&lt;br /&gt;            sb.Begin();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;private void btnParar_Click(object sender, RoutedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        Storyboard sb = this.Resources["bounce"] as Storyboard;&lt;br /&gt;        sb.Pause();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Eso es todo mis amigos, un ejemplo en demasía simple, pero lindo para comenzar.&lt;br /&gt;&lt;br /&gt;Pronto traeré una pequeña modificación de este código para obtener otros resultados.&lt;br /&gt;&lt;br /&gt;Queda en ustedes también continuar experimentando en base a esto.&lt;br /&gt;&lt;br /&gt;Saludos. Espero sus coments!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-1729863642771514389?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/1729863642771514389/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/01/tutorial-de-introduccion-silverlight_04.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/1729863642771514389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/1729863642771514389'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2010/01/tutorial-de-introduccion-silverlight_04.html' title='Tutorial de Introducción a Silverlight'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BMcgIGVCnrM/S0JvsHStp3I/AAAAAAAAAB0/DN2ZPfZ3TmM/s72-c/imagen1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-626542796933992594</id><published>2009-11-20T05:40:00.000-08:00</published><updated>2009-11-20T05:51:36.539-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stored procedures'/><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><category scheme='http://www.blogger.com/atom/ns#' term='SPs'/><category scheme='http://www.blogger.com/atom/ns#' term='tablas'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='sp'/><title type='text'>Scripts útiles  - Sql Server</title><content type='html'>Buenas! Continuando con el post anterior, hoy les dejo algunos scripts &lt;span style="font-weight: bold;"&gt;muy &lt;/span&gt;sencillos para Sql Server, pero que siempre vienen bien.&lt;br /&gt;&lt;br /&gt;Son muy útiles. A mi me han servido.&lt;br /&gt;&lt;br /&gt;Buscar un campo en una todas las tablas:&lt;br /&gt;&lt;br /&gt;&lt;code style="color: rgb(0, 0, 102);"&gt;SELECT TABLE_NAME,*&lt;br /&gt;FROM INFORMATION_SCHEMA.COLUMNS&lt;br /&gt;WHERE COLUMN_NAME LIKE '%NombreDeCampo%'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Buscar un Stored Procedure por algun fragmento del nombre:&lt;br /&gt;&lt;br /&gt;&lt;code style="color: rgb(0, 0, 102);"&gt;SELECT ROUTINE_NAME, ROUTINE_DEFINITION, *&lt;br /&gt;FROM INFORMATION_SCHEMA.ROUTINES&lt;br /&gt;WHERE ROUTINE_DEFINITION LIKE '%palabraDelStored%'&lt;br /&gt;AND ROUTINE_TYPE='PROCEDURE'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Buscar Stored Procedures por texto:&lt;br /&gt;&lt;br /&gt;&lt;code style="color: rgb(0, 0, 102);"&gt;SELECT distinct&lt;br /&gt;&lt;br /&gt;name SP_Name&lt;br /&gt;&lt;br /&gt;FROM [sysobjects] INNER JOIN [syscomments] ON&lt;br /&gt;&lt;br /&gt;[sysobjects].id = [syscomments].id&lt;br /&gt;&lt;br /&gt;where xtype = 'P'&lt;br /&gt;&lt;br /&gt;and text like '%textoabucar%'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero que les venga bien! Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-626542796933992594?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/626542796933992594/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/11/scripts-utiles-sql-server.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/626542796933992594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/626542796933992594'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/11/scripts-utiles-sql-server.html' title='Scripts útiles  - Sql Server'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-9153962205817337349</id><published>2009-11-12T05:45:00.000-08:00</published><updated>2009-11-12T05:53:21.891-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tabla'/><category scheme='http://www.blogger.com/atom/ns#' term='relacion'/><category scheme='http://www.blogger.com/atom/ns#' term='sql server'/><category scheme='http://www.blogger.com/atom/ns#' term='clave foranea'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='dependencias'/><category scheme='http://www.blogger.com/atom/ns#' term='tablas'/><category scheme='http://www.blogger.com/atom/ns#' term='fk'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>Buscar FKs - Relaciones de Tablas - Sql Server</title><content type='html'>Hoy les dejo un post que les puede resultar muy útil.&lt;br /&gt;&lt;br /&gt;A mi me ha sacado de más de un apuro.&lt;br /&gt;&lt;br /&gt;Suele pasar que a veces trabajamos con bases de datos muy grandes, o que estén mal diseñadas o que simplemente no entendemos por completo su esquema. A mi me ha pasado en el trabajo con una base de datos diseñada fuera de Raona.&lt;br /&gt;&lt;br /&gt;En trabajos como este necesitamos buscar información determinada, y nos pasamos recorriendo tablas y tablas.&lt;br /&gt;&lt;br /&gt;Para evitar esto les dejo un script SQL, para SQL Server, para encontrar tablas con FKs que apuntan a una tabla que nosotros queramos. Este script nos devuelve la tabla donde se encuentra la clave foránea, la columna de la FK y además el nombre de la constraint.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;-- RELACION DE TABLA (DEPENDENCIAS)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;SELECT &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    FK_Table  = FK.TABLE_NAME, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    FK_Column = CU.COLUMN_NAME, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    PK_Table  = PK.TABLE_NAME, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    PK_Column = PT.COLUMN_NAME, &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    ConstraintName = C.CONSTRAINT_NAME &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;FROM &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INNER JOIN &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;        ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INNER JOIN &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;        ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INNER JOIN &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;        ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    INNER JOIN &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    ( &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;      SELECT &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;            TC.TABLE_NAME, CU.COLUMN_NAME &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;      FROM &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;      INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;      INNER JOIN &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;      INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;      ON TC.CONSTRAINT_NAME = CU.CONSTRAINT_NAME &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;      WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY' &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    ) PT &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;    ON PT.TABLE_NAME = PK.TABLE_NAME &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;WHERE &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;PK.TABLE_NAME = 'SALESORDERHEADER' -- TU TABLA&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero sinceramente que le sirva a alguien!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-9153962205817337349?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/9153962205817337349/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/11/buscar-fks-relaciones-de-tablas-sql.html#comment-form' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/9153962205817337349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/9153962205817337349'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/11/buscar-fks-relaciones-de-tablas-sql.html' title='Buscar FKs - Relaciones de Tablas - Sql Server'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-6705719459080738821</id><published>2009-11-03T20:54:00.000-08:00</published><updated>2009-11-23T08:34:48.370-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='itextsharp'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>ItextSharp - Escribiendo PDF en .Net</title><content type='html'>La semana pasada tuve que trabajar en una aplicación que generara un reporte en formato PDF, con datos obtenidos de una BBDD.&lt;br /&gt;&lt;br /&gt;Es algo muy útil y práctico.&lt;br /&gt;&lt;br /&gt;A continuación les dejo una explicación de cómo pueden generar archivos PDF desde .Net utilizando la biblioteca &lt;a href="http://sourceforge.net/projects/itextsharp/"&gt;itextsharp&lt;/a&gt; que la pueden usar en forma gratuita.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Let's go!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Primero, añadimos a nuestro proyecto una referencia a esta biblioteca (este paso no lo voy a explicar ya que es muy sencillo, si alguien no sabe como hacerlo que me pregunte).&lt;br /&gt;&lt;br /&gt;Ahora agregamos a nuestro código:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;using iTextSharp.text;&lt;br /&gt;using iTextSharp.text.pdf;&lt;br /&gt;using iTextSharp.text.xml;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;namespace PDFApp&lt;br /&gt;{&lt;br /&gt;public class Query&lt;br /&gt;{&lt;br /&gt; public static XmlDocument ExecuteQuery(SqlCommand cmd, ref SqlTransaction trans)&lt;br /&gt; {&lt;br /&gt;   if( cmd == null )&lt;br /&gt;     throw new ArgumentNullException("cmd", "El comando no puede ser null.");&lt;br /&gt;   if( trans == null )&lt;br /&gt;     throw new ArgumentNullException("trans", "La transaccion no puede ser null.");&lt;br /&gt;&lt;br /&gt;   XmlNode xmlrow = null;&lt;br /&gt;   XmlReader xmlreader = null;&lt;br /&gt;   XmlDocument xmldoc = null;&lt;br /&gt;   xmldoc = new XmlDocument();&lt;br /&gt;   xmldoc.LoadXml("&lt;root&gt;");&lt;br /&gt;   xmlreader = cmd.ExecuteXmlReader();&lt;br /&gt;   xmlrow = xmldoc.ReadNode(xmlreader);&lt;br /&gt;   while ( xmlrow != null )&lt;br /&gt;   {&lt;br /&gt;     xmldoc.DocumentElement.AppendChild(xmlrow);&lt;br /&gt;     xmlrow = xmldoc.ReadNode(xmlreader);&lt;br /&gt;   }&lt;br /&gt;   xmlreader.Close();&lt;br /&gt;   return xmldoc;&lt;br /&gt; }&lt;br /&gt; public static XmlDocument ExecuteQuery(SqlCommand cmd, SqlConnection conn)&lt;br /&gt; {&lt;br /&gt;   XmlDocument xmldoc = null;&lt;br /&gt;   SqlTransaction trans = null;&lt;br /&gt;   if ( conn != null )&lt;br /&gt;   {&lt;br /&gt;     if ( conn.State != ConnectionState.Open )&lt;br /&gt;     {&lt;br /&gt;        conn.Open();&lt;br /&gt;     }&lt;br /&gt;     cmd.Connection = conn;&lt;br /&gt;   }&lt;br /&gt;   else&lt;br /&gt;   {&lt;br /&gt;     throw new ArgumentNullException("cmd", "El comando no puede ser null.");&lt;br /&gt;   }&lt;br /&gt;   trans = cmd.Connection.BeginTransaction();&lt;br /&gt;   xmldoc = new XmlDocument();&lt;br /&gt;   xmldoc.LoadXml("&lt;root&gt;");&lt;br /&gt;   try   &lt;br /&gt;   {&lt;br /&gt;     cmd.Transaction = trans;&lt;br /&gt;     xmldoc = ExecuteQuery(cmd, ref trans);&lt;br /&gt;     trans.Commit();&lt;br /&gt;   }&lt;br /&gt;   catch (Exception ex)&lt;br /&gt;   {&lt;br /&gt;     trans.Rollback();&lt;br /&gt;     throw ex;&lt;br /&gt;   }&lt;br /&gt;   return xmldoc;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/root&gt;&lt;/root&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y ahora ponemos lo siguiente en el código del evento de un botón de nuestra página.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Document document = new Document(PageSize.A4, 90f, 50f, 90f, 60f);&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt; XmlDocument Doc = new XmlDocument();&lt;br /&gt; SqlConnection cnx = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BASEDEDATOS;Data Source=SERVIDORSQL");&lt;br /&gt;&lt;br /&gt; //Este es un ejemplo que toma datos de una tabla personas,&lt;br /&gt; //Es muy importante poner "for xml raw  !!!&lt;br /&gt; SqlCommand cmd = new sqlcommand("select * from personas for xml raw");&lt;br /&gt;&lt;br /&gt; cmd.Connection = cnx;&lt;br /&gt; Doc = Query.ExecuteQuery(cmd, cnx);&lt;br /&gt;&lt;br /&gt;     // Configuración del documento PDF&lt;br /&gt;&lt;br /&gt;     string FullPathOut = "c:\\SalidaPDF.pdf";&lt;br /&gt;     PdfWriter.getInstance(document, new filestream(fullpathout, filemode.create));&lt;br /&gt;&lt;br /&gt;     // Fonts y colores&lt;br /&gt;&lt;br /&gt;     Font font_celdas = FontFactory.getFont(FontFactory.HELVETICA, 8, Font.NORMAL);&lt;br /&gt;     Font font_titulo_tabla = FontFactory.getFont(FontFactory.HELVETICA, 9, Font.BOLD,&lt;br /&gt;new Color(255,255,255));&lt;br /&gt;     Color color_negro = new color(0, 0, 0);&lt;br /&gt;     document.Open();&lt;br /&gt;     Table table = new Table(3);&lt;br /&gt;     table.BorderWidth = 0;&lt;br /&gt;     table.BorderColor = color_negro;&lt;br /&gt;     table.Padding = 1;&lt;br /&gt;     table.Spacing = 1;&lt;br /&gt;     Cell titulo = new cell(new Phrase("Datos de la tabla", font_titulo_tabla));&lt;br /&gt;     titulo.Header = true ;&lt;br /&gt;     titulo.BackgroundColor = color_negro;&lt;br /&gt;     titulo.Colspan = 3;&lt;br /&gt;     table.addCell(titulo);&lt;br /&gt;     table.addCell(new Phrase("Nombre", font_celdas));&lt;br /&gt;     table.addCell(new Phrase("Num. Documento", font_celdas));&lt;br /&gt;     table.addCell(new Phrase("Teléfono", font_celdas));&lt;br /&gt;     table.endHeaders();&lt;br /&gt;     foreach(xmlelement elem in Doc.SelectNodes("/ROOT/row"))&lt;br /&gt;     {&lt;br /&gt;        table.addCell(new Phrase(Elem.GetAttribute("Columna1"), font_celdas));&lt;br /&gt;        table.addCell(new Phrase(Elem.GetAttribute("Columna2"), font_celdas));&lt;br /&gt;        table.addCell(new Phrase(Elem.GetAttribute("Columna3"), font_celdas));&lt;br /&gt;     }&lt;br /&gt;     document.Add(table);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;catch (XmlException xex)&lt;br /&gt;   {&lt;br /&gt;     throw new Exception(xex.Message);&lt;br /&gt;   }&lt;br /&gt;   catch (DocumentException de)&lt;br /&gt;   {&lt;br /&gt;     throw new Exception(de.Message);&lt;br /&gt;   }&lt;br /&gt;   catch (IOException ioe)&lt;br /&gt;   {&lt;br /&gt;     throw new Exception(ioe.Message);&lt;br /&gt;   }&lt;br /&gt;   finally&lt;br /&gt;   {&lt;br /&gt;     document.Close();&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero que les sirva! En la próxima continuaré con este tema!&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-6705719459080738821?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/6705719459080738821/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/11/itextsharp-escribiendo-pdf-en-net.html#comment-form' title='9 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/6705719459080738821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/6705719459080738821'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/11/itextsharp-escribiendo-pdf-en-net.html' title='ItextSharp - Escribiendo PDF en .Net'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-2160980723940096278</id><published>2009-10-21T05:28:00.000-07:00</published><updated>2009-10-21T05:51:40.360-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='post'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='metodo'/><category scheme='http://www.blogger.com/atom/ns#' term='formulario'/><title type='text'>Pasar datos por método POST a terceros</title><content type='html'>Bueno, un problema que se me presentó trabajando con Asp.net fue en un sitio que tenía que pasar por método POST ciertos datos a una página de pagos electrónicos.&lt;br /&gt;&lt;br /&gt;La forma más práctica de pasar datos entre páginas aspx con el método POST es la que se detalla en esta página de forma sencilla:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://netcodigo.webinfo.es/2006/10/10/pasar-datos-entre-paginas-web-asp-net-20/"&gt;NetCodigo.webinfo.es&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora, esto en el caso que yo describo no sirve, ya que no soy yo quien maneja los datos en la página destino, sino un tercero que espera que se los mande por POST.&lt;br /&gt;&lt;br /&gt;Para solucionar esto escribí la siguiente clase, si alguno de ustedes se les presenta el mismo problema no tienen más que copiar/pegar el siguiente código (y después leerlo, obviamente jeje)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Configuration;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Security;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.HtmlControls;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Web.UI.WebControls.WebParts;&lt;br /&gt;using System.Xml.Linq;&lt;br /&gt;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Esta clase genera los formularios para mandar por post los datos a otras páginas&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public class RemotePost&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Collections.Specialized.NameValueCollection _Inputs = new System.Collections.Specialized.NameValueCollection();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string _Url = "";&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string _Method = "post";&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string _FormName = "form1";&lt;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// Devuelve o setea la url del medio de pago&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public string Url&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get {return _Url;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set {_Url = value;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// Agrega inputs hidden al formulario&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;param name="name"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;param name="value"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public void Add(string name, string value)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;_Inputs.Add(name,value);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// Imprime en el cliente el formulario de compra&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public void Post()&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Web.HttpContext.Current.Response.Clear();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Web.HttpContext.Current.Response.Write("");&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Web.HttpContext.Current.Response.Write(String.Format("&amp;lt; html &amp;gt;&amp;lt; head &amp;gt;&amp;lt; /head &amp;gt;&amp;lt; body onload="\" &amp;gt;", _FormName));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Web.HttpContext.Current.Response.Write(String.Format("&amp;lt;center&amp;gt;&amp;lt;form target="\" name="\" method="\" action="\"&amp;gt;", _FormName, _Method, Url));&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;for (int i = 0; i &amp;lt; _Inputs.Keys.Count; i++)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Web.HttpContext.Current.Response.Write(String.Format("&amp;lt;input name="\" type="\" value="\"&amp;gt;", _Inputs.Keys[i], _Inputs[_Inputs.Keys[i]]));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Web.HttpContext.Current.Response.Write("&amp;lt;/form&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;")&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Bien, ¿y cómo se usa esto?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;protected void Button1_Click(object sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        RemotePost myremotepost = new RemotePost();&lt;br /&gt;        myremotepost.Url = "URL DE DESTINO";&lt;br /&gt;        myremotepost.Add("NombreItem", "ValorItem");&lt;br /&gt;        myremotepost.Add("NombreItem2", "ValorItem2");&lt;br /&gt;        myremotepost.Add("NombreIntem3", "ValorItem3");&lt;br /&gt;        myremotepost.Post();&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Espero que esto les pueda servir! Cualquier duda consulten!&lt;br /&gt;&lt;br /&gt;Espero sus comentarios!&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-2160980723940096278?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/2160980723940096278/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/10/bueno-un-problema-que-se-me-presento.html#comment-form' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/2160980723940096278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/2160980723940096278'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/10/bueno-un-problema-que-se-me-presento.html' title='Pasar datos por método POST a terceros'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-5218008442919189653</id><published>2009-10-19T20:39:00.001-07:00</published><updated>2009-10-19T20:41:06.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><category scheme='http://www.blogger.com/atom/ns#' term='colegio'/><title type='text'></title><content type='html'>Un pequeño post de humor hoy,&lt;br /&gt;&lt;br /&gt;Siempre viene bien un momento de distracción!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_BMcgIGVCnrM/St0xE9nYkzI/AAAAAAAAABs/nJjzajbvjCc/s1600-h/comic.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 107px;" src="http://3.bp.blogspot.com/_BMcgIGVCnrM/St0xE9nYkzI/AAAAAAAAABs/nJjzajbvjCc/s320/comic.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5394521889988711218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-5218008442919189653?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/5218008442919189653/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/10/un-pequeno-post-de-humor-hoy-siempre.html#comment-form' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/5218008442919189653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/5218008442919189653'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/10/un-pequeno-post-de-humor-hoy-siempre.html' title=''/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BMcgIGVCnrM/St0xE9nYkzI/AAAAAAAAABs/nJjzajbvjCc/s72-c/comic.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-1903891593773933505</id><published>2009-10-14T13:22:00.000-07:00</published><updated>2009-10-14T14:41:40.668-07:00</updated><title type='text'>Carrito de compras</title><content type='html'>Un trabajo que tuve que hacer en la universidad fue un sitio de ventas de artículo electrónicos.&lt;br /&gt;&lt;br /&gt;Una buena implementación de un carrito son las variables de sesión (siempre que no se quiera un carrito persistente obviamente).&lt;br /&gt;&lt;br /&gt;Lo recomendable siempre en este tipo de sitios es tener un modelo de tres capas, separando diseño, lógica y acceso a datos.&lt;br /&gt;&lt;br /&gt;Visto de este modo necesitaremos una clase que maneje la lógica de negocios del carrito.&lt;br /&gt;&lt;br /&gt;Para acceder a las variables de sesión desde una clase se debe usar lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;HttpContext&lt;/span&gt;.Current.Session["NombreClave"]&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;También un punto a no olvidar es que hay que establecer en el archivo global.asax que al inicio de cada sesión el carrito no tiene productos cargardos.&lt;br /&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 153);font-family:arial;font-size:78%;"  &gt;void Session_Start(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    Session.Clear();&lt;br /&gt;    Session["TotalArts"] = 0;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Bueno, sin más, les dejo el código de nuestra clase para la lógica del carrito de compras:&lt;br /&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 153);font-family:arial;font-size:78%;"  &gt;using System;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Security;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.HtmlControls;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Web.UI.WebControls.WebParts;&lt;br /&gt;using System.Xml.Linq;&lt;br /&gt;using System.Web.SessionState;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Clase que maneja el carrito de compras&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;&lt;br /&gt;namespace BLL&lt;br /&gt;{&lt;br /&gt;public class ShoppingCart&lt;br /&gt;{&lt;br /&gt;public ShoppingCart()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Devuelve la cantidad de artículos que se van a comprar&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;public static int TotalActiveArts&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;int count = 0;&lt;br /&gt;&lt;br /&gt;for (int i = 1; i &lt;= Convert.ToInt32(System.Web.HttpContext.Current.Session["TotalArts"]); i++) { if (HttpContext.Current.Session["IdArt" + i.ToString()].ToString() != "0") count++; } return count; } } /// &lt;summary&gt;&lt;br /&gt;/// Devuelve el total de los artículos guardados en sesión&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;private static int TotalArts&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;return Convert.ToInt32(System.Web.HttpContext.Current.Session["TotalArts"]);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public static void AddArtInCart(int categoryId, string name, string description, string urlImage, decimal price, int memberId)&lt;br /&gt;{&lt;br /&gt;HttpContext.Current.Session["TotalArts"] = TotalArts + 1;&lt;br /&gt;HttpContext.Current.Session["CategoryIdArt" + TotalArts.ToString()] = categoryId;&lt;br /&gt;HttpContext.Current.Session["NameArt" + TotalArts.ToString()] = name;&lt;br /&gt;HttpContext.Current.Session["DescriptionArt" + TotalArts.ToString()] = description;&lt;br /&gt;HttpContext.Current.Session["UrlImg" + TotalArts.ToString()] = urlImage;&lt;br /&gt;HttpContext.Current.Session["PriceArt" + TotalArts.ToString()] = price;&lt;br /&gt;HttpContext.Current.Session["IdArt" + TotalArts.ToString()] = 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Guarda cada uno de los artículos en la BD.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;public static void Purchase()&lt;br /&gt;{&lt;br /&gt;for (int i = 1; i &lt;= TotalArts; i++) { if (HttpContext.Current.Session["IdArt" + i.ToString()].ToString() != "0") { HttpContext.Current.Session["IdArt" + i.ToString()] = /*MÉTODO DE ALTA DE ARTÍCULO*/ ; } } } /// &lt;summary&gt;&lt;br /&gt;/// Borra los artículos de la sesión. Devuelve un string con un mensaje al usuario.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;public static string Payed()&lt;br /&gt;{&lt;br /&gt;string state = "Gracias";&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;for (int i = 1; i &lt;= TotalArts; i++) { HttpContext.Current.Session.Remove("TotalArts"); HttpContext.Current.Session.Remove("CategoryIdArt"); HttpContext.Current.Session.Remove("NameArt"); HttpContext.Current.Session.Remove("DescriptionArt"); HttpContext.Current.Session.Remove("UrlImg"); HttpContext.Current.Session.Remove("PriceArt"); HttpContext.Current.Session.Remove("IdArt"); HttpContext.Current.Session.Remove("TotalArts"); } } catch { state = "Ha habido un problema con el registro de tu compra"; } return state; } /// &lt;summary&gt;&lt;br /&gt;/// Devuelve la tabla con los artículos activos en la sesión&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;public static DataTable ShopTable()&lt;br /&gt;{&lt;br /&gt;DataTable dt = new DataTable();&lt;br /&gt;&lt;br /&gt;DataColumn[] dcColumns = new DataColumn[3];&lt;br /&gt;&lt;br /&gt;dt.Columns.Add("Id");&lt;br /&gt;dt.Columns.Add("Artículo");&lt;br /&gt;dt.Columns.Add("Precio");&lt;br /&gt;&lt;br /&gt;dt.Columns.AddRange(dcColumns);&lt;br /&gt;&lt;br /&gt;for (int i = 1; i &lt;= TotalArts; i++) { if (HttpContext.Current.Session["IdArt" + i.ToString()].ToString() != "0") { DataRow dr = dt.NewRow(); dr["Id"] = HttpContext.Current.Session["IdArt" + i.ToString()].ToString(); dr["Artículo"] = HttpContext.Current.Session["TitleArt" + i.ToString()].ToString(); dr["Precio"] = HttpContext.Current.Session["PriceArt" + i.ToString()].ToString(); dt.Rows.Add(dr); } } return dt; } } }&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;br /&gt;Para los que estén interesados en un sitio de compras, pronto iré agregando más info útil, sobre todo enfocada a la BLL y la DAL.&lt;br /&gt;&lt;br /&gt;Espero que les sirva!&lt;br /&gt;&lt;br /&gt;Saludos!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-1903891593773933505?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/1903891593773933505/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/10/carrito-de-compras.html#comment-form' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/1903891593773933505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/1903891593773933505'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/10/carrito-de-compras.html' title='Carrito de compras'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-4406542411760010103</id><published>2009-09-23T18:53:00.000-07:00</published><updated>2009-09-23T20:10:41.762-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seguridad'/><category scheme='http://www.blogger.com/atom/ns#' term='membership'/><category scheme='http://www.blogger.com/atom/ns#' term='role'/><category scheme='http://www.blogger.com/atom/ns#' term='site administration tool'/><title type='text'>Seguridad en Asp.Net</title><content type='html'>Hola!&lt;br /&gt;Uno de los primeros trabajos que tuve que hacer fue implementar la seguridad en un sitio Web.&lt;br /&gt;En la universidad sólo había aprendido a manejar membresías, roles y demás sólo por código, lo que lleva cierto tiempo. Pero &lt;span style="font-weight: bold;"&gt;Visual Studio&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;2008&lt;/span&gt; nos proporciona herramientas fantásticas para poder realizar un sitio completamente seguro, con autenticación y autorización sin practicamente tocar código.&lt;br /&gt;&lt;br /&gt;Usaremos controles de Login y el &lt;span style="font-style: italic;"&gt;Site Administration Tool&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Primeramente debemos crear una página de Login.&lt;br /&gt;&lt;br /&gt;Alli insertaremos un LoginView.&lt;br /&gt;Como verán este control posee dos vistas: una para el usuario anónimo y otra para el usuario autenticado.&lt;br /&gt;En la vista del usuario anónimo insertaremos un control de Login, que hace nada más (ni nada menos) que pedir al usuario sus credenciales.&lt;br /&gt;Ahora cambiaremos a la vista de usuario autenticado e insertaremos algún mensaje de bienvenida.&lt;br /&gt;&lt;br /&gt;Ahora procederemos a crear una página de Registro para nuestros usuarios, donde insertaremos un CreateUserWizard, este control pide los datos necesarios para que el usuario se registre en nuestra página.&lt;br /&gt;&lt;br /&gt;Con las páginas básicas ya creadas, vamos a proceder a insertar carpetas en nuestro sitio, en donde diferenciaremos el contenido al que pueden acceder los usuarios, según sus roles.&lt;br /&gt;&lt;br /&gt;En este ejemplo, yo agrego las carpetas &lt;span style="font-style: italic;"&gt;Administradores&lt;/span&gt; y la carpeta &lt;span style="font-style: italic;"&gt;Usuarios&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_BMcgIGVCnrM/SrrYGGAtW8I/AAAAAAAAABU/hZ6NJ4edn8g/s1600-h/blog1.jpg"&gt;&lt;img style="cursor: pointer; width: 318px; height: 242px;" src="http://2.bp.blogspot.com/_BMcgIGVCnrM/SrrYGGAtW8I/AAAAAAAAABU/hZ6NJ4edn8g/s320/blog1.jpg" alt="" id="BLOGGER_PHOTO_ID_5384853903679249346" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_BMcgIGVCnrM/SrrYGqw0cJI/AAAAAAAAABc/hQacEXLS3G4/s1600-h/blog2.jpg"&gt;&lt;img style="cursor: pointer; width: 319px; height: 172px;" src="http://3.bp.blogspot.com/_BMcgIGVCnrM/SrrYGqw0cJI/AAAAAAAAABc/hQacEXLS3G4/s320/blog2.jpg" alt="" id="BLOGGER_PHOTO_ID_5384853913544716434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bien, ahora en dichos directorios agregaremos páginas y contenidos para los usuarios que pueden acceder.&lt;br /&gt;&lt;br /&gt;Una vez hecho esto abrimos el Site Administration Tool.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_BMcgIGVCnrM/SrrbCXtIKQI/AAAAAAAAABk/UZA8j7wRFT0/s1600-h/blog3.jpg"&gt;&lt;img style="cursor: pointer; width: 319px; height: 172px;" src="http://2.bp.blogspot.com/_BMcgIGVCnrM/SrrbCXtIKQI/AAAAAAAAABk/UZA8j7wRFT0/s320/blog3.jpg" alt="" id="BLOGGER_PHOTO_ID_5384857138244364546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Allí vamos a la pestaña de Seguridad y elegimos la opción de usar el Asistente para configurar la Seguridad paso a paso.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;El paso 1&lt;/span&gt; es sólo una bienvenida a la herramienta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 2:&lt;/span&gt; Seleccionamos &lt;span style="font-style: italic;"&gt;Desde internet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 3:&lt;/span&gt; Lo dejamos con la configuración que nos muestro&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 4:&lt;/span&gt; Habilitamos los roles, click en siguiente y creamos los roles &lt;span style="font-style: italic;"&gt;Admin &lt;/span&gt;y&lt;span style="font-style: italic;"&gt; Usuario&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 5:&lt;/span&gt; Creamos el usuario admin.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 6:&lt;/span&gt; En este paso estableceremos el acceso que tienen los roles a las carpetas.&lt;br /&gt;&lt;br /&gt;  Primero expandimos la carpeta del sitio.&lt;br /&gt;  Luego seleccionamos la carpeta Administradores, buscamos el rol Admin, tildamos Permitir (Allow) y clickeamos el botón para agregar la regla.&lt;br /&gt;&lt;br /&gt;  De la misma forma le denegaremos el acceso a todos los usuarios a la carpeta Admin, le permitimos a  &lt;span style="font-style: italic;"&gt;Usuarios &lt;/span&gt;a la carpeta Usuarios y le denegamos el acceso a esta carpeta a usuarios anónimos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 7:&lt;/span&gt; Finalizamos&lt;br /&gt;&lt;br /&gt;Ahora vamos a Administrar usuarios (Manage Users) e insertamos el Usuario Admin en el rol Admin.&lt;br /&gt;&lt;br /&gt;Salimos de la Herramienta de Administración.&lt;br /&gt;&lt;br /&gt;Como podrán observar, en la carpeta App_Data se ha agregado la Base de Datos con nuestros usuarios, en otro post explicaré cómo transladar esta base fuera de la aplicación.&lt;br /&gt;&lt;br /&gt;Listo!&lt;br /&gt;&lt;br /&gt;Ya tenemos nuestro sitio seguro! Queda en ustedes agregar el contenido del sitio obviamente.&lt;br /&gt;&lt;br /&gt;Le recomiendo que hechen un vistazo a los demás controles de Login, son &lt;span style="font-weight: bold;"&gt;extremadamente&lt;/span&gt;&lt;br /&gt;útiles, muy prácticos y fáciles de usar.&lt;br /&gt;&lt;br /&gt;Se habrán dado cuenta que no hemos tocado ni una sóla línea de código.&lt;br /&gt;Es algo bastante básico, pero que nos ahorra tiempo a la hora de programar una aplicación.&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-4406542411760010103?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/4406542411760010103/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/09/seguridad-en-aspnet.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/4406542411760010103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/4406542411760010103'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/09/seguridad-en-aspnet.html' title='Seguridad en Asp.Net'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_BMcgIGVCnrM/SrrYGGAtW8I/AAAAAAAAABU/hZ6NJ4edn8g/s72-c/blog1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1834718609066569382.post-3613338396962541625</id><published>2009-09-22T21:01:00.000-07:00</published><updated>2009-09-23T04:50:42.909-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='codigo davinci'/><category scheme='http://www.blogger.com/atom/ns#' term='primer post'/><title type='text'>Bienvenidos!</title><content type='html'>Hola!&lt;br /&gt;Con este post doy inicio a mi blog.&lt;br /&gt;El contenido va a estar basado principalmente en la resolución de problemas que me han surgido en la programación, ya sea como estudiante o como profesional (recientemente iniciado, pero con mucho entusiasmo) . También incluiré alguna que otra anécdota, artículos que me parezcan interesantes, e incluso algún material humorístico; que sirva como "cable a tierra" cuando uno se enreda con la programación.&lt;br /&gt;&lt;br /&gt;Espero poder logra de esto algo ameno, y más que nada me gustaría poder aportarles algo de mis vivencias, sobre todo a estudiantes de carreras informáticas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Porqué "Código DaVinci PuntoNet"?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DaVinci era un hombre adelantado a su época. Un visionario absoluto. Un genio brillante, que encontró un equilibrio entre el arte y la ciencia.&lt;br /&gt;Realmente admiro el trabajo de este hombre.&lt;br /&gt;&lt;br /&gt;Y jugando un poco con su nombre, el libro de Dan Brown, y aquello con lo que nos ensuciamos las manos todos los días: "EL CÓDIGO", surge el nombre de este blog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gracias! Los espero por acá!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1834718609066569382-3613338396962541625?l=codigodavincipuntonet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codigodavincipuntonet.blogspot.com/feeds/3613338396962541625/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/09/bienvenidos.html#comment-form' title='8 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/3613338396962541625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1834718609066569382/posts/default/3613338396962541625'/><link rel='alternate' type='text/html' href='http://codigodavincipuntonet.blogspot.com/2009/09/bienvenidos.html' title='Bienvenidos!'/><author><name>Marcos</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/-5ZQaraF6S8s/TpjP-y0AY9I/AAAAAAAAAEk/AvO8rA5kuEg/s1600/photo.jpg%253Fsz%253D200'/></author><thr:total>8</thr:total></entry></feed>
