<?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-3243236739421377577</id><updated>2012-01-30T20:43:52.864-05:00</updated><title type='text'>Rolando Palermo Rodríguez Cruz</title><subtitle type='html'>Computadoras, quién las entiende?</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-3477744596371827255</id><published>2011-03-26T10:34:00.012-05:00</published><updated>2011-03-26T23:07:32.006-05:00</updated><title type='text'>Gadget del clima en java</title><content type='html'>Luego de un tiempo sin poster (por motivos de trabajo) aquí les traigo este nuevo artículo orientado para la gente que vivimos inmersos en el mundo del desarrollo web. Y esto justamente porque mi primera experiencia laboral fuera de la universidad estuvo orientada a este campo.&lt;br /&gt;&lt;br /&gt;Todos sabemos que el desarrollo de aplicaciones web exige un poco más que solo conocer bien el lenguaje de programación en el que estamos desarrollando nuestro proyecto (Java, PHP, ASP, etc.) pues las cuestiones de estética juegan un papel importantísimo. Aprender a editar imágenes es algo realmente muy importante en el desarrollo web y en este post vamos a crear nuestro primer gadget ya que, si bien es cierto los hay por montones en internet, siempre es bueno saber el por qué y el cómo de las cosas, a parte que nos libramos de su molesta publicidad.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Paso 1&lt;/b&gt;&lt;br /&gt;Primero debemos registrarnos en algún servicio, en este caso lo vamos a hacer en &lt;a href="http://www.weather.com/services/xmloap.html"&gt;The Weather Channel&lt;/a&gt; ya que lo he probado y los resultados son bastante aceptables. Hecho esto se nos va a proporcionar un enlace similar a este:&lt;br /&gt;&lt;br /&gt;http://xoap.weather.com/weather/local/[AQUÍ DEBE IR EL CÓDIGO DE LA CIUDAD]?cc=*&amp;amp;dayf=5&amp;amp;link=xoap∏=xoap&amp;amp;par=[CÓDIGO]&amp;amp;key=[KEY]&lt;br /&gt;&lt;br /&gt;Así como también se nos enviará una carpeta con las imágenes de los distintos tipos de climas.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KcbNFiO6Ylg/TY4C-8GN4DI/AAAAAAAAAeI/c-i8Jighj7c/s1600/weather-channel-founder-global-warming-scam.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="140" src="http://1.bp.blogspot.com/-KcbNFiO6Ylg/TY4C-8GN4DI/AAAAAAAAAeI/c-i8Jighj7c/s320/weather-channel-founder-global-warming-scam.gif" width="169" /&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Paso 2&lt;/b&gt;&lt;br /&gt;Debemos editar la imágen que usará nuestro gadget, y aquí solamente se necesita un poco de creatividad y un buen programa. Yo uso Firewroks pues es muy completo y los resultados son excelentes.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eT8jkcRpLOM/TY4Ef-DGv1I/AAAAAAAAAeQ/tJyNMmB6xuw/s1600/fw.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/-eT8jkcRpLOM/TY4Ef-DGv1I/AAAAAAAAAeQ/tJyNMmB6xuw/s320/fw.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bueno, luego de editar nuestras fotos podemos obtener algo como esto:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0f31acXBYjw/TY4EypcZhEI/AAAAAAAAAeY/k--gXkq2CHg/s1600/weather_bg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://4.bp.blogspot.com/-0f31acXBYjw/TY4EypcZhEI/AAAAAAAAAeY/k--gXkq2CHg/s320/weather_bg.png" width="187" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Paso 3&lt;/b&gt;&lt;br /&gt;Esta imágen será el fondo de nuestro gadget, quizás no se vea bien aún pero ahora vayamos a la programación para darle un poco más de estilo.&lt;br /&gt;Nuestro gadget será programado en Java usando JSP para lo cual necesitaremos de un entorno que en nuestro caso será el Netbeans.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-msENuCtO_Ig/TY4Fg0NcduI/AAAAAAAAAeg/nbVtu_qA3aM/s1600/nb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://4.bp.blogspot.com/-msENuCtO_Ig/TY4Fg0NcduI/AAAAAAAAAeg/nbVtu_qA3aM/s320/nb.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Creamos un nuevo proyecto&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-JTTrxjX14VY/TY4GIxm3cDI/AAAAAAAAAeo/xCBz7DbpAhg/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://3.bp.blogspot.com/-JTTrxjX14VY/TY4GIxm3cDI/AAAAAAAAAeo/xCBz7DbpAhg/s320/01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Nombramos al proyecto como JWeather&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hpqiuZheFgE/TY4GgKruujI/AAAAAAAAAew/G1-W0cwHCO0/s1600/02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://3.bp.blogspot.com/-hpqiuZheFgE/TY4GgKruujI/AAAAAAAAAew/G1-W0cwHCO0/s320/02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Elegimos nuestro servicio&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-39BmW5mR0ZU/TY4G19nQvJI/AAAAAAAAAe4/qEZ1_JOCQQI/s1600/03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://4.bp.blogspot.com/-39BmW5mR0ZU/TY4G19nQvJI/AAAAAAAAAe4/qEZ1_JOCQQI/s320/03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Finalizamos la creación del proyecto&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-gogUeQ0g3d0/TY4Hbs8pRuI/AAAAAAAAAfA/3fbhgVh3quA/s1600/04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://4.bp.blogspot.com/-gogUeQ0g3d0/TY4Hbs8pRuI/AAAAAAAAAfA/3fbhgVh3quA/s320/04.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;También les dejo un video donde muestro su funcionamiento y cómo debería quedarles:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe allowfullscreen="" frameborder="0" height="300" src="http://www.youtube.com/embed/zreM_nX-JYI" title="YouTube video player" width="480"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/JWeather.rar?attredirects=0&amp;amp;d=1"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-3477744596371827255?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/3477744596371827255/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2011/03/gadget-clima-java-web.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3477744596371827255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3477744596371827255'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2011/03/gadget-clima-java-web.html' title='Gadget del clima en java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-KcbNFiO6Ylg/TY4C-8GN4DI/AAAAAAAAAeI/c-i8Jighj7c/s72-c/weather-channel-founder-global-warming-scam.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-173464341954198666</id><published>2011-03-10T00:26:00.006-05:00</published><updated>2011-03-10T00:32:59.611-05:00</updated><title type='text'>Imprimir fotos a tamaño real</title><content type='html'>Muchas veces tenemos problemas al querer imprimir nuestras imágenes a tamaño real, usualmente los que estamos metidos en el mundo del desarrollo digital, y buscamos soluciones como ponerlas en el MS-Word pero hoy se me ocurrió escribir una pequeña aplicación para automatizar este proceso. Adicionalmente brinda la opción de indicar el número de copias.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vwHgUfZ7N6w/TXhihG9tqsI/AAAAAAAAAeA/Wdg7oSORbIg/s1600/5.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="229" width="320" src="http://4.bp.blogspot.com/-vwHgUfZ7N6w/TXhihG9tqsI/AAAAAAAAAeA/Wdg7oSORbIg/s320/5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;La idea es utilizar una impresora virtual que nos genere un archivo PDF con la imágen que queremos imprimir, luego de esto, este archivo PDF ya puede ser impreso en cualquier impresora sin tener que preocuparnos por la escala pues tendrá el tamaño adecuado.&lt;br /&gt;&lt;br /&gt;Cualquier sugerencia será bienvenida, de todos modos espero les sea de utilidad. El video que les dejo muestra el funcionamiento de este pequeño programa.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/N2-kRDFl0UM" title="YouTube video player" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/JPrinter.rar?attredirects=0&amp;d=1"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-173464341954198666?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/173464341954198666/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2011/03/imprimir-fotos-tamano-real.html#comment-form' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/173464341954198666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/173464341954198666'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2011/03/imprimir-fotos-tamano-real.html' title='Imprimir fotos a tamaño real'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-vwHgUfZ7N6w/TXhihG9tqsI/AAAAAAAAAeA/Wdg7oSORbIg/s72-c/5.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-4606237720926779021</id><published>2010-12-21T22:04:00.002-05:00</published><updated>2010-12-21T22:07:53.425-05:00</updated><title type='text'>CCNA 4 v4 chapter 2‏ exam</title><content type='html'>&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Puntaje: 97.8&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TRFpBM8jOKI/AAAAAAAAAc4/uAZQfnD0TG8/s1600/01.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TRFpBM8jOKI/AAAAAAAAAc4/uAZQfnD0TG8/s320/01.bmp" width="278" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TRFpQ1DVNmI/AAAAAAAAAc8/gxpoBE5GaQU/s1600/2-1.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="281" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TRFpQ1DVNmI/AAAAAAAAAc8/gxpoBE5GaQU/s320/2-1.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TRFpc2rjzVI/AAAAAAAAAdA/Mvh-r_NaK3k/s1600/2-2.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TRFpc2rjzVI/AAAAAAAAAdA/Mvh-r_NaK3k/s320/2-2.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TRFppbG4VKI/AAAAAAAAAdE/9GBXG-1Y8-o/s1600/2-3.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TRFppbG4VKI/AAAAAAAAAdE/9GBXG-1Y8-o/s320/2-3.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TRFp4oP4wBI/AAAAAAAAAdI/vKoXZh2qgfU/s1600/3-1.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TRFp4oP4wBI/AAAAAAAAAdI/vKoXZh2qgfU/s320/3-1.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TRFqBRLLWPI/AAAAAAAAAdM/q4Oa74_nxHM/s1600/3-2.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="191" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TRFqBRLLWPI/AAAAAAAAAdM/q4Oa74_nxHM/s320/3-2.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TRFqV3K2l_I/AAAAAAAAAdQ/04Do3nFJLqs/s1600/4.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TRFqV3K2l_I/AAAAAAAAAdQ/04Do3nFJLqs/s320/4.bmp" width="271" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TRFqZOidrSI/AAAAAAAAAdU/6j-50H11lqE/s1600/5.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="62" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TRFqZOidrSI/AAAAAAAAAdU/6j-50H11lqE/s320/5.bmp" width="320" /&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/3243236739421377577-4606237720926779021?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/4606237720926779021/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/12/ccna-4-v4-chapter-2-exam.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/4606237720926779021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/4606237720926779021'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/12/ccna-4-v4-chapter-2-exam.html' title='CCNA 4 v4 chapter 2‏ exam'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XsiwsHwYXAo/TRFpBM8jOKI/AAAAAAAAAc4/uAZQfnD0TG8/s72-c/01.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-8459149513575027599</id><published>2010-11-21T10:03:00.006-05:00</published><updated>2010-11-21T13:59:49.099-05:00</updated><title type='text'>Algoritmo de QuickHull para la Cerradura Convexa con Simulación en Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;Pues en este post describiré lo relacionado con el algoritmo de QuickHull para encontrar la envolvente convexa de una conjunto de puntos. Evidentemente el esquema será el mismo que se ha venido mostrando a lo largo de todos mis post relacionados con la geometría computacional.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Primero que nada, debemos comprender de qué trata este algoritmo, y no hay mejor que mediante el seudocódigo y un ejemplo donde de ponga a prueba su funcionamiento. El algoritmo de QuickHull nos dice lo siguiente:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://3059655098166924729-a-1802744773732722657-s-sites.googlegroups.com/site/tecnologiaenperu/home/quickhull.jpg?attachauth=ANoY7cr16FgmrE1FkAfILAmVzSBvWSz2y_6sU0GuJmcET348uPDr4_CsSAUkmT1u50PqGnORPpGOKkzeVMlZMWPT5243XyrgKIyiU7pjNLxrtV83aJHvuDhE6zqj9N-a8ao8A5PWULto7hteT19wfZoq4rUUHsbk_QweBOIeaIooYj6k9682nx9jAop9e3Pn8vh6yZyFLObrlBW5Ei9Tlmz14rUbMEib7w%3D%3D&amp;amp;attredirects=0" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="https://3059655098166924729-a-1802744773732722657-s-sites.googlegroups.com/site/tecnologiaenperu/home/quickhull.jpg?attachauth=ANoY7cr16FgmrE1FkAfILAmVzSBvWSz2y_6sU0GuJmcET348uPDr4_CsSAUkmT1u50PqGnORPpGOKkzeVMlZMWPT5243XyrgKIyiU7pjNLxrtV83aJHvuDhE6zqj9N-a8ao8A5PWULto7hteT19wfZoq4rUUHsbk_QweBOIeaIooYj6k9682nx9jAop9e3Pn8vh6yZyFLObrlBW5Ei9Tlmz14rUbMEib7w%3D%3D&amp;amp;attredirects=0" width="320" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://3059655098166924729-a-1802744773732722657-s-sites.googlegroups.com/site/tecnologiaenperu/home/quickhull_procedimiento.jpg?attachauth=ANoY7cp0XoRQc7zdcguvIJF8a6GXbS1-vW58GLfPhe1HZkN3rK_fWyRoqaXist5ILRqG5SgingD_fFZiIOV8vAfm7CJ6PlcF3d2HJosYHjOQncwPzuq95yN8nGvU_NaxhvRlyACUc9RDD_rK2lWCJBaIEsi9fG1QwLS1-4IwDyAIv2X6NUtm8qT3Lk7_MdaMQDrIg5hPdpdvAWZlhaSoik9aYEol52fLEhlePh2NsthwBYBY-gxZV4M%3D&amp;amp;attredirects=0" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="https://3059655098166924729-a-1802744773732722657-s-sites.googlegroups.com/site/tecnologiaenperu/home/quickhull_procedimiento.jpg?attachauth=ANoY7cp0XoRQc7zdcguvIJF8a6GXbS1-vW58GLfPhe1HZkN3rK_fWyRoqaXist5ILRqG5SgingD_fFZiIOV8vAfm7CJ6PlcF3d2HJosYHjOQncwPzuq95yN8nGvU_NaxhvRlyACUc9RDD_rK2lWCJBaIEsi9fG1QwLS1-4IwDyAIv2X6NUtm8qT3Lk7_MdaMQDrIg5hPdpdvAWZlhaSoik9aYEol52fLEhlePh2NsthwBYBY-gxZV4M%3D&amp;amp;attredirects=0" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Entonces, dada una nube de puntos como la de la imágen:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TOli4_ZAXAI/AAAAAAAAAcQ/JDPoVBEwQqc/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TOli4_ZAXAI/AAAAAAAAAcQ/JDPoVBEwQqc/s1600/01.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;El algoritmo nos dice que como primer paso debemos seleccionar el punto más a la izquierda y el punto más a la derecha, quedándonos algo así:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TOli7qnF14I/AAAAAAAAAcU/24CtibBVdS4/s1600/02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TOli7qnF14I/AAAAAAAAAcU/24CtibBVdS4/s1600/02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Luego debemos separar en dos conjuntos, los que están a la derecha del segmento formado por los dos puntos encontrados anteriormente, y los que están a la izquierda. Estos conjuntos recibirán el nombre de S1 y S2 respectivamente.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TOli969TO3I/AAAAAAAAAcY/p2eJG1xLe50/s1600/03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TOli969TO3I/AAAAAAAAAcY/p2eJG1xLe50/s1600/03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Agregamos a la cerradura el punto min, los puntos que hallaremos al procesar el conjunto S1, el punto max y por último los puntos que hallaremos al procesar el conjunto S2.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TOli_LJk4xI/AAAAAAAAAcc/xKLqypPizjA/s1600/04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TOli_LJk4xI/AAAAAAAAAcc/xKLqypPizjA/s1600/04.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En la pila en donde se almacenan los puntos hay dos elementos que están con un color de fondo determinado, esto es así porque quiero indicar que en estas posiciones se insertarán conjuntos de puntos que serán hallados de manera recursiva, dada la naturaleza del algoritmo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora procesaremos S1. En esta parte se llamara a la función encargada de procesar el subconjunto de puntosd. Lo que se hace es escoger el punto más lejano de la recta formada por los puntos &lt;b&gt;a&lt;/b&gt; y &lt;b&gt;b&lt;/b&gt;, que son las entradas para este subprocedimiento. El punto más lejano es el punto 6 y este punto no tiene ningún punto, ni a la derecha ni a la izquierda, tal como indica el seudocódigo mostrado. Entonces el resultado de procesar el subconjunto S1 será el punto 6.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TOljBvlBekI/AAAAAAAAAcg/jVc_bNXoaKs/s1600/05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TOljBvlBekI/AAAAAAAAAcg/jVc_bNXoaKs/s1600/05.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora es el turno del subconjunto S2. El punto más lejano es el punto 2, el cuál al formar el segmento &lt;b&gt;cb&lt;/b&gt; no tiene puntos a su derecha, pero si a su derecha (área amarrilla), pero al formar el segmento &lt;b&gt;ac&lt;/b&gt;, presenta un punto a su derecha. Algo que rescatar aquí es que el proesamiento de &lt;b&gt;S2&lt;/b&gt; nos devolverá más de un punto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Entonces añadimos el resultado de procesar subconjunto A (región amarilla) a la pila y luego el punto 2.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TOljDRIDCvI/AAAAAAAAAck/coWFUb9NT4M/s1600/06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TOljDRIDCvI/AAAAAAAAAck/coWFUb9NT4M/s1600/06.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora, siguiendo el procesamiento anterior, el resultado de procesar la región amarilla nos retornará solo el punto 3 el cuál será añadido a la pila y terminará con la recursivad de este algoritmo al cumplir con la condición de finalización (&lt;b&gt;if noEsVacio(s)&lt;/b&gt;), ya que no nos quedan más puntos por procesar.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="goog_1303007961"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id="goog_1303007962"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span id="goog_1303007961"&gt;Utilizando los puntos almacenados en la pila podemos generar la envolvente convexa de nuestra nube de puntos, finalizando con esto todo el proceso.&lt;/span&gt;&lt;span id="goog_1303007962"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TOljFpRCY5I/AAAAAAAAAcs/4f2daay2i7w/s1600/08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TOljFpRCY5I/AAAAAAAAAcs/4f2daay2i7w/s1600/08.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Evidentemente todo esto debe ser contrastado con un modelo que permita certificar que todo lo expuesto anteriormente es cierto y bueno, aquí les dejo una simulación que, de manera interactiva, les permitirá verificar que el algoritmo funciona.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;applet archive="https://sites.google.com/site/tecnologiaenperu/home/QuickHull.jar" code="com.blogspot.rolandopalermo.QuickHull.class" height="300" width="400"&gt;&lt;br /&gt;&lt;/applet&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;La implementación del Algoritmo QuickHull es la siguiente:&lt;br /&gt;&lt;pre class="java" name="code"&gt;public static List&amp;lt;Point2D&amp;gt; quickHull(List&amp;lt;Point2D&amp;gt; nube) {&lt;br /&gt;    List&amp;lt;Point2D&amp;gt; cerradura = new ArrayList&amp;lt;Point2D&amp;gt;();&lt;br /&gt;    Point2D min_x = new Point2D.Double(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY);&lt;br /&gt;    Point2D max_x = new Point2D.Double(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY);&lt;br /&gt;    for(Point2D aux:nube) {&lt;br /&gt;        if(aux.getX()&amp;lt;min_x.getX()) {&lt;br /&gt;            min_x = aux;&lt;br /&gt;        }&lt;br /&gt;        if(aux.getX()&amp;gt;max_x.getX()) {&lt;br /&gt;            max_x = aux;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    List&amp;lt;Point2D&amp;gt; S1 = puntosLado(min_x, max_x, nube);&lt;br /&gt;    List&amp;lt;Point2D&amp;gt; S2 = puntosLado(max_x, min_x, nube);&lt;br /&gt;    cerradura.add(min_x);&lt;br /&gt;    cerradura.addAll(findHull(min_x, max_x, S1));&lt;br /&gt;    cerradura.add(max_x);&lt;br /&gt;    cerradura.addAll(findHull(max_x, min_x, S2));&lt;br /&gt;    return cerradura;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static List&amp;lt;Point2D&amp;gt; findHull(Point2D a, Point2D b, List&amp;lt;Point2D&amp;gt; S) {&lt;br /&gt;    List&amp;lt;Point2D&amp;gt; cerradura = new ArrayList&amp;lt;Point2D&amp;gt;();&lt;br /&gt;    Point2D c = new Point2D.Double();&lt;br /&gt;    if(!S.isEmpty()) {&lt;br /&gt;        List&amp;lt;Point2D&amp;gt; A = new ArrayList&amp;lt;Point2D&amp;gt;();&lt;br /&gt;        List&amp;lt;Point2D&amp;gt; B = new ArrayList&amp;lt;Point2D&amp;gt;();&lt;br /&gt;        c = puntosMayorArea(a, b, S);&lt;br /&gt;        A = puntosLado(a, c, S);&lt;br /&gt;        B = puntosLado(c, b, S);&lt;br /&gt;        cerradura.addAll(findHull(a, c, A));&lt;br /&gt;        cerradura.add(c);&lt;br /&gt;        cerradura.addAll(findHull(c, b, B));&lt;br /&gt;    }&lt;br /&gt;    return cerradura;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;El código fuente completo lo pueden descargar aquí:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/QuickHull.java"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bueno, espero que les sea de utilidad. Muy pronto postearé otros algoritmos para la cerradura convexa. No se olviden de dejar sus comentarios y críticas.&lt;br /&gt;&lt;br /&gt;Quizás te pueda interesar también esos posts:&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/11/java-convex-hull-jarvis.html"&gt;http://rolandopalermo.blogspot.com/2010/11/java-convex-hull-jarvis.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/09/algoritmo-de-graham-para-la-cerradura.html%20"&gt;http://rolandopalermo.blogspot.com/2010/09/algoritmo-de-graham-para-la-cerradura.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-8459149513575027599?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/8459149513575027599/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/quickhull-java-convex-hull.html#comment-form' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/8459149513575027599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/8459149513575027599'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/quickhull-java-convex-hull.html' title='Algoritmo de QuickHull para la Cerradura Convexa con Simulación en Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/TOli4_ZAXAI/AAAAAAAAAcQ/JDPoVBEwQqc/s72-c/01.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-2563898192748058156</id><published>2010-11-16T23:31:00.012-05:00</published><updated>2010-11-17T10:17:45.753-05:00</updated><title type='text'>Servidor Radius en Debian</title><content type='html'>Evidentemente si has llegado hasta este post es porque ya sabes qué es un servidor de autenticación Radius, así que las explicaciones las dejaremos de lado.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TONdOh7xtYI/AAAAAAAAAcI/EAx9s-wA52k/s1600/url.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;Sin embargo, a pesar de que existen muchos artículos que abordan este tema, estos no siempre nos funcionan a la primera ^^!... Bueno, en este post trataremos de que nuestro servidor quede correctamente configurado al primer intento.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TONdOh7xtYI/AAAAAAAAAcI/EAx9s-wA52k/s1600/url.gif" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TONdOh7xtYI/AAAAAAAAAcI/EAx9s-wA52k/s1600/url.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Lo primero que debemos hacer utlizar los mismos repositorios. El usar otros repositorios podría cambiar ligeramente el proceso de configuración descrito en este post. Bien, vayamos al grano, estos son mis repositorios:&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;#Repositorios no Libres&lt;br /&gt;deb http://http.us.debian.org/debian/ lenny main contrib non-free&lt;br /&gt;&lt;br /&gt;# Seguridad&lt;br /&gt;deb http://security.debian.org/ lenny/updates main contrib&lt;br /&gt;deb-src http://security.debian.org/ lenny/updates main contrib&lt;br /&gt;&lt;br /&gt;#### Unstable (sid)&lt;br /&gt;deb http://ftp.fi.debian.org/debian/ unstable main non-free contrib&lt;br /&gt;deb-src http://ftp.fi.debian.org/debian/ unstable main non-free contrib&lt;br /&gt;# deb http://mirrors.kernel.org/debian/ sid main contrib non-free&lt;br /&gt;# deb-src http://mirrors.kernel.org/debian/ sid main contrib non-free&lt;br /&gt;&lt;br /&gt;#### Testing&lt;br /&gt;deb http://ftp.fi.debian.org/debian/ testing main contrib non-free&lt;br /&gt;# deb-src http://ftp.fi.debian.org/debian/ testing main contrib non-free&lt;br /&gt;# deb http://security.debian.org/ testing/updates main contrib non-free&lt;br /&gt;&lt;br /&gt;#### Experimental&lt;br /&gt;deb http://mirrors.kernel.org/debian/ experimental main contrib non-free&lt;br /&gt;# deb-src http://mirrors.kernel.org/debian/ experimental main contrib non-free&lt;br /&gt;&lt;/pre&gt;Luego ejecutamos los comandos los siguientes comandos&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;apt-get clean&lt;br /&gt;apt-get update&lt;br /&gt;&lt;/pre&gt;Instalamos los paquetes necesarios&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;apt-get install apache2&lt;br /&gt;apt-get install mysql-server&lt;br /&gt;apt-get install freeradius freeradius-mysql&lt;br /&gt;&lt;/pre&gt;Editamos el archivo de usuarios (que serían los host o o usuarios finales que harían peticiones de autenticación)&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;gedit /etc/freeradius/users&lt;br /&gt;&lt;/pre&gt;En el archivo hay varios ejemplos de usuarios. Descomentamos (borramos este símbolo: &lt;b&gt;#&lt;/b&gt;) el usuario steve que viene como ejemplo. Nos quedaría algo así:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONeMzcbBPI/AAAAAAAAAcM/SesGKY4NNp8/s1600/Sin+t%25C3%25ADtulo-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONeMzcbBPI/AAAAAAAAAcM/SesGKY4NNp8/s320/Sin+t%25C3%25ADtulo-1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;En este caso he agregado el usuario toshiba y su clave será cisco. Para probar que el servidor autentica correctamente debemos hacer lo siguiente:&lt;br /&gt;En modo root primero detendremos el servicio:&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;/etc/init.d/freeradius stop&lt;br /&gt;&lt;/pre&gt;Iniciamos el modo debug&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;freeradius -X&lt;br /&gt;&lt;/pre&gt;Verificamos la autenticación por parte del servidor servidor&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;radtest steve testing 127.0.0.1 1812 testing123&lt;br /&gt;&lt;/pre&gt;Debemos obtener algo como esto&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;Sending Access-Request of id 115 to 127.0.0.1 port 1812&lt;br /&gt; User-Name = "toshiba"&lt;br /&gt; User-Password = "cisco NAS-IP-Address = 127.0.1.1&lt;br /&gt; NAS-Port = 1812&lt;br /&gt;rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=115, length=38&lt;br /&gt; Service-Type = Framed-User&lt;br /&gt; Framed-Protocol = PPP&lt;br /&gt; Framed-Compression = Van-Jacobson-TCP-IP&lt;br /&gt;&lt;/pre&gt;Con esto el servidor ya estaría listo para aunteticar usando los parámetros que trae por defecto. Evidentemente estos deben ser cambios y se le deben agregar algunas otras funcionalidades. En otro post explicaré cómo hacer que nuestro servidor autentique usando usuarios almacenados en una base de datos de MySQL.&lt;br /&gt;&lt;br /&gt;Saludos y espero les sea de utilidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-2563898192748058156?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/2563898192748058156/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/radius-server-debian.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2563898192748058156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2563898192748058156'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/radius-server-debian.html' title='Servidor Radius en Debian'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/TONdOh7xtYI/AAAAAAAAAcI/EAx9s-wA52k/s72-c/url.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-479353927480884000</id><published>2010-11-16T21:46:00.008-05:00</published><updated>2010-11-21T13:57:38.373-05:00</updated><title type='text'>Algoritmo de Jarvis para la Cerradura Convexa con Simulación en Java</title><content type='html'>En esta oportunidad vamos a ver el funcionamiento del algoritmo de Jarvis para la cerradura convexa. Veamos de qué trata el algoritmo:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://3059655098166924729-a-1802744773732722657-s-sites.googlegroups.com/site/tecnologiaenperu/home/jarvis.jpg?attachauth=ANoY7cqNrBq9VcSbrH0NYqdlpQBMMmn2yfVciNRkD4Th82ebVtY0MqRLxqb9aukqn79wshB0QY5Mlb40Spm7VOVa-q8IwquFDAzbGu1VAokSQlRJ9e01ImtzCsWMM1kf20MKUgHQvnxhlXMA3VS34yhCVJfOG3CIu9Dz06HytlwDYz5eAGiq2cJv7PctgTst3HAnGOyeZkK2SZL3Et2VGgCys7gSwbYyww%3D%3D&amp;amp;attredirects=0" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="286" src="https://3059655098166924729-a-1802744773732722657-s-sites.googlegroups.com/site/tecnologiaenperu/home/jarvis.jpg?attachauth=ANoY7cqNrBq9VcSbrH0NYqdlpQBMMmn2yfVciNRkD4Th82ebVtY0MqRLxqb9aukqn79wshB0QY5Mlb40Spm7VOVa-q8IwquFDAzbGu1VAokSQlRJ9e01ImtzCsWMM1kf20MKUgHQvnxhlXMA3VS34yhCVJfOG3CIu9Dz06HytlwDYz5eAGiq2cJv7PctgTst3HAnGOyeZkK2SZL3Et2VGgCys7gSwbYyww%3D%3D&amp;amp;attredirects=0" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bueno, el seudocódigo está bastante claro, pero vamos a ver cómo funcionaría con un pequeño conjunto de puntos. Supongamos que tenemos el siguiente conjunto de puntos:&lt;br /&gt;&lt;span id="goog_1045062848"&gt;&lt;/span&gt;&lt;span id="goog_1045062849"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONQxAJimqI/AAAAAAAAAbY/tZiXZ1Jiw7U/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONQxAJimqI/AAAAAAAAAbY/tZiXZ1Jiw7U/s1600/01.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Primero seleccionamos el punto de menor coordenada y lo llamamos &lt;b&gt;p&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TONQySNRaGI/AAAAAAAAAbc/XYnXDklUrLo/s1600/02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TONQySNRaGI/AAAAAAAAAbc/XYnXDklUrLo/s1600/02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Luego escogemos el punto que forma el menor ángulo con la horizontal, al que llamaremos &lt;b&gt;q&lt;/b&gt; y agregamos p a la pila que guardará los puntos que forman la cerradura convexa.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONQywYV-TI/AAAAAAAAAbg/Ddz7mF8lKFw/s1600/03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONQywYV-TI/AAAAAAAAAbg/Ddz7mF8lKFw/s1600/03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ingresamos al bucle y vamos a empezar a encontrar los puntos que forman la cerradura convexa teniendo como condición que este deberá formar el menor ángulo con la recta que forma los puntos &lt;b&gt;p&lt;/b&gt; y &lt;b&gt;q&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;En la primera iteración pasaría esto:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TONSnCK6GNI/AAAAAAAAAb0/Se1y_BEw4QM/s1600/04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TONSnCK6GNI/AAAAAAAAAb0/Se1y_BEw4QM/s1600/04.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;El punto 3 es el que forma el menor ángulo por lo que pasará a formar parte de la cerradura convexa. Vayamos a la siguiente iteración.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TONQ0RPygYI/AAAAAAAAAbo/kgX0g4OMsl8/s1600/05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TONQ0RPygYI/AAAAAAAAAbo/kgX0g4OMsl8/s1600/05.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;El siguiente punto ahora es el punto 2. El punto 3 ya pasó a formar parte de la cerradura convexa. Ahora veamos la siguiente iteración.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TONQ1JEE-gI/AAAAAAAAAbs/n4-VFIg2ahU/s1600/06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TONQ1JEE-gI/AAAAAAAAAbs/n4-VFIg2ahU/s1600/06.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Vemos que el punto con menor ángulo es el punto de inicio, además la condición de parada nos dice que &lt;b&gt;q!=inicio&lt;/b&gt;. Y la siguiente iteración no se ejecutará ya que nos quedará algo como esto:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONQ1nqhHII/AAAAAAAAAbw/MXlNXImi9s8/s1600/07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TONQ1nqhHII/AAAAAAAAAbw/MXlNXImi9s8/s1600/07.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;El bucle se termina y graficamos la cerradura convexa con los puntos almacenados en nuestra pila, quedándonos así:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TONQwk4QoTI/AAAAAAAAAbU/FnDiTcd1LNE/s1600/08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TONQwk4QoTI/AAAAAAAAAbU/FnDiTcd1LNE/s1600/08.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Aca les dejo un aplet para verificar el funcionamiento de nuestro algoritmo.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;applet archive="https://sites.google.com/site/tecnologiaenperu/home/Jarvis.jar" code="com.blogspot.rolandopalermo.Jarvis.class" height="300" width="400"&gt;&lt;br /&gt;&lt;/applet&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;La implementación del Algoritmo de Jarvis es la siguiente:&lt;br /&gt;&lt;pre class="java" name="code"&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author Rolando&lt;br /&gt; */&lt;br /&gt;public static List&amp;lt;Point2D&amp;gt; jarvis(List&amp;lt;Point2D&amp;gt; nube) {&lt;br /&gt;    List&amp;lt;Point2D&amp;gt; cerradura = new ArrayList&amp;lt;Point2D&amp;gt;();&lt;br /&gt;    double min = 0,ang = 0;&lt;br /&gt;    //O(n)&lt;br /&gt;    Point2D p = new Point2D.Double();&lt;br /&gt;    Point2D q = new Point2D.Double();&lt;br /&gt;    Point2D pInicio = new Point2D.Double();&lt;br /&gt;    Point2D posMin = new Point2D.Double();&lt;br /&gt;    p = menorCoordenadaY(nube);&lt;br /&gt;    pInicio = p;&lt;br /&gt;    q = calcularMenorAngulo(nube, p);&lt;br /&gt;    cerradura.add(p);&lt;br /&gt;    while(q!=pInicio) {&lt;br /&gt;        cerradura.add(q);&lt;br /&gt;        min=180;&lt;br /&gt;        for(Point2D aux:nube) {&lt;br /&gt;            if(aux!=q) {&lt;br /&gt;                ang=angulo(q,p,aux);&lt;br /&gt;                if(ang&amp;lt;min) {&lt;br /&gt;                    posMin=aux;&lt;br /&gt;                    min=ang;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        p=q;&lt;br /&gt;        q=posMin;&lt;br /&gt;    }&lt;br /&gt;    return cerradura;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;El código fuente completo lo pueden descargar aquí:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/Jarvis.java"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bueno, espero que les sea de utilidad. Muy pronto postearé el algoritmo de QuickHull. No se olviden de dejar sus comentarios y críticas.&lt;br /&gt;&lt;br /&gt;Quizás te pueda interesar también esos posts:&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/09/algoritmo-de-graham-para-la-cerradura.html%20"&gt;http://rolandopalermo.blogspot.com/2010/09/algoritmo-de-graham-para-la-cerradura.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/11/quickhull-java-convex-hull.html%20"&gt;http://rolandopalermo.blogspot.com/2010/11/quickhull-java-convex-hull.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-479353927480884000?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/479353927480884000/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/java-convex-hull-jarvis.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/479353927480884000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/479353927480884000'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/java-convex-hull-jarvis.html' title='Algoritmo de Jarvis para la Cerradura Convexa con Simulación en Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XsiwsHwYXAo/TONQxAJimqI/AAAAAAAAAbY/tZiXZ1Jiw7U/s72-c/01.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-117727599945610511</id><published>2010-11-03T13:54:00.004-05:00</published><updated>2010-11-03T14:02:16.020-05:00</updated><title type='text'>Acelerar el proceso de arranque en Sistemas Windows 7 con varios procesadores</title><content type='html'>El arranque en sistemas operativos Windows 7 por defecto se realiza con un solo procesador, pero podemos sacarle provecho a nuestras computadoras si es que estas poseen más de un núcleo. El proceso es sencillo.&lt;br /&gt;&lt;br /&gt;1. Pulsamos las teclas &lt;b&gt;Windows + r&lt;/b&gt; y nos aparecerá la siguiente ventana:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGuOfKO0UI/AAAAAAAAAa8/wKqqRDsgjoo/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="164" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGuOfKO0UI/AAAAAAAAAa8/wKqqRDsgjoo/s320/01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;2. Escribimos &lt;b&gt;msconfig&lt;/b&gt; y pulsamos enter o damos clic en aceptar.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGumMjHGHI/AAAAAAAAAbE/YBg1qsruXX4/s1600/02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="164" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGumMjHGHI/AAAAAAAAAbE/YBg1qsruXX4/s320/02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;3. Seleccionamos la pestaña &lt;b&gt;Arranque&lt;/b&gt; y damos clic en &lt;b&gt;Opciones avanzadas...&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGudwKBd3I/AAAAAAAAAbA/55_btDMpk0o/s1600/03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGudwKBd3I/AAAAAAAAAbA/55_btDMpk0o/s320/03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;4. En la ventana que nos aparecerá marcamos&lt;b&gt;Número de procesadores&lt;/b&gt; para que la habilite.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGu_K9M8JI/AAAAAAAAAbI/I3b1kF_SX1w/s1600/04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGu_K9M8JI/AAAAAAAAAbI/I3b1kF_SX1w/s320/04.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;5. Seleccionamos el número de procesadores de la lista desplegable y hacemos clic en &lt;b&gt;Aceptar&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGvamB2nBI/AAAAAAAAAbM/su-zaI6duVo/s1600/05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGvamB2nBI/AAAAAAAAAbM/su-zaI6duVo/s320/05.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;6. Luego hacemos clic en &lt;b&gt;Aplicar&lt;/b&gt;, luego en &lt;b&gt;Aceptar &lt;/b&gt;y se nos pedirá que reiniciemos nuestra computadora.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGvz46jmZI/AAAAAAAAAbQ/NmJsdbGcTtQ/s1600/06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGvz46jmZI/AAAAAAAAAbQ/NmJsdbGcTtQ/s320/06.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Eso es todo, espero les sea de utilidad. Cualquier duda o sugerencia, estoy presto a atenderla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-117727599945610511?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/117727599945610511/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/acelerar-arranque-windows-7.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/117727599945610511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/117727599945610511'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/acelerar-arranque-windows-7.html' title='Acelerar el proceso de arranque en Sistemas Windows 7 con varios procesadores'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGuOfKO0UI/AAAAAAAAAa8/wKqqRDsgjoo/s72-c/01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-8872429530011647366</id><published>2010-11-03T13:31:00.008-05:00</published><updated>2010-11-03T13:59:12.732-05:00</updated><title type='text'>Configuración de Servidor Radius en Packet Tracer</title><content type='html'>En este post voy a mostrar la forma de como configurar un servidor Radius en el entorno de simulación de packet tracer. La imágen que muestro a continuación es el reto de integración del CCNA3 v 4.0 que se dicta en Trujillo-Perú (Universidad Privada del Norte).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TNGXeJ5e-VI/AAAAAAAAAYM/0skT63mVge0/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TNGXeJ5e-VI/AAAAAAAAAYM/0skT63mVge0/s320/01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;La idea es es que los usuarios que se conecten a ambos access points puedan autenticarse usando un servidor radius ubicado en la misma VLAN en que la que se encuentran estos access points (VLAN 10).&lt;br /&gt;&lt;br /&gt;Bueno, una vez que hemos colocado el servidor radius en la misma VLAN le vamos a asignar un IP, máscara de subred y gateway de forma correcta. La VLAN 10 tiene el siguiente rango de direcciones: 30.30.30.0/24&lt;br /&gt;&lt;br /&gt;Y ya que se usa enrutamiento entre VLANS usando router-on-a-stick, la dirección gateway será 30.30.30.1 (para más detalle descarga el archivo de packet tracer al final del post).&lt;br /&gt;&lt;br /&gt;Entonces debería quedarnos algo así:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGmr4WZD_I/AAAAAAAAAaU/ZflLHQcGjyQ/s1600/RADIUS.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGmr4WZD_I/AAAAAAAAAaU/ZflLHQcGjyQ/s320/RADIUS.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bien, ahora vamos a configurar el servidor RADIUS. La siguiente imágen nos indicará cómo hacerlo:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGm6dHet0I/AAAAAAAAAaY/c1nsWPyP55s/s1600/RADIUS-CONF.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGm6dHet0I/AAAAAAAAAaY/c1nsWPyP55s/s320/RADIUS-CONF.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Los clientes serán los access points que utlizarán este servidor para la autenticación y los usuarios serán los hosts finales que necesitarán de un usuario y contraseña. Ahora vamos a configurar los access points para que utilizen el servidor.&lt;br /&gt;&lt;br /&gt;Primero debemos establecer el método de cifrado que utilizará y luego indicarle la dirección IP del servidor radius de esta manera:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGndTVtvQI/AAAAAAAAAac/4DSH3K0TAM0/s1600/WRS1-RADIUS.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="279" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGndTVtvQI/AAAAAAAAAac/4DSH3K0TAM0/s320/WRS1-RADIUS.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ahora tenemos que configurar en cada host el nombre de usuario y la contraseña. Para esto seguiremos los siguientes pasos:&lt;br /&gt;&lt;br /&gt;1. Editar el perfil del host. Seleccionamos el perfil y le damos clic en Edit.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGnzQDmRdI/AAAAAAAAAag/SvNYCxY0MDc/s1600/laptop01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGnzQDmRdI/AAAAAAAAAag/SvNYCxY0MDc/s320/laptop01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;2. Seleccionamos el SSID del access point al que nos queremos conectar y seleccionamos Advanced Setup.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGoHYqU-YI/AAAAAAAAAak/kRjZN9ygm2M/s1600/laptop02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGoHYqU-YI/AAAAAAAAAak/kRjZN9ygm2M/s320/laptop02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;3. Verificamos que en efecto sea el SSID del access point al que nos queremos conectar (Lo podemos editar, si ese fuese el caso) y luego damos clic en Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGogNKUunI/AAAAAAAAAao/Iyh4MpCZ9LU/s1600/laptop03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGogNKUunI/AAAAAAAAAao/Iyh4MpCZ9LU/s320/laptop03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;4.&amp;nbsp; Si tenemos un servidor DHCP entonces dejamos la opción marcada en rojo, en caso contrario tendremos que ingresar los datos requeridos para un host con IP estática. Luego hacemos clic en Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGo6S3tiQI/AAAAAAAAAas/LHX7peOzwm8/s1600/laptop04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGo6S3tiQI/AAAAAAAAAas/LHX7peOzwm8/s320/laptop04.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;5. Seleccionamos el tipo de encriptación que usa el access point y damos clic en Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGpTKQ1RbI/AAAAAAAAAaw/dhR9bC7KDfg/s1600/laptop05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TNGpTKQ1RbI/AAAAAAAAAaw/dhR9bC7KDfg/s320/laptop05.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;6. Ingresamos el usuario y contraseña que habíamos añadido anteriormente a la base de datos del servidor RADIUS (El número de usuarios en radius dependerá del número de clientes que se conecten a los access points). Luego damos clic en Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGplKSQ8uI/AAAAAAAAAa0/c2rkoafvusA/s1600/laptop06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TNGplKSQ8uI/AAAAAAAAAa0/c2rkoafvusA/s320/laptop06.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;7. Hacemos clic en Save y listo!!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGqGQIdWGI/AAAAAAAAAa4/gfCdGiAJqO8/s1600/laptop07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TNGqGQIdWGI/AAAAAAAAAa4/gfCdGiAJqO8/s320/laptop07.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Y para finalizar el post aca les dejo el archivo de packet tracer.&lt;br /&gt;&lt;br /&gt;&lt;center&gt; &lt;a href="https://sites.google.com/site/tecnologiaenperu/home/CasodeEstudio3.pkt?attredirects=0&amp;amp;d=1"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Con eso ya tenemos nuestro proceso de autenciación usando un Servidor Radius. Cualquier inquietud, no duden en comentarla.&lt;br /&gt;&lt;br /&gt;También te podría interesar estos posts:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/goog_737067686"&gt;http://rolandopalermo.blogspot.com/2010/09/caso-de-estudio-2-configuraciones.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/08/cap-10-reto-de-integracion-de.html"&gt;http://rolandopalermo.blogspot.com/2010/08/cap-10-reto-de-integracion-de.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-8872429530011647366?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/8872429530011647366/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/radius-server-packet-tracer.html#comment-form' title='12 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/8872429530011647366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/8872429530011647366'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/11/radius-server-packet-tracer.html' title='Configuración de Servidor Radius en Packet Tracer'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/TNGXeJ5e-VI/AAAAAAAAAYM/0skT63mVge0/s72-c/01.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-5923482114005583138</id><published>2010-10-31T22:30:00.010-05:00</published><updated>2010-10-31T23:19:37.365-05:00</updated><title type='text'>Fobs4JMF in Windows XP and Netbeans</title><content type='html'>Looking for a way to play video in java I found a project called Fobs4JMF. It's a PlugIn which allows to use the wide range of formats supported by ffmpeg in your Java applications.&lt;br /&gt;&lt;br /&gt;If you want to try that, you have to follow the next steps:&lt;br /&gt;1. Install the latest JMF version&lt;br /&gt;2. Download Fobs4JMF from &lt;a href="http://sourceforge.net/projects/fobs/files/fobs4jmf%20binaries/Fobs4JMF-0.4.2/fobs4jmf_0.4.2_win32.tar.bz2"&gt;here&lt;/a&gt;.&lt;br /&gt;3. Extract in a folder (For example in C:\). See the screenshot:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TM4wOytYLeI/AAAAAAAAAX0/EbBxCYbR13U/s1600/ss1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TM4wOytYLeI/AAAAAAAAAX0/EbBxCYbR13U/s320/ss1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;2.Include C:\fobs4jmf_0.4.2_win32\fobs4jmf.jar and C:\fobs4jmf_0.4.2_win32\jmf.jar; into your java classpath environment variable (or include it directly in the command line invocation of java): If you have extracted in C:\ drive, then you can add directly this paths &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;C:\fobs4jmf_0.4.2_win32\fobs4jmf.jar;C:\fobs4jmf_0.4.2_win32\jmf.jar;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;See the screenshot:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TM4xyIEbo5I/AAAAAAAAAX4/IfjWGIf9WAA/s1600/ss2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TM4xyIEbo5I/AAAAAAAAAX4/IfjWGIf9WAA/s320/ss2.jpg" width="285" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Thereafter, follow these steps:&lt;br /&gt;&lt;div style="text-align: left;"&gt;1. Launch JMStudio (java JMStudio).&lt;/div&gt;&lt;div style="text-align: left;"&gt;2. Go to File-&amp;gt;Preferences&lt;/div&gt;&lt;div style="text-align: left;"&gt;3. Enter the "Plugins" tab&lt;/div&gt;&lt;div style="text-align: left;"&gt;4. In the "Demultiplexer" tab, add the class "com.omnividea.media.parser.video.Parser" and commit.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TM4yyB3RZCI/AAAAAAAAAYA/EO6CcGJgNu0/s1600/ss4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TM4yyB3RZCI/AAAAAAAAAYA/EO6CcGJgNu0/s320/ss4.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;5. In the "Codec" tab, add the class "com.omnividea.media.codec.video.NativeDecoder" and commit.&lt;/div&gt;&lt;div style="text-align: left;"&gt;6. In the "Codec" tab, add the class "com.omnividea.media.codec.audio.NativeDecoder" and commit.&lt;/div&gt;&lt;div style="text-align: left;"&gt;7. In the "Codec" tab, add the class "com.omnividea.media.codec.video.JavaDecoder" and commit.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TM4zRLMqo5I/AAAAAAAAAYE/6GajdxhyT7A/s1600/ss5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="142" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TM4zRLMqo5I/AAAAAAAAAYE/6GajdxhyT7A/s320/ss5.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;8. Go to the "Packages" tab&lt;/div&gt;&lt;div style="text-align: left;"&gt;9. Include "com.omnividea" in both the Protocol Prefix &lt;strike&gt;and the Context Prefix list&lt;/strike&gt;. Move both of them up to the first position. Commit both. See screenshot.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TM4yeyT6nWI/AAAAAAAAAX8/c9bcpEaO6jI/s1600/ss3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TM4yeyT6nWI/AAAAAAAAAX8/c9bcpEaO6jI/s320/ss3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After these steps, the jmf plugin is installed in the system and will be used automatically when needed, not only by JMStudio but also by any program that uses the JMF plugin &lt;a href="http://fobs.sourceforge.net/f4jmf_first.html"&gt;[1]&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you are using netbeans IDE you have to add &lt;b&gt;fobs4jmf.jar&lt;/b&gt; to your classpath project. It should look like that:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TM40KJDudDI/AAAAAAAAAYI/QZabSSTUUSE/s1600/ss6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TM40KJDudDI/AAAAAAAAAYI/QZabSSTUUSE/s1600/ss6.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Dont' forget to leave a comment ^^!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-5923482114005583138?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/5923482114005583138/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/fobs4jmf-netbeans-windows-java.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5923482114005583138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5923482114005583138'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/fobs4jmf-netbeans-windows-java.html' title='Fobs4JMF in Windows XP and Netbeans'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XsiwsHwYXAo/TM4wOytYLeI/AAAAAAAAAX0/EbBxCYbR13U/s72-c/ss1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-1065536148153788257</id><published>2010-10-31T12:16:00.016-05:00</published><updated>2010-10-31T22:30:57.365-05:00</updated><title type='text'>Thermometer in Java with JFreeChart</title><content type='html'>&lt;div style="text-align: justify;"&gt;Definitely one of the most interesting componentes of JFreeChart packet is the Thermometer. As part of my thesis I need to use that but when I tried it I managed to use it. It isn't very easy to find the way to use a thermometer component and If you want to get the source code, you have to purchase the JFreeChart Developer Guide.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TM2jYe27lNI/AAAAAAAAAXs/jeuJRmjmqu0/s1600/ThermometerDemo1.jpeg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TM2jYe27lNI/AAAAAAAAAXs/jeuJRmjmqu0/s320/ThermometerDemo1.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Much people haven't got a clue how to use it but in this post I'm going to show how we can use the thermometer en our projects, so they are going to look much better.&lt;br /&gt;&lt;br /&gt;I haven't read the licence and I can explain nothing about that, but looking for some examples on the net I found a page where the autor show the JFreeChart Demo source code decompiled by him. I supose the decompiling of jfreechart is not allowed, but really is well worth checking it.&lt;/div&gt;&lt;br /&gt;Here is the source code:&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;/*&lt;br /&gt; * To change this template, choose Tools | Templates&lt;br /&gt; * and open the template in the editor.&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;package com.rolandopalermo.telecontrol.test;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author Rolando Palermo&lt;br /&gt; */&lt;br /&gt;import java.awt.*;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JSlider;&lt;br /&gt;import javax.swing.event.ChangeEvent;&lt;br /&gt;import javax.swing.event.ChangeListener;&lt;br /&gt;import org.jfree.chart.ChartPanel;&lt;br /&gt;import org.jfree.chart.JFreeChart;&lt;br /&gt;import org.jfree.chart.plot.ThermometerPlot;&lt;br /&gt;import org.jfree.data.general.DefaultValueDataset;&lt;br /&gt;import org.jfree.data.general.ValueDataset;&lt;br /&gt;import org.jfree.ui.ApplicationFrame;&lt;br /&gt;import org.jfree.ui.RectangleInsets;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class ThermometerDemo1 extends ApplicationFrame {&lt;br /&gt;    &lt;br /&gt;    static class ContentPanel extends JPanel implements ChangeListener {&lt;br /&gt;        JSlider slider;&lt;br /&gt;        DefaultValueDataset dataset;&lt;br /&gt;        &lt;br /&gt;        private static JFreeChart createChart(ValueDataset valuedataset) {&lt;br /&gt;            ThermometerPlot thermometerplot = new ThermometerPlot(valuedataset);&lt;br /&gt;            JFreeChart jfreechart = new JFreeChart("Thermometer Demo 1", JFreeChart.DEFAULT_TITLE_FONT, thermometerplot, true);&lt;br /&gt;            thermometerplot.setInsets(new RectangleInsets(5D, 5D, 5D, 5D));&lt;br /&gt;            thermometerplot.setPadding(new RectangleInsets(10D, 10D, 10D, 10D));&lt;br /&gt;            thermometerplot.setThermometerStroke(new BasicStroke(2.0F));&lt;br /&gt;            thermometerplot.setThermometerPaint(Color.lightGray);&lt;br /&gt;            thermometerplot.setUnits(1);&lt;br /&gt;            thermometerplot.setGap(3);&lt;br /&gt;            return jfreechart;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void stateChanged(ChangeEvent changeevent) {&lt;br /&gt;                dataset.setValue(new Integer(slider.getValue()));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public ContentPanel() {&lt;br /&gt;                super(new BorderLayout());&lt;br /&gt;                slider = new JSlider(0, 100, 50);&lt;br /&gt;                slider.setPaintLabels(true);&lt;br /&gt;                slider.setPaintTicks(true);&lt;br /&gt;                slider.setMajorTickSpacing(25);&lt;br /&gt;                slider.addChangeListener(this);&lt;br /&gt;                add(slider, "South");&lt;br /&gt;                dataset = new DefaultValueDataset(slider.getValue());&lt;br /&gt;                add(new ChartPanel(createChart(dataset)));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public ThermometerDemo1(String s) {&lt;br /&gt;        super(s);&lt;br /&gt;        JPanel jpanel = createDemoPanel();&lt;br /&gt;        setContentPane(jpanel);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static JPanel createDemoPanel() {&lt;br /&gt;        return new ContentPanel();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String args[]) {&lt;br /&gt;        ThermometerDemo1 thermometerdemo1 = new ThermometerDemo1("Thermometer Demo 1");&lt;br /&gt;        thermometerdemo1.pack();&lt;br /&gt;        thermometerdemo1.setVisible(true);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Additionally you have to add these jars (They are in the /lib directory of the JFreechart folder) to your project's classpath:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TM2mae_htmI/AAAAAAAAAXw/mr9liwqo_1w/s1600/libraries.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TM2mae_htmI/AAAAAAAAAXw/mr9liwqo_1w/s1600/libraries.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You can see whole of the source code here &lt;a href="http://code.google.com/p/bluelight/"&gt;http://code.google.com/p/bluelight/&lt;/a&gt;&lt;br /&gt;You can get JFreechart project here &lt;a href="http://sourceforge.net/projects/jfreechart/files/"&gt;http://sourceforge.net/projects/jfreechart/files/&lt;/a&gt;&lt;br /&gt;That's all by now. I hope it useful.&lt;br /&gt;&lt;br /&gt;Don't forget to leave a comment ^^'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-1065536148153788257?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/1065536148153788257/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/thermometerdemo1java.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/1065536148153788257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/1065536148153788257'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/thermometerdemo1java.html' title='Thermometer in Java with JFreeChart'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/TM2jYe27lNI/AAAAAAAAAXs/jeuJRmjmqu0/s72-c/ThermometerDemo1.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-6000978854697132716</id><published>2010-10-25T12:34:00.003-05:00</published><updated>2010-11-02T20:36:39.706-05:00</updated><title type='text'>¿Quién fué el mejor James Bond?</title><content type='html'>Muchos de los que disfrutamos ver una y otra vez las películas de James Bond siempre nos hemos preguntado quién ha sido el mejor actor que ha interpretado el papel de este personaje creado por Ian Fleming. Si buscamos en internet hay muchos debates acerca de ello así como también muchas opiniones encontradas (Sobre todo con respecto al último James Bond, Daniel Craig).&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMW_lYEe2iI/AAAAAAAAAXk/ULWCHWZCEQU/s1600/JamesBond%5B1%5D.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMW_lYEe2iI/AAAAAAAAAXk/ULWCHWZCEQU/s320/JamesBond%5B1%5D.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una de las principales valoraciones que se le da a cada James Bond es el número de películas que este ha realizado. Es por esta razón que George Lazenby casi siempre es colocado en la posición número 6.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMWzouzpQ2I/AAAAAAAAAXI/8VaQzA4WMXA/s1600/_40908180_lazen_bbc.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMWzouzpQ2I/AAAAAAAAAXI/8VaQzA4WMXA/s1600/_40908180_lazen_bbc.jpg" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Y es que Lazenby solo ha hecho une película de James Bond, me refiero a &lt;b&gt;"Al servicio secreto de su majestad"&lt;/b&gt;. Y es que no es el hecho de que Lazenby haya sido un mal James Bond, sino que solo ha hecho 1 solo película de las 23 que son tomadas como oficiales.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El siguiente es Sean Connery quien ha interpretado a James Bond en 7 oportunidades. Muchos consideran que él ha sido el mejor James Bond pues luego de filmar estas películas ha tenido una gran trayectoria cinematográfica en cintas con una trama similar a la de James Bond (como &lt;i&gt;&lt;b&gt;La Roca&lt;/b&gt;&lt;/i&gt;).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TMW16W4Uk4I/AAAAAAAAAXM/vys0a0Z5KU0/s1600/connery-bond.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TMW16W4Uk4I/AAAAAAAAAXM/vys0a0Z5KU0/s1600/connery-bond.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Otro factor que le da puntos a Connery es el hecho de haber sido el primer 007 del cine creando un prototipo de personaje (adicionalemente al del propio Bond creado por Fleming) que los otros actores tuvieron que seguir añadiendo cada uno lo suyo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Roger Moore es otro de los que se perfila como el mejor James Bond, y esto debido a que es el actor que más veces ha encarnado al agente secreto británico, haciéndolo hasta en 7 oportunidades.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMW4P2B_YqI/AAAAAAAAAXQ/LE09-_8HqMY/s1600/moore-roger-photo-roger-moore-6202330.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMW4P2B_YqI/AAAAAAAAAXQ/LE09-_8HqMY/s1600/moore-roger-photo-roger-moore-6202330.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Así mismo, según mi opinión, no posee la frialdad del Bond que describe Fleming sino más bien es un tipo sarcástico, demostrando esto en muchas de sus películas. También es muy recordado por ser el que tuvo que enfrentarse en muchas oportunidades al casi inmortal &lt;i&gt;&lt;b&gt;Tiburón.&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora es el turno de Timothy Dalton quien tampoco a interpretado a Bond en muchas oportunidades (Solo 2 para ser exactos). Su popularidad en relación con su papel de Bond no es muy buena, ya que el igual que Lazenby, el corto número de películas hechas no le da tantas oportunidades frente el resto de actores.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TMW6N6E8szI/AAAAAAAAAXU/iTrNgOCSm7w/s1600/Timothy_Dalton.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TMW6N6E8szI/AAAAAAAAAXU/iTrNgOCSm7w/s1600/Timothy_Dalton.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo las dos películas hechas son muy buenas y además ha demostrado tener cierta frialdad a la que no nos tenían acostumbrados Connery y Moore.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora es el turno de otro James Bond, se podría decir el más popular entre gente cuya edad oscila entre los 17 y 30 años. Me refiero a Pierce Brosnan. Es considerado por muchos foros como el mejor James Bond ,pero esto es debido al hecho de que la mayoría de gente que usamos el internet tenemos esa edad (17-30) y asociamos automáticamente la imágen de Brosnan con el agente 007.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TMW8PVDVwRI/AAAAAAAAAXY/1F_wVPJm5vQ/s1600/039_39555.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TMW8PVDVwRI/AAAAAAAAAXY/1F_wVPJm5vQ/s1600/039_39555.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No digo que Brosnan haya sido un mal actor pues ha hecho grandes películas y reune casi todas las características de los otros actores pero al verlo pelear contra enemigos evidentemente más fuertes que él y verlo resistir tantos golpes hacía que las películas se vean &lt;b&gt;demasiado &lt;/b&gt;fantasiosas. Por lo demás, un excelente actor y la imágen de James Bond para la gente de nuestra generación.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Y ahora es el turno del más discutido James Bond. Me refiero a Daniel Craig. Para mí es el mejor actor que haya realizado este papel pues es un tipo de sentimientos fríos, calculador que primero mata y luego pregunta, no es bromista y tiene las capacidades físicas de enfrentarse al mismísimo &lt;i&gt;&lt;b&gt;Tiburón&lt;/b&gt;&lt;/i&gt;. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TMW9KWtyv-I/AAAAAAAAAXc/exGtLYNVBiI/s1600/daniel_craig.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TMW9KWtyv-I/AAAAAAAAAXc/exGtLYNVBiI/s320/daniel_craig.jpg" width="229" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;El problema con las películas de Craig es que se han suprimido personas como &lt;i&gt;&lt;b&gt;Q&lt;/b&gt;&lt;/i&gt; o &lt;i&gt;&lt;b&gt;Miss &lt;i&gt;Moneypenny&lt;/i&gt;&lt;/b&gt;&lt;/i&gt; así como a los autos equipados con lanzamisiles y los artefactos de última generación que si tenían las anteriores películas y se le ha dado (sobre todo en &lt;b&gt;Casino Royal&lt;/b&gt;) un toque un poco más sentimental. Un dato curioso es que es recién en esta película que se muestra como James Bond adquiere su licencia para matar (00).&lt;br /&gt;&lt;br /&gt;En fin, esa es mi opinión tan válida como la del resto de gente. Y para finalizar este post les dejo la lista de actores en función de la calidad con la que interpretaron a este mítico agente secreto 007.&lt;br /&gt;&lt;b&gt;&lt;span class="" id="feed_item_j_S84EfePTc_expanded"&gt;1- Daniel﻿ Craig&lt;br /&gt;2- Sean Connery&lt;br /&gt;3- Pierce Brosnan&lt;br /&gt;4- Roger Moore&lt;br /&gt;5- Timothy Dalton&lt;br /&gt;6- George Lazenby&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TMW_fIDqj_I/AAAAAAAAAXg/ZcqSkoq_dx8/s1600/bondactors.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TMW_fIDqj_I/AAAAAAAAAXg/ZcqSkoq_dx8/s320/bondactors.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="" id="feed_item_j_S84EfePTc_expanded"&gt;Ahora solo nos queda esperar para cuando sea el estreno de &lt;/span&gt;Bond 23 que actualmente está suspendido indefinidamente y que contará con la actuación de Craig.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TMW_scDjg0I/AAAAAAAAAXo/SAlnWUQ1tRE/s1600/james-bonds.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TMW_scDjg0I/AAAAAAAAAXo/SAlnWUQ1tRE/s320/james-bonds.jpg" width="304" /&gt;&lt;/a&gt;&lt;/div&gt;Aca les dejo también un video donde salen todos estos personajes.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dMGD3QYEQ9c?fs=1&amp;amp;hl=es_ES&amp;amp;hd=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/dMGD3QYEQ9c?fs=1&amp;amp;hl=es_ES&amp;amp;hd=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-6000978854697132716?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/6000978854697132716/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/mejor-james-bond.html#comment-form' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6000978854697132716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6000978854697132716'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/mejor-james-bond.html' title='¿Quién fué el mejor James Bond?'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/TMW_lYEe2iI/AAAAAAAAAXk/ULWCHWZCEQU/s72-c/JamesBond%5B1%5D.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-2049867318126314202</id><published>2010-10-24T01:49:00.011-05:00</published><updated>2011-11-14T13:59:33.375-05:00</updated><title type='text'>Flex y Bison en un solo Analizador</title><content type='html'>Anteriormente habiamos hablado acerca de la forma de configurar Flex (&lt;a href="http://rolandopalermo.blogspot.com/2009/12/como-configurar-flex-en-windows-y-no.html"&gt;http://rolandopalermo.blogspot.com/2009/12/como-configurar-flex-en-windows-y-no.html&lt;/a&gt;) y también como hacerlo con Bison (&lt;a href="http://rolandopalermo.blogspot.com/2010/01/configurando-bison-en-windows-para.html"&gt;http://rolandopalermo.blogspot.com/2010/01/configurando-bison-en-windows-para.html&lt;/a&gt;) pero hasta ahora no se había explicado la forma en cómo se puede hacer que ambas herramientas trabajen juntas. Bueno, este post abordará este tema ya que si bien es cierto que la configuración de estas herramientas es sencilla el hacerlos trabajar juntas no lo es tanto.&lt;br /&gt;&lt;br /&gt;Bueno, lo primero que tenemos que hacer es tener nuestro Flex y Bison configurados como expliqué en los post anteriores. Luego de eso debemos tener nuestros archivos tanto para flex como para bison listos, claro que la forma de cómo se estructuran estos archivos no es parte de este post. Aca les voy a mostrar los archivos que usé para un proyecto de la universidad (Shark Analyzer 3.0) sobre un lenguaje de programación que estabamos definiendo. Antes que nada un screenshot de lo que es el analizador que hicimos.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMPTgcTyFOI/AAAAAAAAAW0/rmRS8ZrwMuQ/s1600/splash.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMPTgcTyFOI/AAAAAAAAAW0/rmRS8ZrwMuQ/s320/splash.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Archivo para FLEX&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;%{&lt;br /&gt;   #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;   #include &amp;lt;conio.h&amp;gt;&lt;br /&gt;   #include "parser.h"  &lt;br /&gt;%}&lt;br /&gt;%option noyywrap&lt;br /&gt;%option yylineno&lt;br /&gt;letra [a-zA-Z]&lt;br /&gt;digito [0-9]&lt;br /&gt;binario [0-1]&lt;br /&gt;ignora " "|\t|\n&lt;br /&gt;operarit *|+|-|/&lt;br /&gt;operlog &amp;amp;|$&lt;br /&gt;comparador &amp;lt;|&amp;gt;|&amp;lt;=|&amp;gt;=|==|!=&lt;br /&gt;%%&lt;br /&gt;{ignora}+                    {;}&lt;br /&gt;"Entero"                     {printf("Palabra reservada para tipo de dato entero\n");return PRENTERO;}&lt;br /&gt;"Real"                       {printf("Palabra reservada para tipo de dato real\n");return PRREAL;}&lt;br /&gt;"Booleano"                   {printf("Palabra reservada para tipo de dato booleano\n");return PRBOOLEANO;}&lt;br /&gt;"Caracter"                   {printf("Palabra reservada para tipo de dato caracter\n");return PRCARACTER;}&lt;br /&gt;"Si"                         {printf("Palabra reservada para condicional\n");return PRSI;}&lt;br /&gt;"Sino"                       {printf("Palabra reservada para otro condicional\n");return PRSINO;}&lt;br /&gt;"SinoSi"                     {printf("Palabra reservada para definir condicionales secundarias\n");return PRSINOSI;}&lt;br /&gt;"Entonces"                   {printf("Palabra reservada para definir accion a realizar\n");return PRENTONCES;}&lt;br /&gt;"FinSi"                      {printf("Palabra reservada finalizar condicional\n");return PRFINSI;}&lt;br /&gt;"Para"                       {printf("Palabra reservada para bucle de tipo Para\n");return PRPARA;}&lt;br /&gt;"FinPara"                    {printf("Palabra reservada para fin de bucle de tipo Para\n");return PRFINPARA;}&lt;br /&gt;"Mientras"                   {printf("Palabra reservada para bucle de tipo Mientras\n");return PRMIENTRAS;}&lt;br /&gt;"Hacer"                      {printf("Palabra reservada para indicar que se empieza algo\n");return PRHACER;}&lt;br /&gt;"FinMientras"                {printf("Palabra reservada fin de bucle de tipo Mientras\n");return PRFINMIENTRAS;}&lt;br /&gt;"FinHacerMientras"           {printf("Palabra reservada para indicar fin de bucle Hacer-Mientras\n");return PRFINHACERMIENTRAS;}&lt;br /&gt;"Funcion"                    {printf("Palabra reservada para declaracion de funciones\n");return PRFUNCION;}&lt;br /&gt;"Estructura"                 {printf("Palabra reservada para declaracion de estructuras\n");return PRESTRUCTURA;}&lt;br /&gt;"FinFuncion"                 {printf("Palabra reservada para finalizar funcion\n");return PRFINFUNCION;}&lt;br /&gt;"Retorna"                    {printf("Palabra reservada para retorno de funcion\n");return PRRETORNA;}&lt;br /&gt;"SinValor"                   {printf("Palabra reservada para funcion sin valor de retorno\n");return PRSINVALOR;}&lt;br /&gt;"Definir"                    {printf("Palabra reservada para definir funciones\n");return PRDEFINIR;}&lt;br /&gt;"Constante"                  {printf("Palabra reservada para definir constantes\n");return PRCONSTANTE;}&lt;br /&gt;"Entrada"                    {printf("Palabra reservada para definir entradas\n");return PRENTRADA;}&lt;br /&gt;"Salida"                     {printf("Palabra reservada para definir salidas\n");return PRSALIDA;}&lt;br /&gt;{letra}({letra}|{digito})*   {printf("Identificador\n");return IDENT;}&lt;br /&gt;{letra}+                     {printf("Caracter\n");return CARACTER;}&lt;br /&gt;{binario}+                   {printf("Binario\n");return BOOLEANO;} &lt;br /&gt;{digito}+                    {printf("Entero\n");return ENTERO;}&lt;br /&gt;{digito}+"."{digito}+        {printf("Real\n");return REAL;}&lt;br /&gt;{comparador}                 {printf("Comparador\n");return COMPARADOR;}&lt;br /&gt;":="                         {printf("Asignador\n");return ASIG;}&lt;br /&gt;";"                          {printf("Fin sentencia\n");return PCOMA;}&lt;br /&gt;"!="                         {printf("Diferente\n");return DIF;}&lt;br /&gt;","              {printf("Coma\n");return COMA;}&lt;br /&gt;"=="                         {printf("Igual\n");return IGUAL;}&lt;br /&gt;"."                          {printf("Punto\n");return PTO;}&lt;br /&gt;"&amp;gt;="                         {printf("Signo mayor-igual\n");return MAIGU;}&lt;br /&gt;"&amp;lt;="                         {printf("Signo menor-igual\n");return MEIGU;}&lt;br /&gt;"("                          {printf("(\n");return PARIZ;}&lt;br /&gt;")"                          {printf(")\n");return PARDE;}&lt;br /&gt;"&amp;gt;"                          {printf("&amp;gt;\n");return MAYOR;}&lt;br /&gt;"&amp;lt;"                          {printf("&amp;lt;\n");return MENOR;}&lt;br /&gt;"{"                          {printf("{\n");return LLIZ;}&lt;br /&gt;"}"                          {printf("}\n");return LLDE;}&lt;br /&gt;"+"                          {printf("+\n");return MAS;}&lt;br /&gt;"-"                          {printf("-\n");return MENOS;}&lt;br /&gt;"*"                          {printf("*\n");return POR;}&lt;br /&gt;"/"                          {printf("/\n");return ENTRE;}&lt;br /&gt;"&amp;amp;"                          {printf("&amp;amp;\n");return YLOG;}&lt;br /&gt;"$"                          {printf("Operador Logico\n");return OLOG;}&lt;br /&gt;.                            {printf("ERROR LEXICO EN LINEA %d \n",yylineno);}&lt;br /&gt;%%&lt;br /&gt;int main(int argc,char *argv[])&lt;br /&gt;{&lt;br /&gt; if ((yyin = fopen(argv[1], "rt")) == NULL)&lt;br /&gt; {&lt;br /&gt;  printf("\nNo se puede abrir el archivo: %s\n", argv[1]);&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  //yylex();&lt;br /&gt;  yyparse();&lt;br /&gt; }&lt;br /&gt; fclose(yyin);&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Lo único diferente con respecto al ejemplo que mostré en el post de configuración de flex es que ahora no invocaremos a la función yylex() sino que ahora se invocará a la función yyparse(). Adicionalmente vemos que en la cabecera se invoca a la librería "parser.h" la cuál debe contener las deficiones para cada toquen de nuestra gramática.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;Arhcivo parser.h&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;#ifndef YYSTYPE&lt;br /&gt;#define YYSTYPE int&lt;br /&gt;#endif&lt;br /&gt;#define PRENTERO 257&lt;br /&gt;#define PRREAL         258&lt;br /&gt;#define PRBOOLEANO 259&lt;br /&gt;#define PRCARACTER 260&lt;br /&gt;#define PRSI         261&lt;br /&gt;#define PRSINO         262&lt;br /&gt;#define PRSINOSI 263&lt;br /&gt;#define PRENTONCES 264&lt;br /&gt;#define PRFINSI         265&lt;br /&gt;#define PRPARA         266&lt;br /&gt;#define PRFINPARA 267&lt;br /&gt;#define PRMIENTRAS 268&lt;br /&gt;#define PRHACER         269&lt;br /&gt;#define PRFINMIENTRAS 270&lt;br /&gt;#define PRFINHACERMIENTRAS  271&lt;br /&gt;#define PRFUNCION     272&lt;br /&gt;#define PRFINFUNCION     273&lt;br /&gt;#define PRRETORNA     274&lt;br /&gt;#define PRSINVALOR     275&lt;br /&gt;#define PRESTRUCTURA     276&lt;br /&gt;#define MAS 277&lt;br /&gt;#define MENOS 278&lt;br /&gt;#define POR 279&lt;br /&gt;#define ENTRE 280&lt;br /&gt;#define OLOG 281&lt;br /&gt;#define YLOG 282&lt;br /&gt;#define PRDEFINIR 283&lt;br /&gt;#define PRCONSTANTE 284&lt;br /&gt;#define IDENT 285&lt;br /&gt;#define ENTERO 286&lt;br /&gt;#define REAL 287&lt;br /&gt;#define BOOLEANO 288&lt;br /&gt;#define CARACTER 289&lt;br /&gt;#define COMPARADOR 290&lt;br /&gt;#define ASIG 291&lt;br /&gt;#define PCOMA 292&lt;br /&gt;#define DIF 293&lt;br /&gt;#define COMA 294&lt;br /&gt;#define IGUAL 295&lt;br /&gt;#define PTO 296&lt;br /&gt;#define MAIGU 297&lt;br /&gt;#define MEIGU 298&lt;br /&gt;#define PARIZ 299&lt;br /&gt;#define PARDE 300&lt;br /&gt;#define MAYOR 301&lt;br /&gt;#define MENOR 302&lt;br /&gt;#define LLIZ 303&lt;br /&gt;#define LLDE 304&lt;br /&gt;#define PRSALIDA 305&lt;br /&gt;#define PRENTRADA 306&lt;br /&gt;&lt;br /&gt;extern YYSTYPE yylval;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cone esto ahora debemos definir el archivo para bison.&lt;br /&gt;&lt;br /&gt;Archivo para Bison:&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;%{&lt;br /&gt;int yystopparser=0;&lt;br /&gt;%}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;%token PRENTERO PRREAL PRBOOLEANO PRCARACTER PRSI PRSINO PRSINOSI PRENTONCES PRFINSI PRPARA  &lt;br /&gt;PRFINPARA PRMIENTRAS PRHACER PRFINMIENTRAS PRFINHACERMIENTRAS PRFUNCION PRFINFUNCION PRRETORNA PRSINVALOR PRESTRUCTURA MAS MENOS POR ENTRE OLOG YLOG  &lt;br /&gt;PRDEFINIR PRCONSTANTE IDENT ENTERO REAL BOOLEANO CARACTER COMPARADOR ASIG PCOMA DIF COMA IGUAL PTO   &lt;br /&gt;MAIGU MEIGU PARIZ PARDE MAYOR MENOR LLIZ LLDE PRSALIDA PRENTRADA&lt;br /&gt;%start inicio&lt;br /&gt;&lt;br /&gt;%%&lt;br /&gt;inicio  : funcion&lt;br /&gt;  | constante &lt;br /&gt;  | estructura&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;estructura : PRESTRUCTURA IDENT LLIZ n&lt;br /&gt;n  : declaracion n&lt;br /&gt;  | declaracion nn&lt;br /&gt;nn  : LLDE IDENT PCOMA o&lt;br /&gt;o  : estructura&lt;br /&gt;  | constante&lt;br /&gt;  | funcion&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;constante : PRDEFINIR PRCONSTANTE e&lt;br /&gt;e  : PRENTERO IDENT f&lt;br /&gt;  | PRREAL IDENT f&lt;br /&gt;  | PRBOOLEANO IDENT f&lt;br /&gt;f  : ASIG g&lt;br /&gt;g  : ENTERO PCOMA y&lt;br /&gt;  | REAL PCOMA y&lt;br /&gt;  | BOOLEANO PCOMA y&lt;br /&gt;y  : constante&lt;br /&gt;  | estructura &lt;br /&gt;  | funcion  &lt;br /&gt;  ; &lt;br /&gt;&lt;br /&gt;funcion  : PRFUNCION j&lt;br /&gt;j  : PRENTERO k&lt;br /&gt;  | PRREAL k&lt;br /&gt;  | PRBOOLEANO k&lt;br /&gt;  | PRCARACTER k&lt;br /&gt;  | PRSINVALOR k&lt;br /&gt;k  : IDENT PARIZ l&lt;br /&gt;l  : kl&lt;br /&gt;kl  : declaracion l&lt;br /&gt;  | ll&lt;br /&gt;ll  : PARDE sentencia m&lt;br /&gt;m  : PRRETORNA IDENT p&lt;br /&gt;  | p&lt;br /&gt;p  : PRFINFUNCION funcion&lt;br /&gt;  | PRFINFUNCION &lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;comparacion : IDENT COMPARADOR b&lt;br /&gt;b  : IDENT&lt;br /&gt;  | REAL&lt;br /&gt;  | ENTERO&lt;br /&gt;  | BOOLEANO&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;declaracion : PRENTERO c&lt;br /&gt;  | PRREAL c&lt;br /&gt;  | PRBOOLEANO c&lt;br /&gt;  | PRCARACTER c&lt;br /&gt;c  : IDENT PCOMA&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;asignacion  : IDENT ASIG a&lt;br /&gt;a  : IDENT PCOMA&lt;br /&gt;  | ENTERO PCOMA &lt;br /&gt;  | REAL PCOMA&lt;br /&gt;  | BOOLEANO PCOMA&lt;br /&gt;  | oparitmetica PCOMA&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;mientras : PRMIENTRAS PARIZ x&lt;br /&gt;x  : comparacion y&lt;br /&gt;  | oplogica y&lt;br /&gt;y  : PARDE sentencia PRFINMIENTRAS&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;hacermientras : PRHACER sentencia PRFINHACERMIENTRAS PRMIENTRAS PARIZ cc&lt;br /&gt;cc  : comparacion PARDE&lt;br /&gt;  | oplogica PARDE&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;para  : PRPARA PARIZ asignacion comparacion PCOMA asignacion PARIZ sentencia PRFINPARA&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;si  : PRSI PARIZ sh&lt;br /&gt;sh  : comparacion shh&lt;br /&gt;  | oplogica shh&lt;br /&gt;shh  : PARDE PRENTONCES sentencia h&lt;br /&gt;h  : PRFINSI&lt;br /&gt;  | PRSINOSI PARIZ comparacion PARDE PRENTONCES sentencia i&lt;br /&gt;i  : h&lt;br /&gt;  | z&lt;br /&gt;z  : PRSINO PRENTONCES sentencia PRFINSI&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;sentencia : declaracion sentencia &lt;br /&gt;  | declaracion &lt;br /&gt;  | asignacion sentencia &lt;br /&gt;  | asignacion&lt;br /&gt;  | mientras sentencia &lt;br /&gt;  | mientras&lt;br /&gt;  | hacermientras sentencia &lt;br /&gt;  | hacermientras &lt;br /&gt;  | para sentencia&lt;br /&gt;  | para&lt;br /&gt;  | si sentencia &lt;br /&gt;  | si&lt;br /&gt;  | entrada sentencia&lt;br /&gt;  | entrada&lt;br /&gt;  | salida sentencia&lt;br /&gt;  | salida&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;salida  : PRSALIDA ASIG LLIZ LLDE PCOMA&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;entrada  : PRENTRADA IDENT PCOMA&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;oparitmetica : MAS PARIZ q&lt;br /&gt;  | POR PARIZ q&lt;br /&gt;  | suma&lt;br /&gt;  | producto&lt;br /&gt;q  : oparitmetica PARDE r&lt;br /&gt;suma  : MAS r t&lt;br /&gt;producto : POR r t&lt;br /&gt;t  : r u&lt;br /&gt;u  : t&lt;br /&gt;  | &lt;br /&gt;r  : IDENT&lt;br /&gt;  | REAL&lt;br /&gt;  | ENTERO&lt;br /&gt;  ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;oplogica : OLOG PARIZ qq&lt;br /&gt;  | YLOG PARIZ qq&lt;br /&gt;  | yy&lt;br /&gt;  | oo&lt;br /&gt;qq  : oplogica PARDE rr&lt;br /&gt;oo  : OLOG rr tt&lt;br /&gt;yy  : YLOG rr tt&lt;br /&gt;tt  : rr uu&lt;br /&gt;uu  : tt&lt;br /&gt;  | &lt;br /&gt;rr  : comparacion &lt;br /&gt;  ;&lt;br /&gt;&lt;/pre&gt;Con esos tres archivos ya casi estamos listos. También dentro del directorio donde están trabajando (Directorio en donde se encuentra el archivo de flex y bison) deben crear el siguiente archivo:&lt;br /&gt;&lt;br /&gt;Archivo error.c&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;void  yyerror(char * msg)&lt;br /&gt;{&lt;br /&gt; printf ("%s\n", msg);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora solo nos queda compilar los scripts de flex y bison del siguiente modo:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S1-Iz9Q6kTI/AAAAAAAAAHk/d-mRc68uL_g/s1600-h/02.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431210101832323378" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S1-Iz9Q6kTI/AAAAAAAAAHk/d-mRc68uL_g/s320/02.jpg" style="cursor: pointer; display: block; height: 180px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;Con esto nuestro directorio de trabajo debería quedar algo así:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMPRRcwH5jI/AAAAAAAAAWs/JHlHpbwyIcE/s1600/directorio.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="198" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMPRRcwH5jI/AAAAAAAAAWs/JHlHpbwyIcE/s320/directorio.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Ahora si usan DevC++ solo deben crear un proyecto y añadir todos los archivos ahí presentes. Observen además que para correr el programa no se nos pedirá que ingresemos el nombre de del archivo sino que lo debemos mandar como parámetro, en otras palabras el archivo generado no se debe ejecutar con doble clic sino por medio de la consola del windows. Creo que una imágen vale más que mil palabras:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMPTIybSFII/AAAAAAAAAWw/_U5f14v32Hw/s1600/pasos.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMPTIybSFII/AAAAAAAAAWw/_U5f14v32Hw/s320/pasos.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;El hecho que el programa tenga una forma especial de ejecutarse es que nosotros hicimos un proyecto en la Universidad en donde desde una aplicación en Java invocabamos a un ejecutable generado en C que se encargaba de realizar el procesamiento de la gramática y esa salida la mostrabamos en Java (que lógicamente presenta una mejor interfaz de usuario). Esto lo cuento a modo de anécdota por si tuvieran que hacer algo similar.&lt;br /&gt;&lt;br /&gt;Y bueno, lógicamente también les pondré unos ejemplos de código. El primero es el que está escrito correctamente:&lt;br /&gt;&lt;br /&gt;Codigo00.txt&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;Estructura est &lt;br /&gt;{&lt;br /&gt;Entero num;&lt;br /&gt;Entero nfgj;&lt;br /&gt;Booleano ggnum;&lt;br /&gt;} est1;&lt;br /&gt;&lt;br /&gt;Definir Constante Entero numero := 145 ;&lt;br /&gt;&lt;br /&gt;Funcion Entero miFuncion( Caracter Cadena; ) &lt;br /&gt;&lt;br /&gt;   Car:=Carro;&lt;br /&gt;   Entero Num;&lt;br /&gt;&lt;br /&gt;   Mientras ( c&amp;lt;d )&lt;br /&gt;&lt;br /&gt;      Car:=Carro;&lt;br /&gt;      Entero bandera;&lt;br /&gt;      Booleano boole;&lt;br /&gt;      boole:=1;&lt;br /&gt;&lt;br /&gt;      Mientras ( a&amp;gt;=4 )&lt;br /&gt;&lt;br /&gt;         Car:=Carro;&lt;br /&gt;         Entero bandera;&lt;br /&gt;         Booleano boole;&lt;br /&gt;         boole:=1;&lt;br /&gt;&lt;br /&gt;  Para ( a:=14; a&amp;lt;=25; a:= + 5 4 ;(&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  Si ( a==4 ) Entonces&lt;br /&gt;    Bool:=1;&lt;br /&gt;     FinSi&lt;br /&gt;  &lt;br /&gt;  FinPara&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;      FinMientras&lt;br /&gt;&lt;br /&gt;   FinMientras&lt;br /&gt;&lt;br /&gt;   Si ( a==4 ) Entonces&lt;br /&gt;  Bool:=1;&lt;br /&gt;   FinSi&lt;br /&gt;&lt;br /&gt;   Retorna Numero &lt;br /&gt;&lt;br /&gt;FinFuncion&lt;br /&gt;&lt;/pre&gt;Y el programa Shark Analyzer 3.0 lo analiza de la siguiente manera:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMRZwTuN7qI/AAAAAAAAAXA/CSDXAVYif8E/s1600/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TMRZwTuN7qI/AAAAAAAAAXA/CSDXAVYif8E/s320/01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Y el siguiente código está mal escrito&lt;br /&gt;Codigo01.txt&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;Definir Constante Entero numero := 145 ;&lt;br /&gt;Definir Booleano nume := 1 ;&lt;br /&gt;Funcion Entero ( Entero num; Real fre; Booleano boll;) &lt;br /&gt;   Mientras (  )&lt;br /&gt;      Booleano ghjfg;&lt;br /&gt;      bocfgh:=1;&lt;br /&gt;      Mientras ( a&amp;gt;=4 )&lt;br /&gt;         Car:=Carro;&lt;br /&gt;         Entero bandera;&lt;br /&gt;         Booleano boole;&lt;br /&gt;         boole:=1; &lt;br /&gt; Si ( a==4 ) &lt;br /&gt;   Bool:=1;&lt;br /&gt;   Booleano boolean;&lt;br /&gt; SinoSi (a==5) Entonces&lt;br /&gt;  Bool:=2;&lt;br /&gt; Sino Entonces&lt;br /&gt;  Bool:=3;&lt;br /&gt;    FinSi&lt;br /&gt;      FinMientras&lt;br /&gt;   FinMientras&lt;br /&gt;   Retorna Carro&lt;br /&gt;FinFuncion&amp;nbsp;&lt;/pre&gt;Shark Analyzer 3.0 nos muestra lo siguiente:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMRZ6_u6AKI/AAAAAAAAAXE/2-M9q_VcSIA/s1600/02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="171" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TMRZ6_u6AKI/AAAAAAAAAXE/2-M9q_VcSIA/s320/02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;También puedes&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/SharkAnalyzer3.0.rar?attredirects=0&amp;amp;d=1"&gt; descargar&lt;/a&gt; el jar de Shark Analyzer y probar tus propios códigos (claro, en función de la gramática mostrarda en el script de bison).&lt;br /&gt;&lt;br /&gt;También puedes cambiar la gramática y de esta manera el archivo ejecutable que te genera tu compilador de C lo puedes usar en lugar de kernel.exe, de este modo Shark Analyzer usará tus gramáticas y no las que trae por defecto en su kernel. exe. Eso si, recuerda que para que la consola de salida de Shark Analyzer marque de rojo las salidas donde se ha encontrado un error léxico o si ha ocurrido un error sintáctico, en el archivo de flex esta línea:&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;.                            {printf("ERROR LEXICO EN LINEA %d \n",yylineno);}&lt;/pre&gt;Siempre debe empezar con "ERROR", en otras palabras esa línea no debería ser modificada del archivo de Flex.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cualquier duda o sugerencia no dudes en escribirla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-2049867318126314202?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/2049867318126314202/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/lex-y-bison-en-un-solo-analizador.html#comment-form' title='14 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2049867318126314202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2049867318126314202'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/10/lex-y-bison-en-un-solo-analizador.html' title='Flex y Bison en un solo Analizador'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/TMPTgcTyFOI/AAAAAAAAAW0/rmRS8ZrwMuQ/s72-c/splash.jpg' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-8690714246644345295</id><published>2010-09-30T18:02:00.017-05:00</published><updated>2010-11-03T13:36:26.165-05:00</updated><title type='text'>Caso de estudio 2: Configuraciones Básicas y Enrutamiento Estático</title><content type='html'>&lt;div style="text-align: justify;"&gt;Estaba en el internet viendo algunas cosas y unos compañeros de la Universidad me consultaron sobre un caso de estudios que les habían dejado en el curso de Redes de computadoras sobre la configuración de routers CISCO y bueno, me propuse darles una mano con la finalidad de que les sea de utilidad no solo a ellos sino a mucha gente a la que le interesa esta área tan fascinante, las redes de computadoras.&lt;/div&gt;&lt;br /&gt;El problema propuesto es el caso de estudio 2, que se muestra a continuación.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TKlAtOdiB1I/AAAAAAAAAWY/T2t2ZgcT3Wc/s1600/Sin+t%C3%ADtulo-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="181" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TKlAtOdiB1I/AAAAAAAAAWY/T2t2ZgcT3Wc/s400/Sin+t%C3%ADtulo-1.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bueno, vayamos por partes. Lo que se nos pide es lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Calcule el direccionamiento según corresponda utilizando VLSM.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Considere el uso de sumarizacion y enrutamiento por defecto en las rutas estáticas que utilice y redistribuya estas.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Habilite la administración remota con telnet en todos los routers (usuario:ASDADMpassword:ASDPASS).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;Habilite enrutamiento dinámico RIP vl y v2. Considere las actualizaciones de enrutamiento solo donde corresponda.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Configuraciones basicas&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Habilite contraseña para el acceso al modo privilegiado (contrasefia: ASDCISCO)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Habilite el mensaje de bienvenida, indicando lo siguiente: "Solo se permite el acceso a personal autorizado".&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Indique en la descripción de las interfaces la cantidad de host asociados a esa red.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Deshabilite el protocolo CDP en las interfaces fastethernet.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Configure los nombres de host para cada router.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Habilite la resolución de nombre los PCs.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Bueno, primero hagamos el diseño IP. Esta parte es la más importante y es donde mayor énfasis deberíamos poner puesto que los comandos dependen de la marca de los equipos, pero el diseño IP es inherente a eso.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: white; color: blue; text-align: center;"&gt;&lt;b&gt;Un buen diseño IP es fundamental para todo Ingeniero de Redes.&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bueno, primero debemos asiganar bloques de direcciones a cada región, tanto para el lado derecho, como para el izquierdo y el central. Yo recomiendo lo siguiente:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para el lado izquierdo usar:192.168.1.0/24&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para el lado derecho usar:10.1.0.0/16&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para el lado central usar:172.30.1.0/24&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Listo, ya tenemos los bloques de direcciones a usar. Ahora veamos algunos requerimientos: "Habilite enrutamiento dinámico RIP vl y v2". Esto significa que en un lado debemos usar subneteo con una sola máscara y en el otro lado si podemos usar VLSM.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En el lado izquierdo, que es donde usaremos RIP V1, vamos a hacer un subneteo normal con la misma máscara para todas las subredes puesto que RIP V1 no propaga máscaras de subred. El diseño ip para esa área quedaría más o menos así:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKUVJFTjbdI/AAAAAAAAAWM/M8L1tl8ef_U/s1600/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;Es evidente el desperdicio de direcciones IP que se hace puesto que los enlaces seriales entre routers solo necesitan de 2 direcciones IP por lo que 251 direcciones están siendo desperdiciadas.&lt;br /&gt;&lt;br /&gt;En fin, ahora hagamos el subneteo utilizando VLSM para la siguiente región donde emplearemos RIP V2. Es recomendable empezar subneteando por las subredes que mayor cantidad de hosts poseen. En este caso el diseño IP para esa región quedaría así:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Bien, ahora que está hecho eso vayamos a la siguiente parte:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: small;"&gt;Habilite contraseña para el acceso al modo privilegiado (contrasefia: ASDCISCO)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Esto se consigue de la siguiente forma:&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#enable secret ASDCISCO&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Esta serie de comandos deberán ser ingresados para todos y cada uno de los routers. Lo siguiente que se nos pide es:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Habilite el mensaje de bienvenida, indicando lo siguiente: "Solo se permite el acceso a personal autorizado".&lt;/div&gt;&lt;br /&gt;Lo mismo que en el caso anterior este comando deberá ser ingresado en todos los routers.&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#banner motd #Solo se permite el acceso a personal autorizado#&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Siguiente paso:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Deshabilite el protocolo CDP en las interfaces fastethernet.&lt;/div&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#interface fastEthernet 0/0&lt;br /&gt;router(config-if)#no cdp enable&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Lo mismo que el anterior, se deberá realizar en todos los routers. CDP es un protocolo propietario de CISCO que no tiene soporte en otros equipos, en algunos casos es muy útil pero eso será explicado en otro post.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Configure los nombres de host para cada router.&lt;/div&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#hostname [Nombre]&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Habilitar RIP v1 y v2 es similar pero previamente hemos debido haber configurado cada una de las interfaces del router que supongo ya ha sido realizado. Aca dejo la secuencia de comandos para activar una interfaz de un router.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#interface serial 0/3/0&lt;br /&gt;router(config-if)#ip address [direccion ip] [mascara de subred]&lt;br /&gt;router(config-if)#no shutdown&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;En el caso de que se trate de interfaces seriales DCE los pasos son los siguientes:&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#interface serial 0/3/0&lt;br /&gt;router(config-if)#ip address [direccion ip] [mascara de subred]&lt;br /&gt;router(config-if)#clock rate 64000&lt;br /&gt;router(config-if)#no shutdown&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;Para configurar RIP en el caso de los routers de la región que usar RIP V1 usamos los siguientes pasos:&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#router rip&lt;br /&gt;router(config-router)#network [direccion ip de subred]&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;Para el sector que usa RIP V2 usamos la siguiente secuencia de comandos:&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#router rip&lt;br /&gt;router(config-router)#version 2&lt;br /&gt;router(config-router)#network [direccion ip de subred]&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;/pre&gt;Una ruta estática mediante dirección del siguiente salto se configura asi:&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#ip route [addres] [subnet mask] [ip-address]&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;br /&gt;addres: Dirección de destino de la red remota.&lt;br /&gt;subnet mask: Máscara de subred de la red remota.&lt;br /&gt;ip-address: Dirección IP del router del siguiente salto.&lt;br /&gt;&lt;/pre&gt;Configuar una ruta estática por defecto:&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#ip route 0.0.0.0 0.0.0.0 [interfaz]&lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&lt;br /&gt;&lt;br /&gt;interfaz: Interfaz de salida del router  por donde serán enviados paquetes con direcciones IP desconocidas&lt;br /&gt;&lt;/pre&gt;Este paso es necesario generalmente en los routers de borde o los que se conectan al ISP puesto que tener una tabla de enrutamiento con todas las direcciones de red del mundo es casi imposible de almacenar y además tardaría demasiado en determinar por donde sería enviada.&lt;br /&gt;&lt;br /&gt;Incluir la ruta estática en las actualizaciones RIP se hace del siguiente modo:&lt;br /&gt;&lt;pre class="java" name="code"&gt;router&amp;gt;enable&lt;br /&gt;router#conf term&lt;br /&gt;router(config)#router rip&lt;br /&gt;router(config-router)#default-information originate &lt;br /&gt;router(config)#end&lt;br /&gt;router#wr&amp;nbsp;&lt;/pre&gt;Al finalizar debería quedarles algo así:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TKlCpZ1vSNI/AAAAAAAAAWc/UCdxZLN6OAs/s1600/caso.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="146" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TKlCpZ1vSNI/AAAAAAAAAWc/UCdxZLN6OAs/s320/caso.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Faltan algunas configuraciones como las contraseñas y mensajes de bienvenida, pero ya dejo explicada la forma de como se usan estos comandos y, bueno, no podía cerrar este post sin dejarles el archivo de Cisco Packet Tracer además de recordárles también que yo uso la version 5.3.1.0044. Deberan tener la misma version o una superior.&lt;br /&gt;&lt;br /&gt;&lt;center&gt; &lt;a href="https://sites.google.com/site/tecnologiaenperu/home/pkt.pkt"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;Espero les sea de utilidad y cualquier consulta o sugerencia no duden en hacerla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-8690714246644345295?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/8690714246644345295/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/09/caso-de-estudio-2-configuraciones.html#comment-form' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/8690714246644345295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/8690714246644345295'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/09/caso-de-estudio-2-configuraciones.html' title='Caso de estudio 2: Configuraciones Básicas y Enrutamiento Estático'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XsiwsHwYXAo/TKlAtOdiB1I/AAAAAAAAAWY/T2t2ZgcT3Wc/s72-c/Sin+t%C3%ADtulo-1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-5822152584727272091</id><published>2010-09-28T23:54:00.010-05:00</published><updated>2010-11-21T13:56:24.376-05:00</updated><title type='text'>Algoritmo de Graham para la Cerradura Convexa con Simulación en Java</title><content type='html'>Bueno, al llegar a este post asumo que ustedes ya han leído acerca de lo que trata este problema de la geometría computacional. Esto es muy importante puesto que algunos detalles expuestos aquí no serán tratados muy profundamente. Pues bueno, vayamos al grano.&lt;br /&gt;&lt;br /&gt;El algoritmo de graham fué uno de los primero algoritmos utilizados para resolver este problema. El concepto fundamental de este algoritmo es tener en cuenta el sentido de giro que toma un vector respecto a otro de forma iterativa. Para esto Graham nos dice lo siguiente:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKK-AzEZPUI/AAAAAAAAAVI/cxMJEo_bh-A/s1600/graham.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKK-AzEZPUI/AAAAAAAAAVI/cxMJEo_bh-A/s320/graham.jpg" width="294" /&gt;&lt;/a&gt;&lt;/div&gt;Evidentemente es seudocódigo pero no hay mejor forma de entender esto que mediante una prueba. A ver, empezemos.&amp;nbsp; &lt;br /&gt;Supongamos que se nos da un conjunto de puntos como los que se muestra en la figura siguiente:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKK9zjK1qZI/AAAAAAAAAVE/-tqsiEhvHRQ/s1600/Sin+t%C3%ADtulo-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKK9zjK1qZI/AAAAAAAAAVE/-tqsiEhvHRQ/s1600/Sin+t%C3%ADtulo-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;Y necesitamos hallar la cerradura convexa. Lo primero que nos dice Graham es que escojamos el punto de menor ordenada y luego ordenemos el resto de puntos en función a su ángulo que forman con la horizontal.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKK_Kl9W3II/AAAAAAAAAVM/YR8XLpKmDkY/s1600/Sin+t%C3%ADtulo-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKK_Kl9W3II/AAAAAAAAAVM/YR8XLpKmDkY/s1600/Sin+t%C3%ADtulo-3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ahora insertamos en una pila los tres primeros puntos de la nube de puntos(evidentemente ya deben estar ordenados y el punto de menor ordenada es el que ocupa la menor posición). Hecho esto inicializamos un contador en 3 y empezamos las iteraciones.&lt;br /&gt;&lt;br /&gt;Para i=3&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKK_-ChKUsI/AAAAAAAAAVQ/Bw8iErbGXCw/s1600/Sin+t%C3%ADtulo-4+%283%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKK_-ChKUsI/AAAAAAAAAVQ/Bw8iErbGXCw/s1600/Sin+t%C3%ADtulo-4+%283%29.png" /&gt;&lt;/a&gt;&lt;/div&gt;Los tres puntos generan una vuelta&amp;nbsp; la izquierda por lo que incrementamos el contador. Entonces nuestro contador quedaría así:&lt;br /&gt;&lt;br /&gt;Para i=4&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLARx3NgeI/AAAAAAAAAVU/PnpqWlx5A9o/s1600/4%281%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLARx3NgeI/AAAAAAAAAVU/PnpqWlx5A9o/s1600/4%281%29.png" /&gt;&lt;/a&gt;&lt;/div&gt;Vemos que forma una vuelta a la derecha por lo que el contador no se incrementará.&lt;br /&gt;&lt;br /&gt;Para i=4&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLAbC7-lLI/AAAAAAAAAVY/RjrUbOmTppI/s1600/4%282%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLAbC7-lLI/AAAAAAAAAVY/RjrUbOmTppI/s320/4%282%29.png" width="165" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Ahora si se generó una vuelta la izquierda entonces nuestro contador se incrementa.&lt;br /&gt;&lt;br /&gt;Para i=5&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLArMuqBsI/AAAAAAAAAVc/jKYT9yGv118/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLArMuqBsI/AAAAAAAAAVc/jKYT9yGv118/s320/5.png" width="157" /&gt;&lt;/a&gt;&lt;/div&gt;Tenemos otra vuelta a la izquierda y nuestro contador vuelve a incrementarse.&lt;br /&gt;&lt;br /&gt;Para i=6&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TKLAzp2RyUI/AAAAAAAAAVg/nZPWFH9Izl0/s1600/6%281%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TKLAzp2RyUI/AAAAAAAAAVg/nZPWFH9Izl0/s320/6%281%29.png" width="150" /&gt;&lt;/a&gt;&lt;/div&gt;Una vuelta a la derecha. El contador no se incrementará.&lt;br /&gt;&lt;br /&gt;Para i=6&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TKLA8b3PlII/AAAAAAAAAVk/1gWaVJQSXwM/s1600/6%282%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TKLA8b3PlII/AAAAAAAAAVk/1gWaVJQSXwM/s320/6%282%29.png" width="156" /&gt;&lt;/a&gt;&lt;/div&gt;Una vuelta a la izquierda, el contador se incrementará. Además estamos viendo como varia el contenido de la pila (la cual almacena los puntos que forman la cerradura convexa).&lt;br /&gt;&lt;br /&gt;Para i =7&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLBPFr1vAI/AAAAAAAAAVo/AZtVdlRD7hI/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLBPFr1vAI/AAAAAAAAAVo/AZtVdlRD7hI/s320/7.png" width="143" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Una vuelta a la izquierda.&lt;br /&gt;&lt;br /&gt;Para i=8&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TKLBZR6GqNI/AAAAAAAAAVs/aem9SeI7Imw/s1600/8+%281%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TKLBZR6GqNI/AAAAAAAAAVs/aem9SeI7Imw/s320/8+%281%29.png" width="139" /&gt;&lt;/a&gt;&lt;/div&gt;Vuleta a la derecha, contador sin variaciones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para i=8&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLBh61foMI/AAAAAAAAAVw/FEUMqR2cspE/s1600/8+%282%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLBh61foMI/AAAAAAAAAVw/FEUMqR2cspE/s320/8+%282%29.png" width="150" /&gt;&lt;/a&gt;&lt;/div&gt;Incrementamos el contador puesto que se generó una vuelta a la izquierda.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para i=9&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLBssP3yoI/AAAAAAAAAV0/pH1_qTtxDEg/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TKLBssP3yoI/AAAAAAAAAV0/pH1_qTtxDEg/s320/9.png" width="139" /&gt;&lt;/a&gt;&lt;/div&gt;Incrementamos el contador.&lt;br /&gt;&lt;br /&gt;Para i=10&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLCF8jpjuI/AAAAAAAAAV8/4llVgB18H1o/s1600/10%281%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLCF8jpjuI/AAAAAAAAAV8/4llVgB18H1o/s320/10%281%29.png" width="135" /&gt;&lt;/a&gt;&lt;/div&gt;Una vuelta a la derecha indica que el contador no se incrementará.&lt;br /&gt;&lt;br /&gt;Para i=10&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLCOE_DdPI/AAAAAAAAAWA/IDJgL-Of5Zg/s1600/10%282%29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLCOE_DdPI/AAAAAAAAAWA/IDJgL-Of5Zg/s320/10%282%29.png" width="138" /&gt;&lt;/a&gt;&lt;/div&gt;Incrementamos el contador.&lt;br /&gt;&lt;br /&gt;Para i=11&lt;br /&gt;Esta es la condición de parada por lo que los datos en la pila quedan así:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLCxKlI3kI/AAAAAAAAAWE/gsvvsx66ZUY/s1600/fin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLCxKlI3kI/AAAAAAAAAWE/gsvvsx66ZUY/s320/fin.png" width="134" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Entonces con esos puntos construimos la cerradura convexa y nos quedaría algo así:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLC8e8ia6I/AAAAAAAAAWI/s0iK4lRk0ac/s1600/Sin+t%C3%ADtulo-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TKLC8e8ia6I/AAAAAAAAAWI/s0iK4lRk0ac/s1600/Sin+t%C3%ADtulo-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;Bueno, pero esto no estaría completo sin una simulación. El siguiente applet les mostrará como trabaja esto:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;applet archive="https://sites.google.com/site/tecnologiaenperu/home/Graham.jar" code="com.blogspot.rolandopalermo.Graham.class" height="300" width="400"&gt;&lt;br /&gt;&lt;/applet&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;La implementación del Algoritmo de Graham es la siguiente:&lt;br /&gt;&lt;pre class="java" name="code"&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author Rolando&lt;br /&gt; */&lt;br /&gt;public static List&amp;lt;Point2D&amp;gt; graham(List&amp;lt;Point2D&amp;gt; nube) {&lt;br /&gt;    Stack pila = new Stack();&lt;br /&gt;    List&amp;lt;Point2D&amp;gt; cerradura = new ArrayList&amp;lt;Point2D&amp;gt;();&lt;br /&gt;    List&amp;lt;Point2D&amp;gt; temp = new ArrayList&amp;lt;Point2D&amp;gt;();&lt;br /&gt;    //O(n)&lt;br /&gt;    pivote = nube.get(0);&lt;br /&gt;    for(Point2D p:nube) {&lt;br /&gt;        if(p.getY()&amp;lt;pivote.getY()&lt;br /&gt;                || (p.getY()==pivote.getY() &amp;amp;&amp;amp;&lt;br /&gt;                p.getX()&amp;gt;pivote.getX())) {&lt;br /&gt;            pivote = p;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    //O(nlog n)&lt;br /&gt;    temp = mergerSort(nube);&lt;br /&gt;    pila.push(temp.get(0));&lt;br /&gt;    pila.push(temp.get(1));&lt;br /&gt;    pila.push(temp.get(2));&lt;br /&gt;    int i = 3;&lt;br /&gt;    while(i&amp;lt;(temp.size())) {&lt;br /&gt;        Point2D t = (Point2D) pila.pop();&lt;br /&gt;        if(isLeft((Point2D) pila.peek(), t, temp.get(i))&amp;gt;0) {&lt;br /&gt;            pila.push(t);&lt;br /&gt;            pila.push(temp.get(i));&lt;br /&gt;            i++;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    cerradura = pila.subList(0, pila.size());&lt;br /&gt;    return cerradura;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;El código fuente completo lo pueden descargar aquí:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/Graham.java"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Bueno, espero que les sea de utilidad. Muy pronto postearé los otros algoritmos de cerradura convexa. No se olviden de dejar sus comentarios y críticas.&lt;br /&gt;&lt;br /&gt;También podría interesarte estos post:&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/11/java-convex-hull-jarvis.html"&gt;http://rolandopalermo.blogspot.com/2010/11/java-convex-hull-jarvis.html&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/11/quickhull-java-convex-hull.html"&gt;http://rolandopalermo.blogspot.com/2010/11/quickhull-java-convex-hull.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-5822152584727272091?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/5822152584727272091/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/09/algoritmo-de-graham-para-la-cerradura.html#comment-form' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5822152584727272091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5822152584727272091'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/09/algoritmo-de-graham-para-la-cerradura.html' title='Algoritmo de Graham para la Cerradura Convexa con Simulación en Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XsiwsHwYXAo/TKK-AzEZPUI/AAAAAAAAAVI/cxMJEo_bh-A/s72-c/graham.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-3024608768672392843</id><published>2010-09-02T13:51:00.010-05:00</published><updated>2010-09-02T15:17:31.742-05:00</updated><title type='text'>Videos en HD con Movie Maker y Windows XP</title><content type='html'>Hacer videos usando Movie Maker puede ser considerado por muchos como una tarea sencilla pero con este vertiginoso avance de la computación la tecnología HD se ha hecho muy común entre los aficionados a la edición de video y el Movie Maker (Al menos en XP) ya no nos brinda la posibilidad de realizar estos trabajos :s ... Al menos no sin una configuración extra.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TH_vL6vQHcI/AAAAAAAAAT8/3mdovGHU21A/s1600/mmmenu.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TH_vL6vQHcI/AAAAAAAAAT8/3mdovGHU21A/s320/mmmenu.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Actualmente nos encontramos, también con nuevos sistemas operativos que ya traen integrada consigo esta tecnología. Estamos hablando de Windows Vista y Windows 7. &lt;br /&gt;&lt;br /&gt;Pero cierto es que el Windows XP no quiere desaparecer ^^ y esto debido a su robustez y sobre todo a su madurez. XP es un sistema operativo que tiene tiempo y que se resiste a desaparecer pero los usuarios de este (entre ellos me incluyo) tenemos muchos problemas con esta tecnología tan cambiante y que avanza tan rápido. Esto me hace recordar a la tecnología USB y windows 98 ^^... que tiempos!!!.&lt;br /&gt;&lt;br /&gt;Bueno, este post es un aporte más a la lucha para que el Windows XP no desaparezca. Hoy vamos a aprender a configurar el movie maker para poder crear videos en formato HD. Lo primero que tenemos que hacer es descargar los archivos que están en esta dirección &lt;a href="https://sites.google.com/site/tecnologiaenperu/home/Profiles.rar?attredirects=0&amp;amp;d=1"&gt;https://sites.google.com/site/tecnologiaenperu/home/Profiles.rar&lt;/a&gt; y descomprimirlos en la siguiente carpeta:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;C:\Archivos de programa\Movie Maker\Shared\Profiles&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;De tal modo que nos debe quedar así:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TH_vzLhRRBI/AAAAAAAAAUE/gGILpAyjQX0/s1600/profile.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TH_vzLhRRBI/AAAAAAAAAUE/gGILpAyjQX0/s320/profile.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Luego de esto nuestro MovieMaker quedará listo para poder editar videos con calidad HD. Para esto al momento de guardar nuestro video debemos tener las opciones como se muestra en la siguiente imágen:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TH_xFFJqfnI/AAAAAAAAAUM/UuM2EywzgjI/s1600/g.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TH_xFFJqfnI/AAAAAAAAAUM/UuM2EywzgjI/s320/g.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A partir de 77 se puede considerar HD por el tamaño de video y la velocidad de bits, que en la imágen están encerrados en rectángulos rojos. Yo recomiendo establecer el tamaño en 85 MB pues se obtiene una buena resolución y al subirlos a nuestro canal de youtube se verán perfectamente xD sino miren este video que hice en movie maker.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="460" height="283"&gt;&lt;param name="movie" value="http://www.youtube.com/v/71KFn09piJE?fs=1&amp;amp;hl=es_ES&amp;amp;rel=0&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/71KFn09piJE?fs=1&amp;amp;hl=es_ES&amp;amp;rel=0&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="460" height="283"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;También vale aclarar que tengo el Movie Maker en su versión 5.1, aunque supongo que todos deben tener al menos esa versión.&lt;br /&gt;&lt;br /&gt;Para usuarios de Vista y Seven esto no es necesario.&lt;br /&gt;&lt;br /&gt;Saludos y hasta la próxima!!!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-3024608768672392843?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/3024608768672392843/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/09/videos-en-hd-con-movie-maker-y-windows.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3024608768672392843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3024608768672392843'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/09/videos-en-hd-con-movie-maker-y-windows.html' title='Videos en HD con Movie Maker y Windows XP'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/TH_vL6vQHcI/AAAAAAAAAT8/3mdovGHU21A/s72-c/mmmenu.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-5965425843790963409</id><published>2010-08-24T01:18:00.005-05:00</published><updated>2011-03-27T19:43:16.191-05:00</updated><title type='text'>Transmision de video usando sockets en Java</title><content type='html'>Este post será corto de palabras pero como siempre con mucho código fuente para descargar, analizar y reutilizar xD!!&lt;br /&gt;&lt;br /&gt;Un amigo de guatemala me hizo una consulta acerca de la transmisión de video y bueno, Dos horas antes de escribir este post me propuse darle una mano. La idea era transmitir video pero sin usar R.T.P. sino transmitiendo uno a uno los frames provenientes de una fuente de video, que en este caso es una cámara web. &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Servidor&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/THNn8w8bvMI/AAAAAAAAATk/tZq2G69e2sE/s1600/server.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5508861062832438466" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/THNn8w8bvMI/AAAAAAAAATk/tZq2G69e2sE/s320/server.jpg" style="cursor: pointer; display: block; height: 296px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cliente&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/THNoEsC7JfI/AAAAAAAAATs/HNJRz3K4n9w/s1600/client.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5508861198956439026" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/THNoEsC7JfI/AAAAAAAAATs/HNJRz3K4n9w/s320/client.jpg" style="cursor: pointer; display: block; height: 312px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anteriormente posteé la forma de cómo acceder a los frames de video usando el Java Media Framework, si no lo has leído aún te recomiendo lo hagas &lt;a href="http://rolandopalermo.blogspot.com/2010/06/procesamiento-de-video-en-tiempo-real.html"&gt;http://rolandopalermo.blogspot.com/2010/06/procesamiento-de-video-en-tiempo-real.html&lt;/a&gt; y en este post vamos a transmitir esos frames capturados. No explicaré el código porque en internet hay bastante información así como ejemplos de cómo usar sockets en java.&lt;br /&gt;&lt;br /&gt;Aquí les dejo el proyecto desarrollado usando Netbeans.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/TransmisionVideo.rar?attredirects=0&amp;amp;d=1"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos y espero te sea de utilidad!... No olvides dejar tu comentario que motiva el seguir compartiendo el conocimiento y las experiencias.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-5965425843790963409?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/5965425843790963409/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/08/transmision-de-video-usando-sockets-en.html#comment-form' title='23 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5965425843790963409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5965425843790963409'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/08/transmision-de-video-usando-sockets-en.html' title='Transmision de video usando sockets en Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/THNn8w8bvMI/AAAAAAAAATk/tZq2G69e2sE/s72-c/server.jpg' height='72' width='72'/><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-6870185517592791479</id><published>2010-08-13T16:55:00.012-05:00</published><updated>2010-08-13T18:19:04.004-05:00</updated><title type='text'>Cap. 10: Reto de integración de habilidades de Packet Tracer - CCNA 2 version 4.0</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Introducción:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta actividad se centra en las capacidades de división en subredes con VLSM, la configuración básica del dispositivo, el enrutamiento EIGRP y el enrutamiento RIPv2. Una vez que haya configurado todos los dispositivos, probará la conectividad de extremo a extremo y examinará su configuración.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Objetivos&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Diseñar y documentar un esquema de direccionamiento en base a los requerimientos.&lt;br /&gt;Aplicar una configuración básica a los dispositivos.&lt;br /&gt;Configurar un enrutamiento estático entre routers ISP.&lt;br /&gt;Configurar el enrutamiento EIGRP en Región 1 y el enrutamiento RIPv2 en Región 2.&lt;br /&gt;Deshabilitar las actualizaciones de enrutamiento en las interfaces adecuadas.&lt;br /&gt;Configurar y redistribuir las rutas predeterminadas.&lt;br /&gt;Verificar la completa conectividad entre todos los dispositivos de la topología.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGXArHxVKLI/AAAAAAAAASU/d2sw6tEg3iE/s1600/esquema.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 148px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGXArHxVKLI/AAAAAAAAASU/d2sw6tEg3iE/s320/esquema.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505017966583163058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tarea 1: Diseñar y documentar un esquema de direccionamiento&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 1: Diseñe un esquema de direccionamiento.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Utilice la topología y los siguientes requisitos para diseñar un esquema de direccionamiento:&lt;br /&gt;&lt;br /&gt;Los enlaces WAN entre R1 y R2, junto con sus respectivos routers ISP, ya están configurados. También los enlaces entre el servidor ISP y el servidor Web ya están configurados.&lt;br /&gt;El espacio de dirección para la Región 1 es 10.1.0.0/16. Le deberá asignar a cada router de sucursal (B1-R1, B2-R1 y B3-R1) un espacio de dirección según estos requisitos. Comenzando por el requisito mayor, asigne un espacio de direccionamiento a cada router:&lt;br /&gt;B1-R1 necesita espacio para 8000 hosts&lt;br /&gt;B2-R1 necesita espacio para 4000 hosts&lt;br /&gt;B3-R1 necesita espacio para 2000 hosts&lt;br /&gt;Divida el espacio de dirección de cada router de sucursal en cuatro subredes iguales. Registre las subredes en la tabla provista en las instrucciones impresas.&lt;br /&gt;Para las WAN en la Región 1, divida en subredes el espacio de dirección 10.1.128.0/28. Registre las subredes en la tabla proporcionada en las instrucciones impresas.&lt;br /&gt;El espacio de dirección para la Región 2 es 172.2.0.0/16. Se le deberá asignar a cada router de sucursal (B1-R2, B2-R2 y B3-R2) un espacio de dirección según estos requisitos. Comenzando por el requisito mayor, asigne un espacio de direccionamiento a cada router:&lt;br /&gt;B1-R2 necesita espacio para 500 hosts&lt;br /&gt;B2-R2 necesita espacio para 200 hosts&lt;br /&gt;B3-R2 necesita espacio para 100 hosts&lt;br /&gt;Divida el espacio de dirección de cada router de sucursal en cuatro subredes iguales. Registre las subredes en la tabla provista en las instrucciones impresas.&lt;br /&gt;Para las WAN en la Región 2, divida en subredes el espacio de dirección 172.20.4.0/28. Registre las subredes en la tabla proporcionada en las instrucciones impresas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 2: Documente el esquema de direccionamiento.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Opcional: En la topología, rotule cada subred. Para ahorrar espacio, use sólo los últimos dos octetos, dado que sólo estos octetos cambian.&lt;br /&gt;Utilice la tabla provista con las instrucciones impresas para documentar las direcciones IP y las máscaras de subred. Asigne la primera dirección IP a la interfaz del router.&lt;br /&gt;En los enlaces WAN, asigne la primera dirección IP a R1 y R2 para los enlaces con la perspectiva de cada router B1, B2 y B3 de cada router.&lt;br /&gt;&lt;br /&gt;El direccionamiento es algo que en este post no voy a explicar puesto que es algo sobre lo que ya se debe tener amplio conocimiento asumiendo el hecho que estamos en el CCNA2 y direccionamiento IP es un tema del CCNA1.&lt;br /&gt;&lt;br /&gt;Bueno, luego de desarrollar todo el direccionamiento ip debemos tener algo como lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXBwMxHwwI/AAAAAAAAASc/LQty8xs8qds/s1600/r1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 287px; height: 320px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXBwMxHwwI/AAAAAAAAASc/LQty8xs8qds/s320/r1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505019153335436034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXCXbbaavI/AAAAAAAAASk/TWVdp7YkHzA/s1600/r2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 289px; height: 320px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXCXbbaavI/AAAAAAAAASk/TWVdp7YkHzA/s320/r2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505019827285814002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bueno, ahora acá les dejo el running-config, que a estas alturas ya debemos saber interpretarlo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router B1-R1&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1047 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname B1-R1&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 10.1.0.1 255.255.248.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; ip address 10.1.8.1 255.255.248.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 10.1.64.2 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/0&lt;br /&gt; ip address 10.1.16.1 255.255.248.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/1&lt;br /&gt; ip address 10.1.24.1 255.255.248.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router eigrp 1&lt;br /&gt; passive-interface FastEthernet0/0&lt;br /&gt; passive-interface FastEthernet0/1&lt;br /&gt; passive-interface FastEthernet1/0&lt;br /&gt; passive-interface FastEthernet1/1&lt;br /&gt; network 10.0.0.0&lt;br /&gt; no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;ip route 0.0.0.0 0.0.0.0 Serial0/0/0 &lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router B2-R1&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1049 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname B2-R1&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 10.1.32.1 255.255.252.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; ip address 10.1.36.1 255.255.252.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 10.1.64.6 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; no ip address&lt;br /&gt;shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/0&lt;br /&gt; ip address 10.1.40.1 255.255.252.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/1&lt;br /&gt; ip address 10.1.44.1 255.255.252.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router eigrp 1&lt;br /&gt; passive-interface FastEthernet0/0&lt;br /&gt; passive-interface FastEthernet0/1&lt;br /&gt; passive-interface FastEthernet1/0&lt;br /&gt; passive-interface FastEthernet1/1&lt;br /&gt; network 10.0.0.0&lt;br /&gt; no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;ip route 0.0.0.0 0.0.0.0 Serial0/0/0 &lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router B3-R1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1050 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname B3-R1&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 10.1.48.1 255.255.254.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; ip address 10.1.50.1 255.255.254.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 10.1.64.10 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; no ip address&lt;br /&gt;shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/0&lt;br /&gt; ip address 10.1.52.1 255.255.254.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/1&lt;br /&gt; ip address 10.1.54.1 255.255.254.0&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router eigrp 1&lt;br /&gt; passive-interface FastEthernet0/0&lt;br /&gt; passive-interface FastEthernet0/1&lt;br /&gt; passive-interface FastEthernet1/0&lt;br /&gt; passive-interface FastEthernet1/1&lt;br /&gt; network 10.0.0.0&lt;br /&gt;no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;ip route 0.0.0.0 0.0.0.0 Serial0/0/0 &lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router R1&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1003 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname R1&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;enable secret 5 $1$mERr$9cTjUIEqNGurQiFU.ZeCi1&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; no ip address&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; no ip address&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 10.1.64.1 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; ip address 10.1.64.5 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/1/0&lt;br /&gt; ip address 10.1.64.9 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/1/1&lt;br /&gt; ip address 209.165.201.2 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router eigrp 1&lt;br /&gt; redistribute static &lt;br /&gt; passive-interface Serial0/1/1&lt;br /&gt; network 10.0.0.0&lt;br /&gt; no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;ip route 0.0.0.0 0.0.0.0 Serial0/1/1 &lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router ISP-R1&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1052 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname ISP-R1&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;enable secret 5 $1$843i$2WtI74NAnrsI2xYF0OPmr.&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 209.165.200.225 255.255.255.252&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; no ip address&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 209.165.201.1 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; ip address 209.165.201.5 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;ip route 209.165.201.8 255.255.255.252 Serial0/0/1 &lt;br /&gt;ip route 209.165.200.228 255.255.255.252 Serial0/0/1 &lt;br /&gt;ip route 10.1.0.0 255.255.0.0 Serial0/0/0 &lt;br /&gt;ip route 172.20.0.0 255.255.0.0 Serial0/0/1 &lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;banner motd ^C&lt;br /&gt;********************************&lt;br /&gt;  !!!AUTHORIZED ACCESS ONLY!!!&lt;br /&gt;********************************&lt;br /&gt;^C&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router B1-R2&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1037 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname B1-R2&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 172.20.0.1 255.255.255.128&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; ip address 172.20.0.129 255.255.255.128&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 172.20.4.2 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/0&lt;br /&gt; ip address 172.20.1.1 255.255.255.128&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/1&lt;br /&gt; ip address 172.20.1.129 255.255.255.128&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router rip&lt;br /&gt; version 2&lt;br /&gt; passive-interface FastEthernet0/0&lt;br /&gt; passive-interface FastEthernet0/1&lt;br /&gt; passive-interface FastEthernet1/0&lt;br /&gt; passive-interface FastEthernet1/1&lt;br /&gt; network 172.20.0.0&lt;br /&gt; no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router B2-R2&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1038 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname B2-R2&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 172.20.2.1 255.255.255.192&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; ip address 172.20.2.65 255.255.255.192&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 172.20.4.6 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/0&lt;br /&gt; ip address 172.20.2.129 255.255.255.192&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/1&lt;br /&gt; ip address 172.20.2.193 255.255.255.192&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router rip&lt;br /&gt; version 2&lt;br /&gt; passive-interface FastEthernet0/0&lt;br /&gt; passive-interface FastEthernet0/1&lt;br /&gt; passive-interface FastEthernet1/0&lt;br /&gt; passive-interface FastEthernet1/1&lt;br /&gt; network 172.20.0.0&lt;br /&gt; no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router B3-R2&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1037 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname B3-R2&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 172.20.3.1 255.255.255.224&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; ip address 172.20.3.33 255.255.255.224&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 172.20.4.10 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/0&lt;br /&gt; ip address 172.20.3.65 255.255.255.224&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet1/1&lt;br /&gt; ip address 172.20.3.97 255.255.255.224&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router rip&lt;br /&gt; version 2&lt;br /&gt; passive-interface FastEthernet0/0&lt;br /&gt; passive-interface FastEthernet0/1&lt;br /&gt; passive-interface FastEthernet1/0&lt;br /&gt; passive-interface FastEthernet1/1&lt;br /&gt; network 172.20.0.0&lt;br /&gt; no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router R2&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1028 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname R2&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;enable secret 5 $1$mERr$9cTjUIEqNGurQiFU.ZeCi1&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; no ip address&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; no ip address&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; ip address 172.20.4.1 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; ip address 172.20.4.5 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/1/0&lt;br /&gt; ip address 172.20.4.9 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/1/1&lt;br /&gt; ip address 209.165.201.10 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;router rip&lt;br /&gt; version 2&lt;br /&gt; passive-interface Serial0/1/1&lt;br /&gt; network 172.20.0.0&lt;br /&gt; network 209.165.201.0&lt;br /&gt; default-information originate&lt;br /&gt; no auto-summary&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;ip route 0.0.0.0 0.0.0.0 Serial0/1/1 &lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Para el router ISP-R2&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;Current configuration : 1086 bytes&lt;br /&gt;!&lt;br /&gt;version 12.3&lt;br /&gt;no service timestamps log datetime msec&lt;br /&gt;no service timestamps debug datetime msec&lt;br /&gt;no service password-encryption&lt;br /&gt;!&lt;br /&gt;hostname ISP-R2&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;enable secret 5 $1$GMyb$UNr8Qq.Ewy8h5Wtda8FTN/&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;no ip domain-lookup&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/0&lt;br /&gt; ip address 209.165.200.229 255.255.255.252&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt;!&lt;br /&gt;interface FastEthernet0/1&lt;br /&gt; no ip address&lt;br /&gt; duplex auto&lt;br /&gt; speed auto&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/0&lt;br /&gt; description Link to R2&lt;br /&gt; ip address 209.165.201.9 255.255.255.252&lt;br /&gt; clock rate 64000&lt;br /&gt;!&lt;br /&gt;interface Serial0/0/1&lt;br /&gt; description Link to ISP-R1&lt;br /&gt; ip address 209.165.201.6 255.255.255.252&lt;br /&gt;!&lt;br /&gt;interface Vlan1&lt;br /&gt; no ip address&lt;br /&gt; shutdown&lt;br /&gt;!&lt;br /&gt;ip classless&lt;br /&gt;ip route 209.165.201.0 255.255.255.252 Serial0/0/1 &lt;br /&gt;ip route 209.165.200.224 255.255.255.252 Serial0/0/1 &lt;br /&gt;ip route 172.20.0.0 255.255.0.0 Serial0/0/0 &lt;br /&gt;ip route 10.1.0.0 255.255.0.0 Serial0/0/1 &lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;banner motd ^C&lt;br /&gt;********************************&lt;br /&gt;  !!!AUTHORIZED ACCESS ONLY!!!&lt;br /&gt;********************************&lt;br /&gt;^C&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;line con 0&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;line vty 0 4&lt;br /&gt; password cisco&lt;br /&gt; login&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;!&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Con fines de pruebas de conectividad he agregado una pc a una de las 4 lan de cada sede. Aca en la imágen se puede apreciar mejor xD!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGXHUrAsWGI/AAAAAAAAASs/_Rs28YdHsKo/s1600/compus.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGXHUrAsWGI/AAAAAAAAASs/_Rs28YdHsKo/s320/compus.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505025277487241314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Evidentemente cada computadora debe tener su respectiva configuración. Aca se las dejo también xD!!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXIcC3z28I/AAAAAAAAATc/hiLjf-LF-qw/s1600/pc5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXIcC3z28I/AAAAAAAAATc/hiLjf-LF-qw/s320/pc5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505026503663147970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXIX4rYIxI/AAAAAAAAATU/fXcEM9LfD7c/s1600/pc4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXIX4rYIxI/AAAAAAAAATU/fXcEM9LfD7c/s320/pc4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505026432207168274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXIUGGjHBI/AAAAAAAAATM/KH978rJbVng/s1600/pc3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGXIUGGjHBI/AAAAAAAAATM/KH978rJbVng/s320/pc3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505026367091317778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGXIQFYueNI/AAAAAAAAATE/DzeFrxD6o3U/s1600/pc2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGXIQFYueNI/AAAAAAAAATE/DzeFrxD6o3U/s320/pc2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505026298179647698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGXIKKJKWwI/AAAAAAAAAS8/OpMaHz6ZVzE/s1600/pc1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGXIKKJKWwI/AAAAAAAAAS8/OpMaHz6ZVzE/s320/pc1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505026196377328386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGXIGNcNbHI/AAAAAAAAAS0/lkgNF4Sy6-0/s1600/pc0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGXIGNcNbHI/AAAAAAAAAS0/lkgNF4Sy6-0/s320/pc0.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5505026128543050866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Algunos tips muy útiles al momento de configurar un router Cisco. &lt;span style="font-weight:bold;"&gt;Evidentemente estos tips están de acuerdo a las necesidades de configuración para este laboratorio y a las prestaciones que se quieren alcanzar.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 1!!!!!&lt;/span&gt;&lt;br /&gt;Desactivar sumarización automática&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;R(config)#router rip&lt;br /&gt;R(config-router)#no auto-summary&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 2!!!!!&lt;/span&gt;&lt;br /&gt;Desactivar las actualizaciones de enrutamiento en las interfaces adecuadas&lt;br /&gt;&lt;br /&gt;&lt;a href="http://librosnetworking.blogspot.com/2006/11/controle-las-actualizaciones-de-los.html"&gt;Muchas veces carece de sentido el envío de actualizaciones de enrutamiento a través de interfaces a las que no hay conectados dispositivos que dialoguen utilizando ese mismo protocolo. En otras ocaciones, razones de seguridad hacen aconsejable no publicar el estado de nuestras redes a través de determinadas interfaces.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;R(config)#router rip&lt;br /&gt;R(config-router)#passive-interface &lt;interface&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;R(config)#router rip&lt;br /&gt;R(config-router)#passive-interface fastEthernet 0/0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 3!!!!!&lt;/span&gt;&lt;br /&gt;Configurar los intervalos de hello en los router de sucursal en 30 segundos.&lt;br /&gt;&lt;a href="http://zystrax.wordpress.com/2010/03/31/protocolo-de-enrutamiento-eigrp/"&gt;&lt;br /&gt;Si cambia el intervalo de Hello no olvide de cambiar también el tiempo de espera a un valor igual o superior al intervalo de saludo.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;R#conf terminal &lt;br /&gt;R(config)#interface serial 0/0/0&lt;br /&gt;R(config-if)#ip hello-interval eigrp &amp;lt;id&amp;gt; &amp;lt;tiempo en segundos&amp;gt;&lt;br /&gt;R(config-if)#ip hold-time eigrp &amp;lt;id&amp;gt; &amp;lt;tiempo en segundos&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;B3-R1#conf terminal &lt;br /&gt;B3-R1(config)#interface serial 0/0/0&lt;br /&gt;B3-R1(config-if)#ip hello-interval eigrp 1 30&lt;br /&gt;B3-R1(config-if)#ip hold-time eigrp 1 180&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 4!!!!!&lt;/span&gt;&lt;br /&gt;Configurar una ruta estática por defecto.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;R(config)#ip route 0.0.0.0 0.0.0.0 &amp;lt;interfaz de salida&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;R2(config)#ip route 0.0.0.0 0.0.0.0 serial 0/0/1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Tip 5!!!!!&lt;/span&gt;&lt;br /&gt;Configurar un router para enviar información de la ruta estática por defecto a otros routers de la red.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;R(config)#router rip&lt;br /&gt;R(config-router)#default-information originate&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y para finalizar aca les dejo el archivo pka si es que ya no tienen tiempo de leer todo lo anterior xD!!!!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/10.3.1.pka?attredirects=0&amp;d=1"&gt;&lt;img src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Y aca les dejo otro link hacia el laboratorio de integración del capítulo 6.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mr-xsena.blogspot.com/2010/08/capitulo-6-ccna-2_2146.html"&gt;Cap. 6: Reto de integración de habilidades de Packet Tracer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Eso es todo, espero les sea de utilidad y no olviden dejar sus comentarios que motiven el seguir compartiendo el conocimiento. Saludos desde Trujillo-Perú xD!!!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-6870185517592791479?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/6870185517592791479/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/08/cap-10-reto-de-integracion-de.html#comment-form' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6870185517592791479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6870185517592791479'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/08/cap-10-reto-de-integracion-de.html' title='Cap. 10: Reto de integración de habilidades de Packet Tracer - CCNA 2 version 4.0'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/TGXArHxVKLI/AAAAAAAAASU/d2sw6tEg3iE/s72-c/esquema.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-3837616770436243796</id><published>2010-08-12T00:21:00.017-05:00</published><updated>2010-08-12T11:09:09.471-05:00</updated><title type='text'>Splash Screen o Ventana Splash en java usando Netbeans</title><content type='html'>Una imágen vale más que mil palabras dicen muchos... cierto o no, he tomado al pie de la letra esa frase y aca les presento este post dedicado a las tan conocidas ventanas splash. Tutoriales en internet hay por montones, pero este post te guiará paso a paso usando imágenes que te mostrarán exactamente lo que tienes que hacer. &lt;br /&gt;Para este post no estoy creando la ventana splash desde cero usando un JWindow o un JDialog, sino que uso la última funcionalidad que el java brinda para este tipo de cosas, según lo describe Oracle en su artículo &lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/splashscreen/"&gt;http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/splashscreen/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero te sea de utilidad y agradezcas dejando un comentario que motive seguir compartiendo el conocimiento xD!!!!!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 1.&lt;/span&gt; Crear Proyecto&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TGOFg-bPF-I/AAAAAAAAAQk/3pnX8nkvbFA/s1600/01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 232px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TGOFg-bPF-I/AAAAAAAAAQk/3pnX8nkvbFA/s320/01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504389971136419810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 2.&lt;/span&gt; Seleccionar el nombre del proyecto&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOFqtqLy8I/AAAAAAAAAQs/HIIfCktPzH0/s1600/02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 220px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOFqtqLy8I/AAAAAAAAAQs/HIIfCktPzH0/s320/02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504390138434407362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 3.&lt;/span&gt; Opciones adicionales del proyecto&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGOGYAgY6HI/AAAAAAAAAQ0/Shftn5YTlJw/s1600/03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGOGYAgY6HI/AAAAAAAAAQ0/Shftn5YTlJw/s320/03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504390916587710578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 4.&lt;/span&gt; Creando un paquete ^^!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOGkJMb_JI/AAAAAAAAAQ8/eHp2fTrP94Q/s1600/04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 230px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOGkJMb_JI/AAAAAAAAAQ8/eHp2fTrP94Q/s320/04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504391125078375570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 5.&lt;/span&gt; Poniéndole nombre al paquete ¬¬&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOG0BOX_rI/AAAAAAAAARE/tVpVzQ1aQBI/s1600/05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 220px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOG0BOX_rI/AAAAAAAAARE/tVpVzQ1aQBI/s320/05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504391397816925874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 6.&lt;/span&gt; Creando un JFrame&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/TGOG84k_KyI/AAAAAAAAARM/HYNuqLCNNFc/s1600/06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 306px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/TGOG84k_KyI/AAAAAAAAARM/HYNuqLCNNFc/s320/06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504391550114671394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 7.&lt;/span&gt; Nombrando al JFrame creado&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOHIRHCUwI/AAAAAAAAARU/spKfcBSwqAw/s1600/07.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 220px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOHIRHCUwI/AAAAAAAAARU/spKfcBSwqAw/s320/07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504391745678496514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 8.&lt;/span&gt; Accediendo a la carpeta src. Esta carpeta está dentro de la carpeta del proyecto y aquí es donde debemos poner la imágen que se mostrará en la ventana splash.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOHbQb0hvI/AAAAAAAAARc/2PU7vJcUGZo/s1600/08.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 113px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOHbQb0hvI/AAAAAAAAARc/2PU7vJcUGZo/s320/08.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504392071914751730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 9.&lt;/span&gt; Pegamos nuestra imágen!!!.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGOHobbDyjI/AAAAAAAAARk/KwVswKQN4qM/s1600/09.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 268px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGOHobbDyjI/AAAAAAAAARk/KwVswKQN4qM/s320/09.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504392298202647090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 10.&lt;/span&gt; Accedemos a las propiedades del proyecto.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGOHyO_w8pI/AAAAAAAAARs/P2xxVGvgWPI/s1600/10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 183px; height: 320px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/TGOHyO_w8pI/AAAAAAAAARs/P2xxVGvgWPI/s320/10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504392466665632402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 11.&lt;/span&gt; Establecemos la clase principal.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOIAnkHsbI/AAAAAAAAAR0/7viFY9FQz4I/s1600/12.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOIAnkHsbI/AAAAAAAAAR0/7viFY9FQz4I/s320/12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504392713778737586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 12.&lt;/span&gt; Editamos el manifest.mf que se encuentra en la carpeta del proyecto y agregamos lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;SplashScreen-Image: splash.jpg&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOIT42KLgI/AAAAAAAAAR8/1X02Nzfyk4w/s1600/13.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 118px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/TGOIT42KLgI/AAAAAAAAAR8/1X02Nzfyk4w/s320/13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504393044835315202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Paso 13.&lt;/span&gt; Verificamos que el archivo manifest.mf quede algo así:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOIgPvvGwI/AAAAAAAAASE/X6JFfFV4zD4/s1600/14.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 223px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOIgPvvGwI/AAAAAAAAASE/X6JFfFV4zD4/s320/14.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504393257140820738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Limpiamos el proyecto y lo estructuramos, o sea &lt;span style="font-weight:bold;"&gt;Clean and Build&lt;/span&gt; y listo, eso es todoo!!!!!! En el proyecto que adjunto encontrarán algunos detalles que de seguro ahorita están por su mente xD!!!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="https://sites.google.com/site/tecnologiaenperu/home/SplashScreenDemo.rar?attredirects=0&amp;d=1"&gt;&lt;img src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Y así se debería ver:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOLaZDyO9I/AAAAAAAAASM/2v67sCMQQkQ/s1600/ss.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TGOLaZDyO9I/AAAAAAAAASM/2v67sCMQQkQ/s320/ss.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5504396455096499154" /&gt;&lt;/a&gt;&lt;br /&gt;Solo es cuestión de tener buenos gustos jeje ^^!&lt;br /&gt;&lt;br /&gt;Ahora, no solo pueden poner una imágen sino también un gif animado, lo cual le dará más vistosidad o hasta una imágen png con canal alfa y toda esa nota de transparencias para obtener una splash screen como el camaleón del CorelDraw ^^!&lt;br /&gt;&lt;br /&gt;También en este artículo encontrarán información adicional sobre este tema:&lt;br /&gt;&lt;a href="http://wiki.netbeans.org/Splash_Screen_Beginner_Tutorial"&gt;http://wiki.netbeans.org/Splash_Screen_Beginner_Tutorial&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-3837616770436243796?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/3837616770436243796/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/08/splash-screen-o-ventana-splash-en-java.html#comment-form' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3837616770436243796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3837616770436243796'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/08/splash-screen-o-ventana-splash-en-java.html' title='Splash Screen o Ventana Splash en java usando Netbeans'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/TGOFg-bPF-I/AAAAAAAAAQk/3pnX8nkvbFA/s72-c/01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-3556509586050091848</id><published>2010-06-30T21:19:00.013-05:00</published><updated>2011-03-27T19:44:03.576-05:00</updated><title type='text'>Procesamiento de Video en Tiempo Real Con Java</title><content type='html'>Al fin otro post ... han pasado meses desde mi último post y hoy mientras revisada algunos apuntes de la universidad encontré un programa que hice en mis ratos libres acerca del procesamiento de video. Antes de escribir este pequeño código tenía un montón de dudas acerca del procesamiento de video. Y de eso trata este post, de dar solución a esas dudas que obviamente no son solo mías sino seguro de muchos novatos en programación.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TCyjLDHWtUI/AAAAAAAAAO4/ynOY6cMTTi4/s1600/test.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5488941456067835202" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TCyjLDHWtUI/AAAAAAAAAO4/ynOY6cMTTi4/s320/test.JPG" style="cursor: pointer; display: block; height: 277px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bueno, luego de esta pequeña introducción empezemos a hablar acerca del procesamiento de video resolviendo las dudas que yo tenía.&lt;br /&gt;&lt;br /&gt;Mi primera duda era: ¿Qué hace diferente al procesamiento de imágenes del procesamiento de video? ... Y esta duda me surgió porque yo tenía la implementación de algunos algoritmos de procesamiento de imágenes y pensaba que quizás podría aplicarlos en alguna cosa interesante. La respuesta a esta pregunta es que es casi lo mismo, es más, me animaría a decir que el procesamiento de video no es más que el procesamiento secuencial de imágenes dentro de un intervalo de tiempo.&lt;br /&gt;Y es que para lograr procesar video solo basta acceder a sus &lt;a href="http://es.wikipedia.org/wiki/Frame"&gt;frames&lt;/a&gt; e ir procesando imágen por imágen al mismo tiempo que es capturado para poder dar la sensación de movimiento y que es tiempo real.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;First doubt has been solved!! xD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mi segunda duda era: ¿Y qué herramientas puedo utilizar para poder procesar el video? ... Evidentemente hay muchas, pero yo personalmente prefiero Java que son su framework JMF(Java Media Framework) (que evidentemente no es la gran cosa, así que no pidamos maravillas) nos provee la API necesaria para poder acceder a los dispositivos de captura de video y también manipular los datos de un achivo multimedia.&lt;br /&gt;&lt;br /&gt;Tercera duda: Bien, ya instalé el Java Media Framework, ahora ¿Cómo instancio un dispositivo de captura de video? ... Bueno, como siempre digo: &lt;span style="font-weight: bold;"&gt;Un poco de líneas de código dice más que mil papers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/*&lt;br /&gt;* To change this template, choose Tools | Templates&lt;br /&gt;* and open the template in the editor.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;package view;&lt;br /&gt;&lt;br /&gt;import java.awt.BorderLayout;&lt;br /&gt;import javax.media.CaptureDeviceInfo;&lt;br /&gt;import javax.media.CaptureDeviceManager;&lt;br /&gt;import javax.media.Manager;&lt;br /&gt;import javax.media.MediaLocator;&lt;br /&gt;import javax.media.Player;&lt;br /&gt;import javax.media.Processor;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author Rolando&lt;br /&gt;*/&lt;br /&gt;public class InstanciarCamara extends JFrame {&lt;br /&gt;&lt;br /&gt;//Atributos necesarios para acceder a una cámara web&lt;br /&gt;private static Player player;&lt;br /&gt;private MediaLocator localizador;&lt;br /&gt;private Processor p;&lt;br /&gt;private CaptureDeviceInfo dispositivo = null;&lt;br /&gt;private static String source = "vfw:Microsoft WDM Image Capture (Win32):0";&lt;br /&gt;&lt;br /&gt;public InstanciarCamara() {&lt;br /&gt;setLayout(new BorderLayout());&lt;br /&gt;setSize(500, 400);&lt;br /&gt;setLocationRelativeTo(null);    //Centrar Ventana&lt;br /&gt;setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;setTitle("Demo Cámara Web");&lt;br /&gt;player = null;&lt;br /&gt;localizador = null;&lt;br /&gt;dispositivo = CaptureDeviceManager.getDevice(source);&lt;br /&gt;localizador = dispositivo.getLocator();&lt;br /&gt;iniciarCaptura();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void iniciarCaptura() {&lt;br /&gt;try {&lt;br /&gt;player = Manager.createRealizedPlayer(localizador);&lt;br /&gt;player.start();&lt;br /&gt;if (player.getVisualComponent() != null) {&lt;br /&gt;add(player.getVisualComponent(), BorderLayout.CENTER);&lt;br /&gt;}&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;System.err.println(e.toString());&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param args the command line arguments&lt;br /&gt;*/&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;// TODO code application logic here&lt;br /&gt;InstanciarCamara.setDefaultLookAndFeelDecorated(true);&lt;br /&gt;InstanciarCamara camara = new InstanciarCamara();&lt;br /&gt;camara.setVisible(true);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Con eso ya podemos acceder a una cámara web por ejemplo.&lt;br /&gt;&lt;br /&gt;Cuarta duda: Bien, ya puedo acceder a un dispositivo de captura, pero ¿Cómo accedo a los frames para poder procesarlos? Y es aquí donde el java media framework otra vez, gracias a su API, nos provee unos métodos que nos ayudarán a realizar esta tarea. A ver, veamos estas palabras reflejadas en otro poco de código.&lt;br /&gt;&lt;br /&gt;Primero necesitaremos un panel para poder cargar la imágen procesada. Este panel solo reescribirá el método paint. A continuación el código.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/*&lt;br /&gt;* To change this template, choose Tools | Templates&lt;br /&gt;* and open the template in the editor.&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* Lienzo.java&lt;br /&gt;*&lt;br /&gt;* Created on 14/05/2009, 02:11:36 PM&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;package com.test;&lt;br /&gt;&lt;br /&gt;import java.awt.Color;&lt;br /&gt;import java.awt.Graphics;&lt;br /&gt;import java.awt.image.BufferedImage;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author Rolando&lt;br /&gt;*/&lt;br /&gt;public class Lienzo extends javax.swing.JPanel {&lt;br /&gt;&lt;br /&gt;private BufferedImage imagen;&lt;br /&gt;&lt;br /&gt;/** Creates new form Lienzo */&lt;br /&gt;public Lienzo() {&lt;br /&gt;imagen = null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setImage(BufferedImage imagen) {&lt;br /&gt;this.imagen = imagen;&lt;br /&gt;repaint();&lt;br /&gt;}         &lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public void paint( Graphics g ) {&lt;br /&gt;super.paint( g );&lt;br /&gt;if( imagen != null ) {&lt;br /&gt;g.drawImage(imagen, 0, 0, getWidth(), getHeight(), this);&lt;br /&gt;g.setColor(Color.BLACK);&lt;br /&gt;g.drawString("http://rolandopalermo.blogspot.com", 10, 20);&lt;br /&gt;}&lt;br /&gt;}                 &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y ahora para ver como se capturan los frames del video proveniente de una cámara web les dejo un pequeño proyecto de netbeans.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/tecnologiaenperu/home/ProcesarVideo.rar"&gt;&lt;img alt="Photobucket" border="0" src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Espero les sea de utilidad y cualquier pregunta, no duden en consultarme.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-3556509586050091848?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/3556509586050091848/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/06/procesamiento-de-video-en-tiempo-real.html#comment-form' title='31 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3556509586050091848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3556509586050091848'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/06/procesamiento-de-video-en-tiempo-real.html' title='Procesamiento de Video en Tiempo Real Con Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/TCyjLDHWtUI/AAAAAAAAAO4/ynOY6cMTTi4/s72-c/test.JPG' height='72' width='72'/><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-6045800708552822576</id><published>2010-04-22T17:33:00.027-05:00</published><updated>2010-06-01T10:51:42.155-05:00</updated><title type='text'>La historia tras un reproductor de música ... RaiZex DJ™ RC 1.0</title><content type='html'>Mi blog ... una bitácora de las cosas que hago. Este post no va a tener el mismo formalismo que los anteriores puesto que ha sido escrito en un momento de inspiración ^^. Hoy, &lt;span style="font-weight:bold;"&gt;22 de Abril del 2010&lt;/span&gt; es una fecha muy importante para mí aunque quizás si algunas cosas no hubiesen sucedido esta fecha sería aún más especial pero bueno, sucedieron y aca estoy yo igual de contento de todos modos pues la vida continua.&lt;br /&gt;&lt;br /&gt;Y como dice el título, una historia tras un reproductor de música, de eso les voy a contar en este post. No habrá código, no habrá artículos, ni consejos de como hacerse uno propio pero lo que si habrá es anécdotas por montones, cosas que pasé, cosas que sucedieron .. en fin, ahí vamos XD.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S9JLA3W0H4I/AAAAAAAAANo/TvNODT1slFg/s1600/minireproductor.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 262px; height: 209px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S9JLA3W0H4I/AAAAAAAAANo/TvNODT1slFg/s320/minireproductor.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463511776185556866" /&gt;&lt;/a&gt;&lt;br /&gt;Transcurrían los meses entre julio y septiembre del 2009, yo aún estaba en la universidad en esos pesados ciclos. Trabajos por acá, trabajos por allá ... uf!! que cansado era todo esto hasta que se me presentó la primera oportunidad de poner en práctica todooo mi conocimiento adquirido en las aulas de mi universidad, la Universidad Nacional de Trujillo. Era una radio, Radio Libertad de Trujillo, la que solicitaba de mis servicios. Necesitaban la configuración de un servidor de audio por internet ... es así que se empezó a trabajar, junto a otro compañero y bueno, pasaron los días y el trabajo estuvo hecho. Me sentía contento, había tenido éxito en mi primer enfrentamiento al mundo laboral, al trabajo bajo presión, a las exigencias de un empresario para quien el tiempo es dinero. Heeee, salí airoso de mi primera batalla y además había aprendido un poco más acerca de los formatos de audio - que el mp3 es esto, que el ogg lo otro - que felicidad. Y bueno, también la U finalizaba, empezaba la huelgaaa. "Tiempo de Investigarrrrrrrr", ese era mi frase cada vez que se iniciaba una huelga ^^ y me adentré al mundo multimedia XD ...&lt;br /&gt;&lt;br /&gt;Recuerdo haber escuchado de un trabajo que tenían unos amigos que llevaban un curso de procesamiento del habla. Se trataba de graficar el espectro de un archivo .wav ... aquí empezó todooooo. Tardé casi 2 semanas pero lo hice, siiii lo hice, mi primer programa para graficar audioo, que felicidad. Ordené el código y lo posteé en este blog. Estoy hablando del Spectrum Analyzer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S9DgdK-PIaI/AAAAAAAAANY/_nZLfqNB2T4/s1600/ss2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 230px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S9DgdK-PIaI/AAAAAAAAANY/_nZLfqNB2T4/s320/ss2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463113139766632866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No me cansaba de probarlo, luego de un tiempo intenté graficar archivos wav más pesados y en este intento me acordé de algo: "Recuerdo cuando tenía 19 años y estaba en VI ciclo de la universidad era muyy terco con el java, no lo podía aprender :p y en mi primer encuentro con el Java Media Framework intenté hacerme un reproductor de música, proyecto que claro, nunca acabé"... Es así que entonces me dije: Estamos de huelga en la U, solo estudio inglés 3 veces a la semana por las tardes ... todo estaba a favor de la ciencia (Otra de mis frases ^^) ...&lt;br /&gt;&lt;br /&gt;Se acercaba diciembre, mes de navidad, y yo con tantas cosas en la cabeza, claro que no todo era ciencia. Ya saben ... cosas que nos pasa a los jovenes ^^. Y se me ocurrió poder graficar todo tipo de archivo de audio. En ese lapso de tiempo decidí juntar lo que había querido hacer hace tiempo (El reproductor) y lo que quería hacer ahora (Graficar Archivos de Audio). Entonces nació la idea de hacer mi primer apoyo al mundo del Software Libre: &lt;span style="font-weight:bold;"&gt;"Un reproductor de música".&lt;/span&gt; Empezé a leer por acá, páginas por allá, foros y bueno, luego de unos días de lectura hice el primer reproductor cuyo nombre tiene un significado muy especial para mí ^^, es el nombre de una fabulosa persona, Raisa Tatiana XD. Era increíble, lo había conseguido, &lt;span style="font-weight:bold;"&gt;RaiZex™&lt;/span&gt; estaba listo XD ... pero fiel a mi estilo, no estaba contento, sabía que este reproductor no tendría futuro alguno, había que agregarle más cosas, de ley que siii. De todos modos les dejo una foto para que vean como me quedó, claro que no acepto críticas, jajajajaja&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S9DUm5L4c3I/AAAAAAAAAM4/JJA_fsgtO7Y/s1600/Primera+versi%C3%B3n.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 191px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S9DUm5L4c3I/AAAAAAAAAM4/JJA_fsgtO7Y/s320/Primera+versi%C3%B3n.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463100112651187058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sabía que le faltaba infinidad de cosas, entonces me puse a pensar que más podía agregarleee ... y se acercaba la navidadddd, y muy al contrario de lo que esto significa, para mí significaba el acercamiento de un evento que no me gustaría nada. Fué terrible!!!! ^^. Bueno ya, sigamos ... Entré a practicar Kung-fu, practicaba boxeo, el inglés, los sentimientoss .... aaaaa el tiempo no me daba. Poco a poco me fuí desligando de estas cosas para poder acabar este proyecto que lógicamente tenía más prioridad. Y es así que luego de casi 1 semana acabé esta segunda versión, igual de pobre que la primera jajaja, pero tenía un significado especial :p a parte del cambio de nombre claro. Había nacido RaiZex DJ™ &lt;span style="font-weight:bold;"&gt;(Este nuevo nombre se lo debo a mi mejor amigo Gerald Infante XD ... aunque claro, él se inspiró en la misma persona jeje)&lt;/span&gt;, acá les dejo una foto y obviamente tampoco acepto críticas jajajaja&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S9DVnuougQI/AAAAAAAAANA/CmxkJ7ie62Y/s1600/Segunda+versi%C3%B3n.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 296px; height: 320px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S9DVnuougQI/AAAAAAAAANA/CmxkJ7ie62Y/s320/Segunda+versi%C3%B3n.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463101226510876930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aunque igual de humilde que la anterior, fué el primer paso de algo más ambicioso. Ya no quería solo culminar mi reto de hacer mi propio reproductor, No Señorr!!!, quería algo que fuese más allá, algo que trascienda en el mundo multimedia :p. Quería hacer un reproductor tan bueno como el winamp, el iTunes, el Amarok ... vaya que era todo un reto. Entonces manos a la obra, me puse a trabajar, la navidad cada vez más cerca, los sentimientos que daban vuelta en mi cabeza, los golpes del boxeo ... Oh!!! todo en contraaaaa, como siempre XD.&lt;br /&gt;&lt;br /&gt;A programar, siii, a programar, luego de otra semana de programación estaba lista, siiiii, mi primer reproductorrr. Aunque claro solo soportaba "wav", "aif", "au" ya era algo. (La navidad había llegado) Me quedó algo así XD:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S9DWyHyPxCI/AAAAAAAAANI/Df0_aW8az9A/s1600/Tercera+versi%C3%B3n.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 188px; height: 320px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S9DWyHyPxCI/AAAAAAAAANI/Df0_aW8az9A/s320/Tercera+versi%C3%B3n.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463102504572011554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aca ya se aceptan algunas críticas :p ... claro que no usaba ningún jar extraaa, excepto el del look and feel ^^. Estaba listoo, siiii, estaba listo para su liberación. A crear la cuenta de sourceforge, en googlecode, a conquistar el mundoooooooooo ... pero algo me bajó de la nube: Quién cambiaría todaaa su música de mp3 u ogg a wav solo para usar mi reproductor??? ... nadieeeeee. Y entonces me dije: Es tiempo de recurrir al software libre :D. Y sin darme cuenta cuenta era 31 de diciembreeeeeee, qué??????????? 31 de diciembreeee, fin de añooo, tiempo para dejar muchas cosas atras, para tomar decisiones para el siguiente añooo. Y siii, eso hice: "Este reproductor no será cualquier cosa, no señorrr!!!!".&lt;br /&gt;&lt;br /&gt;Pasaron los meses, enero, febrero, marzo, clases en la universidad, clases de inglés, clases en CISCO, adios box, adios Kung-fu, adios muchas otras cosas ... el trabajo continuó, pero lento, programaba media hora al dia o quizás un poco más. Luego le comenté de mi idea a una amiga, mi amiga Zully Sheena (o Xena como le decimos jejeje), muyyy buena programadoraaa, de las mejoresssssss. Le dije: "Mira, estoy haciendo esto, qué te parece?". Le gustó la idea, se unió al desarrollo y ya eramos dos, siiiii, ya eramos dossss. Entonces nos pusimos manos a la obra, a terminar estoo!!! de ley que siiiiii. Al momento de escribir el post ya tenemos esto: La release candidate 1.0 - heeeeeee, algo bonito al finnn, mírenlo ustedes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/S9DZNEcKpvI/AAAAAAAAANQ/UrqNDXRJ8dw/s1600/RC+1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 222px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/S9DZNEcKpvI/AAAAAAAAANQ/UrqNDXRJ8dw/s320/RC+1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463105166553818866" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ya se aceptan críticas XD&lt;br /&gt;&lt;br /&gt;Hoy hemos sido invitados a exponer el proyecto en la &lt;a href="http://www.flisoltrujillo.com/"&gt;FLISOL&lt;/a&gt;, somos parte de la &lt;a href="http://www.colisol.org/"&gt;COLISOL&lt;/a&gt; ... vaya, hasta donde llegó la idea. Esto si que es bueno, pero es producto de conocer a la gente exacta en el momento exacto. Gracias a todoss, espero el proyecto vaya adquiriendo más gente, que se haga más grandeeee, en fin ... qusiiera tantas cosas y bueno ... son cosas de la vida.&lt;br /&gt;&lt;br /&gt;Es &lt;span style="font-weight:bold;"&gt;22 de Abril del 2010&lt;/span&gt; ... como dice Pedrito Suarez, cierren su historia de amor, terminen su libro. Y este post se ha terminado XD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-6045800708552822576?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/6045800708552822576/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/04/la-historia-tras-un-reproductor-de.html#comment-form' title='11 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6045800708552822576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6045800708552822576'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/04/la-historia-tras-un-reproductor-de.html' title='La historia tras un reproductor de música ... RaiZex DJ™ RC 1.0'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/S9JLA3W0H4I/AAAAAAAAANo/TvNODT1slFg/s72-c/minireproductor.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-2101408497931140046</id><published>2010-04-05T13:52:00.020-05:00</published><updated>2012-01-28T16:59:46.541-05:00</updated><title type='text'>Reloj Digital con Displays de 7 Segmentos y PIC 16F84A</title><content type='html'>En esta oportunidad quiero compartir con ustedes un sencillo reloj basado en un Microcontrolador PIC de la serie 16F84A y usando display ánodo común de 7 segmentos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S_A9t7t6kYI/AAAAAAAAAOA/1ORiq9X-nvc/s1600/reloj.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5471941406588834178" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S_A9t7t6kYI/AAAAAAAAAOA/1ORiq9X-nvc/s320/reloj.jpg" style="cursor: hand; cursor: pointer; display: block; height: 222px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Adicionalmente usa otros circuitos con la finalidad de expander el número de salidas, tanto para control como para datos, y de esa forma podemos contar con más displays y más opciones de Configuración. Entre estos circuitos tenemos el conocido 74LS47, de cuál dejaré el esquema mostrando la disposición de sus pines (Figura 1), así como su tabla de verdad (Figura 2). Para mayor información pueden consultar el datasheet de este componente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disposición de pines&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S7oyPQ8u4OI/AAAAAAAAALw/KwvdQMS-Qe8/s1600/74ls47.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5456729136341901538" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S7oyPQ8u4OI/AAAAAAAAALw/KwvdQMS-Qe8/s320/74ls47.jpg" style="cursor: hand; cursor: pointer; display: block; height: 317px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tabla de Verdad&lt;/span&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S7oyZPbSSTI/AAAAAAAAAL4/bPSOUp0-ou8/s1600/74ls47_true_table.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5456729307731872050" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S7oyZPbSSTI/AAAAAAAAAL4/bPSOUp0-ou8/s320/74ls47_true_table.jpg" style="cursor: hand; cursor: pointer; display: block; height: 239px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Otro circuit usado es el 74LS138, el cuál funcionará como selector de display para realizar el efecto de barrido. No detallaré tampoco a este componente puesto que no es el objetivo de este post, pero si dejaré algunas imágenes, que al igual que las anteriores, nos da una vista rápida de la disposición y el funcionamiento de este integrado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disposición de pines&lt;/span&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/S7ozA_5tmzI/AAAAAAAAAMA/3Rec5Hf1o0o/s1600/74ls138.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5456729990759291698" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/S7ozA_5tmzI/AAAAAAAAAMA/3Rec5Hf1o0o/s320/74ls138.jpg" style="cursor: hand; cursor: pointer; display: block; height: 196px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tabla de Verdad&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S7ozHpYp79I/AAAAAAAAAMI/h_S7789vuqE/s1600/74ls138_true_table.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5456730104974143442" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S7ozHpYp79I/AAAAAAAAAMI/h_S7789vuqE/s320/74ls138_true_table.jpg" style="cursor: hand; cursor: pointer; display: block; height: 121px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;También dejaré el diagrama de pines de un display de 7 segmentos.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S7ozRbRCw9I/AAAAAAAAAMQ/7H1MVKSOnCk/s1600/display.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5456730272982811602" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S7ozRbRCw9I/AAAAAAAAAMQ/7H1MVKSOnCk/s320/display.gif" style="cursor: hand; cursor: pointer; display: block; height: 161px; margin: 0px auto 10px; text-align: center; width: 212px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora, una vez conocido el funcionamiento de los componentes individuales, a continuación muestro el diagrama total del reloj, en donde veremos como estos integrados interactuan entre sí para poder obtener nuestro sencillo reloj digital.&lt;br /&gt;Las resistencias que van a los displays son de 330Ω (Naranja, Naranja, Marrón) y las que van a los transistores son de 1KΩ (Marrón, Negro, Rojo). Y claro, las resistencias que van a los pulsadores son de 10KΩ (Marrón, Negro, Naranja).&lt;br /&gt;&lt;br /&gt;Antes que nada tenemos que conectar los componentes básicos para el funcionamiento del microcontrolador pic, que son las conexiones a tierra y 5 voltios, el reloj de 4MHz y los capacitores.&lt;br /&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;Luego podemos armar el siguiente diagrama esquemático para tener en funcionamiento a nuestro sencillo Reloj Digital.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S7o1EuCoRNI/AAAAAAAAAMY/RExQdpkRtQE/s1600/Reloj.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5456732253707584722" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S7o1EuCoRNI/AAAAAAAAAMY/RExQdpkRtQE/s320/Reloj.jpg" style="cursor: hand; cursor: pointer; display: block; height: 225px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Archivos adjuntos del proyecto:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El código está escritor en ensamblador. Pueden usar el mplab para recompilarlo y usarlo de acuerdo a sus necesidades.&lt;br /&gt;&lt;pre class="vb" name="code"&gt;__CONFIG   _CP_OFF &amp;amp;  _WDT_OFF &amp;amp; _PWRTE_ON &amp;amp; _XT_OSC&lt;br /&gt;LIST    P=16F84A&lt;br /&gt;INCLUDE  &amp;lt;P16F84A.INC&amp;gt;&lt;br /&gt;&lt;br /&gt;M_UNI equ  H'1D' ; Registro para las unidades de los minutos.&lt;br /&gt;M_DEC equ  H'1C' ; Registro para las decenas de los minutos.&lt;br /&gt;&lt;br /&gt;H_UNI equ  H'1F' ; Registro para las unidades de las horas.&lt;br /&gt;H_DEC equ  H'1E' ; Registro para las decenas de las horas.&lt;br /&gt;&lt;br /&gt;S_UNI equ  H'20' ; Registro para las unidades de los segundos.&lt;br /&gt;S_DEC equ  H'21' ; Registro para las decenas de los segundos.&lt;br /&gt;&lt;br /&gt;BARR equ  H'1B' ; Registro para almacenar el número de barridos.&lt;br /&gt;PAUSE equ  H'1A' ; Registro para almacenar el tiempo de barrido.&lt;br /&gt;&lt;br /&gt;;Algunas definiciones de registros y pines&lt;br /&gt;;-----------------------------------------&lt;br /&gt;#DEFINE  REINICIO PORTA,0   ; Pulsador conectado a RA0.&lt;br /&gt;#DEFINE  MINUTO  PORTA,1   ; Pulsador conectado a RA1.&lt;br /&gt;#DEFINE  HORA  PORTA,2   ; Pulsador conectado a RA2.&lt;br /&gt;#DEFINE  DISPLAY  PORTB   ; El display está conectado al Puerto B.&lt;br /&gt;&lt;br /&gt;ORG 0&lt;br /&gt;&lt;br /&gt;Inicio&lt;br /&gt;bsf  STATUS,RP0  ; Acceso al Banco 1.&lt;br /&gt;clrf DISPLAY   ; Línea del LED configurada como salida.&lt;br /&gt;movlw b'00011111'  ; Las 5 líneas del Puerto A se configuran como entrada.&lt;br /&gt;movwf PORTA&lt;br /&gt;bcf  STATUS,RP0  ; Acceso al Banco 0.&lt;br /&gt;;Inicialización de Registros&lt;br /&gt;;---------------------------&lt;br /&gt;clrf S_UNI   &lt;br /&gt;clrf S_DEC&lt;br /&gt;clrf M_UNI&lt;br /&gt;clrf M_DEC&lt;br /&gt;clrf H_UNI&lt;br /&gt;clrf H_DEC&lt;br /&gt;clrf BARR&lt;br /&gt;;---------------------------&lt;br /&gt;&lt;br /&gt;Principal&lt;br /&gt;clrf BARR    ; Limpiamos el registro de barridos&lt;br /&gt;;Para el botón de reinicio no importa los rebotes&lt;br /&gt;;------------------------------------------------&lt;br /&gt;VerificarPulsadorReset&lt;br /&gt;btfss REINICIO   ; ¿Pulsador reposo?, ¿Pulsador=1?&lt;br /&gt;call InicializarRegistros&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;;Para el botón de incremento de minutos si importan los rebotes&lt;br /&gt;;--------------------------------------------------------------&lt;br /&gt;VerificarPulsadorMinutos&lt;br /&gt;btfsc MINUTO     ; ¿Pulsador presionado?, ¿(Pulsador)=0?&lt;br /&gt;goto VerificarPulsadorHoras ; No vuelve a leerlo&lt;br /&gt;call Temporizador   ; Espera a que se estabilicen los niveles de tensión.&lt;br /&gt;btfsc MINUTO     ; Comprueba si es un rebote.&lt;br /&gt;goto VerificarPulsadorHoras ; Era un rebote y sale.&lt;br /&gt;goto    SoloMinutosEnUno  ; Salta a la subrutina para incrementar los minutos en 1&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;;Para el botón de incremento de horas también importan los rebotes&lt;br /&gt;;-----------------------------------------------------------------&lt;br /&gt;VerificarPulsadorHoras&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;btfsc HORA      ; ¿Pulsador presionado?, ¿(Pulsador)=0?&lt;br /&gt;goto SoloSegundosEnUno   ; No vuelve a leerlo&lt;br /&gt;call Temporizador    ; Espera a que se estabilicen los niveles de tensión.&lt;br /&gt;btfsc HORA      ; Comprueba si es un rebote.&lt;br /&gt;goto SoloSegundosEnUno   ; Era un rebote y sale fuera.&lt;br /&gt;call    SoloHorasEnUno&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;SoloSegundosEnUno&lt;br /&gt;call IncrementarSegundosEnUno&lt;br /&gt;&lt;br /&gt;Mostrar&lt;br /&gt;call ValidarTiempo&lt;br /&gt;call Barrido&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Fin &lt;br /&gt;goto Principal&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;SoloMinutosEnUno&lt;br /&gt;call IncrementarMinutosEnUno&lt;br /&gt;goto Mostrar&lt;br /&gt;&lt;br /&gt;SoloHorasEnUno&lt;br /&gt;call IncrementarHorasEnUno&lt;br /&gt;goto Mostrar&lt;br /&gt;&lt;br /&gt;;*************************************&lt;br /&gt;; Subrutina de Incremento de Registros&lt;br /&gt;;*************************************&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;IncrementarSegundosEnUno&lt;br /&gt;incf S_UNI,f      ; Incrementa el valor de S_UNI&lt;br /&gt;movfw S_UNI      ; Carga W con el valor del regustro S_UNI&lt;br /&gt;sublw D'10'      ; Resta 10 para verificar si S_UNI=10?&lt;br /&gt;btfsc STATUS, Z     ; Verifica si el resultado fué cero&lt;br /&gt;call IncrementarSegundosEnDiez ; Si es cero, entonces acarreamos uno&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;IncrementarSegundosEnDiez&lt;br /&gt;clrf S_UNI      ; El acarreo implica limpiar el registro anterior&lt;br /&gt;incf S_DEC,f      ; Incrementa el valor de S_DEC&lt;br /&gt;movfw S_DEC      ; Carga W con el valor del regustro S_DEC&lt;br /&gt;sublw D'6'      ; Resta 6 para verificar si S_UNI=6?&lt;br /&gt;btfsc STATUS, Z     ; Verifica si el resultado fué cero&lt;br /&gt;call IncrementarMinutosEnUno  ; Si es cero, entonces acarreamos uno&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;IncrementarMinutosEnUno&lt;br /&gt;clrf S_DEC      ; El acarreo implica limpiar el registro anterior&lt;br /&gt;incf M_UNI,f      ; Incrementa el valor de M_UNI&lt;br /&gt;movfw M_UNI      ; Carga W con el valor del regustro M_UNI&lt;br /&gt;sublw D'10'      ; Resta 10 para verificar si S_UNI=10?&lt;br /&gt;btfsc STATUS, Z     ; Verifica si el resultado fué cero&lt;br /&gt;call IncrementarMinutosEnDiez ; Si es cero, entonces acarreamos uno&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;IncrementarMinutosEnDiez&lt;br /&gt;clrf M_UNI      ; El acarreo implica limpiar el registro anterior&lt;br /&gt;incf M_DEC,f      ; Incrementa el valor de M_DEC&lt;br /&gt;movfw M_DEC      ; Carga W con el valor del regustro M_DEC&lt;br /&gt;sublw D'6'      ; Resta 6 para verificar si S_UNI=6?&lt;br /&gt;btfsc STATUS, Z     ; Verifica si el resultado fué cero&lt;br /&gt;call IncrementarHorasEnUno  ; Si es cero, entonces acarreamos uno&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;IncrementarHorasEnUno&lt;br /&gt;clrf M_DEC      ; El acarreo implica limpiar el registro anterior&lt;br /&gt;incf H_UNI,f      ; Incrementa el valor de H_UNI&lt;br /&gt;movfw H_UNI      ; Carga W con el valor del regustro H_UNI&lt;br /&gt;sublw D'10'      ; Resta 6 para verificar si S_UNI=10?&lt;br /&gt;btfsc STATUS, Z     ; Verifica si el resultado fué cero&lt;br /&gt;call  IncrementarHorasEnDiez  ; Si es cero, entonces acarreamos uno&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;IncrementarHorasEnDiez&lt;br /&gt;clrf H_UNI      ; El acarreo implica limpiar el registro anterior&lt;br /&gt;incf H_DEC,f      ; Incrementa el valor de H_DEC&lt;br /&gt;movfw H_DEC      ; Carga W con el valor del regustro H_DEC&lt;br /&gt;sublw D'10'      ; Resta 6 para verificar si S_UNI=10?&lt;br /&gt;btfsc STATUS, Z     ; Verifica si el resultado fué cero&lt;br /&gt;clrf H_DEC      ; Si es cero, entonces acarreamos uno&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;;*********************************&lt;br /&gt;; Subrutina de Barrido de Displays&lt;br /&gt;;*********************************&lt;br /&gt;&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Barrido&lt;br /&gt;btfss REINICIO   ; ¿Pulsador reposo?, ¿Pulsador=1?&lt;br /&gt;call InicializarRegistros&lt;br /&gt;incf BARR, f    ; Incrementa en 1 el registro de barridos&lt;br /&gt;;Unidades de segundos&lt;br /&gt;;--------------------&lt;br /&gt;movlw b'00001111'  ; Activamos el primer display&lt;br /&gt;movwf DISPLAY   ; Movemos el dato al puerto B&lt;br /&gt;movf S_UNI,0   ; Mueve M_UNI al registro W&lt;br /&gt;iorlw b'00000000'  ; Aplicamos la máscara&lt;br /&gt;movwf   DISPLAY   ; Mostramos en el puerto B&lt;br /&gt;call  Temporizador ; Pausa para establecer niveles de tensión correctamente&lt;br /&gt;movlw B'00001111'  ; Cargamos el valor adecuado a W para limpiar los registros&lt;br /&gt;movwf DISPLAY   ; Limpiamos el display para evitar que los dígitos se repitan&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;Decenas de segundos&lt;br /&gt;movlw b'00011111'  ; Activamos el segundo display&lt;br /&gt;movwf DISPLAY   ; Movemos el dato al puerto B&lt;br /&gt;movf S_DEC,0   ; Mueve S_DEC al registro W&lt;br /&gt;iorlw b'00010000'  ; Aplicamos la máscara&lt;br /&gt;movwf   DISPLAY   ; Mostramos en el puerto B&lt;br /&gt;call  Temporizador ; Pausa para establecer niveles de tensión correctamente&lt;br /&gt;movlw B'00011111'  ; Cargamos el valor adecuado a W para limpiar los registros&lt;br /&gt;movwf DISPLAY   ; Limpiamos el display para evitar que los dígitos se repitan&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;Unidades de minutos&lt;br /&gt;movlw b'00101111'  ; Activamos el tercer display&lt;br /&gt;movwf DISPLAY   ; Movemos el dato al puerto B&lt;br /&gt;movf M_UNI,0   ; Mueve M_UNI al registro W&lt;br /&gt;iorlw b'00100000'  ; Aplicamos la máscara&lt;br /&gt;movwf   DISPLAY   ; Mostramos en el puerto B&lt;br /&gt;call  Temporizador ; Pausa para establecer niveles de tensión correctamente&lt;br /&gt;movlw B'00101111'  ; Cargamos el valor adecuado a W para limpiar los registros&lt;br /&gt;movwf DISPLAY   ; Limpiamos el display para evitar que los dígitos se repitan&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;Decenas de minutos&lt;br /&gt;movlw b'00111111'  ; Activamos el cuarto display&lt;br /&gt;movwf DISPLAY   ; Movemos el dato al puerto B&lt;br /&gt;movf M_DEC,0   ; Mueve M_UNI al registro W&lt;br /&gt;iorlw b'00110000'  ; Aplicamos la máscara&lt;br /&gt;movwf   DISPLAY   ; Mostramos en el puerto B&lt;br /&gt;call  Temporizador ; Pausa para establecer niveles de tensión correctamente&lt;br /&gt;movlw B'00111111'  ; Cargamos el valor adecuado a W para limpiar los registros&lt;br /&gt;movwf DISPLAY   ; Limpiamos el display para evitar que los dígitos se repitan&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;Unidades de horas&lt;br /&gt;movlw b'01001111'  ; Activamos el quinto display&lt;br /&gt;movwf DISPLAY   ; Movemos el dato al puerto B&lt;br /&gt;movf H_UNI,0   ; Mueve M_UNI al registro W&lt;br /&gt;iorlw b'01000000'  ; Aplicamos la máscara&lt;br /&gt;movwf   DISPLAY   ; Mostramos en el puerto B&lt;br /&gt;call  Temporizador ; Pausa para establecer niveles de tensión correctamente&lt;br /&gt;movlw B'01001111'  ; Cargamos el valor adecuado a W para limpiar los registros&lt;br /&gt;movwf DISPLAY   ; Limpiamos el display para evitar que los dígitos se repitan&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;Decenas de horas&lt;br /&gt;movlw b'01011111'  ; Activamos el sexto display&lt;br /&gt;movwf DISPLAY   ; Movemos el dato al puerto B&lt;br /&gt;movf H_DEC,0   ; Mueve M_UNI al registro W&lt;br /&gt;iorlw b'01010000'  ; Aplicamos la máscara&lt;br /&gt;movwf   DISPLAY   ; Mostramos en el puerto B&lt;br /&gt;call  Temporizador ; Pausa para establecer niveles de tensión correctamente&lt;br /&gt;movlw B'01011111'  ; Cargamos el valor adecuado a W para limpiar los registros&lt;br /&gt;movwf DISPLAY   ; Limpiamos el display para evitar que los dígitos se repitan&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;;Verificar barrido&lt;br /&gt;movfw BARR   ; carga W con el número de barridos&lt;br /&gt;sublw D'50'   ; Resta 50 para comparar si es igual a 50&lt;br /&gt;btfsc STATUS, Z  ; Verifica si el resultado fué 0, o sea si BARR=50?&lt;br /&gt;return     ; Se completó el número de barridos&lt;br /&gt;goto    Barrido&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;ValidarTiempo&lt;br /&gt;movfw H_UNI   ; Carga el registro W con el valor del registro H_UNI&lt;br /&gt;sublw D'4'   ; Resta 4 para verificar si es que el valor de W=4?&lt;br /&gt;btfsc STATUS, Z  ; Verifica si el resultado fué cero&lt;br /&gt;goto ValidarHora  ; Ahora llamamos al subrutina para verificar el siguiente dígito de la hora&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;ValidarHora&lt;br /&gt;movfw H_DEC     ; Carga el registro W con el valor del registro H_DEC&lt;br /&gt;sublw D'2'     ; Resta 2 para verificar si es que el valor de W=2?&lt;br /&gt;btfsc STATUS, Z    ; Verifica si el resultado fué cero&lt;br /&gt;goto InicializarRegistros ; Al llamar a esta subrutina quiere decir que la hora=24, lo cuál implica un reinicio&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;InicializarRegistros&lt;br /&gt;clrf S_UNI&lt;br /&gt;clrf S_DEC&lt;br /&gt;clrf M_UNI&lt;br /&gt;clrf M_DEC&lt;br /&gt;clrf H_UNI&lt;br /&gt;clrf H_DEC&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Temporizador&lt;br /&gt;movlw D'255'  ; w = 50 decimal&lt;br /&gt;movwf PAUSE  ; K = w&lt;br /&gt;&lt;br /&gt;Kloop&lt;br /&gt;decfsz PAUSE,f  ; K = K - 1 , salta a la siguiente instrucción si es cero.&lt;br /&gt;goto  Kloop&lt;br /&gt;return&lt;br /&gt;;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;END    ; Fin del programa.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-2101408497931140046?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/2101408497931140046/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/04/reloj-digital-con-displays-de-7.html#comment-form' title='62 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2101408497931140046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2101408497931140046'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/04/reloj-digital-con-displays-de-7.html' title='Reloj Digital con Displays de 7 Segmentos y PIC 16F84A'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/S_A9t7t6kYI/AAAAAAAAAOA/1ORiq9X-nvc/s72-c/reloj.jpg' height='72' width='72'/><thr:total>62</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-6451575322364117026</id><published>2010-03-27T15:46:00.006-05:00</published><updated>2010-03-27T15:56:18.609-05:00</updated><title type='text'>CCNA 4.0 exploration 1 - Exámen Capítulo 7 en Español</title><content type='html'>Aquí les dejo un exámen del curso de certificación CISCO correspondiente al Capítulo 7 del CCNA 4, Capa de Enlace de Datos. El exámen está resuelto al 100%, espero les sea de utilidad.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/S65vvrfmvAI/AAAAAAAAAK4/wAHfVOLV4kA/s1600/Dibujo1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 122px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/S65vvrfmvAI/AAAAAAAAAK4/wAHfVOLV4kA/s320/Dibujo1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453419063712070658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/S65v7eXnvVI/AAAAAAAAALA/PILpiIaiz1s/s1600/Dibujo2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 283px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/S65v7eXnvVI/AAAAAAAAALA/PILpiIaiz1s/s320/Dibujo2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453419266347351378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S65wGYo-aVI/AAAAAAAAALI/lZ-_lQwuXE8/s1600/Dibujo3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S65wGYo-aVI/AAAAAAAAALI/lZ-_lQwuXE8/s320/Dibujo3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453419453788088658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/S65wPB-ocRI/AAAAAAAAALQ/Z8kRQSVf2Wk/s1600/Dibujo4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 243px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/S65wPB-ocRI/AAAAAAAAALQ/Z8kRQSVf2Wk/s320/Dibujo4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453419602323730706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S65wXqebIJI/AAAAAAAAALY/YG8HXfrtyD4/s1600/Dibujo5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 251px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S65wXqebIJI/AAAAAAAAALY/YG8HXfrtyD4/s320/Dibujo5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453419750633447570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S65wj_v3SrI/AAAAAAAAALg/-fpthfK6sTw/s1600/Dibujo6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 147px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S65wj_v3SrI/AAAAAAAAALg/-fpthfK6sTw/s320/Dibujo6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453419962502171314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S65w4I-9yCI/AAAAAAAAALo/fwuQOGFQ7VM/s1600/Dibujo7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 231px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S65w4I-9yCI/AAAAAAAAALo/fwuQOGFQ7VM/s320/Dibujo7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5453420308578813986" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-6451575322364117026?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/6451575322364117026/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/03/ccna-40-exploration-1-examen-capitulo-7.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6451575322364117026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6451575322364117026'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/03/ccna-40-exploration-1-examen-capitulo-7.html' title='CCNA 4.0 exploration 1 - Exámen Capítulo 7 en Español'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/S65vvrfmvAI/AAAAAAAAAK4/wAHfVOLV4kA/s72-c/Dibujo1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-5955856099935878608</id><published>2010-01-26T19:12:00.011-05:00</published><updated>2010-10-27T10:34:30.369-05:00</updated><title type='text'>Configurando Bison en Windows para Desarrollar una Sencilla Calculadora con Notacion Polaca</title><content type='html'>Como podemos leer en la wikipedia, GNU|bison es un programa generador de analizadores sintácticos de propósito general perteneciente al proyecto GNU disponible para prácticamente todos los sistemas operativos, se usa normalmente acompañado de flex aunque los analizadores lexicos se pueden también obtener de otras formas.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S1-It0BxPtI/AAAAAAAAAHc/xF-Bbh7D5V4/s1600-h/01.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431209996273663698" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S1-It0BxPtI/AAAAAAAAAHc/xF-Bbh7D5V4/s320/01.jpg" style="cursor: pointer; display: block; height: 193px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En &lt;a href="http://rolandopalermo.blogspot.com/2009/12/como-configurar-flex-en-windows-y-no.html"&gt;un post anterior&lt;/a&gt; mencioné la forma en que uno podía configurar Flex para realizar analizadores léxicos. Bueno, en esta oportunidad vamos a desarrollar una sencilla calculadora con Bison y Flex.&lt;br /&gt;&lt;br /&gt;Los pasos para configurar el flex, nos dejan configurado al bison, listo para ser usado en nuestra calculadora.&lt;br /&gt;&lt;br /&gt;Ahora, voy a pasar a explicar la forma que deben tener los scripts que ingresaremos tanto a flex como a bison.&lt;br /&gt;&lt;br /&gt;Para flex el script debe tener la siguiente estructura:&lt;br /&gt;&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;%{&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include "y.tab.h"&lt;br /&gt;%}&lt;br /&gt;%option noyywrap&lt;br /&gt;%option yylineno&lt;br /&gt;&lt;br /&gt;DIGITO [0-9]&lt;br /&gt;ID [a-zA-Z][a-zA-Z0-9_]*&lt;br /&gt;&lt;br /&gt;%%&lt;br /&gt;{DIGITO}+("."{DIGITO}+)? {yylval.real=atof(yytext); return(TKN_NUM);}&lt;br /&gt;"="    {return(TKN_ASIGN);}&lt;br /&gt;";"    {return(TKN_PTOCOMA);}&lt;br /&gt;"*"    {return(TKN_MULT);}&lt;br /&gt;"/"    {return(TKN_DIV);}&lt;br /&gt;"+"    {return(TKN_MAS);}&lt;br /&gt;"-"    {return(TKN_MENOS);}&lt;br /&gt;{ID}   {return(TKN_ID);}&lt;br /&gt;%%&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Como nos podemos dar cuenta, en este fichero declaramos los símbolos y las expresiones que forman a los token numero (TKN_NUM). Asumo que ya tienen conocimiento de cada una de las partes de un archivo de flex, así que ahora paso a mostrar la forma que debe tener el archivo que le ingresaremos a Bison:&lt;br /&gt;&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;%{&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;extern int yylex(void);&lt;br /&gt;extern char *yytext;&lt;br /&gt;void yyerror (char *s);&lt;br /&gt;&lt;br /&gt;%}&lt;br /&gt;&lt;br /&gt;%union&lt;br /&gt;{&lt;br /&gt;float real;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;%start Calculadora&lt;br /&gt;&lt;br /&gt;%token &amp;lt;real&amp;gt; TKN_NUM&lt;br /&gt;%token TKN_ASIGN&lt;br /&gt;%token TKN_PTOCOMA&lt;br /&gt;%token TKN_MULT&lt;br /&gt;%token TKN_DIV&lt;br /&gt;%token TKN_MAS&lt;br /&gt;%token TKN_MENOS&lt;br /&gt;&lt;br /&gt;%token &amp;lt;real&amp;gt; TKN_ID&lt;br /&gt;%type &amp;lt;real&amp;gt; Expresion&lt;br /&gt;&lt;br /&gt;%left TKN_MAS TKN_MENOS&lt;br /&gt;%left TKN_MULT TKN_DIV&lt;br /&gt;&lt;br /&gt;%%&lt;br /&gt;&lt;br /&gt;Calculadora: TKN_ID {printf("El valor de %s es:", yytext);}&lt;br /&gt;TKN_ASIGN Expresion TKN_PTOCOMA{printf("%5.2f", $4);};&lt;br /&gt;Expresion : TKN_NUM{$$=$1;}|&lt;br /&gt;Expresion Expresion TKN_MAS {$$=$1+$2;}|&lt;br /&gt;Expresion Expresion TKN_MENOS {$$=$1-$2;}|&lt;br /&gt;Expresion Expresion TKN_MULT {$$=$1*$2;}|&lt;br /&gt;Expresion Expresion TKN_DIV {$$=$1/$2;};&lt;br /&gt;&lt;br /&gt;%%&lt;br /&gt;&lt;br /&gt;void yyerror(char *s)&lt;br /&gt;{&lt;br /&gt;printf("Error %s", s);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;yyparse();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Tampoco voy a explicar la estructura de este fichero puesto que la documentación en internet es muy variada.&lt;br /&gt;&lt;br /&gt;Lo que si voy a detallar es la forma de obtener los ficheros *.c y *.h, puesto que, a mi parecer, es lo más confuso y poco explicado.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2009/12/como-configurar-flex-en-windows-y-no.html"&gt;Como mencioné anteriormente&lt;/a&gt;, al configurar el flex siguiendo los pasos que expliqué en el post anterior el Bison quedará configurado también. Así que solo hay que realizar los siguientes comandos por consola y tendremos todo listo para integrarlo a nuestro proyecto de Dev-C++.&lt;br /&gt;&lt;br /&gt;Situamos ambos ficheros en el directorio D:\calculadora(Si no existe, tenemos que crearlo, lógicamente) y luego abrimos una consola de Windows, hacemos lo mismo que hicimos con el Flex, estableciendo las variables de entorno, como muestro en la siguiente imágen:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S1-Iz9Q6kTI/AAAAAAAAAHk/d-mRc68uL_g/s1600-h/02.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431210101832323378" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S1-Iz9Q6kTI/AAAAAAAAAHk/d-mRc68uL_g/s320/02.jpg" style="cursor: pointer; display: block; height: 180px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;Y con esos comandos se nos generará unos ficheros, los cuales automáticamente podemos integrarlo a un proyecto de Dev-C++ por ejemplo o agregarle más funciones.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S1-JacBsLKI/AAAAAAAAAHs/dpUWj-zLGqo/s1600-h/03.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431210762924993698" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S1-JacBsLKI/AAAAAAAAAHs/dpUWj-zLGqo/s320/03.jpg" style="cursor: pointer; display: block; height: 230px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya tenemos lista nuestra sencilla calculadora escrita con ayuda de Bison y Flex. Solo debemos ejecutar Calculadora.exe e ir introduciendo algunas expresiones (En notación polaca claro)&lt;br /&gt;&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;a=4 5+;&lt;br /&gt;hola=8 12*;&lt;br /&gt;g=12 6/;&lt;br /&gt;&lt;/pre&gt;&lt;a href="http://sites.google.com/site/tecnologiaenperu/home/calculadora.rar"&gt;Aquí&lt;/a&gt; les dejo la carpeta del proyecto con los archivos tanto de flex como de bison. También les muestro la forma de correr el programa de la calculadora en la siguiente imágen:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S1-MFnUKm7I/AAAAAAAAAH0/qzQDKXiF5MI/s1600-h/04.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5431213703712906162" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S1-MFnUKm7I/AAAAAAAAAH0/qzQDKXiF5MI/s320/04.jpg" style="cursor: pointer; display: block; height: 130px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;Para algo más aplicativo puedes revisar esto:&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/10/lex-y-bison-en-un-solo-analizador.html"&gt;http://rolandopalermo.blogspot.com/2010/10/lex-y-bison-en-un-solo-analizador.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-5955856099935878608?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/5955856099935878608/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/01/configurando-bison-en-windows-para.html#comment-form' title='18 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5955856099935878608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5955856099935878608'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/01/configurando-bison-en-windows-para.html' title='Configurando Bison en Windows para Desarrollar una Sencilla Calculadora con Notacion Polaca'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XsiwsHwYXAo/S1-It0BxPtI/AAAAAAAAAHc/xF-Bbh7D5V4/s72-c/01.jpg' height='72' width='72'/><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-9122989388972282270</id><published>2010-01-26T11:31:00.019-05:00</published><updated>2010-11-17T20:11:20.107-05:00</updated><title type='text'>Creando un ejecutable con Swi-Prolog</title><content type='html'>Este post lo escribí pues algunos amigos me comentaron cómo se podría crear un ejecutable con swi prolog. Bueno, SWI-Prolog nos provee de un mecanismo sencillo para la creación de ejecutables.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;La manera de hacerlo es como muestro a continuación:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Primero debemos tener un cuerpo principal, en donde estén los predicados que se ejecutaran al inicio de la llamada a nuestro programa, lo que se asemeja a la función principal de C:&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;int main(int argc,char *argv[])&lt;br /&gt;{&lt;br /&gt;//Cuerpo de la función principal&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;O al método principal de Java:&lt;br /&gt;&lt;pre name="code" class="java"&gt;public Class Main() {&lt;br /&gt;&lt;br /&gt;public static void main(String[] arg) {&lt;br /&gt;//Cuerpo del método principal&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;En nuestro caso, en SWI-Prolog se declararía del siguiente modo (Hago referencia a SWI-Prolog y no al lenguaje en general, puesto que cada Entorno de Prolog tiene su propia forma de realizar este proceso) :&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;main:-&lt;br /&gt;%&lt;br /&gt;% Cuerpo del predicado principal&lt;br /&gt;%&lt;br /&gt;halt.&lt;br /&gt;&lt;/pre&gt;Luego de realizado este proceso, tendrémos que invocar al predicado que se encargará de crear el ejecutable en sí.&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;qsave_program('c:/ejecutable.exe', [stand_alone(true), goal(main)]).&lt;br /&gt;&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S18cQsA-dKI/AAAAAAAAAHU/efcIUsLXoU0/s1600-h/generar+ejecutable.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S18cQsA-dKI/AAAAAAAAAHU/efcIUsLXoU0/s320/generar+ejecutable.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5431090748650845346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Con eso bastará para distribuir nuestro propio ejecutable, teniendo en cuenta que al llevar de una máquina a otra al *.exe, se debe hacer lo mismo con los archivos *.dll de la carpeta \bin de la instalación de nuestro SWI-Prolog. &lt;span style="font-weight:bold;"&gt;(tanto *.dll's como *.exe deben estar en una misma carpeta)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Para cerrar este post, &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/programa.rar?attredirects=0&amp;d=1"&gt;aquí&lt;/a&gt; les dejo el código fuente de un Sistema Tomador de Decisiones para la detección de plagas en sembríos de Tara así como su respectivo ejecutable (ejecutable.exe). Debemos descomprimir todos los archivos en la unidad C: de tal forma que nos quede 'C:\programa' y luego seguir los pasos arriba mencionados para generar el ejecutable.&lt;br /&gt;&lt;br /&gt;En todo caso adjunto las dll necesarias, en caso no se quiera instalar todo el SWI-Prolog. Las pueden descargar &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/dll.rar"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Recuerden que dentro de la carpeta programa hay un archivo léeme!!!!.txt es cuál es muy importante que lo lean, o en todo caso lean estos tips para poder ejecutar el sistema experto y generar su respectivo ejecutable:&lt;br /&gt;&lt;br /&gt;1. Primero debes crear una carpeta en tu unidad C:\ llamado programa.&lt;br /&gt;2. Dentro de C:\programa descomprimes todos los archivos de programa.rar&lt;br /&gt;3. Descarga&lt;br /&gt;* &lt;a href="http://www.swi-prolog.org/download/stable/bin/w32pl5100.exe "&gt;&lt;span style="font-weight:bold;"&gt;swi prolog&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://download.bildung.hessen.de/lakk/netzwerk/faecher/informatik/swiprolog/setup.zip"&gt;&lt;span style="font-weight:bold;"&gt;swi prolog editor&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;- Instala primero el swi prolog&lt;br /&gt;- Luego dentro de setup.rar, que es el instalador del swi prolog editor, dale doble clic al archivo setup.exe&lt;br /&gt;- Siguiente, siguiete y listo xD!&lt;br /&gt;4. Abre el swi prolog editor y asegúrate de cerrar todos los archivos anteriormente trabajados haciendo clic en menú&lt;br /&gt;Archivo y cerrar todo.&lt;br /&gt;5. Abre el archivo proyectofinal.pl que está en C:\ llamado programa y luego en menú iniciar, dar clic a consultar.&lt;br /&gt;6. En la parte inferior, en el editor de consultas escribe lo siguiente sin comillas: "main."&lt;br /&gt;7. Listo, tenemos nuestro sistema experto ejecutándose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-9122989388972282270?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/9122989388972282270/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/01/creando-un-ejecutable-con-swi-prolog.html#comment-form' title='8 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/9122989388972282270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/9122989388972282270'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/01/creando-un-ejecutable-con-swi-prolog.html' title='Creando un ejecutable con Swi-Prolog'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_XsiwsHwYXAo/S18cQsA-dKI/AAAAAAAAAHU/efcIUsLXoU0/s72-c/generar+ejecutable.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-473794887336419445</id><published>2010-01-11T14:49:00.006-05:00</published><updated>2010-01-11T15:18:32.147-05:00</updated><title type='text'>Algoritmo de Anillo de Fichas (Token Ring) con Simulación en Java</title><content type='html'>Los procesos están organizados formando una estructura de anillo, donde a cada proceso se le asigna una posición en la estructura, de tal modo que cada proceso conoce a sus vecinos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/S0uEIBF7zzI/AAAAAAAAAG8/gApsCiyam5k/s1600-h/anillo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 177px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/S0uEIBF7zzI/AAAAAAAAAG8/gApsCiyam5k/s320/anillo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5425575449365040946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Al inicializar el anillo se le da al proceso[0] el token, que circula en todo el &lt;br /&gt;anillo. Dicha ficha circula del proceso[k] al proceso[k + 1]. Como es obvio, el token estará circulando por todos los procesos, ya que estos se encuentran referenciados mediante una suerte de lista circular.&lt;br /&gt;&lt;br /&gt;Cuando un proceso obtiene la ficha de su vecino verifica si intenta entrar a una región crítica:&lt;br /&gt;&lt;br /&gt;En caso positivo:&lt;br /&gt;   El proceso entra a la región crítica(Como se muestra en la zona marcada de rojo en la figura siguiente), hace el proceso necesario y sale de ella.&lt;br /&gt;   Después de salir pasa la ficha a lo largo del anillo:&lt;br /&gt;      No se puede entrar a una segunda región crítica con la misma ficha (token o permiso).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S0uFP25HFHI/AAAAAAAAAHE/OK-Zcb1WoSY/s1600-h/ss01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 302px; height: 320px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S0uFP25HFHI/AAAAAAAAAHE/OK-Zcb1WoSY/s320/ss01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5425576683577480306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En caso negativo:&lt;br /&gt;   La vuelve a pasar.&lt;br /&gt;&lt;br /&gt;En un instante dado solo un proceso puede estar en una región crítica. En la figura podemos ver que solo un proceso es de color verde, es decir que solo ese proceso tiene la ficha y solo él está en facultad de poder acceder a su región crítica.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S0uGAKTan0I/AAAAAAAAAHM/zZ3XEFXW7TY/s1600-h/ss02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 302px; height: 320px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S0uGAKTan0I/AAAAAAAAAHM/zZ3XEFXW7TY/s320/ss02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5425577513421807426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Si la ficha se pierde debe ser regenerada, pero es difícil detectar su perdida:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La cantidad de tiempo entre las apariciones sucesivas de la ficha en la red no está determinada, por ello es difícil decidir si está la ficha se ha perdido por algún error en un proceso o si es que está aún retenida por un proceso que está haciendo un uso intensivo de recursos.&lt;br /&gt;&lt;br /&gt;La falla de un proceso es detectada cuando su vecino intenta sin éxito pasarle la ficha:&lt;br /&gt;&lt;br /&gt;   Se lo debe eliminar del grupo y pasar la ficha al siguiente proceso activo.&lt;br /&gt;   Todos los procesos deben mantener la configuración actual del anillo.&lt;br /&gt;&lt;br /&gt;Bueno, espero haber sido claro explicando este algoritmo. Y para cerrar el post &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/RingTokens.rar"&gt;aquí&lt;/a&gt; les dejo el link de descarga del proyecto de simulación realizado en Netbeans.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-473794887336419445?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/473794887336419445/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2010/01/algoritmo-de-anillo-de-fichas-token.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/473794887336419445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/473794887336419445'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2010/01/algoritmo-de-anillo-de-fichas-token.html' title='Algoritmo de Anillo de Fichas (Token Ring) con Simulación en Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/S0uEIBF7zzI/AAAAAAAAAG8/gApsCiyam5k/s72-c/anillo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-2737693681785391826</id><published>2009-12-28T23:18:00.018-05:00</published><updated>2010-05-16T16:19:52.871-05:00</updated><title type='text'>Capturando Fechas de un JDateChooser</title><content type='html'>Entre los componentes que forman parte del paquete de JCalendar desarrollados por Kai Tödter encontramos uno que es muy útil llamado el JDateChooser. Por lo que he leído en distintas páginas en el internet, muchos tienen problemas para capturar las fechas seleccionadas.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/SzmEOBLAbjI/AAAAAAAAAFM/uleQMabCsqg/s1600-h/JCalendar.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 135px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/SzmEOBLAbjI/AAAAAAAAAFM/uleQMabCsqg/s320/JCalendar.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5420509002884738610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pues en este post vamos a aprender a capturar las fechas del JDateChooser así como darle el formato que uno desee. A lo largo de este post vamos a desarrollar la aplicación que muestro en la siguiente imagen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/SzmE0t2MzZI/AAAAAAAAAFU/6vfek2Q5_Qg/s1600-h/pantallazo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 181px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/SzmE0t2MzZI/AAAAAAAAAFU/6vfek2Q5_Qg/s320/pantallazo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5420509667712093586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En primer lugar para poder dar formato a un JDateChooser, este tiene un atributo el cuál podemos modificar de acuerdo a nuestras necesidades. La forma de cambiarlo es como se muestra en las siguientes imágenes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/SzmFY8Y7z1I/AAAAAAAAAFc/lpJ0P_tAwAg/s1600-h/pantallazo02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 203px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/SzmFY8Y7z1I/AAAAAAAAAFc/lpJ0P_tAwAg/s320/pantallazo02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5420510290091167570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez seleccionado el atributo que queremos modificar, le ingresamos el formato que mejor se ajusta a nuestras necesidades, como se muestra en la siguiente imágen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SzmFtHEDmYI/AAAAAAAAAFk/4p0fISQRhYI/s1600-h/pantallazo03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 208px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SzmFtHEDmYI/AAAAAAAAAFk/4p0fISQRhYI/s320/pantallazo03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5420510636553771394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pero aún haciendo esto, aún no se ha explicado la forma de capturar la fecha. Bueno, una forma de hacerlo es como muestro en el siguiente bloque de código:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;try {&lt;br /&gt;     String formato = comboFormato.getSelectedItem().toString();&lt;br /&gt;     //Formato&lt;br /&gt;     Date date = SelectorFecha.getDate();&lt;br /&gt;     SimpleDateFormat sdf = new SimpleDateFormat(formato);&lt;br /&gt;     txtFechaSeleccionada.setText(sdf.format(date));&lt;br /&gt;} catch(NullPointerException ex) {&lt;br /&gt;     JOptionPane.showMessageDialog(this, "Al menos selecciona una fecha válida!", "Error!", JOptionPane.INFORMATION_MESSAGE);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Con eso podremos obtener la fecha y colocarla en una etiqueta de texto o como parte de una cosulta SQL.&lt;br /&gt;&lt;br /&gt;Para obtener el día, el mes o el año por separado podemos hacer lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;int año = SelectorFecha.getCalendar().get(Calendar.YEAR);&lt;br /&gt;int mes = SelectorFecha.getCalendar().get(Calendar.MONTH) + 1;&lt;br /&gt;int dia = SelectorFecha.getCalendar().get(Calendar.DAY_OF_MONTH);&lt;br /&gt;txtDía.setText("" + dia);&lt;br /&gt;txtMes.setText("" + mes);&lt;br /&gt;txtAño.setText("" + año);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Con eso bastará para poder obtener la fecha y darle el formato que se desee.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/SzmIdTQlgsI/AAAAAAAAAF0/pATZ02Ca0mk/s1600-h/pantallazo05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/SzmIdTQlgsI/AAAAAAAAAF0/pATZ02Ca0mk/s320/pantallazo05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5420513663484527298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aún así, si no nos gusta usar los componentes de JCalendar podemos escribir nuestro propio calendario. Yo hice uno, el cuál se puede apreciar en la imágen a continuación:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SzmHfnSluEI/AAAAAAAAAFs/03o54XwdnrQ/s1600-h/pantallazo04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 187px; height: 199px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SzmHfnSluEI/AAAAAAAAAFs/03o54XwdnrQ/s320/pantallazo04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5420512603709749314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No es la gran cosa, pero con un poco más de tiempo se puede ir mejorando, hasta obtener resultados óptimos.&lt;br /&gt;&lt;br /&gt;Bueno, para cerrar el post les dejo el &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/JCalendar.rar"&gt;link de descarga&lt;/a&gt; del proyecto que fué realizado en &lt;a href="http://netbeans.org/downloads/index.html"&gt;Netbeans IDE 6.8&lt;/a&gt; usando &lt;a href="http://www.toedter.com/en/jcalendar/index.html"&gt;jcalendar-1.3.3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-2737693681785391826?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/2737693681785391826/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/capturando-fechas-de-un-jdatechooser.html#comment-form' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2737693681785391826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/2737693681785391826'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/capturando-fechas-de-un-jdatechooser.html' title='Capturando Fechas de un JDateChooser'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/SzmEOBLAbjI/AAAAAAAAAFM/uleQMabCsqg/s72-c/JCalendar.gif' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-5255191778810507292</id><published>2009-12-16T09:13:00.016-05:00</published><updated>2010-09-09T10:37:06.436-05:00</updated><title type='text'>Alumnos de Informática de la Universidad Nacional de Trujillo desarrollan un prototipo de los TALON Military Robots™</title><content type='html'>Alumnos de la Universidad Nacional de Trujillo lograron desarrollar un primer prototipo, bastante elemental, de los conocidos Robots Talon de Foster Miller Inc.&lt;br /&gt;&lt;br /&gt;Con motivo de la IV Semana de la Ciencia de la Computación, alumnos de la escuela de Informática de la Universidad Nacional de Trujillo lograron desarrollar un robot para la exploración de terrenos desconocidos mediante telecontrol. La plataforma sobre la que fué desarrollado el proyecto fué Java, gracias a sus altas capacidades de conectividad así como sus constructores de alto nivel que permitieron la transferencia de datos multimedia de una manera eficaz.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/TIWKBgN3LYI/AAAAAAAAAUU/sYhiqgW5tHs/s1600/Imagen113.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/TIWKBgN3LYI/AAAAAAAAAUU/sYhiqgW5tHs/s320/Imagen113.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para el control de los mecanismos, se escribieron programas para Microcontroladores PIC de Microchip, los cuales gracias a sus manera sencilla de adquirirlos así como las posibilidades de ajustarlos a proyectos tan diversos hicieron de estos los candidatos ideales para esta parte de la arquitectura general del proyecto.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Los recuadros rojos indican las disposiciones de las cámaras en el robot, el recuadro verde indica la ubicación de la placa de control, el recuadro azul es el Modem-Router encargado de la transmisión de datos, y en amarillo se muestra la pantalla del control de mando.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/SyjvucVO7UI/AAAAAAAAAE0/7J3Sk0lH1ZM/s1600-h/robot1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415842133071293762" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/SyjvucVO7UI/AAAAAAAAAE0/7J3Sk0lH1ZM/s320/robot1.jpg" style="cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 286px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Comunicacion USB, Protocolos de tiempo real así como una diversidad de frameworks y mecanismos que nos provee Java fueron la base para estructurar este proyecto en su primera fase.&lt;br /&gt;&lt;br /&gt;El Robot cuenta con  cámaras, entre ellas una de alta resolución, un micrófono, una lámpara de leds, un  haz láser y dispositivos de control de giro lo cuál le permite tener un conocimiento único del entorno que explora, puesto que la cámara que lleva en la parte superior tiene un giro de 360º sobre su eje z. Este giro está acompañado de una lámpara que le permitirá iluminar terrenos carentes de luz. En la parte delantera cuenta con un dispositivo acoplado a una cámara que tiene una capacidad de giro de 270º en horizontal y 60º en vertical. Todo esto añadido a la transmisión de audio nos permite tener un conocimiento del ambiente explorado casi tan bueno como si estuvieramos presentes ahí.&lt;br /&gt;&lt;br /&gt;La imagen que se muestra a continuación es una muestra de lo que se visualiza en la estación de mando.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_XsiwsHwYXAo/SyjvYNQhF0I/AAAAAAAAAEs/DWHnqNNjAow/s1600-h/pantallas.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415841751067858754" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/SyjvYNQhF0I/AAAAAAAAAEs/DWHnqNNjAow/s320/pantallas.JPG" style="cursor: pointer; display: block; height: 240px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La transmisión de video en tiempo real de 4 orígenes o fuentes de manera concurrente fué uno de los principales problemas a solucionar. Otro fué el accionar de los mecanismos para lo cual se recurrio a la comunicación USB.&lt;br /&gt;&lt;br /&gt;La transmisión de datos se basa en el estándar IEEE 802.11 y el control de los mecanismos del robot están bajo el protocolo USB. El robot lleva consigo una computadora portátil, la cuál en su primera fase se encarga de la emisión de los datos multimedia así como de la comunicación con la placa de control. En una siguiente fase está portátil realizará un tipo de procesamiento que prefiero aún no describir.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/Syjx4dombpI/AAAAAAAAAE8/qbQ9l3HU1Gg/s1600-h/robot2.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415844504242908818" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/Syjx4dombpI/AAAAAAAAAE8/qbQ9l3HU1Gg/s320/robot2.jpg" style="cursor: pointer; display: block; height: 240px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como se recuerda, todo está programado en Java, usando Netbeans 6.7 IDE, pero por el uso de determinadas librerías con JNI no se puede hablar de portabilidad, pero sería interesante desarrollar este tipo de proyectos sobre alguna plataforma libre (Como GNU|Debian, mi favorita).&lt;br /&gt;&lt;br /&gt;Para cerrar el post les comento que se está trabajando, a la fecha, en un segundo prototipo que se asemjará más a los Sword robots de Foster Miller Inc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_XsiwsHwYXAo/SyjylxHw8ZI/AAAAAAAAAFE/dJl0EF2sjag/s1600-h/robot3.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5415845282568008082" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/SyjylxHw8ZI/AAAAAAAAAFE/dJl0EF2sjag/s320/robot3.jpg" style="cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 240px;" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-5255191778810507292?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/5255191778810507292/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/alumnos-de-informatica-de-la.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5255191778810507292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5255191778810507292'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/alumnos-de-informatica-de-la.html' title='Alumnos de Informática de la Universidad Nacional de Trujillo desarrollan un prototipo de los TALON Military Robots™'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/TIWKBgN3LYI/AAAAAAAAAUU/sYhiqgW5tHs/s72-c/Imagen113.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-1517024513200855539</id><published>2009-12-15T10:41:00.029-05:00</published><updated>2010-05-22T09:42:43.504-05:00</updated><title type='text'>Procesamiento Digital de Audio. Graficador de Espectros de audio escrito en Java</title><content type='html'>El procesamiento digital de señales es un área de la ingeniería que se dedica al análisis y procesamiento de señales (audio, voz, imágenes, video) que son discretas. Aunque comúnmente las señales en la naturaleza nos llegan en forma analógica, también existen casos en que estas son por su naturaleza digitales, por ejemplo, las edades de un grupo de personas, el estado de una válvula en el tiempo (abierta/cerrada), etc.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S32xfDzEpoI/AAAAAAAAAI0/6-jCk66iNcM/s1600-h/01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 87px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S32xfDzEpoI/AAAAAAAAAI0/6-jCk66iNcM/s320/01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5439699072087008898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se puede procesar una señal para obtener una disminución del nivel de ruido, para mejorar la presencia de determinados matices, como los graves o los agudos y se realiza combinando los valores de la señal para generar otros nuevos.&lt;a href="http://es.wikipedia.org/wiki/Procesamiento_digital_de_se%C3%B1ales"&gt;[1]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El procesamiento digital de audio es un tipo de procesamiento digital de señales especializado en el tratamiento de la señal de audio.Una señal digital no es audible, ya que requiere ser decodificada antes de su reproducción.&lt;a href="http://es.wikipedia.org/wiki/Procesamiento_digital_de_sonido"&gt;[2]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En este post vamos a hablar acerca de la graficación del espectro de audio de un archivo *.wav o *.aif. Pero antes de explicar cómo se realiza la graficación de audio en java, tenemos que tener en cuenta una serie de conceptos que nos ayudarán a comprender mejor la esencia de este proceso.&lt;br /&gt;&lt;br /&gt;Primero voy a definir lo que a partir de ahora será &lt;span style="font-weight:bold;"&gt;Audio Digital&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AUDIO DIGITAL:&lt;/span&gt; Proceso de representar una señal de audio como un flujo de&lt;br /&gt;datos numéricos para efectos de almacenamiento, procesamiento o&lt;br /&gt;transmisión. De esta manera prácticamente se elimina la posibilidad de&lt;br /&gt;ruidos o errores en la lectura.&lt;br /&gt;&lt;br /&gt;Para poder graficar un archivo de audio lo primero que tenemos que hacer es acceder a los datos numéricos que representan al fichero de audio como una estructura digital. Para eso tendremos que leer el archivo como indico en el siguiente segmento de codigo:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;int totalFramesLeidos = 0;&lt;br /&gt;int totalBytesLeidos = 0;&lt;br /&gt;try {&lt;br /&gt;    AudioInputStream flujoEntradaAudio = AudioSystem.getAudioInputStream(fichero);&lt;br /&gt;    int bytesPorFrame = flujoEntradaAudio.getFormat().getFrameSize();&lt;br /&gt;    int numBytes = 1024 * bytesPorFrame;&lt;br /&gt;    byte[] audioBytes = new byte[numBytes];&lt;br /&gt;    // longitud de archivo de audio en bytes&lt;br /&gt;    int longitudArchivoBytes=(int)flujoEntradaAudio.getFormat().getFrameSize()*(int)flujoEntradaAudio.getFrameLength();&lt;br /&gt;    // objeto datos mas informacion ver clase Datos.java&lt;br /&gt;    Datos datos = new Datos(longitudArchivoBytes,flujoEntradaAudio.getFormat().isBigEndian());&lt;br /&gt;    byte[] datosTemporal=new byte[longitudArchivoBytes];&lt;br /&gt;    int pos=0;&lt;br /&gt;    /* el siguiente procedimiento lee los bytes del archivo de audio a memoria */&lt;br /&gt;    try {&lt;br /&gt;        int numeroBytesLeidos = 0;&lt;br /&gt;        int numeroFramesLeidos = 0;&lt;br /&gt;        while ((numeroBytesLeidos = flujoEntradaAudio.read(audioBytes)) != -1) {&lt;br /&gt;            numeroFramesLeidos = numeroBytesLeidos / bytesPorFrame;&lt;br /&gt;            totalFramesLeidos += numeroFramesLeidos;&lt;br /&gt;            System.arraycopy(audioBytes, 0, datosTemporal, pos, numeroBytesLeidos);&lt;br /&gt;            pos=pos+numeroBytesLeidos;&lt;br /&gt;        }&lt;br /&gt;        datos.llenarByte(datosTemporal);&lt;br /&gt;        //datosVoz=new double[longitudArchivoBytes/bytesPorFrame];&lt;br /&gt;        datosVoz = new ArrayList&amp;lt;Double&gt;();&lt;br /&gt;        datosVoz=datos.convertirByteADouble(longitudArchivoBytes/bytesPorFrame);&lt;br /&gt;        frecuency.setMaximum((int) flujoEntradaAudio.getFrameLength()/100);&lt;br /&gt;        int min = frecuency.getMinimum();&lt;br /&gt;        int max = frecuency.getMaximum();&lt;br /&gt;        frecuency.setValue((min+max)/2);&lt;br /&gt;        ((PanelDeslizable)newContentPane).setIntervalo(frecuency.getValue());&lt;br /&gt;        if(flujoEntradaAudio.getFormat().isBigEndian()) {&lt;br /&gt;            System.out.println("BigEndian");&lt;br /&gt;        } else {&lt;br /&gt;            System.out.println("LittleEndian");&lt;br /&gt;        }&lt;br /&gt;        INFORMACION = flujoEntradaAudio.getFormat().toString();&lt;br /&gt;        //obtiene la frecuencia de sampleo&lt;br /&gt;        FRECUENCIA=(int)flujoEntradaAudio.getFormat().getSampleRate();&lt;br /&gt;        ((PanelDeslizable)newContentPane).setDatos(datosVoz);&lt;br /&gt;        ((PanelDeslizable)newContentPane).repaint();&lt;br /&gt;    } catch (Exception ex) {&lt;br /&gt;    }&lt;br /&gt;}catch(Exception e) {&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bueno, en el segmento de código anterior, lo primero que se hace es leer el archivo de audio, luego ir leyendo por frames para poder tener la data en un vector el cual será luego procesado de acuerdo a lo que se quiera obtener.Con eso será suficiente para poder acceder al vector de datos numéricos o sample (Cada uno de los valores que se obtienen del proceso de sampleo. Cada una está cuantizada en una cantidad determinada de bits) que representan un archivo de audio.&lt;br /&gt;&lt;br /&gt;Se observa también la presencia de una clase, la clase Datos la cuál se encarga de realizar las conversiones respectivas del tipo de datos puesto que un archivo wav es un archivo binario y nosotros procesaremos la data con un tipo de dato más adecuado (Double por ejemplo).&lt;br /&gt;&lt;br /&gt;El código que muestro a continuación pertenece a esta clase Datos:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;package com.blogspot.rolandopalermo.util;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class Datos {&lt;br /&gt;&lt;br /&gt;    byte[] bits ;&lt;br /&gt;    boolean formato;  // para el formato bigEndian y littleEndian&lt;br /&gt;    double mayor, menor;&lt;br /&gt;&lt;br /&gt;    public  Datos(int tamano, boolean formato) {&lt;br /&gt;        bits = new byte[tamano];&lt;br /&gt;        this.formato = formato;&lt;br /&gt;        mayor = 0;&lt;br /&gt;        menor = 0;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void llenarByte(byte[] bits) {&lt;br /&gt;        this.bits = bits;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /* ejemplo bits[2]=2 (00000010) bits[3]=3 (00000011)&lt;br /&gt;     se aplica bits[2]&amp;lt;&amp;lt;8 o sea 10 00000000 , luego 11111111(0x000000FF) &amp; bits[3]|bits[2]&lt;br /&gt;     en total da 10 00000011  que es el numero 515 , este es un short de 16 bits , han entrado&lt;br /&gt;     dos bytes en uno (short[i]=contacenar byte[i]+byte[i+1])&lt;br /&gt;     los valores negativos estan en complemento a 2&lt;br /&gt;     */&lt;br /&gt;&lt;br /&gt;    public List&amp;lt;Double&amp;gt; convertirByteADouble(int size) {&lt;br /&gt;        List&amp;lt;Double&amp;gt; arrayDouble = new ArrayList&amp;lt;Double&amp;gt;();&lt;br /&gt;        //double[] arrayDouble = new double[bits.length/2];&lt;br /&gt;        if (formato==true) {&lt;br /&gt;            int temp = 0x00000000;&lt;br /&gt;            for (int i = 0, j = 0; j &amp;lt; size ; j++, temp = 0x00000000) {&lt;br /&gt;                temp=(int)bits[i++]&amp;lt;&amp;lt;8;//System.out.println("temp = "+ temp);&lt;br /&gt;                temp |= (int) (0x000000FF &amp; bits[i++]);&lt;br /&gt;                //arrayDouble[j]=(double)temp;&lt;br /&gt;                arrayDouble.add(j, (double)temp);&lt;br /&gt;            }&lt;br /&gt;            return arrayDouble;&lt;br /&gt;        }&lt;br /&gt;        if(formato==false) {  // si el formato es littleEndian&lt;br /&gt;            int temp = 0x00000000;&lt;br /&gt;            for (int i = 0, j = 0; j &amp;lt; size ; j++, temp = 0x00000000) {&lt;br /&gt;                temp=(int)bits[i+1]&amp;lt;&amp;lt;8;//System.out.println("temp = "+ temp);&lt;br /&gt;                temp |= (int) (0x000000FF &amp; bits[(i)]);&lt;br /&gt;                i=i+2;&lt;br /&gt;                arrayDouble.add(j, (double)temp);&lt;br /&gt;                //calcular mayor y menor esto me servira para establecer&lt;br /&gt;                //los parametros en el eje y para la grafica&lt;br /&gt;                if(mayor&amp;lt;arrayDouble.get(j)) {&lt;br /&gt;                    mayor=arrayDouble.get(j);&lt;br /&gt;                }&lt;br /&gt;                if(menor&amp;gt;arrayDouble.get(j)) {&lt;br /&gt;                    menor=arrayDouble.get(j);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return arrayDouble;&lt;br /&gt;        } else {&lt;br /&gt;            System.out.println("Orden de Bytes desconocido o no soportado");&lt;br /&gt;        }&lt;br /&gt;        return arrayDouble;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La forma de graficarlos dependerá de las necesidades que se tenga así como de otros factores como por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;FRECUENCIA DE SAMPLEO O MUESTREO:&lt;/span&gt; Velocidad, en Hertz, a la cual se extraen las muestras de una señal de audio. Tiene directa relación con el ancho de banda que se obtendrá. Mientras mayor sea la Frecuencia de sampleo, mejor es la respuesta de agudos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CUANTIZACIÓN:&lt;/span&gt; Es el proceso de asignar a una escala "redondeando al peldaño más cercano" el valor de cada muestra. Esta cantidad está determinada por el número de bits utilizados. La cuantización tiene directa relación con el rango dinámico (nivel de ruido) de la señal.&lt;br /&gt;&lt;br /&gt;Evidentemente todos estos valores tienen que estar presentes como parámetros al momento de graficar el espectrograma que representará al archivo de audio. Yo recomiendo sean atributos de la clase encargada de mostrar los datos en modo gráfico. En el caso del proyecto que realizé, esta clase tiene el valor de PanelDeslizable (Deslizable puesto que si el gráfico es más grande que la pantalla entonces automáticamente aparecerá un scroll que nos permitirá ubicarnos en la posición que deseemos). El código de esta clase la muestro a continuación:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;package com.blogspot.rolandopalermo.gui;&lt;br /&gt;&lt;br /&gt;import java.awt.BorderLayout;&lt;br /&gt;import java.awt.Color;&lt;br /&gt;import java.awt.Dimension;&lt;br /&gt;import java.awt.Graphics;&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;import java.awt.image.BufferedImage;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.List;&lt;br /&gt;import javax.imageio.ImageIO;&lt;br /&gt;import javax.swing.JPanel;&lt;br /&gt;import javax.swing.JScrollPane;&lt;br /&gt;import javax.swing.Timer;&lt;br /&gt;&lt;br /&gt;//@author Rolando&lt;br /&gt;&lt;br /&gt;public class PanelDeslizable extends JPanel {&lt;br /&gt;&lt;br /&gt;    private Dimension area; //indicates area taken up by graphics&lt;br /&gt;    //private Vector&amp;lt;Rectangle&amp;gt; circles; //coordinates used to draw graphics&lt;br /&gt;    private JPanel drawingPane;&lt;br /&gt;    private Timer reloj;&lt;br /&gt;    private List&amp;lt;Double&amp;gt; datos;&lt;br /&gt;    private int w;&lt;br /&gt;    private int h;&lt;br /&gt;    private static int x0 = 15;&lt;br /&gt;    private int y0;&lt;br /&gt;    private int intervalo;&lt;br /&gt;    private int temporizador;&lt;br /&gt;    private int fin;&lt;br /&gt;    private double  escalaX;&lt;br /&gt;    private double escalaY;&lt;br /&gt;    private Color gridcolor;&lt;br /&gt;    private Color ejescolor;&lt;br /&gt;    private Color texto;&lt;br /&gt;    private Color espectrogramac;&lt;br /&gt;    private Color background;&lt;br /&gt;    private Color player;&lt;br /&gt;    private boolean dibujargrid;&lt;br /&gt;    private boolean dibujarejes;&lt;br /&gt;    private boolean dibujarespectrograma;&lt;br /&gt;    private String informacion;&lt;br /&gt;&lt;br /&gt;    public PanelDeslizable(final int w, final int h) {&lt;br /&gt;        super(new BorderLayout());&lt;br /&gt;&lt;br /&gt;        background = Color.BLACK;&lt;br /&gt;        gridcolor = new Color(120, 176, 145);&lt;br /&gt;        ejescolor = Color.YELLOW;&lt;br /&gt;        texto = Color.YELLOW;&lt;br /&gt;        player = Color.RED;&lt;br /&gt;        //espectrogramac = new Color(85, 255, 255);&lt;br /&gt;        espectrogramac = Color.GREEN;&lt;br /&gt;        &lt;br /&gt;        area = new Dimension(0,0);&lt;br /&gt;&lt;br /&gt;        //Set up the drawing area.&lt;br /&gt;        drawingPane = new DrawingPane();&lt;br /&gt;        drawingPane.setBackground(background);&lt;br /&gt;        //drawingPane.addMouseListener(this);&lt;br /&gt;&lt;br /&gt;        //Put the drawing area in a scroll pane.&lt;br /&gt;        JScrollPane scroller = new JScrollPane(drawingPane);&lt;br /&gt;        scroller.setPreferredSize(new Dimension(200,200));&lt;br /&gt;&lt;br /&gt;        add(scroller, BorderLayout.CENTER);&lt;br /&gt;&lt;br /&gt;        datos = null;&lt;br /&gt;&lt;br /&gt;        this.w  = w;&lt;br /&gt;        this.h  = h;&lt;br /&gt;        this.y0 = h/2;&lt;br /&gt;&lt;br /&gt;        intervalo = 1;&lt;br /&gt;&lt;br /&gt;        temporizador = 0;&lt;br /&gt;        fin = 0;&lt;br /&gt;&lt;br /&gt;        escalaX = 1;&lt;br /&gt;        escalaY = 1;&lt;br /&gt;&lt;br /&gt;        dibujargrid = true;&lt;br /&gt;        dibujarejes = true;&lt;br /&gt;        dibujarespectrograma = false;&lt;br /&gt;&lt;br /&gt;        informacion = null;&lt;br /&gt;&lt;br /&gt;        reloj = new Timer (1, new ActionListener() {&lt;br /&gt;            public void actionPerformed(ActionEvent e) {&lt;br /&gt;                temporizador = temporizador + 1;&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /** The component inside the scroll pane. */&lt;br /&gt;    class DrawingPane extends JPanel {&lt;br /&gt;        @Override&lt;br /&gt;        protected void paintComponent(Graphics g) {&lt;br /&gt;            super.paintComponent(g);&lt;br /&gt;            w  = getSize().width;&lt;br /&gt;            h  = getSize().height;&lt;br /&gt;            y0 = h/2;&lt;br /&gt;            if(dibujargrid) {&lt;br /&gt;                graficarGrid(g);&lt;br /&gt;            }&lt;br /&gt;            if(dibujarejes) {&lt;br /&gt;                graficarEjes(g);&lt;br /&gt;            }&lt;br /&gt;            if(dibujarespectrograma) {&lt;br /&gt;                graficarEscpectrograma(g);&lt;br /&gt;            }&lt;br /&gt;            if(informacion!=null) {&lt;br /&gt;                g.setColor(texto);&lt;br /&gt;                g.drawString(informacion, 20, 20);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void graficarGrid(Graphics g) {&lt;br /&gt;        g.setColor(gridcolor);&lt;br /&gt;        for( int i=0; i &amp;lt; w; i+=15) {&lt;br /&gt;            for(int j=0; j&amp;lt;h; j+=40) {&lt;br /&gt;                g.drawLine(i,j,i,h);&lt;br /&gt;                g.drawLine(i,j,w,j);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void graficarEjes(Graphics g) {&lt;br /&gt;        g.setColor(ejescolor);&lt;br /&gt;        linea(0,0,w,0,g);&lt;br /&gt;        linea(0,y0,0,-y0,g);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void graficarEscpectrograma(Graphics g) {&lt;br /&gt;        g.setColor(espectrogramac);&lt;br /&gt;        int length = datos.size();&lt;br /&gt;        int[] puntoP = new int[2];&lt;br /&gt;        int i, xi=0,xf=0,yi=0,yf=0;&lt;br /&gt;        for(i=0; i&amp;lt;length-intervalo; i+=intervalo) {&lt;br /&gt;            puntoP[0]=(int) (i * escalaX);&lt;br /&gt;            puntoP[1]=(int) (datos.get(i) * escalaY);&lt;br /&gt;            xi = puntoP[0];&lt;br /&gt;            yi = puntoP[1];&lt;br /&gt;            puntoP[0]=(int) ((i + intervalo) * escalaX);&lt;br /&gt;            puntoP[1] = (int) (datos.get(i+intervalo) * escalaY);&lt;br /&gt;            xf = puntoP[0];&lt;br /&gt;            yf = puntoP[1];&lt;br /&gt;            linea(xi, yi, xf, yf, g);&lt;br /&gt;        }&lt;br /&gt;        fin = xf;&lt;br /&gt;        if(xf&amp;gt;w) {&lt;br /&gt;            area.width = xf+100;&lt;br /&gt;            drawingPane.setPreferredSize(area);&lt;br /&gt;            drawingPane.revalidate();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;  &lt;br /&gt;    public void iniciarReproduccion() {&lt;br /&gt;        //setTocar(true);&lt;br /&gt;        temporizador = 0;&lt;br /&gt;        reloj.start();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void detenerReproduccion() {&lt;br /&gt;        reloj.stop();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void reiniciarReproduccion() {&lt;br /&gt;        temporizador = 0;&lt;br /&gt;        reloj.stop();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void save(File fichero) {&lt;br /&gt;        BufferedImage imagen = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);&lt;br /&gt;        Graphics g = imagen.getGraphics();&lt;br /&gt;        drawingPane.paint(g);&lt;br /&gt;        // Escribimos la imagen en el archivo.&lt;br /&gt;        try {&lt;br /&gt;            ImageIO.write(imagen, "jpg", fichero);&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;            System.out.println("Error de escritura");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void ajustarDimension() {&lt;br /&gt;        area.width=0;&lt;br /&gt;        drawingPane.setPreferredSize(area);&lt;br /&gt;        drawingPane.revalidate();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setDibujargrid(boolean dibujargrid) {&lt;br /&gt;        this.dibujargrid = dibujargrid;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setGridcolor(Color gridcolor) {&lt;br /&gt;        this.gridcolor = gridcolor;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;    *  Dibuja una linea desde (x1,y1) hasta (x2,y2).&lt;br /&gt;    *  @param x1 Coordenada x del punto de origen.&lt;br /&gt;    *  @param y1 Coordenada y del punto de origen.&lt;br /&gt;    *  @param x2 Coordenada x del punto de destino.&lt;br /&gt;    *  @param y2 Coordenada y del punto de destino.&lt;br /&gt;    */&lt;br /&gt;    public void linea(double x1, double y1, double x2, double y2, Graphics g) {&lt;br /&gt;        g.drawLine((int)Math.round(x1+x0),&lt;br /&gt;                (int)Math.round(y0-y1),&lt;br /&gt;                (int)Math.round(x2+x0),&lt;br /&gt;                (int)Math.round(y0-y2));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setInformacion(String informacion) {&lt;br /&gt;        this.informacion = informacion;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setDibujarejes(boolean dibujarejes) {&lt;br /&gt;        this.dibujarejes = dibujarejes;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setDibujarespectrograma(boolean dibujarespectrograma) {&lt;br /&gt;        this.dibujarespectrograma = dibujarespectrograma;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setDatos(List&amp;lt;Double&amp;gt; datos) {&lt;br /&gt;        this.datos = datos;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setIntervalo(int intervalo) {&lt;br /&gt;        this.intervalo = intervalo;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setEscalaY(double escalaY) {&lt;br /&gt;        this.escalaY = escalaY;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setEscalaX(double escalaX) {&lt;br /&gt;        this.escalaX = escalaX;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Los archivos que se pueden procesar de esta forma pueden tener el formato WAV o AIF como se había mencionado anteriormente.&lt;br /&gt;&lt;br /&gt;Acá les dejo algunos screenshots de la aplicación que he escrito en java para graficar espectros de audio:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/S3zd5FaYlEI/AAAAAAAAAIc/JMhMCV7uW3U/s1600-h/box_winxp_family_disc-128x128.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/S3zd5FaYlEI/AAAAAAAAAIc/JMhMCV7uW3U/s320/box_winxp_family_disc-128x128.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439466422731838530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i168.photobucket.com/albums/u175/Rolocop/ss4.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i168.photobucket.com/albums/u175/Rolocop/ss3.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i168.photobucket.com/albums/u175/Rolocop/ss2.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i168.photobucket.com/albums/u175/Rolocop/ss1.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/S3zeB-osbFI/AAAAAAAAAIk/EVa6JSgnWAU/s1600-h/box_debian_disc-128x128.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/S3zeB-osbFI/AAAAAAAAAIk/EVa6JSgnWAU/s320/box_debian_disc-128x128.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5439466575531633746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i168.photobucket.com/albums/u175/Rolocop/ss6.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i168.photobucket.com/albums/u175/Rolocop/ss5.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;En la imágen que muestro a continuación se aprecia el árbol de clases del proyecto el cuál fué realizado en netbeans:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/S3zY69fCE5I/AAAAAAAAAIU/g9tnJIinEQA/s1600-h/arbol.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 274px; height: 320px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/S3zY69fCE5I/AAAAAAAAAIU/g9tnJIinEQA/s320/arbol.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5439460957405451154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A continuación dejo el código fuente para que lo puedan leer y si es posible continuar con el trabajo puesto que hay muchas cosas por mejorar.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/tecnologiaenperu/home/SpectrumAnalyzer%E2%84%A2.rar"&gt;&lt;img src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Y aquí algunos ejemplos para que puedan probar el programa&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/tecnologiaenperu/home/Samples.rar"&gt;&lt;img src="http://i179.photobucket.com/albums/w282/locowarcraft/download_button.gif" border="0" alt="Photobucket"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Pueden también visitar el blog un gran amigo, &lt;a href="http://jc-info.blogspot.com/2009/02/lectura-y-graficacion-de-senales-de.html" target="_blank"&gt;Jorge Valverde&lt;/a&gt;, quien es un destacado investigador. Ahí podrán encontrar una explicación un poco más detallada de este proceso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-1517024513200855539?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/1517024513200855539/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/procesamiento-digital-de-audio.html#comment-form' title='12 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/1517024513200855539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/1517024513200855539'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/procesamiento-digital-de-audio.html' title='Procesamiento Digital de Audio. Graficador de Espectros de audio escrito en Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_XsiwsHwYXAo/S32xfDzEpoI/AAAAAAAAAI0/6-jCk66iNcM/s72-c/01.jpg' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-5405079553360120732</id><published>2009-12-07T23:53:00.002-05:00</published><updated>2009-12-11T22:24:41.599-05:00</updated><title type='text'>Algoritmo de Lamport para la Sincronización de Relojes Lógicos en Sistemas Distribuidos. Simulación en Java</title><content type='html'>La sincronización en sistemas distribuidos consiste en garantizar que los procesos se ejecuten en forma cronológica y a la misma vez respetar el orden de los eventos dentro del sistema. En el caso de sistemas de una sola CPU, este problema se resuelve usando semáforos, pero en sistemas de múltiples CPUs la solución ya implica el uso de otros métodos o algoritmos, para garantizar no solo la comunicación entre procesos sino también la forma como estos cooperan entre sí.&lt;br /&gt;&lt;br /&gt;Esta sincronización, en sistemas distribuidos, se hace más compleja que en los sistemas centralizados puesto que la información y el procesamiento se mantienen en diferentes nodos.&lt;br /&gt;&lt;br /&gt;La sincronización de relojes en sistemas distribuidos nos permite garantizar que los procesos se ejecutan cronológicamente y además respetar el orden de los eventos dentro del sistema.&lt;br /&gt;&lt;br /&gt;Las computadoras poseen un circuito para el registro del tiempo conocido como dispositivo reloj. Es un cronómetro consistente en un cristal de cuarzo de precisión sometido a una tensión eléctrica.&lt;br /&gt;&lt;br /&gt;Para una computadora y un reloj no interesan pequeños desfasajes del reloj porque:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Todos los procesos de la máquina usan el mismo reloj y tendrán consistencia interna.&lt;br /&gt;Importan los tiempos relativos.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para varias computadoras con sus respectivos relojes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Es imposible garantizar que los cristales de computadoras distintas oscilen con la misma frecuencia.&lt;br /&gt;Habrá una pérdida de sincronía en los relojes (de software), es decir que tendrán valores distintos al ser leidos.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;La diferencia entre los valores del tiempo se llama distorsión del reloj y podría generar fallas en los programas dependientes del tiempo. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego de esta pequeña introducción a la sincronización vamos a hablar acerca del Algoritmo de Lamport. Y es que en este post hablaremos de la propuesta que hizo el científico en computación &lt;span style="font-weight:bold;"&gt;Dr Leslie Lamport&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;Lamport señaló que la sincronización de relojes no tiene que ser absoluta.&lt;/center&gt;&lt;br /&gt;Si 2 procesos no interactúan no es necesario que sus relojes estén sincronizados.&lt;br /&gt;Generalmente lo importante no es que los procesos estén de acuerdo en la hora, pero sí importa que coincidan en el orden en que ocurren los eventos.&lt;br /&gt;&lt;br /&gt;Y es aquí dónde aparece el concepto de reloj lógico. Un reloj lógico de Lamport es un contador software que se incrementa monótonamente, cuyos valores no necesitan tener ninguna relación particular con ningún reloj físico.&lt;br /&gt;&lt;br /&gt;Para sincronizar los relojes lógicos, Lamport definió la relación ocurre antes de(happens-before):&lt;br /&gt;&lt;br /&gt;Si “a” y “b” son eventos en el mismo proceso y “a” ocurre antes de “b”, entonces “a –&gt; b” es verdadero.&lt;br /&gt;“Ocurre antes de” es una relación transitiva:&lt;br /&gt;Si “a –&gt; b” y “b –&gt; c”, entonces “a –&gt; c”.&lt;br /&gt;Si dos eventos “x” e “y” están en procesos diferentes que no intercambian mensajes, entonces “x –&gt; y” no es verdadero, pero tampoco lo es “y –&gt; x”:&lt;br /&gt;Se dice que son eventos concurrentes.&lt;br /&gt;&lt;br /&gt;Necesitamos una forma de medir el tiempo tal que a cada evento “a”, le podamos asociar un valor del tiempo “C(a)” en el que todos los procesos estén de acuerdo:&lt;br /&gt;&lt;br /&gt;Se debe cumplir que:&lt;br /&gt;   o Si “a –&gt; b” entonces “C(a) &lt; C(b)”.&lt;br /&gt;   o El tiempo del reloj, “C”, siempre debe ir hacia adelante (creciente), y nunca hacia atrás (decreciente).&lt;br /&gt;&lt;br /&gt;El &lt;i&gt;algoritmo de Lamport&lt;/i&gt; asigna tiempos a los eventos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/Sx0lHtp38ZI/AAAAAAAAAD4/hajB4C5Tj3k/s1600-h/imageL6G.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 203px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/Sx0lHtp38ZI/AAAAAAAAAD4/hajB4C5Tj3k/s320/imageL6G.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5412523141613744530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez descrito el algoritmo, pasaré a mostrar su implementación en java. La primera imágen corresponde a una simulación similar a la mostrada en la imágen anterior y que puede ayudarnos a comprender mejor el funcionamiento de este algoritmo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/Sx3Z6xXJ9uI/AAAAAAAAAEA/1YYl455bufc/s1600-h/Sin+t%C3%ADtulo-Color+real-01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 233px; height: 320px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/Sx3Z6xXJ9uI/AAAAAAAAAEA/1YYl455bufc/s320/Sin+t%C3%ADtulo-Color+real-01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5412721930875303650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En la imágen siguiente, vemos que al querer enviar un mensaje del proceso 3 en un instante de tiempo 4 al proceso 2 en un instante de tiempo 3, el algoritmo exige la sincronización de los relojes logicos de los CPUs donde se encuentran los procesos anteriormente numerados. Basta dar clic en el botón sincronizar para ver los cambios en los vectores de tiempo de ambos procesos, mientras que el resto de procesos no sufren alteración alguna, tal y como lo describe el algoritmo de Lamport.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/Sx5-iyX2uOI/AAAAAAAAAEQ/NBuuf2dGVr8/s1600-h/Sin+t%C3%ADtulo-Color+real-01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 234px; height: 320px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/Sx5-iyX2uOI/AAAAAAAAAEQ/NBuuf2dGVr8/s320/Sin+t%C3%ADtulo-Color+real-01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5412902938248394978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero que la explicación y esta simulación(que puedes descargar &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/SimulacionLamport.rar"&gt;aquí&lt;/a&gt;) te sean de utilidad. Muy pronto postearé acerca de otros algoritmos en sistemas distribuidos con sus respectivas simulaciones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-5405079553360120732?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/5405079553360120732/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/algoritmo-de-lamport-para-la.html#comment-form' title='8 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5405079553360120732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/5405079553360120732'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/algoritmo-de-lamport-para-la.html' title='Algoritmo de Lamport para la Sincronización de Relojes Lógicos en Sistemas Distribuidos. Simulación en Java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/Sx0lHtp38ZI/AAAAAAAAAD4/hajB4C5Tj3k/s72-c/imageL6G.JPG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-6521434271693602073</id><published>2009-12-03T22:53:00.010-05:00</published><updated>2010-10-27T10:33:23.629-05:00</updated><title type='text'>Como configurar Flex en Windows y no morir en el intento</title><content type='html'>¿A cuántos de nosotros, durante nuestras carreras en la Universidad, nos han pedido como proyecto hacer un analizador léxico, hacer un compilador o cosas afines?, ¿A cuántos de nosotros se nos pasó el tiempo, y sobre la hora queremos desarrollar estos proyectos desde cero? ¿A cuántos de nosotros nos fascinaría estructurar nuestro propio lenguaje o quizás desarrollar nuestro propio compilador? ... Pues en este post les presentó la herramienta básica de quien se aventura (y también para quién solo está de pasada) en este maravilloso mundo de los compiladores y otros programas que no son exactamente compiladores, pero que presentan algunas características de estos como los coloreadores de código.&lt;br /&gt;Flex es una herramienta para generar escáneres, es decir programas que reconocen patrones léxicos en un texto. En otras palabras, flex se encarga de convertir esos patrones léxicos en tokens que pueden servir para estructurar una gramática (en el caso de un compilador) o para colorear código (En caso de un coloreador de código).&lt;br /&gt;A continuación mostraré un ejemplo de script para flex:&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;%{&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;conio.h&amp;gt;&lt;br /&gt;int num_lineas = 0, num_caracteres = 0;&lt;br /&gt;%}&lt;br /&gt;%option noyywrap&lt;br /&gt;%option yylineno&lt;br /&gt;letra [a-zA-Z]&lt;br /&gt;digito [0-9]&lt;br /&gt;binario [0-1]&lt;br /&gt;ignora " "|\t|\n&lt;br /&gt;operarit *|+|-|/&lt;br /&gt;operlog &amp;amp;|$&lt;br /&gt;comparador &amp;lt;|&amp;gt;|&amp;lt;=|&amp;gt;=|==|!=&lt;br /&gt;%%&lt;br /&gt;{ignora}+                   {;}&lt;br /&gt;{letra}({letra}|{digito})*  {printf("IDENTIFICADOR\n");}&lt;br /&gt;{letra}+                    {printf("CADENA\n");}&lt;br /&gt;{binario}+                  {printf("BOOLEANO\n");} &lt;br /&gt;{digito}+                   {printf("ENTERO\n");}&lt;br /&gt;{digito}+"."{digito}+       {printf("REAL\n");}&lt;br /&gt;{comparador}                {printf("COMPARADOR\n");}&lt;br /&gt;":="                        {printf("ASIGNADOR\n");}&lt;br /&gt;";"                         {printf("PUNTO_COMA\n");}&lt;br /&gt;"!="                        {printf("DIFERENCIA\n");}&lt;br /&gt;","                         {printf("COMA\n");}&lt;br /&gt;"=="                        {printf("IGUAL\n");}&lt;br /&gt;"."                         {printf("PUNTO\n");}&lt;br /&gt;"&amp;gt;="                     {printf("MAYOR_IGUAL\n");}&lt;br /&gt;"&amp;lt;="                     {printf("MENOR_IGUAL\n");}&lt;br /&gt;"("                         {printf("OPEN_PARENTESIS\n");}&lt;br /&gt;")"                         {printf("CLOSE_PARENTESIS\n");}&lt;br /&gt;"&amp;gt;"                      {printf("MAYOR\n");}&lt;br /&gt;"&amp;lt;"                      {printf("MENOR\n");}&lt;br /&gt;"{"                         {printf("OPEN_LLAVE\n");}&lt;br /&gt;"}"                         {printf("CLOASE_LLAVE\n");}&lt;br /&gt;"+"                         {printf("SUMA\n");}&lt;br /&gt;"-"                         {printf("RESTA\n");}&lt;br /&gt;"*"                         {printf("MUTIPLICACION\n");}&lt;br /&gt;"/"                         {printf("DIVISION\n");}&lt;br /&gt;"&amp;amp;"                         {printf("AND\n");}&lt;br /&gt;"$"                         {printf("OR\n");}&lt;br /&gt;\n                          ++num_lineas;&lt;br /&gt;.                           {printf("ERROR LEXICO EN LINEA %d \n",yylineno);}&lt;br /&gt;%%&lt;br /&gt;int main(int argc,char *argv[])&lt;br /&gt;{&lt;br /&gt;char NomArch[30];&lt;br /&gt;printf("Ingrese nombre de archivo: ");&lt;br /&gt;gets(NomArch);&lt;br /&gt;if ((yyin = fopen(NomArch, "rt")) == NULL)&lt;br /&gt;{&lt;br /&gt;printf("\nNo se puede abrir el archivo: %s\n", NomArch);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;yylex();&lt;br /&gt;}&lt;br /&gt;fclose(yyin);&lt;br /&gt;getch();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ahora bien, este script debemos enviarlo al Flex para que nos retorne un archivo en lenguaje C el cuál podemos integrar a nuestro proyecto que estamos realizando, de manera sencilla.&lt;br /&gt;&lt;br /&gt;Lo primero que debemos hacer es descargar el archivo &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/djgpp.rar"&gt;djgpp.rar&lt;/a&gt;, crear una carpeta llamada DJGPP en la unidad D:\ y descomprimir todos los archivos del *.rar aquí.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_XsiwsHwYXAo/SxiD-_-fitI/AAAAAAAAADU/PW1mQK9F9QI/s1600-h/Sin+t%C3%ADtulo-Color+real-01.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411220070634326738" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/SxiD-_-fitI/AAAAAAAAADU/PW1mQK9F9QI/s320/Sin+t%C3%ADtulo-Color+real-01.jpg" style="cursor: pointer; display: block; height: 258px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego debemos crear una carpeta en la unidad D:\ llamada PRUEBAS. Con esto será suficiente, pero es bueno recordar que las rutas son relativas. Eso sí, al momento de configurar las variables de entorno debemos tener cuidado de la ubicación de ambas carpetas.&lt;br /&gt;&lt;br /&gt;Bueno, el siguiente paso es configurar el Flex para lo cuál haremos lo siguiente:&lt;br /&gt;1. Presionar window+r y escribir cmd. Se abrirá la consola del windows, ahí debemos escribir lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre class="cpp" name="code"&gt;d:&lt;br /&gt;cd PRUEBAS&lt;br /&gt;set djgpp=d:\djgpp\djgpp.env&lt;br /&gt;set path=d:\djgpp\bin&lt;br /&gt;flex -oanalisis.c FLE.L&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxiFiYNDirI/AAAAAAAAADc/btsmtNpeKbQ/s1600-h/Sin+t%C3%ADtulo-Color+real-02.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411221777944906418" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxiFiYNDirI/AAAAAAAAADc/btsmtNpeKbQ/s320/Sin+t%C3%ADtulo-Color+real-02.jpg" style="cursor: pointer; display: block; height: 162px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Con esto se generará un archivo llamado analisis.c el cuál podemos integrarlo a nuesto proyecto en C. En este caso el archivo tiene su función main por lo que puede trabajar por si solo. Al ejecutar y enviarle un archivo con patrones léxicos veremos que nos devolverá los tokens correspondientes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/tecnologiaenperu/home/AnalizadorL%C3%A9xico.rar"&gt;Acá&lt;/a&gt; les dejo un proyecto en Dev-C++, en la carpeta hay un archivo llamado test.txt el cuál es la entrada al programa.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxiIwu72WtI/AAAAAAAAADk/oAPX22YtFPU/s1600-h/Sin+t%C3%ADtulo-Color+real-03.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5411225323099806418" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxiIwu72WtI/AAAAAAAAADk/oAPX22YtFPU/s320/Sin+t%C3%ADtulo-Color+real-03.jpg" style="cursor: pointer; display: block; height: 162px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero les sea de utilidad, y en un siguiente post explicaré como utilizar el Bison para analizar sintácticamente estructuraras más complejas como son las gramáticas.&lt;br /&gt;&lt;br /&gt;Pueden revisar este post que explica cómo usar Bison en Windows:&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/01/configurando-bison-en-windows-para.html"&gt;http://rolandopalermo.blogspot.com/2010/01/configurando-bison-en-windows-para.html&lt;/a&gt;&lt;br /&gt;O para algo más aplicativo puedes revisar esto:&lt;br /&gt;&lt;a href="http://rolandopalermo.blogspot.com/2010/10/lex-y-bison-en-un-solo-analizador.html"&gt;http://rolandopalermo.blogspot.com/2010/10/lex-y-bison-en-un-solo-analizador.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-6521434271693602073?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/6521434271693602073/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/como-configurar-flex-en-windows-y-no.html#comment-form' title='14 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6521434271693602073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/6521434271693602073'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/como-configurar-flex-en-windows-y-no.html' title='Como configurar Flex en Windows y no morir en el intento'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_XsiwsHwYXAo/SxiD-_-fitI/AAAAAAAAADU/PW1mQK9F9QI/s72-c/Sin+t%C3%ADtulo-Color+real-01.jpg' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-4522719741713048087</id><published>2009-12-02T10:32:00.001-05:00</published><updated>2010-06-16T12:47:20.214-05:00</updated><title type='text'>Skadedjur, un sistema experto, escrito en prolog, para la detección y control de plagas en sembríos de Tara</title><content type='html'>Los Sistemas Expertos (SSEE), uno de los campos en que se divide la Inteligencia Artificial, han levantado un gran interés en los últimos cinco años entre los expertos de diversas áreas no relacionadas con la computación, como por ejemplo el sector agroindustrial. Las posibilidades de utilización de los SSEE en control agroindustrial, son amplias y esperanzadoras. Van desde la identificación de plagas que atacan un sembrío hasta la obtención de recomendaciones para el control de las mismas. &lt;br /&gt;&lt;br /&gt;SKADEDJUR es un sistema experto diseñado con el fin de proporcionar consejos a los agricultores sobre las diferentes plagas que atacan a los cultivos de Tara. Las tareas implicadas en el cultivo de la Tara, que acotan el contexto de SKADEDJUR son:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;El diagnóstico de plagas y su tratamiento.&lt;br /&gt;El diagnóstico de plagas se realiza a partir de los síntomas observados.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaLxWQNhXI/AAAAAAAAACk/DFfpNdJW05I/s1600-h/Skadedjur01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaLxWQNhXI/AAAAAAAAACk/DFfpNdJW05I/s320/Skadedjur01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410665682235655538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaMJa55h1I/AAAAAAAAAC8/0mmz7onjF9E/s1600-h/Skadedjur04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 266px; height: 166px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaMJa55h1I/AAAAAAAAAC8/0mmz7onjF9E/s320/Skadedjur04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410666095801108306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En función de la plaga diagnosticada y de su grado de levedad, se dictamina un plan de tratamiento para la planta infectada. Un plan de tratamiento debe especificar un conjunto de recursos necesarios, un método de aplicación, un tiempo de aplicación y otros consejos adicionales. En principio pensamos modelar los “recursos necesarios” “métodos y tiempos de aplicación” “consejos adicionales” como conceptos diferenciados del “plan de tratamiento” porque se les supone una cierta complejidad, aunque al profundizar en las descripciones que manejamos decidimos modelarlos como atributos del concepto “plan de tratamiento”.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_XsiwsHwYXAo/SxaMD034mZI/AAAAAAAAAC0/fGdyhwYXZXA/s1600-h/Skadedjur03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 306px;" src="http://4.bp.blogspot.com/_XsiwsHwYXAo/SxaMD034mZI/AAAAAAAAAC0/fGdyhwYXZXA/s320/Skadedjur03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410665999692765586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_XsiwsHwYXAo/SxaL7jQ_SZI/AAAAAAAAACs/kHUcnB6raRc/s1600-h/Skadedjur02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 230px; height: 298px;" src="http://2.bp.blogspot.com/_XsiwsHwYXAo/SxaL7jQ_SZI/AAAAAAAAACs/kHUcnB6raRc/s320/Skadedjur02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410665857527269778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Evidentemente para poder llegar a un diagnóstico desde los síntomas, se asume la existencia de una relación causa-efecto, formando una estructura más o menos compleja, pero que permitiría por recubrimiento llegar a las causas/diagnóstico de los efectos/síntomas de entrada.&lt;br /&gt;&lt;br /&gt;El código fuente del sistema experto ha sido escrito en prolog usando el entorno de SWI Prolog. Presenta una interfaz gráfica sencilla, la cuál fué estructurada gracias a las librerías XPCE que el entorno antes mencionado trae consigo.&lt;br /&gt;&lt;br /&gt;El Manual de usuario lo puedes descargar &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/MANUAL.pdf"&gt;aquí&lt;/a&gt;.&lt;br /&gt;El Informe del proyecto lo puedes descargar &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/INFORME.pdf"&gt;aquí&lt;/a&gt;.&lt;br /&gt;El Artículo referente al proyecto lo puedes descargar &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/PAPER.pdf"&gt;aquí&lt;/a&gt;.&lt;br /&gt;El código fuente lo puedes descargar &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/programa.rar?attredirects=0&amp;d=1"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Recuerden que dentro de la carpeta programa hay un archivo léeme!!!!.txt es cuál es muy importante que lo lean, o en todo caso lean estos tips para poder ejecutar el sistema experto y generar su respectivo ejecutable:&lt;br /&gt;&lt;br /&gt;1. Primero debes crear una carpeta en tu unidad C:\ llamado programa.&lt;br /&gt;2. Dentro de C:\programa descomprimes todos los archivos de programa.rar&lt;br /&gt;3. Descarga&lt;br /&gt;      * &lt;a href="http://www.swi-prolog.org/download/stable/bin/w32pl5100.exe "&gt;&lt;span style="font-weight:bold;"&gt;swi prolog&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;      * &lt;a href="http://download.bildung.hessen.de/lakk/netzwerk/faecher/informatik/swiprolog/setup.zip"&gt;&lt;span style="font-weight:bold;"&gt;swi prolog editor&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;      - Instala primero el swi prolog&lt;br /&gt;      - Luego dentro de setup.rar, que es el instalador del swi prolog editor, dale doble clic al archivo setup.exe&lt;br /&gt;      - Siguiente, siguiete y listo xD!&lt;br /&gt;4. Abre el swi prolog editor y asegúrate de cerrar todos los archivos anteriormente trabajados haciendo clic en menú&lt;br /&gt;   Archivo y cerrar todo.&lt;br /&gt;5. Abre el archivo proyectofinal.pl que está en C:\ llamado programa y luego en menú iniciar, dar clic a consultar.&lt;br /&gt;6. En la parte inferior, en el editor de consultas escribe lo siguiente sin comillas: "main."&lt;br /&gt;7. Listo, tenemos nuestro sistema experto ejecutándose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-4522719741713048087?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/4522719741713048087/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/skadedjur-un-sistema-experto-escrito-en.html#comment-form' title='19 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/4522719741713048087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/4522719741713048087'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/skadedjur-un-sistema-experto-escrito-en.html' title='Skadedjur, un sistema experto, escrito en prolog, para la detección y control de plagas en sembríos de Tara'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaLxWQNhXI/AAAAAAAAACk/DFfpNdJW05I/s72-c/Skadedjur01.jpg' height='72' width='72'/><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-7771423482851947291</id><published>2009-12-01T23:37:00.001-05:00</published><updated>2009-12-12T19:47:23.543-05:00</updated><title type='text'>JInti, una simulación de sistema operativo en java</title><content type='html'>En este post quiero hablar de Sistemas Operativos, un área de interés para la comunidad informática puesto que es la base de todo lo que, sobre ella, se puede estructurar, desarrollar, implementar, programar o como se quiera decir al hecho de realizar una aplicación informática.&lt;br /&gt;&lt;br /&gt;Durante el curso de Sistemas Operativos I que se imparte en mi escuela, se desarrolla una serie de algoritmos en sistemas operativos centralizados. Estos algoritmos están orientados a la gestión de procesos; como puede mecanismos de sincronización, priorización de procesos entre muchas otras cosas.&lt;br /&gt;&lt;br /&gt;Y es justo la priorización de procesos uno de los temas bases y que se merecen un gran estudio puesto que de los algoritmos que seleccionemos para este hecho dependará en gran medida el rendimiento del sistema operativo que se esté implementando.&lt;br /&gt;&lt;br /&gt;Para la gestión de procesos existen muchos algoritmos. La siguiente lista es una muestra de ello:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;   1. Planificación a Plazo Fijo&lt;br /&gt;   2. Planificación Garantizada&lt;br /&gt;   3. Planificación del Primero en Entrar Primero en Salir (FIFO)&lt;br /&gt;   4. Planificación de Asignación en Rueda (RR: Round Robin)&lt;br /&gt;   5. Tamaño del Cuanto o Quantum&lt;br /&gt;   6. Planificación del Trabajo Más Corto Primero (SJF)&lt;br /&gt;   7. Planificación del Tiempo Restante Más Corto (SRT)&lt;br /&gt;   8. Planificación el Siguiente con Relación de Respuesta Máxima (HRN)&lt;br /&gt;   9. Planificación por Prioridad&lt;br /&gt;  10. Colas de Retroalimentación de Niveles Múltiples&lt;br /&gt;  11. Política Versus Mecanismo de Planificación&lt;br /&gt;  12. Planificación de Dos Niveles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora otro concepto importante es la paginación de memoria, que consiste en dividir los programas en páginas(pequeños segmentos de programa). Así mismo la memoria es dividida en trozos del mismo tamaño que las páginas llamados marcos de página. De esta forma, la cantidad de memoria desperdiciada por un proceso es el final de su última página, lo que minimiza la fragmentación interna y evita la externa.&lt;br /&gt;&lt;br /&gt;Una vez defenidos estos conceptos básicos, paso a explicar lo que es JInti.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaF-_X3fLI/AAAAAAAAACc/Ww1MtmNTUXo/s1600-h/jinti.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 194px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaF-_X3fLI/AAAAAAAAACc/Ww1MtmNTUXo/s320/jinti.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5410659319542152370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;JInti &lt;/span&gt;es una simulación de sistema operativo que, basado en el algoritmo FIFO (First In, First Out "primero en entrar, primero en salir") para la gestión de procesos y en el algoritmo LRU ("Menos usada recientemente" o "Least Recently Used") para la determinación de qué páginas pueden ser sacadas de memoria cuando se necesita cargar una nueva y ya no hay espacio, muestra el funcionamiento de los mencionados algoritmos con procesos semi-reales cargados por el usuario en tiempo de ejecución y de manera concurrente. No es una una simulación completa, por lo que he decido liberar el código de JInti y volverlo OpenSource para que de ese modo alguién más pueda trabajar sobre esto e ir incrementando las capacidades de este simulador. A continuación muestro un screenshot de JInti:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaFJe5J5eI/AAAAAAAAACU/Zu_215kzPxI/s1600-h/JInti02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaFJe5J5eI/AAAAAAAAACU/Zu_215kzPxI/s320/JInti02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410658400290334178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La descarga la puedes realizar &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/JInti.rar"&gt;aquí&lt;/a&gt;, es un proyecto que ha sido realizado usando Netbeans, solo tienes que correr el proyecto y darle clic en los iconos de las aplicaciones que ahí aparecen. Para ver el administrador de procesos solo debes presionar F1 y verás como van cambiado los procesos que acceden al procesador y cómo se va realizando la paginación de los mismos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_XsiwsHwYXAo/SxaEvf3P7RI/AAAAAAAAACM/3xkozfZzDMQ/s1600-h/JInti01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_XsiwsHwYXAo/SxaEvf3P7RI/AAAAAAAAACM/3xkozfZzDMQ/s320/JInti01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410657953874177298" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-7771423482851947291?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/7771423482851947291/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/jinti-una-simulacion-de-sistema.html#comment-form' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/7771423482851947291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/7771423482851947291'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/12/jinti-una-simulacion-de-sistema.html' title='JInti, una simulación de sistema operativo en java'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_XsiwsHwYXAo/SxaF-_X3fLI/AAAAAAAAACc/Ww1MtmNTUXo/s72-c/jinti.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-3855382677937500456</id><published>2009-11-22T22:43:00.000-05:00</published><updated>2009-11-22T23:53:20.764-05:00</updated><title type='text'>Semana de la Ciencia de la Computación</title><content type='html'>Y bueno, un poco tarde pero comentando sobre la SECICOMP. Para los que no saben, SECICOMP es Semana de la Ciencia de la Computación y se realiza anualmente en mi escuela, La Escuela de Informática.&lt;br /&gt;&lt;br /&gt;Este año se realizó por cuarta vez y bueno, no fué la excepción para que presente algún proyecto (A excepción de la SECICOMP 2007).&lt;br /&gt;A diferencia de otros años, la exposición de los trabajos se realizó frente al pabellón de la facultad de derecho con la finalidad de promocionar un poco más lo que se puede hacer en nuestra escuela.&lt;br /&gt;&lt;br /&gt;La diversidad de proyectos y las áreas temáticas que estos expusieron dejó entrever la capacidad de los estudiantes de Informática, abordando temas desde puntos de vista tanto &lt;span style="font-weight:bold;"&gt;ingenieríl&lt;/span&gt; como científico, y algunos casos mezclando las capacidades de ambas perspectivas. Si bien es cierto no se logró la afluencia de público que se esperaba, la calidad del trabajo de mis compañeros organizadores y despliegue que este tuvo fué unos de los mejores que se ha visto.&lt;br /&gt;&lt;br /&gt;Con ansias espero la SECICOMP 2010, aunque evidentemente ya no podré participar como estudiante y quizás ya no presente ningún proyecto de &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/mis-proyectos"&gt;esos que parecen que van a estallar o que se desarmarán al primer movimiento&lt;/a&gt;, pero si espero poder apoyar en la organización, cosa que no hice en las versiones anteriores de la SECICOMP por cuestiones personales.&lt;br /&gt;&lt;br /&gt;A través de este post dejo abierta la invitación a la gente que quiera participar en la SECICOMP 2010, para que vayan pensando algún proyecto y ¿por qué no? a los chicos que gustan de hacer cosas como las que &lt;a href="http://sites.google.com/site/tecnologiaenperu/home/mis-proyectos"&gt;solía hacer&lt;/a&gt;, para poder trabajar en conjunto o quizás brindándoles algunas ideas.&lt;br /&gt;&lt;br /&gt;Cierro este post felicitando a la comisión organizadora de la &lt;a href ="http://www.secicomp.org/"&gt;IV SECICOMP&lt;/a&gt; y esperando con ansias la V SECICOMP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-3855382677937500456?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/3855382677937500456/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/11/semana-de-la-ciencia-de-la-computacion.html#comment-form' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3855382677937500456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/3855382677937500456'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/11/semana-de-la-ciencia-de-la-computacion.html' title='Semana de la Ciencia de la Computación'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3243236739421377577.post-1203711555054290038</id><published>2009-11-19T16:19:00.001-05:00</published><updated>2009-12-22T16:49:39.666-05:00</updated><title type='text'>Ciencia de la Computación</title><content type='html'>Por ser este mi primer post quiero hablar de mi escuela, La Escuela de Informática de la Universidad Nacional de Trujillo. Y le dedico el post porque ocurre algo curioso, y es que cuando aún era un estudiante del 5 de secundaria del colegio San Juan estaba en el dilema de miles de jovenes peruanos: "¿Qué estudiar en la universidad?". Lógicamente la tecnología era lo que más me llamaba la atención y habían tres opciones: Ingeniería de Sistemas, Ingeniería Informática o Ingeniería Electrónica.&lt;br /&gt;&lt;br /&gt;Ya cuando llegó el momento de la decisión la opción fué obviamente Ingeniería Informática en la UNT por supuesto. Al ingresar me di con la sorpresa que no era Ingeniería Informática lo que iba a estudiar, ni siquiera Informática, sino más bien Ciencia de la Computación. ¿Ciencia de la Computación? ... jamás había escuchado de eso, o sea estaba estudiando algo que no sabia que era. Lógicamente mi primera reacción fué informarme más pero la gente de ciclos superiores estaba tan confundida como yo. Luego un grupo de compañeros entro al salón de clases y nos habló de la ACM y de la Ciencia de la Computación. No me pareció mala opción y con tanta diapositiva terminé tranquilizándome y aceptando lo que estudiaría. &lt;br /&gt;&lt;br /&gt;Bueno, los ciclos transcurrían y las ideas empezaban a aclararse, cursos por acá, cursos por allá, papers por acá, artículos por allá ... vaya que si empezaba a confundira la situación nuevamente. Y por si fuera poco hasta los mismos docentes se contradecían y se siguen contradiciendo. Cada profesor tiraba para su lado (o "área de investigación" como ellos suelen llamar) y nosotros cada vez más confundidos. Luego se empezó a organizar ferias dentro la escuela y, fiel a mi estilo, me animé a participar. Curiosamente en una de estas ferias llegó una "eminencia" de la Ciencia de la Computación y en una de sus charlas dijo ser Ingeniero de Sistemas pero que se ¡arrepentía! de serlo. Al escuchar esto me sentí avergonzado por los compañeros de ingeniería de sistemas que, estando presentes, no tuvieron el respeto que se merecen, más aún si están colaborando con nuestra feria. sobre todo por parte de este tipo ("científico") que siguió hablando y hablando de la "ciencia de la computación".&lt;br /&gt;&lt;br /&gt;Con un montón de experiencias de este tipo ha transcurrido casi toda mi carrera, con compañeros que dicen hacer ciencia y criticando, destructivamente, a quien no siga su línea. Lo curioso de todo esto es que acabando sus tristes carreras no hacen nada de investigación y terminan siendo parte de la masa que tanto criticaban.&lt;br /&gt;&lt;br /&gt;Es realmente lamentable todo lo que ocurre en mi escuela, cada vez peor. Quizás haya gente a quien no le guste lo que escribo pero, es la verdad. A este paso no se sabe a donde llegaremos con "investigadores" que solo saben criticar y que no hacen nada concreto por mejorar esta situación, puesto que su pensamiento tan cerrado, y hasta cierto punto tonto, ha sido transmitido a algunos compañeros que dicen hacer ciencia. Si ven un sistema informático dicen que es Ingeniería de Sistemas, si ven un circuito integrado dicen que es electrónica, si ven un motor dicen que es mecánica, para ellos ciencia de la computación es un paper o un algoritmo con entradas predefinidas, para ellos solo existen los paper y sus "complejos algoritmos". Es una pena que gente de este tipo siga contaminando nuestra escuela y siga fomentando sus ideologías a las futuras promociones. Es claro que acabando la universidad gente que se vió arrastrada por estos "personajes" tienen que seguir cursos técnicos puesto que no han recibido la correcta formación como científicos, salvo rescatables excepciones.&lt;br /&gt;&lt;br /&gt;A todo esto, yo creo deberíamos empezar por cambiar el nombre de nuestra carrera y la currícula, que a pesar de ya haberse hecho los cambios en esta, está peor que antes, es una ofensa a la "Ciencia de la Computación" y a los alumnos que se basarán en ella.&lt;br /&gt;&lt;br /&gt;Como primer post ya fue suficiente. Ya comenté mis ideas y siempre diré que yo estudio Ingeniería Informática.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3243236739421377577-1203711555054290038?l=rolandopalermo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rolandopalermo.blogspot.com/feeds/1203711555054290038/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://rolandopalermo.blogspot.com/2009/11/ciencia-de-la-computacion.html#comment-form' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/1203711555054290038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3243236739421377577/posts/default/1203711555054290038'/><link rel='alternate' type='text/html' href='http://rolandopalermo.blogspot.com/2009/11/ciencia-de-la-computacion.html' title='Ciencia de la Computación'/><author><name>Rolando</name><uri>http://www.blogger.com/profile/14493339473572566456</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_XsiwsHwYXAo/TJrvf45uRsI/AAAAAAAAAUc/TaVk3VRJjbI/s1600-R/1.jpg'/></author><thr:total>5</thr:total></entry></feed>
