<?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-4633064268247960727</id><updated>2011-12-04T18:19:18.230-08:00</updated><category term='pdflatex'/><category term='orderby'/><category term='getwindowtext'/><category term='diagramas'/><category term='development'/><category term='latex'/><category term='documentos pdf'/><category term='texlive'/><category term='vs2008'/><category term='use case'/><category term='api'/><category term='bios'/><category term='coportamiento'/><category term='win32'/><category term='sqlserver'/><category term='miktex portable'/><category term='multi'/><category term='analisis'/><category term='aptanastudio'/><category term='configurar'/><category term='transform'/><category term='fstab'/><category term='2008'/><category term='multibinding'/><category term='plsql'/><category term='table'/><category term='invalid statement'/><category term='ogg'/><category term='GetWindowThreadProcessId'/><category term='karmic koala'/><category term='gnu/linux'/><category term='casos de uso'/><category term='programacion'/><category term='firefox lento  ASP.NET Development Server'/><category term='anular'/><category term='moleskinformatico'/><category term='gnu.ntfs'/><category term='lambda'/><category term='CloseHandle'/><category term='describe.limit'/><category term='table from file'/><category term='patron'/><category term='design'/><category term='asp.net'/><category term='smbios/dmi'/><category term='framework'/><category term='ubuntu'/><category term='distinct'/><category term='json'/><category term='monkey&apos;s audio'/><category term='svn'/><category term='subversion'/><category term='this'/><category term='gwl_style'/><category term='enlazar'/><category term='poo'/><category term='cliente'/><category term='net'/><category term='tex'/><category term='funcion'/><category term='delegados'/><category term='apis'/><category term='desc'/><category term='metodos'/><category term='8.10'/><category term='ashx'/><category term='iso'/><category term='getforegroundwindow'/><category term='bd'/><category term='anonimo'/><category term='desbloquear HR'/><category term='3g'/><category term='instalacion oracle en ubuntu'/><category term='3.5'/><category term='cuetag'/><category term='uml'/><category term='control de versiones'/><category term='image'/><category term='mubuntu 8.10development'/><category term='instalar'/><category term='asc'/><category term='hardware'/><category term='update'/><category term='diagramas de interaccion'/><category term='getwindowlong'/><category term='responsability'/><category term='split ape'/><category term='user32'/><category term='prop¡edades'/><category term='objetos javascript'/><category term='keypress'/><category term='metodo'/><category term='incrementar swap'/><category term='validar'/><category term='create'/><category term='properties'/><category term='builder'/><category term='jquery'/><category term='sql'/><category term='colaboracion'/><category term='ivalueconverter'/><category term='wpf'/><category term='behavior'/><category term='flac'/><category term='wav'/><category term='interopServices'/><category term='split flac'/><category term='cuetools'/><category term='ipv6'/><category term='show'/><category term='como saber'/><category term='kernel32.dll'/><category term='visual'/><category term='xaml'/><category term='lossless'/><category term='setwindowtext'/><category term='ibex'/><category term='tabla'/><category term='web'/><category term='ipv4'/><category term='tecla'/><category term='imultivalueconverter'/><category term='desarrollo'/><category term='tortoise'/><category term='method'/><category term='functions'/><category term='leslie lamport'/><category term='montar'/><category term='insert'/><category term='localhost'/><category term='c#'/><category term='tabla temporal'/><category term='shnsplit'/><category term='donald knuth'/><category term='render'/><category term='js'/><category term='flac to ogg'/><category term='function'/><category term='.net'/><category term='acetoneiso'/><category term='psapi.dll'/><category term='VBoxManage'/><category term='diseño'/><category term='conversión de audio'/><category term='xp'/><category term='facade'/><category term='codigo'/><category term='xml'/><category term='abstract'/><category term='tabla desde archivo'/><category term='virtualbox'/><category term='shell32'/><category term='select'/><category term='of'/><category term='secuencia'/><category term='mysql'/><category term='findwindow'/><category term='from'/><category term='contravarianza'/><category term='callback'/><category term='twoway'/><category term='multimedia'/><category term='intrepid'/><category term='oracle'/><category term='imagen'/><category term='cadena'/><category term='encapsulacion'/><category term='covarianza'/><category term='software'/><category term='inserting'/><category term='html'/><category term='hwnd'/><category term='factory'/><category term='extraIconEx'/><category term='updating'/><category term='handler genérico'/><category term='studio'/><category term='base de datos'/><category term='delegate'/><category term='ide'/><category term='jlrvpuma'/><category term='enter'/><category term='getModuleFileNameEx'/><category term='oracle xe'/><category term='miktex'/><category term='javascript'/><category term='9.10'/><category term='particion'/><category term='converter'/><category term='gof'/><category term='ventana'/><category term='documentos presentables'/><category term='viisual'/><category term='latex en windows'/><category term='form'/><category term='typesetting beautiful documents'/><category term='python'/><category term='javascriptserializer'/><category term='handle'/><category term='debian'/><category term='bios.smbios'/><category term='windows'/><category term='ape'/><category term='monodevelop'/><category term='database'/><category term='apache'/><category term='linux'/><category term='openprocess'/><category term='dmi'/><category term='fancybox'/><category term='php'/><category term='accesar a servidor en virtualbox'/><category term='chain'/><category term='mount'/><category term='trigger'/><category term='objects'/><category term='call parent window function from iframe fancybox'/><category term='oop'/><category term='servidor'/><category term='nero'/><category term='sum avg min max'/><category term='2005'/><category term='oracle dinamico'/><category term='ora-00900'/><category term='sfdisk'/><category term='oggenc'/><category term='enumwindow'/><category term='after insert'/><category term='formulario'/><category term='3.0'/><category term='responsabilidad'/><category term='pattern'/><category term='modelado de negocios'/><category term='windows7'/><category term='creacion'/><category term='dmidecode'/><category term='data'/><category term='aptana'/><category term='memoria de intercambio'/><category term='db'/><category term='oneway'/><category term='binding'/><title type='text'>Apuntes de un Estudiante</title><subtitle type='html'>...Apuntes de lo que vaya aprendiendo, algo así como el cuaderno del programador...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5584310098429639716</id><published>2011-12-04T17:34:00.000-08:00</published><updated>2011-12-04T18:19:18.248-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='servidor'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='accesar a servidor en virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='VBoxManage'/><title type='text'>Cómo accesar a un servidor corriendo en VirtualBox</title><content type='html'>Cuando instalamos una máquina virtual en VirtualBox tenemos acceso a internet sin problemas pero no podemos accesar desde la máquina host(la que alberga al equipo Guest o máquina virtual). Si tenemos un servidor corriendo en el equipo Guest y queremos accesar desde el equipo host debemos configurar algunas cosas con VBoxManage.&lt;br /&gt;&lt;br /&gt;Ejecutaremos VBoxManage desde la consola o ventana de comandos, así que la abrimos y nos vamos al directorio donde se instaló VirtualBox, en mi caso:&lt;br /&gt;&lt;div class="cajalittle"&gt;cd C:\Program Files\Oracle\VirtualBox&lt;/div&gt;&lt;br /&gt;Obtenemos el nombre del equipo Guest:&lt;br /&gt;&lt;div class="cajalittle"&gt;VBoxManage list vms&lt;/div&gt;&lt;br /&gt;En mi caso obtendría:&lt;br /&gt;&lt;div class="cajalittle"&gt;"Debian_VBox" {...}&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ahora nos aseguramos que el equipo Guest esté apagado, y luego le agregaremos unos datos extra a su configuración:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;VBoxManage setextradata &lt;span class="str"&gt;"[nombreEquipoGuest]"&lt;/span&gt; &lt;span class="str"&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/[servicio]/HostPort"&lt;/span&gt; [puertoHost]&lt;br /&gt;VBoxManage setextradata &lt;span class="str"&gt;"[nombreEquipoGuest]"&lt;/span&gt; &lt;span class="str"&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/[servicio]/GuestPort"&lt;/span&gt; [puertoGuest]&lt;br /&gt;VBoxManage setextradata &lt;span class="str"&gt;"[nombreEquipoGuest]"&lt;/span&gt; &lt;span class="str"&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/[servicio]/Protocol"&lt;/span&gt; [protocolo]&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Donde:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[nombreEquipoGuest]&lt;/span&gt; es, como bien dice, el nombre del equipo Guest o Máquina Virtual.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[servicio]&lt;/span&gt; es el nombre del servicio que se expone en el equipo Guest y al que queremos acceder, puede ser el nombre que nosotros elijamos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[puertoHost]&lt;/span&gt; es el puerto mediante el cual accederemos al servicio desde la máquina Host, es de nuestra elección, sólo debemos verificar que no esté coupado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[puertoGuest]&lt;/span&gt; es el puerto que usa el servicio en el equipo Guest.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;[protocolo]&lt;/span&gt; es el protocolo del servicio.&lt;br /&gt;&lt;br /&gt;En mi caso tengo un servidor web más SSL(puerto 443) en el equipo Guest y quisiera ingresar desde el equipo Host usando el puerto 8877, los 3 comandos a ejecutar serían:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;VBoxManage setextradata &lt;span class="str"&gt;"Debian_VBox"&lt;/span&gt; &lt;span class="str"&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort"&lt;/span&gt; 8877&lt;br /&gt;VBoxManage setextradata &lt;span class="str"&gt;"Debian_VBox"&lt;/span&gt; &lt;span class="str"&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort"&lt;/span&gt; 443&lt;br /&gt;VBoxManage setextradata &lt;span class="str"&gt;"Debian_VBox"&lt;/span&gt; &lt;span class="str"&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol"&lt;/span&gt; TCP&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Podemos ver la extradata agregada con el comando:&lt;br /&gt;&lt;div class="cajalittle"&gt;VBoxManage getextradata "Debian_VBox" enumerate&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Luego Abrimos VirtualBox, vamos a &lt;span style="font-weight:bold;"&gt;Configuración/Red/Adaptador 1/Avanzadas/Tipo de Adaptador&lt;/span&gt; y elegimos:&lt;br /&gt;&lt;div class="cajalittle"&gt;PCnet-PCI II&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-nzO_BdFCGhY/Ttwp8Xb4xKI/AAAAAAAAAsw/trUkn64np7w/s1600/vm-ss.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 304px;" src="http://4.bp.blogspot.com/-nzO_BdFCGhY/Ttwp8Xb4xKI/AAAAAAAAAsw/trUkn64np7w/s320/vm-ss.PNG" alt="" id="BLOGGER_PHOTO_ID_5682462946894595234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora puedo ingresar desde el equiipo Host al servidor web instalado en el equipo Guest con la dirección:&lt;br /&gt;&lt;div class="cajalittle"&gt;https://localhost:8877&lt;/div&gt;&lt;br /&gt;VirtualBox se encargará de redireccionar mi petición al servidor de la máquina virtual.&lt;br /&gt;&lt;br /&gt;Si quisieramos revertir estos cambios podemos hacerlo ejecutando los mismos comandos pero omitiendo los valores de [puertoHost], [puertoGuest] y [protocolo], por ejemplo si quisieramos quitar el puerto asignado al equipo Host:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;VBoxManage setextradata &lt;span class="str"&gt;"Debian_VBox"&lt;/span&gt; &lt;span class="str"&gt;"VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5584310098429639716?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5584310098429639716/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/12/como-accesar-un-servidor-corriendo-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5584310098429639716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5584310098429639716'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/12/como-accesar-un-servidor-corriendo-en.html' title='Cómo accesar a un servidor corriendo en VirtualBox'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-nzO_BdFCGhY/Ttwp8Xb4xKI/AAAAAAAAAsw/trUkn64np7w/s72-c/vm-ss.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-8740805620739524270</id><published>2011-11-28T17:56:00.000-08:00</published><updated>2011-11-28T19:14:53.510-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fancybox'/><category scheme='http://www.blogger.com/atom/ns#' term='call parent window function from iframe fancybox'/><category scheme='http://www.blogger.com/atom/ns#' term='callback'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='functions'/><title type='text'>Llamar función de ventana padre desde iframe en Fancybox</title><content type='html'>Para poder llamar una función de la página padre desde un iframe es necesario agregar una función al plugin.&lt;br /&gt;Primero, descargamos el plugin desde su &lt;a href="http://fancybox.net/" target="_blank"&gt;sitio web&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;El archivo a modificar debe ser:&lt;br /&gt;&lt;div class="cajalittle"&gt;jquery.fancybox-1.3.4.js&lt;/div&gt;&lt;br /&gt;Agregaremos la función &lt;span style="font-weight:bold;"&gt;myCustomCallback&lt;/span&gt;, la pondremos al final, después de la declaración de defaults:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;$.fn.fancybox.defaults = {&lt;br /&gt;&lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;};&lt;br /&gt;&lt;span class="rem"&gt;/*=========================================================*/&lt;/span&gt;     &lt;br /&gt;$.fancybox.myCustomCallback = function(param) {&lt;br /&gt;        &lt;br /&gt; selectedOpts.customCallbackObject.proccessOperation(param);&lt;br /&gt;     &lt;br /&gt;};&lt;br /&gt;&lt;span class="rem"&gt;/*========================================================*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//...&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Crearemos nuestros ejemplos usando jquery en su versión actual, aunque la que viene con fancybox también sirve.&lt;br /&gt;&lt;br /&gt;Código de la ventana padre:&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Strict//EN"&lt;/span&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt; &lt;span class="attr"&gt;xml:lang&lt;/span&gt;&lt;span class="kwrd"&gt;="en"&lt;/span&gt; &lt;span class="attr"&gt;lang&lt;/span&gt;&lt;span class="kwrd"&gt;="en"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Parent Window&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;="./jquery-1.4.3.min.js"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"./fancybox/jquery.mousewheel-3.0.4.pack.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt; src=&lt;span class="str"&gt;"./fancybox/jquery.fancybox-1.3.4.js"&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;    &amp;lt;link rel=&lt;span class="str"&gt;"stylesheet"&lt;/span&gt; type=&lt;span class="str"&gt;"text/css"&lt;/span&gt; href=&lt;span class="str"&gt;"./fancybox/jquery.fancybox-1.3.4.css"&lt;/span&gt; media=&lt;span class="str"&gt;"screen"&lt;/span&gt; /&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;script type=&lt;span class="str"&gt;"text/javascript"&lt;/span&gt;&amp;gt;&lt;br /&gt;        $(document).ready(&lt;span class="kwrd"&gt;function&lt;/span&gt;(){&lt;br /&gt;            &lt;br /&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; myRefObject = {};&lt;br /&gt;            myRefObject.proccessOperation = &lt;span class="kwrd"&gt;function&lt;/span&gt;(param){ &lt;br /&gt;                                            SetContainer(param); &lt;br /&gt;                                            };&lt;br /&gt;            &lt;br /&gt;            $(&lt;span class="str"&gt;".fancybox-iframe"&lt;/span&gt;).fancybox({&lt;br /&gt;                    &lt;span class="str"&gt;'type'&lt;/span&gt;: &lt;span class="str"&gt;'iframe'&lt;/span&gt;,&lt;br /&gt;                    &lt;span class="str"&gt;'customCallbackObject'&lt;/span&gt;: myRefObject&lt;br /&gt;                });&lt;br /&gt;        });&lt;br /&gt;        &lt;br /&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; SetContainer(param)&lt;br /&gt;        {&lt;br /&gt;            $(&lt;span class="str"&gt;"#container"&lt;/span&gt;).append(&lt;span class="str"&gt;"&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;"&lt;/span&gt; + param + &lt;span class="str"&gt;"&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="ChildWindow.html"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="fancybox-iframe"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            Mostrar página hija en un iframe&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="container"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Código de la ventana que será levantada en un iframe:&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Strict//EN"&lt;/span&gt; &lt;br /&gt;&lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt; &lt;span class="attr"&gt;xml:lang&lt;/span&gt;&lt;span class="kwrd"&gt;="en"&lt;/span&gt; &lt;span class="attr"&gt;lang&lt;/span&gt;&lt;span class="kwrd"&gt;="en"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Child Window&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;function&lt;/span&gt; SendMessageToParentWindow()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;var&lt;/span&gt; message = document.getElementById(&lt;span class="str"&gt;"txtMessage"&lt;/span&gt;).value;&lt;br /&gt;            parent.$.fancybox.myCustomCallback(message);&lt;br /&gt;        }&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt; &lt;span class="attr"&gt;for&lt;/span&gt;&lt;span class="kwrd"&gt;="txtMensaje"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Escribe un texto&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;label&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="txtMessage"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt; &lt;span class="attr"&gt;href&lt;/span&gt;&lt;span class="kwrd"&gt;="javascript:SendMessageToParentWindow()"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            Enviar mensaje a la página padre&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;a&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Lo que hacemos es enviarle la referencia(los objetos son tipos de referencia) al objeto &lt;span style="font-weight:bold;"&gt;myRefObject &lt;/span&gt;que sí tiene acceso al método SetContainer() y por tanto lo ejecuta.&lt;br /&gt;&lt;br /&gt;Captura:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-3Dy2Hw0Pe2c/TtRMjYBZNII/AAAAAAAAAsk/tkFa0TGd3kk/s1600/fancybox-callback.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://1.bp.blogspot.com/-3Dy2Hw0Pe2c/TtRMjYBZNII/AAAAAAAAAsk/tkFa0TGd3kk/s320/fancybox-callback.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5680249200648467586" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-8740805620739524270?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/8740805620739524270/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/11/llamar-funcion-de-ventana-padre-desde.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8740805620739524270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8740805620739524270'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/11/llamar-funcion-de-ventana-padre-desde.html' title='Llamar función de ventana padre desde iframe en Fancybox'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-3Dy2Hw0Pe2c/TtRMjYBZNII/AAAAAAAAAsk/tkFa0TGd3kk/s72-c/fancybox-callback.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3124073898581732122</id><published>2011-10-09T14:25:00.000-07:00</published><updated>2011-10-09T15:07:33.004-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conversión de audio'/><category scheme='http://www.blogger.com/atom/ns#' term='oggenc'/><category scheme='http://www.blogger.com/atom/ns#' term='ogg'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu/linux'/><category scheme='http://www.blogger.com/atom/ns#' term='flac'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='flac to ogg'/><title type='text'>Convertir archivos .flac a .ogg en Ubuntu</title><content type='html'>Para convertir un archivo .flac a  usaremos el paquete oggenc que viene instalado por defecto en los sistemas Gnu/Linux, de no ser así procedemos a instalarlo:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo apt-get install vorbis-tools&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Convertimos de .flac a &lt;a href="http://es.wikipedia.org/wiki/Ogg" target="_blank"&gt;.ogg&lt;/a&gt;:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;oggenc &lt;span class="bash-cmd-command-param"&gt;-q&lt;/span&gt; 10 archivo-entrada.flac &lt;span class="bash-cmd-command-param"&gt;-o&lt;/span&gt; archivo-salida.ogg &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Donde:&lt;br /&gt;&lt;span class="bash-cmd-command-param"&gt;-q&lt;/span&gt; es la opción que recibe un valor de -1 a 10 que especifica la calidad, por ejemplo: -1(calidad muy baja), 3(valor por defecto), 10(calidad muy alta).&lt;br /&gt;&lt;br /&gt;No sería muy cómo si quisieramos convertir un albúm completo a .ogg, para hacernos la vida más fácil crearemos un script al que le pasaremos como argumentos o parámetros el directorio donde se encuentran los archivos .flac y el directorio donde serán guardados los nuevos archivos .ogg respectivamente.&lt;br /&gt;Creamos nuestro archivo .sh:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;gedit /home/usuario/Documentos/flac2ogg.sh &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;En el editor de etexto que nos abrirá escribimos el siguiente script:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;cd $1;&lt;br /&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; f &lt;span class="kwrd"&gt;in&lt;/span&gt; *.flac;&lt;br /&gt;do&lt;br /&gt;oggenc -q 10 &lt;span class="str"&gt;"$f"&lt;/span&gt; -o $2&lt;span class="str"&gt;"$f"&lt;/span&gt;.ogg&lt;br /&gt;done &lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Luego guardamos y cerramos, luego damos permisos de ejecución a nuestro script:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;chmod + x /home/usuario/Documentos/flac2ogg.sh  &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya podemos usar nuestro script:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;/home/usuario/Documentos/flac2ogg.sh &lt;span class="bash-cmd-command-param"&gt;/home/usuario/DirectorioFLAC&lt;/span&gt; &lt;span class="bash-cmd-command-param"&gt;/home/usuario/DirectorioOGG&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Donde:&lt;br /&gt;&lt;span class="bash-cmd-command-param"&gt;/home/usuario/DirectorioFLAC&lt;/span&gt; : Es la ruta del directorio que contiene los archivos .flac&lt;br /&gt;&lt;span class="bash-cmd-command-param"&gt;/home/usuario/DirectorioOGG &lt;/span&gt;: Es la ruta del directorio donde se guardarán los nuevos archivos .ogg&lt;br /&gt;&lt;span style="color:#fff;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#fff;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#fff;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#fff;"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3124073898581732122?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3124073898581732122/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/10/convertir-archivos-flac-ogg-en-ubuntu.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3124073898581732122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3124073898581732122'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/10/convertir-archivos-flac-ogg-en-ubuntu.html' title='Convertir archivos .flac a .ogg en Ubuntu'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3749763477786053058</id><published>2011-05-29T09:19:00.000-07:00</published><updated>2011-05-29T10:17:07.147-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multimedia'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu/linux'/><category scheme='http://www.blogger.com/atom/ns#' term='monkey&apos;s audio'/><category scheme='http://www.blogger.com/atom/ns#' term='cuetools'/><category scheme='http://www.blogger.com/atom/ns#' term='split ape'/><category scheme='http://www.blogger.com/atom/ns#' term='shnsplit'/><category scheme='http://www.blogger.com/atom/ns#' term='wav'/><category scheme='http://www.blogger.com/atom/ns#' term='split flac'/><category scheme='http://www.blogger.com/atom/ns#' term='cuetag'/><category scheme='http://www.blogger.com/atom/ns#' term='flac'/><category scheme='http://www.blogger.com/atom/ns#' term='lossless'/><category scheme='http://www.blogger.com/atom/ns#' term='ape'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Extraer pistas de archivo flac o ape (Debian/Ubuntu)</title><content type='html'>A veces tenemos un álbum en un único gran archivo,&lt;a href="http://es.wikipedia.org/wiki/Flac" target='_blank'&gt; &lt;span style="font-weight:bold;"&gt;.flac&lt;/span&gt;&lt;/a&gt; o &lt;a href="http://es.wikipedia.org/wiki/Monkey's_Audio" target='_blank'&gt;&lt;span style="font-weight:bold;"&gt;.ape&lt;/span&gt;&lt;/a&gt;, sí queremos extraer o separar las pistas necesitaremos el archivo &lt;a href="http://es.wikipedia.org/wiki/Cue_sheet" target='_blank'&gt;&lt;span style="font-weight:bold;"&gt;.cue&lt;/span&gt;&lt;/a&gt; correspondiente. Un archivo .cue no es más que un archivo de texto plano que contiene la información o metadata del álbum y sus pistas, tales como el nombre de dicho álbum, duración de cada pista,etc.&lt;br /&gt;&lt;br /&gt;Primero, instalamos los paquetes necesarios:&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo apt-get install flac&lt;br /&gt;sudo apt-get install wavpack&lt;br /&gt;sudo apt-get install cuetools&lt;br /&gt;sudo apt-get install shntool&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Para poder trabajar con archivos .ape es necesario instalar dos paquetes que no se encuentran en los repositorios pero que pueden ser descargados desde la siguiente dirección:&lt;br /&gt;&lt;a href="http://debian-multimedia.org/pool/main/m/monkeys-audio/monkeys-audio.php"&gt;http://debian-multimedia.org/pool/main/m/monkeys-audio/monkeys-audio.php&lt;/a&gt;&lt;br /&gt;Los archivos a descargar son &lt;span style="font-weight:bold;"&gt;libmac2&lt;/span&gt; y &lt;span style="font-weight:bold;"&gt;monkeys-audio&lt;/span&gt; y deben ser los más recientes.Primero debe instalarse el paquete &lt;span style="font-weight:bold;"&gt;libmac2&lt;/span&gt; y luego el paquete &lt;span style="font-weight:bold;"&gt;monkeys-audio&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Extrayendo pistas en formato .flac desde un archivo(álbum) .flac&lt;/h3&gt;&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;cuebreakpoints MiAlbum.cue | shnsplit -o flac MiAlbum.flac&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Extrayendo pistas en formato .flac desde un archivo(álbum) .ape&lt;/h3&gt;&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;cuebreakpoints MiAlbum.cue | shnsplit -o flac MiAlbum.ape&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Es necesario señalar que si no se especifica el formato de salida, este será &lt;span style="font-weight:bold;"&gt;.wav&lt;/span&gt;. El formato de salida se especifica mediante la opción&lt;span style="font-weight:bold;"&gt; -o &lt;/span&gt;de &lt;span style="font-weight:bold;"&gt;shnsplit&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Pasando metadata a las pistas extraídas&lt;/h3&gt;&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;cuetag MiAlbum.cue split-track*.flac&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Se debe tener cuidado con los espacios en blanco, cuetag no maneja los nombres con espacios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3749763477786053058?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3749763477786053058/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/05/extraer-pistas-de-archivo-flac-o-ape.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3749763477786053058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3749763477786053058'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/05/extraer-pistas-de-archivo-flac-o-ape.html' title='Extraer pistas de archivo flac o ape (Debian/Ubuntu)'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3185071458522718918</id><published>2011-03-25T14:34:00.000-07:00</published><updated>2011-03-27T14:04:55.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pdflatex'/><category scheme='http://www.blogger.com/atom/ns#' term='miktex portable'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='instalacion oracle en ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='documentos pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='texlive'/><category scheme='http://www.blogger.com/atom/ns#' term='latex en windows'/><category scheme='http://www.blogger.com/atom/ns#' term='documentos presentables'/><category scheme='http://www.blogger.com/atom/ns#' term='miktex'/><title type='text'>Documentos Presentables con LaTeX</title><content type='html'>&lt;span style="font-weight:bold;"&gt;LaTeX &lt;/span&gt;es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos científicos y técnicos que contengan fórmulas matemáticas.&lt;br /&gt;Es muy utilizado para la composición de artículos académicos, tesis y libros técnicos, dado que la calidad tipográfica de los documentos realizados con LaTeX es comparable a la de una editorial científica de primera línea.&lt;br /&gt;&lt;br /&gt;En realidad se puede hacer todo tipo de documentos, libros de cuentos, historia, poesía, trabajos de la u., cartas, etc.&lt;br /&gt;&lt;br /&gt;Un Tutorial que hice: (&lt;span style="font-weight:bold;"&gt;con LaTeX&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;div style="width:477px" id="__ss_7407664"&gt; &lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/jlrvpuma/documentos-latex-en-ubuntu-y-windows" title="Documentos LaTeX en Ubuntu y Windows"&gt;Documentos LaTeX en Ubuntu y Windows&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse7407664" width="477" height="510"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/doc_player.swf?doc=documentoslatexubuntuwindows-110327160050-phpapp01&amp;stripped_title=documentos-latex-en-ubuntu-y-windows&amp;userName=jlrvpuma" /&gt; &lt;param name="allowFullScreen" value="true"/&gt; &lt;param name="allowScriptAccess" value="always"/&gt; &lt;embed name="__sse7407664" src="http://static.slidesharecdn.com/swf/doc_player.swf?doc=documentoslatexubuntuwindows-110327160050-phpapp01&amp;stripped_title=documentos-latex-en-ubuntu-y-windows&amp;userName=jlrvpuma" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;div style="padding:5px 0 12px"&gt; View more &lt;a href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a href="http://www.slideshare.net/jlrvpuma"&gt;jlrvpuma&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Este visor pdf no permite ver bien la potencia de LaTeX&lt;span style="font-weight:bold;"&gt;, Adobe Reader renderea el archivo como se debe y se aprecia lo potente que es LateX, mucho mejor se ve el documento impreso.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;El .pdf se puede descargar haciendo clic &lt;a href="http://cid-c8a56dd7becc4c8d.office.live.com/self.aspx/P%c3%bablico/ArchivosPDF/Documentos^_LaTeX^_Ubuntu^_Windows.pdf" target="_blank"&gt;&lt;span style="font-weight:bold;"&gt;AQUÍ&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3185071458522718918?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3185071458522718918/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/03/documentos-presentables-con-latex.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3185071458522718918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3185071458522718918'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/03/documentos-presentables-con-latex.html' title='Documentos Presentables con LaTeX'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-2995841531890547215</id><published>2011-02-25T01:48:00.000-08:00</published><updated>2011-10-09T14:19:56.561-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dmi'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu/linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bios'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='dmidecode'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='smbios/dmi'/><title type='text'>Información de Hardware con dmidecode Ubuntu</title><content type='html'>En los sistemas GNU/Linux existe una herramienta bastante útil a la hora de obtener información de nuestro hardware, se llama &lt;a href="http://www.nongnu.org/dmidecode/"&gt;dmidecode&lt;/a&gt;.&lt;br /&gt;Dmidecode nos permite ver la información de hardware de nuestra computadora de acuerdo al estándar SMBIOS/DMI. Esta información típicamente incluye fabricante, nombre del modelo, número de serie, versión del BIOS y más detalles. A menudo incluirá el estado de uso de los sockets del CPU, slots de expansión (AGP, PCI, ISA), slots de los módulos de memoria, y la lista de los puertos I/O ( serial, parallel, USB).&lt;br /&gt;&lt;br /&gt;La especificación &lt;span style="font-weight:bold;"&gt;System Management BIOS&lt;/span&gt;(&lt;a href="http://en.wikipedia.org/wiki/System_Management_BIOS"&gt;SMBIOS&lt;/a&gt;) define estructuras de datos y métodos de acceso en un BIOS permitiendo al usuario o a una aplicación almacenar y recuperar datos específicos de una computadora.&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Desktop_Management_Interface"&gt;DMI&lt;/a&gt;(&lt;span style="font-weight:bold;"&gt;Desktop Management Interface&lt;/span&gt;) expone los datos del sistema incluyendo los datos de &lt;span style="font-weight:bold;"&gt;SMBIOS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;La información proporcionada por el DMI es usada para desactivar ciertas porciones de código del kernel dependiendo de tal o cuál hardware. Así, los desarrolladores del kernel usan &lt;span style="font-weight:bold;"&gt;dmidecode&lt;/span&gt; para detectar firmas o signatures de sistema y agregarlos a código fuente del kernel cuando es necesitado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dmidecode&lt;/span&gt; no escanea el hardware, sólo muestra lo que el BIOS le reporta.&lt;br /&gt;&lt;br /&gt;Esta excelente herramienta fue desarrollada al principio por &lt;a href="http://es.wikipedia.org/wiki/Alan_Cox"&gt;Alan Cox &lt;/a&gt;. Actualmente es mantenido y desarrollado por &lt;a href="http://savannah.gnu.org/users/khali/"&gt;Jean Delvare&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Además, &lt;span style="font-weight:bold;"&gt;dmidecode&lt;/span&gt; viene con tres herramientas adicionales:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;biosdecode:&lt;/span&gt; muestra toda la información relacionada al Bios.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ownership:&lt;/span&gt; muestra el "ownership tag" de las computadoras Compaq.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;vpddecode:&lt;/span&gt; muestra la información "vital product data" que puede ser encontrada en casi todas las computadoras IBM.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Recuperando información de Hardware con dmidecode&lt;/h3&gt;&lt;br /&gt;Los datos en el DMI se clasifican en tipos(types) y cada uno de ellos se identifica con un número.&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;The SMBIOS specification defines the following DMI types:&lt;br /&gt;&lt;br /&gt;       Type   Information&lt;br /&gt;       ────────────────────────────────────────&lt;br /&gt;          0   BIOS&lt;br /&gt;          1   System&lt;br /&gt;          2   Base Board&lt;br /&gt;          3   Chassis&lt;br /&gt;          4   Processor&lt;br /&gt;          5   Memory Controller&lt;br /&gt;          6   Memory Module&lt;br /&gt;          7   Cache&lt;br /&gt;          8   Port Connector&lt;br /&gt;          9   System Slots&lt;br /&gt;         10   On Board Devices&lt;br /&gt;         11   OEM Strings&lt;br /&gt;         12   System Configuration Options&lt;br /&gt;&lt;br /&gt;         13   BIOS Language&lt;br /&gt;         14   Group Associations&lt;br /&gt;         15   System Event Log&lt;br /&gt;         16   Physical Memory Array&lt;br /&gt;         17   Memory Device&lt;br /&gt;         18   32-bit Memory Error&lt;br /&gt;         19   Memory Array Mapped Address&lt;br /&gt;         20   Memory Device Mapped Address&lt;br /&gt;         21   Built-&lt;span class="kwrd"&gt;in&lt;/span&gt; Pointing Device&lt;br /&gt;         22   Portable Battery&lt;br /&gt;         23   System Reset&lt;br /&gt;         24   Hardware Security&lt;br /&gt;         25   System Power Controls&lt;br /&gt;         26   Voltage Probe&lt;br /&gt;         27   Cooling Device&lt;br /&gt;         28   Temperature Probe&lt;br /&gt;         29   Electrical Current Probe&lt;br /&gt;         30   Out-of-band Remote Access&lt;br /&gt;         31   Boot Integrity Services&lt;br /&gt;         32   System Boot&lt;br /&gt;         33   64-bit Memory Error&lt;br /&gt;         34   Management Device&lt;br /&gt;         35   Management Device Component&lt;br /&gt;         36   Management Device Threshold Data&lt;br /&gt;         37   Memory Channel&lt;br /&gt;         38   IPMI Device&lt;br /&gt;         39   Power Supply&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;También se puede usar palabras clave(keyword), cada palabra clave tiene sus equivalentes en número:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;br /&gt;       Keyword     Types&lt;br /&gt;       ──────────────────────────────&lt;br /&gt;       bios        0, 13&lt;br /&gt;       system      1, 12, 15, 23, 32&lt;br /&gt;       baseboard   2, 10&lt;br /&gt;       chassis     3&lt;br /&gt;       processor   4&lt;br /&gt;       memory      5, 6, 16, 17&lt;br /&gt;       cache       7&lt;br /&gt;       connector   8&lt;br /&gt;       slot        9&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Para más información se puede recurrir a la documentación mediante el comando:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;man dmidecode&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ahora sí, veamos cómo podemos obtener información de nuestro procesador; escribimos el comando:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo dmidecode --type processor&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Es equivalente a:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo dmidecode -t 4&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Información de la meoria RAM, slots ocupados, de cuánto cada slot, cuánto soporta:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo dmidecode --type memory&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;lo cual es equivalente a:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo dmidecode -t 5, 6, 16, 17&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Como se puede apreciar es posible mostrar varios tipos a la vez, sólo hace falta separarlos por coma.&lt;br /&gt;Si quisiéramos ser más específicos, por ejemplo saber sólo la capacidad de RAM que soporta la computadora:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo dmidecode -t 16&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;O el lenguaje soportado por nuestro BIOS:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;sudo dmidecode -t 13&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;...Podemos probar con todos los tipos...&lt;br /&gt;&lt;br /&gt;Cabe señalar que dmidecode esta disponible en los siguientes sistemas:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Linux i386, x86-64, ia64&lt;br /&gt;FreeBSD i386, amd64&lt;br /&gt;NetBSD i386, amd64&lt;br /&gt;OpenBSD i386, amd64&lt;br /&gt;BeOS i386&lt;br /&gt;Cygwin i386&lt;br /&gt;Solaris x86&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Referencias:&lt;br /&gt;http://www.nongnu.org/dmidecode/&lt;br /&gt;http://julio-linux.esdebian.org/32607/herramienta-dmidecode&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-2995841531890547215?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/2995841531890547215/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/02/informacion-de-hardware-con-dmidecode.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2995841531890547215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2995841531890547215'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/02/informacion-de-hardware-con-dmidecode.html' title='Información de Hardware con dmidecode Ubuntu'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-2582319381716039126</id><published>2011-01-07T10:25:00.000-08:00</published><updated>2011-01-07T11:05:31.550-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='javascriptserializer'/><title type='text'>Devolver colección de objetos en formato JSON desde ASP.NET</title><content type='html'>Para pasar una colección de objetos a formato JSON serializamos mediante la clase JavaScriptSerializer(contenida en System.Web.Script.Serialization):&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Controlador .ashx&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessRequest (HttpContext context) {&lt;br /&gt;&lt;span class="rem"&gt;//...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  List&amp;lt;Libro&amp;gt; lista = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Libro&amp;gt;()&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; Libro(){ ISBN = &lt;span class="str"&gt;"123456789"&lt;/span&gt;, Titulo = &lt;span class="str"&gt;"Cien Años de Soledad"&lt;/span&gt;,Autor = &lt;span class="str"&gt;"Gabriel García Márquez"&lt;/span&gt;},&lt;br /&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; Libro(){ISBN = &lt;span class="str"&gt;"756753321"&lt;/span&gt;,Titulo = &lt;span class="str"&gt;"Pedro Páramo"&lt;/span&gt;,Autor =&lt;span class="str"&gt;"Juan Rulfo"&lt;/span&gt;},&lt;br /&gt;    &lt;span class="kwrd"&gt;new&lt;/span&gt; Libro(){ISBN = &lt;span class="str"&gt;"655902123"&lt;/span&gt;,Titulo = &lt;span class="str"&gt;"El Aleph"&lt;/span&gt;,Autor =&lt;span class="str"&gt;"Jorge Luis Borges"&lt;/span&gt;}&lt;br /&gt;  };&lt;br /&gt;  &lt;br /&gt;  &lt;span class="rem"&gt;//Pasamos la colección a formato JSON. Se guardará en jsonLista:&lt;/span&gt;&lt;br /&gt;  StringBuilder jsonLista = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;  JavaScriptSerializer js = &lt;span class="kwrd"&gt;new&lt;/span&gt; JavaScriptSerializer();&lt;br /&gt;  js.Serialize(lista, jsonLista);  &lt;br /&gt;  &lt;br /&gt;  &lt;span class="rem"&gt;//Devolvemos al cliente la colección:&lt;/span&gt;&lt;br /&gt;  context.Response.ContentType = &lt;span class="str"&gt;"text/plain"&lt;/span&gt;;&lt;br /&gt;  context.Response.Write(jsonLista.ToString());&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;span class="rem"&gt;//La clase Libro: &lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Libro&lt;br /&gt;{&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ISBN {get;set;}&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Titulo {get;set;}&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Autor {get;set;}&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;En el cliente, leemos la colección JSON devuelta por el servidor:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;$.post(&lt;span class="str"&gt;"../Controladores/MiControlador.ashx"&lt;/span&gt;, { Data: &lt;span class="str"&gt;"ObtenerLibros"&lt;/span&gt;}, &lt;br /&gt;       function (response) {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (response.length &amp;gt; 0) {&lt;br /&gt;                LeeColeccionJSON(response);&lt;br /&gt;            }&lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;function LeeColeccionJSON(response)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;//pasamos la colección JSON a un array de objetos javascript:&lt;/span&gt;&lt;br /&gt;  var arr = eval(response);&lt;br /&gt;  &lt;br /&gt;  &lt;span class="rem"&gt;//Leyendo array:&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0; i&amp;lt; arr.length; i++)&lt;br /&gt;  {&lt;br /&gt;    alert(&lt;span class="str"&gt;"Libro: "&lt;/span&gt; + arr[i].Titulo);    &lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-2582319381716039126?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/2582319381716039126/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/01/devolver-coleccion-de-objetos-en.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2582319381716039126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2582319381716039126'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/01/devolver-coleccion-de-objetos-en.html' title='Devolver colección de objetos en formato JSON desde ASP.NET'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-6480738516384799129</id><published>2011-01-07T09:26:00.001-08:00</published><updated>2011-10-08T23:35:26.620-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='handler genérico'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='ashx'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><title type='text'>Enviar objeto JSON a un controlador  genérico(.ashx) de ASP.NET con JQuery</title><content type='html'>Se tiene el objeto javascript:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;function Libro(isbn,titulo,autor)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.ISBN = isbn;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Titulo = titulo;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Autor = autor;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Mediante la librería &lt;a href="https://github.com/douglascrockford/JSON-js/commit/8d11dc6950eafc7d01f141ce91d4f585caa29f3b#diff-0"&gt;JSON.js&lt;/a&gt; y su función &lt;strong&gt;stringify&lt;/strong&gt; serializamos el objeto de javascript(JSON) y lo mandamos al controlador:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;var libro = &lt;span class="kwrd"&gt;new&lt;/span&gt; Libro(&lt;span class="str"&gt;"9755420406824"&lt;/span&gt;, &lt;span class="str"&gt;"El Sueño del Celta"&lt;/span&gt;,&lt;span class="str"&gt;"Mario Vargas Llosa"&lt;/span&gt;);&lt;br /&gt;&lt;span class="rem"&gt;//Serializamos el objeto JSON:&lt;/span&gt;&lt;br /&gt;var jsonLibro = JSON.stringify(libro);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Ahora mandamos el objeto serializado al controlador genérico:&lt;/span&gt;&lt;br /&gt;$.post(&lt;span class="str"&gt;"../Controladores/MiControlador.ashx"&lt;/span&gt;, { Data: jsonLibro }, &lt;br /&gt;       function (response) {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (response.length &amp;gt; 0) {&lt;br /&gt;                alert(response);&lt;br /&gt;            }&lt;br /&gt;});        &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;En el controlador, mediante la clase JavaScriptSerializer(contenida en System.Web.Script.Serialization), deserializamos el objeto JSON y obtenemos una instancia de la Clase libro; finalmente devolvemos al cliente un mensaje:&lt;br /&gt;&lt;div class='cajalittle'&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;...&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ProcessRequest (HttpContext context) {&lt;br /&gt;   &lt;span class="kwrd"&gt;string&lt;/span&gt; mensaje = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;br /&gt;   &lt;span class="kwrd"&gt;string&lt;/span&gt; jsonLibro = context.Request.Form[&lt;span class="str"&gt;"Data"&lt;/span&gt;];&lt;br /&gt;   &lt;span class="rem"&gt;//deserializo:&lt;/span&gt;&lt;br /&gt;   JavaScriptSerializer js = &lt;span class="kwrd"&gt;new&lt;/span&gt; JavaScriptSerializer();&lt;br /&gt;   Libro libro = js.Deserialize&amp;lt;Libro&amp;gt;(jsonLibro );&lt;br /&gt;   mensaje = &lt;span class="str"&gt;"Recibido el libro: "&lt;/span&gt; + libro.Titulo;&lt;br /&gt;   context.Response.ContentType = &lt;span class="str"&gt;"text/plain"&lt;/span&gt;;&lt;br /&gt;   context.Response.Write(mensaje);&lt;br /&gt;}&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//La clase Libro: &lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Libro&lt;br /&gt;{&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ISBN {get;set;}&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Titulo {get;set;}&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Autor {get;set;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-6480738516384799129?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/6480738516384799129/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2011/01/enviar-objeto-json-un-controlador.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/6480738516384799129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/6480738516384799129'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2011/01/enviar-objeto-json-un-controlador.html' title='Enviar objeto JSON a un controlador  genérico(.ashx) de ASP.NET con JQuery'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-7591871323626381124</id><published>2010-12-07T21:16:00.000-08:00</published><updated>2010-12-07T21:37:58.262-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='poo'/><category scheme='http://www.blogger.com/atom/ns#' term='encapsulacion'/><category scheme='http://www.blogger.com/atom/ns#' term='metodos'/><category scheme='http://www.blogger.com/atom/ns#' term='prop¡edades'/><category scheme='http://www.blogger.com/atom/ns#' term='objetos javascript'/><title type='text'>Objetos con JavaScript (POO) III</title><content type='html'>Anteriormente habíamos visto como crear un objeto con sus propiedades y métodos:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//My Object:&lt;/span&gt;&lt;br /&gt;function Persona(nombre,apellido,edad)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;//Propiedades&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido = apellido;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Edad = edad;&lt;br /&gt;  &lt;span class="rem"&gt;//Metodo:&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetNombreCompleto = GetNombreCompleto;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Method&lt;/span&gt;&lt;br /&gt;function GetNombreCompleto()&lt;br /&gt;{&lt;br /&gt;  var nombreCompleto = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre + &lt;span class="str"&gt;" "&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido;&lt;br /&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt; nombreCompleto;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;El problema con el método GetNombreCompleto es que si lo quisiera usar con otro objeto reescribiría dicho metodo de Persona.&lt;br /&gt;Para evitar esto podemos encapsular el método:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//My Object:&lt;/span&gt;&lt;br /&gt;function Persona(nombre,apellido,edad)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;//Propiedades&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido = apellido;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.Edad = edad;&lt;br /&gt;  &lt;span class="rem"&gt;//Metodo:&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;this&lt;/span&gt;.GetNombreCompleto = function()&lt;br /&gt;  {&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre + &lt;span class="str"&gt;" "&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido;&lt;br /&gt;  };&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-7591871323626381124?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/7591871323626381124/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo-iii.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7591871323626381124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7591871323626381124'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo-iii.html' title='Objetos con JavaScript (POO) III'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5537063702360518239</id><published>2010-12-07T20:16:00.000-08:00</published><updated>2010-12-07T20:31:53.576-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='poo'/><category scheme='http://www.blogger.com/atom/ns#' term='properties'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='method'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='objetos javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>Objetos con JavaScript (POO) II</title><content type='html'>Ya se vió en el post anterior &lt;a href="http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo.html"&gt;cómo crear un objeto y sus propiedades&lt;/a&gt; con javascript, esta vez crearemos un objeto con propiedades y métodos(en este ejemplo sólo declararemos un método).&lt;br /&gt;Para asignar un método a un objeto, primero declaramos el método:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Method&lt;/span&gt;&lt;br /&gt;function GetNombreCompleto()&lt;br /&gt;{&lt;br /&gt;var nombreCompleto = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre + &lt;span class="str"&gt;" "&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; nombreCompleto;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Como vemos este método hace uso de la palabra clave '&lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;', esto lo hace para acceder a los valores de las propiedades del objeto al que estará conectado.&lt;br /&gt;Ahora asignamos el método a nuestro objeto&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//My Object:&lt;/span&gt;&lt;br /&gt;function Persona(nombre,apellido,edad)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido = apellido;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Edad = edad;&lt;br /&gt;&lt;span class="rem"&gt;//Metodo:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.GetNombreCompleto = GetNombreCompleto;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Para llamar al método lo hacemos de la siguiente manera:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;persona.GetNombreCompleto()&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A continuación el código completo:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Test JavaScript Objects&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//My Object:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; Persona(nombre,apellido,edad)&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido = apellido;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.Edad = edad;&lt;br /&gt;&lt;span class="rem"&gt;//Metodo:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.GetNombreCompleto = GetNombreCompleto;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Method&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; GetNombreCompleto()&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; nombreCompleto = &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre + &lt;span class="str"&gt;" "&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; nombreCompleto;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; TestMyObject()&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; persona;&lt;br /&gt;persona = GetPersona();&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; msg = &lt;span class="str"&gt;"Nombre: "&lt;/span&gt; + persona.Nombre + &lt;span class="str"&gt;"\n"&lt;/span&gt; + &lt;span class="str"&gt;"Apellido: "&lt;/span&gt;;&lt;br /&gt;msg += persona.Apellido + &lt;span class="str"&gt;"\n"&lt;/span&gt; + &lt;span class="str"&gt;"Edad: "&lt;/span&gt; + persona.Edad + &lt;span class="str"&gt;"\nNombreCompleto: "&lt;/span&gt; + persona.GetNombreCompleto();&lt;br /&gt;alert(msg);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; GetPersona()&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; persona = &lt;span class="kwrd"&gt;new&lt;/span&gt; Persona(&lt;span class="str"&gt;"Pedro"&lt;/span&gt;,&lt;span class="str"&gt;"Picapiedra"&lt;/span&gt;,40);&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; persona;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width:300px;height:50px;background:#aaccdd;"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="TestMyObject()"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; Test Object (clic aquí)&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5537063702360518239?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5537063702360518239/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo-ii.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5537063702360518239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5537063702360518239'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo-ii.html' title='Objetos con JavaScript (POO) II'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-8614254741129070965</id><published>2010-12-07T19:46:00.000-08:00</published><updated>2010-12-07T20:32:20.893-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='js'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='poo'/><category scheme='http://www.blogger.com/atom/ns#' term='properties'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='prop¡edades'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='this'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>Objetos con JavaScript (POO) I</title><content type='html'>Delaramos al objeto usando una función, dentro de ésta declaramos las propiedades.Las propiedades van precedidas de la palabra clave '&lt;span style="color: rgb(51, 51, 255);"&gt;this&lt;/span&gt;' y seguidamente '.'(punto):&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//My Object:&lt;/span&gt;&lt;br /&gt;function Persona(nombre,apellido,edad)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido = apellido;&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Edad = edad;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Como vemos, el objeto Persona tendrá 3 propiedades: Nombre, Apellido y Edad.&lt;br /&gt;Veamos cómo podemos acceder a las propiedades:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Test JavaScript Objects&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//My Object:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; Persona(nombre,apellido,edad)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido = apellido;&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Edad = edad;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; TestMyObject()&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; persona;&lt;br /&gt; persona = GetPersona();&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; msg = &lt;span class="str"&gt;"Nombre: "&lt;/span&gt; + persona.Nombre + &lt;span class="str"&gt;"\n"&lt;/span&gt; + &lt;span class="str"&gt;"Apellido: "&lt;/span&gt;;&lt;br /&gt; msg += persona.Apellido + &lt;span class="str"&gt;"\n"&lt;/span&gt; + &lt;span class="str"&gt;"Edad: "&lt;/span&gt; + persona.Edad;&lt;br /&gt; alert(msg);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; GetPersona()&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; persona = &lt;span class="kwrd"&gt;new&lt;/span&gt; Persona(&lt;span class="str"&gt;"Pedro"&lt;/span&gt;,&lt;span class="str"&gt;"Picapiedra"&lt;/span&gt;,40);&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; persona;&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width:300px;height:50px;background:#aaccdd;"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="TestMyObject()"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  Test Object (clic aquí)&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Ahora veamos un ejemplo con un array de objetos Persona :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Test JavaScript Objects&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//My Object:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; Persona(nombre,apellido,edad)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Nombre = nombre;&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Apellido = apellido;&lt;br /&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Edad = edad;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; TestArrayObjects()&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; myObjects = &lt;span class="kwrd"&gt;new&lt;/span&gt; Array();&lt;br /&gt; myObjects = GetArrayPersonas();&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; persona;&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; msg = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;br /&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;var&lt;/span&gt; i=0;i&amp;lt;myObjects.length;i++)&lt;br /&gt; {&lt;br /&gt;    persona = myObjects[i];&lt;br /&gt;    msg = &lt;span class="str"&gt;"Nombre: "&lt;/span&gt; + persona.Nombre + &lt;span class="str"&gt;"\n"&lt;/span&gt; + &lt;span class="str"&gt;"Apellido: "&lt;/span&gt;;&lt;br /&gt;    msg += persona.Apellido + &lt;span class="str"&gt;"\n"&lt;/span&gt; + &lt;span class="str"&gt;"Edad: "&lt;/span&gt; + persona.Edad;&lt;br /&gt;    alert(msg);&lt;br /&gt; }   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; GetArrayPersonas()&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; size = 4;&lt;br /&gt; &lt;span class="kwrd"&gt;var&lt;/span&gt; myarray = &lt;span class="kwrd"&gt;new&lt;/span&gt; Array(size);&lt;br /&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;var&lt;/span&gt; i=0;i&amp;lt;size;i++)&lt;br /&gt; {&lt;br /&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; persona = &lt;span class="kwrd"&gt;new&lt;/span&gt; Persona((&lt;span class="str"&gt;"Pedro "&lt;/span&gt;+i),(&lt;span class="str"&gt;"Picapiedra "&lt;/span&gt;+i),(40+i));&lt;br /&gt;    myarray[i] = persona;&lt;br /&gt; }&lt;br /&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; myarray;&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="width:300px;height:50px;background:#eeffaa;margin-top:30px;"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="TestArrayObjects()"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  Test Array Objects (clic aquí)&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-8614254741129070965?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/8614254741129070965/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8614254741129070965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8614254741129070965'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo.html' title='Objetos con JavaScript (POO) I'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-4202109406480527389</id><published>2010-11-04T15:42:00.000-07:00</published><updated>2010-11-05T11:44:25.321-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plsql'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle dinamico'/><category scheme='http://www.blogger.com/atom/ns#' term='tabla temporal'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><title type='text'>Insertar dinamicamente en Tabla Temporal  ORACLE</title><content type='html'>Las tablas temporales en ORACLE no son como en SQLServer.&lt;br /&gt;La definición de una tabla temporal se almacena en el sistema, como con la de las tablas permanentes, pero los datos permanecerán sólo durante la sesión o transacción, lo cual podemos definir mediante la clausula:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;/*Los datos &lt;span class="kwrd"&gt;no&lt;/span&gt; se eliminan mientras &lt;span class="kwrd"&gt;no&lt;/span&gt; acabe la sesión:*/&lt;br /&gt;&lt;span class="kwrd"&gt;ON&lt;/span&gt; &lt;span class="kwrd"&gt;COMMIT&lt;/span&gt; &lt;span class="kwrd"&gt;PRESERVE&lt;/span&gt; &lt;span class="kwrd"&gt;ROWS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/*O bien:&lt;br /&gt;*Los datos se eliminan al finalizar la transacción*/&lt;br /&gt;&lt;span class="kwrd"&gt;ON&lt;/span&gt; &lt;span class="kwrd"&gt;COMMIT&lt;/span&gt; &lt;span class="kwrd"&gt;DELETE&lt;/span&gt; ROWS&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Cabe señalar que, aunque el mismo usuario se conecte dos veces simultaneamente o mientras uno de ellos no termine la sesión, ambas sesiones serán tratadas independientemente,de esta forma lo que un usuario haga en la tabla no le afecta al otro.&lt;br /&gt;Hay buena información en este post:&lt;br /&gt;&lt;a href="http://www.plsql.biz/2007/03/tablas-temporales-en-las-bases-de-datos.html"&gt;Tablas temporales en las bases de datos Oracle&lt;/a&gt;&lt;br /&gt;Creando una tabla Temporal cuyos datos no se eliminarán mientras la sesión no termine:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;GLOBAL&lt;/span&gt; &lt;span class="kwrd"&gt;TEMPORARY&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; TEMP_TABLA&lt;br /&gt;(&lt;br /&gt;NOMBRE VARCHAR2(50),&lt;br /&gt;APELLIDO VARCHAR2(100)&lt;br /&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;ON&lt;/span&gt; &lt;span class="kwrd"&gt;COMMIT&lt;/span&gt; &lt;span class="kwrd"&gt;PRESERVE&lt;/span&gt; ROWS&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Creando una tabla temporal idéntica a una tabla existente:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;GLOBAL&lt;/span&gt; &lt;span class="kwrd"&gt;TEMPORARY&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; TEMP_TABLA&lt;br /&gt;&lt;span class="kwrd"&gt;ON&lt;/span&gt; &lt;span class="kwrd"&gt;COMMIT&lt;/span&gt; &lt;span class="kwrd"&gt;PRESERVE&lt;/span&gt; &lt;span class="kwrd"&gt;ROWS&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; TABLA_EXISTENTE &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; 1=0;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 153, 0);"&gt;Insertando dinamicamente en la tabla temporal:&lt;/span&gt;&lt;br /&gt;Un stored procedure que recorre una tabla LIST_TABLAS que contiene en su columna NOM_TABLA el nombre de tabla existente de la cual se extraeran los datos a insertar en la tabla temporal.Recordar que la tabla temporal es identica a la tabla que se consultará por los datos.Finalmente se hace un select en la tabla temporal:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;/*LA TABLA LIST_TABLAS tiene las columnas:&lt;br /&gt;*NOM_TABLA y FECHA_CREACION*/&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;OR&lt;/span&gt; REPLACE &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; SP_INSERTINTEMTABLA&lt;br /&gt;(&lt;br /&gt;    fechaIni &lt;span class="kwrd"&gt;IN&lt;/span&gt; &lt;span class="kwrd"&gt;DATE&lt;/span&gt;,&lt;br /&gt;    fechaFin &lt;span class="kwrd"&gt;IN&lt;/span&gt; &lt;span class="kwrd"&gt;DATE&lt;/span&gt;,&lt;br /&gt;    curQuery &lt;span class="kwrd"&gt;IN&lt;/span&gt; &lt;span class="kwrd"&gt;OUT&lt;/span&gt; SYS_REFCURSOR&lt;br /&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;br /&gt;    querySQL varchar2(1000) :=&lt;span class="str"&gt;''&lt;/span&gt;; nomTabla varchar2(100) := &lt;span class="str"&gt;''&lt;/span&gt;;&lt;br /&gt;    cursor_ &lt;span class="kwrd"&gt;Integer&lt;/span&gt;; numeroMovidos &lt;span class="kwrd"&gt;INTEGER&lt;/span&gt;;&lt;br /&gt;    &lt;span class="kwrd"&gt;CURSOR&lt;/span&gt; CUR_LIST_TABLA &lt;span class="kwrd"&gt;IS&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; NOM_TABLA &lt;span class="kwrd"&gt;FROM&lt;/span&gt; LIST_TABLA &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; TRUNC(FECHA_CREACION) &lt;span class="kwrd"&gt;BETWEEN&lt;/span&gt; TRUNC(fechaIni) &lt;span class="kwrd"&gt;AND&lt;/span&gt; TRUNC(fechaFin);&lt;br /&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;FOR&lt;/span&gt; TA &lt;span class="kwrd"&gt;IN&lt;/span&gt; CUR_LIST_TABLA&lt;br /&gt;    LOOP&lt;br /&gt;        nomTabla := LTRIM(RTRIM(TA.NOM_TABLA));&lt;br /&gt;        querySQL := &lt;span class="str"&gt;'INSERT INTO TEMP_TABLA '&lt;/span&gt; || &lt;span class="str"&gt;'SELECT * FROM '&lt;/span&gt; || nomTabla;&lt;br /&gt;        cursor_ := dbms_sql.open_cursor;&lt;br /&gt;        dbms_sql.parse (cursor_, querySQL, dbms_sql.native);&lt;br /&gt;        numeroMovidos  := dbms_sql.&lt;span class="kwrd"&gt;execute&lt;/span&gt; (cursor_);&lt;br /&gt;        dbms_sql.close_cursor (cursor_);&lt;br /&gt;    &lt;span class="kwrd"&gt;END&lt;/span&gt; LOOP;&lt;br /&gt;    &lt;span class="kwrd"&gt;OPEN&lt;/span&gt; curQuery &lt;span class="kwrd"&gt;FOR&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; TEMP_TABLA;&lt;br /&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-4202109406480527389?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/4202109406480527389/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/11/insertar-dinamicamente-en-tabla.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/4202109406480527389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/4202109406480527389'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/11/insertar-dinamicamente-en-tabla.html' title='Insertar dinamicamente en Tabla Temporal  ORACLE'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3437566774476535151</id><published>2010-08-21T08:37:00.001-07:00</published><updated>2010-08-21T08:44:42.914-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interopServices'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='extraIconEx'/><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='hwnd'/><category scheme='http://www.blogger.com/atom/ns#' term='handle'/><category scheme='http://www.blogger.com/atom/ns#' term='apis'/><title type='text'>Obtener Icono de Aplicación Mediante Path o Ruta de Ejecutable</title><content type='html'>Una forma de obtener el ícono de una applicación  es mediante el path o ruta de ejecutable de la aplicación, llamando a la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms648069%28VS.85%29.aspx"&gt;ExtractIconEx &lt;/a&gt;la cual se encuentra en la librería shell32.dll.&lt;br /&gt;Dicha función obtiene el handle del ícono de una aplicación mediante la ruta de su ejecutable.La firma de la función ExtractIconEx es :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;UINT WINAPI ExtractIconEx(&lt;br /&gt; __in       LPCTSTR lpszFile,&lt;br /&gt; __in       &lt;span class="kwrd"&gt;int&lt;/span&gt; nIconIndex,&lt;br /&gt; __out_opt  HICON *phiconLarge,&lt;br /&gt; __out_opt  HICON *phiconSmall,&lt;br /&gt; __in       UINT nIcons&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Para obtener un solo ícono&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"shell32.dll"&lt;/span&gt;, CharSet=CharSet.Auto)]&lt;br /&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ExtractIconEx(&lt;span class="kwrd"&gt;string&lt;/span&gt; stExeFileName, &lt;span class="kwrd"&gt;int&lt;/span&gt; nIconIndex, &lt;span class="kwrd"&gt;ref&lt;/span&gt; IntPtr phiconLarge, &lt;span class="kwrd"&gt;ref&lt;/span&gt; IntPtr phiconSmall, &lt;span class="kwrd"&gt;int&lt;/span&gt; nIcons);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Para obtener un array de íconos&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"shell32.dll"&lt;/span&gt;, CharSet=CharSet.Auto)]&lt;br /&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; ExtractIconEx(&lt;span class="kwrd"&gt;string&lt;/span&gt; stExeFileName, &lt;span class="kwrd"&gt;int&lt;/span&gt; nIconIndex, IntPtr[] phiconLarge, IntPtr[] phiconSmall, &lt;span class="kwrd"&gt;int&lt;/span&gt; nIcons);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Donde:&lt;br /&gt;- lpszFile: indica el path del ejecutable de la aplicación.&lt;br /&gt;-nIconIndex : Índice del icono a obtener.Si es cero se obtendrá el primer ícono&lt;br /&gt;-*phiconLarge : un Array de handles dónde serán almacenados los iconos extraídos.También puede ser un solo handle.Si es null ningun ícono 'large' será extraído.&lt;br /&gt;-*phiconSmall :  un Array de handles dónde serán almacenados los iconos extraídos.También puede ser un solo handle.Si es null ningun ícono 'small' será extraído.&lt;br /&gt;-nIcons :Número de íconos a ser extraídos.&lt;br /&gt;&lt;br /&gt;En un post anterior ya se ha visto cómo&lt;a href="http://moleskinformatico.blogspot.com/2010/08/obtener-ruta-o-path-de-ejecutable.html"&gt; recuperar la ruta o path del ejecutable de una aplicación &lt;/a&gt;mediante el Handle de ventana. A continuación muestro un método que retorna el handle del Icono de la aplicación:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; IntPtr GetHicon(&lt;span class="kwrd"&gt;string&lt;/span&gt; exePath)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;//sólo obtendré el largeIcon&lt;/span&gt;&lt;br /&gt;IntPtr largeIcon = IntPtr.Zero;&lt;br /&gt;IntPtr smallIcon = IntPtr.Zero;&lt;br /&gt;ExtractIconExA(exePath, 0, &lt;span class="kwrd"&gt;ref&lt;/span&gt; largeIcon, &lt;span class="kwrd"&gt;ref&lt;/span&gt; smallIcon, 1);&lt;br /&gt;&lt;br /&gt;DestroyIcon(smallIcon);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; largeIcon;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Captura:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_wp91e-x7RW0/TG_t_Tx2CTI/AAAAAAAAAqA/SEhEWCoz-4A/s1600/GetIcon_Apis_Win7.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 163px;" src="http://1.bp.blogspot.com/_wp91e-x7RW0/TG_t_Tx2CTI/AAAAAAAAAqA/SEhEWCoz-4A/s320/GetIcon_Apis_Win7.JPG" alt="" id="BLOGGER_PHOTO_ID_5507882541194283314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bajar solución completa &lt;a href="http://cid-c8a56dd7becc4c8d.office.live.com/self.aspx/P%c3%bablico/Ejemplos%5E_C%5E3/GetIcon%5E_Win%5E_APIs.rar" target="_blank"&gt;AQUÍ&lt;/a&gt;.(VS2008/WPF)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3437566774476535151?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3437566774476535151/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/08/obtener-icono-de-aplicacion-mediante.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3437566774476535151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3437566774476535151'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/08/obtener-icono-de-aplicacion-mediante.html' title='Obtener Icono de Aplicación Mediante Path o Ruta de Ejecutable'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wp91e-x7RW0/TG_t_Tx2CTI/AAAAAAAAAqA/SEhEWCoz-4A/s72-c/GetIcon_Apis_Win7.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-8278556278477963677</id><published>2010-08-18T10:50:00.000-07:00</published><updated>2010-12-05T22:01:11.227-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='psapi.dll'/><category scheme='http://www.blogger.com/atom/ns#' term='vs2008'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='openprocess'/><category scheme='http://www.blogger.com/atom/ns#' term='getModuleFileNameEx'/><category scheme='http://www.blogger.com/atom/ns#' term='GetWindowThreadProcessId'/><category scheme='http://www.blogger.com/atom/ns#' term='win32'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel32.dll'/><category scheme='http://www.blogger.com/atom/ns#' term='windows7'/><category scheme='http://www.blogger.com/atom/ns#' term='CloseHandle'/><category scheme='http://www.blogger.com/atom/ns#' term='xp'/><title type='text'>Obtener ruta o path de Ejecutable mediante Handle de Ventana y API's</title><content type='html'>Una forma de hacer esto es llamando a la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms683198%28v=VS.85%29.aspx"&gt;GetModuleFileNameEx &lt;/a&gt;contenida en la librería Psapi.dll. La firma de esta función :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;DWORD WINAPI GetModuleFileNameEx(&lt;br /&gt;__in      HANDLE hProcess,&lt;br /&gt;__in_opt  HMODULE hModule,&lt;br /&gt;__out     LPTSTR lpFilename,&lt;br /&gt;__in      DWORD nSize&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Declarado en c#:&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"Psapi.dll"&lt;/span&gt;)]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In] [MarshalAs(UnmanagedType.U4)] &lt;span class="kwrd"&gt;int&lt;/span&gt; nSize);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Donde:&lt;br /&gt;-hProcess : Handle del proceso&lt;br /&gt;-hModule : Handle al modulo.Si es NULL retornará la ruta del archivo ejecutable del proceso especificado en hProcess&lt;br /&gt;-Puntero al buffer que reibirá la ruta del ejecutable.&lt;br /&gt;-nSize : El tamaño del buffer, en caracteres.&lt;br /&gt;&lt;br /&gt;Como ya vimos, el primer parametro(hProcess) es un handle de proceso y no un handle de ventana.&lt;br /&gt;Para obtener un handle de proceso mediante el handle de ventana, es necesario abrir el proceso, obtener el handle(de proceso), usarlo para obtener la ruta del ejecutable y cerrar el proceso.&lt;br /&gt;Primero, para abrir un proceso, necesito llamar a la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms684320%28VS.85%29.aspx"&gt;OpenProcess &lt;/a&gt;que se encuentra en la librería kernel32.dll. La firma de la función es:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;HANDLE WINAPI OpenProcess(&lt;br /&gt;__in  DWORD dwDesiredAccess,&lt;br /&gt;__in  BOOL bInheritHandle,&lt;br /&gt;__in  DWORD dwProcessId&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Declarado en c#:&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"kernel32.dll"&lt;/span&gt;)]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Donde:&lt;br /&gt;-dwDesiredAccess  : acceso al proceso, Ver valores &lt;a href="http://msdn.microsoft.com/en-us/library/ms684880%28v=VS.85%29.aspx"&gt;AQUI&lt;/a&gt;&lt;br /&gt;-bInheritHandle : Si es true los procesos creados por este proceso heredarán el handle.&lt;br /&gt;-dwProcessId : Id del proceso a ser abierto.&lt;br /&gt;&lt;br /&gt;Aquí se presenta otro incoveniente, para abrir un proceso se necesita su identificador o Id y sólo contamos con el handle de ventana.&lt;br /&gt;Para Obtener el id de un proceso mediante el handle de ventana llamamos a la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms633522%28VS.85%29.aspx"&gt;GetWindowThreadProcessId&lt;/a&gt;, el cual se encuentra en la librería Psapi.dll :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;DWORD WINAPI GetWindowThreadProcessId(&lt;br /&gt;__in       HWND hWnd,&lt;br /&gt;__out_opt  LPDWORD lpdwProcessId&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Declarado en C# :&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"Psapi.dll"&lt;/span&gt;)]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In] [MarshalAs(UnmanagedType.U4)] &lt;span class="kwrd"&gt;int&lt;/span&gt; nSize);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Donde :&lt;br /&gt;-hWnd : Handle de la ventana&lt;br /&gt;-lpdwProcessId  : Puntero a una variable dónde se almacenará el Id del proceso&lt;br /&gt;&lt;br /&gt;Ya tenemos declaradas casi todas las funciones que usaremos,antes de comenzar on el código c# veamos la declaración de la función que nos falta, &lt;a href="http://msdn.microsoft.com/en-us/library/ms724211%28VS.85%29.aspx"&gt;CloseHandle&lt;/a&gt;, esta se encarga de cerrar un proceso abierto :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;BOOL WINAPI CloseHandle(&lt;br /&gt;__in  HANDLE hObject&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Declarada en C# :&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"kernel32.dll"&lt;/span&gt;)]&lt;br /&gt;[&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.Bool)]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; CloseHandle(IntPtr hObject);&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Donde :&lt;br /&gt;-hObject  : Handle del proceso a cerrar.&lt;br /&gt;&lt;br /&gt;En un post anterior ya se ha visto como &lt;a href="http://moleskinformatico.blogspot.com/2009/10/obteniendo-handle-de-una-ventana.html"&gt;obtener el handle de una ventana&lt;/a&gt;, incluso &lt;a href="http://moleskinformatico.blogspot.com/2009/12/como-obtener-lista-de-ventanas-mediante.html"&gt;los handles de todas las ventanas.&lt;/a&gt;&lt;br /&gt;Aqui una clase con un Método que retorna la ruta del ejecutable mediante el handle de la ventana que recibe como parámetro:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Requerido para las API´s:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; GetIcon_Win_APIs&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; WinApis&lt;br /&gt;{&lt;br /&gt;   [DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; GetWindowThreadProcessId(IntPtr hWnd, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; lpdwProcessId);&lt;br /&gt;&lt;br /&gt;    [DllImport(&lt;span class="str"&gt;"kernel32.dll"&lt;/span&gt;)]&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId);&lt;br /&gt;&lt;br /&gt;   [DllImport(&lt;span class="str"&gt;"kernel32.dll"&lt;/span&gt;)]&lt;br /&gt;   [&lt;span class="kwrd"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.Bool)]&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; CloseHandle(IntPtr hObject);&lt;br /&gt;&lt;br /&gt;    [DllImport(&lt;span class="str"&gt;"Psapi.dll"&lt;/span&gt;)]&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName, [In] [MarshalAs(UnmanagedType.U4)] &lt;span class="kwrd"&gt;int&lt;/span&gt; nSize);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetExePath(IntPtr hwnd)&lt;br /&gt;   {&lt;br /&gt;       &lt;span class="rem"&gt;//recupero el id del proceso&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;uint&lt;/span&gt; idProc = 0;&lt;br /&gt;       GetWindowThreadProcessId(hwnd, &lt;span class="kwrd"&gt;out&lt;/span&gt; idProc);&lt;br /&gt;&lt;br /&gt;       &lt;span class="rem"&gt;//obtengo el path del ejecutable de la aplicacion&lt;/span&gt;&lt;br /&gt;       StringBuilder path = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(1024);&lt;br /&gt;&lt;br /&gt;       &lt;span class="rem"&gt;//abro el proceso obteniendo el handle&lt;/span&gt;&lt;br /&gt;       IntPtr hProcess = OpenProcess(1040, 0, idProc);&lt;br /&gt;&lt;br /&gt;       &lt;span class="rem"&gt;//recupero la ruta o path del ejecutable&lt;/span&gt;&lt;br /&gt;       GetModuleFileNameEx(hProcess, IntPtr.Zero, path, path.Capacity);&lt;br /&gt;&lt;br /&gt;       &lt;span class="rem"&gt;//cierro el proceso abierto&lt;/span&gt;&lt;br /&gt;       CloseHandle(hProcess);&lt;br /&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;return&lt;/span&gt; path.ToString();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;span class="rem"&gt;//namespace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Observaciones:&lt;/span&gt;&lt;br /&gt;En Windows Vista y 7 algunos procesos no pueden ser abiertos y en consecuencia no se puede obtener la ruta del ejecutable, esto se debe a los permisos.Lo mencionado no sucede si se corre el VS o la aplicación(ésta) como administrador.Pero esto sólo con algunas aplicaciones que incluso para ponerlas a correr normalmente ocupan permisos y piden confirmacion(sólo en Vista y 7).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-8278556278477963677?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/8278556278477963677/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/08/obtener-ruta-o-path-de-ejecutable.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8278556278477963677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8278556278477963677'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/08/obtener-ruta-o-path-de-ejecutable.html' title='Obtener ruta o path de Ejecutable mediante Handle de Ventana y API&apos;s'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-432079767187572251</id><published>2010-06-06T12:33:00.000-07:00</published><updated>2010-06-06T13:47:46.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='instalacion oracle en ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle xe'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='desbloquear HR'/><title type='text'>Instalar Oracle XE 10g en Ubuntu 9.10</title><content type='html'>Primero que nada, debemos fijarnos en cuánta SWAP o memoria de intercambio tenemos, si es mayor o igual a 1024MB esta bien, en caso contrario habrá que incrementar la SWAP(&lt;a href="http://moleskinformatico.blogspot.com/2010/06/incrementar-swap-o-memoria-de.html"&gt;Ver AQUI&lt;/a&gt;).&lt;br /&gt;Una vez que tengamos el tamaño de SWAP requerido, procedemos a instalar Oracle XE 10g.&lt;br /&gt;&lt;br /&gt;Primero debemos agregar lso repositorios de Oracle a nuestra lista de repositorios, para eso debemos editar el arhivo  /etc/apt/sources.list, asi que lo abrimos como root:&lt;br /&gt;&lt;code&gt;sudo gedit /etc/apt/sources.list&lt;/code&gt;&lt;br /&gt;Agregamos lo siguiente al final del archivo:&lt;br /&gt;&lt;code&gt;### REPOSITORIO ORACLE ######&lt;br /&gt;deb http://oss.oracle.com/debian unstable main non-free&lt;/code&gt;&lt;br /&gt;Guardamos y cerramos.&lt;br /&gt;Luego,agregamos la clave GPG:&lt;br /&gt;&lt;code&gt;wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | sudo apt-key add -&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Actualizamos la lista de repositorios:&lt;br /&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya podemos instalar, instalaremos el servidor y el cliente:&lt;br /&gt;&lt;code&gt;sudo aptitude install oracle-xe oracle-xe-client&lt;/code&gt;&lt;br /&gt;Nos preguntará si deseamos instalar los paquetes, así que le decimos que sí.&lt;br /&gt;&lt;br /&gt;Después de la instalación es necesario configurar nuestro servidor oracle, para eso:&lt;br /&gt;&lt;code&gt;sudo /etc/init.d/oracle-xe configure&lt;/code&gt;&lt;br /&gt;Ahora sólo debemos asignar valores a lo que nos presenta, debemos asignar el puerto HTTP(8080), el puerto del listener de la base de datos(1521), una contraseña para el usuario sys o system y finalmente preguntará si se desea que el servidor Oracle XE se inicie al inicio del sistema.&lt;br /&gt;A continuación una captura de mi configuración(clic sobre la imagen para verla más clara):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/TAv8_vq8xYI/AAAAAAAAApY/EvfIgEjGd9M/s1600/Configure_oracle-xe.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 222px;" src="http://4.bp.blogspot.com/_wp91e-x7RW0/TAv8_vq8xYI/AAAAAAAAApY/EvfIgEjGd9M/s320/Configure_oracle-xe.png" alt="" id="BLOGGER_PHOTO_ID_5479751543684908418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para ingresar a la base de datos a través de su navegador web, escribimos la dirección que se muestra en la última línea de la configuración, en mi caso:&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 102, 0);"&gt;http://127.0.0.1:8080/apex&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O podemos ir a &lt;span style="font-weight: bold;"&gt;Aplicaciones/Oracle DataBase 10g Express Edition/Ir a Página Inicial de Base de Datos&lt;/span&gt;&lt;br /&gt;La página que se nos muestra es como esta(clic en la imagen):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/TAwACYVsR6I/AAAAAAAAApg/cUsc3k_VLg0/s1600/apex.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 328px; height: 97px;" src="http://4.bp.blogspot.com/_wp91e-x7RW0/TAwACYVsR6I/AAAAAAAAApg/cUsc3k_VLg0/s320/apex.png" alt="" id="BLOGGER_PHOTO_ID_5479754887496222626" border="0" /&gt;&lt;/a&gt;Nos logeamos con el nombre se usuario sys o system, escribimos el password que asignamos en la configuración.Y se nos mostrará la página desde donde podemos administrar nuestra base de datos:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/TAwBxxTegPI/AAAAAAAAApo/poTIFF5ESpE/s1600/apex_in.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 178px;" src="http://4.bp.blogspot.com/_wp91e-x7RW0/TAwBxxTegPI/AAAAAAAAApo/poTIFF5ESpE/s320/apex_in.png" alt="" id="BLOGGER_PHOTO_ID_5479756801163297010" border="0" /&gt;&lt;/a&gt;Como no es recomendable trabajar directamente con el usuario sys o system, debemos crear un nuevo usuario. Oracle trae un usuario de ejemplo, el usuario HR, pero debemos desbloquearlo, para eso, hacemos clic el &lt;span style="font-weight: bold;"&gt;Administration&lt;/span&gt;, luego en &lt;span style="font-weight: bold;"&gt;DataBase Users&lt;/span&gt;, luego clic sobre&lt;span style="font-weight: bold;"&gt; HR&lt;/span&gt; y lo desbloqueamos y asignamos algunos privilegios:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wp91e-x7RW0/TAwFXipillI/AAAAAAAAApw/whWbTlY4AAs/s1600/unblockHR.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 163px;" src="http://3.bp.blogspot.com/_wp91e-x7RW0/TAwFXipillI/AAAAAAAAApw/whWbTlY4AAs/s320/unblockHR.png" alt="" id="BLOGGER_PHOTO_ID_5479760748599219794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Una ves desbloqueado el usuario HR, podemos cerrar la sesion(&lt;span style="font-weight: bold;"&gt;log out&lt;/span&gt;) y logearnos con el usuario HR.&lt;br /&gt;&lt;br /&gt;Podrán ver que el usuario HR ya trae su propio schema. Para ver las tablas, clic en :&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Object Browser/Browse/Tables&lt;/span&gt;, nos mostrará las tablas:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/TAwHK7Wm0vI/AAAAAAAAAp4/_ALcagTHzYE/s1600/schermaHR.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 140px;" src="http://4.bp.blogspot.com/_wp91e-x7RW0/TAwHK7Wm0vI/AAAAAAAAAp4/_ALcagTHzYE/s320/schermaHR.png" alt="" id="BLOGGER_PHOTO_ID_5479762730915648242" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-432079767187572251?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/432079767187572251/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/06/instalar-oracle-xe-10g-en-ubuntu-910.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/432079767187572251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/432079767187572251'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/06/instalar-oracle-xe-10g-en-ubuntu-910.html' title='Instalar Oracle XE 10g en Ubuntu 9.10'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wp91e-x7RW0/TAv8_vq8xYI/AAAAAAAAApY/EvfIgEjGd9M/s72-c/Configure_oracle-xe.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5741438713554010697</id><published>2010-06-06T11:54:00.000-07:00</published><updated>2010-06-06T13:51:25.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='9.10'/><category scheme='http://www.blogger.com/atom/ns#' term='karmic koala'/><category scheme='http://www.blogger.com/atom/ns#' term='incrementar swap'/><category scheme='http://www.blogger.com/atom/ns#' term='memoria de intercambio'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Incrementar SWAP o Memoria de Intercambio en Ubuntu 9.10</title><content type='html'>Creamos un archivo del tamaño que queramos, por ejemplo de 512MB:&lt;br /&gt;&lt;code&gt;sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512&lt;/code&gt;&lt;br /&gt;Donde: count=512 significa que queremos que nuestro archivo contenga 512 bloques donde el tamaño de bloque(block size) sea de 1 mebibyte: bs=1M.&lt;br /&gt;&lt;br /&gt;Luego, formateamos el archivo para crear un dispositivo swap:&lt;br /&gt;&lt;code&gt;sudo mkswap /mnt/512Mb.swap&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Añadimos la SWAP al sistema:&lt;br /&gt;&lt;code&gt;sudo swapon /mnt/512Mb.swap&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para hacer permanente este cambio, debemos editar el archivo fstab, para eso lo abrimos como root con nuestro editor de texto preferido, lo abriré con gedit que es el editor que se instala por defecto en ubuntu:&lt;br /&gt;&lt;code&gt;gksudo gedit /etc/fstab&lt;/code&gt;&lt;br /&gt;Ahora agegamos estas líneas al final del archivo:&lt;br /&gt;&lt;code&gt;### Nuevo SWAP ####&lt;br /&gt;/mnt/512Mb.swap  none  swap  sw  0 0&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Guardamos los cambios y cerramos.&lt;br /&gt;Luego, Reiniciamos el sistema y ya podremos ver si se ha incrementado nuestra swap o memoria de intercambio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 102, 0);font-size:130%;" &gt;Deshacer Cambios:&lt;/span&gt;&lt;br /&gt;Si se quiere deshacer los cambios se debe seguir los mismos pasos pero en sentido inverso.&lt;br /&gt;Primero abrimos el archivo fstab y borramos las última líneas agregadas:&lt;br /&gt;&lt;code&gt;### Nuevo SWAP ####&lt;br /&gt;/mnt/512Mb.swap  none  swap  sw  0 0&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Guardamos y cerramos.&lt;br /&gt;Luego, removemos la SWAP del sistema:&lt;br /&gt;&lt;code&gt;sudo swapoff /mnt/512Mb.swap&lt;/code&gt;&lt;br /&gt;Finalmente, removemos el archivo que creamos al principio:&lt;br /&gt;&lt;code&gt;sudo rm /mnt/512Mb.swap&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y eso es todo,no se necesita reiniciar.&lt;br /&gt;&lt;br /&gt;Fuente:https://help.ubuntu.com/community/SwapFaq&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5741438713554010697?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5741438713554010697/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/06/incrementar-swap-o-memoria-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5741438713554010697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5741438713554010697'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/06/incrementar-swap-o-memoria-de.html' title='Incrementar SWAP o Memoria de Intercambio en Ubuntu 9.10'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-580176701870395181</id><published>2010-05-02T01:08:00.000-07:00</published><updated>2010-05-02T01:35:13.182-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='localhost'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox lento  ASP.NET Development Server'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='ipv6'/><category scheme='http://www.blogger.com/atom/ns#' term='ipv4'/><title type='text'>Firefox Lento con  ASP.NET Development Server - Solucion</title><content type='html'>En las últimas versiones de Mozilla las páginas cargan muy lentamente al correr una aplicación web desde Visual Studio.&lt;br /&gt;Se debe al conocido asunto de &lt;span style="font-weight: bold;"&gt;IPv6&lt;/span&gt; con Firefox.Mas Información &lt;a href="http://kb.mozillazine.org/Network.dns.disableIPv6" target="_blank"&gt;AQUI&lt;/a&gt;.&lt;br /&gt;La solucion es cambiar algunos parametros en la configuración de Mozilla.&lt;br /&gt;Primero, escribiir en la barra de navegación:&lt;br /&gt;&lt;code&gt;about:config&lt;/code&gt;&lt;br /&gt;Luego, cambiar el valor de &lt;span style="font-weight: bold;"&gt;network.dns.disableIPv6&lt;/span&gt; a &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;true&lt;/span&gt;&lt;/span&gt;, sin embargo, esto deshabilitará el soporte IPv6 para todos los sitios, de manera que lo recomendable sería sólo cambiar el valor de &lt;span style="font-weight: bold;"&gt;network.dns.ipv4OnlyDomains&lt;/span&gt; a&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;localhost&lt;/span&gt;.&lt;br /&gt;Y listo, funciona!.&lt;br /&gt;&lt;br /&gt;Fuente: &lt;a href="http://dotnetslackers.com/ASP_NET/re-122146_Speeding_Up_FireFox_When_Using_the_ASP_NET_Development_Server_from_Localhost.aspx" target="_blank"&gt;dotnetslackers.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-580176701870395181?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/580176701870395181/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/05/firefox-lento-con-aspnet-development.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/580176701870395181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/580176701870395181'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/05/firefox-lento-con-aspnet-development.html' title='Firefox Lento con  ASP.NET Development Server - Solucion'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5693570409693303806</id><published>2010-03-02T21:35:00.000-08:00</published><updated>2010-03-02T22:05:28.063-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='after insert'/><category scheme='http://www.blogger.com/atom/ns#' term='updating'/><category scheme='http://www.blogger.com/atom/ns#' term='como saber'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='inserting'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlserver'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><category scheme='http://www.blogger.com/atom/ns#' term='trigger'/><title type='text'>Cómo saber si es Insert  o Update  Trigger AFTER INSERT,UPDATE -  SQL SERVER</title><content type='html'>Se tien dos tablas:Empleado y Empleado_Log, se quiere que cada vez que se haga un cambio o una nueva inserción de registro en la tabla Empleado se guarde el nuevo registro o el modificado en la tabla Empleado_Log se debe especificar si fue un insert o un update en una de las columnas, la cual en este ejemplo se llama: "accion".&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;--TABLAS:&lt;br /&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; Empleado(&lt;br /&gt;                        id &lt;span class="kwrd"&gt;int&lt;/span&gt; &lt;span class="kwrd"&gt;not&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;,&lt;br /&gt;                        nombre &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;                        apellido &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;                        edad &lt;span class="kwrd"&gt;int&lt;/span&gt;,&lt;br /&gt;                        editable &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(2)&lt;br /&gt;                    )&lt;br /&gt;--tabla log&lt;br /&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; Empleado_Log(&lt;br /&gt;                            idEmpleado &lt;span class="kwrd"&gt;int&lt;/span&gt;,&lt;br /&gt;                            nombre &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;                            apellido &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;                            edad &lt;span class="kwrd"&gt;int&lt;/span&gt;,&lt;br /&gt;                            editable &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(2),&lt;br /&gt;                            accion &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20)&lt;br /&gt;                          )&lt;br /&gt;&lt;br /&gt;--&lt;span class="kwrd"&gt;trigger&lt;/span&gt; que se disparará cuando se haga un &lt;span class="kwrd"&gt;insert&lt;/span&gt; o un &lt;span class="kwrd"&gt;update&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;trigger&lt;/span&gt; trg_Example&lt;br /&gt;&lt;span class="kwrd"&gt;on&lt;/span&gt; Empleado&lt;br /&gt;&lt;span class="kwrd"&gt;after&lt;/span&gt; &lt;span class="kwrd"&gt;insert&lt;/span&gt;,&lt;span class="kwrd"&gt;update&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;as&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;begin&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;declare&lt;/span&gt;&lt;br /&gt;    @idEmp &lt;span class="kwrd"&gt;int&lt;/span&gt;,&lt;br /&gt;    @nombre &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;    @apellido &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;    @edad &lt;span class="kwrd"&gt;int&lt;/span&gt;,&lt;br /&gt;    @editable &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(2),&lt;br /&gt;    @accion &lt;span class="kwrd"&gt;varchar&lt;/span&gt; (20)&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;select&lt;/span&gt; @idEmp=id,@nombre=nombre,@apellido=apellido,@edad=edad,&lt;br /&gt;            @editable=editable&lt;br /&gt;            &lt;span class="kwrd"&gt;from&lt;/span&gt; inserted&lt;br /&gt;    &lt;span class="kwrd"&gt;begin&lt;/span&gt;&lt;br /&gt;        --Si hay valores en la tabla deleted y además todos(excepto &lt;br /&gt;        --editable y id) son diferentes a los nuevos valores insertados,&lt;br /&gt;        --significa que ha habido un &lt;span class="kwrd"&gt;update&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; &lt;span class="kwrd"&gt;exists&lt;/span&gt;(&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; deleted d &lt;span class="kwrd"&gt;join&lt;/span&gt; inserted i &lt;span class="kwrd"&gt;on&lt;/span&gt; &lt;br /&gt;                    d.id=i.id &lt;span class="kwrd"&gt;where&lt;/span&gt; d.nombre != i.nombre &lt;span class="kwrd"&gt;or&lt;/span&gt; &lt;br /&gt;                    d.apellido != i.apellido &lt;span class="kwrd"&gt;or&lt;/span&gt; d.edad != i.edad)&lt;br /&gt;        &lt;span class="kwrd"&gt;begin&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;set&lt;/span&gt; @accion =&lt;span class="str"&gt;'record updated'&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; Empleado_Log &lt;span class="kwrd"&gt;values&lt;/span&gt;(@idEmp,@nombre,@apellido,&lt;br /&gt;                                            @edad,@editable,@accion)&lt;br /&gt;        &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;br /&gt;        --Si &lt;span class="kwrd"&gt;no&lt;/span&gt; ha habido un &lt;span class="kwrd"&gt;update&lt;/span&gt; hay valores sólo en la tabla inserted&lt;br /&gt;        --y eso significa que ha habido un &lt;span class="kwrd"&gt;insert&lt;/span&gt;.&lt;span class="kwrd"&gt;No&lt;/span&gt; se debe olvidar&lt;br /&gt;        --que un &lt;span class="kwrd"&gt;update&lt;/span&gt; es un &lt;span class="kwrd"&gt;delete&lt;/span&gt; y un &lt;span class="kwrd"&gt;insert&lt;/span&gt;.&lt;br /&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; &lt;span class="kwrd"&gt;exists&lt;/span&gt;(&lt;span class="kwrd"&gt;select&lt;/span&gt; id &lt;span class="kwrd"&gt;from&lt;/span&gt; inserted) &lt;br /&gt;                            &lt;span class="kwrd"&gt;and&lt;/span&gt; &lt;span class="kwrd"&gt;not&lt;/span&gt; &lt;span class="kwrd"&gt;exists&lt;/span&gt;(&lt;span class="kwrd"&gt;select&lt;/span&gt; id &lt;span class="kwrd"&gt;from&lt;/span&gt; deleted)&lt;br /&gt;        &lt;span class="kwrd"&gt;begin&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;set&lt;/span&gt; @accion =&lt;span class="str"&gt;'record inserted'&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; Empleado_Log &lt;span class="kwrd"&gt;values&lt;/span&gt;(@idEmp,@nombre,@apellido,&lt;br /&gt;                                                @edad,@editable,@accion)&lt;br /&gt;        &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;--probando&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; Empleado &lt;span class="kwrd"&gt;values&lt;/span&gt; (1,&lt;span class="str"&gt;'pedro'&lt;/span&gt;,&lt;span class="str"&gt;'sanchez'&lt;/span&gt;,30,&lt;span class="str"&gt;'si'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; Empleado &lt;span class="kwrd"&gt;values&lt;/span&gt; (2,&lt;span class="str"&gt;'Luis'&lt;/span&gt;,&lt;span class="str"&gt;'Perez'&lt;/span&gt;,32,&lt;span class="str"&gt;'no'&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;update&lt;/span&gt; Empleado &lt;span class="kwrd"&gt;set&lt;/span&gt; nombre=&lt;span class="str"&gt;'josse'&lt;/span&gt;,apellido=&lt;span class="str"&gt;'diaz'&lt;/span&gt;,&lt;br /&gt;                    edad=21,editable=&lt;span class="str"&gt;'si'&lt;/span&gt; &lt;span class="kwrd"&gt;where&lt;/span&gt; id=1&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;update&lt;/span&gt; Empleado &lt;span class="kwrd"&gt;set&lt;/span&gt; nombre=&lt;span class="str"&gt;'Juan'&lt;/span&gt; &lt;span class="kwrd"&gt;where&lt;/span&gt; id=2&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;delete&lt;/span&gt; &lt;span class="kwrd"&gt;from&lt;/span&gt; Empleado_Log&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; Empleado_Log&lt;br /&gt;&lt;br /&gt;--borrando tablas y &lt;span class="kwrd"&gt;trigger&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;drop&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; Empleado_Log&lt;br /&gt;&lt;span class="kwrd"&gt;drop&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; Empleado&lt;br /&gt;&lt;span class="kwrd"&gt;drop&lt;/span&gt; &lt;span class="kwrd"&gt;trigger&lt;/span&gt; trg_Example&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5693570409693303806?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5693570409693303806/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/03/como-saber-si-es-insert-o-update.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5693570409693303806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5693570409693303806'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/03/como-saber-si-es-insert-o-update.html' title='Cómo saber si es Insert  o Update  Trigger AFTER INSERT,UPDATE -  SQL SERVER'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3991896301251427509</id><published>2010-02-03T19:01:00.000-08:00</published><updated>2010-02-03T19:08:44.879-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='after insert'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlserver'/><category scheme='http://www.blogger.com/atom/ns#' term='trigger'/><title type='text'>Trigger After Insert Update - SQL SERVER</title><content type='html'>&lt;div class="cajacodigo"&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;/*Creo la Tabla Empleado*/&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; Empleado(&lt;br /&gt;nombre &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;apellido &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*En esta se guardará automaticamente lo que se guardo en &lt;br /&gt;la Tabla Empleado*/&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;create&lt;/span&gt; &lt;span class="kwrd"&gt;table&lt;/span&gt; Empleado_Log(&lt;br /&gt;nombre &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;apellido &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;direccion &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(100),&lt;br /&gt;edad &lt;span class="kwrd"&gt;int&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*Creo &lt;span class="kwrd"&gt;Trigger&lt;/span&gt;, se ejecutará después de insertar o actualizar la &lt;br /&gt;tabla Empleado e insertará los neuvos datos insertados en Empleado&lt;br /&gt;en la tabla Empleado_Log*/&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Create&lt;/span&gt; &lt;span class="kwrd"&gt;trigger&lt;/span&gt; trg_Empleado_Log&lt;br /&gt;&lt;span class="kwrd"&gt;on&lt;/span&gt; Empleado&lt;br /&gt;&lt;span class="kwrd"&gt;after&lt;/span&gt; &lt;span class="kwrd"&gt;insert&lt;/span&gt;,&lt;span class="kwrd"&gt;update&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;as&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;set&lt;/span&gt; nocount &lt;span class="kwrd"&gt;on&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;declare&lt;/span&gt;&lt;br /&gt;    @nombre &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20),&lt;br /&gt;    @apellido &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(20)&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;select&lt;/span&gt; @nombre = nombre,@apellido = apellido &lt;br /&gt;    &lt;span class="kwrd"&gt;from&lt;/span&gt; inserted&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;declare&lt;/span&gt;&lt;br /&gt;    @direccion &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(100),&lt;br /&gt;    @edad &lt;span class="kwrd"&gt;int&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;set&lt;/span&gt; @direccion=&lt;span class="str"&gt;'Av 15, Santa Marina'&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;set&lt;/span&gt; @edad = 22&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;begin&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; Empleado_Log &lt;span class="kwrd"&gt;values&lt;/span&gt;(@nombre,@apellido,@direccion,@edad )&lt;br /&gt;    &lt;span class="kwrd"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*Probando*/&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;insert&lt;/span&gt; &lt;span class="kwrd"&gt;into&lt;/span&gt; Empleado &lt;span class="kwrd"&gt;values&lt;/span&gt;(&lt;span class="str"&gt;'Pedro'&lt;/span&gt;,&lt;span class="str"&gt;'Casas'&lt;/span&gt;)&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; Empleado&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; Empleado_Log&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;update&lt;/span&gt; Empleado &lt;span class="kwrd"&gt;set&lt;/span&gt; nombre = &lt;span class="str"&gt;'Carlos'&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; Empleado&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; Empleado_Log&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3991896301251427509?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3991896301251427509/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/02/trigger-after-insert-update-sql-server.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3991896301251427509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3991896301251427509'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/02/trigger-after-insert-update-sql-server.html' title='Trigger After Insert Update - SQL SERVER'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3024726835492875879</id><published>2010-01-18T21:57:00.000-08:00</published><updated>2010-01-31T23:32:23.625-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tabla'/><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='tabla desde archivo'/><category scheme='http://www.blogger.com/atom/ns#' term='table from file'/><category scheme='http://www.blogger.com/atom/ns#' term='ora-00900'/><category scheme='http://www.blogger.com/atom/ns#' term='invalid statement'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle - Crear Tablas desde archivo .sql</title><content type='html'>El comando para ejecutar un archivo sql sería:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@archivo.sql;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;o bien&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@C:\Cualquier\Ruta\archivo.sql;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Desde luego que la unidad puede variar y no necesariamente tiene que ser la unidad C.&lt;br /&gt;&lt;br /&gt;Ahora bien, si ejecutamos esta sentencia desde la Página inicial de Base de Datos; es decir la interfaz Web, obtendremos el error:&lt;br /&gt;&lt;code&gt;&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;ORA-00900: invalid SQL statement&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Al menos con al version oracle xe 10g express me dió este error.&lt;br /&gt;&lt;br /&gt;Oracle dice al respecto de este error:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight:bold;"&gt;ORA-00900&lt;/span&gt; invalid SQL statement&lt;br /&gt;    Cause: The statement is not recognized as a valid SQL statement. This error can occur if the Procedural Option is not installed and a SQL statement is issued that requires this option (for example, a CREATE PROCEDURE statement). You can determine if the Procedural Option is installed by starting SQL*Plus. If the PL/SQL banner is not displayed, then the option is not installed.&lt;br /&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;"&gt;Action&lt;/span&gt;: Correct the syntax or install the Procedural Option.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Por el momento no nos complicamos la vida y nos conectamos mediante el editor SQL PLUS (se instaló con Oracle developer).&lt;br /&gt;Cuando nos hemos conectado escribimos el comando:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@C:\Cualquier\Ruta\archivo.sql;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Y ¡Sí! ha funcionado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3024726835492875879?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3024726835492875879/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/01/crear-tablas-desde-archivo-sql.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3024726835492875879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3024726835492875879'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/01/crear-tablas-desde-archivo-sql.html' title='Oracle - Crear Tablas desde archivo .sql'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3489418490406148232</id><published>2010-01-16T19:41:00.000-08:00</published><updated>2010-01-31T23:36:12.872-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tabla'/><category scheme='http://www.blogger.com/atom/ns#' term='plsql'/><category scheme='http://www.blogger.com/atom/ns#' term='bd'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='trigger'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle - Trigger y algunas cosas básicas</title><content type='html'>No es case sensitive.&lt;br /&gt;No existe el: on update cascade.&lt;br /&gt;Para crear una tabla:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;create table Producto(&lt;br /&gt;id number not null constraint d_pk primary key,&lt;br /&gt;precio number,&lt;br /&gt;stock number);&lt;br /&gt;&lt;br /&gt;/*otra tabla*/&lt;br /&gt;create table Pedidos(&lt;br /&gt;idprod number not null,&lt;br /&gt;unidades number,&lt;br /&gt;foreign key (idprod) references producto(id));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Insertando a las tablas:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/*insertando a la tabla producto*/&lt;br /&gt;insert into Producto values(1,350,10);&lt;br /&gt;&lt;br /&gt;/*insertando a la tabla pedidos*/&lt;br /&gt;insert into Pedidos values(1,8);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Haciendo Select en las tablas:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;select *  from Pedidos order by idprod asc;&lt;br /&gt;select * from Producto order by id asc;&lt;br /&gt;/*Esta última consulta nos mostrará el valor '10' en el campo 'stock' aún cuando ya&lt;br /&gt;se ha hecho el pedido de '8' productos.*/&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Lo ideal sería que cuando se hagan pedidos el numero de estos sea restado al campo 'stock' de la tabla Producto.&lt;br /&gt;&lt;br /&gt;En ese caso podemos crear un trigger en el que especificaremos que cada vez que se haga un 'insert', un 'update' o un 'delete', el valor en el campo 'stock' de la tabla Poducto se actualize.&lt;br /&gt;&lt;br /&gt;Creando el trigger 'calculastock':&lt;br /&gt;&lt;code&gt;&lt;br /&gt;create o replace trigger calculastock&lt;br /&gt;after insert or delete or update&lt;br /&gt;on Pedidos&lt;br /&gt;for each row&lt;br /&gt;begin&lt;br /&gt;if(inserting or updating)&lt;br /&gt;then&lt;br /&gt;update Producto&lt;br /&gt;set stock = stock - :new.unidades&lt;br /&gt;where Producto.id = :new.idprod;&lt;br /&gt;end if;&lt;br /&gt;if(updating or deleting)&lt;br /&gt;then&lt;br /&gt;update Producto&lt;br /&gt;set stock = stock + :old.unidades&lt;br /&gt;where Producto.id = :old.idprod;&lt;br /&gt;end if;&lt;br /&gt;end;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Las variables 'old' y 'new' no necesitan declararse, son tipo tipo %ROWTYPE , y contienen una copia del registro 'antes'(old) y 'después'(new) de la acción sql(insert, update,delete).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3489418490406148232?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3489418490406148232/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2010/01/oracle-algunos-comandos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3489418490406148232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3489418490406148232'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2010/01/oracle-algunos-comandos.html' title='Oracle - Trigger y algunas cosas básicas'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5234149516269459148</id><published>2009-12-12T17:52:00.000-08:00</published><updated>2010-12-05T21:59:36.033-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interopServices'/><category scheme='http://www.blogger.com/atom/ns#' term='enumwindow'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='callback'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='getwindowtext'/><category scheme='http://www.blogger.com/atom/ns#' term='getwindowlong'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='gwl_style'/><category scheme='http://www.blogger.com/atom/ns#' term='handle'/><title type='text'>Cómo obtener lista de ventanas mediante API´s</title><content type='html'>Para obtener los manejadores o handles delas ventanas abiertas se puede hacer llamando a la función GetWindow, pero es mas seguro hacerlo mediante la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms633497%28VS.85%29.aspx"&gt;EnumWindows &lt;/a&gt;ya que GetWindow puede refenciar a un handle de una ventana ya destruida o quedarse en un loop`o ciclo infinito, es fácil darse cuenta de esto último mediante el debugger.&lt;br /&gt;La funcion EnumWindows esta contenida en la librería user32.dll y su sintaxis es la siguiente:&lt;br /&gt;&lt;blockquote&gt;&lt;span id="ctl00_MTCS_main_ctl01"&gt; &lt;div class="libCScode" id="ctl00_MTCS_main_ctl01_"&gt;          &lt;div class="CodeSnippetTitleBar"&gt;         &lt;div class="CodeDisplayLanguage"&gt;                      &lt;/div&gt;              &lt;/div&gt;     &lt;div dir="ltr" style="background-color: rgb(221, 221, 221);"&gt;     &lt;pre class="libCScode" style="white-space: pre-wrap;" id="ctl00_MTCS_main_ctl01_code" space="preserve"&gt;BOOL EnumWindows(&lt;br /&gt;WNDENUMPROC &lt;em&gt;lpEnumFunc&lt;/em&gt;,&lt;br /&gt;LPARAM &lt;em&gt;lParam&lt;/em&gt;&lt;br /&gt;);&lt;/pre&gt;     &lt;/div&gt; &lt;/div&gt;  &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;El primer parámetro es un puntero a una función callback.&lt;br /&gt;El segundo parámetro de la función es un valor definido por la aplicación; es decir que puedo mandar cualquier parámetro que me sea necesario usar en la función callback.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para el primer parámetro debemos declarar un &lt;a href="http://moleskinformatico.blogspot.com/2009/12/delegados-c.html"&gt;delegado&lt;/a&gt;. Antes de hacerlo veamos como debe ser la función callback(&lt;a href="http://msdn.microsoft.com/en-us/library/ms633498%28VS.85%29.aspx"&gt;EnumWindowsProc&lt;/a&gt;):&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;blockquote&gt;&lt;span id="ctl00_MTCS_main_ctl03"&gt; &lt;div class="libCScode" id="ctl00_MTCS_main_ctl03_"&gt;          &lt;div class="CodeSnippetTitleBar"&gt;         &lt;div class="CodeDisplayLanguage"&gt;                      &lt;/div&gt;              &lt;/div&gt;     &lt;div dir="ltr" style="background-color: rgb(221, 221, 221);"&gt;     &lt;pre class="libCScode" style="white-space: pre-wrap;" id="ctl00_MTCS_main_ctl03_code" space="preserve"&gt;BOOL CALLBACK EnumWindowsProc(&lt;br /&gt;HWND &lt;em&gt;hwnd&lt;/em&gt;,&lt;br /&gt;LPARAM &lt;em&gt;lParam&lt;/em&gt;&lt;br /&gt;);&lt;/pre&gt;     &lt;/div&gt; &lt;/div&gt;  &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;El primer parámetro es el handle de la ventana, lo recibirá de su llamador,la función EnumWindows.&lt;br /&gt;El segundo parámetro es un valor definido por la aplicación,lo recibirá de su llamador,la función EnumWindows.&lt;br /&gt;Debe retornar TRUE para seguir enumerando, de lo contrario no lo hará.&lt;br /&gt;&lt;br /&gt;Antes es necesario saber que para poder acceder a las API's es necesario agregar la directiva:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/system.runtime.interopservices.aspx"&gt;using System.Runtime.InteropServices;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Entonces declaramos el delegado y de una vez la función EnumWindows:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//declaro el delegado para la función callback&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EnumWindowsCallback(IntPtr hwnd, IntPtr lParam);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Declaro la función EnumWindows&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EnumWindows(EnumWindowsCallback Callback, IntPtr lParam);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ahora creamos el método al que apuntará el delegado EnumWindowsCallback y El método público que llamará a la función EnumWindows :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Metodo al que apunta el delegado EnumWinodwsCallback&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Callback(IntPtr hwnd, IntPtr lParam)&lt;br /&gt;{&lt;br /&gt;hwndList.Add(hwnd);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;span class="rem"&gt;//continua la&lt;/span&gt;&lt;span class="rem"&gt; enumeración&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//aqui se guradara la lista de handle's&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;IntPtr&amp;gt; hwndList;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;IntPtr&amp;gt; GetWindowsList()&lt;br /&gt;{&lt;br /&gt;hwndList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;IntPtr&amp;gt;();&lt;br /&gt;&lt;br /&gt;EnumWindowsCallback MyCallback = Callback;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; val = EnumWindows(MyCallback, IntPtr.Zero);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*retorno la lista de handle's*/&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; hwndList;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Se recuperará todos los handle's de todas las ventanas abiertas, que son muchas.Si lo que se quiere es recuperar sólo las ventanas con borde y visibles -que en su mayoría son las que tienen los programas o aplicaciones mas comunes y de uso diario- se debe llamar a la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms633584%28VS.85%29.aspx"&gt;GetWindowLong&lt;/a&gt; para saber los estilos de la ventana; es decir, si tiene borde y si es visible, entre otros valores que se pueden consultar.&lt;br /&gt;La función GetWindowLong recupera información de una ventana especificada.&lt;br /&gt;Su sintaxis:&lt;br /&gt;&lt;blockquote&gt;&lt;span id="ctl00_MTCS_main_ctl02"&gt; &lt;div class="libCScode" id="ctl00_MTCS_main_ctl02_"&gt;          &lt;div class="CodeSnippetTitleBar"&gt;         &lt;div class="CodeDisplayLanguage"&gt;                      &lt;/div&gt;              &lt;/div&gt;     &lt;div dir="ltr" style="background-color: rgb(221, 221, 221);"&gt;     &lt;pre class="libCScode" style="white-space: pre-wrap;" id="ctl00_MTCS_main_ctl02_code" space="preserve"&gt;LONG GetWindowLong(&lt;br /&gt;HWND &lt;em&gt;hWnd&lt;/em&gt;,&lt;br /&gt;int &lt;em&gt;nIndex&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;);&lt;/pre&gt;     &lt;/div&gt; &lt;/div&gt;  &lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;El primer parámetro es el handle una ventana especificada, de la que se quiere saber su estilo.&lt;br /&gt;El segundo parámetro sera el valor de GWL_STYLE, pues para este ejemplo es necesario.&lt;br /&gt;En &lt;a href="http://www.pinvoke.net/default.aspx/Constants/Window%20styles.html"&gt;esta página&lt;/a&gt; se pueden ver las los valores  de &lt;a href="http://msdn.microsoft.com/en-us/library/ms632600%28VS.85%29.aspx"&gt;sus constantes&lt;/a&gt;.&lt;br /&gt;El msdn dice que para que nuestro código sea compatible con 32bits y 64bits debemos llamar a la función&lt;a href="http://msdn.microsoft.com/en-us/library/ms633585%28VS.85%29.aspx"&gt; GetWindowLongPtr&lt;/a&gt; que es prácticamente lo mismo que GetWindowLong -en su declaración-.Sin embargo, en Windows Vista Ultimate de 32bits la función GetWindowLonPtr no funciona, no existe.En cambio GetWindowLongA corre sin problemas en el S.O mencionado.Acerca de ésta dice el msdn que provee un comportamiento mas consistente entre los S.O's Windows. Así que para este ejemplo se llamara a la funcion GetWindowLongA, por lo que la función callback quedará:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;//El valor standard de GWL_STYLE es -16&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; GWL_STYLE = -16;&lt;br /&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; WS_VISIBLE = 0x10000000;&lt;br /&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; WS_BORDER = 0x00800000;&lt;br /&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; TARGETWINDOW = WS_BORDER | WS_VISIBLE;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Declaro la funcion GetWindowLongA&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; GetWindowLongA(IntPtr hWnd, &lt;span class="kwrd"&gt;int&lt;/span&gt; nIndex);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Metodo al que apunta el delegado EnumWinodwsCallback&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Callback(IntPtr hwnd, IntPtr lParam)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;//agrego ventanas visibles con borde&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; ((GetWindowLongA(hwnd, GWL_STYLE) &amp;amp; TARGETWINDOW) == TARGETWINDOW)&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;      hwndList.Add(hwnd);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;span class="rem"&gt;//continua la enumeración&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;En&lt;br /&gt;&lt;code&gt;if ((GetWindowLongA(hwnd, GWL_STYLE) &amp;amp; TARGETWINDOW) == TARGETWINDOW)&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;       hwndList.Add(hwnd);&lt;br /&gt;   }&lt;/code&gt;&lt;br /&gt;le decimos si la ventana tiene bordes y es visible que agregue a la lista genérica hwndList.&lt;br /&gt;&lt;br /&gt;Para hacer mas intersante la aplicación podemos recuperar también los titulos de las ventanas cuyos handle's hemos recuperado. Esto lo hacemos mediante la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms633520%28VS.85%29.aspx"&gt;GetWindowText&lt;/a&gt; contenida en la librería user32.dll :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*Declaro la función GetWindowText*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Recupera el título de un&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;a ventana(de la barra de título), si es que tiene.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;param name="hWnd"&amp;gt;Handle de la ventana de la que se quiere recuperar el título.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;param name="lpString"&amp;gt;[out]Puntero al buffer que recibe el texto.Si el texto es&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// más largo que el buffer será truncado y terminado con caracter NULL.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;param name="nMaxCount"&amp;gt;Especifica el maximo´número de caracteres a escribir en&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// el buffer&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;[DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetWindowText(IntPtr hWnd, StringBuilder lpString, &lt;span class="kwrd"&gt;int&lt;/span&gt; nMaxCount);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Para que se vea mas ordenado en una clase estática pondré las llamadas a las API's y mostraré en un listbox(WPF) los titulos de ventanas obtenidos.&lt;br /&gt;Clase APICalls.cs :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Requerido para las API´s:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; GettingWindows&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ApiCalls&lt;br /&gt;{&lt;br /&gt; &lt;span class="rem"&gt;//aqui se guradara la lista de handle´s&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;IntPtr&amp;gt; hwndList;&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;//El valor standard de GWL_STYLE&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; GWL_STYLE = -16;&lt;br /&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; WS_VISIBLE = 0x10000000;&lt;br /&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; WS_BORDER = 0x00800000;&lt;br /&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; TARGETWINDOW = WS_BORDER | WS_VISIBLE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Enumera todas las ventanas de la pantalla.Para eso llama a la función&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Callback.La funcion continua llamandose hasta&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// que EnumWindowsCallback retorne false.&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="lpEnumFunc"&amp;gt;Puntero a la funcion EnumWindowsCallback&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="lParam"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt; [DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EnumWindows(EnumWindowsCallback Callback, IntPtr lParam);&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Defino EnumWindowsCallback a traves de un delegado.&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Ver el metodo privado estatico Callback.&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="hwnd"&amp;gt;Handle de la ventana top-level que esta enumerando &amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="lParam"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Para continuar enumeando debe retornar TRUE&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; EnumWindowsCallback(IntPtr hwnd, IntPtr lParam);&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Recupera la información de una ventana especifica&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="hWnd"&amp;gt;Handle a la ventana y-indirectamente- a la clase a la cual&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// pertenece la ventana.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="nIndex"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;retorna cero(0) si la funcion falla&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt; [DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;ulong&lt;/span&gt; GetWindowLongA(IntPtr hWnd, &lt;span class="kwrd"&gt;int&lt;/span&gt; nIndex);&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/***/&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// Recupera el título de una ventana(de la barra de título), si es que tiene.&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="hWnd"&amp;gt;Handle de la ventana de la que se quiere recuperar el título.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="lpString"&amp;gt;[out]Puntero al buffer que recibe el texto.Si el texto es&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// más largo que el buffer será truncado y terminado con caracter NULL.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// &amp;lt;param name="nMaxCount"&amp;gt;Especifica el maximo número de caracteres a escribir en&lt;/span&gt;&lt;br /&gt; &lt;span class="rem"&gt;/// el buffer&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt; [DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetWindowText(IntPtr hWnd, StringBuilder lpString, &lt;span class="kwrd"&gt;int&lt;/span&gt; nMaxCount);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/**************************************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;//Metodo al que apunta el delegado EnumWinodwsCallback&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Callback(IntPtr hwnd, IntPtr lParam)&lt;br /&gt; {&lt;br /&gt;     &lt;span class="rem"&gt;//agrego ventanas visibles con borde&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;if&lt;/span&gt; ((GetWindowLongA(hwnd, GWL_STYLE) &amp;amp; TARGETWINDOW) == TARGETWINDOW)&lt;br /&gt;     {&lt;br /&gt;&lt;br /&gt;         hwndList.Add(hwnd);&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;span class="rem"&gt;//continua la enumeración&lt;/span&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; GetWindowsList()&lt;br /&gt; {&lt;br /&gt;     List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; wndTitles = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;() ;&lt;br /&gt;     StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder(256);&lt;br /&gt;&lt;br /&gt;     hwndList = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;IntPtr&amp;gt;();&lt;br /&gt;&lt;br /&gt;     EnumWindowsCallback MyCallback = Callback;&lt;br /&gt;&lt;br /&gt;     EnumWindows(MyCallback, IntPtr.Zero);&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/*ya llena la lista de handle´s obtengo el titulo de cada ventana*/&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (IntPtr h &lt;span class="kwrd"&gt;in&lt;/span&gt; hwndList)&lt;br /&gt;     {&lt;br /&gt;         GetWindowText(h, sb, sb.Capacity);&lt;br /&gt;&lt;br /&gt;         wndTitles.Add(sb.ToString());&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     &lt;span class="rem"&gt;/*retorno la lista de titulos de ventanas*/&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;return&lt;/span&gt; wndTitles;&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Código de la ventana MainWindow.xaml(en XAML):&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="GettingWindows.MainWindow"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;br /&gt;&lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="MainWindow"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="363"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="322"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="27"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="26,29,133,0"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="btnGetList"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt; &lt;span class="attr"&gt;Click&lt;/span&gt;&lt;span class="kwrd"&gt;="btnGetList_Click"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mostrar lista de ventanas&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Button&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="26,80,19,18"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="lbxList"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Código de MainWindow.cs :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Data;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Documents;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Input;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Media;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Media.Imaging;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; GettingWindows&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Interaction logic for MainWindow.xaml&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MainWindow : Window&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; MainWindow()&lt;br /&gt; {&lt;br /&gt;     InitializeComponent();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnGetList_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br /&gt; {&lt;br /&gt;     lbxList.ItemsSource = ApiCalls.GetWindowsList();&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Una captura:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;pre class="csharpcode"&gt;&lt;span&gt;&lt;span id="ctl00_MTCS_main_ctl02"&gt;&lt;pre class="libCScode" style="white-space: pre-wrap;" id="ctl00_MTCS_main_ctl02_code" space="preserve"&gt;&lt;span&gt;&lt;span id="ctl00_MTCS_main_ctl01"&gt;&lt;pre class="libCScode" style="white-space: pre-wrap;" id="ctl00_MTCS_main_ctl01_code" space="preserve"&gt;&lt;span&gt;&lt;span id="ctl00_MTCS_main_ctl01"&gt;&lt;pre class="libCScode" style="white-space: pre-wrap;" id="ctl00_MTCS_main_ctl01_code" space="preserve"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/SySh2EDtyPI/AAAAAAAAApM/IL9cQBevecM/s1600-h/mainWindow.jpg"&gt;&lt;img style="cursor: pointer; width: 282px; height: 320px;" src="http://4.bp.blogspot.com/_wp91e-x7RW0/SySh2EDtyPI/AAAAAAAAApM/IL9cQBevecM/s320/mainWindow.jpg" alt="" id="BLOGGER_PHOTO_ID_5414630602180511986" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5234149516269459148?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5234149516269459148/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/12/como-obtener-lista-de-ventanas-mediante.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5234149516269459148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5234149516269459148'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/12/como-obtener-lista-de-ventanas-mediante.html' title='Cómo obtener lista de ventanas mediante API´s'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wp91e-x7RW0/SySh2EDtyPI/AAAAAAAAApM/IL9cQBevecM/s72-c/mainWindow.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-2474285828934615407</id><published>2009-12-03T16:21:00.000-08:00</published><updated>2009-12-05T14:24:57.265-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='lambda'/><category scheme='http://www.blogger.com/atom/ns#' term='covarianza'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='anonimo'/><category scheme='http://www.blogger.com/atom/ns#' term='net'/><category scheme='http://www.blogger.com/atom/ns#' term='metodo'/><category scheme='http://www.blogger.com/atom/ns#' term='delegate'/><category scheme='http://www.blogger.com/atom/ns#' term='delegados'/><category scheme='http://www.blogger.com/atom/ns#' term='contravarianza'/><title type='text'>Delegados C#</title><content type='html'>Un &lt;a href="http://msdn.microsoft.com/es-es/library/ms173171%28VS.80%29.aspx"&gt;delegado&lt;/a&gt; o delegate es un tipo que hace referencia a un método.Cualquier método que coincida con la firma del delegado puede asignarse al delegado.Veamos un ejemplo:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;  &lt;span class="rem"&gt;//Declaro un delegado&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; DelCalculo(&lt;span class="kwrd"&gt;int&lt;/span&gt; a,&lt;span class="kwrd"&gt;int&lt;/span&gt; b);&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//Creo un Metodo para el delegado DelCalculo.&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/*Nótese que coincide con la firma del delegado,&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;         *tanto por el tipo de valor devuelto como por los&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;         *tipos de los parametros*/&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Suma(&lt;span class="kwrd"&gt;int&lt;/span&gt; a, &lt;span class="kwrd"&gt;int&lt;/span&gt; b)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; (a + b);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/******************************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*Creo una instancia del delegado asignándole&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;             * el metodo al que hará referencia*/&lt;/span&gt;&lt;br /&gt;            DelCalculo obj = Suma;&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;/*Llamo al delegado*/&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; val = obj(3, 4);&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;/*Muestro en pantalla el valor devuelo:&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;             *El valor devuelto es : 7 */&lt;/span&gt;&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"El valor devuelto es : {0}"&lt;/span&gt;,val);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Desde la versión 2.0 de C# se puede hacer uso de los métodos anónimos,esto es pasar un bloque de código como parámetro de delegado, de esta forma no tendría que crear un método para asignárselo en la instanciación del delegado como lo hice en el código mostrado lineas arriba.A continuación instaciaré al delegado usando un método anónimo y en vez de devolver la suma de los parámetros, devolverá la diferencia:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt; &lt;span class="rem"&gt;/*Creo instancia del delegado usando un metodo anonimo*/&lt;/span&gt;&lt;br /&gt;            DelCalculo obj2 = &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; a, &lt;span class="kwrd"&gt;int&lt;/span&gt; b) { &lt;span class="kwrd"&gt;return&lt;/span&gt; (a - b); };&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;/*llamo al delegado*/&lt;/span&gt;&lt;br /&gt;            val = obj2(10, 5);&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;/*Muestro en pantalla el valor devuelto:&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;             *El valor devuelto por obj2 es : 5 */&lt;/span&gt;&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"El valor devuelto por obj2 es : {0}"&lt;/span&gt;, val);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Desde la versión 3.0 del framework .net es posible hacer uso de expresiones Lambda.A continuación instaciaré al delegado usando expresiones lambda y retornará el producto de sus parametros :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*instanciando delegado usando expresiones lambda*/&lt;/span&gt;&lt;br /&gt;            DelCalculo obj3 = (&lt;span class="kwrd"&gt;int&lt;/span&gt; a, &lt;span class="kwrd"&gt;int&lt;/span&gt; b) =&amp;gt; { &lt;span class="kwrd"&gt;return&lt;/span&gt; (a * b); };&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;/*llamando al delegado*/&lt;/span&gt;&lt;br /&gt;            val = obj3(6, 8);&lt;br /&gt;&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"El valor devuelto por obj3 es : {0}"&lt;/span&gt;, val);&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;/*Salida en pantalla: El valor devuelto por obj3 es : 48 */&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Dado que un delegado con instancias es un objeto, se puede pasar como parámetro a un metodo para ser llamado posteriormente, lo que se conoce como devolución de llamada asincrónica.Veamos un ejmplo:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt; &lt;span class="rem"&gt;/*Utiliza el delegado DelCalculo como parámetro y lo invoca*/&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MetodoConCallBack(&lt;span class="kwrd"&gt;int&lt;/span&gt; x, &lt;span class="kwrd"&gt;int&lt;/span&gt; y, DelCalculo callback)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; val = callback(x,y);&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"El resultado es : {0}"&lt;/span&gt;,val);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*llamo al método pasándole como parámetro una instancia del&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;* delegado DelCalculo, en este caso: obj*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            MetodoConCallBack(5, 4, obj);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*La salida en pantalla será: El resultado es : 9 */&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Un delegado puede llamar a mas de un método cuando se invoca.Sólo es necesario agregar los delegados -que llaman a los otros metodos- a su lista de invocación mediante el operador de suma "+" o "+=".Para el siguiente ejemplo crearé una nueva clase que contendrá dos metodos y tambien crearé un nuevo delegado que hará referencia a esos metodos:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TestingDelegates&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; MisMetodos&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Metodo1(&lt;span class="kwrd"&gt;string&lt;/span&gt; cad)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(cad+&lt;span class="str"&gt;" : Metodo1"&lt;/span&gt; );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Metodo2(&lt;span class="kwrd"&gt;string&lt;/span&gt; cad)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(cad + &lt;span class="str"&gt;" : Metodo2"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/***********************************************************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*instancia de clase MisMetodos*/&lt;/span&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; MisMetodos metodos = &lt;span class="kwrd"&gt;new&lt;/span&gt; MisMetodos();&lt;br /&gt;        &lt;span class="rem"&gt;/*Delegado para metodos de MisMetodos*/&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; nuevoDel(&lt;span class="kwrd"&gt;string&lt;/span&gt; cad);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*asignando*/&lt;/span&gt;&lt;br /&gt;            nuevoDel del1 = metodos.Metodo1;&lt;br /&gt;            nuevoDel del2 = metodos.Metodo2;&lt;br /&gt;&lt;br /&gt;            nuevoDel contenedorDel = del1 + del2;&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;/*Invocando al delegado que llamará a los métodos*/&lt;/span&gt;&lt;br /&gt;            contenedorDel(&lt;span class="str"&gt;"Metodo ejecutado"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*La salida será : &lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;*Metodo ejecutado : Metodo1&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;*Metodo ejecutado : Metodo2*/&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;También se pueden quitar métodos de la lista de invocación.A continuación quitaré el método Metodo1:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt; &lt;span class="rem"&gt;/*quitando el metodo Metodo1 de la lista de invocación*/&lt;/span&gt;&lt;br /&gt;            contenedorDel -= metodos.Metodo1;&lt;br /&gt;&lt;br /&gt;            contenedorDel(&lt;span class="str"&gt;"Metodo ejecutado"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*La salida será:&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;*Metodo ejecutado : Metodo2 */&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Al principio decía que el método debe coincidir con la firma del delegado, en realidad no tienen que coincidir exactamente, esto se debe a la covarianza y contravarianza:&lt;br /&gt;&lt;blockquote&gt;La covarianza permite que un método tenga un tipo de valor devuelto más derivado que lo que se define en el delegado. La contravarianza permite un método con tipos de parámetro que se deriven menos que en el tipo de delegado.&lt;/blockquote&gt;&lt;br /&gt;Veamos:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*Tengo dos clases, una base y otra derivada:*/&lt;/span&gt;&lt;br /&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClasePadre&lt;br /&gt;    {&lt;br /&gt;       &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ClaseHija : ClasePadre&lt;br /&gt;    {&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/***********************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*declaro un delegado para mostrar la Covarianza*/&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; ClasePadre CovarianzaDel();&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;/*declaro un delegado para mostrar la Contravarianza*/&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ContravarianzaDel(ClasePadre padre);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/************************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;//USANDO EXPRESIONES LAMBDA:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span class="rem"&gt;/*la covarianza nos permite esto:&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;  *devolver un tipo derivado del tipo que especifica el delegado*/&lt;/span&gt;&lt;br /&gt;            CovarianzaDel cov = () =&amp;gt; { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ClaseHija(); };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  ContravarianzaDel contrav = (ClasePadre padre) =&amp;gt; {&lt;span class="rem"&gt;/*...*/&lt;/span&gt;};&lt;br /&gt;&lt;br /&gt;            ClaseHija hija = &lt;span class="kwrd"&gt;new&lt;/span&gt; ClaseHija();&lt;br /&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/*La contravarianza nos permite mandar como parametro una &lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    *instancia de la clase derivada &lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;    *de la que se especifica en el delegado*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            contrav(hija);&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-2474285828934615407?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/2474285828934615407/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/12/delegados-c.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2474285828934615407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2474285828934615407'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/12/delegados-c.html' title='Delegados C#'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5828398572409237271</id><published>2009-11-01T18:09:00.000-08:00</published><updated>2009-12-30T13:15:22.304-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='show'/><category scheme='http://www.blogger.com/atom/ns#' term='create'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='select'/><category scheme='http://www.blogger.com/atom/ns#' term='orderby'/><category scheme='http://www.blogger.com/atom/ns#' term='distinct'/><category scheme='http://www.blogger.com/atom/ns#' term='sum avg min max'/><category scheme='http://www.blogger.com/atom/ns#' term='bd'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='asc'/><category scheme='http://www.blogger.com/atom/ns#' term='desc'/><category scheme='http://www.blogger.com/atom/ns#' term='describe.limit'/><category scheme='http://www.blogger.com/atom/ns#' term='from'/><category scheme='http://www.blogger.com/atom/ns#' term='table'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='insert'/><category scheme='http://www.blogger.com/atom/ns#' term='db'/><title type='text'>MySQL (en Ubuntu) - Guía rápida</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Nota:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Toda sentencia en MySQL debe terminar con un punto y coma (;).&lt;br /&gt;El símbolo &lt;span style="font-weight: bold; color: rgb(204, 102, 0);"&gt;$&lt;/span&gt; indica el símbolo de comando del interprete de comandos; por ejemplo,&lt;br /&gt;en Windows es&lt;span style="color: rgb(204, 102, 0); font-weight: bold;"&gt; c:\&gt;&lt;/span&gt;.El símbolo&lt;span style="font-weight: bold; color: rgb(204, 102, 0);"&gt; mysql&gt;&lt;/span&gt; es el símbolo de comandos de MySQL. No se deben escribir con el comando ya que son auto-generados, al igual que el símbolo&lt;span style="font-weight: bold; color: rgb(204, 102, 0);"&gt; -&gt;&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Instalación:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;$sudo apt-get install mysql-server-5.1&lt;/code&gt;&lt;br /&gt;Durante la instalación pedirá que se ingrese una contraseña para el root de mysql.&lt;br /&gt;Vamos a crear una base de datos y un usuario con el que vamos a trabajar y que tendrá acceso a la nueva base de datos.&lt;br /&gt;Para eso debemos conectarnos al servidor mysql mediante el comando:&lt;br /&gt;&lt;code&gt;$mysql -u nombredeusuario -p&lt;/code&gt;&lt;br /&gt;Dado que en este momento sólo existe el usuario root; entonces, desde la consola o terminal escribimos el comando:&lt;br /&gt;&lt;code&gt;$mysql -u root -p&lt;/code&gt;&lt;br /&gt;Nos pedirá la contraseña , así que la escribimos. Es de recordar que en la consola no aparecerá nada mientras escribimos la contraseña, así se evita que alguien más pueda verla.&lt;br /&gt;Establecida la conexión aparecerá el símbolo de comandos:&lt;br /&gt;&lt;code&gt;mysql&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Creamos la nueva base de datos:&lt;/span&gt;&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;DATABASE&lt;/span&gt; newdb;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Creamos el usuario jlrvpuma y le damos permiso completo de acceso a la nueva base de datos newdb:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;GRANT&lt;/span&gt; &lt;span class="kwrd"&gt;ALL&lt;/span&gt; &lt;span class="kwrd"&gt;ON&lt;/span&gt; newdb.* &lt;span class="kwrd"&gt;to&lt;/span&gt; jlrvpuma@localhost  IDENTIFIED &lt;span class="kwrd"&gt;BY&lt;/span&gt; &lt;span class="str"&gt;'password'&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Se ha creado al usuario “jlrvpuma” con contraseña “password” -puede ser cualquier cadena- y que tiene todos los permisos para la base de datos newdb y que se conectará a ella desde localhost.Si la conexión del cliente al servidor no fuera desde localhost, entonces se deberá cambiar localhost por el nombre del equipo pertinente.&lt;br /&gt;A partir de este momento nos conectaremos a la base de datos con el usuario jlrvpuma:&lt;br /&gt;&lt;code&gt;$mysql -u jlrvpuma -p&lt;/code&gt;&lt;br /&gt;Le indicamos a MySQL que vamos a utilizar la base de datos newdb:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;USE&lt;/span&gt; newdb;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Creando una tabla:&lt;/span&gt;&lt;br /&gt;Se usa la instrucción &lt;span style="font-weight: bold;"&gt;CREATE  TABLE&lt;/span&gt;:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; new_table(&lt;br /&gt;-&amp;gt; user_id &lt;span class="kwrd"&gt;INT&lt;/span&gt;,&lt;br /&gt;-&amp;gt; name &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(30),&lt;br /&gt;-&amp;gt; last_name &lt;span class="kwrd"&gt;VARCHAR&lt;/span&gt;(40));&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Visualizando tablas:&lt;/span&gt;&lt;br /&gt;Se usa la instrucción &lt;span style="font-weight: bold;"&gt;SHOW TABLES&lt;/span&gt; :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;SHOW TABLES&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Visualizando la estructura de una tabla:&lt;/span&gt;&lt;br /&gt;Se usa la instrucción &lt;span style="font-weight: bold;"&gt;DECRIBE&lt;/span&gt; :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;DESCRIBE&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Insertando nuevos registros en una tabla:&lt;/span&gt;&lt;br /&gt;Se utiliza la instrucción&lt;span style="font-weight: bold;"&gt; INSERT&lt;/span&gt;:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; new_table(user_id,name,last_name) &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(1,&lt;span class="str"&gt;'Carlos'&lt;/span&gt;,&lt;span class="str"&gt;'Villa'&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;También se puede hacer de una forma más sencilla:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; new_table &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;(2,&lt;span class="str"&gt;'Maritza'&lt;/span&gt;,&lt;span class="str"&gt;'Rodriguez'&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Pero se debe estar seguro del orden de los campos en la tabla, ya que se podría insertar datos en campos equivocados. Es recomendable usar la primera forma, de esa manera se reducen las posibilidades de errores, pues se puede apreciar el orden en que están siendo ingresados los campos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cambiando registros en una tabla:&lt;/span&gt;&lt;br /&gt;Se usa instrucción &lt;span style="font-weight: bold;"&gt;UPDATE&lt;/span&gt;:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; new_table &lt;span class="kwrd"&gt;SET&lt;/span&gt; name=&lt;span class="str"&gt;'Yuri'&lt;/span&gt; &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; user_id=2;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Eliminando registros en una tabla:&lt;/span&gt;&lt;br /&gt;Se usa la instrucción&lt;span style="font-weight: bold;"&gt; DELETE&lt;/span&gt;:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;DELETE &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; user_id=4;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Se debe tener cuidado, ya que si no se especifica mediante &lt;span style="font-weight: bold;"&gt;WHERE&lt;/span&gt; qué registro debe ser eliminado, se borrarán todos los registros de la tabla.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Recuperando información de una tabla(o haciendo consultas):&lt;/span&gt;&lt;br /&gt;Se usa la instrucción &lt;span style="font-weight: bold;"&gt;SELECT&lt;/span&gt;. Por ejemplo, si se quiere recuperar todos los campos, se usa el comodin &lt;span style="font-weight: bold;"&gt;*&lt;/span&gt;:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;O bien, si se quiere sólo algunos campos:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; name,last_name &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;usando la clausula WHERE:&lt;/span&gt;&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; name &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; user_id=1;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usando la instrucción LIKE y el comodín % :&lt;/span&gt;&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; name &lt;span class="kwrd"&gt;LIKE&lt;/span&gt; &lt;span class="str"&gt;'Car%'&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;El símbolo &lt;span style="font-weight: bold;"&gt;%&lt;/span&gt; significa 0(cero) o más caracteres después de la cadena 'Car'.En otras palabras se recuperará los registros cuyo campo name empiece por 'Car'.&lt;br /&gt;La instrucción :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; name &lt;span class="kwrd"&gt;LIKE&lt;/span&gt; &lt;span class="str"&gt;'%r%'&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;recuperará  todos los registros cuyo campo name empiece y termine por cualquier cadena pero que  contenga la letra 'r'.&lt;br /&gt;La instrucción :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; name &lt;span class="kwrd"&gt;LIKE&lt;/span&gt; &lt;span class="str"&gt;'M%a'&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;recuperará  todos los registros cuyo campo name empiece con 'M' y termine en 'a'.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usando la clausula ORDER BY:&lt;/span&gt;&lt;br /&gt;También podemos combinar con la clausula &lt;span style="font-weight: bold;"&gt;ORDER BY&lt;/span&gt; para ordenar los resultado y podemos usar las palabras clave&lt;span style="font-weight: bold;"&gt; ASC&lt;/span&gt; y/o&lt;span style="font-weight: bold;"&gt; DESC&lt;/span&gt;  para ordenar los resultados en orden ascendente o descendente respectivamente:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; name &lt;span class="kwrd"&gt;DESC&lt;/span&gt;;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; name &lt;span class="kwrd"&gt;ASC&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;o bien:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; *  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; name &lt;span class="kwrd"&gt;ASC&lt;/span&gt;, last_name &lt;span class="kwrd"&gt;DESC&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usando la instrucción DISTINCT :&lt;/span&gt;&lt;br /&gt;Útil cuando tenemos valores repetidos en dos o más campos y queremos los resultados sin repeticiones:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;DISTINCT&lt;/span&gt; name &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usando la clausula LIMIT:&lt;/span&gt;&lt;br /&gt;Permite limitar el numero de resultados o limite de fila, además permite establecer el desplazamiento; es decir el numero de fila desde dónde empezará a contar, la estructura sería mas o menos:&lt;span style="font-weight: bold;"&gt; LIMIT&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;span style="font-size:85%;"&gt;desplazamiento&lt;/span&gt;&lt;/span&gt;,&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;límite de fila&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;La instrucción :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;LIMIT&lt;/span&gt; 1,2;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;recuperará la segunda y tercera fila. El primer valor, a la izquierda de la coma, en la clausula LIMIT, se refiere al desplazamiento, en este ejemplo, al ser su valor 1, empezará a contar desde la segunda fila ya que se empieza a contar desde 0(cero). Se puede omitir el valor de desplazamiento, poniendo sólo el valor de la derecha o límite de fila, MySQL asumirá el valor 0(cero) como valor de desplazamiento predeterminado. La siguiente instrucción recuperará las dos primeras filas :&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; *  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table &lt;span class="kwrd"&gt;LIMIT&lt;/span&gt; 2;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usando funciones COUNT(), MAX(), MIN(),SUM(),AVG():&lt;/span&gt;&lt;br /&gt;Para obtener el número de filas o registros:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(name) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;O bien si se quiere saber cuantos nombres diferentes hay:&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(&lt;span class="kwrd"&gt;DISTINCT&lt;/span&gt; name) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Para recuperar el mayor valor de un campo:&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;MAX&lt;/span&gt;(user_id) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para recuperar el menor valor de un campo:&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;MIN&lt;/span&gt;(user_id) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para recuperar la media :&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;AVG&lt;/span&gt;(user_id) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para recuperar el total de la suma de todos los valores de un campo:&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;mysql&amp;gt; &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;SUM&lt;/span&gt;(user_id) &lt;span class="kwrd"&gt;FROM&lt;/span&gt; new_table;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5828398572409237271?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5828398572409237271/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/11/mysql-sobre-ubuntu-guia-rapida.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5828398572409237271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5828398572409237271'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/11/mysql-sobre-ubuntu-guia-rapida.html' title='MySQL (en Ubuntu) - Guía rápida'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3782546920486227010</id><published>2009-10-28T06:12:00.000-07:00</published><updated>2009-11-01T22:33:55.087-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diagramas de interaccion'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='diagramas'/><category scheme='http://www.blogger.com/atom/ns#' term='secuencia'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='colaboracion'/><title type='text'>Diagramas de interacción</title><content type='html'>&lt;div style="width:425px;text-align:left" id="__ss_2365960"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/jlrvpuma/diagramas-de-interaccion" title="Diagramas De Interaccion"&gt;Diagramas De Interaccion&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=diagramasdeinteraccion-091028080916-phpapp02&amp;stripped_title=diagramas-de-interaccion" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=diagramasdeinteraccion-091028080916-phpapp02&amp;stripped_title=diagramas-de-interaccion" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/jlrvpuma"&gt;jlrvpuma&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3782546920486227010?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3782546920486227010/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/diagramas-de-interaccion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3782546920486227010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3782546920486227010'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/diagramas-de-interaccion.html' title='Diagramas de interacción'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-7872413469031206285</id><published>2009-10-13T22:26:00.000-07:00</published><updated>2009-11-01T22:37:11.419-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='use case'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='casos de uso'/><title type='text'>Casos de Uso</title><content type='html'>Los casos de uso no son parte del diseño (Cómo) sino parte del análisis (Qué), de manera que nos ayudan a describir qué es lo que el sistema debe hacer. Cada caso de uso proporciona uno o más escenarios que indican cómo debería interactuar el sistema con el usuario o con otro sistema para conseguir un objetivo específico.Considérese un procesador de texto, dos casos de uso típico serían: "poner texto en negrita" y "crear índice" , por medio de estos ejemplos , se puede uno dar una idea de ciertas propiedades de los casos de uso :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El caso de uso capta alguna función visible para el usuario.&lt;/li&gt;&lt;li&gt;El caso de uso puede ser pequeño o grande.&lt;/li&gt;&lt;li&gt;El caso de uso logra un objetivo discreto para el usuario.&lt;/li&gt;&lt;/ul&gt;En su forma más simple el caso de uso se obtiene hablando con los usuarios habituales y analizando con ellos las distintas cosas que deseen hacer con el sistema.&lt;br /&gt;Se debe abordar cada cosa discreta que quieran , darle un nombre y escribir un testo descriptivo breve (sólo unos cuantos párrafos).&lt;br /&gt;No trate de obtener todos los detalles justo desde el principio, los podrá obtener cuando los necesite.&lt;br /&gt;Sin embargo, si considera que un caso de uso dado tiene ramificaciones arquitectónicas de importancia, necesitará más detalles  a la mano.&lt;br /&gt;Lo realmente útil de los casos de uso es el documento que describe el caso de uso, en este documento se explica la forma de interactuar entre el sistema y el usuario.&lt;br /&gt;Siguiendo con el procesador de texto, este podría ser el caso de uso de guardar un documento:&lt;br /&gt;&lt;br /&gt;&lt;table style="border: 1px solid Black;" width="100%" cellpadding="4" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border: 1px solid Black;" valign="top"&gt;&lt;b&gt;Nombre&lt;/b&gt;:&lt;/td&gt;  &lt;td style="border: 1px solid Black;" valign="top"&gt;Guardar Documento&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td style="border: 1px solid Black;" valign="top"&gt;&lt;b&gt;Autor&lt;/b&gt;:&lt;/td&gt;  &lt;td style="border: 1px solid Black;" valign="top"&gt;jlrvpuma&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td style="border: 1px solid Black;" valign="top"&gt;&lt;b&gt;Fecha&lt;/b&gt;:&lt;/td&gt;  &lt;td style="border: 1px solid Black;" valign="top"&gt;14/10/2009&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td colspan="2" style="border: 1px solid Black;" valign="top"&gt;  &lt;b&gt;Descripción&lt;/b&gt;:&lt;br /&gt;Permite guardar un documento en el disco duro o cualquier medio de almacenamiento&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td colspan="2" style="border: 1px solid Black;" valign="top"&gt; &lt;b&gt;Actores&lt;/b&gt;:&lt;br /&gt;Usuario del procesador de texto&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td colspan="2" style="border: 1px solid Black;" valign="top"&gt; &lt;b&gt;Precondiciones&lt;/b&gt;:&lt;br /&gt;El usuario debe haber creado el documento&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td colspan="2" style="border: 1px solid Black;" valign="top"&gt; &lt;b&gt;Flujo Normal&lt;/b&gt;: &lt;ol&gt;&lt;li&gt;El actor pulsa sobre el botón para guardar el documento&lt;br /&gt;&lt;/li&gt;&lt;li&gt;El sistema muestra una caja de texto para introducir el título del documento y una zona de mayor tamaño donde se muestra el árbol de directorios del sistema para elegir el directorio dónde sera guardado el documento&lt;br /&gt;&lt;/li&gt;&lt;li&gt;El actor introduce el título del documento y elige el directorio donde se guardará el documento.&lt;/li&gt;&lt;li&gt;El sistema comprueba la validez de los datos y los almacena.&lt;/li&gt;&lt;/ol&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td colspan="2" style="border: 1px solid Black;" valign="top"&gt;  &lt;b&gt;Flujo Alternativo&lt;/b&gt;:  &lt;ol start="4"&gt;&lt;li&gt;El sistema comprueba la validez de los datos, si los datos no son correctos, se avisa al actor de ello permitiéndole que los corrija&lt;/li&gt;&lt;/ol&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td colspan="2" style="border: 1px solid Black;" valign="top"&gt; &lt;b&gt;Poscondiciones&lt;/b&gt;:&lt;br /&gt;El documento ha sido almacenado o guardado&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Me he saltado los campos Nombre,Autor,Fecha,Descripción ya que son evidentes y no necesitan explicación&lt;br /&gt;Los &lt;span style="font-weight: bold;"&gt;actores&lt;/span&gt; son aquellos que interactúan con el sistema. Las &lt;span style="font-weight: bold;"&gt;precondiciones&lt;/span&gt; son los hechos que se han de cumplir para que el flujo de evento se pueda llevar a cabo.El &lt;span style="font-weight: bold;"&gt;flujo norma&lt;/span&gt;l corresponde a la ejecución normal y exitosa del caso de uso.Los &lt;span style="font-weight: bold;"&gt;flujos alternativos&lt;/span&gt; permiten indicar que es lo que hará el sistema en situaciones anormales o inesperadas.Por ultimo, las &lt;span style="font-weight: bold;"&gt;poscondiciones&lt;/span&gt; son los hechos que se han de cumplir si el  el flujo de eventos  normal se ha ejecutado normalmente.&lt;br /&gt;Los casos de uso se pueden detallar mas o menos dependiendo del problema.&lt;br /&gt;Cabe señalar que el documento del caso de uso mostrado es incompleto, puedes ver una plantilla de caso de uso completa &lt;a href="http://www.processimpact.com/process_assets/use_case_template.doc"&gt;AQUI&lt;/a&gt;, se les suele llamar casos de uso "full-dressed". &lt;!-- google_ad_section_start(weight=ignore) --&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Diagramas de Casos de Uso&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;UML define una notación gráfica para realizar diagramas de casos de uso.Los &lt;b&gt;diagramas de casos de uso&lt;/b&gt; son a menudo confundidos con los casos de uso. Mientras los dos conceptos están relacionados, los casos de uso son mucho más detallados que los diagramas de casos de uso.Cuando empiezas a tener un número considerable de casos de uso como el anterior, no resulta nada fácil situarlos y relacionarlos. Entonces empiezas a tener la necesidad de una visión general del asunto, y ahora si, es cuando los diagramas de casos de uso son de utilidad.&lt;br /&gt;Los casos de uso están representados por elipses y los actores están representados por las &lt;i&gt;figuras humanas&lt;/i&gt;, estas son al notación estándar de los actores, sin embargo, algunos utilizan otras figuras como una imagen de un computador por ejemplo, para representar un actor.&lt;br /&gt;La figura siguiente muestra algunos de los casos de uso de un sistema de financiamiento : (extraído del libro&lt;span style="font-style: italic;"&gt; UML Gota a Gota)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_wp91e-x7RW0/StViA2IvdPI/AAAAAAAAAok/QcQB3-ntIFU/s1600-h/UC-1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 304px;" src="http://2.bp.blogspot.com/_wp91e-x7RW0/StViA2IvdPI/AAAAAAAAAok/QcQB3-ntIFU/s320/UC-1.png" alt="" id="BLOGGER_PHOTO_ID_5392323895517738226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Hay cuatro actores en la figura: el gerente de comercio, el comerciante, el agente de ventas y el sistema de contabilidad.En la mencionada organización probablemente habrá diversos comerciantes.Además, un usuario puede desempeñar varios papeles.Por ejemplo, un comerciante de edad madura podría desempeñar el papel de gerente de comercio y además ser un comerciante normal.Por otra parte, un comerciante puede ser también agente de ventas.Cuando se trata con actores, conviene pensar en los papeles o roles, no en las personas ni en los títulos de sus puestos.&lt;br /&gt;Los actores llevan a cabo casos de  uso.Un mismo actor puede realizar muchos casos de uso;a la inversa, un caso de uso puede ser realizado por varios actores.Obsérvese que no es necesario que los actores sean seres humanos, a pesar que estén representados por figuras humanas en el diagrama del caso de uso.El actor puede ser también un sistema externo que necesita información del sistema actual.En la figura se puede apreciar la necesidad de actualizar cuentas (caso de uso: actualiza cuentas) del sistema de contabilidad.&lt;br /&gt;Además de los vínculos entre los actores y los casos de uso, hay otros tipos de vínculos en el diagrama de casos de uso del sistema de financiamiento.Estos representan las relaciones de &lt;span style="font-weight: bold; font-style: italic;"&gt;uses&lt;/span&gt; y&lt;span style="font-style: italic; font-weight: bold;"&gt; extends&lt;/span&gt; entre los casos de uso.&lt;br /&gt;&lt;br /&gt;Se usa la relación &lt;span style="font-weight: bold; font-style: italic;"&gt;uses&lt;/span&gt; cuando es necesario que el caso de uso original haga uso de otro caso de uso, como en la figura de arriba, tenemos el caso de uso Analiza Riesgo, este caso de uso hace uso del caso de uso Valuación, le es necesario para cumplir su tarea, bien podría ir Valuación dentro de Analiza Riesgo, es decir hacer un solo caso de uso, pero eso hará mas oscuro el caso de uso y lo que se busca es simplificar.&lt;br /&gt;La relación&lt;span style="font-style: italic; font-weight: bold;"&gt; extends&lt;/span&gt; se usa cuando el caso de uso original tiene como extensión otro caso de uso, sin necesario su utilización, se podría decir que enriquece al caso de uso original; piénsese, para darse una idea, en las extensiones de firefox...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-7872413469031206285?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/7872413469031206285/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/casos-de-uso.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7872413469031206285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7872413469031206285'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/casos-de-uso.html' title='Casos de Uso'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wp91e-x7RW0/StViA2IvdPI/AAAAAAAAAok/QcQB3-ntIFU/s72-c/UC-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-15640207745545449</id><published>2009-10-13T22:23:00.000-07:00</published><updated>2009-10-13T23:32:59.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='analisis'/><title type='text'>UML - Análisis y diseño</title><content type='html'>El &lt;span style="font-weight: bold;"&gt;Lenguaje Unificado de Modelado&lt;/span&gt; o&lt;span style="font-weight: bold;"&gt; UML&lt;/span&gt;  (&lt;span style="font-weight: bold;"&gt;Unified Modeling Language&lt;/span&gt;, por sus siglas en inglés) es como su nombre lo dice un lenguaje de modelado de sistemas  de software, es decir &lt;span style="font-weight: bold;"&gt;Análisis&lt;/span&gt; y &lt;span style="font-weight: bold;"&gt;Diseño&lt;/span&gt; de sistemas de software, con el se construyen  sistemas por medio de conceptos orientados a objetos :&lt;br /&gt;¿Cómo deberían asignarse las responsabilidades a las clases de objetos?, ¿Cómo deberían interactuar éstos?, ¿Qué papel debe destinársele a cada clase?...Estas son preguntas muy importantes cuando se diseña un sistema.&lt;br /&gt;Tambien se podrá decir de UML que es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema de software.&lt;br /&gt;Lo más importante en el analisis y el diseño orientados a objetos es asignar eficientemente las responsabildades a los componentes de software;el hecho de saber asignar responsabilidades es lo que en definitiva hace o destruye a un sistema.&lt;br /&gt;Para crear una aplicacion de software hay que describir el problemas y las necesidades o requerimientos, es deicr en qué consiste el problema y ue debe hacerse.&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_wp91e-x7RW0/StVliqZAk0I/AAAAAAAAAo0/1CvSq7223VI/s1600-h/analisis-dise%C3%B1o-constr.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 151px;" src="http://2.bp.blogspot.com/_wp91e-x7RW0/StVliqZAk0I/AAAAAAAAAo0/1CvSq7223VI/s320/analisis-dise%C3%B1o-constr.jpg" alt="" id="BLOGGER_PHOTO_ID_5392327775015179074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;El &lt;span style="font-weight: bold;"&gt;Análisis&lt;/span&gt; se centra en la investigación del problema y no la manera de definir una solución, por ejemplo, se quiere un sistema de inventario de una tienda, la pregunta a formularse en esta fase sería :¿Cuáles procesos de la tienda se relacionan con su uso(del sistema)? para asi identificar los objetos -o conceptos- dentro del dominio del problema,por ejemplo en el caso del sist. de inventario se identifican el concepto u objeto : Producto&lt;br /&gt;&lt;br /&gt;El&lt;span style="font-weight: bold;"&gt; Diseño&lt;/span&gt; pone de relieve una solución lógica, cómo el sistema cumple con los requerimeintos, en esta fase se procura definir los objetos lógicos del software que finalmente seran implementados en un lenguaje de programacion orientado a objetos.Los objetos tienen atributos y metodos.Des esta forma el objeto Producto un atributo &lt;span style="font-style: italic;"&gt;precio&lt;/span&gt; y un método&lt;span style="font-style: italic;"&gt; calcularImpuesto&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Finalmente durante la &lt;span style="font-weight: bold;"&gt;construcción&lt;/span&gt; o programacón orientada a objetos se implementan los componentes del diseño, como una clase Producto, por ejemplo.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;La orientación a objetos se centra en la representación de objetos&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/StVlrzglAlI/AAAAAAAAAo8/1rZhxsL6WTE/s1600-h/blogdiagram.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 235px;" src="http://4.bp.blogspot.com/_wp91e-x7RW0/StVlrzglAlI/AAAAAAAAAo8/1rZhxsL6WTE/s320/blogdiagram.jpg" alt="" id="BLOGGER_PHOTO_ID_5392327932081668690" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-15640207745545449?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/15640207745545449/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/uml-analisis-y-diseno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/15640207745545449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/15640207745545449'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/uml-analisis-y-diseno.html' title='UML - Análisis y diseño'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wp91e-x7RW0/StVliqZAk0I/AAAAAAAAAo0/1CvSq7223VI/s72-c/analisis-dise%C3%B1o-constr.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5672842054645764244</id><published>2009-10-13T22:18:00.000-07:00</published><updated>2009-10-13T23:31:33.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='modelado de negocios'/><title type='text'>Modelado de Negocios</title><content type='html'>&lt;span style="font-family: verdana;font-family:arial;" &gt;Toda aplicación proporciona un servicio a su entorno. Este entorno es conocido como el dominio de la aplicación. El conocimiento del dominio de una aplicación es considerado como un factor crítico de éxito para el desarrollo de la aplicación; pues,es a partir de este conocimiento que los requisitos de la aplicación pueden ser definidos con mayor precisión.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-family:arial;" &gt;El Modelado de Negocios es un proceso que permite modelar el entorno de una aplicación y, por ende, ganar un conocimiento profundo de los elementos conceptuales que integran ese entorno. Este proceso es, hoy en día,                  incorporado en la mayoría de méodos, como la primera actividad técnica que debe realizarse durante el desarrollo de software.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-family:arial;" &gt;Cuanto mas se conozca del entorno mejor se podrá abarcar el modelado del problema o la Gestión de Requisitos y a su vez se abarcará el o losproblemascon un óptimo modelo de Solución.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-family:arial;" &gt;Como en la figura de abajo, para tener un Modelo de Solución se debe tener un Modelo del Problema, si no lo hay o si este esta mal diseñado, la solución será un desastre, y para tener un modelo del problema o una buena gestión de requisitos se debe tener un buen modelo de negocios,es decir, un óptimo conocimiento del dominio de la aplicación,de lo contrario no habría un modelado de problemas y mucho menos un modelado de la Solución...&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center; font-family: verdana;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_wp91e-x7RW0/StVtuA7mvsI/AAAAAAAAApE/hoelXopK5g4/s1600-h/modeladodenegocios.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 320px;" src="http://2.bp.blogspot.com/_wp91e-x7RW0/StVtuA7mvsI/AAAAAAAAApE/hoelXopK5g4/s320/modeladodenegocios.png" alt="" id="BLOGGER_PHOTO_ID_5392336766137450178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-family:arial;" &gt;En otras palabras, si lo que se necesitas es:&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-style: italic; font-family: verdana;"&gt;&lt;blockquote&gt;&lt;li&gt;Entender la estructura y dinámica de la organización para el cual se desarrollará un sistema.&lt;/li&gt;&lt;li&gt;Entender problema actuales en la organización e identificar mejoras potenciales.&lt;/li&gt;&lt;li&gt;Asegurar que el cliente, usuarios, y desarrolladores tienen un entendimiento común de la organización.&lt;/li&gt;&lt;li&gt;Derivar los requerimientos de sistema requeridos para soportar a la organización&lt;a href="http://www.forosdelweb.com/f50/rup-uml-modelado-del-negocio-437968/"&gt;&lt;span style="font-size:78%;"&gt;.[f]&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;font-family:arial;" &gt;entonces se debe realizar el Modelado de negocios.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5672842054645764244?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5672842054645764244/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/modelado-de-negocios.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5672842054645764244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5672842054645764244'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/modelado-de-negocios.html' title='Modelado de Negocios'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wp91e-x7RW0/StVtuA7mvsI/AAAAAAAAApE/hoelXopK5g4/s72-c/modeladodenegocios.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-8466735709358465352</id><published>2009-10-04T10:57:00.000-07:00</published><updated>2009-11-01T22:38:08.482-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='setwindowtext'/><category scheme='http://www.blogger.com/atom/ns#' term='findwindow'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='ventana'/><category scheme='http://www.blogger.com/atom/ns#' term='handle'/><category scheme='http://www.blogger.com/atom/ns#' term='getforegroundwindow'/><title type='text'>Obteniendo Handle de una ventana mediante API´s - Windows</title><content type='html'>Se puede obtener el handle de una ventana mediante su título o nombre de clase a la que pertenece llamando a la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms633499%28VS.85%29.aspx"&gt;FindWindow&lt;/a&gt; contenida en la librería user32.dll.Para poder acceder a la función es necesario agregar la directiva:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/system.runtime.interopservices.aspx"&gt;using System.Runtime.InteropServices&lt;/a&gt;;&lt;br /&gt;&lt;br /&gt;Declarar la función aplicando el atributo &lt;a href="http://msdn.microsoft.com/es-es/library/system.runtime.interopservices.dllimportattribute.aspx"&gt;DllImport&lt;/a&gt;(definido en  System.Runtime.InteropServices).Ademas, notar el modificador &lt;a href="http://msdn.microsoft.com/es-es/library/e59b22c5%28VS.80%29.aspx"&gt;extern&lt;/a&gt;:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[DllImport("user32.dll")]&lt;br /&gt;public static extern IntPtr FindWindow(string lpClassName, string lpWindowTitle);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora podemos llamarla.Por ejemplo, abrimos el Bloc de notas, nos fijamos en el título de la ventana:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sin título - Bloc de notas&lt;/span&gt;&lt;br /&gt;(Depende en qué idioma esté el S.O)&lt;br /&gt;&lt;br /&gt;Para obtener el handle de esta ventana llamamos a la función FindWindow ya declarada mandando como parámetro el titulo del Bloc de notas y al otro parámetro le enviamos un valor null:&lt;br /&gt;&lt;code&gt;IntPtr hWndNotepad = FindWindow(null,"Sin título - Bloc de notas");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Notar que el handle se recibe en un tipo &lt;a href="http://msdn.microsoft.com/es-es/library/system.intptr%28VS.80%29.aspx"&gt;IntPtr&lt;/a&gt;.Además, si la función falla retorna un valor Null.&lt;br /&gt;&lt;br /&gt;Para comprobar que, efectivamente, hemos obtenido el handle de la ventana requerida haremos una prueba:Cambiar el titulo de la ventana.&lt;br /&gt;Para cambiar el título de una ventana haré uso de la función &lt;a href="http://msdn.microsoft.com/en-us/library/ms633546%28VS.85%29.aspx"&gt;SetWindowText&lt;/a&gt; contenida en la librería user32.dll.Así que la declaro como hice con FindWindow :&lt;br /&gt;&lt;code&gt;[DllImport("user32.dll")]&lt;br /&gt;public static extern bool SetWindowText(IntPtr hWnd, string newTitle);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya puedo cambiar el titulo del Bloc de notas, mando como parametro el handle de la ventana y un string con el nuevo titulo:&lt;br /&gt;&lt;code&gt;bool v = SetWindowText(hWndNotepad, "¡¡¡¡¡¡ esto funciona !!!!!!");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para obtener el handle de la ventana en la que se trabaja; es decir, la activa,es necesario llamar a la función &lt;a href="http://msdn.microsoft.com/es-es/library/ms633505%28en-us,VS.85%29.aspx"&gt;GetForegroundWindow&lt;/a&gt;, también contenida en la librería user32.dll.Así que la declaramos como las demás:&lt;br /&gt;&lt;code&gt;&lt;br /&gt; [DllImport("user32.dll")]&lt;br /&gt;public static extern IntPtr GetForegroundWindow();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Llamamos a la función:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;IntPtr hWndActual=GetForegroundWindow();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Al final el código quedaría:&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="rem"&gt;//para llamar a apis:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; APIsExamples&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        [DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; IntPtr FindWindow(&lt;span class="kwrd"&gt;string&lt;/span&gt; lpClassName, &lt;span class="kwrd"&gt;string&lt;/span&gt; lpWindowTitle);&lt;br /&gt;        [DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; SetWindowText(IntPtr hWnd, &lt;span class="kwrd"&gt;string&lt;/span&gt; newTitle);&lt;br /&gt;        [DllImport(&lt;span class="str"&gt;"user32.dll"&lt;/span&gt;)]&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; IntPtr GetForegroundWindow();&lt;br /&gt;       &lt;br /&gt;        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            IntPtr hWndNotepad = FindWindow(&lt;span class="kwrd"&gt;null&lt;/span&gt;, &lt;span class="str"&gt;"Sin título - Bloc de notas"&lt;/span&gt;);&lt;br /&gt;            IntPtr hWndActual = GetForegroundWindow();&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"El handle del Bloc de notas es {0}"&lt;/span&gt;, hWndNotepad);&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"El handle de la ventana activa es {0}"&lt;/span&gt;, hWndActual);&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"\nCambiando el titulo de ventana del Bloc de notas..."&lt;/span&gt;);&lt;br /&gt;            &lt;span class="kwrd"&gt;bool&lt;/span&gt; v = SetWindowText(hWndNotepad, &lt;span class="str"&gt;"¡¡¡¡¡¡ esto funciona !!!!!!"&lt;/span&gt;);&lt;br /&gt;            Console.WriteLine(&lt;span class="str"&gt;"\nListo.La opreación ha devuelto un valor {0}"&lt;/span&gt;,v);&lt;br /&gt;&lt;br /&gt;            Console.ReadKey();&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Se puede recuperar los handle´s de las ventanas abiertas mediante la función GetWindow, aunque es mas eficiente hacerlo mediante la función EnumWindows.Esto  se verá en otro post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-8466735709358465352?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/8466735709358465352/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/obteniendo-handle-de-una-ventana.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8466735709358465352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8466735709358465352'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/10/obteniendo-handle-de-una-ventana.html' title='Obteniendo Handle de una ventana mediante API´s - Windows'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-1748127883586659372</id><published>2009-07-10T20:21:00.001-07:00</published><updated>2009-07-10T21:00:07.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='montar'/><category scheme='http://www.blogger.com/atom/ns#' term='fstab'/><category scheme='http://www.blogger.com/atom/ns#' term='particion'/><category scheme='http://www.blogger.com/atom/ns#' term='sfdisk'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu.ntfs'/><category scheme='http://www.blogger.com/atom/ns#' term='3g'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Montar Partición Windows en Ubuntu</title><content type='html'>Primero hay que asegurarse de que el paquete ntfs-3g este instalado, de no ser asi procedemos a instalarlo, ya sea desde el gestor de paquetes synaptic que se encuentra en el menu de la barra de tareas superior, la ruta sería: &lt;br /&gt;Sistema/Administración/Gestor de paquetes Synaptic&lt;br /&gt;&lt;br /&gt;O bien procedemos a instalarlo desde la consola o terminal,con el comando:&lt;br /&gt;&lt;code&gt;sudo apt-get install ntfs-3g&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Si ya esta instalado nos avisará que ya lo está.&lt;br /&gt;&lt;br /&gt;El paquete ntfs-3g permite poder escribir y borrar en particiones con formato NTFS.&lt;br /&gt;&lt;br /&gt;Luego, vemos en donde se encuentra la partición de windows, para eso escribimos en la consola o terminal:&lt;br /&gt;&lt;code&gt;sudo sfdisk -l&lt;/code&gt;&lt;br /&gt;Lo que nos arrojará una lista, mas o menos así:&lt;br /&gt;&lt;code&gt;/dev/sda1  1    34    273456  83  NTFS&lt;br /&gt;/dev/sda2  35   522   273456  83  LINUX&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En vez de "sda" puede ser "hda" u otro valor.Por el momento asumiremos que windows se encuentra en sda1, ya que es la que tiene formato NTFS(el que usa windows).&lt;br /&gt;&lt;br /&gt;Creamos un directorio, donde será montada la particionde windows.La crearemos en /home/usuario y la llamaremos Windows. Escribimos en consola:&lt;br /&gt;&lt;code&gt;sudo mkdir /home/usuario/Windows&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Luego, montamos la partición en el directorio creado:&lt;br /&gt;&lt;code&gt;sudo mount -t ntfs-3g /dev/sda1 /home/usuario/Windows&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora, ya tenemos acceso a la partición de windows desde el directorio Windows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Montando Particiones al arranque:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si se quiere montar las particiones desde el arranque es necesario modificar el archivo fstab.Para eso lo abrimos con nuestro deitor de texto favorito.A continuación usaremos Gedit ya que viene instalado por defecto en Ubuntu.Escribimos en consola:&lt;br /&gt;&lt;code&gt;sudo gedit /etc/fstab&lt;/code&gt;&lt;br /&gt;Se abrirá un archivo de texto con algunos datos.Asi que al final de todo escribimos esto:&lt;br /&gt;&lt;code&gt;/dev/sda1    /home/usuario/Windows       ntfs-3g       defaults          0 0&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Guardamos los cambios y cerramos.A continuación escribimos en la consola:&lt;br /&gt;&lt;code&gt;sudo mount -a&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Con esto ya deberíamos poder usar nuestra recien montada partición de windows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cabe aclarar que "usuario", en las rutas o path´s usados líneas arriba, se refiere al nombre de usuario del sistema; así, si el usuario es luis, entonces una ruta sería: /home/luis/Windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-1748127883586659372?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/1748127883586659372/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/07/montar-particion-windows-en-ubuntu.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1748127883586659372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1748127883586659372'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/07/montar-particion-windows-en-ubuntu.html' title='Montar Partición Windows en Ubuntu'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-7491412036596378510</id><published>2009-06-21T17:47:00.000-07:00</published><updated>2009-12-14T13:01:04.108-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='tabla'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='jlrvpuma'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='tex'/><category scheme='http://www.blogger.com/atom/ns#' term='table'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>Data Binding V - LaTeX</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Código &lt;a href="http://es.wikipedia.org/wiki/LaTeX"&gt;LaTeX&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo usando MultiBinding y MultiValueConverter .Lo que muestra es el código para generar una tabla en &lt;a href="http://www.google.co.cr/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;ved=0CAkQFjAA&amp;amp;url=http%3A%2F%2Fes.wikipedia.org%2Fwiki%2FLaTeX&amp;amp;ei=Z6cmS4W2OMWVtgfv6ZzLBw&amp;amp;usg=AFQjCNHC9GmJAPbt5gztuEqXq5jSiycr2g&amp;amp;sig2=aC9Hy8MdbQr7BOnYKzh2bQ"&gt;LaTeX&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;object width="1280" height="1042"&gt; &lt;param name="movie" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/flvplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/DataBinding_LaTeX.mp4"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/"&gt;  &lt;embed src="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/flvplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/DataBinding_LaTeX.mp4" allowfullscreen="true" base="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/5f2068ee-8f92-472b-93e1-e6afd2e2cd16/" scale="showall" width="400" height="350"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.archive.org/details/DataBindingLatexCode" target="_blank"&gt;&lt;span style="font-weight: bold;"&gt;Descargar&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Nota: Se requiere el framework 3.5&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-7491412036596378510?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/7491412036596378510/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-v-latex.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7491412036596378510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7491412036596378510'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-v-latex.html' title='Data Binding V - LaTeX'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-8183639873042053397</id><published>2009-06-18T19:19:00.000-07:00</published><updated>2009-11-01T22:44:28.970-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='converter'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='render'/><category scheme='http://www.blogger.com/atom/ns#' term='imultivalueconverter'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='multibinding'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='transform'/><category scheme='http://www.blogger.com/atom/ns#' term='multi'/><title type='text'>Data Binding IV</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Multi Binding - IMultiValueConverter&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt; :&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MultiBinding :&lt;/span&gt;&lt;br /&gt;La clase MultiBinding describe una colección de objetos Binding asociados a una sola propiedad de destino de enlace.&lt;br /&gt;MultiBinding permite enlazar una propiedad del destino de enlace a una lista de propiedades de origen y, a continuación, aplicar la lógica para generar un valor con las entradas indicadas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IMultiValueConverter:&lt;/b&gt;&lt;br /&gt;Proporciona una forma de aplicar la lógica personalizada a una clase MultiBinding.&lt;br /&gt;Para asociar un convertidor a una clase MultiBinding, se debe crear una clase que implemente la interfaz IMultiValueConverter y, a continuación, los métodos Convert y ConvertBack.&lt;br /&gt;&lt;br /&gt;En otras palabras, podemos tener múltiples propiedades de origen de enlace para una propiedad de destino de enlace.Sin embargo, la propiedad de destino de enlace sólo recibe una propiedad que no necesariamente es una de las de origen de enlace, sino el resultado de la lógica de conversion implementada en una clase que implementa la interfaz IMultiValueConverter.&lt;br /&gt;&lt;br /&gt;Por ejemplo, la propiedad RenderTransform de un objeto Image recibe un objeto Transform que puede ser un ScaleTransform,RotateTransform,etc...&lt;br /&gt;Para instanciar la clase RotateTransform se requieren -no necesariamente- tres valores de tipo &lt;span class="Apple-style-span" style="color: rgb(51, 102, 255);"&gt;double&lt;/span&gt;(angulo,coordenada X i Y del punto central de la rotación), los cuales se envían como parámetro a su constructor.&lt;br /&gt;&lt;br /&gt;Ahora bien, Qué hago si tuviera una objeto Image al cual quisiera rotar de manera que el angulo de rotación y las coordenadas X i Y cambien en función de otros procesos?.&lt;br /&gt;&lt;br /&gt;Pues, la respuesta es: &lt;span style="font-weight: bold;"&gt;MultiBinding + IMultiValueConverter.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para hecerlo mas comprensivo he hecho un pequeño ejemplo.Una pequeña aplicación que rota un objeto Image en base a los valores de tipo double de la propiedad Value de tres Slider´s.&lt;br /&gt;La propiedad RenderTransform(destino de enlace) del objeto Image, enlaza a tres propiedades de origen de enlace: la propiedad Value de cada Slider(líneas 33,34 y 35).&lt;br /&gt;&lt;br /&gt;Muestro el código XAML :&lt;br /&gt;&lt;div class="cajacodigo"&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="TestWPF_Data_Binding_II.DataBinding_MultiBinding"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:local&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:TestWPF_Data_Binding_II"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="DataBinding_MultiBinding"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="740"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="768"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:DoubleRotateTransform&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="Convertidor"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="57*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="124*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="521*"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="MultiBinding"&lt;/span&gt; &lt;span class="attr"&gt;FontSize&lt;/span&gt;&lt;span class="kwrd"&gt;="22"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Slider&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="53,11,125,0"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="slider1"&lt;/span&gt;  &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Top"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                &lt;span class="attr"&gt;Minimum&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Maximum&lt;/span&gt;&lt;span class="kwrd"&gt;="1000"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="attr"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding RelativeSource={RelativeSource Self}, Path=Value}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Slider&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="53,50,125,52"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="slider2"&lt;/span&gt; &lt;span class="attr"&gt;Minimum&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Maximum&lt;/span&gt;&lt;span class="kwrd"&gt;="1000"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="attr"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding RelativeSource={RelativeSource Self}, Path=Value}"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Slider&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="21"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="53,0,125,18"&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;              &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="slider3"&lt;/span&gt; &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Bottom"&lt;/span&gt; &lt;span class="attr"&gt;Minimum&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Maximum&lt;/span&gt;&lt;span class="kwrd"&gt;="360"&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;               &lt;span class="attr"&gt;ToolTip&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding RelativeSource={RelativeSource Self}, Path=Value}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;       &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="128,81,117,175"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="image"&lt;/span&gt; &lt;span class="attr"&gt;Stretch&lt;/span&gt;&lt;span class="kwrd"&gt;="Fill"&lt;/span&gt; &lt;span class="attr"&gt;Source&lt;/span&gt;&lt;span class="kwrd"&gt;="/TestWPF_Data_Binding_II;component/rotsnake.gif"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Image.RenderTransform&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;MultiBinding&lt;/span&gt; &lt;span class="attr"&gt;Converter&lt;/span&gt;&lt;span class="kwrd"&gt;="{StaticResource Convertidor}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Binding&lt;/span&gt; &lt;span class="attr"&gt;ElementName&lt;/span&gt;&lt;span class="kwrd"&gt;="slider1"&lt;/span&gt; &lt;span class="attr"&gt;Path&lt;/span&gt;&lt;span class="kwrd"&gt;="Value"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Binding&lt;/span&gt; &lt;span class="attr"&gt;ElementName&lt;/span&gt;&lt;span class="kwrd"&gt;="slider2"&lt;/span&gt; &lt;span class="attr"&gt;Path&lt;/span&gt;&lt;span class="kwrd"&gt;="Value"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Binding&lt;/span&gt; &lt;span class="attr"&gt;ElementName&lt;/span&gt;&lt;span class="kwrd"&gt;="slider3"&lt;/span&gt; &lt;span class="attr"&gt;Path&lt;/span&gt;&lt;span class="kwrd"&gt;="Value"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;MultiBinding&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Image.RenderTransform&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Image&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Vemos que, entre las lineas 32 y 38, se han enlazado tres propiedades de origen de enlace, las propiedades Value de tres Slider´s, para una sola propiedad destino de enlace.Además, notamos que, en la línea 33, se especifica la propiedad Converter para el MultiBinding :&lt;br /&gt;&lt;code&gt;Converter="{StaticResource Convertidor}"&lt;/code&gt;&lt;br /&gt;Esto significa que el recurso estático Convertidor esta apuntando a una clase que implementa la interfaz IMultiValueConverter.En efecto, la clase se llama DoubleToRotateTransform.Ha sido instanciada en la línea 7.&lt;br /&gt;&lt;br /&gt;En el método Convert se desarrolla la lógica de conversion de los tres valores de tipo double de la propiedad Value de cada Slider y se retorna un objeto RotateTransform, el cuál si admite la propiedad RenderTransform del objeto Image.&lt;br /&gt;Es conveniente señalar que, debido a que el modo del binding es OneWay,sólo es necesario implementar el metodo Convert.&lt;br /&gt;&lt;br /&gt;A continuación la clase DoubleToRotateTransform :&lt;br /&gt;&lt;div class="cajacodigo"&gt; &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="rem"&gt;//requerido para IMultiValueConverter:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Data;&lt;br /&gt;&lt;span class="rem"&gt;//requerido para ScaleTransform:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Media;&lt;br /&gt;&lt;span class="rem"&gt;//requerido para CultureInfo culture:&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TestWPF_Data_Binding_II&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DoubleToRotateTransform:IMultiValueConverter&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// Metodo que recibe dos valores de tipo double&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// y retorna un ScaleTransform&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;param name="values"&amp;gt;Colección de dos valores de tipo double&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;param name="targetType"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;param name="parameter"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;/// &amp;lt;param name="culture"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Retorna un ScaleTransform para la prop. RenderTransform de un image&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Convert(&lt;span class="kwrd"&gt;object&lt;/span&gt;[] values, Type targetType, &lt;span class="kwrd"&gt;object&lt;/span&gt; parameter, CultureInfo culture)&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="kwrd"&gt;double&lt;/span&gt; coorX = (&lt;span class="kwrd"&gt;double&lt;/span&gt;)values[0], coorY = (&lt;span class="kwrd"&gt;double&lt;/span&gt;)values[1], angulo=(&lt;span class="kwrd"&gt;double&lt;/span&gt;)values[2];&lt;br /&gt; &lt;br /&gt;      RotateTransform rt = &lt;span class="kwrd"&gt;new&lt;/span&gt; RotateTransform(angulo,coorX, coorY);&lt;br /&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; rt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt;[] ConvertBack(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, Type[] targetTypes, &lt;span class="kwrd"&gt;object&lt;/span&gt; parameter, CultureInfo culture)&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;//Hacer conversiones si el modo es TWOWAY&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotSupportedException(&lt;span class="str"&gt;"No se puede convertir"&lt;/span&gt;);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Como se darán cuenta, los valores de las propiedades de origen de enlace pasan al metodo Convert como una colección de objetos(primer parámetro):&lt;br /&gt;&lt;code&gt;objetct[] values&lt;/code&gt;&lt;br /&gt;Además, en la colección, estan en el orden en que fueron declarados en el enlace.Así, en la posición cero esta el valor dela propiedad Value de slider1; luego, en la posicion1, slider2 y finalmente slider3.&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Nota:&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt; Cada propiedad Tooltip de cada Slider esta enlazando a la propiedad Value del mismo objeto al que pertenecen(líneas 21, 24 y 28):&lt;br /&gt;&lt;code&gt;ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Value}"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Captura :&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wp91e-x7RW0/SjswZ8PKmyI/AAAAAAAAAng/oAL0Atfj4U8/s1600-h/MB.JPG"&gt;&lt;img src="http://3.bp.blogspot.com/_wp91e-x7RW0/SjswZ8PKmyI/AAAAAAAAAng/oAL0Atfj4U8/s320/MB.JPG" alt="" id="BLOGGER_PHOTO_ID_5348922204657195810" style="cursor: pointer; width: 320px; height: 308px;" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-8183639873042053397?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/8183639873042053397/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-iv.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8183639873042053397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8183639873042053397'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-iv.html' title='Data Binding IV'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wp91e-x7RW0/SjswZ8PKmyI/AAAAAAAAAng/oAL0Atfj4U8/s72-c/MB.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-7719205781190577831</id><published>2009-06-14T12:20:00.000-07:00</published><updated>2009-11-01T22:45:18.964-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='converter'/><category scheme='http://www.blogger.com/atom/ns#' term='ivalueconverter'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='enlazar'/><category scheme='http://www.blogger.com/atom/ns#' term='method'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='jlrvpuma'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><title type='text'>Data Binding WPF III</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Cómo enlazar un Método :&lt;/span&gt;&lt;br /&gt;El propósito del método es convertir Millas a Kilómetros. Recibe dos parámetros, un double especificando el valor de la distancia y un TipoDistancia especificando el tipo(Millas o Kilómetros).Retorna un String con el resultado de la conversión.&lt;br /&gt;El metodo se llama Convertir y para eso he creado una clase llamada ConvertidorDistancia y también he creado la enumeración TipoDistancia:&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TestWPF_Data_Binding_II&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; TipoDistancia&lt;br /&gt;{&lt;br /&gt;    Millas,&lt;br /&gt;    Kilometros&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ConvertidorDistancia&lt;br /&gt;{&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Convierte Millas a Kilometros y viceversa.&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="valorDist"&amp;gt;Valor a convertir&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="tipoDistancia"&amp;gt;Tipo de Distancia&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Un string conteniendo el valor convertido&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Convertir(&lt;span class="kwrd"&gt;double&lt;/span&gt; valorDist, TipoDistancia tipoDistancia)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (tipoDistancia == TipoDistancia.Millas)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; (valorDist * 1.609344).ToString(&lt;span class="str"&gt;"0.##"&lt;/span&gt;) + &lt;span class="str"&gt;" km"&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (tipoDistancia == TipoDistancia.Kilometros)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; (valorDist * 0.621371192).ToString(&lt;span class="str"&gt;"0.##"&lt;/span&gt;) + &lt;span class="str"&gt;" m"&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentOutOfRangeException(&lt;span class="str"&gt;"tipoDistancia"&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Para poder enlazar el método Convertir es necesario crear una instancia de la clase ConvertidorDistancia.Antes de hacerlo debemos agregar una referencia al espacio de nombre(namespace) donde se encuentra la Clase.En nuestro código Xaml sería la línea 4:&lt;br /&gt;&lt;code&gt;xmlns:local="clr-namespace:TestWPF_Data_Binding_II"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Donde local hace referencia al espacio de nombre TestWPF_Data_Binding_II.&lt;br /&gt;Además he agregado system como referencia al espacio de nombres System(línea 5), pues ocuparé un objeto de tipo Double(línea 19).&lt;br /&gt;&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="TestWPF_Data_Binding_II.DataBinding_Method"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2&lt;/span&gt;&lt;span class="kwrd"&gt;006/xaml&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:local&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:TestWPF_Data_Binding_II"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="attr"&gt;xmlns:system&lt;/span&gt;&lt;span class="kwrd"&gt;="clr-namespace:System;assembly=mscorlib"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="DataBinding_Method"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="rem"&gt;&amp;lt;!-- Instancia de la clase DoubleToString que impl&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;ementa a IValueConverter --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:DoubleToString&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="doubleToString"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        &lt;span class="rem"&gt;&amp;lt;!-- ObjectDataProvider pone al metodo como fuente de datos(origen de enlace/binding source) --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ObjectDataProvider&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="ConvertirDistancia"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;            &lt;span class="attr"&gt;ObjectType&lt;/span&gt;&lt;span class="kwrd"&gt;="{x:Type local:ConvertidorDistancia }"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="attr"&gt;MethodName&lt;/span&gt;&lt;span class="kwrd"&gt;="Convertir"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="rem"&gt;&amp;lt;!-- Declaramos los parametros que recibe el metodo Convertir--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ObjectDataProvider.MethodParameters&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system:Double&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system:Double&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Millas&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ObjectDataProvider.Method&lt;/span&gt;&lt;br /&gt;&lt;span class="html"&gt;Parameters&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ObjectDataProvider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="10"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;br /&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="0.5*"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ColumnDefinition&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="0.5*"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="31"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="31"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="31"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;ColumnSpan&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                   &lt;span class="attr"&gt;VerticalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                   &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Ingrese una distancia para convertir :"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="rem"&gt;&amp;lt;!-- Este TextBox enlazara al primer parametro del metodo Convertir  --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBox&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/SjWIQXhL81I/AAAAAAAAAm4/YTNZIKuw8yM/s1600-h/BindMethod.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;            &lt;span class="attr"&gt;Text&lt;/span&gt; &lt;span class="kwrd"&gt;="{Binding Source={StaticResource ConvertirDistancia}, Path=MethodParameters[0],&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                    BindsDirectlyToSource=true, UpdateSourceTrigger=PropertyChanged,&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                    Converter={StaticResource doubleToString}}"&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;        &lt;span class="rem"&gt;&amp;lt;!-- Este ComboBox enlazara al segundo parametro del metodo Convertir --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ComboBox&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="80"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;            &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Left"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;            &lt;span class="attr"&gt;SelectedValue&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;                            Source={StaticResource ConvertirDistancia},&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;                            Path=MethodParameters[1],&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;                            BindsDirectlyToSource=true}" &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Millas&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Kilometros&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ComboBox&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Right"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;                   &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Resultado:"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;        &lt;span class="rem"&gt;&amp;lt;!-- Este TextBlock enlaza al resultado del metodo Convertir, es decir, lo que retorna.--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Column&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="5"&lt;/span&gt; &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;                   &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding Source={StaticResource ConvertirDistancia}}"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;        &lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya podemos instanciar la clase ConvertidorDistancia y tenerlo como recurso.Para eso debe ir dentro de: &lt;pre&gt;&lt;code&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; y &lt;pre&gt;&lt;code&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;.Y puesto que voy a enlazar el metodo Convertir debo instanciar la clase ConvertidorDistancia mediante la clase ObjectDataProvider.Esta clase ajusta y crea un objeto que se puede utilizar como origen de enlace.La operación comienza en la línea 13 y termina en la línea 22.&lt;br /&gt;En la línea 14 le asignamos una clave a nuestro origen de enlace:&lt;code&gt; x:Key="ConvertirDistancia"&lt;/code&gt;&lt;br /&gt;En la línea 15 definimos el tipo de la instancia que creamos mediante el objeto ObjectType:&lt;br /&gt;&lt;code&gt;ObjectType="{x:Type local:ConvertidorDistancia }"&lt;/code&gt;&lt;br /&gt;Mediante la propiedad MethodName definimos el metodo que es invocado por ObjectDataProvider:&lt;br /&gt;&lt;code&gt;MethodName="Convertir"&lt;/code&gt;&lt;br /&gt;Dado que el metodo Convertir, el que enlazaremos, recibe dos parametros, los definimos mediante la propiedad de ObjectDataProvider: MethodParameters(Línea 18):&lt;br /&gt;&lt;code&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ObjectDataProvider.MethodParameters&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;Esta propiedad puede contener una colección de parametros.&lt;br /&gt;Definimos el valor inicial del primer parametro.Será el valor 10 y será de tipo Double, ya que el primer parametro que recibe el metodo Convertir es un tipo Double(linea 19):&lt;br /&gt;&lt;code&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system:Double&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system:Double&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;Tambien definimos el valr inicial del segundo parametro, el cual será Millas de tipo TipoDistancia(línea 20) :&lt;br /&gt;&lt;code&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Millas&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ya tengo listo el objeto para poder usarlo como origen de enlace.&lt;br /&gt;&lt;br /&gt;Tenemos un TextBox(línea 41), un ComboBox(línea 48) y un TextBlock(línea 58).&lt;br /&gt;La propiedad Text del TextBox enlazará al primer parametro del metodo Convertir.La propiedad SelectedValue del ComboBox enlazará al segundo parametro.La propiedad Text del TextBlock enlazará al metodo Convertir, es decir a su valor de retorno, el cual será un String.&lt;br /&gt;En la línea 43 le decimos que nuestro origen de enlace(o fuente de datos) es el recurso estático llamado ConvertirDistancia.Recordemos que ConvertirDistancia es la clave del metodo Convertir,asi que apunta a este.Luego, definimos el valor de la propiedad Path.Aqui ocurre algo interesante.Vemos que la propiedad que queremos enlazar no es una propiedad del objeto que envuelve ObjectDataProvider(ConvertidorDistancia), sino que es una propiedad del mismo objeto ObjectDataProvider, la propiedad MethodParameters, y es el primer valor de la colección de parametros, osea el primer parametro, por eso la posicion cero:&lt;br /&gt;&lt;code&gt;Path=MethodParameters[0]&lt;/code&gt;&lt;br /&gt;A continuacion vemos la propiedad BindsDirectlyToSource:&lt;br /&gt;&lt;code&gt;BindsDirectlyToSource=true&lt;/code&gt;&lt;br /&gt;Esta propiedad establece un valor que indica si se va a evaluar la propiedad Path con respecto al elemento de datos(en este caso ConvertidorDistancia) o el objeto DataSourceProvider(en este caso ObjectDataProvider, ya que deriva de la clase abstracta DataSourceProvider).&lt;br /&gt;El valor por defecto de esta propiedad es false.Cuando es false evalua la ruta de acceso con respecto al elemento de datos propiamente dicho; de lo contrario, es true, es decir, en nuestro caso evuluará la ruta de acceso respecto al obejto ObjectDataProvider.Esto debe ser así, ya que la propiedad Path tiene el valor de una propiedad de ObjectDataProvider(MethodParameters) y no del elemento de datos.&lt;br /&gt;Luego tenemos la propiedad UpdateSourceTrigger:&lt;br /&gt;&lt;code&gt;UpdateSourceTrigger=PropertyChanged&lt;/code&gt;&lt;br /&gt;Esto significa que desde el TextBox podremos actualizar el valor del origen de enlace, es decir el valor del primer parametro del metodo Convertir.El valor PropertyChanged significa que tan pronto haga un cambio en el TextBox actualizará el origen de enlace con el valor de la propiedad Text del TextBox.Finalmente tenemos la propiedad Converter del cual me ocuparé mas adelante.&lt;br /&gt;En cuanto al ComboBox sucede casi lo mismo,excepto que va a enlazar al segundo parametro del metodo Convertir.Se definen los itemes de tipo TipoDistancia:&lt;br /&gt;&lt;code&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Millas&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Kilometros&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;local:TipoDistancia&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;La propiedad Text del TextBlock enlaza al resultado del metodo Convertir, es decir a su valor de retorno:&lt;br /&gt;&lt;code&gt;Text="{Binding Source={StaticResource ConvertirDistancia}}"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;La propiedad Source del Binding se usa para referenciar a una instancia de un objeto creado como recurso.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Propiedad Converter:&lt;/span&gt;&lt;br /&gt;Se usa cuando es necesario convertir valores de propiedades antes de asignarse al destino de enlace o al origen de enlace.Para eso es necesario crear una clase que implemente la interfaz IValueConverter.La inetrfaz IValueConverter tiene dos metodos:&lt;br /&gt;Convert y ConvertBack, donde podemos implementar cualquier conversion compleja.El metodo Convert es llamado cuando el modo de enlace es OneWay, es decir, cuando el origen de enlace modifica al destino de enlace(destino de datos).El metodo ConvertBack es llamado en el modo TwoWay, es decir, cuando el destino de enlace modifica el origen de enlace.&lt;br /&gt;Cuando se especifica la propiedad Converter en un enlace o binding  el valor del destino de enlace no se actualiza directamente desde el origen de enlace, sino que pasa primero por el método Convert, ahi se hace la conversion para retornar el valor apropiado que recibe el destino de enlace.&lt;br /&gt;Para poder usarlo como un recurso es necesario instanciarlo.En nuestro ejemplo lo hicimos en la línea 10:&lt;br /&gt;&lt;code&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;local:DoubleToString&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="doubleToString"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;A continuación la clase que implementa a IValueConverter, se llama DoubleToString, aunque en el metodo ConvertBack mas bien convierte de string a Double:&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="rem"&gt;//para implementar ivalueconverter&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Data;&lt;br /&gt;&lt;span class="rem"&gt;//necersario para CultureInfo&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Globalization;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TestWPF_Data_Binding_II&lt;br /&gt;{ &lt;br /&gt;&lt;br /&gt;  [ValueConversion(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(&lt;span class="kwrd"&gt;double&lt;/span&gt;), &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(String))]&lt;br /&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DoubleToString: IValueConverter&lt;br /&gt;  {&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Convierte Double a String.Antes de actualizar el valor del destino de enlace&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;///el valor pasa por este metodo para ser convertido a String.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="value"&amp;gt;Objeto double&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="targetType"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="parameter"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="culture"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Convert(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, Type targetType, &lt;span class="kwrd"&gt;object&lt;/span&gt; parameter, CultureInfo culture)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="kwrd"&gt;double&lt;/span&gt; val = (&lt;span class="kwrd"&gt;double&lt;/span&gt;)&lt;span class="kwrd"&gt;value&lt;/span&gt;;&lt;br /&gt;          &lt;span class="kwrd"&gt;return&lt;/span&gt; val.ToString();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// Covierte String a Double.Antes de actualizar el valor del origen de enlace&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// el valor pasa por este metodo para ser convertido a Double.&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="value"&amp;gt;Objeto string&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="targetType"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="parameter"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;param name="culture"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; ConvertBack(&lt;span class="kwrd"&gt;object&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt;, Type targetType, &lt;span class="kwrd"&gt;object&lt;/span&gt; parameter, CultureInfo culture)&lt;br /&gt;      {&lt;br /&gt;          &lt;span class="rem"&gt;//throw new NotImplementedException();--&amp;gt;cuando no es necesario implementar el metodo.&lt;/span&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;double&lt;/span&gt; val = Double.Parse(&lt;span class="kwrd"&gt;value&lt;/span&gt;.ToString());&lt;br /&gt;          &lt;span class="kwrd"&gt;return&lt;/span&gt; val;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;En nuestro ejemplo, el TextBox que enlaza al primer parámetro del metodo Convertir, recibe un string, ya que su propiedad Text soporta el tipo String.El modo del enlace es TwoWay(recordar la propiedad UpdateSourceTrigger), ya que podemos modificar el primer parámetro del metodo Convertir desde el TextBox.Aquí surge un inconveniente, la propiedad Text del TextBox contiene un String y el primer parametro del metodo Convertir es un tipo Double.En este momento entra en acción el metodo ConvertBack, es decir, antes de actualizar el origen de enlace(el primer parametro del metodo Convertir) el valor del destino de enlace (propiedad Text del TextBox) pasa por el metodo ConvertBack.Como notarán, en ese método el string se convierte a Double y se retorna un Double.Este Double es el que actualiza finalmente el primer parámetro del metodo Convertir.&lt;br /&gt;Recordaran que se le habia asignado un valor inicial a los parametros del metodo Convertir(linea 19 y 20).Ocupemonos del primer parámetro:&lt;br /&gt;Vemos que es el valor 10 de tipo Double.Tambien vemos que la propiedad que se enlazo al TextBox fue el primer parametro, es decir, un valor de tipo Double.Aqui entra en acción el metodo Convert.Antes de actualizar el TextBox con un Double desde el origen de enlace, el valor Double pasa por el metodo Convert, ahi se convierte a String y devuelve un String.Pues la propiedad Text del TextBox admite el tipo String.&lt;br /&gt;&lt;br /&gt;Esa magia se logra implementando IValueConverter y especificando la propiedad Converter en el enlace:&lt;br /&gt;&lt;code&gt;Converter={StaticResource doubleToString}}&lt;/code&gt;&lt;br /&gt;Aqui le decimos que Converter igual al recurso estático llamado doubleToString.Ya sabemos que es la clave de la clase DoubleToString.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;captura:&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_wp91e-x7RW0/SjWIQXhL81I/AAAAAAAAAm4/YTNZIKuw8yM/s1600-h/BindMethod.png"&gt;&lt;img style="cursor: pointer; width: 261px; height: 228px;" src="http://4.bp.blogspot.com/_wp91e-x7RW0/SjWIQXhL81I/AAAAAAAAAm4/YTNZIKuw8yM/s320/BindMethod.png" alt="" id="BLOGGER_PHOTO_ID_5347329947344827218" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-7719205781190577831?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/7719205781190577831/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-wpf-iii.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7719205781190577831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7719205781190577831'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-wpf-iii.html' title='Data Binding WPF III'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wp91e-x7RW0/SjWIQXhL81I/AAAAAAAAAm4/YTNZIKuw8yM/s72-c/BindMethod.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-417730281445246020</id><published>2009-06-13T23:32:00.000-07:00</published><updated>2009-11-01T22:47:46.954-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>Data Binding WPF II</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Enlazando un XML:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="1280" height="1042"&gt; &lt;param name="movie" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/flvplayer.swf"&gt;&lt;/param&gt; &lt;param name="quality" value="high"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/FirstFrame.jpg&amp;containerwidth=1280&amp;containerheight=1042&amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/DataBinding_XML.mp4"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt; &lt;param name="scale" value="showall"&gt;&lt;/param&gt; &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt; &lt;param name="base" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/"&gt;&lt;/param&gt;  &lt;embed src="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/flvplayer.swf" quality="high" bgcolor="#FFFFFF" width="450" height="350" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/FirstFrame.jpg&amp;containerwidth=1280&amp;containerheight=1042&amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/DataBinding_XML.mp4" allowFullScreen="true" base="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/3361e2d2-ab49-413d-aa3e-80bde82f8483/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;El codigo XAML:&lt;/span&gt;&lt;br /&gt;namespace :TestWPF_Data_Binding_II&lt;br /&gt;nombre de la ventana :DataBinding_XMLData&lt;br /&gt;&lt;br /&gt;&lt;div class="cajacodigo"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt; &lt;span class="attr"&gt;x:Class&lt;/span&gt;&lt;span class="kwrd"&gt;="TestWPF_Data_Binding_II.DataBinding_XMLData"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attr"&gt;xmlns:x&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;br /&gt;    &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="DataBinding_XMLData"&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;="300"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;&amp;lt;!--Usar la propiedad Source de XmlDataProvider si tenemos el archivo xml&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;            referenciandolo con la Uri apropiada, como se muestra en el sgte codigo: --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;&amp;lt;!--&amp;lt;XmlDataProvider x:Key="PerrosXML"&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;                             Source="Perros.xml"&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;                             XPath="Perros"/&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span class="rem"&gt;&amp;lt;!-- O podemos embeber directamente el xml : --&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;XmlDataProvider&lt;/span&gt; &lt;span class="attr"&gt;x:Key&lt;/span&gt;&lt;span class="kwrd"&gt;="PerrosXML"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;x:XData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="rem"&gt;&amp;lt;!--Si -cuando el xml va embebido- no se deja vacío el atributo xmlns, se producirá un &lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;                    error, la salida será : "System.Windows.Data.Error exception has occurred"--&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Perros&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Perro&lt;/span&gt; &lt;span class="attr"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;="Alco"&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;="Blanco"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Perro&lt;/span&gt; &lt;span class="attr"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;="Güeso"&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;="Gris"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Perro&lt;/span&gt; &lt;span class="attr"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;="Pellejo"&lt;/span&gt; &lt;span class="attr"&gt;Color&lt;/span&gt;&lt;span class="kwrd"&gt;="Negro"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Perros&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;x:XData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;XmlDataProvider&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window.Resources&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="attr"&gt;Height&lt;/span&gt;&lt;span class="kwrd"&gt;="80"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;RowDefinition&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Bind To XML Data"&lt;/span&gt; &lt;span class="attr"&gt;FontSize&lt;/span&gt;&lt;span class="kwrd"&gt;="15"&lt;/span&gt;&lt;br /&gt;                   &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="3"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TextBlock&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="Enlazando un archivo XML"&lt;/span&gt; &lt;span class="attr"&gt;FontSize&lt;/span&gt;&lt;span class="kwrd"&gt;="15"&lt;/span&gt;&lt;br /&gt;                   &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;Margin&lt;/span&gt;&lt;span class="kwrd"&gt;="29"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ListBox&lt;/span&gt;&lt;br /&gt;            &lt;span class="attr"&gt;ItemsSource&lt;/span&gt;&lt;span class="kwrd"&gt;="{Binding Source={StaticResource PerrosXML},&lt;br /&gt;            XPath=/Perros/Perro/@Nombre}"&lt;/span&gt; &lt;span class="attr"&gt;Grid&lt;/span&gt;.&lt;span class="attr"&gt;Row&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt; &lt;span class="attr"&gt;HorizontalAlignment&lt;/span&gt;&lt;span class="kwrd"&gt;="Center"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Grid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Window&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-417730281445246020?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/417730281445246020/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-wpf-ii.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/417730281445246020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/417730281445246020'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/06/data-binding-wpf-ii.html' title='Data Binding WPF II'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-8829185131835621199</id><published>2009-05-31T23:03:00.000-07:00</published><updated>2009-11-01T22:47:57.283-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='3.5'/><category scheme='http://www.blogger.com/atom/ns#' term='3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='viisual'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>Data Binding WPF</title><content type='html'>Explicación breve acerca de cómo usar data binding en wpf y ademas qué es data binding.&lt;br /&gt;Disculpen las redundancias en la explicación, pero mejor dejar todo claro....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modo One Way :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="1280" height="1042"&gt; &lt;param name="movie" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/flvplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/DB_OneOway.mp4"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/"&gt;  &lt;embed src="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/flvplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/DB_OneOway.mp4" allowfullscreen="true" base="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/9ab16a61-2e83-4c1e-9e97-779e3f9cea8b/" scale="showall" width="450" height="350"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Modo Two Way :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="1280" height="1042"&gt; &lt;param name="movie" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/flvplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/DB_Twoway.mp4"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/"&gt;  &lt;embed src="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/flvplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/DB_Twoway.mp4" allowfullscreen="true" base="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/c539a54e-7035-481b-bf5d-d2c5bc041096/" scale="showall" width="450" height="350"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Enlazar un objeto CLR - Modo Two Way :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="1280" height="1042"&gt; &lt;param name="movie" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/flvplayer.swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/capture-3.mp4"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="scale" value="showall"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="base" value="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/"&gt;  &lt;embed src="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/flvplayer.swf" quality="high" bgcolor="#FFFFFF" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="thumb=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/FirstFrame.jpg&amp;amp;containerwidth=1280&amp;amp;containerheight=1042&amp;amp;content=http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/capture-3.mp4" allowfullscreen="true" base="http://content.screencast.com/users/JLRVPUMA/folders/Data%20Binding%20XAML/media/57434ba5-601f-4bf0-878b-063b0b132def/" scale="showall" width="450" height="350"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Codigo - Visual Studio 2008:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.archive.org/details/DataBindingWpf-CodigoVs2008" target="_blank"&gt;&lt;span style="font-weight: bold;"&gt;Descargar&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-8829185131835621199?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/8829185131835621199/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/data-binding-wpf.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8829185131835621199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/8829185131835621199'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/data-binding-wpf.html' title='Data Binding WPF'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-4878616612670487379</id><published>2009-05-03T16:40:00.000-07:00</published><updated>2010-09-20T21:18:39.822-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monodevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='creacion'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='patron'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='gof'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='factory'/><category scheme='http://www.blogger.com/atom/ns#' term='abstract'/><title type='text'>Patron de Creación Abstract Factory</title><content type='html'>&lt;div style="width: 425px; text-align: left;" id="__ss_1380529"&gt;&lt;a style="margin: 12px 0pt 3px; font: 14px Helvetica,Arial,Sans-serif; display: block; text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma/abstract-factory-design-pattern-gof?type=presentation" title="Abstract Factory -Design Pattern - GoF"&gt;Abstract Factory -Design Pattern - GoF&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=patternabstractfactory-090503183614-phpapp01&amp;amp;stripped_title=abstract-factory-design-pattern-gof"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=patternabstractfactory-090503183614-phpapp01&amp;amp;stripped_title=abstract-factory-design-pattern-gof" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma"&gt;jlrvpuma&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Código de ejemplo escrito en C# :&lt;br /&gt;&lt;a href="http://cid-c8a56dd7becc4c8d.skydrive.live.com/self.aspx/P%c3%bablico/Patrones%20de%20Dise%c3%b1o%20-%20Codigo/Patron%5E_Abstract%5E_Factory.zip"&gt;Descargar (VS2008)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.archive.org/details/PatronAbstractFactory"&gt;Descargar (MonoDevelop)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="display:none;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;Video Explicación(1280x1024) :&lt;/span&gt;&lt;br /&gt;Para ver mejor las letras se debe poner HD en ON(enviará a vimeo para verlo en HD).Creo que es lo mejor.&lt;br /&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7751830&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7751830&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/7751830"&gt;Abstract Factory - Design Pattern&lt;/a&gt; from &lt;a href="http://vimeo.com/user2675817"&gt;jlrvpuma&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-4878616612670487379?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/4878616612670487379/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-creacion-abstract-factory.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/4878616612670487379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/4878616612670487379'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-creacion-abstract-factory.html' title='Patron de Creación Abstract Factory'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5709894464232421568</id><published>2009-05-02T11:17:00.000-07:00</published><updated>2009-11-01T22:49:41.510-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='behavior'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='responsabilidad'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='cadena'/><category scheme='http://www.blogger.com/atom/ns#' term='coportamiento'/><category scheme='http://www.blogger.com/atom/ns#' term='desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='patron'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='chain'/><category scheme='http://www.blogger.com/atom/ns#' term='responsability'/><category scheme='http://www.blogger.com/atom/ns#' term='of'/><title type='text'>Patron de comportamiento Chain Of Responsability</title><content type='html'>&lt;div style="width: 425px; text-align: left;" id="__ss_1376837"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma/chain-of-responsability-1376837?type=presentation" title="Chain Of Responsability"&gt;Chain Of Responsability&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=corchainofresponsability-090502134146-phpapp01&amp;amp;stripped_title=chain-of-responsability-1376837"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=corchainofresponsability-090502134146-phpapp01&amp;amp;stripped_title=chain-of-responsability-1376837" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma"&gt;jlrvpuma&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Código de ejemplo C#:&lt;br /&gt;&lt;a href="http://www.archive.org/details/PatrnDeComportamientoChainOfResponsability_327"&gt;Descargar (Visual Studio)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.archive.org/details/PatrnDeComportamientoChainOfResponsability"&gt;Descargar (Monodevelop)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5709894464232421568?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5709894464232421568/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-comportamiento-chain-of.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5709894464232421568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5709894464232421568'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-comportamiento-chain-of.html' title='Patron de comportamiento Chain Of Responsability'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-2976116702094896726</id><published>2009-05-02T10:59:00.000-07:00</published><updated>2009-11-01T22:51:31.475-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='gof'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='monodevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='patron'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='facade'/><title type='text'>Patrón de estructura Facade</title><content type='html'>&lt;div style="width: 425px; text-align: left;" id="__ss_1376779"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma/facade-design-pattern-gof?type=powerpoint" title="Facade - Design Pattern - GoF"&gt;Facade - Design Pattern - GoF&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=facadeexpo-090502130356-phpapp01&amp;amp;stripped_title=facade-design-pattern-gof"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=facadeexpo-090502130356-phpapp01&amp;amp;stripped_title=facade-design-pattern-gof" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma"&gt;jlrvpuma&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Código de ejemplo en C#:&lt;br /&gt;&lt;a href="http://www.archive.org/details/PatronEstructuralFacade_304" target="_blank"&gt;Descargar (Visual Studio)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.archive.org/details/PatronEstructuralFacade" target="_blank"&gt;Descargar (MonoDevelop)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-2976116702094896726?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/2976116702094896726/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-estructura-facade.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2976116702094896726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2976116702094896726'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-estructura-facade.html' title='Patrón de estructura Facade'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-921357768724635989</id><published>2009-05-02T09:29:00.000-07:00</published><updated>2009-11-01T22:52:07.367-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='gof'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='monodevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='patron'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='builder'/><title type='text'>Patrón de creación Bulider</title><content type='html'>&lt;div style="width: 425px; text-align: left;" id="__ss_1376487"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma/builder-design-pattern-gof?type=presentation" title="Builder - Design Pattern - GoF"&gt;Builder - Design Pattern - GoF&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=patternbuilder-090502111945-phpapp01&amp;amp;stripped_title=builder-design-pattern-gof"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=patternbuilder-090502111945-phpapp01&amp;amp;stripped_title=builder-design-pattern-gof" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma"&gt;jlrvpuma&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Código de ejemplo C# :&lt;br /&gt;&lt;a href="http://www.archive.org/details/PatronCreacionalBuider" target="_blank"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Descargar (Visual Studio)&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.archive.org/details/Buider-PatronDeDeDiseo-Gof" target="_blank"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Descargar (MonoDevelop)&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-921357768724635989?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/921357768724635989/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-creacion-bulider.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/921357768724635989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/921357768724635989'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/patron-de-creacion-bulider.html' title='Patrón de creación Bulider'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5554739243756500757</id><published>2009-04-11T12:27:00.000-07:00</published><updated>2009-11-01T22:52:19.450-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ibex'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu/linux'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='configurar'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='intrepid'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Configurar APACHE 2 en Ubuntu Intrepid Ibex</title><content type='html'>Despues de haber instalado Apache2 exitosamente, podemos probar si el servidor funciona.En nuestro navegador favorito, escribimos en la barra de direcciones:&lt;br /&gt;&lt;code&gt;http://localhost&lt;/code&gt;&lt;br /&gt;Y obtendremos algo como esto:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_wp91e-x7RW0/SeDyRxrgh4I/AAAAAAAAAmY/TAc-qxm_9XE/s1600-h/apache-pre.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 262px; height: 51px;" src="http://2.bp.blogspot.com/_wp91e-x7RW0/SeDyRxrgh4I/AAAAAAAAAmY/TAc-qxm_9XE/s320/apache-pre.png" alt="" id="BLOGGER_PHOTO_ID_5323521146759448450" border="0" /&gt;&lt;/a&gt;Si algún error ocurre debemos editar el archivo de configuración apache2.conf  con el editor de texto que se prefiera, en este caso usaremos gedit :&lt;br /&gt;&lt;code&gt;$sudo gedit /etc/apache2/apache2.conf&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Agregamos la siguiente linea en cualquier lugar del archivo de configuración:&lt;br /&gt;&lt;code&gt;ServerName localhost&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Guardamos los cambios y luego reiniciamos Apache :&lt;br /&gt;&lt;code&gt;$sudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora probamos con localhost y si obtenemos el: "&lt;span style="font-weight: bold;"&gt;It works!&lt;/span&gt;", estamos listos para configurar Apache para que nos sirva nuestro propio sitio.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Creamos un nuevo sitio&lt;/h3&gt;&lt;br /&gt;Podemos crear un directorio de nuestro sitio en cualquier parte, en este caso se creará en :&lt;br /&gt;&lt;code&gt;$mkdir /home/usuario/mi_website&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora crearemos el archivo de configuración para el nuevo sitio.Podemos hacerlo a partir del archivo de configuración del sitio por defecto. Al nuevo archivo lo llamaré miweb :&lt;br /&gt;&lt;code&gt;$sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/miweb&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Abrimos el nuevo archivo de configuración:&lt;br /&gt;&lt;code&gt;$sudo gedit /etc/apache2/sites-available/miweb&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Buscamos la línea:&lt;br /&gt;&lt;code&gt;DocumentRoot /var/www/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y cambiamos la ruta por la del directorio que creamos anteriormente:&lt;br /&gt;&lt;code&gt;DocumentRoot /home/usuario/mi_website&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Luego buscamos la línea :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_wp91e-x7RW0/SeEAHbI491I/AAAAAAAAAmg/8Bfjd48VGsM/s1600-h/def.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 198px; height: 26px;" src="http://1.bp.blogspot.com/_wp91e-x7RW0/SeEAHbI491I/AAAAAAAAAmg/8Bfjd48VGsM/s320/def.png" alt="" id="BLOGGER_PHOTO_ID_5323536362072766290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Y modificamos la ruta, con lo que deberá quedar así:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_wp91e-x7RW0/SeEAXshl9lI/AAAAAAAAAmo/mynj7Re-fh4/s1600-h/cust.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 306px; height: 21px;" src="http://3.bp.blogspot.com/_wp91e-x7RW0/SeEAXshl9lI/AAAAAAAAAmo/mynj7Re-fh4/s320/cust.png" alt="" id="BLOGGER_PHOTO_ID_5323536641617688146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Guardamos los cambios.&lt;br /&gt;A continuación deshabilitamos el sitio por defecto, deshabilitando su archivo de configuración, el cual es default.Para eso usamos el script de Apache:&lt;br /&gt;&lt;code&gt;$sudo a2dissite default&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Seguidamente activamos nuestro nuevo sitio, habilitando su archivo de configuración.Para eso usamos otro script de Apache:&lt;br /&gt;&lt;code&gt;$sudo a2ensite miweb&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Finalmente reiniciamos apache:&lt;br /&gt;&lt;code&gt;$sudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para probar si todo ha salido bien podemos crear un archivo &lt;span style="font-style: italic; font-weight: bold;"&gt;index.html &lt;/span&gt;y guardarlo en :&lt;br /&gt;&lt;code&gt;/home/usuario/mi_website&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Antes de ingresar a nuestro nuevo sitio, limpiamos la cache del navegador, en&lt;span style="font-weight: bold;"&gt; Firefox&lt;/span&gt; esta en &lt;span style="font-weight: bold; font-style: italic;"&gt;Herramientas/Limpiar datos privados&lt;/span&gt;.&lt;br /&gt;Ahora ya podemos ingresar a nuestro nuevo sitio. Escribimos en el navegador:&lt;br /&gt;&lt;code&gt;http://localhost&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y Listo. Ya tenemos nuestro servidor funcionando.&lt;br /&gt;&lt;br /&gt;Fuente : &lt;a href="http://www.zaphu.com/2007/08/21/ubuntu-lamp-server-guide-configure-apache-mysql-and-cgi-bin/" target="blank"&gt;www.zaphu.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5554739243756500757?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5554739243756500757/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/04/configurar-apache-2-en-ubuntu-intrepid.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5554739243756500757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5554739243756500757'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/04/configurar-apache-2-en-ubuntu-intrepid.html' title='Configurar APACHE 2 en Ubuntu Intrepid Ibex'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wp91e-x7RW0/SeDyRxrgh4I/AAAAAAAAAmY/TAc-qxm_9XE/s72-c/apache-pre.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-2776944871169324638</id><published>2009-04-05T16:55:00.002-07:00</published><updated>2009-11-01T22:52:39.721-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='aptana'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu/linux'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='intrepid'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='aptanastudio'/><category scheme='http://www.blogger.com/atom/ns#' term='mubuntu 8.10development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='instalar'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Instalando AptanaStudio en Ubuntu Intrepid Ibex</title><content type='html'>Antes de instalar &lt;span style="font-weight: bold;"&gt;AptanaStudio&lt;/span&gt; debemos instalar sus dependencias:&lt;br /&gt;&lt;code&gt;$sudo apt-get install sun-java6-jre sun-java6-plugin xulrunner&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Luego, descargamos el paquete desde su página:&lt;br /&gt;http://www.aptana.com/studio/download&lt;br /&gt;&lt;br /&gt;El siguiente paso es descomprimir el archivo .zip.En mi caso he descomprimido en /opt :&lt;br /&gt;&lt;code&gt;$sudo unzip Aptana_Studio_Setup_Linux_1.2.5.zip -d /opt&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;por lo que en /opt obtendré el directorio aptana.Puede ser descomprido en cualquier lugar.&lt;br /&gt;&lt;br /&gt;Una vez obtenido el directorio aptana, creamos un script que se encargara de iniciar &lt;span style="font-weight: bold;"&gt;ApatanaStudio&lt;/span&gt;.Otra vez, el script puede ser guardado donde se desee, en mi caso crearé un nuevo directorio llamado &lt;span style="font-weight: bold;"&gt;Scripts&lt;/span&gt; y dentro uno llamado &lt;span style="font-weight: bold;"&gt;Aptana&lt;/span&gt;, dentro de este último guardaré el script que iniciará &lt;span style="font-weight: bold;"&gt;AptanaStudio&lt;/span&gt; y lo llamaré &lt;span style="font-weight: bold; font-style: italic;"&gt;iniciaAptana.sh.&lt;/span&gt;&lt;br /&gt;Entoces, creo los directorios y me ubico en el directorio recien creado Aptana:&lt;br /&gt;&lt;code&gt;$mkdir /home/usuario/Scripts/Apatana &amp;amp;&amp;amp; cd /home/usuario/Scripts/Aptana&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Creo el archivo iniciaApatana.sh (notar que estoy aun en el directorio Aptana) :&lt;br /&gt;&lt;code&gt;$ sudo gedit iniciaApatana.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En el Editor de texto que se abre a continuación agrego las siguientes líneas:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;export MOZILLA_FIVE_HOME=/usr/lib/xulrunner&lt;br /&gt;/opt/aptana/AptanaStudio  #ruta al archivo AptanaStudio, que esta dentro del directorio aptana&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;La penúltima linea del script:&lt;br /&gt;&lt;code&gt;/opt/aptana/AptanaStudio&lt;/code&gt;&lt;br /&gt;es la ruta al archivo ejecutable de &lt;span style="font-weight: bold;"&gt;AptanaStudio&lt;/span&gt; y que tiene este mismo nombre, se encuentra en el directorio &lt;span style="font-weight: bold;"&gt;aptana&lt;/span&gt;.Como en mi caso extraje el directorio aptana en &lt;span style="font-weight: bold;"&gt;/opt&lt;/span&gt;, la ruta correspondiente seria la que se muestra en la ultima linea del script:&lt;br /&gt;&lt;code&gt;/opt/aptana/AptanaStudio&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora debemos darle permisos de ejecucion al nuestro script.Si estamos o no aun en el directorio Scripts:&lt;br /&gt;&lt;code&gt;$sudo chmod 777 /home/usuario/Scripts/Aptana/iniciaAptana.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora solo basta con darle doble click al archivo &lt;span style="font-weight: bold; font-style: italic;"&gt;iniciaAptana.sh&lt;/span&gt; y si sale un aviso, escogemos en sus opciones: &lt;span style="font-weight: bold; font-style: italic;"&gt;Ejecutar&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;O bien se puede iniciar desde la consola :&lt;br /&gt;&lt;code&gt;$/home/usuario/Scripts/Aptana/iniciaAptana.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En modo background para seguir usando la misma consola para otras cosas:&lt;br /&gt;&lt;code&gt;$(/home/usuario/Scripts/Aptana/iniciaAptana.sh)&amp;amp;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Pero para hacernos la vida mas fácil, vamos a crear un enlace directo en la barra de menú:&lt;br /&gt;Primero descargamos los iconos oficiales de &lt;span style="font-weight: bold;"&gt;AptanaStudio&lt;/span&gt; desde &lt;a href="http://support.aptana.com/asap/secure/attachment/10398/aptana_icons.zip"&gt;Aqui&lt;/a&gt;.&lt;br /&gt;Luego los descomprimimos en donde sea(un lugar seguro, para no borrralo sin darnos cuenta), en mi caso descomprimiré en /home/usuario/Scripts/Aptana, si, junto al script:&lt;br /&gt;&lt;code&gt;$unzip aptana_icons.zip -d /home/usuario/Scripts/Aptana&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Luego:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;clic derecho sobre Aplicaciones y escoger editar menús&lt;/li&gt;&lt;li&gt;En la Izquierda, en Menús, clic sobre &lt;span style="font-weight: bold;"&gt;Programación&lt;/span&gt;(o la sección que se desee)&lt;/li&gt;&lt;li&gt;A la derecha, escoger :&lt;span style="font-weight: bold; font-style: italic;"&gt; +&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; Elemento Nuevo&lt;/span&gt;&lt;/li&gt;&lt;li&gt;para escoger el icono, clic sobre el cuadro superior izquierdo.Clic examinar y buscamos en /home/usuario/Scripts/Aptana. Le damos Abrir y escogemos el icono.&lt;/li&gt;&lt;li&gt;Asi quedará al final:&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_wp91e-x7RW0/SdlaFJ8SkOI/AAAAAAAAAmQ/mz9-ylP4l1A/s1600-h/lanzador.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 128px;" src="http://2.bp.blogspot.com/_wp91e-x7RW0/SdlaFJ8SkOI/AAAAAAAAAmQ/mz9-ylP4l1A/s320/lanzador.png" alt="" id="BLOGGER_PHOTO_ID_5321383479329591522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Eso es es todo. Ahora podemos abrir &lt;span style="font-weight: bold;"&gt;ApatanaStudio&lt;/span&gt; desde el Menú:&lt;br /&gt;Aplicaciones/Programación/Aptana Studio&lt;br /&gt;&lt;br /&gt;Nota:&lt;br /&gt;El simbolo "&lt;span style="font-weight: bold;"&gt;$&lt;/span&gt;" no debe ser incluido al momento de escribir los comandos.&lt;br /&gt;Ademas "usuario" se refiere al usuario del sistema, así, si el usuario es luis, entonces una ruta seria: /home/luis/cualquier/directorio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-2776944871169324638?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/2776944871169324638/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/04/instalando-aptanastudio-en-ubuntu.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2776944871169324638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2776944871169324638'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/04/instalando-aptanastudio-en-ubuntu.html' title='Instalando AptanaStudio en Ubuntu Intrepid Ibex'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wp91e-x7RW0/SdlaFJ8SkOI/AAAAAAAAAmQ/mz9-ylP4l1A/s72-c/lanzador.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-1994109533962111842</id><published>2009-04-02T23:22:00.000-07:00</published><updated>2009-04-05T15:35:31.843-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='montar'/><category scheme='http://www.blogger.com/atom/ns#' term='imagen'/><category scheme='http://www.blogger.com/atom/ns#' term='nero'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu/linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mount'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='acetoneiso'/><category scheme='http://www.blogger.com/atom/ns#' term='iso'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Montar Imagen de Nero NRG en Ubuntu</title><content type='html'>Para montar una imagen de CD/DVD con formato .nrg(formato de Nero) en ubuntu, no es necesario instalar&lt;span style="font-weight: bold;"&gt; acetoneiso&lt;/span&gt;, ya que para que funcione bien hay que instalar sus dependencias...&lt;br /&gt;Solo es necesario el paquete &lt;span style="font-weight: bold;"&gt;mount&lt;/span&gt;, que ya  viene instalado por defecto en Ubuntu.&lt;br /&gt;&lt;br /&gt;Ahora bien, digamos que se tiene el archivo imagen.nrg(la imagen de cd/dvd) en /home/user.&lt;br /&gt;Nos colocamos en /home/user:&lt;br /&gt;&lt;code&gt;$cd /home/user&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para montar la imagen se crea un directorio, se llamará &lt;span style="font-style: italic;"&gt;dirmontaje&lt;/span&gt;:&lt;br /&gt;&lt;code&gt;$sudo mkdir dirmontaje&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Montamos la imagen en el directorio creado, aun estamos en /home/user:&lt;br /&gt;&lt;code&gt;$sudo  &lt;i&gt;mount -t iso9660 -o loop imagen.nrg /home/user/dirmontaje&lt;/i&gt;&lt;/code&gt;&lt;i&gt;&lt;br /&gt;&lt;br /&gt;Listo!. A Disfrutar.&lt;/i&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-1994109533962111842?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/1994109533962111842/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/04/montar-imagen-de-nero-nrg-en-ubuntu.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1994109533962111842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1994109533962111842'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/04/montar-imagen-de-nero-nrg-en-ubuntu.html' title='Montar Imagen de Nero NRG en Ubuntu'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-1247898348987363375</id><published>2009-03-17T20:51:00.001-07:00</published><updated>2009-11-02T18:15:14.880-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Expresiones Regulares - Validar número de telefono</title><content type='html'>¿Qué son expresiones regulares?,según la &lt;a href="http://es.wikipedia.org/wiki/Expresiones_regulares"&gt;Wikipedia&lt;/a&gt;:&lt;br /&gt;&lt;blockquote style="color: rgb(0, 0, 153);"&gt;Una expresión regular, a menudo llamada también patrón, es una expresión que describe un conjunto de cadenas sin enumerar sus elementos.[...]Las expresiones regulares son un método por medio del cual se pueden realizar búsquedas dentro de cadenas de caracteres. Sin importar si la búsqueda requerida es de dos caracteres en una cadena de 10 o si es necesario encontrar todas las apariciones de un patrón definido de caracteres en un archivo de millones de caracteres, las expresiones regulares proporcionan una solución para el problema. Adicionalmente, un uso derivado de la búsqueda de patrones es la validación de un formato específico en una cadena de caracteres dada, como por ejemplo fechas, números de teléfono o identificadores.&lt;/blockquote&gt;&lt;br /&gt;A continuación los los caracteres comodín usados para crear las expresiones regulares:&lt;br /&gt;&lt;table style="border: 1px solid Black;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Significado&lt;/th&gt;&lt;th&gt;Ejemplo&lt;/th&gt;&lt;th&gt;Resultado&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;\ Marca de carácter especial&lt;/td&gt;&lt;td&gt;/\$ftp/&lt;/td&gt;&lt;td&gt;Busca la palabra $ftp&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;^ Comienzo de una línea&lt;/td&gt;&lt;td&gt;/^-/&lt;/td&gt;&lt;td&gt;Líneas que comienzan por -&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;$ Final de una línea&lt;/td&gt;&lt;td&gt;/s$/&lt;/td&gt;&lt;td&gt;Líneas que terminan por s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;. Cualquier carácter (menos salto de línea)&lt;/td&gt;&lt;td&gt;/\b.\b/&lt;/td&gt;&lt;td&gt;Palabras de una sóla letra&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;| Indica opciones&lt;/td&gt;&lt;td&gt;/(L|l|f|)ocal/&lt;/td&gt;&lt;td&gt;Busca Local, local, focal&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;( ) Agrupar caracteres&lt;/td&gt;&lt;td&gt;/(vocal)/&lt;/td&gt;&lt;td&gt;Busca vocal&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;[ ] Conjunto de caracteres opcionales&lt;/td&gt;&lt;td&gt;/escrib[aoe]/&lt;/td&gt;&lt;td&gt;Vale escriba, escribo, escribe&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;La tabla que sigue describe los modificadores que pueden usarse con los caracteres que forman el patrón.Cada modificador actúa sobre el carácter o el paréntesis inmediatamente anterior.&lt;br /&gt;&lt;table style="border: 1px solid Black;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;/th&gt;&lt;th&gt;Descripción&lt;/th&gt;&lt;th&gt;Ejemplo&lt;/th&gt;&lt;th&gt;Resultado&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;*&lt;/td&gt;&lt;td&gt;Repetir 0 o más veces&lt;/td&gt;&lt;td&gt;/l*234/&lt;/td&gt;&lt;td&gt;Valen 234, 1234, 11234...&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;+&lt;/td&gt;&lt;td&gt;Repetir 1 o más veces&lt;/td&gt;&lt;td&gt;/a+mar/&lt;/td&gt;&lt;td&gt;Valen amar, aamar, aaamar...&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;?&lt;/td&gt;&lt;td&gt;Repetir 1 o 0 veces&lt;/td&gt;&lt;td&gt;/a?mar/&lt;/td&gt;&lt;td&gt;Valen amar, mar.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;{n}&lt;/td&gt;&lt;td&gt;Exactamente n veces&lt;/td&gt;&lt;td&gt;/p{2}sado&lt;/td&gt;&lt;td&gt;Vale ppasado&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-weight: bold;"&gt;{m,n}&lt;/td&gt;&lt;td&gt;Entre m y n veces&lt;/td&gt;&lt;td&gt;/car{1,3}o/&lt;/td&gt;&lt;td&gt;Vale caro, carro, carrro&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Para validar un  numero de telefono:&lt;/span&gt;&lt;br /&gt;&lt;div class="cajalittle"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;function ValidaTelef(string_numero)&lt;br /&gt;{&lt;br /&gt;&lt;span class="rem"&gt;/*creo la expresion regular y se la asigno a una variable&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;aceptará numeros como: 83294325,88173764,8... */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;var filter = /^[8]{1}[1-9]{2}[0-9]{5}$/;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*llamo a la funcion test pasandole la cadena numero&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;Devuelve true si el numero coincide y false en caso contrario*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; filter.test(string_numero);&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-1247898348987363375?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/1247898348987363375/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/03/expresiones-regulares-validar-numero-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1247898348987363375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1247898348987363375'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/03/expresiones-regulares-validar-numero-de.html' title='Expresiones Regulares - Validar número de telefono'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3001597625345060819</id><published>2009-03-16T22:20:00.000-07:00</published><updated>2011-08-27T06:33:43.267-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tecla'/><category scheme='http://www.blogger.com/atom/ns#' term='validar'/><category scheme='http://www.blogger.com/atom/ns#' term='enter'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='keypress'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='formulario'/><category scheme='http://www.blogger.com/atom/ns#' term='jlrvpuma'/><category scheme='http://www.blogger.com/atom/ns#' term='function'/><category scheme='http://www.blogger.com/atom/ns#' term='js'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='anular'/><category scheme='http://www.blogger.com/atom/ns#' term='funcion'/><title type='text'>Cancelar tecla ENTER de un formulario mediante j avascript y jQuery</title><content type='html'>&lt;span style="font-family:arial;"&gt;A veces se tiene la necesidad de anular la tecla Enter de un formulario para evitar el &lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;submit&lt;/span&gt;&lt;span style="font-family:arial;"&gt;.Para eso bien podría hacerse usando sólo javascript, sin embargo, en este ejemplo usaré la librería jQuery. &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://www.maestrosdelweb.com/editorial/javascript-facil-y-rapido-con-jquery/"&gt;Aquí&lt;/a&gt;&lt;span style="font-family:arial;"&gt; explican que es jQuery y lo pueden descargar en su versión más reciente desde &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://jquery.com/"&gt;su página&lt;/a&gt;&lt;span style="font-family:arial;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Para no mezclar el codigo HTML con javascript en unmismo documento, el codigo javacript lo hare otro aparte, al cual llamaré funciones.js y junto a este colocaré la libreria jQuery.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Código en funciones.js :&lt;/span&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;var x;&lt;br /&gt;x=$(document);&lt;br /&gt;x.ready(AnularEnter);&lt;br /&gt;&lt;br /&gt;function AnularEnter()&lt;br /&gt;{&lt;br /&gt;var x;&lt;br /&gt;x=$(&lt;span class="str"&gt;"#form1"&lt;/span&gt;);&lt;br /&gt;x.keypress(function(e){&lt;span class="kwrd"&gt;if&lt;/span&gt;(e == 13){&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;}});&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*para los textboxes*/&lt;/span&gt;&lt;br /&gt;$(&lt;span class="str"&gt;"input[type=text]"&lt;/span&gt;).keypress(function(e){&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(e.which == 13){ &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;; } });&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*para los radio*/&lt;/span&gt;&lt;br /&gt;$(&lt;span class="str"&gt;"input[type=radio]"&lt;/span&gt;).keypress(function(e){&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(e.which == 13){ &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;; } });&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/*para los checkboxes*/&lt;/span&gt;&lt;br /&gt;$(&lt;span class="str"&gt;"input[type=checkbox]"&lt;/span&gt;).keypress(function(e){&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(e.which == 13){ &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;; } });&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Explicación&lt;/h3&gt;La librería jQuery nos facilita la vida al momento de escribir codigo, en el ejemplo anterior, en la línea:&lt;br /&gt;&lt;code&gt;x=$("#form1");&lt;/code&gt;&lt;br /&gt;se obtiene al formulario mediante su Id, el cual en el ejemplo es&lt;span style="font-weight: bold; font-style: italic;"&gt; form1&lt;/span&gt;.En javascript puro seria:&lt;br /&gt;&lt;code&gt;x= getElementById('form1');&lt;/code&gt;&lt;br /&gt;Es decir, para seleccionar un elemento del DOM se usa la función&lt;span style="font-weight: bold;"&gt; $&lt;/span&gt;&lt;br /&gt;Para seleccionar mediante el Id del elemento:&lt;br /&gt;&lt;code&gt;$("#elId");&lt;/code&gt;&lt;br /&gt;Aunque en el ejemplo no se muestre, también se puede seleccionar mediante su clase:&lt;br /&gt;&lt;code&gt;$(".laClass");&lt;/code&gt;&lt;br /&gt;Notar las diferencias:&lt;span style="font-weight: bold;"&gt; #&lt;/span&gt;(almohadilla) para Id y &lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;(punto) para class.&lt;br /&gt;Volviendo al ejemplo, tambien puedo seleccionar un elemento del DOM mediante su tipo:&lt;code&gt;&lt;br /&gt;$("input[type=text]");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Como se ve en el ejemplo anterior, se seleccionan todos los textbox, todos los radiobuttons y todos los checkboxes.&lt;br /&gt;&lt;br /&gt;El numero 13 corresponde a la tecla Enter, asi que en:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$("input[type=text]").keypress(function(e){&lt;br /&gt;if(e.which == 13){  return false;      }    });&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;le digo que si esta en un textbox y presiona(evento keypress) la tecla Enter, retorne un valor false, de esa forma la tecla Enter queda anulada y no se produce el submit.&lt;br /&gt;De la misma forma funciona para los demás controles.&lt;br /&gt;Notar que le paso como argumento &lt;span style="font-weight: bold;"&gt;e&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;e&lt;/span&gt; contiene las características del evento; es decir, tiene la información necesaria para ese evento.&lt;br /&gt;&lt;br /&gt;También podemos prescindir de jquery y usar solo javascript,en este caso el evento sería onkeypress:&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Test-Submit&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text/javascript"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;function&lt;/span&gt; CancelSubmit(e)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;var&lt;/span&gt; keynum&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt;(window.&lt;span class="kwrd"&gt;event&lt;/span&gt;) &lt;span class="rem"&gt;// IE&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            keynum = e.keyCode&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt;(e.which) &lt;span class="rem"&gt;// Netscape/Firefox/Opera&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            keynum = e.which&lt;br /&gt;        }        &lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; (keynum != 13);&lt;br /&gt;    }&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;h1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;CANCELAR SUBMIT&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;h1&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;method&lt;/span&gt;&lt;span class="kwrd"&gt;="post"&lt;/span&gt; &lt;span class="attr"&gt;action&lt;/span&gt;&lt;span class="kwrd"&gt;="Test-Submit.html"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;onkeypress&lt;/span&gt;&lt;span class="kwrd"&gt;="return CancelSubmit(event)"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3001597625345060819?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3001597625345060819/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/03/cancelar-tecla-enter-de-un-formulario.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3001597625345060819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3001597625345060819'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/03/cancelar-tecla-enter-de-un-formulario.html' title='Cancelar tecla ENTER de un formulario mediante j avascript y jQuery'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-2226064213973633453</id><published>2008-10-13T22:11:00.000-07:00</published><updated>2009-11-01T22:54:07.487-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><title type='text'>UML</title><content type='html'>&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/10/modelado-de-negocios.html"&gt;Modelado de Negocios&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/10/uml-analisis-y-diseno.html"&gt;UML - Análisis y diseño&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/10/casos-de-uso.html"&gt;Casos de uso&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/10/diagramas-de-interaccion.html"&gt;Diagramas de Interacción&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-2226064213973633453?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/2226064213973633453/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2008/10/uml.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2226064213973633453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/2226064213973633453'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2008/10/uml.html' title='UML'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-106355799039098177</id><published>2008-09-25T20:59:00.000-07:00</published><updated>2009-11-01T22:54:15.178-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cliente'/><category scheme='http://www.blogger.com/atom/ns#' term='control de versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='tortoise'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>TortoiseSVN - Cliente de Subversion</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;AVISO :&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Son autoejecutables de Adobe Captivate .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1 - Como Crear un repositorio y una copia local de trabajo:&lt;/span&gt;&lt;br /&gt;&lt;a style="color: rgb(51, 102, 255);" href="http://cid-c8a56dd7becc4c8d.skydrive.live.com/self.aspx/P%c3%bablico/Tutoriales%20TortoiseSVN/1-Repositorio%5E_copiasLocales.exe"&gt;Descargar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2 - Actualizar Repositorio(Commit) :&lt;/span&gt;&lt;br /&gt;&lt;a href="http://cid-c8a56dd7becc4c8d.skydrive.live.com/self.aspx/P%c3%bablico/Tutoriales%20TortoiseSVN/2-Actualizar%5E_Repositorio.exe"&gt;Descargar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3 - Crear Ficheros y directorios nuevos y subirlos al repositorio(Versionarlos):&lt;/span&gt;&lt;br /&gt;&lt;a style="color: rgb(51, 102, 255);" href="http://cid-c8a56dd7becc4c8d.skydrive.live.com/self.aspx/P%c3%bablico/Tutoriales%20TortoiseSVN/3-FicherosNuevos%5E_TortoiseSVN.exe"&gt;Descargar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4 - Solucionar Conflictos con TortoiseSVN :&lt;/span&gt;&lt;br /&gt;&lt;a style="color: rgb(51, 102, 255);" href="http://cid-c8a56dd7becc4c8d.skydrive.live.com/self.aspx/P%c3%bablico/Tutoriales%20TortoiseSVN/4-Conflictos%5E_TortoiseSVN.exe"&gt;Descargar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-106355799039098177?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/106355799039098177/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2008/09/tortoisesvn-cliente-de-subversion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/106355799039098177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/106355799039098177'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2008/09/tortoisesvn-cliente-de-subversion.html' title='TortoiseSVN - Cliente de Subversion'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-1451665365705364852</id><published>2008-09-24T20:39:00.000-07:00</published><updated>2009-11-01T22:54:23.561-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='control de versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><title type='text'>Subversion - Control de Versiones</title><content type='html'>Subversion -  explicación a grandes rasgos:&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_2063684"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma/subversion-press" title="Subversion Press"&gt;Subversion Press&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=subversionpress-090924224635-phpapp01&amp;amp;stripped_title=subversion-press"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=subversionpress-090924224635-phpapp01&amp;amp;stripped_title=subversion-press" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View more &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/jlrvpuma"&gt;jlrvpuma&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;El informe Completo con tutorial de instalación en Windows:&lt;br /&gt;&lt;a href="http://cid-c8a56dd7becc4c8d.skydrive.live.com/self.aspx/P%c3%bablico/Tutoriales%20TortoiseSVN/Subversion%5E_Informe.pdf"&gt;Descargar&lt;/a&gt;&lt;br /&gt;&lt;/br&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-1451665365705364852?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/1451665365705364852/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/09/subversion-control-de-versiones.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1451665365705364852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1451665365705364852'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/09/subversion-control-de-versiones.html' title='Subversion - Control de Versiones'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3102786690885367990</id><published>2008-05-31T23:26:00.000-07:00</published><updated>2010-08-21T17:04:44.409-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='binding'/><category scheme='http://www.blogger.com/atom/ns#' term='oneway'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='method'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='jlrvpuma'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='twoway'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>WPF</title><content type='html'>&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/05/data-binding-wpf.html"&gt;Data Binding WPF&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/06/data-binding-wpf-ii.html"&gt;Data Binding WPF II&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/06/data-binding-wpf-iii.html"&gt;Data Binding WPF III&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/06/data-binding-iv.html"&gt;Data Binding WPF IV&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/06/data-binding-v-latex.html"&gt;Data Binding WPF V - LaTeX &lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/08/obtener-icono-de-aplicacion-mediante.html"&gt;Obtener Icono de Aplicación Mediante Path o Ruta de Ejecutable&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3102786690885367990?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3102786690885367990/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/wpf.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3102786690885367990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3102786690885367990'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/05/wpf.html' title='WPF'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-7692331321909993857</id><published>2008-03-25T10:46:00.000-07:00</published><updated>2011-03-25T19:49:45.670-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='typesetting beautiful documents'/><category scheme='http://www.blogger.com/atom/ns#' term='donald knuth'/><category scheme='http://www.blogger.com/atom/ns#' term='leslie lamport'/><category scheme='http://www.blogger.com/atom/ns#' term='tex'/><category scheme='http://www.blogger.com/atom/ns#' term='miktex'/><title type='text'>LaTeX</title><content type='html'>&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2011/03/documentos-presentables-con-latex.html"&gt;Documentos Presentables con LaTeX&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-7692331321909993857?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/7692331321909993857/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2008/03/latex.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7692331321909993857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/7692331321909993857'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2008/03/latex.html' title='LaTeX'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-812215319738505149</id><published>2008-02-02T09:47:00.000-08:00</published><updated>2009-11-01T22:55:35.128-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='2005'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='gof'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskinformatico'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='monodevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='patron'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><title type='text'>Patrones de Diseño</title><content type='html'>&lt;div id="introduction"&gt;&lt;h5 class="post-title entry-title"&gt;Introducción&lt;/h5&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="creational"&gt;&lt;b&gt;Creación&lt;/b&gt;&lt;ul&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/05/patron-de-creacion-abstract-factory.html"&gt;Abstract Factory   &lt;img id="BLOGGER_PHOTO_ID_5331751829586887730" alt="Con contenido" src="http://3.bp.blogspot.com/_wp91e-x7RW0/Sf4wCkkQxDI/AAAAAAAAAmw/GniswqQ3W-c/s320/aprobado.jpeg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/05/patron-de-creacion-bulider.html"&gt;Builder  &lt;img id="BLOGGER_PHOTO_ID_5331751829586887730" alt="Con contenido" src="http://3.bp.blogspot.com/_wp91e-x7RW0/Sf4wCkkQxDI/AAAAAAAAAmw/GniswqQ3W-c/s320/aprobado.jpeg" border="0" /&gt;&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Factory Method&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Prototype&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Singleton&lt;/a&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="structural"&gt;&lt;b&gt;Estructura&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Adapter&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Bridge&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Composite&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Decorator&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/05/patron-de-estructura-facade.html"&gt;Facade  &lt;img id="BLOGGER_PHOTO_ID_5331751829586887730" alt="Con contenido" src="http://3.bp.blogspot.com/_wp91e-x7RW0/Sf4wCkkQxDI/AAAAAAAAAmw/GniswqQ3W-c/s320/aprobado.jpeg" border="0" /&gt;&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Flyweight&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Proxy&lt;/a&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="behavioral"&gt;&lt;b&gt;Comportamiento&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/05/patron-de-comportamiento-chain-of.html"&gt;Chain of Responsability  &lt;img id="BLOGGER_PHOTO_ID_5331751829586887730" alt="Con contenido" src="http://3.bp.blogspot.com/_wp91e-x7RW0/Sf4wCkkQxDI/AAAAAAAAAmw/GniswqQ3W-c/s320/aprobado.jpeg" border="0" /&gt;&lt;/a&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Command&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Interpreter&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Iterator&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Mediator&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Memento&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Observer&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;State&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Strategy&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Template Method&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;ul&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4633064268247960727&amp;amp;postID=812215319738505149#"&gt;Visitor&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-812215319738505149?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/812215319738505149/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2007/05/patrones-de-diseno.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/812215319738505149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/812215319738505149'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2007/05/patrones-de-diseno.html' title='Patrones de Diseño'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wp91e-x7RW0/Sf4wCkkQxDI/AAAAAAAAAmw/GniswqQ3W-c/s72-c/aprobado.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-1961672326902980385</id><published>2008-01-25T21:11:00.000-08:00</published><updated>2010-11-04T18:42:57.470-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='after insert'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlserver'/><category scheme='http://www.blogger.com/atom/ns#' term='trigger'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Base de Datos</title><content type='html'>&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/11/mysql-sobre-ubuntu-guia-rapida.html"&gt;MySQL (en Ubuntu) - Guía rápida&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/01/crear-tablas-desde-archivo-sql.html"&gt;Oracle-Tabla desde archivo .sql&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/01/oracle-algunos-comandos.html"&gt;Oracle - algunos comandos básicos&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/02/trigger-after-insert-update-sql-server.html"&gt;Trigger After Insert Update - SQL SERVER&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/03/como-saber-si-es-insert-o-update.html"&gt;Cómo  saber si es Insert  o Update  Trigger AFTER INSERT,UPDATE - SQL  SERVER&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/06/instalar-oracle-xe-10g-en-ubuntu-910.html"&gt;Instalar Oracle XE 10g Ubuntu 9.10&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/11/insertar-dinamicamente-en-tabla.html"&gt;Insertar Dinamicamente en tabla temporal ORACLE&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-1961672326902980385?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/1961672326902980385/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2009/11/basen-de-datos.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1961672326902980385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/1961672326902980385'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2009/11/basen-de-datos.html' title='Base de Datos'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-6804414904738883592</id><published>2008-01-24T20:50:00.000-08:00</published><updated>2009-09-24T21:09:06.752-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='control de versiones'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Control de Versiones</title><content type='html'>&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/09/subversion-control-de-versiones.html"&gt;Subversion - Instalación en Windows&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2008/09/tortoisesvn-cliente-de-subversion.html"&gt;TortoiseSVN - Cliente de Subversion&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-6804414904738883592?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/6804414904738883592/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/subversion.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/6804414904738883592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/6804414904738883592'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/subversion.html' title='Control de Versiones'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-5211066017985236160</id><published>2008-01-01T19:53:00.000-08:00</published><updated>2011-11-28T19:26:52.459-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='dmi'/><category scheme='http://www.blogger.com/atom/ns#' term='ibex'/><category scheme='http://www.blogger.com/atom/ns#' term='gnu/linux'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='intrepid'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='bios.smbios'/><category scheme='http://www.blogger.com/atom/ns#' term='8.10'/><title type='text'>Gnu/Linux</title><content type='html'>&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/04/montar-imagen-de-nero-nrg-en-ubuntu.html"&gt;Montar Imagenes NRG de Nero en Ubuntu&lt;/a&gt;&lt;/h5&gt;&lt;h5&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/04/instalando-aptanastudio-en-ubuntu.html"&gt;Instalando Aptana Studio en Ubuntu Intrepid Ibex&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/04/configurar-apache-2-en-ubuntu-intrepid.html"&gt;Configurar APACHE 2 en Ubuntu Intrepid Ibex&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/07/montar-particion-windows-en-ubuntu.html"&gt;Montar Partición Windows(NTFS) en Ubuntu&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/06/incrementar-swap-o-memoria-de.html"&gt;Incrementar SWAP en Ubuntu 9.10&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/06/instalar-oracle-xe-10g-en-ubuntu-910.html"&gt;Instalar Oracle XE 10g Ubuntu 9.10&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2011/02/informacion-de-hardware-con-dmidecode.html"&gt;Información de Hardware con DMIDECODE en Ubuntu&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2011/05/extraer-pistas-de-archivo-flac-o-ape.html"&gt;Extraer pistas de archivo flac o ape (Debian/Ubuntu)&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2011/10/convertir-archivos-flac-ogg-en-ubuntu.html"&gt;Convertir archivos .flac a .ogg en Ubuntu&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-5211066017985236160?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/5211066017985236160/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/gnulinux.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5211066017985236160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/5211066017985236160'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/gnulinux.html' title='Gnu/Linux'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-3461286049596996023</id><published>2008-01-01T19:52:00.000-08:00</published><updated>2010-08-21T17:04:22.491-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='psapi.dll'/><category scheme='http://www.blogger.com/atom/ns#' term='interopServices'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='shell32'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='user32'/><category scheme='http://www.blogger.com/atom/ns#' term='apis'/><category scheme='http://www.blogger.com/atom/ns#' term='win32'/><category scheme='http://www.blogger.com/atom/ns#' term='visual'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel32.dll'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='studio'/><category scheme='http://www.blogger.com/atom/ns#' term='2008'/><category scheme='http://www.blogger.com/atom/ns#' term='delegados'/><title type='text'>C#</title><content type='html'>Código de ejemplo de patrones de diseño.&lt;br /&gt;&lt;a href="http://moleskinformatico.blogspot.com/2007/05/patrones-de-diseno.html"&gt;Ver&lt;/a&gt;&lt;br /&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/10/obteniendo-handle-de-una-ventana.html"&gt;Obteniendo Handle de una ventana mediante API&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/12/delegados-c.html"&gt;Delegados C#&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/12/como-obtener-lista-de-ventanas-mediante.html"&gt;Cómo obtener lista de ventanas mediante API's&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/08/obtener-ruta-o-path-de-ejecutable.html"&gt;Obtener ruta o path de Ejecutable mediante Handle de Ventana y API's&lt;/a&gt;&lt;/h5&gt;&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/08/obtener-icono-de-aplicacion-mediante.html"&gt;Obtener Icono de Aplicación Mediante Path o Ruta de Ejecutable&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-3461286049596996023?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/3461286049596996023/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/c.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3461286049596996023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/3461286049596996023'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/c.html' title='C#'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4633064268247960727.post-4311409583450230556</id><published>2008-01-01T19:49:00.000-08:00</published><updated>2011-11-28T19:25:28.360-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='poo'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='method'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><title type='text'>JavaScript</title><content type='html'>&lt;h5 class="post-title entry-title"&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/03/cancelar-tecla-enter-de-un-formulario.html"&gt;Cancelar tecla ENTER de un formulario mediante javascript y jQuery&lt;/a&gt;&lt;/h5&gt;&lt;h5&gt;&lt;a href="http://moleskinformatico.blogspot.com/2009/03/expresiones-regulares-validar-numero-de.html"&gt;Expresiones Regulares - Validar número de telefono&lt;/a&gt;&lt;/h5&gt;&lt;h5&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo.html"&gt;Objetos con JavaScript (POO) I&lt;/a&gt;&lt;/h5&gt;&lt;h5&gt;&lt;a href="http://moleskinformatico.blogspot.com/2010/12/objetos-con-javascript-poo-ii.html"&gt;Objetos con JavaScript (POO) II&lt;/a&gt;&lt;/h5&gt;&lt;h5&gt;&lt;a href="http://moleskinformatico.blogspot.com/2011/01/enviar-objeto-json-un-controlador.html"&gt;Enviar objeto JSON a un controlador genérico(.ashx) de ASP.NET con JQuery&lt;/a&gt;&lt;/h5&gt;&lt;h5&gt;&lt;a href="http://moleskinformatico.blogspot.com/2011/01/devolver-coleccion-de-objetos-en.html"&gt;Devolver colección de objetos en formato JSON desde ASP.NET&lt;/a&gt;&lt;/h5&gt;&lt;h5&gt;&lt;a href="http://moleskinformatico.blogspot.com/2011/11/llamar-funcion-de-ventana-padre-desde.html"&gt;Llamar función de ventana padre desde iframe en Fancybox&lt;/a&gt;&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4633064268247960727-4311409583450230556?l=moleskinformatico.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://moleskinformatico.blogspot.com/feeds/4311409583450230556/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/javascript.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/4311409583450230556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4633064268247960727/posts/default/4311409583450230556'/><link rel='alternate' type='text/html' href='http://moleskinformatico.blogspot.com/2008/01/javascript.html' title='JavaScript'/><author><name>jlrvpuma</name><uri>http://www.blogger.com/profile/16239016139522910632</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://3.bp.blogspot.com/_wp91e-x7RW0/SjcdgfnsvAI/AAAAAAAAAnA/hPjealwfQDU/S220/arco.jpg'/></author><thr:total>0</thr:total></entry></feed>
