<?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-7906564711921234287</id><updated>2011-11-27T20:58:31.182-03:00</updated><category term='Google Maps'/><category term='Programacion'/><category term='Ecologia'/><category term='Navegadores'/><category term='BlueJ'/><category term='YouTube'/><category term='Java'/><category term='Prolog'/><category term='xml-rpc'/><category term='Google'/><category term='Web'/><category term='Educacion'/><category term='Curiosidades'/><category term='PHP'/><category term='Argentina'/><category term='SEO'/><category term='Colgado de La Palmera'/><category term='Imagenes'/><category term='Eclipse'/><category term='Teoria'/><category term='Visual Basic'/><category term='Software'/><category term='Hardware'/><category term='dominios'/><category term='Humor'/><category term='Sistemas'/><category term='Blogs'/><category term='.NET'/><title type='text'>blogterrier</title><subtitle type='html'>Programación web, seo y otras cosas relacionadas. Eso que tarde varias horas o días en encontrar y no tengo que olvidar. Y algún que otro desarrollo propio.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>63</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-5672689944235958498</id><published>2011-11-03T21:17:00.001-03:00</published><updated>2011-11-03T21:19:34.672-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogs'/><title type='text'>Truco para Adsense/Vistas de blogger</title><content type='html'>&lt;span style="background-color: transparent;"&gt;Truco para Adsense y bug en la interfaz, o quizás una opción en desarrollo aun no publica.&lt;/span&gt;&lt;br /&gt;Si activaron alguna vista y quieren integrar Adsense a la vista(funciona en sidebar) pueden acceder a la opción Elementos de Pagina(Diseño desaparece como link si se elige una vista, pero sigue estando disponible) por medio del enlace http://www.blogger.com/blogger.g?blogID=IdDelBlog#pageelements (colocar la id de su blog) y agregando un widget de Adsense de cualquier tamaño y tipo saldrán dos anuncios con estilos por defecto(Evidentemente implementados en la plantilla de la vista sidebar).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-5672689944235958498?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/5672689944235958498/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=5672689944235958498' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5672689944235958498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5672689944235958498'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2011/11/truco-para-adsensevistas-de-blogger.html' title='Truco para Adsense/Vistas de blogger'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-8000302045838072857</id><published>2011-11-03T20:50:00.001-03:00</published><updated>2011-11-03T20:50:24.006-03:00</updated><title type='text'>Problema: fb_xd_fragment=</title><content type='html'>Si tienes un sitio web y utilizas los plugins sociales de Facebook seguramente te esta ocurriendo esto, una pagina de tu sitio que termina con fb_xd_fragment= cargada cientos de veces por un solo usuario con Internet Explorer o un Firefox viejo.&lt;br /&gt;La&amp;nbsp;solución&amp;nbsp;es actualizar el plugin a la forma recomendada en Facebook Developers y no quedarse con el&amp;nbsp;código&amp;nbsp;por defecto que nos facilitan.&lt;br /&gt;&lt;br /&gt;Esto consta de 3 partes, primero crear un archivo llamado channel.html y colocarlo en la&amp;nbsp;raíz&amp;nbsp;del sitio con este&amp;nbsp;código:&lt;br /&gt;&lt;h5&gt;&amp;lt;script src="http://connect.facebook.net/es_LA/all.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/h5&gt;Ademas debemos agregar estos atributos a la etiqueta HTML:&lt;br /&gt;&lt;h5&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns:og="http://opengraphprotocol.org/schema/"&amp;gt;&lt;/h5&gt;Y por ultimo la forma de llamar a connect debe ser asi:&lt;br /&gt;&lt;h5&gt;&amp;lt;div id="fb-root"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;nbsp; window.fbAsyncInit = function() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; FB.init({&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; appId &amp;nbsp;: 'appid',&amp;nbsp;status : true,&amp;nbsp;cookie : true,&amp;nbsp;xfbml &amp;nbsp;: true,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; channelUrl &amp;nbsp;: 'http://www.example.com/channel.html'&lt;br /&gt;&amp;nbsp; &amp;nbsp; });&lt;br /&gt;&amp;nbsp; };&lt;br /&gt;&lt;br /&gt;&amp;nbsp; (function() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; var e = document.createElement('script');&lt;br /&gt;&amp;nbsp; &amp;nbsp; e.src = document.location.protocol + '//connect.facebook.net/es_LA/all.js';&lt;br /&gt;&amp;nbsp; &amp;nbsp; e.async = true;&lt;br /&gt;&amp;nbsp; &amp;nbsp; document.getElementById('fb-root').appendChild(e);&lt;br /&gt;&amp;nbsp; }());&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/h5&gt;Si tienes todo esto para integrar&amp;nbsp;algún&amp;nbsp;plugin social solo hay que colocar la etiqueta fb:&lt;br /&gt;&lt;h5&gt;&amp;lt;fb:like href="http://www.example.com/" send="false" layout="button_count" width="120" show_faces="true" font="verdana"&amp;gt;&amp;lt;/fb:like&amp;gt;&lt;/h5&gt;Para evitar una penalización en Google agrega esto a tu .htaccess:&lt;br /&gt;&lt;h5&gt;RewriteCond %{QUERY_STRING} ^fb_xd_fragmentRewriteRule ^(.*)$ http://www.example.com\/$1? [R=301,L]&lt;/h5&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-8000302045838072857?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/8000302045838072857/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=8000302045838072857' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8000302045838072857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8000302045838072857'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2011/11/problema-fbxdfragment.html' title='Problema: fb_xd_fragment='/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-99636712505307736</id><published>2011-11-03T20:48:00.002-03:00</published><updated>2011-11-03T20:48:27.528-03:00</updated><title type='text'>Como reiniciar el vinculo entre Adsense y Analytics</title><content type='html'>Muchos de los webmaster y blogger hemos asociado alguna vez nuestra cuenta de Adsense con una de las cuentas de Analytics. Pero&amp;nbsp;quizás&amp;nbsp;fue hace unos años y necesitamos cambiar la cuenta.&lt;br /&gt;Google tiene un formulario para esos caso:&lt;br /&gt;&lt;a href="https://www.google.com/adsense/support/bin/request.py?hl=en&amp;amp;contact_type=analyticsunlink&amp;amp;rd=2" target="_blank"&gt;https://www.google.com/adsense/support/bin/request.py?hl=en&amp;amp;contact_type=analyticsunlink&amp;amp;rd=2&lt;/a&gt;&lt;br /&gt;Si solicitamos la&amp;nbsp;anulación&amp;nbsp;del vinculo en pocas horas podemos crearlo de nuevo con la cuenta de Analytics correcta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-99636712505307736?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/99636712505307736/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=99636712505307736' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/99636712505307736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/99636712505307736'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2011/11/como-reiniciar-el-vinculo-entre-adsense.html' title='Como reiniciar el vinculo entre Adsense y Analytics'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-1651479397813876003</id><published>2009-09-17T21:17:00.002-03:00</published><updated>2011-11-01T20:18:07.440-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Ejemplo de trabajo con imágenes en Visual Basic .NET</title><content type='html'>No tengo ganas de escribir mucho pero en PAV 1 andamos con estas cosas: &lt;br /&gt;Se trata de un formulario que carga distintas imágenes del disco local y las muestra en el form, luego se puede navegar entre las imágenes cargadas gracias a los eventos clic sobre las imágenes, después de programar bastante tiempo en PHP y en local sobre Java me llevo una gran sorpresa al ver la facilidad con la que Visual Basic .NET y todos sus amigos .NET tienen para el diseño de este tipo de aplicaciones(pero me quedo con lo que es gratis, todavía no lo se explicar pero después de investigar tanto y leer tantas cosas sobre las tecnologías gratuitas Visual Basic me parece que solamente tiene una forma de hacer las cosas y una sola forma de ejecutarse): &lt;br /&gt;&lt;br /&gt;Una imagen vale mas que mil palabras (pero depuse nunca vienen mal unas líneas de código) &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SrLQ-Yl5uKI/AAAAAAAABOE/z5KsLhljmTo/s1600-h/appvisuales%5B4%5D.gif"&gt;&lt;img alt="appvisuales" border="0" height="285" src="http://lh6.ggpht.com/_QPVnXEzDdCg/SrLRf5bkrxI/AAAAAAAABOI/NtRCOedaOS4/appvisuales_thumb%5B2%5D.gif?imgmax=800" style="border-bottom-color: initial; border-bottom-style: initial; border-bottom-width: 0px; border-left-color: initial; border-left-style: initial; border-left-width: 0px; border-right-color: initial; border-right-style: initial; border-right-width: 0px; border-top-color: initial; border-top-style: initial; border-top-width: 0px; display: inline;" title="appvisuales" width="400" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;En este ejemplo hay varios componentes que deben ser agregados y correctamente nombrados: &lt;br /&gt;Un botón que para este ejemplo se llama Button3 &lt;br /&gt;Un OpenFileDialog llamado ofd &lt;br /&gt;Un TextBox llamado txt &lt;br /&gt;Y cuatro PictureBox llamados picBLOB, picBLOB2, picBLOB3 y picBLOB4 &lt;br /&gt;&lt;br /&gt;&lt;u&gt;Código Fuente:&lt;/u&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;Imports System.IO &lt;br /&gt;Imports System.Drawing.Imaging &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;Public Class Form1 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim conta As Integer = 0 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ofd.FileOk &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If conta = 0 Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ofd.ShowDialog() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txt.Text = ofd.FileName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB.Image = Image.FromFile(txt.Text) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If conta = 1 Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ofd.ShowDialog() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txt.Text = ofd.FileName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB2.Image = Image.FromFile(txt.Text) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB2.Visible = True &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB2.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If conta = 2 Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ofd.ShowDialog() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txt.Text = ofd.FileName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB3.Image = Image.FromFile(txt.Text) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB3.Visible = True &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB3.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If conta = 3 Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ofd.ShowDialog() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txt.Text = ofd.FileName &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB4.Image = Image.FromFile(txt.Text) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB4.Visible = True &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB4.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If conta = 3 Then &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conta = -1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conta = conta + 1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub picBLOB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB.Click &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB.Visible = True &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conta = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub picBLOB2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB2.Click &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB2.Visible = True &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB2.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conta = 1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub picBLOB3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB3.Click &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB3.Visible = True &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB3.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conta = 2 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub picBLOB4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles picBLOB4.Click &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB4.Visible = True &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; picBLOB4.BringToFront() &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conta = 3 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #444444;"&gt;End Class&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-1651479397813876003?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/1651479397813876003/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=1651479397813876003' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1651479397813876003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1651479397813876003'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/09/ejemplo-de-trabajo-con-imagenes-en.html' title='Ejemplo de trabajo con imágenes en Visual Basic .NET'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_QPVnXEzDdCg/SrLRf5bkrxI/AAAAAAAABOI/NtRCOedaOS4/s72-c/appvisuales_thumb%5B2%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-252013452847675378</id><published>2009-09-16T21:45:00.001-03:00</published><updated>2009-09-16T21:45:41.963-03:00</updated><title type='text'>Creación de Aplicaciones en Facebook</title><content type='html'>&lt;p&gt;&lt;strong&gt;La red de redes se esta convirtiendo en un espacio tan atractivo para los usuarios como para los desarrolladores web&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ayer se conoció la noticia de que Facebook había logrado flujo positivo en sus cuentas, es decir que los ingresos superaban los gastos de mantener ese enorme monstruo en línea. Además se dio a conocer que la red llego a los 300 millones de usuarios.&lt;/p&gt;  &lt;p&gt;A que desarrollador le gustaría acceder a 300 millones de usuarios? bueno aunque sea a la mitad de ellos, o por lo menos el 00, 01 %....&lt;/p&gt;  &lt;p&gt;Bueno la posibilidad esta presente, como dicen todas las reviews de Facebook que podemos encontrar por allí: Facebook es de especial interés por que permite una plataforma sobre la que terceros desarrollan aplicaciones accediendo a la propagación viral propia de la red social.&lt;/p&gt;  &lt;p&gt;Ahora como crear una aplicación ya es un tema un poco mas complicado para una nota de prensa pero como el titulo es ese vamos a ver como hacemos una aplicación básica que no tiene ningún comportamiento propio pero que hace uso de varias funciones del API para acceder a informacion de los contactos y que además realiza publicaciones en el muro del usuario:&lt;/p&gt;  &lt;p&gt;Facebook permite trabajar en múltiples entornos a los que hay que agregarles determinadas bibliotecas provistas por el mismo Facebook. Puntualmente programo en php así que voy a utilizar el API para php.&lt;/p&gt;  &lt;p&gt;Para empezar hay que estar inscripto en Facebook y acceder a la pagina de Creadores en la dirección: http://www.facebook.com/developers/ de allí hay un botón que permite crear nuestra aplicación. Como configurarla lo pueden obtener de cualquier blog dedicado a programación que seguramente posteo el tema recientemente, para estos ejemplos debe ser un iframe y además es necesario copiar las API Key y Application Secret de tu nueva aplicación, después se deben bajar la librería de PHP y subirla a su servidor en donde alojaran la aplicación.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Deben insertar en su php el archivo facebook.php y a continuación pedir el ID del usuario que esta iniciando sesión en nuestra app:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$appapikey = '------------------------------------------------------';&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$appsecret = '+++++++++++++++++++++++++++++++';&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$facebook = new Facebook($appapikey, $appsecret);&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$user_id = $facebook-&amp;gt; require_login();&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Luego de eso podemos acceder a una funcion del objeto facebook que nos devolverá las ID de todos los amigos de nuestro usuario:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$friends_ids = $facebook-&amp;gt; api_client-&amp;gt; friends_get();&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Si por ejemplo nuestra aplicación trabaja con datos guardados en una base de datos podemos utilizar el ID de usuario para relacionar los distintos inicios de sesión, así cuando un usuario deje por ejemplo un mensaje este podrá visualizarse solamente a sus amigos.&lt;/p&gt;  &lt;p&gt;Para hacer estas primeras acciones no hizo falta mas que el usuario inicie sesión en la aplicación pero si queremos acceder a otros permisos como por ejemplo la publicación en el muro del usuario de un enlace debemos pedir por medio del API que el usuario confirme el acceso a su muro, esto se hace preguntando por la propiedad y redirigiendo a la pagina en cuestión si no esta disponible:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;// extraemos si tiene permisos sobre 'share_item'&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$hasPermission = $facebook-&amp;gt; api_client-&amp;gt; call_method(&amp;quot;facebook.users.hasAppPermission&amp;quot;, array(&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;'uid'&lt;/em&gt;&lt;em&gt; &lt;/em&gt;&lt;em&gt;=&amp;gt; $user_id,&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;'ext_perm'&lt;/em&gt;&lt;em&gt; &lt;/em&gt;&lt;em&gt;=&amp;gt; 'share_item'&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;));&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;if ( !$hasPermission )&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;{&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;// Si no los tiene redirigimos a la página para solicitarlos&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;header( &amp;quot;location: http://www.facebook.com/authorize.php?api_key=&amp;quot;.$appapikey.&amp;quot;&amp;amp; v=1.0&amp;amp; ext_perm=share_item&amp;amp; next=[url luego de aceptar]&amp;amp; next_cancel=[url si no acepta]&amp;quot;);&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;else&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;{&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;// si tiene permisos no hacemos nada y continuamos nuestra app&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Nótese que uno de los parametros enviados a authorize.php es la appikey, eso quizas sea un problema a solucionar, no me parece mostrarlo así nomas, es casi como el add de fotolog.&lt;/p&gt;  &lt;p&gt;Ahora que tenemos los permisos de publicar en el muro podemos escribir un mensaje en el:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;//Publica su lugar en el muro&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$message = 'Estuvo jugando en la aplicación de juan perez';&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$attachment = array('name' =&amp;gt; 'Puntaje de '.$user_id, 'href' =&amp;gt; 'http://apps.facebook.com/aplicaciondejuanperez/', 'caption' =&amp;gt; '{*actor*} publico '.$user_id, 'description' =&amp;gt; $algunavariableenphpquedescribaalgo, 'properties' =&amp;gt; array('category' =&amp;gt; array('text' =&amp;gt; $tagdelaapp, 'href' =&amp;gt; 'http://apps.facebook.com/aplicaciondejuanperez/'), 'ratings' =&amp;gt; '5 estrellas, obvio'), 'media' =&amp;gt; array(array('type' =&amp;gt; 'image', 'src' =&amp;gt; 'http://www.imageshack.us/smile.jpg', 'href' =&amp;gt; 'http://apps.facebook.com/aplicaciondejuanperez/')), 'latitude' =&amp;gt; '41.4', 'longitude' =&amp;gt; '2.19');&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;$action_links = array(array('text' =&amp;gt; 'Perfil de la Aplicacion', 'href' =&amp;gt; 'http://www.facebook.com/apps/application.php?id=9282948372984374832'));&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;try { $facebook-&amp;gt; api_client-&amp;gt; stream_publish($message, $attachment, $action_links); } Catch (Exception $e) { }&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;//Termina de publicar&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Que cosas interesantes hay aquí:&lt;/p&gt;  &lt;p&gt;Tenemos un mensaje principal, luego construimos una variable bastante grande en donde como pueden ver se pueden editar todo lo que esta entre comillas simples o es variable php, importante aclaración: en anteúltimo renglón hay un id=muchosnumeros esa es la ID visible de la aplicación, es el acceso al perfil de la misma. Y lo otro importante es poner la llamada al API de php entre bloques try catch por que si no tenemos permisos o hemos sobrepasado el máximo permitido nos dará un error en tiempo de ejecución que no podremos sortear, salvo que pongamos try catch.&lt;/p&gt;  &lt;p&gt;Bueno espero haberlos ilustrado un poco, muy poco. Pero para empezar a jugar es suficiente.&lt;/p&gt;  &lt;p&gt;Les dejo mi aplicación para que vean cual es el verdadero potencial de las aplicaciones de Facebook, se trata de un mapa de Google Maps donde los usuarios pueden dejar un marcador y darle una descripción, sus amigos pueden ver los marcadores en cuestión.&lt;/p&gt;  &lt;p&gt;Mi servidor envía aproximadamente 20kb por cada usuario que agrega un lugar, increíble no?&lt;/p&gt;  &lt;p&gt;http://apps.facebook.com/mapasatelitalonda/&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-252013452847675378?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/252013452847675378/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=252013452847675378' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/252013452847675378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/252013452847675378'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/09/creacion-de-aplicaciones-en-facebook.html' title='Creación de Aplicaciones en Facebook'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-7772320983827683767</id><published>2009-07-30T15:54:00.001-03:00</published><updated>2009-07-30T15:54:05.256-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YouTube'/><title type='text'>5 GHz Project: CPU Cooling With Liquid Nitrogen</title><content type='html'>&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zUc6znC848o&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00"&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/zUc6znC848o&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-7772320983827683767?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/7772320983827683767/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=7772320983827683767' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/7772320983827683767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/7772320983827683767'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/07/5-ghz-project-cpu-cooling-with-liquid.html' title='5 GHz Project: CPU Cooling With Liquid Nitrogen'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-6638325350100479551</id><published>2009-05-17T00:20:00.001-03:00</published><updated>2009-05-17T00:20:56.508-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Sistemas Operativos</title><content type='html'>&lt;p&gt;Una recopilación de todos los sistemas operativos mas usados y su descripción. No se tienen en cuenta las distintas distribuciones del sistema GNU/Linux ni las distintas versiones de Windows ni Mac OS:   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;ADEOS&lt;/b&gt; (siglas de Adaptative Domain Environment Operating Systems), ADEOS proporciona un entorno flexible para compartir los recursos hardware para múltiples sistemas operativos ó múltiples instancias de un mismo sistema operativo. ADEOS activa múltiples núcleos, llamados dominios, que existen simultáneamente sobre el mismo hardware. Ninguno de éstos dominios necesariamente conoce la existencia del resto, pero todos ellos si conocen de la existencia de ADEOS. Un dominio puede ser un Sistema Operativo completo, pero no necesariamente.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;AMSDOS&lt;/b&gt; es un sistema operativo de disco para los ordenadores de 8 bits Amstrad CPC de Amstrad. Su nombre proviene de la contracción de &lt;b&gt;Ams&lt;/b&gt;trad &lt;b&gt;D&lt;/b&gt;isc &lt;b&gt;O&lt;/b&gt;perating &lt;b&gt;S&lt;/b&gt;ystem.&lt;/p&gt;  &lt;p&gt;Fue publicado en 1984 con la unidad de disco de 3 pulgadas opcional para el Amstrad CPC 464, e incluido de serie en las ROMs de los Amstrad CPC 664 y Amstrad CPC 6128. En los Amstrad CPC Plus venía en el cartucho incluido de serie junto con un juego. Era más rápido y eficiente que la mayoría de sus equivalentes contemporáneos y podía soportar dos unidades de disco conectadas simultáneamente.&lt;/p&gt;  &lt;p&gt;El AMSDOS era proporcionado en la memoria ROM (tanto con la unidad de disco externa o en la ROM de la máquina, dependiendo de modelo) y fue accesible por medio del Locomotive BASIC incorporado en el computador así como también a través de rutinas del firmware. Su función principal era mapear las rutinas de acceso del casete (que estaban incorporadas en cada modelo de CPC) a través a un unidad de disco. Esto permitió a la mayoría de los programas basados en casete trabajar con una unidad de disco sin modificación.   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;ANDOS&lt;/b&gt; es un sistema operativo ruso. Fue usado como sistema operativo para la serie de ordenadores Electronika BK-0010 y Electronika BK-0011M. Fue virtualmente el único sistema en la serie BK que usaba el sistema de archivos de MS-DOS. &lt;/p&gt;  &lt;p&gt;ANDOS utilizaba el sistema de archivos FAT12 en disquetes de 800kb.   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Amoeba&lt;/b&gt; es un sistema operativo distribuido de investigación, basado en una arquitectura de micronúcleo. Fue desarrollado por Andrew S. Tanenbaum y otros en la Universidad Libre de Amsterdam. El objetivo del proyecto Amoeba era construir un sistema de tiempo compartido que hiciera que una red entera de computadores pareciera a los ojos de un usuario como una única máquina.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Android&lt;/b&gt; es una plataforma de software y un sistema operativo para dispositivos móviles. Está basado en GNU/Linux e inicialmente fue desarrollado por Google. La presentación de la plataforma Android se realizó el 5 de noviembre de 2007 junto con la fundación Open Handset Alliance, un consorcio de 48 compañías de hardware, software y telecomunicaciones comprometidas a la promoción de estándares abiertos para dispositivos móviles.    &lt;br /&gt;Esta plataforma permite el desarrollo de aplicaciones por terceros (personas ajenas a Google), para lo cual, los desarrolladores deben de escribir código gestionado en el lenguaje de programación Java y controlar los dispositivos por medio de bibliotecas desarrolladas o adaptadas por Google. Otras opciones, es decir, escribir programas en &lt;a href="http://es.wikipedia.org/wiki/C"&gt;C&lt;/a&gt; u otros lenguajes, utilizando o no las bibliotecas de Google , también son posibles (compilándolas a código nativo de ARM ); sin embargo, este esquema de desarrollo no es oficialmente soportado por Google.    &lt;br /&gt;La mayoría del código fuente de Android ha sido publicada bajo la licencia de software Apache, una licencia de software libre y código fuente abierto.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;The Operating System&lt;/b&gt; (&lt;b&gt;TOS&lt;/b&gt;) es el sistema operativo de la gama de ordenadores Atari ST. Esta gama incluye el 520ST, el 1040ST y las variantes F, FM y E (ej. 1040STE). Posteriormente, las máquinas de 32 bits (TT030 y Falcon) fueron desarrolladas usando una nueva versión de &lt;i&gt;TOS&lt;/i&gt;, llamada MultiTOS, la cual permite multitarea. Más recientemente, los usuarios han evolucionado TOS dando lugar a FreeMiNT.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;BeFree&lt;/b&gt; es una versión libre de BeOS, construida sobre un kernel de Linux. Este sistema operativo pertenece a la rama de los clones como BlueEyedOS, Cosmoe, OpenBeOS/Haiku-OS.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;BeOS&lt;/b&gt; es un sistema operativo para PC desarrollado por Be Incorporated en 1990, orientado principalmente a proveer alto rendimiento en aplicaciones multimedia. A pesar de la creencia común fomentada por la inclusión de la interfaz de comandos Bash en el sistema operativo, el diseño de BeOS no estaba basado en UNIX.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;OSBOS&lt;/b&gt; (del inglés &lt;i&gt;Open Standards BeOS-compatible Operating Systems&lt;/i&gt;) es el conjunto de sistemas operativos que pretenden recrear las característica del sistema operativo BeOS, comprometiéndose para ello a cumplir unos estándares abiertos, establecidos por BeUnited, de compatibilidad e interoperabilidad.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;CP/M&lt;/b&gt; (&lt;b&gt;C&lt;/b&gt;ontrol &lt;b&gt;P&lt;/b&gt;rogram/&lt;b&gt;M&lt;/b&gt;onitor) es un sistema operativo desarrollado por Gary Kildall para el microprocesador 8080/85 de Intel y el Z80 de Zilog. Se trata del sistema operativo más popular entre las computadoras personales en los años 1970. Aunque fue modificado para ejecutarse en un IBM PC, el hecho que IBM eligiera MS-DOS, al fracasar las negociaciones con la desarrolladora del software, hizo que el uso de CP/M disminuyera hasta hacerlo desaparecer.&lt;/p&gt;  &lt;p&gt;El acrónimo &lt;b&gt;CP/M&lt;/b&gt; significa &lt;i&gt;Control Program&lt;/i&gt; &lt;b&gt;for&lt;/b&gt; &lt;i&gt;Monitors&lt;/i&gt;, es decir, &lt;i&gt;Programa de control para monitores&lt;/i&gt;. En la época, la barra inclinada (&lt;b&gt;/&lt;/b&gt;) tenía esta acepción de &amp;quot;diseñado para&amp;quot;. No obstante, Gary Kildall redefinió el significado del acrónimo poco después.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;CP/M&lt;/b&gt; se convirtió en un estándar de industria para los primeros micro-ordenadores.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;DOS&lt;/b&gt; es una familia de sistemas operativos para PC. El nombre son las siglas de &lt;b&gt;D&lt;/b&gt;isk &lt;b&gt;O&lt;/b&gt;perating &lt;b&gt;S&lt;/b&gt;ystem (sistema operativo de disco). Fue creado originalmente para computadoras de la familia IBM PC, que utilizaban los procesadores Intel 8086 y 8088, de 16 bits y 8 bits, respectivamente, siendo el primer sistema operativo popular para esta plataforma. Contaba con una interfaz de línea de comandos en modo texto ó alfanumérico, vía su propio intérprete de órdenes, &lt;b&gt;command.com&lt;/b&gt;. Probablemente la más popular de sus variantes sea la perteneciente a la familia MS-DOS, de Microsoft, suministrada con buena parte de los ordenadores compatibles con IBM PC, en especial aquellos de la familia Intel, como sistema operativo independiente o nativo, hasta la versión 6.22 (bien entrados los 90), frecuentemente adjunto a una versión de la interfaz gráfica Ms Windows de 16 bits, como las 3.1x.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;E/OS&lt;/b&gt; (&lt;b&gt;E&lt;/b&gt;mulator &lt;b&gt;O&lt;/b&gt;perating &lt;b&gt;S&lt;/b&gt;ystem) is a virtual machine emulation system.&lt;/p&gt;  &lt;p&gt;E / OS se basa principalmente en el kernel Linux, Qemu, XFree86 y Wine, y está destinada a ser un reemplazo para el funcionamiento de los sistemas de como Microsoft Windows, Mac OS, BeOS, OS/2, DOS y Linux. Su objetivo es hacer posible ejecutar cualquier programa diseñado para cualquier sistema operativo sin necesidad de instalar en realidad ningún otro sistema operativo. Así, sólo un sistema operativo, en este caso, una alternativa libre a los sistemas mencionados, serían necesarios para la ejecución de todos los programas.   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;eComStation&lt;/b&gt; (o &lt;b&gt;eCS&lt;/b&gt;) es el sistema operativo para PC, desarrollado por Serenity Systems, que está basado en OS/2 Warp 4.5, incluyendo una nueva interfaz gráfica y varias mejoras, como el Journaling File System, un sistema de archivos que es mucho más tolerante a fallos y que es usado por otros sistemas como AIX.&lt;/p&gt;  &lt;p&gt;Este sistema integra la última versión del producto original de IBM (los llamados &lt;i&gt;Convenience Pack&lt;/i&gt;) con otros productos que IBM distribuye separadamente por algún motivo (como controladores USB) y diversos desarrollos de software, muchos de ellos open Source, para ofrecer al usuario un sistema actualizado, más completo y sencillo de instalar que el original de IBM.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;EXEC II&lt;/b&gt; es un sistema operativo de tipo batch o por lotes. En este sentido, EXEC II permite procesar una gran cantidad de trabajo con poca o ninguna interacción entre los usuarios y los programas en ejecución.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;GCOS&lt;/b&gt; (&lt;b&gt;S&lt;/b&gt;istema &lt;b&gt;O&lt;/b&gt;perativo &lt;b&gt;C&lt;/b&gt;omprensivo &lt;b&gt;G&lt;/b&gt;eneral) es una familia de sistemas operativos orientados hacia computadoras centrales (mainframes). Su primera versión fue desarrollada por General Electric en 1962; originalmente designado &lt;b&gt;GECOS&lt;/b&gt; (the &lt;b&gt;G&lt;/b&gt;eneral &lt;b&gt;E&lt;/b&gt;lectric &lt;b&gt;C&lt;/b&gt;omprehensive &lt;b&gt;O&lt;/b&gt;perating &lt;b&gt;S&lt;/b&gt;upervisor) .&lt;/p&gt;  &lt;p&gt;Actualmente aún se utiliza sobre grandes sistemas, aunque raras veces, sobre todo debido a problemas de herencia. Los programas empleados sobre este sistema operativo están generalmente escritos en lenguajes tales como COBOL, Fortran&amp;#160; y ahora Java.   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;GEOS&lt;/b&gt; (&lt;i&gt;&lt;b&gt;G&lt;/b&gt;raphic &lt;b&gt;E&lt;/b&gt;nvironment &lt;b&gt;O&lt;/b&gt;perating &lt;b&gt;S&lt;/b&gt;ystem&lt;/i&gt;) es un sistema operativo desarrollado por Berkeley Softworks (posteriormente Geoworks). Diseñado originalmente para el Commodore 64 y lanzado en 1986, proporciona una interfaz gráfica de usuario para este popular ordenador de 8 bits. &lt;/p&gt;  &lt;p&gt;GEOS recuerda mucho a las primeras versiones de Mac OS e incluye un procesador de textos gráfico (geoWrite) y un programa de dibujo (geoPaint). Durante años, Commodore incluyó GEOS con el C64C, su nueva versión del C64 (rediseñada y de coste más reducido, usaba una caja similar a la del Commodore 128). Debido a ello, GEOS es el tercer más popular sistema operativo del mundo en término de unidades distribuidas, tras MS-DOS y Mac OS.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;El &lt;b&gt;GM-NAA I/O&lt;/b&gt; (de &lt;i&gt;sistema de entrada/salida de General Motors y North American Aviation&lt;/i&gt;) es el primer sistema operativo de la historia de la informática.&lt;/p&gt;  &lt;p&gt;Fue creado en 1956 por Bob Patrick de General Motors y Owen Mock de North American Aviation para un ordenador IBM 704. La base de su construcción fue el sistema monitor creado en 1955 por programadores de General Motors para sus IBM 701.&lt;/p&gt;  &lt;p&gt;GM-NAA I/O, cuya función principal era ejecutar automáticamente un nuevo programa una vez que el que se estaba ejecutando terminaba, estaba formado por unas rutinas accesibles a los programas que proporcionaban un acceso común a los dispositivos de entrada/salida.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;GNU Hurd&lt;/b&gt; es un conjunto de programas servidores que simulan un núcleo Unix que establece la base del sistema operativo GNU. El Proyecto GNU lo ha estado desarrollando desde 1990 como software libre, distribuyéndolo bajo la licencia GPL.&lt;/p&gt;  &lt;p&gt;Hurd intenta superar los núcleos tipo Unix en cuanto a funcionalidad, seguridad y estabilidad, aun manteniéndose compatible con ellos. Esto se logra gracias a que Hurd implementa la especificación POSIX (entre otras), pero eliminando las restricciones arbitrarias a los usuarios.   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;GNU/Linux&lt;/b&gt; es el término empleado para referirse al sistema operativo similar a Unix que utiliza como base las herramientas de sistema de GNU y el núcleo Linux. Su desarrollo es uno de los ejemplos más prominentes de software libre; todo el código fuente puede ser utilizado, modificado y redistribuido libremente por cualquiera bajo los términos de la GPL de GNU (&lt;b&gt;L&lt;/b&gt;icencia &lt;b&gt;P&lt;/b&gt;ública &lt;b&gt;G&lt;/b&gt;eneral de GNU) y otras licencias libres.&lt;sup&gt;     &lt;br /&gt;      &lt;br /&gt;&lt;/sup&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;HDOS&lt;/b&gt; fue uno de los primeros sistemas operativos para microcomputadoras originalmente escrito para el Heath H-8 y más tarde utilizado en los Heath H89 / Zenith Z89. El autor fue Gordon Letwin, que más tarde fue uno de los primeros empleados de Microsoft y artífice de OS/2.&lt;/p&gt;  &lt;p&gt;HDOS originalmente venía con un conjunto muy limitado de herramientas software de sistema, que incluye un ensamblador, pero se añadieron más adelante programas comerciales y gratuitos.&lt;/p&gt;  &lt;p&gt;La última versión de HDOS, HDOS 2,0, es notable porque fue uno de los primeros sistemas operativos en utilizar la carga de controladores (drivers) para alcanzar un mayor grado de independencia del dispositivo y extensibilidad.   &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;i5/OS&lt;/strong&gt; (antes llamado OS/400) es un sistema operativo usado en las minicomputadoras iSeries de IBM (antes llamadas AS/400). La última versión de i5/OS es la V6R1.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;El &lt;b&gt;iS-DOS&lt;/b&gt; es un sistema operativo usado por algunos clónicos rusos del ZX Spectrum con interface de disco Beta Disk. El iS-DOS fue desarrollado en 1990 o 1991 por Iskra Soft Ltd. (Leningrado, URSS).&lt;/p&gt;  &lt;p&gt;Soporta discos flexibles DS y DD, discos duros y CD-ROM.&lt;/p&gt;  &lt;p&gt;Una versión moderna para el ordenador ATM es &lt;b&gt;TASiS&lt;/b&gt;, desarrollada por NedoPC.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;KolibriOS&lt;/b&gt; (también conocido como &lt;b&gt;KOS&lt;/b&gt; o &lt;b&gt;Kolibri&lt;/b&gt;), es un sistema operativo libre con un núcleo monolítico anticipativo (monolithic preemptive kernel) en tiempo real y drivers de video escrito para PC con arquitectura x86 de 32 bits. Es desarrollado y mantenido por The KolibriOS Project Team.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;KolibriOS&lt;/b&gt; está escrito completamente en FASM (lenguaje Assembler). Sin embargo, permite que lenguajes y compiladores de alto nivel (C--, C, C++, Free Pascal, Forth; entre otros) puedan ser usados para el desarrollo de aplicaciones.&lt;/p&gt;  &lt;p&gt;Es importante destacar que no se trata de una distribución de MenuetOS como algunas fuentes mencionan, sino que es una derivación independiente, la cual se separó de MenuetOS en el año 2005 (según aseguran los propios autores); cuando este último dejó de ser distribuido bajo licencia GPL.   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;LynxOS RTOS&lt;/b&gt; es un sistema operativo de tiempo real tipo Unix de LynuxWorks (anteriormente &amp;quot;Lynx Real-Time Systems&amp;quot;).    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;MacOS&lt;/b&gt;, abreviatura de &lt;b&gt;Mac&lt;/b&gt;intosh &lt;b&gt;O&lt;/b&gt;perating &lt;b&gt;S&lt;/b&gt;ystem (Sistema Operativo de Macintosh), es el nombre del primer sistema operativo de Apple para los ordenadores Macintosh. El Mac OS original fue el primer sistema operativo con una interfaz gráfica de usuario en tener éxito. El equipo de Macintosh incluía a Bill Atkinson, Jef Raskin y Andy Hertzfeld.&lt;/p&gt;  &lt;p&gt;Hay una gran variedad de puntos de vista sobre cómo fue desarrollado Macintosh y dónde se originaron las ideas subyacentes. Mientras la conexión entre el proyecto Macintosh y el proyecto Alto en Xerox PARC ha sido establecido en los documentos históricos, las contribuciones iniciales del Sketchpad de Ivan Sutherland y el On-Line System de Doug Engelbart no son menos significantes. Véase Historia de la interfaz gráfica de usuario y Apple vs Microsoft.&lt;/p&gt;  &lt;p&gt;Apple quitó importancia de forma deliberada a la existencia del sistema operativo en los primeros años de Macintosh para ayudar a hacer que la máquina pareciera más agradable al usuario y a distanciarla de otros sistemas como MS-DOS, que eran un desafío técnico. Apple quería que Macintosh fuera visto como un sistema que trabajara nada más con encenderlo.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;MenuetOS&lt;/b&gt;, también conocido como &lt;b&gt;MeOS&lt;/b&gt;, es un sistema operativo creado por Ville Mikael Turjanmaa para PC x86, escrito enteramente en lenguaje ensamblador (FASM) para 32 y 64 bits.&lt;/p&gt;  &lt;p&gt;Soporta programación en 32 y 64 bits en lenguaje de ensamblador.&lt;/p&gt;  &lt;p&gt;Su núcleo es de tiempo real, monolítico, con multitarea preferente, el cual incluye controladores de vídeo.&lt;/p&gt;  &lt;p&gt;También tiene una distribución en CD, la que viene con muchas aplicaciones ya preinstaladas.&lt;/p&gt;  &lt;p&gt;Su desarrollo se ha enfocado en una realización eficiente, sencilla y rápida. Tiene un escritorio gráfico, juegos y conectividad, mediante una pila TCP/IP. Aun así, cabe en un disco flexible de 1'44MB. También facilita la programación fácil y completa en lenguaje ensamblador. Esto se opone a la visión habitual según la cual el lenguaje ensamblador sólo es útil en sistemas viejos o empotrados.&lt;/p&gt;  &lt;p&gt;Originalmente fue escrito para la arquitectura x86 y licenciado bajo la licencia GPL, por lo que muchas de sus aplicaciones son distribuidas bajo la misma licencia. La versión de 64 bits, habitualmente llamada &amp;quot;Menuet 64&amp;quot;, sigue siendo una plataforma de aprendizaje para la programación en ensamblador de 64 bits; pero a diferencia de la versión de 32 bits, se distribuye como freeware sin el código fuente de los componentes centrales. Menuet 64 funciona tanto en Hardware real, como virtualizado.   &lt;br /&gt;    &lt;br /&gt;MorphOS es un sistema operativo, en parte propietario y en parte de código abierto, producido para ordenadores basados en los procesadores PowerPC (PPC), entre los que se encuentran la mayoría de los modelos clásicos de ordenadores Commodore Amiga con aceleradoras PPC, y los equipos con placa madre Pegasos y EFIKA PPC. El sistema operativo en si es propietario, pero muchas librerías y otros componentes del mismo son de código abierto, tales como Ambient (la interface del escritorio). La mariposa azul es el logo característico de este sistema operativo.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;NEXTSTEP&lt;/b&gt; es el sistema operativo orientado a objetos, multitarea que NeXT Computer, Inc. diseñó para correr en los ordenadores NeXT (informalmente conocidos como &amp;quot;black boxes&amp;quot;).    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Not Another Completely Heuristic Operating System&lt;/b&gt; o &lt;b&gt;NachOS&lt;/b&gt; es un Sistema Operativo educativo para los estudiantes de cursos de Sistemas Operativos, sin graduación o aspirantes a graduados. Fue desarrollado en la University of California, Berkeley, diseñado por Thomas Anderson, y es usado por numerosas escuelas.&lt;/p&gt;  &lt;p&gt;Escrito originalmente en C++ para MIPS, la versión actual (5.0j) ha sido escrita en el lenguaje de programación Java.&lt;/p&gt;  &lt;p&gt;Ha sido portado a MIPS, Sparc (SunOS y Solaris), Alpha, Linux, NetBSD y FreeBSD, RS/6000, Mac 68000 (no soportada), y HP.&lt;/p&gt;  &lt;p&gt;La Stanford University utilizó NACHOS hasta 2004, en que introdujo Pintos, un sistema operativo derivado de NACHOS escrito en C y diseñado para correr en el actual hardware x86 (como Java, NachOS no corre sobre un hardware real, sino sobre una máquina virtual, por lo que requiere un sistema operativo anfitrión).   &lt;br /&gt;    &lt;br /&gt;El sistema operativo &lt;b&gt;OpenVMS&lt;/b&gt; (Sistema de Memoria Virtual) es un sistema multiusuario y multiproceso diseñado por Digital, ahora parte de Hewlett-Packard, para su utilización en entornos de tiempo compartido, tiempo real, procesamiento por lotes y procesamiento de transacciones. Conocido inicialmente como VMS, se ejecutaba sobre sistemas VAX,el nombre cambió a OpenVMS en 1990. Fue posteriormente portado a DEC Alpha(1992) e Intel Itanium.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Palm webOS&lt;/b&gt; es un sistema operativo empotrado desarrollado por Palm, Inc. para smartphones, el cual fue presentado al público en el Consumer Electronics Show de Las Vegas el 8 de enero de 2009.    &lt;br /&gt;Palm webOS está diseñado para ser usado a través de una interfaz de usuario basada en pantalla táctil. Incluye una &lt;i&gt;suite&lt;/i&gt; de aplicaciones para gestión de datos personales y hace uso de una serie de tecnologías web como XHTML, JavaScript y CSS.&lt;sup&gt; &lt;/sup&gt;Palm asegura que el diseño alrededor de estas tecnologías fue intencionado, para evitar así el aprendizaje de un nuevo lenguaje de programación por parte de los desarrolladores.&lt;sup&gt;[3]&lt;/sup&gt; &lt;sup&gt;[4]&lt;/sup&gt; El Palm Pre, cuya comercialización está prevista para la primera mitad de 2009, es el primer dispositivo que incorpora este sistema operativo.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Pintos&lt;/b&gt; es un sistema operativo educativo creado en la Stanford University en 2004 y usado en los cursos de pregrado para introducir conceptos de diseño e implementación de un sistema operativo, requiriendo la implementación de partes bastante significativas de un sistema operativo real, como son el manejo de threads y memoria y el acceso al sistema de archivos. Pintos deriva de NachOS un sistema similar creado por la University of California, Berkeley. A diferencia de NachOS, Pintos puede ejecutarse en el hardware x86 actual, en lugar de correr como una máquina virtual sobre un sistema anfitrión. Pintos está escrito en el Lenguaje de programación C en lugar de en C++.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Plan 9 from Bell Labs&lt;/b&gt; (o simplemente &lt;b&gt;Plan 9&lt;/b&gt;) es un sistema operativo distribuido, usado principalmente como vehículo de investigación.&lt;/p&gt;  &lt;p&gt;Fue desarrollado como el sucesor en investigación del sistema UNIX por el Computing Sciences Research Center de los Laboratorios Bell entre mitad de los años 80 y 2002.&lt;/p&gt;  &lt;p&gt;Plan 9 es conocido especialmente por representar todos los interfaces del sistema, incluyendo aquellos utilizados para redes y comunicación con el usuario, a través del sistema de archivos en lugar de sistemas especializados.&lt;/p&gt;  &lt;p&gt;El nombre proviene de la película de ciencia ficción llamada &lt;i&gt;Plan 9 del espacio exterior&lt;/i&gt;.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;El sistema operativo &lt;b&gt;SHARE Operating System&lt;/b&gt;, también conocido como &lt;b&gt;SOS&lt;/b&gt;, fue creado en 1959 como una mejora del sistema operativo GM-NAA I/O, el primer sistema operativo, por el grupo de usuarios SHARE. El objetivo fundamental era mejorar la compartición de programas respecto a GM-NAA I/O.&lt;/p&gt;  &lt;p&gt;SHARE Operating System proporcionaba nuevos métodos para gestionar los buffers y los dispositivos de entrada/salida, y, al igual que GM-NAA I/O, permitía la ejecución de programas realizados en lenguaje ensamblador.&lt;/p&gt;  &lt;p&gt;Inicialmente funcionaba en ordenadores IBM 704, pero posteriormente fue portado a los IBM 709.&lt;/p&gt;  &lt;p&gt;Más tarde IBM dio soporte al mismo bajo el nombre de &lt;b&gt;IBSYS&lt;/b&gt;, portándolo a sus nuevos ordenadores basados en transistores, los IBM 7090 y 7094.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;SO3&lt;/b&gt; es un sistema operativo para PC de origen Dominicano desarrollado por SHD Dominicana en 1999, orientado a pcs de escritorio y servidores. compatible con el estandard posix. Su principal característica es su modularidad y su adaptabilidad lo que lo hacen uno de los sistemas más flexibles de todos los tiempos. Sus desarrollos llaman a esto &amp;quot;evolución acelerada&amp;quot;. Cada usuario que posee este sistema es capaz de hacerle cambios y poder distribuirlo libremente con dichos cambios.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;SABRE&lt;/b&gt; es un sistema operativo de procesamiento en tiempo real (RT TPOS) centralizado, desarrollado por American Airlines e IBM. Este sistema operativo corre en un servidor central y es accedido desde terminales de usuario que no cuentan más que con un bios primitivo, un monitor monocromático, un teclado y un par de puertos serie para comunicarse con una impresora y un MODEM; el sistema no cuenta con medios de acceso extraíbles ya que en el momento de ser diseñadas no había medios extraíbles que pudieran integrarse en una terminal personal por su tamaño y costo.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Sequel&lt;/b&gt; es un sistema operativo desarrollado según la filosofía del sistema BeOS, basado en un micronúcleo de licencia BSD.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;El Sinclair &lt;b&gt;QDOS&lt;/b&gt; (a veces escrito &lt;b&gt;Qdos&lt;/b&gt; en la literatura oficial) es el sistema operativo multitarea presente en el ordenador personal Sinclair QL y sus clones. Fue diseñado por Tony Tebby mientras trabajaba en Sinclair Research, como una alternativa interna a otro sistema operativo, posteriormente cancelado, encargado a GST Computer Systems.&lt;/p&gt;  &lt;p&gt;El Sinclair QDOS se implementó en Lenguaje ensamblador Motorola 68000, y en el QL, reside en 48 KB de ROM, consistente en tres ROM chips de 16 KB o en un chip de 32 KB y otro de 16 KB. En esas ROMs también se almacena el intérprete de SuperBASIC, una variante avanzada del BASIC con adiciones de programación estructurada. También actúa como el intérprete de comandos QDOS.&lt;/p&gt;  &lt;p&gt;Las prestaciones proporcionadas por QDOS incluyen manejo de procesos (o &amp;quot;trabajos&amp;quot; en la terminología del QDOS), asignación de memoria, y un &amp;quot;sistema de redirección de entrada/salida&amp;quot; extensible, proporcionando un marco genérico para los sistemas de archivos y controladores de dispositivos. También se proporcionaba una muy básica funcionalidad de ventanas en pantalla. Esto, y varias otras prestaciones, nunca fueron completamente implementadas en las versiones liberadas de QDOS, pero fueron implementadas en posteriores extensiones al sistema operativo producidos por la compañía fundada por Tebby, QJUMP.&lt;/p&gt;  &lt;p&gt;También se desarrollaron versiones mejoradas reescritas del QDOS, como el Minerva de Laurence Reeves, y SMS2 y SMSQ/E de Tebby. El último es la variante más moderna y todavía se está mejorando.   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Solaris&lt;/b&gt; es un sistema operativo de tipo Unix desarrollado por Sun Microsystems desde 1992 como sucesor de SunOS. Es un sistema certificado oficialmente como versión de Unix. Funciona en arquitecturas SPARC y x86 para servidores y estaciones de trabajo.&lt;/p&gt;  &lt;p&gt;Aunque Solaris fue desarrollado como software privativo, la mayor parte de su código se ha liberado como proyecto de software libre denominado &lt;i&gt;OpenSolaris&lt;/i&gt;. Solaris es conocido por su escalabilidad, especialmente en sistemas SPARC, y por ser origen de innovadoras tecnologías, como DTrace y ZFS.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Sprite&lt;/b&gt; es el nombre de un sistema operativo distribuido con un núcleo monolítico desarrollado por la University of California, Berkeley, más concretamente por el grupo de investigación de John Ousterhout.&lt;/p&gt;  &lt;p&gt;Este sistema operativo tiene la apariencia para los programadores de un sistema único, ya que la distribución se produce dentro del propio núcleo y de este modo, Sprite nos da la impresión de estar trabajando sobre un típico sistema UNIX.   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;SymbOS&lt;/b&gt; es un sistema operativo multitarea para ordenadores de 8 bits basados en el Zilog Z80. En el momento actual está disponible para las gamas de ordenadores Amstrad CPC, PCW, y MSX 2. Contrariamente a anteriores sistemas operativos de 8 bits, se basa en un Micronúcleo, que realiza multitarea preferente (preemptiva), orientada a prioridades y administra una memoria RAM de hasta 576 Kilobytes. SymbOS contiene un GUI similar al de MS-Windows, soporta unidades de disco no removibles de hasta 128 Gb y puede funcionar en un CPC 6128 o un MSX2 de 128 Kilobytes una vez arrancados.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Symbian&lt;/b&gt; es un sistema operativo que fue producto de la alianza de varias empresas de telefonía móvil, entre las que se encuentran Nokia, Sony Ericsson, PSION, Samsung, Siemens, Arima, Benq, Fujitsu, Lenovo, LG, Motorola, Mitsubishi Electric, Panasonic, Sharp, etc. Sus orígenes provienen de su antepasado EPOC32, utilizado en PDA's y Handhelds de PSION.&lt;/p&gt;  &lt;p&gt;El objetivo de Symbian fue crear un sistema operativo para terminales móviles que pudiera competir con el de Palm o el Windows Mobile de Microsoft.   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;THEOS&lt;/b&gt; es un Sistema Operativo que comenzó como OASIS, un sistema operativo para microordenadores basados en el procesador Z80. Originalmente desarrollado a finales de 1970 por Timothy S. Williams como una alternativa de bajo costo a los muchos más caros mini y super ordenadores Miniframe y Mainframe que eran populares en la época, Oasis disponía de facilidades multiusuario que permitían compartir los mismos recursos entre varios usuarios. Recordar que en aquella época, el ordenador más básico costaba unos cuantos miles de dólares. THEOS se enfocó por entonces a la pequeña empresa.&lt;/p&gt;  &lt;p&gt;Cuando el sistema operativo fue lanzado para la plataforma IBM PC'AT en 1982, se le cambió el nombre a THEOS, abreviatura de &lt;i&gt;THE Operating System&lt;/i&gt; (El Sistema Operativo). THEOS está en continuo desarrollo, y la compañía sigue liderada por su fundador Tim Williams, que participa muy activamente en los desarrollos actuales del producto.&lt;/p&gt;  &lt;p&gt;THEOS sigue siendo usado hoy y es muy popular en Europa, especialmente en España, donde fue introducido por Fujitsu hace 30 años, junto con otros fabricantes de hardware, con más de 3 millones de usuarios en todo el mundo.&lt;/p&gt;  &lt;p&gt;Su última version se llama &lt;b&gt;THEOS Corona&lt;/b&gt;. Corona es un sistema operativo de 32-64 bits, para las plataformas x86 compatibles y el hardware actual popular del mercado (por ejemplo SCSI 320, SATA, SAS, RED 10/100/1000, PCMCIA, USB, PCI/X/64 etc.) y servidores de gama alta.    &lt;br /&gt;    &lt;br /&gt;El &lt;b&gt;TOS&lt;/b&gt; es un sistema operativo monotarea, en esencia limitando al usuario a ejecutar una única aplicación en el sistema. Una pequeña excepción a esta regla son los accesorios de escritorio,programas pequeños que son codificados para ser accedidos a través de la barra de menú del GEM. Mientras se trabaja en una aplicación GEM se pueden tener hasta 6 accesorios abiertos de manera concurrente. Esto permite un tipo primitivo de multitarea cooperativa.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;El &lt;b&gt;TR-DOS&lt;/b&gt; es un sistema operativo de disco para ordenadores ZX Spectrum (y compatibles) incluido como firmware en el interface de disco Beta Disk. El sistema operativo &lt;i&gt;TR-DOS&lt;/i&gt; y el interface &lt;i&gt;Beta Disk&lt;/i&gt; fueron desarrollados por &lt;b&gt;Technology Research Ltd&lt;/b&gt; (Reino Unido), en 1985.&lt;/p&gt;  &lt;p&gt;En sus primeras versiones podía crear hasta 128 directorios por disco. La última versión estable conocida es el TR-DOS 5.03. Posteriormente, han aparecido versiones hackeadas, como la 6.10E (en Mr Gluk Reset Service) y vTR-DOS (para ATM). Existen versiones actualizadas en 2006.&lt;/p&gt;  &lt;p&gt;El TR-DOS soporta discos flexibles SS/DS, SS/DD. Todas las versiones modernas soportan disco RAM. Algunas versiones soportan disco duro.&lt;/p&gt;  &lt;p&gt;Algunos sistemas operativos para ZX Spectrum derivados del TR-DOS son el HR-DOS y el SP-DOS.   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Tabos&lt;/b&gt; es un sistema operativo (aun en desarrollo) libre para Intel x86 y procesadores compatibles. Se puede usar como sistema de rescate, y como un sistema de escritorio para usuarios domésticos o usuarios de oficina.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Unununium&lt;/b&gt; es un sistema operativo sin núcleo, hecho a través de VOiD por el hacker Dave Poirier en lenguaje ensamblador. Está enfocado en la velocidad y, sin duda, el gran mérito de este sistema reside en la dificultad de documentar las miles de líneas de un sistema operativo sin núcleo en ensamblador.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;El &lt;b&gt;VM/CMS&lt;/b&gt; es un sistema operativo de máquina virtual que se anunció para el público en 1972 por IBM para computadores centrales o mainframes, plataformas como System/370, System/390, zSeries, System Z9 además de otros sistemas compatibles como el emulador Hércules.&lt;/p&gt;  &lt;p&gt;Está basado en máquina virtual de sistema cuyo núcleo es un programa de control llamado CP (Control Program) o también denominado VMCP (Virtual Machine Control Program) cuya principal característica es que permite la ejecución de una máquina virtual dentro de otra máquina virtual, también es la encargada de controlar los dispositivos hardware del ordenador: CPU, discos cintas, etc. Además CP es quién controla el proceso de LOGON de un usuario y activa la máquina virtual. Junto a este componente existe el CMS (Conversacional Monitor System) su entorno permite la ejecución, creación y depuración de aplicaciones, gestión de archivos de datos, trabajo por lotes además de comunicarse con otros usuarios y sistemas, en general es el encargado de aceptar las órdenes del usuario y convertirlas en instrucciones que el CP es capaz de ejecutar.   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Windows&lt;/b&gt; es una familia de sistemas operativos desarrollados y comercializados por Microsoft. Existen versiones para hogares, empresas, servidores y dispositivos móviles, como computadores de bolsillo y teléfonos inteligentes. Hay variantes para procesadores de 16, 32 y 64 bits.&lt;/p&gt;  &lt;p&gt;Incorpora diversas aplicaciones como Internet Explorer, el Reproductor de Windows Media, Windows Movie Maker, Windows Mail, Windows Messenger, Windows Defender, entre otros.&lt;/p&gt;  &lt;p&gt;Desde hace muchos años es el sistema operativo más difundido y usado del mundo; de hecho la mayoría de los programas (tanto comerciales como gratuitos y libres) se desarrolla originalmente para este sistema.&lt;/p&gt;  &lt;p&gt;Windows Vista es la versión más reciente para computadoras personales, Windows Server 2008 para servidores y Windows Mobile 6.0 en los dispositivos móviles.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;WOW64&lt;/b&gt; (&lt;i&gt;Windows-on-Windows 64-bit&lt;/i&gt;) es un subsistema de Microsoft Windows capaz de ejecutar aplicaciones de 32 bit y que se incluye en todas las versiones de 64 bit de Windows (Windows XP 64 bit Edition, Windows Server 2003 x64 y Windows Vista 64 bit Edition). WOW64 se encarga de todas las diferencias en las versiones 32 y 64 bit de Windows, especialmente las que implican cambios estructurales en el propio Windows.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;XINU&lt;/b&gt; &amp;quot;Xinu Is Not Unix&amp;quot; (Es un acrónimo recursivo: Xinu No es Unix) es un Sistema operativo Tipo UNIX, desarrollado Originalmente por Douglas Comer con fines de instrucción, en la Universidad de Purdue en la década de los ochentas. Ha sido portado a varias plataformas, como son: DEC LSI-11, Sun-2 y Sun-3,Intel x86, y PowerPC G3.&lt;/p&gt;  &lt;p&gt;Xinu ha sido usado como base en el desarrollo de varios productos comerciales, y sigue siendo utilizado en algunas universidades del mundo en cursos de Sistemas Operativos y redes.   &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;XtreemOS&lt;/b&gt; es un sistema operativo basado en Linux, que soporta organizaciones virtuales en Grid de nueva generación. El principal objetivo del proyecto XtreemOS (perteneciente al 6º Programa Marco de la CE, sección de Tecnologías de la Sociedad de la Información) es el diseño, implementación, evaluación y distribución de un sistema operativo Grid de código abierto (denominado XtreemOS) con soporte nativo para organizaciones virtuales y capaz de correr en una amplia gama de plataformas, desde clusters a dispositivos móviles.    &lt;br /&gt;    &lt;br /&gt;Este texto fue realizado con los datos obtenidos de &lt;a href="http://www.wikipedia.org/" target="_blank"&gt;Wikipedia.org&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-6638325350100479551?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/6638325350100479551/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=6638325350100479551' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/6638325350100479551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/6638325350100479551'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/sistemas-operativos.html' title='Sistemas Operativos'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2104946136001723888</id><published>2009-05-16T18:55:00.001-03:00</published><updated>2009-05-16T18:55:37.553-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Curiosidades'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Imagenes'/><category scheme='http://www.blogger.com/atom/ns#' term='Navegadores'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>Híbridos en Informática</title><content type='html'>&lt;p&gt;&lt;img src="http://files.myopera.com/Zaphira/blog/firefox.jpg" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2104946136001723888?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2104946136001723888/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2104946136001723888' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2104946136001723888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2104946136001723888'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/hibridos-en-informatica.html' title='Híbridos en Informática'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-578052999566956934</id><published>2009-05-09T21:41:00.001-03:00</published><updated>2009-05-09T21:41:32.696-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Educacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Linux y comandos para manejo de archivos</title><content type='html'>&lt;p style="margin-bottom: 0cm"&gt;&lt;em&gt;Resumen para rendir el primer practico de Sistemas Operativos:&lt;/em&gt;    &lt;br /&gt;&lt;strong&gt;Distribuciones de Linux:&lt;/strong&gt;    &lt;br /&gt;Red Hat, Caldera, Debian, Slackware, Correctiva, Ubuntu, Ututo, Suse, etc.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Arquitectura Básica de un SO:&lt;/b&gt;&lt;span&gt;     &lt;br /&gt;4)Aplicaciones      &lt;br /&gt;3)Shell o Caparazón      &lt;br /&gt;2)Kernell o núcleo      &lt;br /&gt;1)Hardware      &lt;br /&gt;Las dos capas que corresponden al SO son Shell(Interprete de Comandos, utilizado por usuarios y aplicaciones) y Kernell(núcleo que se comunica con el Hardware).      &lt;br /&gt;Trabajaremos en modo consola aunque existen entornos gráficos.      &lt;br /&gt;Se puede trabajar con 6 consolas virtuales, estas se intercambian con Ctrl+Alt+F1 para pasar a texto y Ctrl+Alt+F9 para pasar a modo grafico.      &lt;br /&gt;Existen varios tipos de Shell, variando a veces los prompts:      &lt;br /&gt;_ash: Ashell      &lt;br /&gt;_csh: Cshell %      &lt;br /&gt;_tcsh: Extension de Cshell      &lt;br /&gt;_ksh: Kornshell $      &lt;br /&gt;_bsh: Bourne Shell $      &lt;br /&gt;_bash: Bourne Again Shell $ //mas usada      &lt;br /&gt;      &lt;br /&gt;&lt;u&gt;Los comandos se tipean en bash de esta manera:&lt;/u&gt;      &lt;br /&gt;$ ________ ________ __________      &lt;br /&gt;el signo $ es el prompt, el primer campo es para el nombre de comando, el segundo para el argumento y el tercero que puede ser ninguno o muchos es para pasarle opciones.      &lt;br /&gt;Esto no es así siempre pero es la estructura habitual.      &lt;br /&gt;El prompt # es exclusivo del administrados del sistema.      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;b&gt;Sistema de Archivos&lt;/b&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;Root(padre o admin, Raiz nomas)     &lt;br /&gt;/usr &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Software para ejecutar aplicaciones de usuario.     &lt;br /&gt;/lib &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Librerías de lenguajes de programación.     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;/bin &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Comandos del SO.     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;/dev &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Device, dispositivos periféricos, drivers.     &lt;br /&gt;/etc &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Configuración de arranque del sistema.     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;/tmp &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Archivos Temporales.     &lt;br /&gt;/home &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Contiene a los usuario o sus subdirectorios.     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;/alumno214   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /invitado    &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;/mnt &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; montaje(mount) archivos de montaje.     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;/proc &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Proceso – archivos de proceso activos     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;/boot &lt;/span&gt;&lt;font face="Times New Roman, serif"&gt;&lt;span&gt;→&lt;/span&gt;&lt;/font&gt;&lt;span&gt; Archivos de arranque&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;   &lt;br /&gt;i-nodo: numero de identificación del archivo(todos los directorios son archivos para Linux)&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;Todos los directorios y archivos tienen un dueño(quien lo crea) y tienen 3 tipos de permiso.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;span&gt;     &lt;br /&gt;&lt;/span&gt;&lt;b&gt;Permisos de Archivo: &lt;/b&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;Terna rwx, donde:   &lt;br /&gt;r = permiso de lectura (read)&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;w = permiso de escritura (write)&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;x = permiso de ejecución (execution)   &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;Esta terna de permisos debe ser aplicada a cada usuario o grupo de usuarios:   &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;rwx rwx rwx     &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;Dueño user, Grupo, Otros   &lt;br /&gt;    &lt;br /&gt;Las combinaciones de estos tres valores entre prendidos y apagados son 7, donde 7 es el de mayor valor o sea que tiene permisos de escritura, lectura y ejecución, esta terna se modifica con el comando chmod seguido de la secuencia de numero que representan cada estado de la terna y luego el nombre del archivo, por eje: chmod 777 archivo o chmod 000 archivo.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;Eje: 704 111 000 100&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;font face="Consolas, monospace"&gt;rwx --- r--&lt;/font&gt;    &lt;br /&gt;    &lt;br /&gt;Los archivos están ordenados en una tabla de archivos donde se guarda su inodo, sus permisos, nombre, dueño, fecha de creación, etc, etc.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Tipos de rutas para moverse en el file system&lt;/b&gt;    &lt;br /&gt;La ruta absoluta comienza con / el cual ubica la raíz y desde allí se debe especificar la dirección.    &lt;br /&gt;La ruta relativa es relativa a la carpeta actual:    &lt;br /&gt;por ejemplo dada esta estructura(ruta absoluta): /home/joaquin/jojojo, y nos ubicamos en home.    &lt;br /&gt;Para acceder a jojojo seria: ../home/joaquin/../joaquin/jojojo o simplemente joaquin/jojojo.    &lt;br /&gt;    &lt;br /&gt;&lt;b&gt;Comandos:&lt;/b&gt;    &lt;br /&gt;orden o acción(verbo infinitivo) copiar, pegar, zipear, mover, enlazar, crear, borrar, etc.    &lt;br /&gt;Ejecución de un comando:    &lt;br /&gt;$(prompt) [comando] [opciones] [argumentos]    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;strong&gt;Comando ls (list -listado, lista de archivos y directorios)&lt;/strong&gt;&lt;/u&gt;    &lt;br /&gt;ls -l / (listar los archivos y directorios de raíz (/))    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;drwxrwxrwx 15 root grupo tamaño date nombre&lt;/font&gt;    &lt;br /&gt;el primer carácter es da el tipo: d(directory) -(archivo) b(archivo de bloque) l(linkeado enlazado) p(tubería pipe) f(buffer).    &lt;br /&gt;El segundo campo es de los permisos Dueño Grupo Otros.    &lt;br /&gt;Tercer campo contador de enlaces.    &lt;br /&gt;Cuarto campo dueño.    &lt;br /&gt;Quinto campo tamaño.    &lt;br /&gt;Sexto fecha de creación.    &lt;br /&gt;Séptimo nombre de archivo.    &lt;br /&gt;(Esto varia en la consola donde los campos están divididos por espacios en blanco)    &lt;br /&gt;$ ls -l (Listado extendido, todos los atributos menos el i-nodo)    &lt;br /&gt;$ ls -i (Listado de archivos con nombre y numero de i-nodo)    &lt;br /&gt;$ls -li (combinación de ambos)    &lt;br /&gt;$ls (solo nombres de archivo)    &lt;br /&gt;    &lt;br /&gt;Archivo:Conjunto de registros que pertenecen a la misma aplicación, Registro: Conjunto de campos el campo es indivisible.    &lt;br /&gt;Los archivos en Linux se identifican con numero de i-nodo, es único y es el medio por el que el SO lo accede, el nombre es simbólico y sirve para resolver la interacción con el usuario a quien le resulta mas fácil trabajar con una estructura de directorios y archivos con nombre que con miles de números de i-nodo.    &lt;br /&gt;Cada archivo tiene una tabla con las características del archivo, es accedido por el numero de i-nodo.    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;u&gt;&lt;b&gt;Operación con archivos:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;Crear archivos de datos:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Se realiza con el comando cat que es una llamada a ingreso por teclado mas le operador de asignación &amp;gt; que es quien crea el archivo.      &lt;br /&gt;Ejemplo:      &lt;br /&gt;&lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$cat &amp;gt; nombredearchivo&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Esto da una apertura para el ingreso por teclado que se guardara en nombedearchivo.      &lt;br /&gt;Pero el que crea el archivo es mas bien &amp;gt; por ejemplo esta orden:      &lt;br /&gt;&lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$ls -l /bin &amp;gt; nombre&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Guarda lo devuelto por ls -l /bin en nombre.      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;Crear directorios:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Se realiza con el comando mkdir(make directory)      &lt;br /&gt;&lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$mkdir pruebas&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;crea el directorio pruebas en el directorio actual.      &lt;br /&gt;$mkdir /borrar      &lt;br /&gt;crea el directorio borrar en la raíz del SO.      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;Borrar archivos:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Se borran con el comando rm seguido por el/los nombres de archivo.      &lt;br /&gt;Ejemplo: &lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$rm jojojo&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;Borrar Directorios:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Se borran con el comando rmdir seguido por el/los nombre de comando.      &lt;br /&gt;Ejemplo: &lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$rmdir /borrar&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Borramos el directorio creado en el ejemplo de creación de directorios.&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;u&gt;&lt;b&gt;Concatenar archivos:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Se hace un cat concatenando dos archivos hacia uno nuevo.      &lt;br /&gt;Los operadores de asignación &amp;gt; borran el contenido anterior del archivo mientras que el &amp;gt;&amp;gt; agrega.      &lt;br /&gt;&lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$cat [archivo1] [archivo2] &amp;gt; [nuevoarchivooviejo]&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;Copiar archivos:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;El comando es cp(copy) archivo de origen y archivo de destino.      &lt;br /&gt;Se crean dos archivos físicos con distinto i-nodo.      &lt;br /&gt;&lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$cp jojojo jajaja&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;Mover o renombrar archivos:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;El comando es mv [archivodeorigen] [archivodestino]      &lt;br /&gt;Lo hace es cambiar el nombre del archivodeorigen por otro pero sigue manteniendo el nuero de i-nodo y archivo físico, en la tabla de archivos solamente modifica ubicación y nombre.      &lt;br /&gt;&lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$mv jojojo jijiji&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm"&gt;&lt;u&gt;&lt;b&gt;Redireccionar:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Es el caso de &amp;gt; y &amp;gt;&amp;gt;, todos los comandos salen por pantalla salvo que se le indique una asignación con &amp;gt; o &amp;gt;&amp;gt;, por ejemplo &lt;/span&gt;&lt;font face="Consolas, monospace"&gt;&lt;span style="text-decoration: none"&gt;$ls -l bin &amp;gt; comandosdelsistema&lt;/span&gt;&lt;/font&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;Enlazar Linkear:&lt;/b&gt;&lt;/u&gt;&lt;span style="text-decoration: none"&gt;     &lt;br /&gt;Enlazar o linkear un archivo es una manera de compartirlo con varios usuarios y directorios, los enlaces son “punteros”.      &lt;br /&gt;Los comandos que se usan son:      &lt;br /&gt;$ln -d enlace duro      &lt;br /&gt;$ln -s enlace simbólico      &lt;br /&gt;$ln -f hacia archivo existente//no estoy seguro&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;&lt;font face="Consolas, monospace"&gt;$ln [opcion] [archivoorigen] [archivodestino]&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;Tipos de enlaces:   &lt;br /&gt;Duro o Hard Link:    &lt;br /&gt;- Se usa para trabajar en el mismo File System y el mismo volumen de disco.    &lt;br /&gt;- Existe un solo archivo físico, un único numero de i-nodo.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;- Este enlace permite que el archivo enlazado figure en varios directorios y con distintos nombres y el mismo i-nodo.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;- El contador de enlaces se incrementa en 1 cada vez que el archivo se enlaza.   &lt;br /&gt;- Si uno de los enlaces es modificado, todos son modificados por que es un único archivo físico.    &lt;br /&gt;- El archivo físico no se borrara hasta que el contador de enlaces sea igual a 1.    &lt;br /&gt;Simbólico o Simbolic Link(Accesos Directos):    &lt;br /&gt;- Se usa para trabajar en distintos File Systems y en distintos volúmenes de disco, remotos inclusive.    &lt;br /&gt;- Los enlaces tienen distintos i-nodos y nombre.    &lt;br /&gt;- Existen varios archivos físicos pero solo contienen la ruta física al principal.    &lt;br /&gt;- El archivo enlazado puede borrarse aunque el contador de enlaces sea distinto de 1 y los enlaces quedan apuntando a una dirección inexistente.    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;Respaldar Archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;Respaldar o generar una copia de seguridad, backup.    &lt;br /&gt;El comando que se utiliza es tar(tape archive, viene de las cintas “tape” que se usaban antes).    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$tar [opcion1] [opcion2] [opcion3] [archi.tar] [archivo1] ... [archivon]&lt;/font&gt;    &lt;br /&gt;La primera opcion indica que se desea hacer [c] crea los archivos, [x] extrae archivos guardados en un .tar, [t] muestra los archivos incluidos en un .tar.    &lt;br /&gt;La segunda opcion es [v] imprime por pantalla los archivos respaldados.    &lt;br /&gt;La tercera opcion [f] indica que el primer argumento será el nombre del archivo respaldado.    &lt;br /&gt;Ejemplos:    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$ls -l /bin &amp;gt; comandos     &lt;br /&gt;$ls -l /dev &amp;gt; drivers      &lt;br /&gt;$ls -l /proc &amp;gt; procesos      &lt;br /&gt;$ls-l      &lt;br /&gt;$tar cvf backup.tar comandos drivers procesos&lt;/font&gt;    &lt;br /&gt;//Allí se crea un respaldo backup.tar de los archivos.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;&lt;font face="Consolas, monospace"&gt;$ls -l&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;&lt;font face="Consolas, monospace"&gt;$tar tvf backup.tar&lt;/font&gt;    &lt;br /&gt;//Se ven los archivos respaldados    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$tar xvf backup.tar&lt;/font&gt;    &lt;br /&gt;//Se extraen los archivos respaldados    &lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;   &lt;br /&gt;&lt;u&gt;&lt;b&gt;Compresión de Archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;Comprimir un archivo es codificar de manera que el archivo ocupe menos espacio en el disco y tambien para que sea mas fácil de transmitir por la red, juntando varios archivos en 1.    &lt;br /&gt;Hay dos comandos &lt;font face="Consolas, monospace"&gt;compress&lt;/font&gt; y &lt;font face="Consolas, monospace"&gt;gzip&lt;/font&gt;. Gzip destruye los archivos comprimidos.    &lt;br /&gt;Con compress:    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$compress -3 [archivo]&lt;/font&gt;    &lt;br /&gt;Cuando se comprime un archivo de establece un grado de compresion que va desde -1 hasta -9 siendo -9 el mas comprimido y mas lento(no me acuerdo si es así) por defecto sin opcion bash asume que es -6.    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$uncompress [archivo.z]&lt;/font&gt;    &lt;br /&gt;Descomprime un archivo comprimido con compress. Descomprime .z.    &lt;br /&gt;Con gzip:    &lt;br /&gt;$gzip -1 [archivo]    &lt;br /&gt;Se comprime un archivo y se elimina el original.    &lt;br /&gt;$gunzip [archivo.gz]    &lt;br /&gt;Descomprime un archivo.gz comprimido con gzip, eliminando el archivo .gz.    &lt;br /&gt;Ambas compresiones se pueden ver con &lt;font face="Consolas, monospace"&gt;$zcat [nombrearchivo]&lt;/font&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;División de Archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;Se trata de dividir un archivo en n cantidad de partes que son iguales menos el ultimo archivo que contiene el resto de la división, juaz.    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$split [-lineas] [archivoadividir] [nombredearchivos]&lt;/font&gt;    &lt;br /&gt;Si no se selecciona un nombre de archivo de salida se va desde aa hasta zz, de lo contrario seria desde nombrearchivosaa hasta nombrearchivoszz.    &lt;br /&gt;Se concatenan con cat, el mismo de concatenación obv.    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$cat [nombrearchivos*] &amp;gt; [archivoconcatenado]&lt;/font&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;Comparacion de archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;La comparacion sirve para mostrar las lineas o registros diferentes, si no hay salida es por que los archivos son iguales, los comandos son diff y cmp, si hay diferencia muestra la línea y el archivo donde la encontró.    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$diff archivo1 archivo2 &lt;/font&gt;(compara archivos de texto)    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$cmp archivo1 archivo2&lt;/font&gt; (compara cualquier tipo de archivo y es mas lento)    &lt;br /&gt;la opcion -b ignora los espacios en blanco y los márgenes en la comparacion diff    &lt;br /&gt;&lt;u&gt;     &lt;br /&gt;&lt;/u&gt;&lt;u&gt;&lt;b&gt;Filtrado de archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;grep sirve para buscar cadenas de caracteres en un archivo, se usa poniendo el patrón primero y el archivo después:    &lt;br /&gt;$grep hola jojojo    &lt;br /&gt;//busca la palabra hola en el archivo jojojo    &lt;br /&gt;Las salida muestra todas las lineas donde se encontró la cadena, además se pueden especificar las siguientes opciones de comando:    &lt;br /&gt;-n además de las lineas muestra el numero de línea.    &lt;br /&gt;-v invierte la búsqueda, es decir muestra todas las lineas donde no se encuentra el patrón.    &lt;br /&gt;-y no discrimina mayúsculas y minúsculas, quita el case sensitive.    &lt;br /&gt;El operador * en la cadena sirve para prolongar la aparición de un carácter en vez de poner aaa se pone a*, el operador .* es para encontrar cualquier cadena que contenga a la primera.    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;Búsqueda de archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;Sirve para buscar archivos adentro de los directorios o del File System en conjunto:    &lt;br /&gt;la sintaxis es &lt;font face="Consolas, monospace"&gt;$find pathname -opciones argumentos&lt;/font&gt;    &lt;br /&gt;Se pueden especificar varios directorios ejemplo:    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$find /bin /dev /proc -name 'ls'&lt;/font&gt;    &lt;br /&gt;Se busca en los tres directorios archivos que se llamen ls, esta orden devuelve un listado con las rutas absolutas de los archivos encontrados. Se puede usar el operador * para buscar todos los archivos que contengan ls.    &lt;br /&gt;Ademas se pueden especificar varias opciones al mismo tiempo -name '*ls*' -name '*.z', esto buscaria archivos que contengan 'ls' y terminen en '.z'    &lt;br /&gt;Otra opcion además del nombre es buscar por fechas en donde se indica la cantidad de días desde la creación o modificación del archivo -atime 5, se piden los archivos modificados o creados en los últimos 5 días.    &lt;br /&gt;Otras opciones: -type (f, d, b, c, l, p) busca distintos tipos de archivos por ejemplo     &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$find /bin -type d&lt;/font&gt; busca directorios adentro de /bin.    &lt;br /&gt;-inum 236523, busca todos los archivos con i-nod igual a 236523 o sea el original y todos los que lo enlazan.    &lt;br /&gt;-newer busca archivos modificados después de la fecha de modificación de otro:    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$find /bin -newer /home/joaquin/jojojo.tar&lt;/font&gt;, lista todos los archivos modificados después de la creación de jojojo.tar.    &lt;br /&gt;-level sirve para especificar hasta donde va la búsqueda, nivel en la jerarquía, por ejemplo -level o busca solamente en el directorio indicado pero -level 1 busca en los siguientes subdirectorios.    &lt;br /&gt;-size +3000 -size -2000 archivos que tengan mas de 3000 y menos de 2000 bloques.    &lt;br /&gt;-mtime +10 busca archivos modificados hace mas de 10 días.    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;Ordenar Archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;Sirve para ordenar los registros de un archivo y no destruye el archivo original, de esta manera podemos tener una salida por pantalla redireccionable a otro archivo.    &lt;br /&gt;El comando es sort, las opciones son:    &lt;br /&gt;-r ordena los registros en forma descendente.    &lt;br /&gt;-n ordena numéricamente&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;-u ordena y elimina registros idénticos&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;-nr orden numérico descendente(combinación)   &lt;br /&gt;La forma es:    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$sort -k2n archivo &amp;gt; archivoordenado&lt;/font&gt;    &lt;br /&gt;En ese caso se ordena numéricamente el campo numero 2(la división de campos es por espacios) y se envía la salida al archivoordenado.    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$sort -k9nru archivo &amp;gt; archivoordenado     &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;Lo mismo pero en el orden contrario.   &lt;br /&gt;Un ejemplo con tuberías:    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$ls -l /dev | sort -k9r &amp;gt; devordenado&lt;/font&gt;    &lt;br /&gt;Lista /dev lo ordena y lo guarda.    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;Contar Registros, Palabra o Caracteres:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;El comando es wc, sintaxis $wc [-opcion] [archivo]    &lt;br /&gt;-l lineas del archivo&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;-w palabras(cadenas separadas por espacios en blanco)   &lt;br /&gt;-c caracteres.    &lt;br /&gt;&lt;font face="Consolas, monospace"&gt;$who | wc -l&lt;/font&gt;    &lt;br /&gt;Esto cuenta los usuario conectados al sistema, ya que who devuelve en lineas los usuarios y wc -l cuenta la cantidad de lineas.    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;Mostrar Contenido de Archivos:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;Son varios comandos:    &lt;br /&gt;&lt;u&gt;cat &lt;/u&gt;= muestra el contenido del archivo.    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;more&lt;/u&gt; = muestra el archivo en forma paginada    &lt;br /&gt;con la opcion more -15 se especifica la cantidad de lineas por pagina    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;less&lt;/u&gt; = muestra el archivo igual que more.    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;more y less muestran el archivo pero less lo hace de una manera mas practica, en ambos las opciones para ver son:     &lt;br /&gt;barra espaciadora: avanza pagina      &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;&lt;em&gt;tecla q: cierra el programa more y less.     &lt;br /&gt;Tecla s o Enter: avanza una línea, less lo hace con las flechas.      &lt;br /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;&lt;em&gt;/patrón: búsqueda de una palabra en el archivo.     &lt;br /&gt;Tecla b: retrocede una pagina.      &lt;br /&gt;-?patrón: búsqueda hacia atrás solamente en less.      &lt;br /&gt;Tecla f: avanza una pagina entera en more.&lt;/em&gt;    &lt;br /&gt;    &lt;br /&gt;head muestra las lineas altas de un archivo, la cantidad de lineas se especifican con -numero igual que en more.    &lt;br /&gt;tail hace lo mismo que head pero con las lineas de cola o inferiores.    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;&lt;b&gt;Tuberías Pipe |:&lt;/b&gt;&lt;/u&gt;    &lt;br /&gt;El operador | sirve para concatenar varias ordenes o comandos como por ejemplo: &lt;font face="Consolas, monospace"&gt;$who | wc -l&lt;/font&gt; o tambien &lt;font face="Consolas, monospace"&gt;$ls -l /dev | sort -k9r &amp;gt; devordenado&lt;/font&gt;    &lt;br /&gt;En esos casos las salidas de comandos como who o ls son conectadas con las entradas que deberían recibir los comandos wc y sort respectivamente, Linux permite todas las redirecciones que se deseen.    &lt;br /&gt;Ademas con el operador &lt;font face="Consolas, monospace"&gt;tee&lt;/font&gt; se puede hacer una bifurcación enviando el resultado por ejemplo hacia un archivo y hacia la consola.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm; text-decoration: none"&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-578052999566956934?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/578052999566956934/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=578052999566956934' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/578052999566956934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/578052999566956934'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/linux-y-comandos-para-manejo-de.html' title='Linux y comandos para manejo de archivos'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2267488841974906753</id><published>2009-05-08T20:20:00.001-03:00</published><updated>2009-05-08T20:20:37.513-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ecologia'/><category scheme='http://www.blogger.com/atom/ns#' term='Argentina'/><title type='text'>No a la minería Cangrejillos Jujuy Argentina</title><content type='html'>&lt;p&gt;Hace un año desde otro blog me ponía en campaña, junto con varios cientos de personas que lo hacían desde otros medios, para parar una explotación minera a cielo abierto en el Valle de Traslasierra, Traslasierra es de donde vengo y puse todas mis conocimientos a favor de esta causa, pero no fui el único al mismo tiempo y antes que yo se ponían en acción distintas organizaciones como escuelas, municipios, asociaciones de vecinos, cámaras de empresarios y habitantes Traslasierra.. El movimiento llego finalmente a la capital de la provincia en una caravana a presentar un proyecto de ley que prohibiera este tipo de explotaciones mineras tan destructivas.   &lt;br /&gt;La provincia accedió y se dio marcha atrás en un emprendimiento que casi le cuesta el principal recurso turístico de Córdoba, Las Sierras Grandes.    &lt;br /&gt;Para mas informacion sobre este acontecimiento podes visitar el blog en cuestión: &lt;a href="http://trasla.blogspot.com/" target="_blank"&gt;http://trasla.blogspot.com/&lt;/a&gt; y quizas hallas leído la cadena que de allí salió y aun sigue dando la vuelta al mundo vía correo electrónico.    &lt;br /&gt;Movilizar estos recursos en pos de una causa justo tiene su total recompensa.    &lt;br /&gt;En este momento la Comunidad del pueblo de Cangrejillos necesita la ayuda de todos para detener un proyecto minero que amenaza la ecología y los recursos del pueblo.    &lt;br /&gt;La provincia pretende un proyecto minero que abarcara entre muchas cosas la explotación de zonas de valor histórico y arqueológico y la destrucción del poblado en su emplazamiento actual. Siendo que la constitucion nacional prohíbe este tipo de intrusiones en comunidades.    &lt;br /&gt;    &lt;br /&gt;Extracto de &lt;a title="http://www.biodiversidadla.org/content/view/full/49048" href="http://www.biodiversidadla.org/content/view/full/49048" target="_blank"&gt;http://www.biodiversidadla.org/content/view/full/49048&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt; &lt;em&gt;   &lt;p&gt; La Comisión Directiva de la Comunidad Aborigen de Cangrejillos, el 25 de julio de 2008, por mandato de asamblea, cumplió en expresar e informar a la autoridades provinciales, mediante una Ordenanza Municipal, su rechazo de manera categórica y en todos sus términos los informes de impacto ambiental para la etapa de exploración y cateo dentro de su territorio comunitario. La Comunidad de Cangrejillos se vio directamente amenazada, debido a que la futura explotación abarcaría casi la totalidad del área urbana de dicha comunidad. Además en el informe de impacto ambiental no se reconocían los sitios arqueológicos prehispánicos existentes en ese territorio. &lt;/p&gt;    &lt;p&gt;Mediante asamblea concluyeron que las actividades mineras están en oposición con la forma ancestral del trabajo de la tierra y el cuidado de los recursos naturales, que se llevan en a cabo en Cangrejillos. La empresa llegó a realizar algunos cateos, sin siquiera disponer de los permiso legales, produciendo enormes pozos que pusieron en riesgo a la ganadería del lugar, con reiterados accidentes. &lt;/p&gt; &lt;/em&gt;  &lt;p&gt;&lt;em&gt;A pesar de la Ordenanza emitida, las denuncias realizadas y al rechazo de los informes de impacto ambiental, la justicia no les ha dado ninguna respuesta formal hasta el momento.&lt;/em&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Como ayudamos a esta comunidad a solucionar el problema:     &lt;br /&gt;Lo primero es difundir la noticia entre tus conocidos y no conocidos para que llegue a todas las personas posibles.      &lt;br /&gt;Lo segundo seria dirigirte al medio de comunicación que habitualmente utilices, por ejemplo si escuchas la Radio Cadena 3, podes enviar un mensaje con la problemática al 44443. La idea es movilizar el cuarto poder que es el que de verdad hace temblar a los poderosos.      &lt;br /&gt;Finalmente tambien podemos comunicarnos con la Comunidad Aborigen de Cangrejillos quienes deben coordinar de alguna manera los esfuerzos de todos para que esto se solucione:      &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Nélida Tolay 0388 154-771-188      &lt;br /&gt;(Delegada de la Comunidad de Cangrejillos- Movim. Tupaj Katari; area pueblos originarios)       &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Marcela Chambi 0388 154-861-125      &lt;br /&gt;(Movim. Tupaj Katari, comisión ecología y medio ambiente)       &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt; &lt;strong&gt;   &lt;p&gt; Elbio Cabrera 0388 154339204 (Movim. Tupaj Katari; area pueblos originarios)      &lt;br /&gt;elbiocabrera(arroba)hotmail.com      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Silvana Morel 0388 154045044 (Movim. Tupaj Katari, abogada de la comunidad de Cangrejillos)- silvanamorel(arroba)hotmail.com&lt;/p&gt;&lt;/strong&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2267488841974906753?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2267488841974906753/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2267488841974906753' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2267488841974906753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2267488841974906753'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/no-la-mineria-cangrejillos-jujuy.html' title='No a la minería Cangrejillos Jujuy Argentina'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-4619300514148590043</id><published>2009-05-08T11:09:00.001-03:00</published><updated>2009-05-08T11:09:22.273-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Programa de Practica en Java - Juegos</title><content type='html'>&lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7f33c4ce-7f5d-4f4e-8775-1503be942fe3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div id="a71ad918-532d-4d3d-909c-a66abfe89702" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=BQvTIKIVLUA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_QPVnXEzDdCg/SgQ9D3cZS_I/AAAAAAAAA5E/vCH0v6Y2d2k/video6f9fb4f829e7%5B3%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('a71ad918-532d-4d3d-909c-a66abfe89702'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/BQvTIKIVLUA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/BQvTIKIVLUA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x234900&amp;amp;color2=0x4e9e00&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;br /&gt;  &lt;p&gt;Así quedo terminado &lt;a href="http://www.blogterrier.com.ar/2009/05/concurrencia-en-java-primer.html" target="_blank"&gt;este&lt;/a&gt; programa de practica en java, les dejo el código fuente, para seguir modificándolo pueden usar el &lt;a href="http://blogterrier.blogspot.com/2009/03/descargar-easy-eclipse-java.html" target="_blank"&gt;Easy Eclipse&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;package modelo&lt;/strong&gt;     &lt;br /&gt;Class Pelota.java     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;package modelo;    &lt;br /&gt;import javax.swing.JButton;     &lt;br /&gt;public class Pelota extends Thread {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton pelota;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private int x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private int y;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Control activo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private boolean arriba, derecha;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private int aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Tiempo time;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Pelota(int x, int y,JButton pelota ,Control activo, int acele, Tiempo time)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.x=x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.y=y;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.pelota=pelota;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.activo=activo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; arriba=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; derecha=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.aceleracion=acele;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.time=time;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void run()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(activo.getControl()&amp;amp;&amp;amp;time.getOk())     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pelota.setLocation(x, y);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(arriba)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; y=y-aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; y=y+aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(derecha)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; x=x+aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; x=x-aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(x&amp;lt;3)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; derecha=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(x&amp;gt;700)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; derecha=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(y&amp;gt;300)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; arriba=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(y&amp;lt;3)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; arriba=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sleep(10);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch(Exception e)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time.disminuye();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/h5&gt;  &lt;p&gt;Class ControlTiempo.java    &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;package modelo;    &lt;br /&gt;import javax.swing.JLabel;     &lt;br /&gt;public class ControlTiempo extends Thread {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Tiempo t;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel l;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public ControlTiempo(Tiempo t, JLabel l)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.t=t;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.l=l;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void run()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(t.getTiempo()&amp;gt;0)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; l.setText(String.valueOf(t.getTiempo()));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sleep(200);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch(Exception error)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/h5&gt;  &lt;p&gt;Class Tiempo.java    &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;package modelo;    &lt;br /&gt;public class Tiempo {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private boolean ok;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private int tiempo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Tiempo()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ok=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tiempo=10000;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void setOk(boolean x)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ok=x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public boolean getOk()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return ok;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public int getTiempo()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return tiempo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void setTiempo(int t)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.tiempo=t;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void disminuye()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; tiempo--;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(tiempo==0)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ok=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void rotate()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(ok)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ok=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ok=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/h5&gt;  &lt;p&gt;Class Control.java    &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;package modelo;    &lt;br /&gt;public class Control {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; boolean control;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Control()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void setControl(boolean x)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public boolean getControl()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return control;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void rotate()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(control)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/h5&gt;  &lt;p&gt;&lt;strong&gt;package visual&lt;/strong&gt;     &lt;br /&gt;Class Pong.java     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;package visual;    &lt;br /&gt;import javax.swing.SwingUtilities;     &lt;br /&gt;import java.awt.BorderLayout;     &lt;br /&gt;import javax.swing.JPanel;     &lt;br /&gt;import javax.swing.JFrame;     &lt;br /&gt;import java.awt.Dimension;     &lt;br /&gt;import javax.swing.JLabel;     &lt;br /&gt;import java.awt.Rectangle;     &lt;br /&gt;import java.awt.Color;     &lt;br /&gt;import javax.swing.JButton;     &lt;br /&gt;import modelo.Control;     &lt;br /&gt;import modelo.Pelota;     &lt;br /&gt;import modelo.Tiempo;     &lt;br /&gt;import modelo.ControlTiempo;     &lt;br /&gt;public class Pong extends JFrame {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private static final long serialVersionUID = 1L;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JPanel jContentPane = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton JbPlay = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Control z1;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Control z2;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Control z3;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Control z4;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Control z5;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Pelota j1;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Pelota j2;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Pelota j3;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Pelota j4;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Pelota j5;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton JB1 = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton JB2 = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton JB3 = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton JB4 = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton JB5 = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel jLabel = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel Nivel = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel JLnivel = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private int nivel;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private Tiempo time;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel jltiempo = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel Tiempo = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel jlpuntaje = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JLabel Puntaje = null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private ControlTiempo t;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private int puntaje;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton getJbPlay() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (JbPlay == null) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JbPlay = new JButton();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JbPlay.setBounds(new Rectangle(10, 466, 98, 19));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JbPlay.setText(&amp;quot;Play&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JbPlay.addActionListener(new java.awt.event.ActionListener() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void actionPerformed(java.awt.event.ActionEvent e) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; nivel++;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time = new Tiempo();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t= new ControlTiempo(time, Tiempo);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z1=new Control();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z2=new Control();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z3=new Control();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z4=new Control();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z5=new Control();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j1 = new Pelota(JB1.getX(),JB1.getY(),JB1, z1,nivel, time);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j2 = new Pelota(JB2.getX(),JB2.getY(),JB2, z2,nivel+1, time);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j3 = new Pelota(JB3.getX(),JB3.getY(),JB3, z3,nivel+2, time);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j4 = new Pelota(JB4.getX(),JB4.getY(),JB4, z4,nivel+3, time);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j5 = new Pelota(JB5.getX(),JB5.getY(),JB5, z5,nivel+4, time);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; t.start();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j1.start();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j2.start();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j3.start();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j4.start();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; j5.start();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Nivel.setText(String.valueOf(nivel));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return JbPlay;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton getJB1() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (JB1 == null) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB1 = new JButton();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB1.setBounds(new Rectangle(268, 28, 67, 57));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB1.setText(&amp;quot;1&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB1.setBackground(new Color(0, 51, 204));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB1.addActionListener(new java.awt.event.ActionListener() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void actionPerformed(java.awt.event.ActionEvent e) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z1.setControl(false);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return JB1;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton getJB2() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (JB2 == null) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB2 = new JButton();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB2.setBounds(new Rectangle(112, 154, 82, 91));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB2.setText(&amp;quot;2&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB2.setBackground(Color.yellow);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB2.addActionListener(new java.awt.event.ActionListener() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void actionPerformed(java.awt.event.ActionEvent e) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z2.setControl(false);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return JB2;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton getJB3() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (JB3 == null) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB3 = new JButton();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB3.setBounds(new Rectangle(247, 139, 95, 93));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB3.setText(&amp;quot;3&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB3.setBackground(new Color(0, 204, 255));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB3.addActionListener(new java.awt.event.ActionListener() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void actionPerformed(java.awt.event.ActionEvent e) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z3.setControl(false);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return JB3;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton getJB4() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (JB4 == null) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB4 = new JButton();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB4.setBounds(new Rectangle(465, 137, 96, 127));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB4.setText(&amp;quot;4&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB4.setBackground(new Color(51, 255, 0));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB4.addActionListener(new java.awt.event.ActionListener() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void actionPerformed(java.awt.event.ActionEvent e) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z4.setControl(false);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return JB4;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JButton getJB5() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (JB5 == null) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB5 = new JButton();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB5.setBounds(new Rectangle(457, 34, 137, 163));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB5.setText(&amp;quot;5&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB5.setBackground(new Color(255, 51, 51));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JB5.addActionListener(new java.awt.event.ActionListener() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void actionPerformed(java.awt.event.ActionEvent e) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; z5.setControl(false);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return JB5;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public static void main(String[] args) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // TODO Auto-generated method stub     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SwingUtilities.invokeLater(new Runnable() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void run() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Pong thisClass = new Pong();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; thisClass.setVisible(true);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Pong() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; super();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; initialize();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private void initialize() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.setSize(837, 539);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.setResizable(false);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.setContentPane(getJContentPane());     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.setTitle(&amp;quot;Pong&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; nivel = 0;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; puntaje = 0;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private JPanel getJContentPane() {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (jContentPane == null) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje = new JLabel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje.setBounds(new Rectangle(401, 466, 74, 19));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje.setText(&amp;quot;0&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jlpuntaje = new JLabel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jlpuntaje.setBounds(new Rectangle(344, 466, 51, 19));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jlpuntaje.setText(&amp;quot;Puntaje:&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Tiempo = new JLabel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Tiempo.setBounds(new Rectangle(279, 466, 62, 19));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Tiempo.setText(&amp;quot;10000&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jltiempo = new JLabel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jltiempo.setBounds(new Rectangle(218, 466, 56, 19));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jltiempo.setText(&amp;quot;Tiempo:&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jLabel = new JLabel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jLabel.setBounds(new Rectangle(10, 491, 329, 20));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jLabel.setText(&amp;quot;Hay que hacer clic sobre los cuadrados para pararlos&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JLnivel = new JLabel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JLnivel.setBounds(new Rectangle(118, 466, 35, 19));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; JLnivel.setText(&amp;quot;Nivel:&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Nivel = new JLabel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Nivel.setBounds(new Rectangle(157, 466, 55, 19));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Nivel.setText(&amp;quot;1&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane = new JPanel();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.setLayout(null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(getJbPlay(), null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(getJB1(), null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(getJB2(), null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(getJB3(), null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(getJB4(), null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(getJB5(), null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(Nivel, null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(JLnivel, null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(jLabel, null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(jltiempo, null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(Tiempo, null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(jlpuntaje, null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; jContentPane.add(Puntaje, null);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return jContentPane;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void Puntaje()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(!z1.getControl()&amp;amp;&amp;amp;!z2.getControl()&amp;amp;&amp;amp;!z3.getControl()&amp;amp;&amp;amp;!z4.getControl()&amp;amp;&amp;amp;!z5.getControl())     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; puntaje+=time.getTiempo();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; time.setTiempo(0);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Puntaje.setText(String.valueOf(puntaje));     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;} &lt;/h5&gt;  &lt;p&gt;Bueno, quería mostrarlo…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-4619300514148590043?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/4619300514148590043/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=4619300514148590043' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4619300514148590043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4619300514148590043'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/programa-de-practica-en-java-juegos.html' title='Programa de Practica en Java - Juegos'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/SgQ9D3cZS_I/AAAAAAAAA5E/vCH0v6Y2d2k/s72-c/video6f9fb4f829e7%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-7876896056396678498</id><published>2009-05-07T10:44:00.001-03:00</published><updated>2009-05-07T10:44:32.393-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Concurrencia en Java primer acercamiento a Swing</title><content type='html'>&lt;p&gt;En la clase de ayer nos incentivaron a diseñar un programa que funcionara de la misma manera que el Pong, yo cuando me senté en mi PC, empecé a escribirlo pero a medida que lo hacia fui cambiando el objetivo, el resultado fue un programita sencillo con JButton de colores que se mueven rebotando por la pantalla y hay que hacerles clic para que se paren, se mueven a X pixeles cada 10 milésimas de segundo.    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/SgLlu7fhIpI/AAAAAAAAA40/s-8DFGQ_lBQ/s1600-h/pong%5B4%5D.gif"&gt;&lt;img title="pong" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="379" alt="pong" src="http://lh5.ggpht.com/_QPVnXEzDdCg/SgLlvj9w9iI/AAAAAAAAA44/J_3wn1FpWlY/pong_thumb%5B2%5D.gif?imgmax=800" width="502" border="0" /&gt;&lt;/a&gt;Fue solamente para practicar un poco el tema de concurrencia así que no esperen que solucione todos los problemas que tiene. Tarde 1 hora.     &lt;br /&gt;Esencialmente el programa son tres clases una es un Boolean para control, hay clases que cumplen los requisitos actuales, no uso otra clase por la idea es que mas adelante esa clase cumpla con otros tipos de controles como el tiempo o las coordenadas.     &lt;br /&gt;La segunda clase es el Thread que mueve a los botones por la pantalla, para ello recibe en el constructor varias cosas: La referencia al JButton, un objeto Control, un par de coordenadas y la velocidad de movimiento del botón.     &lt;br /&gt;La ultima es una clase visual donde están instanciados los botones, los elementos Control y los Threads.     &lt;br /&gt;Lo que ocurre si presionamos varias veces el botón Play es que varios manejadores de botones toman el control del mismo entonces el botón empieza a saltar por la pantalla.     &lt;br /&gt;Probé lanzar hasta 500 Threads y no se colgó nada, además los últimos ya funcionaban a 100 pixeles cada 10 milésimas de segundo.     &lt;br /&gt;Este .jar esta desarrollado en &lt;a href="http://blogterrier.blogspot.com/2009/03/descargar-easy-eclipse-java.html" target="_blank"&gt;Easy Eclipse&lt;/a&gt; y con sus plugins visuales, además las dos primeras clases se ubicaran en el paquete modelo y la visual en visual.     &lt;br /&gt;La primera Clase es Control y de ella creo que no hace falta explicar mucho:     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;package modelo;    &lt;br /&gt;public class Control {&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;boolean control;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;public Control()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;public void setControl(boolean x)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;public boolean getControl()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return control;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;public void rotate()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(control)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/h5&gt;  &lt;p&gt;La funcion rotate() por ahora no la utilizo para nada, La segunda clase es Pelota, la idea era desarrollar un Pong no?, eta es la que extiende de Thread así que será la mas importante me parece a mi:    &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;package modelo;    &lt;br /&gt;import javax.swing.JButton;     &lt;br /&gt;public class Pelota extends Thread {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; JButton pelota;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int y;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Control activo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; boolean arriba, derecha;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public Pelota(int x, int y,JButton pelota ,Control activo, int acele)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.x=x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.y=y;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.pelota=pelota;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.activo=activo;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; arriba=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; derecha=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this.aceleracion=acele;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void run()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(activo.getControl())     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pelota.setLocation(x, y);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(arriba)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; y=y-aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; y=y+aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(derecha)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; x=x+aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; x=x-aceleracion;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(x&amp;lt;3)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; derecha=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(x&amp;gt;700)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; derecha=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(y&amp;gt;300)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; arriba=true;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(y&amp;lt;3)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; arriba=false;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sleep(10);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch(Exception e)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/h5&gt;  &lt;p&gt;Las claves de esta clase son solamente mover el objeto JButton que nos viene por parámetro mientras el otro objeto Control sea verdadero, este se cambiara desde otra clase así que no nos importa, ponemos un while que realice el movimiento.    &lt;br /&gt;Para ello definimos una velocidad-&amp;gt; aceleración(interpretando muy mal un concepto de física le he puesto aceleración como nombre cuando debería ser velocidad) que será el ++ o – – correspondiente para cada movimiento, las otras variables son derecha y arriba, ellas son booleanas y se cambian cuando el tercer grupo de variable las coordenadas sobrepasan ciertos limites.     &lt;br /&gt;Los objetos JButton se moverán en un rectángulo aproximado de 700 X 300 pixeles de la ventana, luego en la siguiente clase es donde diseñamos la parte visual.     &lt;br /&gt;Alli hay que crear una clase visual a partir de JFrame, deshabilitar el Layout y poner 5 botones de distintos tamaños y colores recordando colocar un nombre comprensible&amp;#160; a cada uno.     &lt;br /&gt;Por otro lado y llendo hacia el código debemos importar lo siguiente para no tener problemas, recordemos que esta clase estará en el paquete visual mientras que las dos primeras están en modelo.     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;import modelo.Control;    &lt;br /&gt;import modelo.Pelota;&lt;/h5&gt;  &lt;p&gt;Luego las variables que debemos crear en esta clase, además de las que el editor visual nos genera son:    &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;private Control z1;    &lt;br /&gt;private Control z2;     &lt;br /&gt;private Control z3;     &lt;br /&gt;private Control z4;     &lt;br /&gt;private Control z5;     &lt;br /&gt;private Pelota j1;     &lt;br /&gt;private Pelota j2;     &lt;br /&gt;private Pelota j3;     &lt;br /&gt;private Pelota j4;     &lt;br /&gt;private Pelota j5;     &lt;br /&gt;private JButton JB1 = null;     &lt;br /&gt;private JButton JB2 = null;     &lt;br /&gt;private JButton JB3 = null;     &lt;br /&gt;private JButton JB4 = null;     &lt;br /&gt;private JButton JB5 = null;     &lt;br /&gt;private JLabel jLabel = null;     &lt;br /&gt;private JLabel Nivel = null;     &lt;br /&gt;private JLabel JLnivel = null;     &lt;br /&gt;private int nivel;&lt;/h5&gt;  &lt;p&gt;La variable nivel será la que nos proveerá la velocidad de cada botón en los distintos niveles, además hacemos un JLabel para indicar al jugador cual es el actual.    &lt;br /&gt;JB1, JB2, JB3, JB4, JB5 son lo botones creados por el editor visual, los objetos Control y Pelota son las banderas de movimiento y los manejadores de cada botón, además hay un botón Play que desencadenara todo el movimiento.     &lt;br /&gt;En el initialize de la ventana hay que agregar:     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;nivel = 0;&lt;/h5&gt; El botón Play: en ese botón debemos seleccionar un ActionPerformed que hará lo siguiente:   &lt;br /&gt;  &lt;h5&gt;nivel++;    &lt;br /&gt;z1=new Control();     &lt;br /&gt;z2=new Control();     &lt;br /&gt;z3=new Control();     &lt;br /&gt;z4=new Control();     &lt;br /&gt;z5=new Control();     &lt;br /&gt;j1 = new Pelota(JB1.getX(),JB1.getY(),JB1, z1,nivel);     &lt;br /&gt;j2 = new Pelota(JB2.getX(),JB2.getY(),JB2, z2,nivel);     &lt;br /&gt;j3 = new Pelota(JB3.getX(),JB3.getY(),JB3, z3,nivel);     &lt;br /&gt;j4 = new Pelota(JB4.getX(),JB4.getY(),JB4, z4,nivel);     &lt;br /&gt;j5 = new Pelota(JB5.getX(),JB5.getY(),JB5, z5,nivel);     &lt;br /&gt;j1.start();     &lt;br /&gt;j2.start();     &lt;br /&gt;j3.start();     &lt;br /&gt;j4.start();     &lt;br /&gt;j5.start();     &lt;br /&gt;Nivel.setText(String.valueOf(nivel));&lt;/h5&gt;  &lt;p&gt;Al inicializar los objetos zX del tipo Control se inicializan todos en &lt;em&gt;true &lt;/em&gt;Luego construimos los “Pelota” pasándole como parámetro las posiciones actuales de los botones, los botones, el objeto de Control correspondiente y el nivel que es compartido por todos.     &lt;br /&gt;Luego se da start a cada Thread(nunca run()) y todos los botones comienzan a moverse por la pantalla, por ultimo seteamos nuestra label de nivel que informara que llegamos al nivel 1 la primera vez.     &lt;br /&gt;Como para los botones?     &lt;br /&gt;Fácil, lo que hacemos es establece un ActionPerfomed para cada uno de los 5 botones BJ1, JB2 JBN y adentro la clase de escucha paramos el objeto de Control, o sea el zX correspondiente: para JB1 seria así:     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;z1.setControl(false);&lt;/h5&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Con ello ya tenemos el juego funcionando discretamente, como les comente arriba se pueden iniciar muchos manejadores del mismo botón y crea una especie de lluvia de colores en pantalla.   &lt;br /&gt;Si están empezando a programar en Java como yo les va a gustar jugar con esto.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-7876896056396678498?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/7876896056396678498/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=7876896056396678498' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/7876896056396678498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/7876896056396678498'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/concurrencia-en-java-primer.html' title='Concurrencia en Java primer acercamiento a Swing'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/SgLlvj9w9iI/AAAAAAAAA44/J_3wn1FpWlY/s72-c/pong_thumb%5B2%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3344521679712579191</id><published>2009-05-05T00:25:00.002-03:00</published><updated>2009-05-05T00:27:41.371-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Empezando con concurrencia en Java</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/Sf-xnwTm1fI/AAAAAAAAA4I/8JP5oipK9gg/s1600-h/java%5B4%5D.jpg"&gt;&lt;img title="java" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-LEFT: 0px; MARGIN-RIGHT: 0px; BORDER-BOTTOM: 0px" height="147" alt="java" src="http://lh4.ggpht.com/_QPVnXEzDdCg/Sf-xp3RZFtI/AAAAAAAAA4M/xPY3BeHSFIY/java_thumb%5B2%5D.jpg?imgmax=800" width="110" align="left" border="0" /&gt;&lt;/a&gt; Este post formara parte de varios que escribiré en los próximos días y seguramente con el resumen final que elabore para esta materia(Paradigmas de Programación).&lt;br /&gt;Son las primeras pruebas con programación concurrente o multihilos en Java, si buscas todos los post ingresados en la etiqueta &lt;a href="http://blogterrier.blogspot.com/search/label/Java" target="_blank"&gt;Java&lt;/a&gt; de mi blog encontraras algunos post interesantes de practicas en consola y en el editor visual de Eclipse.&lt;br /&gt;Vuelvo a repetir que esto es lo primero que hago con esta perspectiva de programación.&lt;br /&gt;Se trata de un programa muy básico en consola donde se desarrollan tres hilos con una clase que hereda de Thread y que se ejecutan en paralelo(Paralelismo de Software) es bastante corta pero es de gran ayuda para comprender de que se trata esto de la concurrencia, cada vez que ejecutamos el programa podemos ver como da distintos resultados sin cambiar nada del código, esto es en parte por que genero un numero al azar en cada Thread pero tambien por que algunos hilos se ejecutan antes que otros aunque sean llamados en tiempos distintos, esto depende de la disponibilidad de recursos de la maquina virtual de Java, una vez que hallan copiado el post(si es que tengo el agrado de que me visite un estudiante de Java) recomiendo ejecutar repetidamente el programa para ver los resultados.&lt;br /&gt;Los objetos concurrentes deben ser instanciados a partir de una clase que herede de Thread o que implemente la interfaz Runnable, para los casos donde necesitemos extender la clase de otra como por ejemplo un JFrame para aplicaciones visuales.&lt;br /&gt;El uso de la interfaz requiere tratar a los objetos de manera distinta en su inicialización. Pero por ahora como se trata de un ejemplo por consola solo usare la clase Thread.&lt;br /&gt;Estas clases se encuentran disponibles en Java sin tener que importar ningún paquete especial. En este caso tampoco haba que usar una librería para la lectura de datos por consola ya que no se lee ningún dato.&lt;br /&gt;Vamos al ejemplo: MiThread.java:&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;public class MiThread extends Thread {    &lt;br /&gt;    private int numero;&lt;br /&gt;    private String cadena;&lt;br /&gt;&lt;br /&gt;    public void run()&lt;br /&gt;    {&lt;br /&gt;        numero = (int)(Math.random()*100);&lt;br /&gt;        System.out.println(cadena+"---&amp;gt;"+numero);&lt;br /&gt;    }&lt;br /&gt;    public int getNumero()&lt;br /&gt;    {&lt;br /&gt;        return numero;&lt;br /&gt;    }&lt;br /&gt;    public void setCadena(String cadena)&lt;br /&gt;    {&lt;br /&gt;        this.cadena = cadena;&lt;br /&gt;    }&lt;br /&gt;}&lt;/h5&gt;&lt;p&gt;Esta es la estructura clásica de una clase extendida de Thread, la única diferencia es que debe tener una funcion llamada run() la cual es llamada por la estructura de Thread en la funcion start(), además no es necesario especificar un constructor.&lt;br /&gt;Lo que realiza esta clase cuando es instanciada es crear un objeto MiThread con dos atributos un entero llamado numero y una cadena de caracteres llamada cadena, las funciones son run que especifica las acciones del Thread cuando es ejecutado y donde se pueden pasar mensajes a otras funciones del Thread o acceder a variables, en el ejemplo run() accede setea numero y lee cadena.&lt;br /&gt;Para ver mejor el funcionamiento tenemos que crear otra clase principal que haga uso de esta clase MiThread:&lt;br /&gt;Main.java:&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;public class Main {&lt;br /&gt;    public static void main(String []arg) throws InterruptedException&lt;br /&gt;    {         //Declaracion de los tres hilos&lt;br /&gt;        MiThread m1, m2, m3;&lt;br /&gt;        m1 = new MiThread();&lt;br /&gt;        m2 = new MiThread();&lt;br /&gt;        m3 = new MiThread();&lt;br /&gt;        //Enviar el nombre al hilo&lt;br /&gt;        m1.setCadena("Hilo 1");&lt;br /&gt;        m2.setCadena("Hilo 2");&lt;br /&gt;        m3.setCadena("Hilo 3");&lt;br /&gt;        //Arrancar los tres hilos&lt;br /&gt;        m1.start();&lt;br /&gt;        m2.start();&lt;br /&gt;        m3.start();&lt;br /&gt;        //Puede haber algun error&lt;br /&gt;        try{&lt;br /&gt;            //Espera a que finalizen los hilos&lt;br /&gt;            m1.join();&lt;br /&gt;            m2.join();&lt;br /&gt;            m3.join();&lt;br /&gt;        }&lt;br /&gt;        catch (InterruptedException e) {&lt;br /&gt;            System.out.println("Hubo un Error en algun lado");&lt;br /&gt;        }&lt;br /&gt;        //Obtener el valor de los numeros&lt;br /&gt;        System.out.println("La suma es: "+(m1.getNumero()+m2.getNumero()+m3.getNumero()));&lt;br /&gt;    }&lt;br /&gt;} &lt;/h5&gt;La clase Main lo que hace es ser el centro de la aplicación como cualquier clase típica con void main, adentro de esa clase se instancian los tres objetos MiThread. Una vez que están instanciados tenemos reservados los espacios de memoria necesarios para cada objeto por lo que podemos acceder a los métodos y lo que hacemos es asignarle un nombre a cada uno seteando el atributo cadena.&lt;br /&gt;Luego pasamos a la parte nueva que es llamar a la funcion start, esta funcion es de Thread que internamente llama a run() pero que forma parte de algo mas “grande” no se debe llamar nunca a la funcion run() simplemente.&lt;br /&gt;Cuando llamamos a start es cuando comienza la concurrencia, en ese momento el programa se esta ejecutando en cuatro hilos simultáneos emulados por Paralelismo de Software a no ser que cuentes con una CPU con 4 procesadores, cosa que no creo.&lt;br /&gt;Luego le decimos a los tres hilos que esperaremos a que se terminen de ejecutar con la funcion join(), en este momento se pueden producir errores que es necesario capturar con un try catch, o con el throws InterruptedException en la declaración de la clase.&lt;br /&gt;Se pueden utilizar los dos métodos o uno solo, pero si no usamos ninguno el compilador no nos dejara ejecutar el programa.&lt;br /&gt;Luego que los tres objetos han terminado y nos mostraron por pantalla sus distintas informaciones volvemos a acceder a los atributos del objeto por la funcion correspondiente para saber la suma de sus “numeros” por que los objetos no fueron eliminados aunque ya no se están ejecutando.&lt;br /&gt;Cuando lo ejecuten verán que no siempre se cumple que la cadena1 salga en primero orden, a mi ha pasado que el tercer Thread es mas rápido que los otros dos, pero como dije esto depende de la evaluación que haga la maquina virtual de los hilos, así podemos comprobar la concurrencia que se da en este ejemplo.&lt;br /&gt;Bueno la verdad que me esmere mucho esta vez, espero que le sirva a alguien, seguramente en pocos días estaré escribiendo algo mas largo con interfaz visual y concurrencia.&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3344521679712579191?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3344521679712579191/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3344521679712579191' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3344521679712579191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3344521679712579191'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/empezando-con-concurrencia-en-java.html' title='Empezando con concurrencia en Java'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QPVnXEzDdCg/Sf-xp3RZFtI/AAAAAAAAA4M/xPY3BeHSFIY/s72-c/java_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2047572584614644870</id><published>2009-05-04T20:32:00.001-03:00</published><updated>2009-05-04T20:32:13.824-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Curiosidades'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Gizmo Script: simulador de usuario</title><content type='html'>&lt;p&gt;Hace un tiempo volví un día de trabajar toda la noche, obsesionado y pasado de vueltas después de no dormir 30 horas, pensando en como hacer para que mi computadora siguiera haciendo una tarea sencilla pero que requería pulsaciones de teclas y movimientos de ratón además de clics. Que es lo que hacia no lo diré pero tengan por seguro que no era hacer clic en un lugar indebido.    &lt;br /&gt;Bueno entonces me puse a buscar y encontré a Gizmo, si el mismo nombre que el gremlin.     &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_QPVnXEzDdCg/Sf96YVnFcdI/AAAAAAAAA3w/69b4VK70L34/s1600-h/gizmo%5B4%5D.jpg"&gt;&lt;img title="gizmo" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="131" alt="gizmo" src="http://lh5.ggpht.com/_QPVnXEzDdCg/Sf96ir373oI/AAAAAAAAA30/y5KgwaJjRxA/gizmo_thumb%5B2%5D.jpg?imgmax=800" width="130" align="left" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;No lo pude evitar, jeje, bueno puntualmente una de las funciones de Gizmo es la programación de eventos de teclado y ratón, manejo de ventanas y acceso a distintas funciones del sistema operativo como si hubiera un usuario sentado delante de la pantalla.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Pero mejor vamos a mostrar un poco no?    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;int c=1;    &lt;br /&gt;Window w = Window.FindByName(&amp;quot;Sin&amp;quot;);     &lt;br /&gt;Script.Sleep(1000);     &lt;br /&gt;w.ForceToTop();     &lt;br /&gt;Script.Sleep(1000);     &lt;br /&gt;while(c&amp;lt;10)     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Keyboard.Send(&amp;quot;Hola Mundo &amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Script.Sleep(200);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; c++;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if(Keyboard.IsKeyPressed(VK_DOWN))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c=15;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}     &lt;br /&gt;Mouse.Click(100,200,[Left],[Screen]);&lt;/h5&gt;  &lt;p&gt;Este fue un ejemplo un poco burdo creado por mi.   &lt;br /&gt;Gizmo Script maneja un lenguaje de programación de sintaxis similar a Java, a ´C++ y aun a Javascript. Si es lo mismo, pero es bueno para el que no lo sepa.    &lt;br /&gt;Tiene unas pocas librerías y las estructuras de control básicas como while, if, etc.    &lt;br /&gt;Las librerías mas importantes son: Clipboard, Database, File, Keyboard, Mouse, Power, Registry, Shell, Script, Time, Window.    &lt;br /&gt;Con ellas podemos simular el comportamiento de un usuario con un código totalmente manejable, como pueden ver para utilizarlo hay que manejar un poco de programación.    &lt;br /&gt;Dentro del editor de Gizmo Script hay ayuda visual y además el Help viene muy bien explicado con ejemplos y todo, pero en ingles.    &lt;br /&gt;Ahora les muestro la aplicación que trae como ejemplo el mismo Gizmo Script:    &lt;br /&gt;Es una imagen….    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/Sf96tc22ShI/AAAAAAAAA34/2pbdwqz80_Y/s1600-h/gizmo%5B10%5D.gif"&gt;&lt;img title="gizmo" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="556" alt="gizmo" src="http://lh4.ggpht.com/_QPVnXEzDdCg/Sf967NV4_1I/AAAAAAAAA38/TwybZd1M5EQ/gizmo_thumb%5B8%5D.gif?imgmax=800" width="500" border="0" /&gt;&lt;/a&gt; De donde descargar a Gizmo: &lt;a href="http://arainia.com/software/gizmo/" target="_blank"&gt;http://arainia.com/software/gizmo/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2047572584614644870?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2047572584614644870/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2047572584614644870' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2047572584614644870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2047572584614644870'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/05/gizmo-script-simulador-de-usuario.html' title='Gizmo Script: simulador de usuario'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/Sf96ir373oI/AAAAAAAAA30/y5KgwaJjRxA/s72-c/gizmo_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-8981821246891323148</id><published>2009-04-28T16:38:00.001-03:00</published><updated>2009-04-28T16:38:50.420-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Curiosidades'/><category scheme='http://www.blogger.com/atom/ns#' term='Argentina'/><title type='text'>El Arma de Instrucción Masiva</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_QPVnXEzDdCg/SfdbNoKsEzI/AAAAAAAAA2A/O_p-ylujZ8g/s1600-h/arma%5B5%5D.jpg"&gt;&lt;img title="arma" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="496" alt="arma" src="http://lh4.ggpht.com/_QPVnXEzDdCg/SfdbPMiURsI/AAAAAAAAA2E/mCyWW-LqzOQ/arma_thumb%5B3%5D.jpg?imgmax=800" width="332" border="0" /&gt;&lt;/a&gt;El Arma de Instrucción Masiva (ADIM, por sus siglas en castellano) es un artefacto muy ingenioso, tanto que es considerada una obra de arte, tiene la capacidad de hacer blanco en objetivos que otras maquinarias no pueden como por ejemplo escuelas carenciadas, barrios, bares, casas de campo. Además de su efecto inmediato es un arma con poder residual que se puede prolongar por varias generaciones.    &lt;br /&gt;Ahora hablando un poco mas en serio el ADIM trata de recorrer la mayor cantidad de lugares posibles haciendo de puente entre vivencias y opiniones de los que se cruzan con ella, además cualquier persona que se cruce con ella puede elegir un libro y/o hacer una donación al blindaje de este automóvil.    &lt;br /&gt;Ahora los dejo acá y vallan a la web y si pueden participen:    &lt;br /&gt;&lt;a title="http://armadeinstruccion.com.ar/" href="http://armadeinstruccion.com.ar/" target="_blank"&gt;http://armadeinstruccion.com.ar/&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SfdbQ14OFaI/AAAAAAAAA2I/nP3qYyjf6XE/s1600-h/womi%5B4%5D.jpg"&gt;&lt;img title="womi" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="318" alt="womi" src="http://lh6.ggpht.com/_QPVnXEzDdCg/SfdbSZfNvwI/AAAAAAAAA2M/s1W2ofTtTDE/womi_thumb%5B2%5D.jpg?imgmax=800" width="504" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-8981821246891323148?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/8981821246891323148/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=8981821246891323148' title='9 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8981821246891323148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8981821246891323148'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/el-arma-de-instruccion-masiva.html' title='El Arma de Instrucción Masiva'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QPVnXEzDdCg/SfdbPMiURsI/AAAAAAAAA2E/mCyWW-LqzOQ/s72-c/arma_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3259808776185314588</id><published>2009-04-23T21:30:00.001-03:00</published><updated>2009-04-23T21:30:48.081-03:00</updated><title type='text'>Did You Know - ¿Sabía usted que?</title><content type='html'>&lt;p&gt;Este es un repost de un video que me llego gracias a chismes UTN, lo vuelvo a compartir con las visitas, deja a uno pensando…. mas abajo esta la traducción al español.   &lt;br /&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:deddcf50-27f7-4e3a-bb47-4738cbf339fa" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div id="cf2ecc71-ea9f-4c52-baea-2783bd7722bb" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=UIDLIwlzkgY&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/_QPVnXEzDdCg/SfEIMzCecBI/AAAAAAAAA1o/f2d9aiuxC00/videod3677f5ccb83%5B4%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('cf2ecc71-ea9f-4c52-baea-2783bd7722bb'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/UIDLIwlzkgY&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/UIDLIwlzkgY&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;   &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Traducción al español:&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;¿Lo sabías?&amp;#160; Si eres uno entre un millón en China… hay 100 personas que están como tú.      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;China será pronto el país con más personas que hablen inglés en el mundo.     &lt;br /&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;El 25% de la población India con el IQ más alto es más que la población total de los Estados Unidos.      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;India tiene más niños a los que rinde homenaje que niños en total hay en América.      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;Los 10 trabajos con más demanda en 2010… no existían en 2004      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;font color="#400040"&gt;   &lt;p&gt; Estamos preparando a los estudiantes para trabajos que todavía no existen… que utilizarán tecnologías aún no inventadas. Para resolver problemas que ni siquiera conocemos aún.      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;El departamento estadounidense de trabajo estima que un estudiante de hoy habrá pasado por unos 10-14 puestos de trabajo a los 38 &lt;/p&gt; &lt;/font&gt;  &lt;p&gt;&lt;font color="#400040"&gt;1 de cada 4 trabajadores lleva en el mismo puesto menos de un año. 1 de cada 2, menos de 5 años.      &lt;br /&gt;1 de cada 8 parejas casadas en los US el último año se conoció online.       &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;Hay unos 200 millones de usuarios registrados en MySpace. Si MySpace fuese un país sería el 5o más poblado del mundo (entre Indonesia y Brasil)      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;El primer país en penetración de internet de banda ancha es…Bermudas. US está en el número 19, en el 22 Japón.      &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;Vivimos tiempos exponenciales….     &lt;br /&gt;      &lt;br /&gt;Se realizan 31 billones de búsquedas en Google cada mes. En 2006 eran 2,7 billones. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;¿A quién se preguntaban esas cosas antes de Google? (”BG”, “before Google”)      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;El primer mensaje de texto comercial fue enviado en diciembre de 1992. Hoy, el número de mensajes de texto enviados y recibidos cada día excede la población total del planeta.      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;Costó 38 años a la radio alcanzar una audiencia de 50 millones de personas. A la Tv 13 años, a Internet 4 años. Un iPod 3 años…Facebook 2 años…      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;El número de dispositivos para internet en 1984 era de 1000. El número de dispositivos para internet en 1992 era de 1.000.000. El número de dispositivos para internet en 2008 es de 1.000.000.000.     &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;Existen unas 540.000 palabras en el Inglés de hoy, 5 veces más que durante la época de Shakespeare.      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt; &lt;font color="#400040"&gt;   &lt;p&gt; Se estima que una semana de New York Times contiene más información de la que una persona era capaz de procesar a lo largo de su vida en el siglo 18.      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Se estima que durante este año se generarán 4 exabytes de información única, más que en los 5000 años previos. &lt;/p&gt; &lt;/font&gt;&lt;font color="#400040"&gt;   &lt;p&gt; El volumen de nueva información técnica se dobla cada 2 años.      &lt;br /&gt;Para los estudiantes que vayan a cursar un grado de 4 años esto significa… que la mitad de lo que aprenderán el primer año de estudio estará desfasado el tercero.       &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Las NNTT han probado con éxito un cable de fibra óptica que transporta 14 billones de bits por segundo en una sola línea de fibra. &lt;/p&gt; &lt;/font&gt;&lt;font color="#400040"&gt;   &lt;p&gt; Eso significa 2660 Cds o 210 millones de llamadas de teléfono por segundo se triplica cada 5 meses y se espera que siga haciéndolo durante los próximos 20 años.      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;En 2013 se construirá una supercomputadora que excederá las capacidades computacionales del cerebro humano. &lt;/p&gt; &lt;/font&gt;  &lt;p&gt;&lt;font color="#400040"&gt;Las predicciones dicen que en 2049, un ordenador de 1000 dólares excederá las capacidades computacionales de la especie humana.     &lt;br /&gt;Durante el tiempo que ha durado esta presentación han nacido 67 niños en US, 274 en China, 395 en India.       &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;Y 518.201 canciones han sido descargadas de forma ilegal. Bueno…694.000      &lt;br /&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#400040"&gt;¿Pero qué significa todo esto?     &lt;br /&gt;&lt;/font&gt;    &lt;br /&gt;La Traducción es de la web: &lt;a title="http://www.dreig.eu/caparazon/2008/11/25/entender-el-mundo-hoy-y-manana-did-you-know/" href="http://www.dreig.eu/caparazon/2008/11/25/entender-el-mundo-hoy-y-manana-did-you-know/" target="_blank"&gt;http://www.dreig.eu/caparazon/2008/11/25/entender-el-mundo-hoy-y-manana-did-you-know/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3259808776185314588?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3259808776185314588/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3259808776185314588' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3259808776185314588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3259808776185314588'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/did-you-know-sabia-usted-que.html' title='Did You Know - ¿Sabía usted que?'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QPVnXEzDdCg/SfEIMzCecBI/AAAAAAAAA1o/f2d9aiuxC00/s72-c/videod3677f5ccb83%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-6489691749371354956</id><published>2009-04-19T00:49:00.001-03:00</published><updated>2009-04-19T00:49:21.723-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='xml-rpc'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><title type='text'>Librería Java para XML-RPC</title><content type='html'>&lt;p&gt;Acabo de encontrar “buscando” una librería bastante interesante para trabajar con Java, si leen mi blog verán de que después de muchos coqueteos con Java parece que finalmente tenemos algo formal con este leguaje, en parte gracias a que volví a la universidad y es el lenguaje de las materias de programación.   &lt;br /&gt;Desde que escribo el blog los temas de la facultad están relacionados con los temas de mi hobby en internet, mas que nada por que decidí relacionarlos.    &lt;br /&gt;Bueno esto que acabo de descubrir y que por lo que veo me ocupara bastante tiempo estudiar vuelve a unir los ámbitos, espero en algún momento estar escribiendo alguna entrada en un .jar escrito por mi en este blog, y que además este .jar sea mi proyecto para aprobar Paradigmas de Programación.    &lt;br /&gt;Bueno ahora en donde esta esta librería:    &lt;br /&gt;&lt;a title="http://xmlrpc.sourceforge.net/" href="http://xmlrpc.sourceforge.net/" target="_blank"&gt;http://xmlrpc.sourceforge.net/&lt;/a&gt;    &lt;br /&gt;Los archivos se descargan de:    &lt;br /&gt;&lt;a title="http://sourceforge.net/projects/xmlrpc" href="http://sourceforge.net/projects/xmlrpc" target="_blank"&gt;http://sourceforge.net/projects/xmlrpc&lt;/a&gt;    &lt;br /&gt;Y encontré algunos ejemplos de uso en:    &lt;br /&gt;&lt;a title="http://www.ibm.com/developerworks/xml/library/j-xmlrpc.html" href="http://www.ibm.com/developerworks/xml/library/j-xmlrpc.html" target="_blank"&gt;http://www.ibm.com/developerworks/xml/library/j-xmlrpc.html&lt;/a&gt;    &lt;br /&gt;Supongo que tendré que empezar a traducir estas cosas para saber si esto es posible.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-6489691749371354956?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/6489691749371354956/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=6489691749371354956' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/6489691749371354956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/6489691749371354956'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/libreria-java-para-xml-rpc.html' title='Librería Java para XML-RPC'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-414954991877105595</id><published>2009-04-16T19:35:00.007-03:00</published><updated>2009-04-16T19:45:57.679-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><title type='text'>Agrupar Radio Button (JRadioButton) en Java</title><content type='html'>&lt;p&gt;Conviene aclarar que esto esto lo hago en Eclipse que no tiene un componente visual que represente una asociación de Radios en su editor visual, así que si usas Eclipse o de menos potencia como BlueJ esto te va a servir, si por el contrario usas otro API que yo no conozco(como NetBeans) podrías investigar si hay una forma mas fácil.    &lt;br /&gt;La agrupación de JRadioButton logra que estos dos componentes estén relacionados como llaves, si tenemos un grupo de Radios estos solo uno puede estar seleccionado.     &lt;br /&gt;De verdad esta forma es fácil, en eclipse cuando hacemos una Visual Class directamente dibujamos los JRadioButton directamente sobre el JPanel, lo que tenemos que recordar para luego ir al código son los nombres, aunque la ayuda de código de Eclipse es buena.     &lt;br /&gt;Una vez que tenemos los dos Radios por ejemplo estos:     &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/SeeylgN1wbI/AAAAAAAAA0c/V-a5TV7CEL0/s1600-h/radios%5B3%5D.gif"&gt;&lt;img title="radios" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="78" alt="radios" src="http://lh4.ggpht.com/_QPVnXEzDdCg/SeeymXpvPgI/AAAAAAAAA0g/QfBI1XIposA/radios_thumb%5B1%5D.gif?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;Debemos ir al editor de código de nuestra clase heredada de JPanel y agregar esta funcion en algún lugar, por ejemplo al final de todos para no equivocarnos:     &lt;br /&gt;&lt;/p&gt;  &lt;h5&gt;private void crearGrupoBotones()    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ButtonGroup grupo = new ButtonGroup();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; grupo.add(rbMasc);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; grupo.add(rbFem);     &lt;br /&gt;}&lt;/h5&gt; La funcion no es ninguna novedad, un método privado de la clase que crea un objeto ButtonGroup sin argumentos, luego se le agregan los botones que se llaman rbMasc y rbFem. Con esto ya tenemos los botones listos para ser asociados.   &lt;br /&gt;Lo que falta es añadir es en el constructor de nuestra clase la llamada a esta funcion, luego de la funcion initilizetialize();   &lt;br /&gt;Para finalizar ButtonGroup se importa desde aquí:   &lt;br /&gt;  &lt;h5&gt;import javax.swing.ButtonGroup;&lt;/h5&gt; Listo a partir de ahora estos Radios están unidos, si estamos usando estos componentes para mostrar distintas alternativas en nuestro formulario y tenemos dos podemos escuchar a los botones con un solo Listener en alguno, el stateChanged, ya que cuando cambia uno cambia el otro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-414954991877105595?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/414954991877105595/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=414954991877105595' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/414954991877105595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/414954991877105595'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/agrupar-radio-button-jradiobutton-en.html' title='Agrupar Radio Button (JRadioButton) en Java'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QPVnXEzDdCg/SeeymXpvPgI/AAAAAAAAA0g/QfBI1XIposA/s72-c/radios_thumb%5B1%5D.gif?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-5450447015011836441</id><published>2009-04-15T11:12:00.006-03:00</published><updated>2009-04-16T19:46:27.863-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Prolog'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Paradigma Logico – Programación Logica</title><content type='html'>&lt;p&gt;Una forma de razonar para resolver problemas en matemáticas se fundamenta en la lógica de primer orden. El conocimiento básico de las matemáticas se puede representar en la lógica en forma de axiomas, a los cuales se añaden reglas formales para deducir cosas verdaderas (teoremas) a partir de los axiomas. Gracias al trabajo de algunos matemáticos de finales del siglo pasado y principios de éste, se encontró la manera de automatizar computacionalmente el razonamiento lógico, particularmente para un conjunto significativo de la lógica de primer orden, que permitió que la lógica matemática diera origen a otros   &lt;br /&gt;tipos de lenguajes de programación, conocidos como lenguajes lógicos.    &lt;br /&gt;También se conoce a estos lenguajes como lenguajes declarativos, porque todo lo que el programador tiene que hacer para solucionar un problema es describirlo vía axiomas y reglas de deducción.    &lt;br /&gt;En los lenguajes lógicos se utiliza el formalismo de la lógica de primer orden para representar el conocimiento sobre un problema y para hacer preguntas que, si se demuestra que se pueden deducir a partir del conocimiento dado en forma de axiomas y de las reglas de deducción estipuladas, se vuelven teoremas. Así se encuentran soluciones a problemas formulados como preguntas. Con base en la información expresada dentro de la lógica de primer orden, se formulan las preguntas sobre el dominio del problema y el intérprete del lenguaje lógico trata de encontrar la respuesta automáticamente. El    &lt;br /&gt;conocimiento sobre el problema se expresa en forma de predicados (axiomas)    &lt;br /&gt;que establecen relaciones sobre los símbolos que representan los datos del    &lt;br /&gt;dominio del problema.    &lt;br /&gt;Este concepto de programación lógica está ligado históricamente a un lenguaje llamado Prolog, que proviene de PROgrammation en LOGique (programación en lógica), que fue el primer lenguaje de programación lógico y el más conocido y utilizado. Este lenguaje fue desarrollado por el Grupo de Inteligencia Artificial de la Universidad de Marseille, dirigido por Alain Colmerauer, en 1972. Prolog es utilizado para el desarrollo de aplicaciones de inteligencia artificial debido a su forma de representar el conocimiento, facilitando las    &lt;br /&gt;búsquedas en bases de datos, la escritura de compiladores, la construcción de sistemas expertos, el procesamiento de lenguaje natural y la programación automática. También es muy adecuado para las aplicaciones que implican búsqueda de patrones, búsqueda con rastreo inverso o información incompleta.    &lt;br /&gt;Asimismo es el lenguaje escogido por Japón como piedra angular de los sistemas de computación de quinta generación.    &lt;br /&gt;    &lt;br /&gt;Dice Alain Colmerauer en [1]: &amp;quot;Se suele preguntar cuál es la diferencia entre Prolog y los otros lenguajes de programación y de dónde viene su supuesto poder. Prolog nació de un desafío: crear un lenguaje de muy alto nivel, aun cuando fuera ineficiente para los informáticos de la época. La eficiencia consistía entonces en que una máquina ejecutara muy rápidamente programas laboriosamente escritos. El reto consistía en poder escribir rápidamente los programas dejando a la máquina su laboriosa ejecución.”    &lt;br /&gt;    &lt;br /&gt;Una vez liberados de esa obsesión por la eficiencia, se pudo recurrir a los formalismos y mecanismos de inferencia de la lógica matemática; mecanismos ciertamente ineficientes,&amp;#160; pero poderosos sin lugar a dudas. De ahí viene el nombre de Prolog “Programación en lógica”. Ahora bien, si se considera lo que sucede a nivel de la máquina, resulta que ésta deberá ser mucho más inteligente de lo normal: debe ser no-determinista, es decir, capaz de explorar muchas posibilidades y debe poder resolver miles y miles de pequeñas ecuaciones.    &lt;br /&gt;Estas ecuaciones introducen incógnitas, que no son otra cosa que las variables del programa, pero distan mucho de ser las variables habituales que designan localidades de memoria. El programador que llega a Prolog desde un lenguaje clásico, experimenta una revelación semejante a la del escolar que pasa de la aritmética a los primeros rudimentos del álgebra. Puede representar como incógnitas aquellas entidades cuyos valores busca, establecer ciertas relaciones entre esas incógnitas y, sin tener que detallarlos, dejar que la máquina considere todos los casos posibles y aportar todas las posibles soluciones...    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Logica Proposicional:&lt;/strong&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;La programación lógica tiene sus orígenes en los trabajos de prueba automática de teoremas. Para esto se utiliza una única regla de inferencia llamada principio de resolución1, mediante la cual la prueba de un teorema puede ser llevada a cabo en forma automática. La resolución es una regla que se aplica sobre las fórmulas surgidas de la lógica de primer orden y la demostración de teoremas mediante esta regla de inferencia se lleva a cabo por reducción al absurdo.   &lt;br /&gt;La lógica de primer orden o lógica proposicional es uno de los formalismos más utilizados para representar conocimiento en Inteligencia Artificial. Esta lógica es la que utiliza proposiciones y nexos entre éstas para expresar sus verdades. Las proposiciones equivalen a frases u oraciones del lenguaje hablado, mientras que los nexos a través de los cuales puede relacionar estas proposiciones son la conjunción (y), la disyunción (o) y la implicación (si). Cuenta con un lenguaje formal mediante el cual es posible representar fórmulas llamadas axiomas o predicados, que permiten describir fragmentos del conocimiento, y además consta de un conjunto de reglas de inferencia que aplicadas a los axiomas,    &lt;br /&gt;permiten derivar nuevo conocimiento.    &lt;br /&gt;El lenguaje formal de la lógica proposicional o lógica de primer orden es el Lenguaje de Primer Orden (LPO). En realidad éste no es un lenguaje simple, sino que es una familia de lenguajes, donde todos sus miembros tienen una gramática similar y comparten ciertos ítems importantes de su vocabulario. De todos modos nuestro estudio se centrará en un lenguaje genérico de primer orden, que es el que luego podremos aplicar en los programas de Prolog.    &lt;br /&gt;Los enunciados más básicos de LPO son los enunciados atómicos. Estos se corresponden a los enunciados más simples del español, enunciados que consisten en algunos nombres conectados por algún predicado. Ejemplos de este tipo son Juan corrió, Juan vio a Ana y Ana regaló flores a Juan. En LPO, los enunciados atómicos son formados también combinando nombres (o constantes individuales, tal como suelen llamarse) y predicados, aunque como    &lt;br /&gt;posteriormente veremos difieren un poco en el modo en que son combinados.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Introducción a Prolog&lt;/strong&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Prolog es un lenguaje de programación declarativo basado en la lógica de primer orden, particularmente en una restricción de la forma clausal de la lógica. Fue desarrollado por Alain Colmerauer en 1972 en la Universidad de Marseille, Francia. Usa como regla de inferencia el “principio de resolución” propuesto por Robinson en 1965. La representación del dominio se realiza a través de hechos y reglas.   &lt;br /&gt;Decimos que es declarativo porque no es imperativo. Es decir, cada “línea de programa” Prolog es una declaración, no una orden. Se tiene así un conjunto de aseveraciones expresadas simbólicamente, que expresan conocimientos de una situación real o ficticia. Para esto se usa la lógica de predicados de primer orden que se expuso anteriormente.    &lt;br /&gt;Prolog es un lenguaje de programación hecho para representar y utilizar el conocimiento que se tiene sobre un determinado dominio. Más exactamente, el dominio es un conjunto de objetos y el conocimiento se representa por un conjunto de relaciones que describen las propiedades de los objetos y sus interrelaciones.    &lt;br /&gt;En Prolog, el programa (las reglas que definen las propiedades y relaciones entre los objetos) está muy alejado del modelo Von Newman que posee la máquina en la que tienen que ser interpretados. Debido a esto, la eficiencia en la ejecución no puede ser comparable con la de un programa equivalente escrito en algún lenguaje imperativo o procedural. El beneficio es que aquí ya no es necesario definir el algoritmo de solución, como en la programación imperativa, sino que lo fundamental es expresar bien el conocimiento que se tenga sobre el problema que se esté enfrentando.    &lt;br /&gt;Prolog forma su lenguaje a partir de un alfabeto que contiene sólo dos tipos de símbolos:    &lt;br /&gt;1. símbolos lógicos, entre los que se encuentran los símbolos de constantes proposicionales true y false (verdadero y falso); los símbolos para la negación, la conjunción, la disyunción y la implicación (que en Prolog se denota con los caracteres :-); los símbolos de cuantificadores; y los símbolos auxiliares de escritura como corchetes [,], paréntesis (,) y coma.    &lt;br /&gt;2. símbolos no lógicos, agrupados en el conjunto de símbolos constantes; el conjunto de símbolos de variables individuales (identificadores); el conjunto de símbolos de relaciones n-arias; y el conjunto de símbolos de funciones n-arias.    &lt;br /&gt;A partir de estos símbolos se construyen las expresiones válidas en el LPO de Prolog: los términos (nombres) y las fórmulas (predicados). Este LPO posee un amplio poder de expresión, ya que los términos permiten hacer referencia (nombrar) todos los objetos del universo, mientras que las fórmulas (predicados) permiten afirmar o negar propiedades de estos o bien establecer relaciones entre los objetos del universo.    &lt;br /&gt;Existen muchas versiones de Prolog. En Prolog de Edimburgo, versión de Prolog diseñada por David Warren que se ha convertido en estándar, un término es cualquiera de las tres expresiones siguientes: una constante, como el número &amp;quot;100&amp;quot;; la palabra &amp;quot;antonio&amp;quot; y la letra &amp;quot;c&amp;quot;; o una variable, por ejemplo &amp;quot;X&amp;quot; (notar que los identificadores que comienzan con mayúscula representan, siempre, variables).    &lt;br /&gt;En cambio, un predicado atómico o elemental es una expresión de la forma &amp;quot;R(a1, a2,..., an)&amp;quot; donde R es un símbolo de predicado n-ario que como vimos, denota alguna relación entre objetos o alguna propiedad de un objeto, y a1, a2,..., an son términos funcionando como argumentos.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Algunas Versiones de Lenguaje Prolog para PC:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;ALS Prolog (Applied Logic Systems Inc.) DOS / Unix / Xenix    &lt;br /&gt;Arity Prolog (Arity Corp) DOS / Windows / OS 2    &lt;br /&gt;Cogent Prolog (Amziod) DOS    &lt;br /&gt;IF Prolog (InterFace Computer Inc.) UNIX    &lt;br /&gt;Quintus Prolog (Quintus Corp.) DOS / Windows / OS 2    &lt;br /&gt;Turbo Prolog (Borland International) DOS    &lt;br /&gt;PIE Prolog (versión shareware) DOS    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt; Universidad Tecnológica Nacional Paradigmas de Programación  &lt;br /&gt;Facultad Regional Córdoba Programación Lógica&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-5450447015011836441?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/5450447015011836441/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=5450447015011836441' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5450447015011836441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5450447015011836441'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/paradigma-logico-programacion-logica.html' title='Paradigma Logico – Programación Logica'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2446971029023000922</id><published>2009-04-14T23:07:00.005-03:00</published><updated>2009-04-16T19:43:20.695-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Modelo DRA(Desarrollo Rápido de Aplicaciones) – Desarrollo de Software</title><content type='html'>&lt;p&gt;&lt;strong&gt;En que consiste el DRA(del ingles RAD, Rapid Application Development)&lt;/strong&gt;&lt;br /&gt;Consiste en un desarrollo acelerado del modelo lineal basándose en componentes ya diseñados por otros o para otros proyectos, se deben conocer a fondo los requisitos del software y se debe limitar el alcance del proyecto. Se pueden de esta manera generar proyectos que funcionen a corto plazo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Como es el esquema que presenta este modelo:&lt;/strong&gt;&lt;br /&gt;Este modelo se desarrolla en 5 etapas:&lt;br /&gt;&lt;u&gt;Modelado de Gestión:&lt;/u&gt; Se diseña en base a al flujo de información y con respecto a este flujo se deben responder las siguientes preguntas: ¿Que información se recibe? ¿Que información se genera? ¿De donde viene? ¿Hacia donde va? ¿Quien procesara luego la información?&lt;br /&gt;&lt;u&gt;Modelado de Datos:&lt;/u&gt; Se diseña la estructura de datos con sus objetos y sus relaciones para que contenga la información del modelado de gestión.&lt;br /&gt;&lt;u&gt;Modelado de Proceso:&lt;/u&gt; Se aplican funciones sobre los datos del punto anterior, básicamente se diseñan procesos que crean, modifican, eliminan o recuperar objetos.&lt;br /&gt;&lt;u&gt;Generación de Aplicaciones:&lt;/u&gt; Se basa en el uso de técnicas de cuarta generación en donde lo que se utiliza para programar no son lenguajes propiamente dichos si no componentes anteriores que son reutilizables, se da el caso de que deben desarrollarse componentes nuevos y entonces se diseñan para que también puedan ser utilizados por futuros desarrollos basados en este modelo.&lt;br /&gt;&lt;u&gt;Pruebas y entrega:&lt;/u&gt; Como muchos componentes son reutilizados ya se han probado se reduce gran parte del proceso de prueba. Queda probar los componentes nuevos y asegurarse de que la comunicación entre ellos se adecuada.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Cuales son los inconvenientes que presenta este enfoque&lt;/strong&gt;&lt;br /&gt;El DRA se basa en componentes y por ende en el trabajo en paralelo de distintos equipos DRA(esto se hace para ganar tiempo) cuando se trata de un proyecto grande puede ser imposible mantener una gran cantidad de equipos funcionando al mismo tiempo.&lt;br /&gt;Se requiere que todos los implicados en el desarrollo estén comprometidos con la rapidez(DRA) si faltara el compromiso de alguna parte el desarrollo acelerado perdería su esencia&lt;br /&gt;Además es importante aclarar que no todos los proyectos se pueden modularizar y entonces no se pueden distribuir entre equipos de trabajo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2446971029023000922?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2446971029023000922/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2446971029023000922' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2446971029023000922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2446971029023000922'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/modelo-dradesarrollo-rapido-de.html' title='Modelo DRA(Desarrollo Rápido de Aplicaciones) – Desarrollo de Software'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2516268232730018763</id><published>2009-04-14T23:04:00.004-03:00</published><updated>2009-04-15T20:52:37.468-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Modelo de Construcción de Prototipos – Desarrollo de Software</title><content type='html'>&lt;p&gt;&lt;strong&gt;Como funciona este modelo:&lt;/strong&gt;    &lt;br /&gt;Este modelo funciona cuando alguna de las partes intervinientes en desarrollo(clientes, desarrolladores, equipo) no están totalmente seguros de los requisitos del software, dicho de otro modo se sabe que hay que hacer un desarrollo pero también se sabe que algunos aspectos del comportamiento del software recién serán develados durante una etapa inicial de prueba.    &lt;br /&gt;Entonces este modelo plantea la recolección de requisitos y el diseño y codificación de un software de prueba, maqueta o prototipo. En el transcurso de este desarrollo se irán planteando las posibilidades y las incógnitas de ciertos aspectos hasta entonces desconocidos para el cliente o para el desarrollador, también se puede utilizar para anticiparse a una nueva tecnología de hardware aun no disponible.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Para que es especialmente útil:&lt;/strong&gt;    &lt;br /&gt;Lo ideal es que este desarrollo sirva para reconocer los requisitos totales del software. Se utiliza este modelo como una forma de reconocer a fondo lo necesario para que el software sea exitoso, y en base a todo eso diseñar una nueva versión estable y final con las modificaciones necesarias, un rediseño de la maqueta en el cual se sabrán reconocer las fallas y las mejoras.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Cuales son los problemas que se pueden presentar con la construcción de prototipos:&lt;/strong&gt;    &lt;br /&gt;El cliente y el desarrollador no llegan a una plena comunicación en cuales son las etapas de este modelo, en consecuencia a veces el cliente confunde las versiones maqueta con las finales, sugiriendo cambios en vez de un desarrollo nuevo. El proceso se hace lento.    &lt;br /&gt;El desarrollador hace uso de tecnologías adecuadas para que la maqueta funcione rápido, pero luego olvida que esas tecnologías no son adecuadas para el funcionamiento de la versión final. Ejemplo: Se utiliza un lenguaje de programación por que es conocido, pero para la versión final tal vez no sea el adecuado y en consecuencia se creen problemas de velocidad o de mantenimiento.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2516268232730018763?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2516268232730018763/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2516268232730018763' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2516268232730018763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2516268232730018763'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/modelo-de-construccion-de-prototipos.html' title='Modelo de Construcción de Prototipos – Desarrollo de Software'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3876723600805682325</id><published>2009-04-14T23:00:00.004-03:00</published><updated>2009-04-15T20:52:38.476-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Procesos Evolutivos de Software – Modelo de Desarrollo Concurrente</title><content type='html'>&lt;p&gt;&lt;strong&gt;Como se puede representar este modelo y cuales son sus características:&lt;/strong&gt;    &lt;br /&gt;El modelo de desarrollo concurrente se puede expresar como una red de unidades de desarrollo con distintos estados(Ninguno, Bajo Desarrollo, Cambios en espera, Bajo revisión) interconectadas entre si donde no es el transcurso del tiempo si no la relación que tiene una unidad con otra la que desencadena un cambio de estado. En los modelos anteriores era el transcurso del tiempo el que fijaba el traslado del producto de una unidad a otra ahora cuando el producto ha cumplido su ciclo dentro de una unidad pasa a la siguiente. Las unidades de desarrollo que se pueden tener en cuenta son similares a las anteriores, diseño, análisis de riesgos, ingeniería, adaptación, etc.    &lt;br /&gt;Este enfoque parece estar muy relacionado con los paradigmas de programación orientado a objetos y orientado a eventos, por un lado las unidades tienen relaciones y se envían mensajes que activan la siguiente unidad(pero funcionan todas al mismo tiempo y de variada forma) y por otro lado esos mensajes son los que activan los sucesos, como por ejemplo el caso de que el cliente pida una revisión de requisitos.    &lt;br /&gt;Las unidades que se encuentran en distintos estados pueden estar todas funcionando al mismo tiempo. Este modelo parece bastante real.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;En que casos es útil aplicarlo:&lt;/strong&gt;    &lt;br /&gt;En general se puede utilizar en cualquier tipo de desarrollo y brinda un panorama del funcionamiento del desarrollo exacto a un momento dado.    &lt;br /&gt;Un caso donde se aplica este modelo es en el desarrollo de aplicaciones clientes servidor. En donde se pueden identificar además de las etapas típicas de un modelo varias dimensiones de desarrollo, las relacionadas con el sistema del servidor y los componentes que se conectaran a el. Todas las actividades pueden hacerse simultáneamente Ejemplo: el desarrollo de un servicio de chat, en un momento el equipo diseñador del programa cliente puede diseñar la interfaz, pero, esperara a que el equipo del servidor diseñe o establezca el protocolo de comunicación mas adecuado para el proyecto, para comenzar con la programación de la comunicación.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3876723600805682325?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3876723600805682325/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3876723600805682325' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3876723600805682325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3876723600805682325'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/procesos-evolutivos-de-software-modelo_4324.html' title='Procesos Evolutivos de Software – Modelo de Desarrollo Concurrente'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-9112135543126317842</id><published>2009-04-14T22:58:00.005-03:00</published><updated>2009-04-16T19:43:50.023-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Procesos Evolutivos de Software – Modelo de Ensamblaje de Componentes</title><content type='html'>&lt;p&gt;&lt;strong&gt;Semejanzas y diferencias de este modelo con el modelo en espiral:&lt;/strong&gt;    &lt;br /&gt;Es evolutivo, se puede aplicar a proyectos que requieran la adaptación constante del producto, es un modelo interactivo por que requiere la correcta conexión entre las distintas partes y etapas del desarrollo. En realidad se trata de un modelo en espiral basado en componentes mas que en prototipos, estos componentes son las clases.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Como funciona este modelo:&lt;/strong&gt;    &lt;br /&gt;Se reconocen las clases adecuadas para manejar los datos requeridos, se examinan paquetes anteriores para ver si dichas clases ya existen para reutilizar ese componente. Se empaquetan estas clases nuevas junto con los algoritmos que definen su comportamiento. Se conectan paquetes reutilizados y nuevos, los nuevos paquetes pasan a formar parte de los recursos a futuro. Se procede a iniciar nuevamente el ciclo de producción    &lt;br /&gt;El ciclo de producción del modelo de ensamblaje de componentes se caracteriza por las siguientes etapas:    &lt;br /&gt;Comunicación con el cliente, Planificación, Análisis de riesgos, Construcción y adaptación de la ingeniería, Evaluación del cliente. Como se puede ver es bastante parecido al modelo en espiral salvo en la fase de implementación (Construcción y Adaptación de la Ingeniería).    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Cuales son las ventajas que proporciona:&lt;/strong&gt;    &lt;br /&gt;Las ventajas están en la productividad elevada que tiene este modelo con las librerías adecuadas, en promedio en el mercado surgen estos datos: reducción del 70% del tiempo de desarrollo, reducción del 84% del costo del desarrollo, el índice promedio de productividad de la industria del software es de 16.9 mientras que en este modelo es de 26.2.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-9112135543126317842?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/9112135543126317842/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=9112135543126317842' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/9112135543126317842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/9112135543126317842'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/procesos-evolutivos-de-software-modelo_6400.html' title='Procesos Evolutivos de Software – Modelo de Ensamblaje de Componentes'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2928378446198798359</id><published>2009-04-14T22:55:00.004-03:00</published><updated>2009-04-15T20:52:40.043-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Procesos Evolutivos de Software – Modelo en Espiral</title><content type='html'>&lt;p&gt;&lt;strong&gt;Como es el esquema que presenta este modelo:     &lt;br /&gt;&lt;/strong&gt;Es un modelo bastante parecido al incremental en cuanto a la combinación repetitiva de los dos modelos el lineal y el de construcción de prototipos. Como su nombre lo indica su representación es en forma de espiral partiendo de la comunicación con el cliente y pasando por lo general por 6 etapas diferenciadas. En cada vuelta al espiral las ondas se van alejando y el trabajo de cada área aumenta, en la primera pasada el desarrollo puede ser solo un bosquejo en papel mientras que en la ultima tenemos el producto final.    &lt;br /&gt;Las etapas del espiral son: Comunicación con el cliente, Planificación, Análisis de riesgos, Ingeniería, Construcción y adaptación, Evaluación del Cliente.    &lt;br /&gt;Al completar el primer circulo se obtienen las especificaciones del producto, para que, como, con que. En las vueltas siguientes se irán obteniendo prototipos cada vez mas cercanos al producto terminado. Pero ademas este proceso se puede adaptar para el mantenimiento de un producto, En ese caso el primer circulo seria parecido al anterior(Conceptos) pero los siguientes estarían concentrados en distintos proyectos, desarrollo de nuevos productos, mejora de los productos y mantenimiento de los productos. Este modelo seria ideal por ejemplo para el mantenimiento de un sistema operativo, o un software de gestión popular en    &lt;br /&gt;el mercado.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Problemas o dificultades que pueden surgir al aplicar este modelo:&lt;/strong&gt;    &lt;br /&gt;Los problemas están relacionados con el alto riesgo que se corre al prever que este modelo es adecuado para abordar un desarrollo y el consiguiente temor de los clientes a optar por esta alternativa. Ademas el modelo es bastante nuevo por lo que no se sabe a ciencia cierta si los resultados de combinar los modelos lineal y de construcción de prototipos serán mejores que los de utilizar un modelo mas conocido.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2928378446198798359?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2928378446198798359/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2928378446198798359' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2928378446198798359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2928378446198798359'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/procesos-evolutivos-de-software-modelo_14.html' title='Procesos Evolutivos de Software – Modelo en Espiral'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-8082169264742885069</id><published>2009-04-10T12:43:00.040-03:00</published><updated>2009-04-15T20:52:47.397-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dominios'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogs'/><title type='text'>Usar hosting de blogspot en .com.ar</title><content type='html'>&lt;p&gt;Hace una semana mostré como usar el hosting de blogspot para un dominio .com bueno en ese momento me parecía que se tendría que poder hacer con un .com.ar.&lt;br /&gt;Les adelanto que se puede y finalmente podríamos tener un dominio .com.ar con un blog todo con nuestro nombre de dominio, y gratis! &lt;a href="http://www.jblog.com.ar/" target="_blank"&gt;http://www.jblog.com.ar/&lt;/a&gt;&lt;br /&gt;Este fue el blog que tome para hacer las pruebas y ahora estoy pensando en cambiar la redirección por url de blogterrier.com.ar y pasarme a un hosting con blogger.&lt;br /&gt;Como pueden ver en jblog todas las paginas internas corresponden con el dominio jblog.com.ar aunque tambien es un blogspot.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Como se hace:&lt;/strong&gt;&lt;br /&gt;Los pasos para hacer esto ya los detalle en varios post anteriores pero es necesario que los ordene por que hay que tomar algunas cosas de acá y otras de allá.&lt;br /&gt;Para empezar deben &lt;a href="http://blogterrier.blogspot.com/2009/02/tener-tu-dominiocomar-blogspot-o.html" target="_blank"&gt;registrar un dominio&lt;/a&gt;, como hacerlo se puede leer en &lt;a href="http://blogterrier.blogspot.com/2009/02/tener-tu-dominiocomar-blogspot-o.html" target="_blank"&gt;este&lt;/a&gt; post mas viejo, pero seguramente ya saben como es esto. La diferencia con lo que explico en ese post es que nos cambiamos de servicio, ahora en vez de usar zoneedit usamos cdmon.&lt;br /&gt;Necesitamos una empresa que haga de intermediario por que el hosting de blogs de google solo funciona con los registros CNAME, estos nos los provee cdmon.com en su sector gratuito DNS Estáticos.&lt;br /&gt;Bueno sigamos con la practica, cuando deleguemos el dominio en el nic.ar debe quedar así:&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/Sd9o7kvFOZI/AAAAAAAAAzg/YEGPjCHqcM4/s1600-h/nicar%5B4%5D.gif"&gt;&lt;img title="nicar" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="481" alt="nicar" src="http://lh4.ggpht.com/_QPVnXEzDdCg/Sd9o9ru-5jI/AAAAAAAAAzk/7wQMnIO2bQY/nicar_thumb%5B2%5D.gif?imgmax=800" width="354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Además aquí faltan las direcciones ip de los servidores de cdmon:&lt;br /&gt;&lt;/p&gt;&lt;li&gt;ns1.cdmon.net212.36.74.129 &lt;/li&gt;&lt;li&gt;ns2.cdmon.net212.36.75.129 &lt;/li&gt;&lt;li&gt;ns3.cdmon.net213.186.58.203&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Ahora si o si deben registrarse como usuarios de &lt;a href="http://www.cdmon.com/" target="_blank"&gt;http://www.cdmon.com/&lt;/a&gt;. y Entrar a DNS Estáticos.&lt;br /&gt;Luego de eso en cdmon.com hay que agregar el dominio y apuntar los dos sin y con “www” hacia ghs.google.com por medio de dos registros CNAME.&lt;br /&gt;El resultado de esas modificaciones es:&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_QPVnXEzDdCg/Sd9o_OZubzI/AAAAAAAAAzo/quUP6Y6rqPQ/s1600-h/cdmon%5B4%5D.gif"&gt;&lt;img title="cdmon" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="148" alt="cdmon" src="http://lh4.ggpht.com/_QPVnXEzDdCg/Sd9pBbDfmwI/AAAAAAAAAzs/PXTILmJXU60/cdmon_thumb%5B2%5D.gif?imgmax=800" width="423" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Al respecto de los pasos que se deben seguir lean los comentarios sobre esta entrada, pero me imagino que si llegaron hasta acá podrán hacerlo solos.&lt;br /&gt;Esto puede estar terminado pero no se olviden que un cambio de delegación en el nic.ar tarda desde 2 días en adelante hasta 4 o 5, y un registro puede demorarse 2 semanas. No se sorprendan si esto que acabo de escribir les tarda 15 días.&lt;br /&gt;La siguiente etapa una vez que tanto nic.ar como cdmon.com estén en perfecto funcionamiento es avisarle a blogspot que nuestro blog ahora cambiara de dominio.&lt;br /&gt;Esto se hace en la pestaña &lt;strong&gt;Configuración&lt;/strong&gt; y en la pestaña &lt;strong&gt;Publicación&lt;/strong&gt;, allí deben elegir la opción de servicio gratuito de alojamiento en blogger.&lt;br /&gt;Colocan el dominio y si esta todo bien inmediatamente empieza a funcionar.&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_QPVnXEzDdCg/Sd9pDJ1Ap0I/AAAAAAAAAzw/vF81qqR1oQU/s1600-h/blogger%5B4%5D.gif"&gt;&lt;img title="blogger" style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="95" alt="blogger" src="http://lh3.ggpht.com/_QPVnXEzDdCg/Sd9pEiGNogI/AAAAAAAAAz0/p1-G2zLFDWc/blogger_thumb%5B2%5D.gif?imgmax=800" width="360" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para terminar les cuento una curiosidad:&lt;br /&gt;Si el dominio ya lo tenían redireccionado a otro servicio de google como por ejemplo Adsense para dominios, blogger les va a decir que ese dominio ya esta siendo utilizado para alojar otro blog, lo que hay que hacer es quitarlo de la lista de dominios en el panel de Adsense.&lt;br /&gt;Bueno entonces a tener paciencia!&lt;/p&gt;&lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-8082169264742885069?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/8082169264742885069/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=8082169264742885069' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8082169264742885069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8082169264742885069'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/usar-hosting-de-blogspot-en-comar.html' title='Usar hosting de blogspot en .com.ar'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QPVnXEzDdCg/Sd9o9ru-5jI/AAAAAAAAAzk/7wQMnIO2bQY/s72-c/nicar_thumb%5B2%5D.gif?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-74279753864900389</id><published>2009-04-09T12:51:00.007-03:00</published><updated>2009-04-15T20:52:48.709-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><title type='text'>Repaso Final de Colecciones en Paradigmas</title><content type='html'>El ultimo ejercicio que usa Colecciones en Java:&lt;br /&gt;&lt;p&gt;Tema: Colecciones en Java. ArrayList y Vector. Enunciado. El área de personal de nuestra universidad nos ha solicitado el desarrollo de un programa que permita gestionar información relacionada con las personas contratadas por la universidad. En la etapa de análisis se han detectado las siguientes entidades: Empleado: tiene los siguientes datos: DNI, nombre, domicilio y sueldo básico. Docente: agrega los siguientes datos: titulo, posgrado representado por un valor entero (1-si 2-no) y una colección vector que almacena las dedicaciones (cargos) que posee el docente. Cada Dedicación tiene los siguientes datos: materia, cargo representado por los siguientes valores (1-Ayudante de primera 2- Jefe de Trabajos Prácticos 3- Prof. Adjunto) y área de la materia que dicta representada por los siguientes valores (1-Programación 2-Ciencias Básicas 3-Sistemas). El salario final del docente se calcula teniendo en cuenta el cargo que desempeña el docente, si el cargo es adjunto se incrementa al sueldo básico un 15%, si es Jefe de Trabajos Prácticos el sueldo básico se incrementa en un 10% y si es Ayudante de Primera se incrementa el básico en un 5%. NoDocente: que agrega el siguiente dato: antigüedad. El salario final del no docente se calcula teniendo en cuenta los años de antigüedad. Si la antigüedad del no docente está comprendida entre 1 y 5 años el incremento es del 10%; si la antigüedad es mayor a 5 y menor igual a 10 el sueldo básico se incrementa en un15% y si es mayor a 10 años tiene el básico un incremento del 18%. RecursosHumanos: dispone una colección que almacena los empleados de la universidad. Se piden generar las siguientes salidas por pantalla. Obligatorios&lt;br /&gt; Mostrar un listado del salario final de todos los empleados.&lt;br /&gt; Calcular y mostrar el porcentaje de empleados no docentes cuya antigüedad este comprendida entre 7 y 10 años.&lt;br /&gt; Generar un listado que muestre los datos de los docentes que tienen título de posgrado.&lt;/p&gt;&lt;br /&gt;&lt;h5&gt;&lt;p&gt;public abstract class Empleado {&lt;br /&gt;    private String dni;&lt;br /&gt;    private String nombre;&lt;br /&gt;    private String domicilio;&lt;br /&gt;    private double sueldob; &lt;/p&gt;&lt;p&gt;    public Empleado(String dni, String nombre, String domicilio, double sueldob)&lt;br /&gt;    {&lt;br /&gt;        this.setDni(dni);&lt;br /&gt;        this.setNombre(nombre);&lt;br /&gt;        this.setDomicilio(domicilio);&lt;br /&gt;        this.setSueldob(sueldob);&lt;br /&gt;    }&lt;br /&gt;    public String toString()&lt;br /&gt;    {&lt;br /&gt;        return "Nombre: "+getNombre()+" DNI: "+getDni()+"\n Domicilio: "+getDomicilio()+" Sueldo Base: "+getSueldob();&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public abstract double calculoSueldo(); &lt;/p&gt;&lt;p&gt;    public void setDni(String dni) {&lt;br /&gt;        this.dni = dni;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public String getDni() {&lt;br /&gt;        return dni;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setNombre(String nombre) {&lt;br /&gt;        this.nombre = nombre;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public String getNombre() {&lt;br /&gt;        return nombre;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setDomicilio(String domicilio) {&lt;br /&gt;        this.domicilio = domicilio;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public String getDomicilio() {&lt;br /&gt;        return domicilio;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setSueldob(double sueldob) {&lt;br /&gt;        this.sueldob = sueldob;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public double getSueldob() {&lt;br /&gt;        return sueldob;&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;br /&gt;&lt;/h5&gt;&lt;br /&gt;&lt;h5&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;import java.util.*; &lt;/p&gt;&lt;p&gt;public class Docente extends Empleado {&lt;br /&gt;    private String titulo;&lt;br /&gt;    private int posgrado;&lt;br /&gt;    private Vector vector; &lt;/p&gt;&lt;p&gt;    public Docente(String dni, String nombre, String domicilio, double sueldob, String t, int p, Vector z) {&lt;br /&gt;        super(dni, nombre, domicilio, sueldob);&lt;br /&gt;        this.setTitulo(t);&lt;br /&gt;        this.setPosgrado(p);&lt;br /&gt;        this.vector = z;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public double calculoSueldo() {&lt;br /&gt;        double sf=super.getSueldob();&lt;br /&gt;        for(int i=0; i&amp;lt;vector.size(); i++)&lt;br /&gt;        {&lt;br /&gt;            switch (((Dedicacion)vector.elementAt(i)).getCargo())&lt;br /&gt;            {&lt;br /&gt;            case 1:&lt;br /&gt;                sf+=super.getSueldob()*.05;&lt;br /&gt;            break;&lt;br /&gt;            case 2:&lt;br /&gt;                sf+=super.getSueldob()*.1;&lt;br /&gt;            break;&lt;br /&gt;            case 3:&lt;br /&gt;                sf+=super.getSueldob()*.15;&lt;br /&gt;            break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return sf;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setTitulo(String titulo) {&lt;br /&gt;        this.titulo = titulo;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public String getTitulo() {&lt;br /&gt;        return titulo;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setPosgrado(int posgrado) {&lt;br /&gt;        this.posgrado = posgrado;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public int getPosgrado() {&lt;br /&gt;        return posgrado;&lt;br /&gt;    }&lt;br /&gt;    public String toString()&lt;br /&gt;    {&lt;br /&gt;        String aux = super.toString()+"\n Titulo: "+getTitulo()+" Posgrado: "+getPosgrado();&lt;br /&gt;        for(int i=0; i&amp;lt;vector.size(); i++)&lt;br /&gt;            {&lt;br /&gt;                aux+=((Dedicacion)vector.elementAt(i)).toString()+"\n";&lt;br /&gt;            }&lt;br /&gt;        return aux;&lt;br /&gt;    }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/h5&gt;&lt;br /&gt;&lt;h5&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;public class Dedicacion {&lt;br /&gt;    private String materia;&lt;br /&gt;    private int cargo;&lt;br /&gt;    private int area;&lt;br /&gt;    public Dedicacion(String m, int c, int a)&lt;br /&gt;    {&lt;br /&gt;        setMateria(m);&lt;br /&gt;        setCargo(c);&lt;br /&gt;        setArea(a);   &lt;br /&gt;    }&lt;br /&gt;    public String toString()&lt;br /&gt;    {&lt;br /&gt;        return "Materia: "+getMateria()+", Cargo: "+getCargo()+", Area: "+getArea();&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setMateria(String materia) {&lt;br /&gt;        this.materia = materia;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public String getMateria() {&lt;br /&gt;        return materia;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setCargo(int cargo) {&lt;br /&gt;        this.cargo = cargo;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public int getCargo() {&lt;br /&gt;        return cargo;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setArea(int area) {&lt;br /&gt;        this.area = area;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public int getArea() {&lt;br /&gt;        return area;&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/h5&gt;&lt;br /&gt;&lt;h5&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;public class NoDocente extends Empleado { &lt;/p&gt;&lt;p&gt;    private int antiguedad;&lt;br /&gt;    public NoDocente(String dni, String nombre, String domicilio, double sueldob, int a) {&lt;br /&gt;        super(dni, nombre, domicilio, sueldob);&lt;br /&gt;        this.setAntiguedad(a);&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public double calculoSueldo() {&lt;br /&gt;        if(antiguedad&amp;lt;5)&lt;br /&gt;        return this.getSueldob()*1.1;&lt;br /&gt;        if(antiguedad&amp;gt;10)&lt;br /&gt;        return this.getSueldob()*1.18;&lt;br /&gt;        else&lt;br /&gt;        return this.getSueldob()*1.15;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setAntiguedad(int antiguedad) {&lt;br /&gt;        this.antiguedad = antiguedad;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public int getAntiguedad() {&lt;br /&gt;        return antiguedad;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public String toString()&lt;br /&gt;    {&lt;br /&gt;        return super.toString()+"\nAntiguedad en años: "+antiguedad;&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/h5&gt;&lt;br /&gt;&lt;h5&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;import java.util.*; &lt;/p&gt;&lt;p&gt;public class RecursosHumanos {&lt;br /&gt;    ArrayList emp;&lt;br /&gt;    public RecursosHumanos()&lt;br /&gt;    {&lt;br /&gt;        emp = new ArrayList();&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void add(Empleado x)&lt;br /&gt;    {&lt;br /&gt;        emp.add(x);&lt;br /&gt;    }&lt;br /&gt;    public String verSalarios()&lt;br /&gt;    {&lt;br /&gt;        String listado="Listado de empleados y sueldos:\n";&lt;br /&gt;        Iterator flecha = emp.iterator();&lt;br /&gt;        while(flecha.hasNext())&lt;br /&gt;        {&lt;br /&gt;            Empleado x= (Empleado)flecha.next();&lt;br /&gt;            listado+="Nombre: "+x.getNombre()+" Sueldo Final: "+x.calculoSueldo()+"\n";&lt;br /&gt;        }&lt;br /&gt;        return listado;&lt;br /&gt;    }&lt;br /&gt;    public String empNd()&lt;br /&gt;    {&lt;br /&gt;        String listado="El porcentaje de empleados no docente de antiguedad entre 7 y 10 años: ";&lt;br /&gt;        int ce=0;&lt;br /&gt;        int cnd=0;&lt;br /&gt;        Iterator flecha = emp.iterator();&lt;br /&gt;        while(flecha.hasNext())&lt;br /&gt;        {&lt;br /&gt;            ce++;&lt;br /&gt;            Empleado x= (Empleado)flecha.next();&lt;br /&gt;            if(x instanceof NoDocente &amp;amp;&amp;amp; ((NoDocente)x).getAntiguedad()&amp;gt;6 &amp;amp;&amp;amp; ((NoDocente)x).getAntiguedad()&amp;lt;11)&lt;br /&gt;            {&lt;br /&gt;                cnd++;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return listado+(cnd*100/ce);&lt;br /&gt;    }&lt;br /&gt;    public String posgrado()&lt;br /&gt;    {&lt;br /&gt;        String listado="Docentes que poseen posgrado: \n";&lt;br /&gt;        Iterator flecha = emp.iterator();&lt;br /&gt;        while(flecha.hasNext())&lt;br /&gt;        {&lt;br /&gt;            Empleado x= (Empleado)flecha.next();&lt;br /&gt;            if(x instanceof Docente &amp;amp;&amp;amp; ((Docente)x).getPosgrado()==1)&lt;br /&gt;            {&lt;br /&gt;                listado+=x.toString()+"\n";&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return listado;&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/h5&gt;&lt;br /&gt;&lt;h5&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;import java.util.*; &lt;/p&gt;&lt;p&gt;public class App {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        RecursosHumanos rh = new RecursosHumanos();       &lt;br /&gt;        Vector dedica = new Vector();&lt;br /&gt;        String dni;&lt;br /&gt;        String nombre;&lt;br /&gt;        String domicilio;&lt;br /&gt;        double sueldob;&lt;br /&gt;        String titulo;&lt;br /&gt;        int posgrado;&lt;br /&gt;        String materia;&lt;br /&gt;        int cargo;&lt;br /&gt;        int area;&lt;br /&gt;        int antiguedad;&lt;br /&gt;        int seguir=1;&lt;br /&gt;        while(seguir==1)&lt;br /&gt;        {&lt;br /&gt;            s("Nombre del empleado: ");&lt;br /&gt;            nombre=In.readLine();&lt;br /&gt;            s("DNI del empleado: ");&lt;br /&gt;            dni=In.readLine();&lt;br /&gt;            s("Domicilio Empleado");&lt;br /&gt;            domicilio=In.readLine();&lt;br /&gt;            s("Ingrese su sueldo base:");&lt;br /&gt;            sueldob=In.readDouble();&lt;br /&gt;            s("Tipee 1 para Docente - 2 para No Docente");&lt;br /&gt;            switch (In.readInt())&lt;br /&gt;            {&lt;br /&gt;            case 1:&lt;br /&gt;                s("Selecciono Docente, Ingrese el Titulo:");&lt;br /&gt;                titulo=In.readLine();&lt;br /&gt;                s("Tiene posgrado 1 no tiene 2");&lt;br /&gt;                posgrado=In.readInt();&lt;br /&gt;                int seguir2=1;&lt;br /&gt;                s("Debe Ingresar al menos una dedicacion");&lt;br /&gt;                while(seguir2==1)&lt;br /&gt;                {&lt;br /&gt;                    s("Materia:");&lt;br /&gt;                    materia=In.readLine();&lt;br /&gt;                    s("Cargo: 1-Ayudante de primera 2- Jefe de Trabajos Prácticos 3- Prof. Adjunto:");&lt;br /&gt;                    cargo=In.readInt();&lt;br /&gt;                    s("1-Programación 2-Ciencias Básicas 3-Sistemas:");&lt;br /&gt;                    area=In.readInt();&lt;br /&gt;                    dedica.add(new Dedicacion(materia, cargo, area));&lt;br /&gt;                    s("Si desea seguir cargando dedicaciones presione 1 si no otro numero");&lt;br /&gt;                    seguir2=In.readInt();&lt;br /&gt;                }&lt;br /&gt;                rh.add(new Docente(dni,nombre, domicilio, sueldob, titulo, posgrado, dedica));&lt;br /&gt;                dedica.clear();&lt;br /&gt;            break;&lt;br /&gt;            case 2:&lt;br /&gt;                s("Ingrese la antiguedad del no docente:");&lt;br /&gt;                antiguedad=In.readInt();&lt;br /&gt;                rh.add(new NoDocente(dni, nombre, domicilio, sueldob, antiguedad));&lt;br /&gt;            break;&lt;br /&gt;            }&lt;br /&gt;            s("Desea seguir ingresando empleados - 1 si - otro numero no:");&lt;br /&gt;            seguir=In.readInt();&lt;br /&gt;        }&lt;br /&gt;        s(rh.verSalarios());&lt;br /&gt;        s(rh.empNd());&lt;br /&gt;        s(rh.posgrado());&lt;br /&gt;    }&lt;br /&gt;    public static void s(String a)&lt;br /&gt;    {&lt;br /&gt;        System.out.println(a);&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/h5&gt;&lt;br /&gt;El enunciado es de los profes del 2K7 2009 de la FRC UTN, la resolucion es de Blogterrier, para correr el programa hace falta una clase para manejar la consola.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-74279753864900389?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/74279753864900389/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=74279753864900389' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/74279753864900389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/74279753864900389'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/repaso-final-de-colecciones-en.html' title='Repaso Final de Colecciones en Paradigmas'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-9140442747857320132</id><published>2009-04-04T20:23:00.005-03:00</published><updated>2009-04-14T08:44:51.355-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Cygwin Emulador de Linux</title><content type='html'>&lt;p&gt;Tengo instalada la maquina virtual de Sun VirtualBox con Ubuntu corriendo en una de sus maquinas y quizás eso sea motivo de otro post mas adelante.   &lt;br /&gt;Pero hoy recordé que una vez hace tiempo cuando no tenia mucha idea de esto había instalado una consola de Linux para ver que era y empecé a buscar.    &lt;br /&gt;Esta vez estoy movido por que necesito tener una consola a mano para estudiar la materia Sistemas Operativos.    &lt;br /&gt;Bueno el programa en cuestión es el Cygwin se lo pueden descargar de la web &lt;a title="http://cygwin.com/" href="http://cygwin.com/" target="_blank"&gt;http://cygwin.com/&lt;/a&gt; se descargan el setup.exe y luego este programa se descargara ciertos paquetes antes de instalarse completamente.    &lt;br /&gt;Aclaración: esto nos provee una consola en donde podemos probar los comandos de Linux, tenemos una estructura de directorios similar a la que tendríamos en un Linux real y además memoriza los cambios y archivos que vallamos creando adentro de esa estructura.    &lt;br /&gt;Muy util para aquellos estudiantes que como yo no tienen la posibilidad de instalar Ubuntu en su propia maquina.    &lt;br /&gt;Finalmente les dejo una imagen de como queda Cygwin funcionando:    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/Sdfr2hXFRqI/AAAAAAAAAxs/s30H32dpibE/s1600-h/cygwin%5B4%5D.gif"&gt;&lt;img title="cygwin" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="271" alt="cygwin" src="http://lh5.ggpht.com/_QPVnXEzDdCg/Sdfr4FihqRI/AAAAAAAAAxw/xIPwqtGtsmc/cygwin_thumb%5B2%5D.gif?imgmax=800" width="383" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-9140442747857320132?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/9140442747857320132/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=9140442747857320132' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/9140442747857320132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/9140442747857320132'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/cygwin-emulador-de-linux.html' title='Cygwin Emulador de Linux'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/Sdfr4FihqRI/AAAAAAAAAxw/xIPwqtGtsmc/s72-c/cygwin_thumb%5B2%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2205922883356091974</id><published>2009-04-03T10:19:00.005-03:00</published><updated>2009-04-14T08:45:09.834-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Procesos Evolutivos de Software - Modelo Incremental</title><content type='html'>&lt;p&gt;1) &lt;b&gt;Como es el esquema que presenta este modelo.     &lt;br /&gt;&lt;/b&gt;Es una combinación repetitiva entre el modelo lineal secuencial y el modelo de construcción de prototipos, agregando interactividad entre las distintas versiones de los prototipos.    &lt;br /&gt;Básicamente se trata de equipos de desarrollo independientes en cada etapa del modelo lineal, estos cuatro o mas equipos van desarrollando prototipos pero apenas el equipo de Análisis termina su trabajo y se lo entrega al de Diseño puede ponerse a trabajar en un nuevo prototipo que no solo tendrá en cuenta lo aprendido en su desarrollo si no también lo que hagan el resto de los equipos, esta situación se da en cada etapa del modelo lineal. Al principio trabajara solo el equipo de Análisis y al final solo el de Prueba, pero en las etapas intermedias y en los distintos prototipos que se irán acercando al producto final todos los equipos estarán trabajando en paralelo y en distintas versiones del software sin desperdiciar recursos.    &lt;br /&gt;    &lt;br /&gt;2) &lt;b&gt;Que mejora respecto al modelo en Cascada(lineal secuencial) y qué problemas aun persisten en este modelo?     &lt;br /&gt;&lt;/b&gt;Mejoras: Como las etapas del modelo lineal se presentan varias veces por un lado se pueden analizar a fondo los requisitos del software por otro existe la oportunidad de redirigir el desarrollo hacia aspectos antes ignorados Además se sabe de antemano que el modelo es repetitivo entonces se pueden establecer prioridades para cada pasada del producto por el ciclo de desarrollo.    &lt;br /&gt;Los problemas mas importantes del modelo lineal no eran de concepto si no mas bien de los medios con los que se contaba para el desarrollo, por eso seria quizás mas catastrófico tener un bloqueo en una de las etapas en un modelo de desarrollo incremental que en uno lineal(por la cantidad de recursos desperdiciados y por las expectativas creadas en la aplicación de este modelo). Si el cliente no podía esperar a probar el software en el desarrollo lineal quizás el modelo incremental pueda tardar mas tiempo terminar una versión estable, ya que los primeros ciclos del desarrollo estarán orientados a crear un núcleo donde se irán insertando las distintas etapas de desarrollo.&lt;/p&gt;  &lt;p&gt;3) &lt;b&gt;Cuando resultaría útil aplicar el desarrollo incremental?     &lt;br /&gt;&lt;/b&gt;Se pueden ahorrar recursos humanos trabajando con menos personal en los primeros implementos, pasadas del proyecto por las etapas de desarrollo, luego cuando el proyecto valla madurando se incrementa el numero de personal. Esto también sirve para descartar proyectos si no fuera útil su desarrollo.    &lt;br /&gt;También igual que en personal se puede ahorrar en recursos tecnológicos como hardware o software base, haciendo las primeras pasadas planificadas sin ese elemento y luego incluirlo en las etapas finales del desarrollo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2205922883356091974?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2205922883356091974/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2205922883356091974' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2205922883356091974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2205922883356091974'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/procesos-evolutivos-de-software-modelo.html' title='Procesos Evolutivos de Software - Modelo Incremental'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-8173790475325226017</id><published>2009-04-02T21:54:00.004-03:00</published><updated>2009-04-05T20:00:04.107-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Desarrollo de Software: Modelo de Construcción de Prototipos</title><content type='html'>&lt;p&gt;Este modelo funciona cuando alguna de las partes intervinientes en desarrollo(clientes, desarrolladores, equipo) no están totalmente seguros de los requisitos del software, dicho de otro modo se sabe que hay que hacer un desarrollo pero también se sabe que algunos aspectos del comportamiento del software recién serán develados durante una etapa inicial de prueba   &lt;br /&gt;Entonces este modelo plantea la recolección de requisitos y el diseño y codificación de un software de prueba, maqueta o prototipo. En el transcurso de este desarrollo se irán planteando las posibilidades y las incógnitas de ciertos aspectos hasta entonces desconocidos para el cliente o para el desarrollador, también se puede utilizar para anticiparse a una nueva tecnología de hardware aun no disponible. &lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;Lo ideal es que este desarrollo sirva para reconocer los requisitos totales del software. Se utiliza este modelo como una forma de reconocer a fondo lo necesario para que el software sea exitoso, y en base a todo eso diseñar una nueva versión estable y final con las modificaciones necesarias, un rediseño de la maqueta en el cual se sabrán reconocer las fallas y las mejoras.&lt;/p&gt;  &lt;br /&gt;  &lt;p&gt;Posibles inconvenientes a la hora de implementar este modelo:   &lt;br /&gt;El cliente y el desarrollador no llegan a una plena comunicación en cuales son las etapas de este modelo, en consecuencia a veces el cliente confunde las versiones maqueta con las finales, sugiriendo cambios en vez de un desarrollo nuevo. El proceso se hace lento.    &lt;br /&gt;El desarrollador hace uso de tecnologías adecuadas para que la maqueta funcione rápido, pero luego olvida que esas tecnologías no son adecuadas para el funcionamiento de la versión final. Ejemplo: Se utiliza un lenguaje de programación por que es conocido, pero para la versión final tal vez no sea el adecuado y en consecuencia se creen problemas de velocidad o de mantenimiento.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-8173790475325226017?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/8173790475325226017/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=8173790475325226017' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8173790475325226017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/8173790475325226017'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/desarrollo-de-software-modelo-de.html' title='Desarrollo de Software: Modelo de Construcción de Prototipos'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2831974578765540298</id><published>2009-04-02T18:54:00.004-03:00</published><updated>2009-04-05T20:00:16.944-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Sistemas'/><title type='text'>Modelo de Desarrollo de Software Lineal</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_QPVnXEzDdCg/SdUz7O98hnI/AAAAAAAAAvc/v1cf2Dyrm6w/s1600-h/image%5B2%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="84" alt="image" src="http://lh3.ggpht.com/_QPVnXEzDdCg/SdUz-AYhLAI/AAAAAAAAAvg/UBNYk-fR55U/image_thumb.png?imgmax=800" width="354" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;u&gt;Ingeniería y modelado de Sistemas/Información:&lt;/u&gt;    &lt;br /&gt;Se seleccionan los requisitos del entorno en el que estará inmerso el software. Se eligen de ellos los que estarán relacionados directamente con el software: hardware, operarios del software, datos, etc.    &lt;br /&gt;Estos requisitos se recogen a dos niveles: La ingeniería y el análisis de sistema, que son los requisitos que están en el nivel del software ya con una parte de diseño. La ingeniería de información, que son los requisitos emparentados con la empresa y su estrategia.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Análisis de los requisitos del software:&lt;/u&gt;    &lt;br /&gt;El proceso de recolección de requisitos se centra en el software para empezar a comprender el diseño requerido por la ingeniería de información. En esta etapa el cliente puede repasar las conclusiones y detectar algún error de criterio.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Diseño:     &lt;br /&gt;&lt;/u&gt;Se procede a diseñar el software, son muchos procesos internos que se enmarcan en estas 4 tareas:    &lt;br /&gt;Estructura de datos: la que sea mas conveniente para los datos a manejar.    &lt;br /&gt;Arquitectura del Software: Rasgos estructurales del software.    &lt;br /&gt;Representaciones de la Interfaz: Forma que tendrá el software de presentarse a los operadores.    &lt;br /&gt;Detalle Procedimental. Algoritmos que rellenaran la estructura.    &lt;br /&gt;Esta etapa provee una visión del software y su utilidad antes de ser desarrollado completamente.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Generación de Código:     &lt;br /&gt;&lt;/u&gt;Se traduce el diseño en un leguaje de programación y si el diseño es exhaustivo en detalles y correcto la traducción es mecánica, encontrándose rápidamente las equivalencias entre los diseños y los códigos.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Pruebas:     &lt;br /&gt;&lt;/u&gt;Se prueba el software para determinar que todos los algoritmos y la interfaz funcione, además se estudia que el resultado general satisfaga los requisitos de la ingeniería de información.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Mantenimiento:     &lt;br /&gt;&lt;/u&gt;Se producen cambios en el software ya sea por errores encontrados en esta etapa o por cambios en el entorno a los que el software debe adaptarse(entre los que se incluyen cambios de hardware o de la empresa o del mercado en el que esta inmersa la empresa).    &lt;br /&gt;    &lt;br /&gt;&lt;u&gt;Criticas:&lt;/u&gt;    &lt;br /&gt;Los procesos reales de desarrollo no siguen al pie de la letra el orden establecido por el modelo entonces esto crea confusión entre los desarrolladores.    &lt;br /&gt;Los requisitos del software no siempre afloran en las dos primeras etapas entonces puede ocurrir que un aspecto importante se pase por alto en el diseño y la codificación.    &lt;br /&gt;El cliente no siempre puede esperar hasta que alguna versión del software este lista lo que será recién luego de traducción a un lenguaje de programación.    &lt;br /&gt;Se producen estados de bloqueo en algunas etapas en la mayoría de los casos reales. Con lo cual las etapas siguientes del modelo quedan estancadas sin tener que hacer en los tiempos que se habían establecido para trabajar, esto podría producir que otras etapas tengan que acelerar el tiempo de trabajo(cometiendo posibles errores) para entregar el producto en los plazos establecidos.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2831974578765540298?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2831974578765540298/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2831974578765540298' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2831974578765540298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2831974578765540298'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/modelo-de-desarrollo-de-software-lineal.html' title='Modelo de Desarrollo de Software Lineal'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QPVnXEzDdCg/SdUz-AYhLAI/AAAAAAAAAvg/UBNYk-fR55U/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-6541851325918809450</id><published>2009-04-02T13:45:00.009-03:00</published><updated>2009-04-05T20:00:21.884-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='dominios'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Cambios en la Pagina Principal de Google Argentina</title><content type='html'>&lt;p&gt;Desde hace unos días que encuentro un poco molesta la nueva herramienta que ofrece google en el cuadro de búsqueda de Google Argentina, la nueva herramienta es una desplegable que muestra las búsquedas relacionadas con lo que estamos escribiendo, tal como la que tiene el buscador interno de Youtube o el buscador Yahoo, tambien estaba en Google en Ingles.    &lt;br /&gt;Para mi por ahora me resulto molesta por que tenia casi 1 año de palabras escritas por mi en ese campo de formulario, ósea que lo usaba como una especie de ayuda memoria, en vez de revisar un historial inexistente de 1 año de navegación por internet prefería visitar las paginas de búsqueda que ya había hecho.     &lt;br /&gt;Sin embargo tambien le veo algo bueno desde el punto de vista de un desarrollador, serán esas frases sugeridas las búsquedas mas habituales de Google?? lo averiguaré…     &lt;br /&gt;&lt;/p&gt;  &lt;h6&gt;”Es muy divertido, al menos para nuestro gusto, poder ver las búsquedas de otros mientras confeccionamos la nuestra”&lt;/h6&gt; &lt;a title="http://usargoogle.com/google-search/2007/07/04/google-suggest-busqueda-google-potenciada-millones-usuarios/" href="http://usargoogle.com/google-search/2007/07/04/google-suggest-busqueda-google-potenciada-millones-usuarios/" target="_blank"&gt;http://usargoogle.com/google-search/2007/07/04/google-suggest-busqueda-google-potenciada-millones-usuarios/&lt;/a&gt;  &lt;br /&gt;Por lo que se ve la noticia es vieja pero ahora la noticia seria, Google Argentina lo trae por defecto, para quitar esa alternativa lo que hay que hacer es desactivar la opción con el pequeño cerrar azul que esta al final de los resultados propuestos.  &lt;br /&gt;En base a lo que leí por allí, parece que las búsquedas sugeridas por Google son las mas habituales relacionadas con el termino, supongo que en algún momento me pondré a analizar esos resultados en base a las posibilidades que tienen algunas paginas de mi autoría en llegar a tener alguna top en los resultados.  &lt;br /&gt;Por ahora les dejo dos imágenes de ejemplo, la primera son las sugerencia relacionadas con la búsqueda de “google”.  &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_QPVnXEzDdCg/SdTrgddWxlI/AAAAAAAAAvM/2AGGz8T_aDA/s1600-h/google2%5B4%5D.gif"&gt;&lt;img title="google2" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="371" alt="google2" src="http://lh5.ggpht.com/_QPVnXEzDdCg/SdTrjVwTDbI/AAAAAAAAAvQ/tlcXpEjB3KM/google2_thumb%5B2%5D.gif?imgmax=800" width="400" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;Y la segunda, mucho mas modesta, es la búsqueda relacionada con blogterrier:  &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SdTrlhwyvBI/AAAAAAAAAvU/15POrrIc5Nc/s1600-h/google1%5B4%5D.gif"&gt;&lt;img title="google1" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="282" alt="google1" src="http://lh6.ggpht.com/_QPVnXEzDdCg/SdTroXhAAaI/AAAAAAAAAvY/3Yu3uXk7O4I/google1_thumb%5B2%5D.gif?imgmax=800" width="400" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;Esta herramienta es una mas en ese fenómeno típico de cualquier navegante, por ejemplo ese caso de entrar a youtube a ver un video y terminar viendo 15 y el ultimo de una temática totalmente distinta al primero, a quién no le sucede?  &lt;br /&gt;Habrá que empezar a ver si esa herramienta sirve para algo, de momento se me ocurren varias cosas:  &lt;br /&gt;Google con estas búsquedas sugeridas seguramente disminuirá el total de las búsquedas con distintas frases o palabras con lo cual muchas paginas que estén en el top 10 de las búsquedas populares ganaran visitas mientras que otras que no se encuentren en la sugeridas perderán. Eso no es del todo malo, muchos casos de errores de tipeo o de pronunciación en ingles se solucionaran cuando el usuario empiece su tipeo.  &lt;br /&gt;Es una forma sencilla de analizar que posibilidades tiene un titulo de ser competitivo desde el punto de vista SEO, si por ejemplo queremos hacer una web relacionada con trabajo solo tendremos que poner la palabra “trabajo” y ver cuales son las búsquedas habituales para saber en que keys competir y en cuales no, tambien nos servirá para saber que tan difícil es competir en esas key por que nos muestra el total de resultados sin tener que apretar buscar.  &lt;br /&gt;Por ahora no tengo mas que decir.  &lt;br /&gt;Saludos! Blogterrier&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-6541851325918809450?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/6541851325918809450/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=6541851325918809450' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/6541851325918809450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/6541851325918809450'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/04/cambios-en-la-pagina-principal-de.html' title='Cambios en la Pagina Principal de Google Argentina'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/SdTrjVwTDbI/AAAAAAAAAvQ/tlcXpEjB3KM/s72-c/google2_thumb%5B2%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3053359080221308961</id><published>2009-03-31T23:43:00.008-03:00</published><updated>2009-04-05T20:00:31.397-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><title type='text'>Empezando Aplicaciones Visuales en Eclipse I</title><content type='html'>&lt;p&gt;Estoy empezando a cursar una materia donde trabajamos con Java y Eclipse(Easy Eclipse) una de las unidades esta relacionada con la programación orientada a eventos, si bien yo se manejar bastante bien los desarrollos visuales desde cero todo con código esta unidad nos da la posibilidad de usar el editor visual de Eclipse, por eso en esta entrada les voy a mostrar como empezar a crear la parte visual aunque todavía no voy a entrar en la parte código por que no lo tengo muy claro.   &lt;br /&gt;Antes de seguir les recomiendo esto:    &lt;br /&gt;&lt;a href="http://blogterrier.blogspot.com/2009/03/ejemplo-hola-mundo-en-java-visual.html" target="_blank"&gt;Un “Hola Mundo” en java Visual explicado&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;El programa es Eclipse, la versión que viene con todos los plugins para desarrollar aplicaciones visuales es el Easy Eclipse.    &lt;br /&gt;&lt;a href="http://blogterrier.blogspot.com/2009/03/descargar-easy-eclipse-java.html" target="_blank"&gt;Descargar Easy Eclipse&lt;/a&gt; Y el JDK se descarga de &lt;a href="http://java.sun.com/" target="_blank"&gt;aquí&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;Bueno una vez que el Eclipse esta listo y abierto se puede crear un nuevo proyecto, desde File &amp;gt; New &amp;gt; Proyect:    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/SdLUM0RZpgI/AAAAAAAAAuU/PpatuawMKzE/s1600-h/show1%5B6%5D.gif"&gt;&lt;img title="show1" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="204" alt="show1" src="http://lh5.ggpht.com/_QPVnXEzDdCg/SdLUPBWWLEI/AAAAAAAAAuY/CyUwTbxjjYg/show1_thumb%5B4%5D.gif?imgmax=800" width="404" border="0" /&gt;&lt;/a&gt;Luego en la primer pantalla seleccionan “next &amp;gt;” y en la que sigue le ponen nombre al proyecto:    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/SdLUQheiNrI/AAAAAAAAAuc/T_cx70wqFso/s1600-h/show2%5B4%5D.gif"&gt;&lt;img title="show2" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="204" alt="show2" src="http://lh6.ggpht.com/_QPVnXEzDdCg/SdLUSxIcOQI/AAAAAAAAAug/OzCxqiRzGG8/show2_thumb%5B2%5D.gif?imgmax=800" width="404" border="0" /&gt;&lt;/a&gt; Y finalmente Finish.    &lt;br /&gt;Para empezar a “dibujar” Botones Textos y mas componentes por medio de la ayuda visual de Eclipse debemos crear una visual class, le hacemos clic derecho sobre el nombre del proyecto:    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SdLUWRlFF7I/AAAAAAAAAuk/Hyt1JXURw_0/s1600-h/show3%5B4%5D.gif"&gt;&lt;img title="show3" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="409" alt="show3" src="http://lh3.ggpht.com/_QPVnXEzDdCg/SdLUaIwgdrI/AAAAAAAAAuo/Hb7eiV6HycA/show3_thumb%5B2%5D.gif?imgmax=800" width="404" border="0" /&gt;&lt;/a&gt; En el dialogo siguiente tenemos que elegir un nombre para esta Visual Class y tambien elegir extender de Frame(como se ve en la próxima imagen en la parte izquierda) mientras que en mi ejemplo el nombre de la clase es Ventana1:    &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/SdLUddiTfXI/AAAAAAAAAus/FC3IYorooak/s1600-h/show4%5B4%5D.gif"&gt;&lt;img title="show4" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="254" alt="show4" src="http://lh3.ggpht.com/_QPVnXEzDdCg/SdLUhPpUX6I/AAAAAAAAAuw/iqLnmSru06g/show4_thumb%5B2%5D.gif?imgmax=800" width="404" border="0" /&gt;&lt;/a&gt;Luego Finish.    &lt;br /&gt;El proximo paso es esperar que Eclipse despliegue los distintos paneles y ventanas que nos ayudaran en el diseño, que es lo que tenemos mas o menos: a la izquierda el navegador por los proyectos, en el medio habrá 3 ventanas la de mas arriba es el editor visual, en el medio veremos el código fuente de esa clase y en la parte inferior las propiedades de dicho componente. Finalmente a la derecha tendremos el panel con el resto de los componentes.    &lt;br /&gt;El panel inferior como dije muestra las propiedades del componente seleccionado, la primera vez solo tendremos Ventana1 que es un Panel y entonces serán las propiedades de ese frame las que veremos abajo:    &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_QPVnXEzDdCg/SdLUk0bUrMI/AAAAAAAAAu0/mLBqay0C2Vg/s1600-h/show5%5B10%5D.gif"&gt;&lt;img title="show5" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="694" alt="show5" src="http://lh3.ggpht.com/_QPVnXEzDdCg/SdLUo4S5QDI/AAAAAAAAAu4/baamku_V-2c/show5_thumb%5B4%5D.gif?imgmax=800" width="359" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;En este caso acabo de cambiar el title que es un atributo del frame por Blogterrier Ventana1, como ven yo lo hice desde el administrador de propiedades sin embargo tambien se ve claro el setTitle() aplicado a this.    &lt;br /&gt;Lo que sigue por hoy es añadir algún componente como por ejemplo un botón, y mas que nada jugar con el diseño visual.    &lt;br /&gt;Me olvidaba! antes de agregar un componente hagan clic derecho sobre el Panel en edición visual y seleccionen Set Layout &amp;gt; null, esto es para deshabilitar el acomodo automático y entonces poder poner el componente seleccionado donde se nos de la gana.    &lt;br /&gt;En este caso seleccione un JButton del panel derecho y lo dibuje sobre el panel, luego le cambie el texto:    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SdLUsE7m1II/AAAAAAAAAu8/z1m4q2gCHmw/s1600-h/show6%5B4%5D.gif"&gt;&lt;img title="show6" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="264" alt="show6" src="http://lh5.ggpht.com/_QPVnXEzDdCg/SdLUv57nzQI/AAAAAAAAAvA/XHcQyI17Z2M/show6_thumb%5B2%5D.gif?imgmax=800" width="359" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;Se pueden agregar de momento todos los tipos de componentes que deseemos ya que esto es una prueba visual, mas adelante explicare como empezar a manejar los eventos desde el código(cuando lo sepa bien) sin embargo podemos ver cual es el resultado final de esto que hicimos y es seleccionando &lt;strong&gt;Run &amp;gt; Run As &amp;gt; Java Bean:     &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_QPVnXEzDdCg/SdLUzdqM2SI/AAAAAAAAAvE/edH3QQ9jero/s1600-h/show7%5B4%5D.gif"&gt;&lt;img title="show7" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="264" alt="show7" src="http://lh4.ggpht.com/_QPVnXEzDdCg/SdLU2i1nG8I/AAAAAAAAAvI/FbvBpe6y398/show7_thumb%5B2%5D.gif?imgmax=800" width="359" border="0" /&gt;&lt;/a&gt;       &lt;br /&gt;Voy a tratar de enlazar los próximos capítulos de este tema directamente con este post. Les voy a poner números!!&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3053359080221308961?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3053359080221308961/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3053359080221308961' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3053359080221308961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3053359080221308961'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/empezando-aplicaciones-visuales-en.html' title='Empezando Aplicaciones Visuales en Eclipse I'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/SdLUPBWWLEI/AAAAAAAAAuY/CyUwTbxjjYg/s72-c/show1_thumb%5B4%5D.gif?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3039867148916361733</id><published>2009-03-30T20:08:00.011-03:00</published><updated>2009-04-05T02:23:13.331-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><title type='text'>ArrayList – Java – Desarrollo Completo</title><content type='html'>&lt;p&gt;Para empezar(aunque si te interesa saber sobre los ArrayList ya lo debes saber) un repaso de que es un array en Java(valido para cualquier lenguaje):    &lt;br /&gt;Los array son un espacio de memoria consecutivo que se puede acceder por medio de una variable única y con distintos índices.     &lt;br /&gt;Las ventajas de los arrays es que son muy eficientes y veloces ya que trabajan con una memoria que esta de algún modo protegida y al estar en forma consecutiva es mas rápida.     &lt;br /&gt;La desventaja de un Array es que es estático, para eso solo hay que acordarse de la declaración.     &lt;br /&gt;En Java los arrays pueden ser de tipos de datos primitivos o de objetos(vector es un sinónimo habitual de array en programación):&lt;/p&gt;  &lt;h5&gt;int[] vector = new int[10]; //array de primitivos enteros    &lt;br /&gt;Persona []vector = new Persona[10]; //array de objetos Persona &lt;/h5&gt;  &lt;p&gt;La cantidad de memoria guardada para hacer uso es de 10 enteros o de 10 objetos persona, con lo cual si nuestro programa trabaja con un numero indefinido (n) de objetos o números nos quedan solo la opción de elegir un n muy grande por la dudas, pero así reservamos n espacios de memoria, %$&amp;amp;%$//##.    &lt;br /&gt;    &lt;br /&gt;Bueno aquí entran en juego las estructuras de datos dinámicas, las listas enlazadas que se ven en c++ y en el mismo Java, los arboles, las colas, las pilas, etc, etc.     &lt;br /&gt;En java además de crear nuestras propias estructuras dinámicas de datos podemos hacer uso de algunas que vienen en el paquete de clases util (import java.util.*) Estas clases son las denominadas Colecciones de java.     &lt;br /&gt;    &lt;br /&gt;Las Colecciones de Java son un conjunto de clases, interfaces y algoritmos para manejar estructuras de datos.     &lt;br /&gt;Las ventajas de utilizar este tipo de estructuras:     &lt;br /&gt;Se redimensionan automáticamente en algunos casos las puede definirse un patrón de redimensionamiento así como una cantidad inicial de objetos, pero en general nos olvidamos de ese problema.&amp;#160; &lt;br /&gt;Las operaciones mas importantes para el manejo de estructuras de datos ya se encuentran listas para funcionar, con lo cual solo se deben declarar instancias de ellas o extender de alguna.     &lt;br /&gt;Almacenan objetos de manera natural, y muy comprensible ya que se tratan de clases como las que nosotros mismos podríamos programar.     &lt;br /&gt;Una desventaja de cara a la programación orientada a objetos es la perdida de la identidad del objeto guardado(se pueden guardar muchos objetos de distinto tipo) lo mas común es que a la hora de preguntar que clase de objeto es se utilice la palabra reservada instanceof.     &lt;br /&gt;    &lt;br /&gt;Estructura de las Collection:     &lt;br /&gt;&lt;strong&gt;Collection&lt;/strong&gt; –&amp;gt; &lt;strong&gt;List &lt;/strong&gt;y Set     &lt;br /&gt;&lt;strong&gt;List&lt;/strong&gt; –&amp;gt; Vector, &lt;strong&gt;ArrayList&lt;/strong&gt;, LinkedList     &lt;br /&gt;Set –&amp;gt; HashSet, ArraySet, TreeSet     &lt;br /&gt;y muchas clases mas…     &lt;br /&gt;    &lt;br /&gt;Estas clases poseen una serie de funciones básicas para el manejo entre las que se encuentran:     &lt;br /&gt;add(Object); //Agregar objeto     &lt;br /&gt;addAll(Collection); //Agregar otra collection, concatena collections     &lt;br /&gt;clear(); //Limpia una collection     &lt;br /&gt;contains(Object); //true false si esta esa referencia     &lt;br /&gt;iterator(); //Asocia un iterador a la collection     &lt;br /&gt;remove(Object); //borra el objeto pasado por parámetro     &lt;br /&gt;size(); //Devuelve la longitud de la collection&amp;#160; &lt;br /&gt;    &lt;br /&gt;Por otro lado tenemos las interfaces adentro del mismo paquete java.util.* estas nos sirven para manejar de manera aun mas sencilla una colección, Las interfaces son una forma de comunicación entre una estructura de datos y el programador.     &lt;br /&gt;Puntualmente vamos a ver la interfaz Iterator, esta posee 2 funciones básicas además del constructor que nos sirven para acceder totalmente a una colección:     &lt;br /&gt;hasNext(); //devuelve true si hay un elemento adelante     &lt;br /&gt;next(); //retorna el elemento actual y posiciona el iterador al proximo elemento.     &lt;br /&gt;Nota: la funcion next() siempre debe llamarse en caso de que hasNext() halla devuelto un valor verdadero!     &lt;br /&gt;    &lt;br /&gt;Bueno ahora al código directamente:     &lt;br /&gt;Antes decir que no voy a declarar una clase completa pero se pueden dar cuenta de que esto se puede implementar de varias formas, extendiendo una clase de ArrayList, usando directamente como atributo de una clase, como una variable local en una funcion, como lo deseen.     &lt;br /&gt;Me arrepentí, :&amp;gt; lo voy a implementar en una clase pero sin heredar directamente sino utilizando un atributo ArrayList:&lt;/p&gt;  &lt;h5&gt;import java.util.*;&lt;/h5&gt;  &lt;p&gt;No olvidar!&lt;/p&gt;  &lt;h5&gt;public class usandoArrayList    &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; private ArrayList mial;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public usandoArrayList()     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mial = new ArrayList();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public void add(ObjectX x)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mial.add(x);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public ObjectX busquedaPorId(int id)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Iterator ite= mial.iterator();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while(ite.hasNext())     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ObjectX x = (Envio)ite.next();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if(x.getId()==id)     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return x;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return null;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/h5&gt;  &lt;p&gt;Me parece que es fácil pero voy a explicar un poco, para empezar la clase se llama usandoArrayList y tiene un atributo tipo ArrayList llamado mial.   &lt;br /&gt;Después viene el constructor, muy igual a todos.    &lt;br /&gt;Luego add(ObjectX x); se trata del agregador de objetos, si ustedes quieren utilizar la clase con un solo tipo de objetos o con una familia de objetos(escriben el nombre de la clase mayor) adentro de la funcion pueden ver que solo se pasa el objeto al objeto mial y ya esta hecho.    &lt;br /&gt;El que sigue es el mas importante:    &lt;br /&gt;Se trata de buscar un determinado objeto, para eso vamos a hacer de cuenta que se trata de alguna cosa que tiene un dato Id y que este es entero.     &lt;br /&gt;La funcion recibe un entero id y devuelve un ObjectX.&amp;#160; &lt;br /&gt;Adentro creamos un objeto iterator directamente con la funcion iterator de ArrayList, o sea cuando llamamos a la funcion iterator con un objeto ArrayList nos devuelve un Iterator con mayúscula.     &lt;br /&gt;Al declarar el ite este se posiciona sobre el primer elemento de mial, y hasNext() nos dice si hay elementos en la posición actual, si mial esta vacía el while no se ejecuta y nos devuelve un inmediato null.    &lt;br /&gt;Pero si tenemos algo adentro de mial a medida que llamemos a next(), ObjectX x referenciara a los distintos valores de mial.    &lt;br /&gt;Si llegamos a encontrar la id devuelve el objeto y si no devuelve null.    &lt;br /&gt;    &lt;br /&gt;Para los casos de familias de clases es conveniente castear, el objeto que nos devuelve next(), con la clase de mayor jerarquía, luego de castear el objeto podemos preguntar si es instancia de alguna clase heredera con instanceof de esta manera:    &lt;br /&gt;    &lt;br /&gt;if(object instanceof NombreClase)    &lt;br /&gt;{ //hacer }    &lt;br /&gt;    &lt;br /&gt;Esto se hace solo si object es un objeto del tipo NombreClase.    &lt;br /&gt;    &lt;br /&gt;Bueno, que lindo texto que me arme, jeje.    &lt;br /&gt;Saludos!! Blogterrier.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3039867148916361733?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3039867148916361733/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3039867148916361733' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3039867148916361733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3039867148916361733'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/arraylist-java-desarrollo-completo.html' title='ArrayList – Java – Desarrollo Completo'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-4980854681596334000</id><published>2009-03-29T05:25:00.029-03:00</published><updated>2009-04-05T02:23:44.410-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='BlueJ'/><title type='text'>Descargar BlueJ + JDK = Java</title><content type='html'>&lt;p&gt;El BlueJ es un IDE para Java que no tiene muchas cosas y no permite la edición visual de componentes, pero si es muy fácil de usar y es especial para aprender a programar en Java, claro que haciendo las cosas con código el BlueJ es muy potente.   &lt;br /&gt;Eso si, si ya estuviste en un entorno como NetBeans o Eclipse extrañaras la ayuda visual y muchos accesos directos.    &lt;br /&gt;Para instalar BlueJ primero deben bajar el ultimo JDK de la pagina de Sun &lt;a title="http://java.sun.com/" href="http://java.sun.com/" target="_blank"&gt;http://java.sun.com/&lt;/a&gt; luego de haber instalado el JDK se van a &lt;a href="http://www.bluej.org/" target="_blank"&gt;http://www.bluej.org/&lt;/a&gt; o aun mas rápido, podrían leer un poco , &lt;a href="http://www.bluej.org/download/download.html" target="_blank"&gt;http://www.bluej.org/download/download.html&lt;/a&gt;, que mas? que mas?    &lt;br /&gt;-Nada, enjoy!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-4980854681596334000?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/4980854681596334000/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=4980854681596334000' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4980854681596334000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4980854681596334000'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/descargar-bluej-jdk-java.html' title='Descargar BlueJ + JDK = Java'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2837895035080616160</id><published>2009-03-28T19:21:00.040-03:00</published><updated>2009-04-05T02:13:37.932-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Programacion'/><title type='text'>Programación Concurrente</title><content type='html'>&lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;    &lt;br /&gt;En una computadora secuencial sólo se ejecuta un programa en un momento determinado. La computadora únicamente tiene un CPU, o elemento de procesamiento (PE, Processing Element) que ejecuta un programa a la vez, y es a éste al que se le llama proceso, el cual consta de rutinas, datos, pila, código y estructuras del sistema operativo. Cuando la Máquina Virtual de Java interpreta su programa,    &lt;br /&gt;ejecuta un proceso.    &lt;br /&gt;Una computadora secuencial puede realizar multiprogramación al reasignar rápidamente el PE entre diversos procesos, dando el aspecto de paralelismo, al ejecutarse concurrentemente. Aunque el verdadero paralelismo se logra en un computadora con varios PEs    &lt;br /&gt;Dentro de un proceso, el control suele seguir a un sólo hilo de ejecución, que por lo general empieza con el primer elemento de main, recorriendo una secuencia de instrucciones y terminando cuando se regresa al main. Éste es el modelo familiar de programación de un solo hilo.    &lt;br /&gt;Java también soporta varios hilos de ejecución o multihilos. Un proceso de Java puede crear y manejar, dentro de sí mismo, varias secuencias de ejecución concurrentes. Cada una de estas secuencias es un hilo independiente y todos ellos comparten tanto el espacio de dirección como los recursos del sistema operativo; cada hilo puede accesar a todos los datos y procedimientos del proceso, pero además tiene su propio contador de programa y su pila de llamado a    &lt;br /&gt;procedimientos. Como entidad de ejecución independiente, un hilo es mucho más fácil de crear que un nuevo proceso. Por ello a un hilo se le conoce a veces como proceso ligero. En lo que sigue hablaremos de proceso ligero o hilo indistintamente.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Ventajas del procesamiento multihilos     &lt;br /&gt;&lt;/strong&gt;Los programas de un solo hilo son la herramienta ideal para procesamientos con mínima interacción con el usuario. Por ejemplo, un proceso de actualización de un archivo de personal con altas, bajas, modificaciones, que solo pide al operador de consola algún parámetro de control o una acción por única vez(“Monte cinta Catastro Empleados mes anterior en Unidad X003”) mientras que los    &lt;br /&gt;procesamientos interactivos, controlados por eventos, suelen incluir varias partes activas que naturalmente se ejecutan de manera independiente e interactúan o cooperan de alguna manera para alcanzar las metas. Por ejemplo, veremos un programa de animación, una bola que rebota en los márgenes de su    &lt;br /&gt;frame, está organizado en clases independientes para controles de eventos, generación de gráficos y movimiento, conservación de resultados y estadísticas, etc. Un juego de video con un solo hilo de ejecución sería enormemente complicado si no es que imposible. Un programa con multiprocesamiento puede modelar cada una de estas partes con un hilo diferente.    &lt;br /&gt;Es más, la generación de gráficos y el procesamiento del control del usuario ocurren simultáneamente. Resulta difícil un control con una buena respuesta a esta concurrencia en un programa de un solo hilo.    &lt;br /&gt;También puede utilizar hilos para desacoplar actividades con velocidades de procesamiento muy diferentes.    &lt;br /&gt;Desafíos en programación multihilos Básicamente, un programa de procesamiento multihilos tiene que coordinar varias actividades independientes y evitar la posibilidad de que se encimen entre sí.    &lt;br /&gt;Estos programas incluyen cuatro aspectos nuevos e importantes que no se encuentran presentes en los programas comunes de un solo hilo:    &lt;br /&gt; *exclusión mutua,    &lt;br /&gt; *sincronización,    &lt;br /&gt; *calendarización    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; *punto muerto.    &lt;br /&gt;Una buena comprensión de estos conceptos le ayudará a escribir programas correctos de varios hilos.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Exclusión mutua     &lt;br /&gt;&lt;/strong&gt;Los hilos de un programa suelen necesitar ayuda para lograr una cierta tarea.    &lt;br /&gt;Por lo general, esta cooperación implica el acceso de diferentes hilos a las mismas construcciones del programa. Cuando varios hilos comparten un recurso común (campo, arreglo u otro objeto), puede darse el acceso simultáneo de más de un hilo. Lo que puede dar como consecuencia resultados erróneos e impredecibles.    &lt;br /&gt;Por ejemplo, si un hilo lee un campo flag y un segundo hilo le asigna un valor, entonces el valor leído puede ser el antiguo o el nuevo. Peor aún, si los dos hilos asignan valores a flag simultáneamente, uno de los dos se pierde. Debido a que nunca pueden conocerse las velocidades relativas de los hilos concurrentes, el resultado de programas con procesamiento multihilos puede depender de cuál    &lt;br /&gt;hilo se obtiene primero. Esta condición de carrera debe evitarse si su programa con varios hilos habrá de funcionar siempre correctamente.    &lt;br /&gt;Para prevenir estas situaciones, es necesario organizar un acceso mutuamente exclusivo a cantidades compartidas. Programando correctamente, sólo un hilo puede accesar al mismo tiempo la cantidad protegida por exclusión mutua (mutex).    &lt;br /&gt;Considere un equipo de programadores que trabajan en un proyecto, que consta de muchos archivos, paquetes de clases. Si dos de ellos trabajan en el mismo archivo en diferentes estaciones simultáneamente sucederá un desastre. (Para nosotros, programadores Java, el acceso debe ser exclusivo a nivel clase,    &lt;br /&gt;mientras que podemos compartir a nivel paquete). Entonces, la exclusión mutua debe organizarse a nivel .class, responsabilidad del entorno de programación. Y, por supuesto, para que ese bloqueo tenga lugar nadie debe estar editando/compilando esa clase en ese momento. Obtenido el bloqueo, nadie puede obtener acceso a él antes de desbloquearlo.    &lt;br /&gt;Con la POO el recurso compartido y las operaciones que contiene a menudo pueden encapsularse en un objeto. Todas las operaciones críticas se programarán bloqueando/desbloqueando el objeto anfitrión para obligar la exclusión mutua. El intento de acceso a un objeto ya bloqueado por el acceso desde un hilo hilo-1 causará que todos los demás hilos hilo-2, hilo-3, ,hilo-n con pretensión de actualizar el mismo objeto deban aguardar que hilo-1 lo libere, desbloquee.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Sincronización     &lt;br /&gt;&lt;/strong&gt;La exclusión mutua evita que los procesos corridos en hilos se superpongan.    &lt;br /&gt;Esto es muy bueno, pero aún se necesita de un medio para que ellos se comuniquen y coordinen sus acciones, trabajen como un equipo. Los hilos procesan su código a velocidades independientes, impredecibles. Nunca se puede armar una programación en base al tiempo total que el PE necesitará para correr la parte de la aplicación en un hilo específico. Ni siquiera sabemos el orden en que la    &lt;br /&gt;CPU le asignará PEs a varios hilos que deben trabajar simultáneamente. Por tanto, es necesario coordinar el orden en que se realizan alguna tareas. Si una tarea no debe empezar antes de que otras tareas terminen, es imprescindible garantizar que esto así ocurra.    &lt;br /&gt;Por ejemplo, imagine que cada hilo es un trabajador en una fábrica, y están elaborando un producto que requiere del trabajo de todos, pero cada uno puede hacer su parte cuando el inmediato anterior concluyó la suya. (Seguro ya escuchó algo de producción en serie …). Entonces un hilo debe esperar hasta que otro haya terminado la parte que le corresponde elaborar. A tal coordinación, dependiente del tiempo de actividades concurrentes se le llama sincronización, y    &lt;br /&gt;requiere del retardo de un hilo hasta que ciertas condiciones se cumplan.    &lt;br /&gt;Se dice que un hilo esta bloqueado si la ejecución de su parte activa está demorada, se retarda hasta un momento posterior. Hay varias maneras de hacerlo.    &lt;br /&gt;Por ejemplo, la programación del hilo puede contener un ciclo que verifica permanentemente una cierta condición. Mientras la condición se mantenga verdadera (Así en Java, los ciclos se mantienen vivos, ejecutando, mientras la condición de control es verdadera). Cuando la evaluación de la condición da resultado falso, salimos del ciclo y entramos en la “parte activa” del hilo.    &lt;br /&gt;Un pequeño ejemplo en código, un cliente necesita un par de zapatos.    &lt;br /&gt;    &lt;br /&gt;while (noHayZapato) {sleep(t);} // Ciclo de espera    &lt;br /&gt;    &lt;br /&gt;donde noHayZapato es una variable compartida. A esta forma de proceder, que le podemos llamar espera ocupada, (Lo de espera ocupada es porque gastamos los milisegundos del PE durmiendo y preguntando por zapato), no es lo mejor. Java, en su plataforma 1, recomendaba suspenderlo (suspend)y luego retomarlo (resume),    &lt;br /&gt;pero en el uso de esta mecánica aparecieron problemas. La plataforma Java 2 los ha censurado. Volveremos sobre esto.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Calendarización de hilos      &lt;br /&gt;&lt;/strong&gt;Cuando un proceso requiere de varios hilos el PE disponible los ejecuta en rápida sucesión. Dependerá de la política de calendarización del sistema operativo sobre el cual corre la JVM (Java Virtual Machina) el momento en que el hilo concurrente cederá el PE y cuál hilo se ejecutará luego. Además de esto los    &lt;br /&gt;hilos de Java tienen un atributo de prioridad que afecta la calendarización, como se explicará más adelante. Ahora entremos en detalle sobre el tema de cómo depende la calendarización del sistema operativo.    &lt;br /&gt;En los sistemas operativos existen dos políticas de calendarización:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Se interrumpe el hilo sin ningún tipo de consulta; se le acabaron sus milisegundos, afuera. A esto se le suele llamar multitarea apropiativa (preemptive multitasking). Es la más adecuada. Y así trabajan los sistemas operativos UNIX/Linux, Windows NT, Windows 95/98/XP (32 bits)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Se interrumpe el hilo cuando otros desean obtener el control y el que está corriendo está de acuerdo: multitarea cooperativa (cooperative multitasking) En esta modalidad un programa mal codificado puede acaparar todos los recursos del sistema y nunca permitir que otros ejecuten.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Punto muerto     &lt;br /&gt;&lt;/strong&gt;En una situación en que varios hilos son interdependientes de muchas maneras y comparten recursos bajo exclusión mutua y subtareas bajo sincronización, existe la posibilidad de llegar a un punto muerto, el cual surge cuando los hilos están esperando eventos que nunca sucederán. Por ejemplo, el hilo A está esperando datos del hilo B antes de producir una salida para B. A su vez, B está esperando    &lt;br /&gt;recibir alguna salida de A antes de producir una salida de datos para A. Cuando se escriben programas de varios hilos, se debe tener cuidado de evitar estos problemas.    &lt;br /&gt;    &lt;br /&gt;--Extracto de Paradigmas de Programación 2008 UTN-FRC&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2837895035080616160?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2837895035080616160/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2837895035080616160' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2837895035080616160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2837895035080616160'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/programacion-concurrente.html' title='Programación Concurrente'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-4790454011366019405</id><published>2009-03-27T19:08:00.098-03:00</published><updated>2009-04-05T02:13:39.763-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dominios'/><title type='text'>Tu propio dominio en blogger-blogspot</title><content type='html'>&lt;p&gt;Hace un tiempo explique como &lt;a href="http://blogterrier.blogspot.com/2009/02/tener-tu-dominiocomar-blogspot-o.html" target="_blank"&gt;redireccionar un .com.ar hacia blogger o tambien hacia fotolog&lt;/a&gt;, o cualquier web, en ese momento estaba usando zoneedit pero la verdad que ahora encontré un servicio mucho mejor cdmon.com y ya no se trata solo de redireccionar se trata de que blogger sea prácticamente nuestro hosting, y con un sistema totalmente estable(blogspot) para manejar nuestro proyecto.&lt;br /&gt;Miren esta web: &lt;a href="http://www.trabajoingenieria.com/" target="_blank"&gt;http://www.trabajoingenieria.com/&lt;/a&gt; es un blog de blogger(si lo abren en Chrome o Firefox verán hasta el favicon de blogger, no se por que no me toman el favicon que si funciona en ie, pero lo sospecho…)&lt;br /&gt;Si es un blog de blogspot pero si se fijan todas las direcciones dentro del blog siguen siendo del dominio .com.&lt;br /&gt;Esto logre configurarlo en menos de 12 horas, registro de dominio incluido, durante la mañana registre el dominio por que me pareció prometedor y hace tiempo quería tener un blog de ese estilo.&lt;br /&gt;Me fui a la facu y cuando volví empecé a investigar los detalles, en la pestaña Configuración-&amp;gt;Publicación tenemos la posibilidad de usar nuestro propio dominio en vez de la dirección provista por blogger.&lt;br /&gt;Allí marcamos nuestro dominio, luego debemos redireccionar en nuestro proveedor de hosting el CNAME(igual que con &lt;a href="http://blogterrier.blogspot.com/2009/03/como-redireccionar-un-comar-adsense.html" target="_blank"&gt;los dominios para Adsense para dominios&lt;/a&gt;, y después les cuento algo que descubri) pero Auch! registre el dominio en solo10.com y no tengo registros CNAME, debería pagarlos? no me voy a mi cuenta de cdmon.com que es gratuita y me provee servicios DNS gratis, en DNS estáticos registro el dominio y apunto el dominio.com hacia los DNS de cdmon.com.&lt;br /&gt;Luego en cdmon.com puedo redireccionar por CNAME tanto www como el dominio sin el.&lt;br /&gt;&lt;br /&gt;La dirección CNAME a la que hay que apuntar el dominio es:&lt;br /&gt;ghs.google.com.&lt;br /&gt;&lt;br /&gt;Los DNS de cdmon.com son: &lt;br /&gt;ns1.cdmon.net  212.36.74.129&lt;br /&gt;ns2.cdmon.net  212.36.75.129&lt;br /&gt;ns3.cdmon.net  213.186.58.203&lt;br /&gt;&lt;br /&gt;Para los que tienen el servicio de CNAME solo hay que redireccionar a ghs.google.com&lt;br /&gt;&lt;br /&gt;Curiosidades:&lt;br /&gt;Antes de ponerme a escribir esto quise redirigir algún dominio .com.ar por este sistema, entonces empecé a probar con los que ya tenia en cdmon.com apuntando hacia adsense para dominios(ya saben lo lento que es el NIC.ar y si no entérense) pero me decía que todos los dominios ya estaba siendo utilizados para alojar un blog #$%&amp;amp;/???&lt;br /&gt;Pensé que seria que el mismo name pero .com estaría registrado pero no era así, me tomaba cualquier otro dominio .com.ar aunque no fuera mío.&lt;br /&gt;Conclusión estoy esperando que se actualice la info de algún dominio en Adsense o que se redireccione hacia cdmon.com otro dominio.com.ar, pero aparentemente tambien es posible trabajar totalmente con .com.ar.&lt;br /&gt;Habrá novedades!!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-4790454011366019405?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/4790454011366019405/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=4790454011366019405' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4790454011366019405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4790454011366019405'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/tu-propio-dominio-en-blogger-blogspot.html' title='Tu propio dominio en blogger-blogspot'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3878590568978195194</id><published>2009-03-27T18:41:00.072-03:00</published><updated>2009-04-05T02:13:40.927-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='BlueJ'/><title type='text'>Ejemplo Hola Mundo en Java Visual</title><content type='html'>&lt;p&gt;Esta tarde estoy particularmente aburrido así que me puse a hacer esto, es un ejemplo explicado perfecto de como se comienza a crear programas en java con el manejo de componentes Swing y eventos por awt.&lt;br /&gt;Bueno no hablo mas los dejo con el código:&lt;/p&gt;&lt;h5&gt;// Hola Mundo en Java Visual&lt;br /&gt;// &lt;a href="http://blogterrier.blogspot.com/"&gt;http://blogterrier.blogspot.com/&lt;/a&gt;&lt;br /&gt;//Para el manejo de eventos debemos&lt;br /&gt;//llamar a distintas librerias de awt&lt;br /&gt;//Esto se podria hacer con&lt;br /&gt;//import java.awt.*; pero eclipse lo dejo asi&lt;br /&gt;import java.awt.event.ActionEvent;&lt;br /&gt;import java.awt.event.ActionListener;&lt;br /&gt;import java.awt.event.WindowAdapter;&lt;br /&gt;import java.awt.event.WindowEvent;&lt;br /&gt;//Para los distintos componentes&lt;br /&gt;//llamamos a las clases que estan&lt;br /&gt;//javax.swing.*;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;public class BlogTerrier extends JFrame&lt;br /&gt;{&lt;br /&gt;//Elementos que vamos a usar:&lt;br /&gt;//un textfield y dos botones&lt;br /&gt;private JTextField jtftexto = new JTextField();&lt;br /&gt;private JButton btnhola = new JButton("Hola");&lt;br /&gt;private JButton btnmundo = new JButton("Hola Mundo");&lt;br /&gt;//Constructor de la clase,&lt;br /&gt;//recordar que es una extension de JFrame&lt;br /&gt;public BlogTerrier()&lt;br /&gt;{&lt;br /&gt;//Fuera Layout de distribucion automatica&lt;br /&gt;//BlogTerrier hereda de la clase&lt;br /&gt;//JFrame de alli podemos hacer esto&lt;br /&gt;getContentPane().setLayout(null);&lt;br /&gt;jtftexto.setBounds(10,10,150,20);&lt;br /&gt;btnhola.setBounds(10,60,150,40);&lt;br /&gt;btnmundo.setBounds(10,120,150,40);&lt;br /&gt;//Objeto EscucharBotones:&lt;br /&gt;EscucharBotones eb = new EscucharBotones();&lt;br /&gt;//Agregamos a los botones el gestor de eventos&lt;br /&gt;btnhola.addActionListener(eb);&lt;br /&gt;btnmundo.addActionListener(eb);&lt;br /&gt;//Cargamos en el JFrame los botones y el texto&lt;br /&gt;getContentPane().add(jtftexto);&lt;br /&gt;getContentPane().add(btnhola);&lt;br /&gt;getContentPane().add(btnmundo);&lt;br /&gt;//Para escuchar eventos sobre el mismo JFrame&lt;br /&gt;addWindowListener(new AplicacionWindow());&lt;br /&gt;}&lt;br /&gt;//clase para escuchar los eventos sobre botones&lt;br /&gt;//Es de lo mas raro una clase dentro de otra&lt;br /&gt;public class EscucharBotones implements ActionListener&lt;br /&gt;{&lt;br /&gt;public void actionPerformed(ActionEvent e)&lt;br /&gt;{&lt;br /&gt;if (e.getSource() == btnhola)&lt;br /&gt;{&lt;br /&gt;jtftexto.setText("Hola");&lt;br /&gt;}&lt;br /&gt;if (e.getSource() == btnmundo)&lt;br /&gt;{&lt;br /&gt;jtftexto.setText("Hola Mundo");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//Otra Clase dentro de BlogTerrier&lt;br /&gt;//Es para gestionar los eventos sobre el frame&lt;br /&gt;class AplicacionWindow extends WindowAdapter&lt;br /&gt;{&lt;br /&gt;// al cerrar la ventana se termina la aplicación&lt;br /&gt;public void windowClosing(WindowEvent e)&lt;br /&gt;{&lt;br /&gt;dispose();&lt;br /&gt;System.exit(0);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//Igual que en las aplicaciones por consolas&lt;br /&gt;//tenemos una static void main&lt;br /&gt;//Es la encargada de inciar el programa declarando una&lt;br /&gt;//instancia de la clase BlogTerrier&lt;br /&gt;//La variables deben ser de la clase y asi&lt;br /&gt;//son accesibles desde todo lo que esta entre {}&lt;br /&gt;public static void main(String args[])&lt;br /&gt;{&lt;br /&gt;BlogTerrier n= new BlogTerrier();&lt;br /&gt;n.setSize(210,200);&lt;br /&gt;n.setTitle("Hola Mundo");&lt;br /&gt;n.setVisible(true);&lt;br /&gt;}&lt;br /&gt;} &lt;/h5&gt;&lt;p&gt;Se puede cargar en cualquier entorno Java. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3878590568978195194?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3878590568978195194/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3878590568978195194' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3878590568978195194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3878590568978195194'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/ejemplo-hola-mundo-en-java-visual.html' title='Ejemplo Hola Mundo en Java Visual'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2920675348273331311</id><published>2009-03-27T11:41:00.074-03:00</published><updated>2009-04-05T02:13:42.686-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Apuntes teóricos de Componentes Java</title><content type='html'>&lt;p&gt;&lt;strong&gt;Componentes:&lt;/strong&gt;&lt;br /&gt;                  →     Atributos      →&lt;br /&gt;Objetos:     →     Métodos       →     Componentes&lt;br /&gt;                  →     Eventos        → &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Características de Componentes:&lt;/strong&gt;&lt;br /&gt;Entidad terminada y compilada.&lt;br /&gt;Enlace tardío.&lt;br /&gt;Reutilización.&lt;br /&gt;Independiente(proyecto) &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tipos de componentes:&lt;/strong&gt;&lt;br /&gt;Gráficos (GUI) ventanas, botones, etc. → Visuales&lt;br /&gt;Bases de datos... acceso a datos.&lt;br /&gt;Servicios.&lt;br /&gt;Seguridad.&lt;br /&gt;Control.&lt;br /&gt;Comunicación. &lt;/p&gt;&lt;p&gt;Típica Estructura de un package de un programa Java:&lt;br /&gt;Vista → Controlador → Modelos → Datos y Eventos &lt;/p&gt;&lt;p&gt;&lt;strong&gt;GUI:&lt;br /&gt;Componentes básicos:&lt;/strong&gt;&lt;br /&gt;Ventanas(MDI ventana principal) (MDI chile ventana interior).&lt;br /&gt;Diálogos dependientes de una ventana mayor, modales(controlados por protocolo de programador) no modales(dejan interactuar mas alla del dialogo).&lt;br /&gt;Paneles: Agrupan componentes(botones, etc). &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Componentes Individuales Simples:&lt;/strong&gt;&lt;br /&gt;Botón&lt;br /&gt;Cuadros de Edición, texto editable&lt;br /&gt;Cuadros de Texto, texto fijo&lt;br /&gt;Check box o button, verdadero falso, las cajitas(sim if)&lt;br /&gt;Radio, select dependiente(sim switch)&lt;br /&gt;Combo box (son editables)&lt;br /&gt;Listas desplegables y no desplegables(son no editables)&lt;br /&gt;Menús desplegables en menú.&lt;br /&gt;Pop-Up(fuera de contexto, clic)&lt;br /&gt;Arboles(opciones desplegables)&lt;br /&gt;Tablas(encolumnadas) &lt;/p&gt;&lt;p&gt;Atención: este tipo de programación implican un diseño visual y un diseño lógico, un sistema exitoso debe tener las dos partes bien hechas. &lt;/p&gt;&lt;p&gt;Java GUI&lt;br /&gt;Se utiliza el javax.swing.*; &lt;/p&gt;&lt;p&gt;.JComponent base de los componentes. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Contenedores:&lt;/strong&gt;&lt;br /&gt;.JFrame: ventana&lt;br /&gt;.JDialog: dialogos&lt;br /&gt;.JOptionPane, diálogos de opción, diálogos predefinidos de swing.&lt;br /&gt;    SowMessageDialog(...);&lt;br /&gt;    ShowComfirmDialog(...);&lt;br /&gt;    ShowInputDialog(...);&lt;br /&gt;    ShowOptionDialog(...);&lt;br /&gt;.JPanel, agrupar componentes&lt;br /&gt;.JScrollPane, paneles con scroll&lt;br /&gt;.Layout, especificaciones para los componentes, matriz para acomodar los componentes.&lt;br /&gt;    FlowLayout componentes en fila&lt;br /&gt;    Border Layout el frame se divide en 5 áreas&lt;br /&gt;    GridLayout una matriz donde se vana ir rellenando como un table&lt;br /&gt;    GridBagLayout Igual que el anterior pero con tamaños distintos para las celdas&lt;br /&gt;    Sin Layout, componentes donde queramos.&lt;br /&gt;    El Layout ya es parte del contenedor y se puede activar desactivar o borrar &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Componentes estándar:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;JButton, botón de opción&lt;br /&gt;JLabel, texto estático&lt;br /&gt;JTextField, texto dinámico&lt;br /&gt;JCheckBox, checkbox&lt;br /&gt;JRadioButton, radio&lt;br /&gt;    JGroupButton, para agrupar los radio, no visual&lt;br /&gt;JComboBox, lista desplegable&lt;br /&gt;JList, lista común&lt;br /&gt;JTable, tablas&lt;br /&gt;JMenuBar, barra de menús&lt;br /&gt;    JMenu, distintos disparadores de despliegue   &lt;br /&gt;        JMenuItem, menú escalonado&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2920675348273331311?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2920675348273331311/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2920675348273331311' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2920675348273331311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2920675348273331311'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/apuntes-teoricos-de-componentes-java.html' title='Apuntes teóricos de Componentes Java'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-1914977805925335286</id><published>2009-03-22T22:21:00.062-03:00</published><updated>2009-04-05T02:13:49.519-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Clase para el ingreso por Teclado</title><content type='html'>&lt;p&gt;El otro día postee un ejemplo de programa en Java para trabajar y comprender conceptos de Herencia, Polimorfismo y además para trabajar con la Collection ArrayList.&lt;br /&gt;Me quedo en el aire mandar la clase In.java para trabajar directamente con la consola, estuve viendo y todavía no se si puedo postear la de mi facultad, capaz que en estos días diseñe una yo pero les paso el link a una que encontré en inet:&lt;br /&gt;&lt;a title="http://listas.ubiobio.cl/pipermail/tec-prog/2005-May/000233.html" href="http://listas.ubiobio.cl/pipermail/tec-prog/2005-May/000233.html" target="_blank"&gt;http://listas.ubiobio.cl/pipermail/tec-prog/2005-May/000233.html&lt;/a&gt;&lt;br /&gt;Es un poco mas básica que la In.java pero se puede modificar fácilmente. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-1914977805925335286?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/1914977805925335286/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=1914977805925335286' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1914977805925335286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1914977805925335286'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/clase-para-el-ingreso-por-teclado.html' title='Clase para el ingreso por Teclado'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3712559359379225879</id><published>2009-03-19T22:55:00.073-03:00</published><updated>2009-04-05T02:13:50.567-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dominios'/><title type='text'>Como redireccionar un .com.ar a Adsense para dominios</title><content type='html'>&lt;p&gt;Cuando este mes se abrió el nuevo servicio de Adsense(Adsense para dominios) se me ocurrió que podía redirigir algunos dominios que tengo de .com.ar a este servicio así al menos estarían generando alguna impresión(decir que estos dominios no son muy interesantes) me pareció importante probar el servicio y empecé mi investigación para lograr la redirección sin tener que pagar un servidor.&lt;br /&gt;Al principio no logre mucho, nadie hablaba del tema y creo que aun no hay muchos post sobre el mismo, al menos solo se de un pequeño theard en el foro de ayuda de adsense(iniciado por mi) y nada mas.&lt;br /&gt;La cuestión es que se puede hacer, yo logre tener 4 dominios y después me aburrí, hay que registrarse en la web &lt;a href="http://www.cdmon.com/" target="_blank"&gt;cdmon.com&lt;/a&gt;.&lt;br /&gt;Una vez registrados deben entrar al panel de DNS Estático y agregar su dominio.com.ar para luego poder ingresar los datos que nos provee Adsense.&lt;br /&gt;Se debe redirigir por ip a la primera ip que nos da Adsense el dominio.com.ar y por CNAME a pub…… el www.dominio.com.ar.&lt;br /&gt;Una vez que lo hayan hecho quedara algo como esto:&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/ScL3IZtDhlI/AAAAAAAAAtU/67RLDL5-hyI/s1600-h/domiios%5B11%5D.gif"&gt;&lt;img title="domiios" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="148" alt="domiios" src="http://lh4.ggpht.com/_QPVnXEzDdCg/ScL3jcT8R0I/AAAAAAAAAtY/o2pRwu-IeIg/domiios_thumb%5B7%5D.gif?imgmax=800" width="407" border="0" /&gt;&lt;/a&gt; Luego agreguen el dominio en Adsense y redirijan a los servidores de cdmon.com, atentos a los datos de Entidad Administradora y Contacto Técnico por que hay muchos dando vueltas que son muy parecidos y no me parece que tengan buenas intenciones, por la dudas les paso como debe quedar exactamente los datos del dominio: &lt;/p&gt;&lt;h6&gt;&lt;b&gt;Entidad Administradora: &lt;/b&gt;&lt;b&gt;10dencehispahard SL.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Contacto Técnico: &lt;/b&gt;&lt;b&gt;Josep Colominas&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Servidores DNS:&lt;br /&gt;&lt;/b&gt;&lt;b&gt;DNS Primario: &lt;/b&gt;&lt;em&gt;Nombre:&lt;/em&gt;ns1.cdmon.net&lt;br /&gt;&lt;b&gt;DNS Secundario: &lt;/b&gt;&lt;em&gt;Nombre:&lt;/em&gt;ns2.cdmon.net&lt;br /&gt;&lt;b&gt;Servidor alternativo: &lt;/b&gt;&lt;em&gt;Nombre:&lt;/em&gt;ns3.cdmon.net&lt;/h6&gt;&lt;p&gt;Las ip de cdmon.com están a la derecha en el panel de control.&lt;br /&gt;&lt;br /&gt;Saludos! blogterrier.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3712559359379225879?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3712559359379225879/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3712559359379225879' title='11 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3712559359379225879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3712559359379225879'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/como-redireccionar-un-comar-adsense.html' title='Como redireccionar un .com.ar a Adsense para dominios'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_QPVnXEzDdCg/ScL3jcT8R0I/AAAAAAAAAtY/o2pRwu-IeIg/s72-c/domiios_thumb%5B7%5D.gif?imgmax=800' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-1442809865432376432</id><published>2009-03-19T22:23:00.071-03:00</published><updated>2009-04-05T02:13:52.697-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Otro ejemplo con ArrayList en Java</title><content type='html'>Este es un programita “ejercicio de clase” para manejar los datos de unos materiales y materias primas, se puede desarrollar en mas o menos 45 minutos y se plantean los conceptos de Herencia, Polimorfismo y el manejo de La Colección ArrayList y la interfaz Iterator.&lt;br /&gt;Son 4 archivos, lo único que hay que cambiar es agregar la clase In o la que ustedes habitualmente utilicen para el ingreso de datos por teclado en una consola. Hay muchas dando vueltas por ahí pero creo que esta es de mi facultad así es que no se si la puedo publicar, en cuanto averigüe bien si la puedo publicar la subo a algún lugar y la posteo por acá.&lt;br /&gt;&lt;br /&gt;Clase Producto:&lt;br /&gt;&lt;h5&gt;public abstract class Producto {&lt;br /&gt;    private int codigo;&lt;br /&gt;    private String nombre;&lt;br /&gt;    public Producto(int c, String n)&lt;br /&gt;    {&lt;br /&gt;        setCodigo(c);&lt;br /&gt;        setNombre(n);&lt;br /&gt;    }&lt;br /&gt;    private void setCodigo(int codigo) {&lt;br /&gt;        this.codigo = codigo;&lt;br /&gt;    }&lt;br /&gt;    private int getCodigo() {&lt;br /&gt;        return codigo;&lt;br /&gt;    }&lt;br /&gt;    private void setNombre(String nombre) {&lt;br /&gt;        this.nombre = nombre;&lt;br /&gt;    }&lt;br /&gt;    private String getNombre() {&lt;br /&gt;        return nombre;&lt;br /&gt;    }&lt;br /&gt;    public String toString() {&lt;br /&gt;        return "Codigo: "+codigo+" Nombre: "+nombre;&lt;br /&gt;    }&lt;br /&gt;    public abstract double getPrecioCosto();&lt;br /&gt;}&lt;/h5&gt;Clase Terminado:&lt;br /&gt;&lt;h5&gt;public class Terminado extends Producto {&lt;br /&gt;    private String des;&lt;br /&gt;    private double pm;&lt;br /&gt;    public double pmo;&lt;br /&gt;    public Terminado(int c, String n, String d, double pm, double pmo) {&lt;br /&gt;        super(c, n);&lt;br /&gt;        this.des=d;&lt;br /&gt;        this.pm=pm;&lt;br /&gt;        this.pmo=pmo;&lt;br /&gt;    }&lt;br /&gt;    public double getPrecioCosto() {&lt;br /&gt;        return getPm()*pmo;&lt;br /&gt;    }&lt;br /&gt;    public String toString() {&lt;br /&gt;        return super.toString()+" Designcacion: "+getDes()+" Precio de Materiales: "+getPm()+" PrecioMO: "+pmo;&lt;br /&gt;    }&lt;br /&gt;    public void setDes(String des) {&lt;br /&gt;        this.des = des;&lt;br /&gt;    }&lt;br /&gt;    public String getDes() {&lt;br /&gt;        return des;&lt;br /&gt;    }&lt;br /&gt;    public void setPm(double pm) {&lt;br /&gt;        this.pm = pm;&lt;br /&gt;    }&lt;br /&gt;    public double getPm() {&lt;br /&gt;        return pm;&lt;br /&gt;    }&lt;br /&gt;}&lt;/h5&gt;Clase MatPrima:&lt;br /&gt;&lt;h5&gt;public class MatPrima extends Producto {&lt;br /&gt;    private String proveedor;&lt;br /&gt;    private double precioa;&lt;br /&gt;    public MatPrima(int c, String n, String p, double pr) {&lt;br /&gt;        super(c, n);&lt;br /&gt;        setProveedor(p);&lt;br /&gt;        setPrecioa(pr);&lt;br /&gt;        // TODO Auto-generated constructor stub&lt;br /&gt;    }&lt;br /&gt;    public void setProveedor(String proveedor) {&lt;br /&gt;        this.proveedor = proveedor;&lt;br /&gt;    }&lt;br /&gt;    public String getProveedor() {&lt;br /&gt;        return proveedor;&lt;br /&gt;    }&lt;br /&gt;    public void setPrecioa(double precioa) {&lt;br /&gt;        this.precioa = precioa;&lt;br /&gt;    }&lt;br /&gt;    public double getPrecioa() {&lt;br /&gt;        return precioa;&lt;br /&gt;    }&lt;br /&gt;    public String toString() {&lt;br /&gt;        // TODO Auto-generated method stub&lt;br /&gt;        return super.toString()+"Proveedor: "+proveedor+" Precio de Adquisicion: "+precioa;&lt;br /&gt;    }   &lt;br /&gt;    public double getPrecioCosto()&lt;br /&gt;    {&lt;br /&gt;        return precioa;&lt;br /&gt;    }&lt;br /&gt;}&lt;/h5&gt;Clase Empresa(Aquí la implementación de ArrayList):&lt;br /&gt;&lt;h5&gt;import java.util.*;&lt;br /&gt;public class Empresa {&lt;br /&gt;    public ArrayList emp;&lt;br /&gt;    public Empresa()&lt;br /&gt;    {&lt;br /&gt;        emp= new ArrayList();&lt;br /&gt;    }&lt;br /&gt;    public void add(Producto x)&lt;br /&gt;    {&lt;br /&gt;        emp.add(x);&lt;br /&gt;    }&lt;br /&gt;    public String Listar()&lt;br /&gt;    {&lt;br /&gt;        String ret="";&lt;br /&gt;        Iterator it= emp.iterator();&lt;br /&gt;        while(it.hasNext())&lt;br /&gt;        {&lt;br /&gt;            ret+=it.next().toString()+"\n";&lt;br /&gt;        }&lt;br /&gt;        return ret;&lt;br /&gt;    }&lt;br /&gt;    public String ListarT()&lt;br /&gt;    {&lt;br /&gt;        String ret="";&lt;br /&gt;        Iterator it= emp.iterator();&lt;br /&gt;        Producto x;&lt;br /&gt;        while(it.hasNext())&lt;br /&gt;        {&lt;br /&gt;            x=(Producto)it.next();&lt;br /&gt;            if(x instanceof Terminado)&lt;br /&gt;            {&lt;br /&gt;                ret+=x.toString()+"\n";&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return ret;&lt;br /&gt;    }&lt;br /&gt;    public double Costo()&lt;br /&gt;    {&lt;br /&gt;        double costo=0;&lt;br /&gt;        Iterator it= emp.iterator();&lt;br /&gt;        while(it.hasNext())&lt;br /&gt;        {&lt;br /&gt;            costo+=((Producto)it.next()).getPrecioCosto();&lt;br /&gt;        }&lt;br /&gt;        return costo;&lt;br /&gt;    }&lt;br /&gt;}&lt;/h5&gt;&lt;p&gt;Clase App(void main):&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;public class App {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        Empresa x=new Empresa();&lt;br /&gt;        int codigo=1;&lt;br /&gt;        String nombre="";&lt;br /&gt;        String pro="";&lt;br /&gt;        double pa=0;&lt;br /&gt;        String des="";&lt;br /&gt;        double pm=0;&lt;br /&gt;        double pmo=0;&lt;br /&gt;        while(codigo!=0)&lt;br /&gt;        {&lt;br /&gt;            System.out.println("Ingrese el codigo del Producto(0 termina la carga):");&lt;br /&gt;            codigo=In.readInt();&lt;br /&gt;            if(codigo!=0)&lt;br /&gt;            {&lt;br /&gt;                System.out.println("Ingrese el nombre del Producto:");&lt;br /&gt;                nombre=In.readLine();&lt;br /&gt;                System.out.println("Tipo de producto 1 terminado 0 MateriaP");&lt;br /&gt;                if(In.readInt()==1)&lt;br /&gt;                {&lt;br /&gt;                    System.out.println("Ingrese la designacion del Producto:");&lt;br /&gt;                    des=In.readLine();&lt;br /&gt;                    System.out.println("Ingrese el pm del Producto:");&lt;br /&gt;                    pm=In.readDouble();&lt;br /&gt;                    System.out.println("Ingrese el pmo del Producto:");&lt;br /&gt;                    pmo=In.readDouble();&lt;br /&gt;                    x.add(new Terminado(codigo, nombre, des, pm, pmo));&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    System.out.println("Ingrese el proveedor del Producto:");&lt;br /&gt;                    pro=In.readLine();&lt;br /&gt;                    System.out.println("Ingrese el Precio MP del Producto:");&lt;br /&gt;                    pa=In.readDouble();&lt;br /&gt;                    x.add(new MatPrima(codigo, nombre, pro, pa));&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        System.out.println("Lista de Productos:\n"+x.Listar());&lt;br /&gt;        System.out.println("Lista de Productos Terminados.\n"+x.ListarT());&lt;br /&gt;        System.out.println("Costo Total: "+x.Costo());&lt;br /&gt;    }&lt;br /&gt;}&lt;/h5&gt;&lt;p&gt;Recuerden que void main hace uso de la clase In para ingreso por teclado así que hay que cambiar algunas líneas por las que utilicen ustedes, ya voy a ver si la puedo subir.&lt;br /&gt;&lt;br /&gt;Saludos! blogterrier&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-1442809865432376432?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/1442809865432376432/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=1442809865432376432' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1442809865432376432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1442809865432376432'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/otro-ejemplo-con-arraylist-en-java.html' title='Otro ejemplo con ArrayList en Java'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-648561415942490229</id><published>2009-03-13T23:19:00.066-02:00</published><updated>2009-04-05T02:13:52.922-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Descargar Easy Eclipse Java</title><content type='html'>&lt;p&gt;Les paso la dirección que me dieron en la facultad para bajar un instalador de Eclipse para Windows con todos los paquetes necesarios para desarrollar programas básicos, la verdad muy útil por que hasta el momento tenia uno descargado de la pagina oficial de Eclipse que no era un instalador y le faltaban algunas cosas importantes. La instalación es sencilla, reconoce el JDK y solo hay que especificar la carpeta de trabajo.&lt;br /&gt;La pagina oficial del proyecto es &lt;a href="http://www.easyeclipse.org/" target="_blank"&gt;http://www.easyeclipse.org/&lt;/a&gt; mientras que el instalador se lo bajan directamente de sourceforge  en la dirección: &lt;a href="http://sourceforge.net/project/downloading.php?group_id=131065&amp;amp;filename=easyeclipse-desktop-java-1.3.1.1.exe" target="_blank"&gt;http://sourceforge.net/project/downloading.php?group_id=131065&amp;amp;filename=easyeclipse-desktop-java-1.3.1.1.exe&lt;/a&gt;&lt;br /&gt;Peso del archivo 135mb aproximadamente. &lt;/p&gt;&lt;h6&gt;Esta es la dirección para bajar el entorno Eclipse, la instalación es muy simple y tiene todo lo que se necesita para usarlo en materia. Este es el link: http://sourceforge.net/project/downloading.php?group_id=131065&amp;amp;filename=easyeclipse-desktop-java-1.3.1.1.exe Es el easyeclipse, la página principal es http://www.easyeclipse.org Saludos.&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-648561415942490229?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/648561415942490229/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=648561415942490229' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/648561415942490229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/648561415942490229'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/descargar-easy-eclipse-java.html' title='Descargar Easy Eclipse Java'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-5018402222455284802</id><published>2009-03-12T19:26:00.039-02:00</published><updated>2009-04-05T02:13:54.689-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='BlueJ'/><title type='text'>Un poco de java visual en bluej</title><content type='html'>&lt;p&gt;Tengo que empezar a estudiar esto así que si lo veo en mi blog me voy a acorar seguido, para hacer funcionar esto solo deben crear los 4 archivos en el bluej y crear un .jar.&lt;br /&gt;&lt;br /&gt;Calcu.java:&lt;/p&gt;&lt;h5&gt;import javax.swing.*;&lt;br /&gt;import java.awt.event.*; public class Calcu extends JFrame&lt;br /&gt;{&lt;br /&gt;    //texto&lt;br /&gt;    private JTextField texto = new JTextField();&lt;br /&gt;    //botones numeros y punto&lt;br /&gt;    private JButton b0 = new JButton("0");&lt;br /&gt;    private JButton b1 = new JButton("1");&lt;br /&gt;    private JButton b2 = new JButton("2");&lt;br /&gt;    private JButton b3 = new JButton("3");&lt;br /&gt;    private JButton b4 = new JButton("4");&lt;br /&gt;    private JButton b5 = new JButton("5");&lt;br /&gt;    private JButton b6 = new JButton("6");&lt;br /&gt;    private JButton b7 = new JButton("7");&lt;br /&gt;    private JButton b8 = new JButton("8");&lt;br /&gt;    private JButton b9 = new JButton("9");&lt;br /&gt;    private JButton p = new JButton("?");&lt;br /&gt;    //Operaciones y Limpiador&lt;br /&gt;    private JButton signo = new JButton("+/-");&lt;br /&gt;    private JButton suma = new JButton("+");&lt;br /&gt;    private JButton resta = new JButton("-");&lt;br /&gt;    private JButton producto = new JButton("*");&lt;br /&gt;    private JButton cociente = new JButton("/");&lt;br /&gt;    private JButton limpiar = new JButton("Borrar");&lt;br /&gt;    private JButton igual = new JButton("=");&lt;br /&gt;    //Acumulador de texto&lt;br /&gt;    private String aplicacion = "";&lt;br /&gt;    //Variables para cuentas&lt;br /&gt;    double ac = 0;&lt;br /&gt;    Numero n;&lt;br /&gt;    Lista li;     //CONSTRUCTOR PRINCIPAL&lt;br /&gt;    //Construye la ventana de la calculadora&lt;br /&gt;    public Calcu()&lt;br /&gt;    {&lt;br /&gt;        //Inicica la lista de cuentas&lt;br /&gt;        li= new Lista();&lt;br /&gt;        //Elimina Distribucion Automatica&lt;br /&gt;        getContentPane().setLayout(null);&lt;br /&gt;        texto.setBounds(10,10,280,20);&lt;br /&gt;        b0.setBounds(10,60,50,40);&lt;br /&gt;        b1.setBounds(70,60,50,40);&lt;br /&gt;        b2.setBounds(130,60,50,40);&lt;br /&gt;        b3.setBounds(190,60,50,40);&lt;br /&gt;        b4.setBounds(250,60,50,40);&lt;br /&gt;        b5.setBounds(10,120,50,40);&lt;br /&gt;        b6.setBounds(70,120,50,40);&lt;br /&gt;        b7.setBounds(130,120,50,40);&lt;br /&gt;        b8.setBounds(190,120,50,40);&lt;br /&gt;        b9.setBounds(250,120,50,40);&lt;br /&gt;        signo.setBounds(10,180,50,40);&lt;br /&gt;        suma.setBounds(70,180,50,40);&lt;br /&gt;        resta.setBounds(130,180,50,40);&lt;br /&gt;        producto.setBounds(190,180,50,40);&lt;br /&gt;        cociente.setBounds(250,180,50,40);&lt;br /&gt;        p.setBounds(130,240,50,40);&lt;br /&gt;        limpiar.setBounds(10,240,110,40);&lt;br /&gt;        igual.setBounds(190,240,110,40);&lt;br /&gt;        //Objeto EscucharBotones:&lt;br /&gt;        EscucharBotones eb = new EscucharBotones();&lt;br /&gt;        b0.addActionListener(eb);&lt;br /&gt;        b1.addActionListener(eb);&lt;br /&gt;        b2.addActionListener(eb);&lt;br /&gt;        b3.addActionListener(eb);&lt;br /&gt;        b4.addActionListener(eb);&lt;br /&gt;        b5.addActionListener(eb);&lt;br /&gt;        b6.addActionListener(eb);&lt;br /&gt;        b7.addActionListener(eb);&lt;br /&gt;        b8.addActionListener(eb);&lt;br /&gt;        b9.addActionListener(eb);&lt;br /&gt;        p.addActionListener(eb);&lt;br /&gt;        signo.addActionListener(eb);&lt;br /&gt;        suma.addActionListener(eb);&lt;br /&gt;        resta.addActionListener(eb);&lt;br /&gt;        producto.addActionListener(eb);&lt;br /&gt;        cociente.addActionListener(eb);&lt;br /&gt;        limpiar.addActionListener(eb);&lt;br /&gt;        igual.addActionListener(eb);&lt;br /&gt;        getContentPane().add(texto);&lt;br /&gt;        getContentPane().add(b0);&lt;br /&gt;        getContentPane().add(b1);&lt;br /&gt;        getContentPane().add(b2);&lt;br /&gt;        getContentPane().add(b3);&lt;br /&gt;        getContentPane().add(b4);&lt;br /&gt;        getContentPane().add(b5);&lt;br /&gt;        getContentPane().add(b6);&lt;br /&gt;        getContentPane().add(b7);&lt;br /&gt;        getContentPane().add(b8);&lt;br /&gt;        getContentPane().add(b9);&lt;br /&gt;        getContentPane().add(p);&lt;br /&gt;        getContentPane().add(signo);&lt;br /&gt;        getContentPane().add(suma);&lt;br /&gt;        getContentPane().add(resta);&lt;br /&gt;        getContentPane().add(producto);&lt;br /&gt;        getContentPane().add(cociente);&lt;br /&gt;        getContentPane().add(limpiar);&lt;br /&gt;        getContentPane().add(igual);&lt;br /&gt;        addWindowListener(new AplicacionWindow());&lt;br /&gt;    }     //Main para inciar la aplicacion:&lt;br /&gt;    public static void main(String args[])&lt;br /&gt;    {&lt;br /&gt;        Calcu n= new Calcu();&lt;br /&gt;        n.setSize(320,320);&lt;br /&gt;        n.setTitle("Calcu :-)");&lt;br /&gt;        n.setVisible(true);&lt;br /&gt;    }     //clase para escuchar los eventos sobre botones&lt;br /&gt;    public class EscucharBotones implements ActionListener&lt;br /&gt;    {&lt;br /&gt;        public void actionPerformed(ActionEvent e)&lt;br /&gt;        {&lt;br /&gt;            if (e.getSource() == b0)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="0";&lt;br /&gt;                ac=ac*10;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b1)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="1";&lt;br /&gt;                ac=ac*10+1;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b2)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="2";&lt;br /&gt;                ac=ac*10+2;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b3)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="3";&lt;br /&gt;                ac=ac*10+3;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b4)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="4";&lt;br /&gt;                ac=ac*10+4;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b5)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="5";&lt;br /&gt;                ac=ac*10+5;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b6)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="6";&lt;br /&gt;                ac=ac*10+6;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b7)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="7";&lt;br /&gt;                ac=ac*10+7;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b8)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="8";&lt;br /&gt;                ac=ac*10+8;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == b9)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="9";&lt;br /&gt;                ac=ac*10+9;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == p)&lt;br /&gt;            {&lt;br /&gt;                aplicacion="Creado por blogterrier con BlueJ";&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == signo)&lt;br /&gt;            {&lt;br /&gt;                aplicacion="-1*"+aplicacion;&lt;br /&gt;                ac=ac*-1;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == suma)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="+";&lt;br /&gt;                n= new Numero(ac,"suma");&lt;br /&gt;                li.InsertarFinal(n);&lt;br /&gt;                ac=0;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == resta)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="-";&lt;br /&gt;                n= new Numero(ac,"resta");&lt;br /&gt;                li.InsertarFinal(n);&lt;br /&gt;                ac=0;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == producto)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="*";&lt;br /&gt;                n= new Numero(ac,"producto");&lt;br /&gt;                li.InsertarFinal(n);&lt;br /&gt;                ac=0;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == cociente)&lt;br /&gt;            {&lt;br /&gt;                aplicacion+="/";&lt;br /&gt;                n= new Numero(ac,"cociente");&lt;br /&gt;                li.InsertarFinal(n);&lt;br /&gt;                ac=0;&lt;br /&gt;            }&lt;br /&gt;            else if (e.getSource() == limpiar)&lt;br /&gt;            {&lt;br /&gt;                 int ret = JOptionPane.showConfirmDialog(Calcu.this,"Empezamo de nuevo",":-) ????", JOptionPane.YES_NO_OPTION);&lt;br /&gt;                 if (ret == JOptionPane.YES_OPTION)&lt;br /&gt;                     {&lt;br /&gt;                            aplicacion="";&lt;br /&gt;                            ac=0;&lt;br /&gt;                     }&lt;br /&gt;            }&lt;br /&gt;            texto.setText(aplicacion);&lt;br /&gt;            if(e.getSource() == igual)&lt;br /&gt;            {&lt;br /&gt;                n=new Numero(ac,"");&lt;br /&gt;                li.InsertarFinal(n);&lt;br /&gt;                n=li.SumarLista();&lt;br /&gt;                if(n.getOp().compareTo("")==0)&lt;br /&gt;                texto.setText("Resultado: "+n.getNumero());&lt;br /&gt;                else&lt;br /&gt;                texto.setText("Resultado: "+n.getOp());&lt;br /&gt;                li.vaciar();&lt;br /&gt;                ac=0;&lt;br /&gt;                aplicacion="";&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }     class AplicacionWindow extends WindowAdapter&lt;br /&gt;    {&lt;br /&gt;        // al cerrar la ventana se termina la aplicación&lt;br /&gt;        public void windowClosing(WindowEvent e)&lt;br /&gt;        {&lt;br /&gt;            dispose();&lt;br /&gt;            System.exit(0);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/h5&gt;Nodo.java: &lt;h5&gt;public class Nodo&lt;br /&gt;{&lt;br /&gt;    private Numero dato;&lt;br /&gt;    private Nodo prox; &lt;p&gt;&lt;/p&gt;&lt;p&gt;    public Nodo(Numero n)&lt;br /&gt;    {&lt;br /&gt;        dato=n;&lt;br /&gt;        prox=null;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public Numero getDato()&lt;br /&gt;    {&lt;br /&gt;        return dato;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public Nodo getProx()&lt;br /&gt;    {&lt;br /&gt;        return prox;&lt;br /&gt;    } &lt;/p&gt;&lt;p&gt;    public void setProx(Nodo p)&lt;br /&gt;    {&lt;br /&gt;        prox=p;&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;/h5&gt;Lista.java:&lt;br /&gt;&lt;h5&gt;import java.lang.String.*; public class Lista&lt;br /&gt;{     private Nodo raiz;     public Lista()&lt;br /&gt;    {&lt;br /&gt;        raiz = null;&lt;br /&gt;    }     public void InsertarFinal(Numero n)&lt;br /&gt;    {&lt;br /&gt;        Nodo j = new Nodo(n);&lt;br /&gt;        if(raiz==null)&lt;br /&gt;        raiz=j;&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            Nodo p = raiz;&lt;br /&gt;            Nodo ant = null;&lt;br /&gt;            while(p!=null)&lt;br /&gt;            {&lt;br /&gt;                ant=p; p=p.getProx();&lt;br /&gt;            }&lt;br /&gt;            ant.setProx(j);&lt;br /&gt;        }&lt;br /&gt;    }     public Numero SumarLista()&lt;br /&gt;    {&lt;br /&gt;        double resul=0;&lt;br /&gt;        String op="";&lt;br /&gt;        String op2="";&lt;br /&gt;        Numero x;&lt;br /&gt;        if(raiz==null)&lt;br /&gt;        {&lt;br /&gt;            op2="No hay operaciones!!";&lt;br /&gt;            x= new Numero(resul, op2);&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            Nodo p=raiz;&lt;br /&gt;            resul=raiz.getDato().getNumero();&lt;br /&gt;            while(p!=null)&lt;br /&gt;            {&lt;br /&gt;                if(op.compareTo("")==0)&lt;br /&gt;                resul=resul;&lt;br /&gt;                if(op.compareTo("suma")==0)&lt;br /&gt;                resul+=p.getDato().getNumero();&lt;br /&gt;                if(op.compareTo("resta")==0)&lt;br /&gt;                resul-=p.getDato().getNumero();&lt;br /&gt;                if(op.compareTo("producto")==0)&lt;br /&gt;                resul=resul*p.getDato().getNumero();&lt;br /&gt;                if(op.compareTo("cociente")==0)&lt;br /&gt;                {&lt;br /&gt;                    if(p.getDato().getNumero()==0)&lt;br /&gt;                    op2="Division por cero no esta contemplada";&lt;br /&gt;                    else&lt;br /&gt;                    resul=resul/p.getDato().getNumero();&lt;br /&gt;                }&lt;br /&gt;                op=p.getDato().getOp();&lt;br /&gt;                p=p.getProx();&lt;br /&gt;            }&lt;br /&gt;            x= new Numero(resul, op2);&lt;br /&gt;        }&lt;br /&gt;        return x;&lt;br /&gt;    }     public void vaciar()&lt;br /&gt;    {&lt;br /&gt;        raiz=null;&lt;br /&gt;    }&lt;br /&gt;}&lt;/h5&gt;Numero.java:&lt;br /&gt;&lt;h5&gt;public class Numero&lt;br /&gt;{     private double numero;&lt;br /&gt;    private String op; &lt;p&gt;&lt;/p&gt;&lt;p&gt;    public Numero(double n, String o)&lt;br /&gt;    {&lt;br /&gt;        numero=n;&lt;br /&gt;        op=o;&lt;br /&gt;    }     public double getNumero()&lt;br /&gt;    {&lt;br /&gt;        return numero;&lt;br /&gt;    }     public String getOp()&lt;br /&gt;    {&lt;br /&gt;        return op;&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;/h5&gt;&lt;p&gt;Y vean como funciona la calculadora simple en java. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-5018402222455284802?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/5018402222455284802/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=5018402222455284802' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5018402222455284802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5018402222455284802'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/un-poco-de-java-visual-en-bluej.html' title='Un poco de java visual en bluej'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2221167289886955927</id><published>2009-03-07T14:10:00.042-02:00</published><updated>2009-04-05T02:13:54.950-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dominios'/><title type='text'>Nic.ar y los IDN</title><content type='html'>&lt;p&gt;El año pasado se anuncio por medio de este comunicado que pueden ver en &lt;a href="http://www.nic.ar/"&gt;www.nic.ar&lt;/a&gt; que Argentina empezaba los cambios para poder trabajar con dominios IDN(&lt;i&gt;Internationalized Domain Name&lt;/i&gt;).&lt;br /&gt;La idea es que los argentinos puedan registrar dominios en su propio idioma, ósea que por ejemplo dominios como ñandú.com.ar fueran habilitados, conspiración.com.ar. Incorporar los caracteres especiales como la ñ, la vocales con acento, la û.&lt;br /&gt;La informacion publicada por el nic.ar y que todavía esta disponible en su pagina principal dice algo como esto:&lt;/p&gt;&lt;h6&gt;&lt;p&gt;ABRIL 2008&lt;/p&gt;&lt;p&gt;&lt;em&gt;INTERNET: EL CANCILLER TAIANA FIRMÓ LA RESOLUCIÓN PARA INCORPORAR LA Ñ, LOS ACENTOS Y LA DIÉRESIS AL USO DE LOS DOMINIOS DE INTERNET EN LA ARGENTINA&lt;/em&gt;&lt;/p&gt;&lt;/h6&gt;&lt;p&gt;Luego un extenso texto en donde se agradece la cooperación del nic.es, (que por otro lado no pude encontrar ningún dominio IDN bajo el .es).&lt;br /&gt;&lt;br /&gt;La cuestión es que todo esto es absolutamente parado y abandonado, según algunas imágenes que vi por internet en una época había empezado el registro escalonado para aquellos que tienen un dominio parecido y que en su momento no pudieron registrarlo por ejemplo con ñ.&lt;br /&gt;Que sucede, nada, no hay comunicados oficiales, no hay dominios, el sistema tira errores de lo mas básico cuando uno pone una ñ en algún nombre.&lt;br /&gt;&lt;br /&gt;Bueno se los quería comentar, me da un poco de bronca que le den tan poca importancia, además muy poco movimiento en la red, esto tendría que ser algo así como una cruzada.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2221167289886955927?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2221167289886955927/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2221167289886955927' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2221167289886955927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2221167289886955927'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/nicar-y-los-idn.html' title='Nic.ar y los IDN'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-1893148266018960204</id><published>2009-03-01T12:16:00.040-02:00</published><updated>2009-04-05T02:14:34.846-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>MZK: El script que entra a Messenger y copia los contactos. Web Messenger.</title><content type='html'>&lt;p&gt;Hace unos meses quise tener en mi pagina web un sistema similar al de noadmitido.com, esa dirección no se si existe (pero supongo que se dan cuenta de que clase de script quería) y sus miles de versiones, entre las que podemos contar a Facebook, Fotolog, y tantas…&lt;br /&gt;Empecé a investigar y las opciones resultaron bastante amplias, para empezar les muestro uno de los scripts que me pareció interesante, se trata de un script en VBScript, que funciona solamente si tenemos guardado el HTML en una carpeta local y abrimos el archivo con IE, no me pregunten exactamente como funciona por que no lo se, se trata de un ActiveX que ingresa a la información que maneja el Messenger.&lt;br /&gt;Copien este código y guárdenlo en un archivo contactos.htm:&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script LANGUAGE="VBScript"&amp;gt;&lt;br /&gt;Sub Cuenta()&lt;br /&gt;msgbox "Mi status es " &amp;amp; IMessenger.MyStatus&lt;br /&gt;dim Mis_contactos&lt;br /&gt;Set Mis_contactos = IMessenger.MyContacts&lt;br /&gt;msgbox "Tengo " &amp;amp; Mis_contactos.Count &amp;amp; " contactos"&lt;br /&gt;&lt;br /&gt;for each contacto in Mis_contactos&lt;br /&gt;msgbox contacto.signinname&lt;br /&gt;next&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;OBJECT classid=clsid:B69003B3-C55E-4B48-836C-BC5946FC3B28&lt;br /&gt;codeType=application/x-oleobject id=IMessenger width=0 height=0 VIEWASTEXT&amp;gt;&amp;lt;/OBJECT&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;a href="#" onclick="vbscript:Cuenta()"&amp;gt;veamos&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt; &lt;/h5&gt;&lt;p&gt;Tambien pueden hacer clic aquí a ver si es que por alguna casualidad funciona&lt;script language="VBScript"&gt;&lt;br /&gt;Sub Cuenta()&lt;br /&gt;msgbox "Mi status es " &amp; IMessenger.MyStatus&lt;br /&gt;dim Mis_contactos&lt;br /&gt;Set Mis_contactos = IMessenger.MyContacts&lt;br /&gt;msgbox "Tengo " &amp; Mis_contactos.Count &amp; " contactos"&lt;br /&gt;&lt;br /&gt;for each contacto in Mis_contactos&lt;br /&gt;msgbox contacto.signinname&lt;br /&gt;next&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;object id="IMessenger" height="0" codetype="application/x-oleobject" width="0" classid="clsid:B69003B3-C55E-4B48-836C-BC5946FC3B28"&gt;&lt;/object&gt;&lt;a onclick="vbscript:Cuenta()" href="http://www.blogger.com/post-edit.g?blogID=7906564711921234287&amp;amp;postID=1893148266018960204#"&gt;veamos&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Pero esto es una simple curiosidad la idea no era esta o por lo menos era bastante impracticable por que no funciona si la web esta alojada en un servidor, se me ocurre que el enlace anterior no anduvo.&lt;br /&gt;&lt;br /&gt;Continuando… Hay una librería, escrita en PHP, llamada mzk que sirve justamente para conectarse al servidor que usa Messenger para guardar los datos de las cuentas, los nicks, los contactos, el mismo servidor con el que se conecta el Messenger cuando iniciamos sesión.&lt;br /&gt;&lt;br /&gt;Esta librería la descargan de &lt;a title="http://www.phpclasses.org/browse/package/3789.html" href="http://www.phpclasses.org/browse/package/3789.html" target="_blank"&gt;http://www.phpclasses.org/browse/package/3789.html&lt;/a&gt; y pueden encontrar ejemplos de uso en &lt;a title="http://code.google.com/p/mzk/downloads/list" href="http://code.google.com/p/mzk/downloads/list" target="_blank"&gt;http://code.google.com/p/mzk/downloads/list&lt;/a&gt; pero ahora vallamos a un ejemplo:&lt;br /&gt;&lt;br /&gt;A este archivo la vamos a pasar el email habilitado para entrar a una cuenta de MSN y la contraseña, estos datos irán en las variables MSN y pass respectivamente, además el formulario será POST para mayor seguridad, ahora van a ver que esta .class es casi mágica:&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;&amp;lt;?&lt;br /&gt;if (isset($_REQUEST['msn'],$_REQUEST['pass'])){&lt;br /&gt;include("mzk.php");&lt;br /&gt;$t = new MezzengerKlient;&lt;br /&gt;$t-&amp;gt;init($_REQUEST['msn'],$_REQUEST['pass'],"NLN");&lt;br /&gt;$t-&amp;gt;login();&lt;br /&gt;$t-&amp;gt;load_login();&lt;br /&gt;$t-&amp;gt;quit();&lt;br /&gt;$vector= $t-&amp;gt;mycontacts;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/h5&gt;&lt;p&gt;Creo que no hace falta explicar mucho el código, si MSN y pass tienen algo se inicializa el objeto $t que es un MezzengerKlient, se pasan los valores de MSN y pass, se inicia sesión, salimos y en la variable $vector tenemos un array con todos los contactos.&lt;br /&gt;En la pagina de Google Code hay ejemplos de como realizar un Web Messenger, léase podemos hacer nuestro bot de Messenger con mzk.&lt;br /&gt;&lt;br /&gt;Problemas y avisos:&lt;br /&gt;La ejecución de esas líneas de código tarda casi 2 minutos, es el tiempo que se tarda en iniciar sesión en el servidor de MSN.&lt;br /&gt;Además se debe usar en un servidor contratado por que si lo prueban van a ver que da error, se debe pedir al administrador la apertura del puerto 1863, que es el utilizado por mzk para iniciar sesión en MSN.&lt;br /&gt;A mi me lo habilitaron luego de que pase las direcciones de PHPclasses y Google Code.&lt;br /&gt;Pueden ver un ejemplo del funcionamiento de este script fusionado con PHPmailer en &lt;a href="http://www.idmovil.com.ar/msn/" target="_blank"&gt;http://www.idmovil.com.ar/msn/&lt;/a&gt;, donde hice un sistema para invitar a los contactos de Messenger a visitar mi pagina. &lt;br /&gt;&lt;br /&gt;Nos vemos en la próxima.&lt;br /&gt;Habilite mi perfil, ahora pueden ver mi avatar.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-1893148266018960204?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/1893148266018960204/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=1893148266018960204' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1893148266018960204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1893148266018960204'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/03/mzk-el-script-que-entra-messenger-y.html' title='MZK: El script que entra a Messenger y copia los contactos. Web Messenger.'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-1008195128715534974</id><published>2009-02-27T23:28:00.039-02:00</published><updated>2009-04-05T02:14:36.414-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Enviar miles de emails a tus usuarios sin saturar el servidor de 3 dólares.</title><content type='html'>&lt;p&gt;Hoy empecé mi campaña para recobrar posiciones en Google para mi sitio estrella, entre otras acciones les estoy enviando un email a mis usuarios que son cerca de 14.500 recordándoles sus datos de usuario.&lt;br /&gt;Seria muy placentero enviar los 14.500 correos de una sola vez y ver como las visitas y las ganancias de Adsense se disparan en una hora hacia números soñados, pero si hago eso el servidor va parar todo el envio y seguramente tendré alguna sanción, que sea cual sea es finalmente económica.&lt;br /&gt;En mi servidor tengo contratado para ese sitio el paquete mas barato, pero manejo el sitio con tres dominios, o sea que esta multiplicado por 3 cuando de ancho de banda se trata. Pero sobre los correos electrónicos solo me dejan enviar 250 emails por hora.&lt;br /&gt;Que hacer? ingresar 1 vez por hora para y enviar 250 emails, NO, por un lado es una solución impracticable por que no puedo hacerlo, pero además deja a mi intelecto por el suelo.&lt;br /&gt;Entonces hay que ensayar una solución mas elegante y que finalmente ha quedado muy linda, dinámica y practica.&lt;br /&gt;Básicamente la idea es que el envio se haga de uno por vez y que sea automático, por supuesto los emails están en una tabla de mysql.&lt;br /&gt;Para empezar lo primero es copiar los datos que me interesan de mi tabla de usuarios(que cuenta con mas de 15 campos) solo deseo el obviamente el correo electrónico(aunque podrían ser mas datos). Copio la tabla con phpmyadmin y borro los campos que no me interesan, además agrego un nuevo campo llamado “con” tipo int para guardar “la cantidad de veces” que falta para enviar otro email. Lo pongo entre comillas por que es un contador que indica cuantas veces se llamo al script de enviar el correo, en otra parte definiré cuantas veces se llama y cuando se envía.&lt;br /&gt;Si ya tengo la tabla preparada, la voy a llamar ‘boletín’ puedo empezar a programar mis funciones para enviar el correo electrónico. &lt;/p&gt;&lt;h6&gt;Además deseo ver en todo momento desde el escritorio como va el envio y para eso voy a desarrollar un gadget para la Windows Sidebar, si yo uso Vista! de momento es lo mejor que he conseguido para trabajar como webmaster de tiempo libre&lt;/h6&gt;Lo primero es saber la estructura de mi sitio, el mío en particular tiene includes de la cabecera.php en todos los archivos del sitio, tambien tiene un include estadisticas.php(Para contar las impresiones de pagina), cualquier sitio bien formado y desarrollado en php tiene modulado esto de alguna manera similar, y si no lo tiene quizás use una plantilla de Dreamweaver en donde se puede llamar un iframe, y donde se puede cargar un archivo.php, o aunque sea una imagen gif que contenga código en php(tema de otro post futuro).&lt;br /&gt;Como poseo esos archivos elijo uno para incluir mi código de envio de emails, simplemente incluyo en el archivo la línea php:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;h5&gt;&amp;lt;?php&lt;br /&gt;include("code/enviamail.php");&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/h5&gt;&lt;p&gt;Y ahora podemos empezar a desarrollar nuestro sistema:&lt;br /&gt;Como habrán notado lo pongo en una carpeta code y adentro esta el archivo que contendrá al script.&lt;br /&gt;&lt;br /&gt;Que debe contener este archivo:&lt;br /&gt;+Definición de los datos de acceso a la Base de Datos mysql.&lt;br /&gt;+Consulta a la bd para saber si se envía el email o no, y si se envía obtener los datos del destinatario.&lt;br /&gt;+Llamada a la librería para enviar email smtp, que son los que soporta mi servidor.&lt;br /&gt;+Envio del email.&lt;br /&gt;+Si no envio el email sumar un punto en el campo ‘con’.&lt;br /&gt;+Obtener la cantidad de emails que restan enviar.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ahora si vamos por partes:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;+Definición de los datos de acceso a la bd:&lt;/p&gt;&lt;h5&gt;&amp;lt;?php&lt;br /&gt;$dbhost = "localhost";&lt;br /&gt;$dbuser = "usuario";//nombre de usuario para mysql&lt;br /&gt;$dbpass = "password";//password del usuario&lt;br /&gt;$dbase = "bd";//nombre de la bd&lt;br /&gt;$iden_n= @mysql_connect($dbhost, $dbuser, $dbpass);&lt;br /&gt;mysql_select_db($dbase); &lt;/h5&gt;&lt;p&gt;+Consulta a la bd para saber si se envía el email o no(si no se envía agregamos un punto en ‘con’):&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;$query[5236] = mysql_query("SELECT * FROM `boletin` LIMIT 1 ");&lt;br /&gt;$user_results = mysql_fetch_array($query[5236]);&lt;br /&gt;if($user_results["con"]&amp;lt;2)&lt;br /&gt;{&lt;br /&gt;$con=$user_results["con"]+1;&lt;br /&gt;$query[5236] = mysql_query("UPDATE `boletin` SET `con` = '$con' LIMIT 1 ;");&lt;br /&gt;}&lt;/h5&gt;&lt;p&gt;Como esta definida mi condición por cada 3 veces que se llama al archivo se envía un email, esto se puede modificar de acuerdo al limite que tenemos en el servidor y a la cantidad de visitas por hora pico. Por ejemplo si como yo solo podemos enviar 250 mails/hora y tengo 600 impresiones/hora en hora pico esta correcto poner &amp;lt;2 pero si tengo 400 impresiones/hora pico podríamos poner &amp;lt;1. Lo mismo vale si en vez de eso tenemos un mayor o menor numero de emails por hora.&lt;br /&gt;&lt;br /&gt;+Else, se envía el correo electrónico y se borra el registro(muy importante hacer esto en una tabla nueva como explique arriba, si no tendremos un serio problema, nada solucionable con un backup)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;else&lt;br /&gt;{&lt;br /&gt;$con=0;//Esto es para el gadget&lt;br /&gt;$vector=$user_results["mail"];//email de bd&lt;br /&gt;$query[5236] = mysql_query("DELETE FROM `boletin` WHERE `mail` = '$vector' LIMIT 1;"); //elimino el registro&lt;br /&gt;include("texto.php");//Aquí guardo el texto del mail&lt;br /&gt;require "class.phpmailer.php";//class de envio smtp&lt;br /&gt;$mail = new phpmailer();&lt;br /&gt;$mail-&amp;gt;PluginDir = "";&lt;br /&gt;$mail-&amp;gt;Mailer = "smtp";&lt;br /&gt;$mail-&amp;gt;Host = "mail.servidor.com";//servidor smtp&lt;br /&gt;$mail-&amp;gt;SMTPAuth = true;&lt;br /&gt;$mail-&amp;gt;Username = "boletin@servidor.com";//user smtp&lt;br /&gt;$mail-&amp;gt;Password = "++++++";//password smtp&lt;br /&gt;$mail-&amp;gt;From = "boletin@servidor.com";//mail smtp&lt;br /&gt;$mail-&amp;gt;FromName = "Mi Web";//Remitente &lt;br /&gt;$mail-&amp;gt;Timeout=30;//Tiempo de espera smtp&lt;br /&gt;$mail-&amp;gt;Subject = "Asunto";//Asunto del email &lt;br /&gt;$msoj=$html;//Esto esta en texto.php&lt;br /&gt;$mail-&amp;gt;Body = $msoj;&lt;br /&gt;$mail-&amp;gt;AltBody = $alt;//Texto alternativo, texto.php &lt;br /&gt;$mail-&amp;gt;AddAddress($vector);&lt;br /&gt;$exito = $mail-&amp;gt;Send();&lt;br /&gt;$mail-&amp;gt;ClearAddresses();&lt;br /&gt;}&lt;/h5&gt;Como pueden ver no es muy complicado configurar esto, creo que detalle exactamente que datos se deben completar, decirles que la clase class.phpmailer.php se la pueden descargar desde &lt;a title="http://phpmailer.sourceforge.net" href="http://phpmailer.sourceforge.net/" target="_blank"&gt;http://phpmailer.sourceforge.net&lt;/a&gt; y consta de tres archivos que para este ejemplo tambien deben estar en la carpeta “code”, estos archivos son: class.phpmailer.php, class.pop3.php y class.smtp.php.&lt;br /&gt;&lt;br /&gt;+Obtener la cantidad de emails que restan enviar y cerrar el script:&lt;br /&gt;&lt;h5&gt;$sql = "SELECT * FROM `boletin`";&lt;br /&gt;$result = mysql_query($sql);&lt;br /&gt;$registros = mysql_num_rows($result);&lt;br /&gt;?&amp;gt;&lt;/h5&gt;Esto lo hago para mi gadget que quiero ver en el escritorio, simplemente hago una nueva consulta a la tabla boletín para saber cuantos emails restan enviar.&lt;br /&gt;&lt;br /&gt;+Que falta? si el archivo texto.php en la misma carpeta code&lt;br /&gt;&lt;h5&gt;&amp;lt;?php&lt;br /&gt;$html = 'html';//El cuerpo del email en formato html&lt;br /&gt;$txt = 'txt';////El cuerpo del email en formato texto&lt;br /&gt;?&amp;gt;&lt;/h5&gt;En la variable HTML ponemos el email en formato HTML igual que una web común HTML, en texto el formato en solo texto por si el usuario no recibe HTML en su bandeja de entrada. Cuando se trata de HTML podemos poner imágenes, styles, tablas y todo. En texto no!&lt;br /&gt;Es interesante advertir que si obtenemos mas datos de la tabla boletín podemos hacer emails personalizados que contengan por ejemplo el nombre de usuario y el password de acceso a la web, para eso lo estoy usando yo.&lt;br /&gt;Y ya terminamos, podemos incluir el code/enviamail.php y se empezara a mandar un correo por cada tres impresiones de la pagina donde incluyamos el archivo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;El Gadget:&lt;/strong&gt;&lt;br /&gt;El gadget para el escritorio de Windows es un capricho mío pero es algo bastante sencillo, se puede poner de forma directa en un Windows Vista y en un XP agregando la Windows Sidebar.&lt;br /&gt;Además sirve para enviar una mayor cantidad de emails mientras estemos con nuestra PC conectada a internet.&lt;br /&gt;El gadget consta de dos partes, la primera esta en el servidor y es otro archivo php que tiene definido un refresh cada tantos segundos en los META.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&amp;lt;?&lt;br /&gt;include("code/enviamail.php");&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&lt;br /&gt;"http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Estadisticas de Envio&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;META HTTP-EQUIV="REFRESH" CONTENT="15;URL=http://www.miweb.com/gadget.php"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"&amp;gt;&lt;br /&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;.Estilo1 {&lt;br /&gt;    font-family: Verdana, Arial, Helvetica, sans-serif;&lt;br /&gt;    font-size: 12px;&lt;br /&gt;    color: #0000CC;&lt;br /&gt;}&lt;br /&gt;--&amp;gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body class="Estilo1"&amp;gt;&lt;br /&gt;&amp;lt;strong&amp;gt;Estadisticas de envio:&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;El contador esta en: &amp;lt;? echo $con; ?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;Restan enviar: &amp;lt;? echo $registros; ?&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/h5&gt;En este caso se puede ver que el refresh esta puesto en 15 segundos, o sea que si abrimos este archivo sumado a las impresiones de paginas tenemos que agregar un envio cada 45 segundos.&lt;br /&gt;Lo podemos abrir con cualquier navegador pero mi idea es verlo desde el escritorio.&lt;br /&gt;Recuerden cambiar en el META refresh www.miweb.com por el dominio de su propio sitio.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;El Gadget en nuestro escritorio:&lt;/strong&gt;&lt;br /&gt;Para instalar el gadget en nuestro escritorio, previamente constatado que tenemos la Windows Sidebar debemos crear una carpeta llamada “MyWeb.Gadget” en el directorio “Archivos de Programa\Windows Sidebar\Gadgets”.&lt;br /&gt;En esa carpeta tenemos que crear los siguientes archivos:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;gadget.xml:&lt;/strong&gt;&lt;br /&gt;&lt;h5&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;gadget&amp;gt;&lt;br /&gt;&amp;lt;name&amp;gt;MyWeb&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;lt;namespace&amp;gt;Namespace.Ejemplo&amp;lt;/namespace&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;author name="Mailing myweb.com"&amp;gt;&lt;br /&gt;&amp;lt;info url=&lt;a href="http://www.myweb.com/"&gt;http://www.myweb.com&lt;/a&gt; /&amp;gt;&lt;br /&gt;&amp;lt;logo src="logo.png"/&amp;gt;&lt;br /&gt;&amp;lt;/author&amp;gt;&lt;br /&gt;&amp;lt;copyright&amp;gt;&amp;amp;#169; 2008&amp;lt;/copyright&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;Gadget de envio blogterrier&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;icons&amp;gt;&lt;br /&gt;&amp;lt;icon height="48" width="48" src="iconoDelGadget.png" /&amp;gt;&lt;br /&gt;&amp;lt;/icons&amp;gt;&lt;br /&gt;&amp;lt;hosts&amp;gt;&lt;br /&gt;&amp;lt;host name="sidebar"&amp;gt;&lt;br /&gt;&amp;lt;base type="HTML" src="myweb.html" /&amp;gt;&lt;br /&gt;&amp;lt;permissions&amp;gt;full&amp;lt;/permissions&amp;gt;&lt;br /&gt;&amp;lt;platform minPlatformVersion="1.0" /&amp;gt;&lt;br /&gt;&amp;lt;defaultImage src="drag.png" /&amp;gt;&lt;br /&gt;&amp;lt;/host&amp;gt;&lt;br /&gt;&amp;lt;/hosts&amp;gt;&lt;br /&gt;&amp;lt;/gadget&amp;gt;&lt;/h5&gt;myweb.html:&lt;br /&gt;&lt;h5&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;MyWeb&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;Body&lt;br /&gt;{&lt;br /&gt;width:240px;&lt;br /&gt;height:90px;&lt;br /&gt;margin-left: 0px;&lt;br /&gt;margin-top: 0px;&lt;br /&gt;margin-right: 0px;&lt;br /&gt;margin-bottom: 0px;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;iframe width="238" height="88" src=http://www.myweb.com/gadget.php name="fram"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/h5&gt;&lt;p&gt;Recuerden cambiar sus respectivos nombres de dominio en los archivos así funciona correctamente y además queda lindo.&lt;br /&gt;Perdonaran que en el ejemplo no incluya imágenes del gadget pero me parece que eso no es tan importante pero es fácil de desarrollar.&lt;br /&gt;Además este código es sencillo como ejemplo para desarrollar otros gadgets que sirvan para mostrar estadisticas u otras cosas a sus usuarios pero desde el escritorio, para poner un buscador o lo que mejor que se imaginen.&lt;br /&gt;&lt;br /&gt;Bueno espero que les haya gustado este post, sigo con la idea fija de compartir conocimientos, y les sigo debiendo el sistema de trackbacks sin CMS.&lt;br /&gt;Los espero en la próxima y mucha suerte, Blogterrier.&lt;br /&gt;&lt;br /&gt;Otra cosa! les muestro como se ve mi gadget que me muestra las estadisticas de uno de mis sitios en el escritorio:&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_QPVnXEzDdCg/SaiTIa8QJUI/AAAAAAAAAs0/4Lo7NRy-Il8/s1600-h/gadget%5B3%5D.gif"&gt;&lt;img title="gadget" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="185" alt="gadget" src="http://lh5.ggpht.com/_QPVnXEzDdCg/SaiTNZGHgfI/AAAAAAAAAs4/uofufJBHFi4/gadget_thumb%5B1%5D.gif?imgmax=800" width="281" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora si, hasta la próxima!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-1008195128715534974?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/1008195128715534974/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=1008195128715534974' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1008195128715534974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1008195128715534974'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/02/enviar-miles-de-emails-tus-usuarios-sin.html' title='Enviar miles de emails a tus usuarios sin saturar el servidor de 3 dólares.'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/SaiTNZGHgfI/AAAAAAAAAs4/uofufJBHFi4/s72-c/gadget_thumb%5B1%5D.gif?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3995820170956437296</id><published>2009-02-25T19:42:00.040-02:00</published><updated>2009-04-05T02:14:36.694-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dominios'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Tener tu dominio.com.ar a blogspot o a fotolog</title><content type='html'>&lt;p&gt;Esta mañana, o habrá sido esta madrugada quizás un usuario de forobloggers.com me envió un pm pidiéndome que le pasará la guía que yo había usado para tener mi dominio .com.ar apuntando a mi blogspot. &lt;/p&gt;&lt;h6&gt;A blogterrier.blogspot.com se puede entrar por esa dirección o por esta otra que alguna vez registre www.blogterrier.com.ar&lt;/h6&gt;&lt;p&gt;Esperen que me fijo… Si registrado en el 2005, pensar que recién se me ocurrió usar ese nombre el año pasado! en el foro de la facultad.&lt;br /&gt;Bueno volviendo al tema, le comente a este usuario que no había seguido un tutorial, en ese momento tenia una vaga idea de que es lo que necesitaba y entre varias opciones descubri a zoneedit.com que me ofrecía DNS para poder colocar en &lt;a href="http://www.nic.ar/" target="_blank"&gt;http://www.nic.ar/&lt;/a&gt;.&lt;br /&gt;Además hago bien extenso este tutorial y con muchos detalles por que descubri por ahí que hay empresas cobrando por este servicio que toma unos minutos y es gratis, especialmente aprovechándose de los poco entendidos floggers de Argentina, que no son de mi agrado como moda pero que tampoco se merecen ser estafados.&lt;br /&gt;&lt;br /&gt;Ahora si vamos por partes:&lt;br /&gt;&lt;br /&gt;1) Los dominios .com.ar se registran en el “Network Information Center” o NIC, en argentina esa entidad depende del Ministerio de Relaciones Exteriores y se da la particularidad de ser uno de los pocos NICs del mundo que permiten el registro de dominios sin tener que pagar un solo centavo, si gratis, en comparación hace poco registre un com.es y estoy pagando $72 argentinos por año.&lt;br /&gt;Registrar el dominio es sencillo, debemos completar el formulario de registro en &lt;a href="http://www.nic.ar/" target="_blank"&gt;http://www.nic.ar/&lt;/a&gt;.&lt;br /&gt;Vayan preparando un correo electrónico propio, cualquiera menos Hotmail, yo recomiendo Yahoo.&lt;br /&gt;El primer paso dentro de la web es ver si el dominio que queremos para nuestro fotolog o blogspot(o cualquier web) esta libre, cuando llegamos a la web será la primer caja de búsqueda.&lt;br /&gt;Si el dominio esta libre podremos registrarlo, entonces hacemos clic en la primera opción y nos pide que ingresemos nuevamente el nombre de dominio y tambien el correo electrónico que arriba les dije que prepararan.&lt;br /&gt;&lt;br /&gt;2)STOP(en este momento nos conviene seguir con zoneedit.com)&lt;br /&gt;Entramos a &lt;a title="http://zoneedit.com/" href="http://zoneedit.com/" target="_blank"&gt;http://zoneedit.com/&lt;/a&gt;, es una de las paginas mas fea que he visto en mi vida, en contrapartida nos ofrece muchos beneficios.&lt;br /&gt;Arriba a la derecha podemos encontrar el enlace “Free Sign Up”, le damos clic… Abajo de todo vamos a encontrar este formulario:&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/SaW7ICENpLI/AAAAAAAAAsU/UKTevYmMg5M/s1600-h/zoneedit%5B6%5D.gif"&gt;&lt;img title="zoneedit" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="222" alt="zoneedit" src="http://lh5.ggpht.com/_QPVnXEzDdCg/SaW7IwhgXII/AAAAAAAAAsY/1sd6ok7Xlns/zoneedit_thumb%5B4%5D.gif?imgmax=800" width="380" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Completamos los datos… en Company URL pueden poner la url de su blog o fotolog. El resto de los datos, no rompan nada!&lt;br /&gt;Dejamos Free Trial en la ultima opción y “Sign Up Now”.&lt;br /&gt;Bien esta parte es medio lenta pero no se preocupen abran su correo electrónico y encontraran un email con el asunto “ZoneEdit.com Signup Information‏” donde les informara su nombre de usuario y su clave de acceso, hagan el favor de archivar ese correo electrónico en un lugar seguro.&lt;br /&gt;Volvemos a zoneedit.com y esta vez el link a seguir es el que esta a la izquierda arriba: Login.&lt;br /&gt;Si pusimos correctamente los datos el resultado es este:&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SaW7JRSaKVI/AAAAAAAAAsc/G3P9vNtMWJQ/s1600-h/zoneedit2%5B2%5D.gif"&gt;&lt;img title="zoneedit2" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="189" alt="zoneedit2" src="http://lh4.ggpht.com/_QPVnXEzDdCg/SaW7J14P9vI/AAAAAAAAAsg/rJ3xAyyd-Bc/zoneedit2_thumb.gif?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora vamos a “Add Zones”.&lt;br /&gt;En la siguiente pagina aparecerá el “Enter Domain Name:” ingresamos el dominio que queremos registrar y que estaba libre en la forma dominio.com.ar, sin http ni www ni /\.&lt;br /&gt;Perfecto! ahora nos dará la informacion de los DNS tan importantes, algo como esto: (Copiar en un txt o memorizarlos!)&lt;/p&gt;&lt;pre&gt;  Nameserver 1: &lt;b&gt;ns4.zoneedit.com&lt;/b&gt; (216.98.150.236)&lt;br /&gt;  Nameserver 2: &lt;b&gt;ns18.zoneedit.com&lt;/b&gt; (72.9.106.68)&lt;/pre&gt;&lt;p&gt;Bien luego vamos abajo de todo y empezamos a editar las opciones, “Start Editing Zone”.&lt;br /&gt;En la siguiente pantalla podemos elegir varias cosas que dejo a su antojo, por ejemplo si registramos pepito.com.ar podemos decirle que redireccione todo los corros cualquiercosa@pepito.com.ar a nuestro propio email. Al fin de este tutorial solo modifiquen la opción WebForwards: haciendo clic sobre ella.&lt;br /&gt;En new domain no ponemos nada, en Destination ponemos nuestro fotolog o blogspot, tildamos la opción Cloaked.&lt;br /&gt;Hacemos clic en Add New y en la próxima pagina en el primer “Yes”.&lt;br /&gt;Por ahora terminamos con zoneedit y volver al NIC, pero sepan que se pueden hacer otras cosas como lo del email ponerle titulo al frame, y tambien agregar subdominios como hola.pepito.com.ar apuntando a otras webs.&lt;br /&gt;&lt;br /&gt;3)Continuamos con el nic.ar:&lt;br /&gt;Teníamos que poner nuestro nombre de dominio nuevo y un correo electrónico, vamos al siguiente paso y nos solicita la entidad registrante, seleccionamos “Nueva Entidad” completando los datos con datos reales de lo contrario nos pueden cerrar la cuenta.&lt;br /&gt;Luego viene la Persona Registrante, tambien elegimos nueva y completamos los datos.&lt;br /&gt;Atención!! Parte crucial:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SaW7KW7CuNI/AAAAAAAAAsk/OWuvBFBlHSw/s1600-h/nicar%5B2%5D.gif"&gt;&lt;img title="nicar" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="244" alt="nicar" src="http://lh4.ggpht.com/_QPVnXEzDdCg/SaW7LAuGeNI/AAAAAAAAAso/mbVHNaSPDMc/nicar_thumb.gif?imgmax=800" width="201" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Elegimos “delegar”.&lt;br /&gt;La siguiente pagina nos permite determinar los datos técnicos de redirección del dominio. Los mismo datos que les pedí que copiaran en un txt.&lt;br /&gt;Se deben completar los 4 primeros casilleros esto debe quedar mas o menos así:&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_QPVnXEzDdCg/SaW7LbwQfKI/AAAAAAAAAss/H_CB2tErDzQ/s1600-h/nicar2%5B2%5D.gif"&gt;&lt;img title="nicar2" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="93" alt="nicar2" src="http://lh5.ggpht.com/_QPVnXEzDdCg/SaW7MAKHAII/AAAAAAAAAsw/EHCpDiaOMqw/nicar2_thumb.gif?imgmax=800" width="244" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pero con los datos que zoneedit les dio a ustedes.&lt;br /&gt;Luego vamos a delegar:&lt;br /&gt;-Se nos pide un&lt;br /&gt;“Seleccione el Proveedor de Servicios de Internet (ISP)”&lt;br /&gt;-Escribimos&lt;br /&gt;”ZoneEdit, Inc.”&lt;br /&gt;-Y un&lt;br /&gt;”Seleccione el Contacto Técnico”&lt;br /&gt;-Escribimos&lt;br /&gt;”Technical Contact - ZoneEdit, Inc.”&lt;br /&gt;&lt;br /&gt;Casi terminamos!!&lt;br /&gt;&lt;br /&gt;4) Contestar correctamente:&lt;br /&gt;El siguiente paso es terminar el registro, si todos los datos están bien debemos ingresar el texto de la imagen y tildar la opción “Acepto las Condiciones”.&lt;br /&gt;Se nos envía un correo electrónico.&lt;br /&gt;Bien si hasta aquí seguimos todos los pasos falta uno solo, vamos a la bandeja de entrada, copiamos el correo electrónico que nos envío el nic, ponemos contestar.&lt;br /&gt;Cuando estemos contestando borramos el “Re: “ del asunto para que quede igual que el que nos llego.&lt;br /&gt;Además borramos todo el mensaje y pegamos el texto que antes habíamos copiado del email original.&lt;br /&gt;En pocos minutos llegara otro email confirmando que esta todo bien. &lt;/p&gt;&lt;h6&gt;Muchas veces hay errores en el proceso de contestar el correo electrónico, y mientras no lo hagamos no terminamos el tramite.&lt;br /&gt;&lt;br /&gt;Si te surgen problemas durante esta etapa lo mejor es leer la guía correspondiente a tu sistema de correo electrónico en la pagina del mismo NIC, mas precisamente &lt;a title="http://www.nic.ar/guias_interactivas/guias.html" href="http://www.nic.ar/guias_interactivas/guias.html" target="_blank"&gt;http://www.nic.ar/guias_interactivas/guias.html&lt;/a&gt; &lt;/h6&gt;Luego de esto hay que esperar mas o menos 3 días hábiles y nuestro blogspot o fotolog o lo que sea ya se puede acceder por pepito.com.ar(pepito es un ejemplo!!)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bien espero que les sirva este tutorial, bastante completo, y les debo los trackbacks sin wp para otro día. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3995820170956437296?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3995820170956437296/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3995820170956437296' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3995820170956437296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3995820170956437296'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/02/tener-tu-dominiocomar-blogspot-o.html' title='Tener tu dominio.com.ar a blogspot o a fotolog'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_QPVnXEzDdCg/SaW7IwhgXII/AAAAAAAAAsY/1sd6ok7Xlns/s72-c/zoneedit_thumb%5B4%5D.gif?imgmax=800' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-1916638116116286969</id><published>2009-02-25T16:04:00.036-02:00</published><updated>2009-03-29T03:40:44.161-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Colgado de La Palmera'/><title type='text'>Dakar 2010 Argentina, otra vez por aquí</title><content type='html'>&lt;p&gt;Bueno me acabo de enterar que la súper carrera que hace menos de un mes tuvimos el privilegio de ver, va a estar otra vez corriéndose por Argentina, y es descontado que va a pasar por Córdoba.&lt;br /&gt;Genial, la fiesta que se arma acá con ese tipo de competencias! creo que va a estar tan bueno como este año.&lt;br /&gt;Me comentaron que se quitaran algunas etapas de la Patagonia Argentina y se agregaran mas etapas en Chile, pero por suerte la vuelta de Rally Dakar 2010 se hace por la provincia mas fanática del rally.&lt;br /&gt;Bueno pequepost, nada que ver con tecno, mas o menos. Tendrían que haber visto lo que eran estas maquinas.&lt;br /&gt;Hasta Luego.&lt;br /&gt;&lt;br /&gt;Post/Post&lt;br /&gt;Probando a blogsearch no se tomen este post en serio&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-1916638116116286969?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/1916638116116286969/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=1916638116116286969' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1916638116116286969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/1916638116116286969'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/02/dakar-2010-argentina-otra-vez-por-aqui.html' title='Dakar 2010 Argentina, otra vez por aquí'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-4137912051363462167</id><published>2009-02-25T00:51:00.033-02:00</published><updated>2009-03-28T19:05:11.791-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Los foros para Webmasters de Google involucionaron</title><content type='html'>&lt;p&gt;Esa es mi opinión!, hace pocos días como muchos de ustedes se habrán dado cuenta los foros que antes se alojaban en los Grupos de Google –&amp;gt; Foro de Ayuda de Adsense y Foro de Webmasters de Google cambiaron de sistema y se mudaron a una nueva ubicación dentro del portal.&lt;br /&gt;Este nuevo sistema a mi entender es una copia del sistema de Yahoo Respuestas pero con el agregado de que hay usuarios considerados colaboradores que van tildando por ahí “esta respuesta contesta la pregunta” mientras que luego de ese clic de alguien que aparentemente sabe del todos los temas el resto de los usuarios no puede contestar. O mejor dicho: puede contestar pero que no se moleste en poner algo, la pregunta formulada automáticamente pasa a tener el target de “con respuesta” y el resto de las respuestas no se pueden ver sin abrir el resto.&lt;br /&gt;Esto ya no puede ser considerado un foro, un foro es un lugar de debate donde obviamente se pueden hacer consultas pero tambien se tendría que poder iniciar un theard donde las personas opinen.&lt;br /&gt;He realizado tres preguntas desde que se mudo totalmente el sistema, dos en Adsense y una en Webmasters, en ninguna de las dos logre que me respondieran algo concreto, seguramente en la versión anterior tampoco lo hubiera conseguido, pero teniendo 15 o 20 respuestas a mi pregunta hubiera podido llegar a una conclusión por mi parte, e incluso hacerles saber al resto de los usuarios cual era mi conclusión. En la nueva versión recibí 4 respuestas y automáticamente un colaborador de Google anoto como mis consultas con respuestas. Dos de esas respuestas eran del propio colaborador que lo único que hacia era enlazar a secciones fijas de la ayuda de Adsense. Prefiero chatear con el boot de Encarta antes que ver como mis elaboradas preguntas que quizás ni siquiera fueron leídas por alguien ya tienen una respuesta.&lt;br /&gt;Hay muchos espacios de discusión en internet sobre estos temas, pero este era el único oficial donde podíamos interactuar con empleados del mismo Google.&lt;br /&gt;Creo que mi participación en estos sectores de Google disminuirá bastante a partir de estos acontecimientos.&lt;br /&gt;&lt;br /&gt;Quiero compartir con ustedes una pregunta que hice allí para que vean con sus propios ojos lo feo que se pusieron los foros.&lt;br /&gt;&lt;br /&gt;Mi pregunta fue:&lt;/p&gt;&lt;h6&gt;Pregunta: Me aconsejan redireccionar ?&lt;br /&gt;Hola tengo 3 webs que son muy similares pero que quiero apuntar a distintos mercados, sin embargo desde que abrí la que apunta a España tuve una baja del 60% de mis visitas por Google las webs en cuestión son www.idmovil.com.ar www.idmovil.com y www.idmovil.es , hace un tiempo me dijeron que me convenía redireccionar todo a una sola web que creo que seria la original y que tiene mas secciones www.idmovil.com.ar, les parece que eso revertirá un poco la baja en visitas provenientes de google? en este momento casi no dan ganancias creo que no sería una muy mala jugada aplicar 301 al .com y al .es pero me gustaría tener mas opiniones...&lt;/h6&gt;&lt;p&gt;Una respuesta bastante interesante:&lt;br /&gt;&lt;/p&gt;&lt;h6&gt;Una de los beneficios del redireccionamiento, es no caer en el contenido duplicado, y puedas manejar varios dominios a uno solo.&lt;br /&gt;El hecho de que la necesidad del posicionamiento, te lleve a posicionar las tres, ha de ser conveniente que lo manejes con enlaces originarios de cada país a cada dominio en particular.&lt;br /&gt;Por ejemplo enlaces con anchor text de sitios argentinos al dominio argentino, enlaces españoles al sitio español.&lt;br /&gt;Y evaluar ... si es que compites directamente con sitios locales ... o sea sitios .es con tu dominio .es redireccionando al .ar y ahí juegan muchos los contenidos.&lt;br /&gt;Es solamente un punto de vista.&lt;br /&gt;Un gran abrazote&lt;br /&gt;Gerardo&lt;/h6&gt;&lt;p&gt;Hasta allí estaba contento, esperaba recibir mas concejos sobre la redirección 301 en mi sitio, alguna experiencia de otro webmaster, alguien que me indicara mas exactamente que debería hacer y tambien otro tipo de feedback que tiene esto: quizás a mi no se me halla ocurrido preguntar algo que era obvio pero otro usuario que conociera menos del tema podría cambiar la perspectiva de la discusión y llegar por un camino alternativo a la conclusión mas acertada.&lt;br /&gt;Pero NO! enseguida paso un súper usuario y marco esa respuesta como la que contestaba a mi pregunta, y ya nadie mas contesto sobre el debate, ustedes leyeron en algún lugar si el consejo era si o no?&lt;br /&gt;Bueno me despido y les dejo los enlaces a ambos foros para que si no son habituales de ellos los visiten, desgraciadamente siguen siendo la única referencia oficial e interactiva.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.google.com/support/forum/p/webmasters?hl=es" target="_blank"&gt;http://www.google.com/support/forum/p/webmasters?hl=es&lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/adsense-help-es?hl=en" target="_blank"&gt;http://groups.google.com/group/adsense-help-es?hl=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Votar este post en Bitacoras.com:&lt;br /&gt;&lt;a href="http://bitacoras.com/votar/anotacion/blogterrier.blogspot.com/2009/02/los-foros-para-webmasters-de-google.html" target="_blank"&gt;http://bitacoras.com/votar/anotacion/blogterrier.blogspot.com/2009/02/los-foros-para-webmasters-de-google.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-4137912051363462167?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/4137912051363462167/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=4137912051363462167' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4137912051363462167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4137912051363462167'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/02/los-foros-para-webmasters-de-google.html' title='Los foros para Webmasters de Google involucionaron'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-27374054199645027</id><published>2009-02-23T13:03:00.030-02:00</published><updated>2009-03-28T16:10:49.001-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogs'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Pings XML-RPC con PHP y en Castellano sin WordPress</title><content type='html'>&lt;p&gt;Hola, en estos días estuve preparando el sistema para que mi blogmap enviara pings a los distintos directorios como weblogs.com, bitacoras.com, technoray, blogalaxia.com, etc, etc.&lt;br /&gt;Estos pings le avisan al directorio en cuestión que mi feed.xml se ha actualizado y que pueden pasar a recoger informacion sobre los nuevos post, entre ellos tambien es el blogsearch de Google, en pocos minutos nuestros post pueden aparecer en Google!!&lt;/p&gt;&lt;br /&gt;&lt;h6&gt;Mi blogmap no es ni wordpress, ni blogger, movable type, es mío.&lt;br /&gt;Solo que utilizo una plantilla de WP por que me ha quedado linda, aclaración: no es este blog!&lt;/h6&gt;&lt;br /&gt;&lt;p&gt;Bueno estaba tratando de hacer eso y no encontraba la forma, no la encontraba por que de ingles no se tanto y cuando se trata de comentarios de código el translate de google hace desastres, entonces se me ocurrió agarrar el código de la funcion weblog_ping() de WP para modificarla un poco y hacer mis propios envíos sin depender de ningún otro servicio.&lt;br /&gt;Qué descubri? que prácticamente no hay ninguna documentación en castellano sobre los pings, hay miles de post que hablan de la diferencia entre pings y trackbacks(pero para eso basta con wikipedia).&lt;br /&gt;La pagina mas interesante que encontré intentaba hacer lo mismo que yo y entre varios bloggers aparentemente no habían llegado a ninguna conclusión, les paso la dirección del post para que saquen sus conclusiones &lt;a href="http://javieraroche.com/2006/07/26/ping-via-xml-rpc/" target="_blank"&gt;Ping vía XML-RPC - Javier Aroche&lt;/a&gt;. Sin embargo allí nació mi primera idea de modificar la funcion weblog_ping() y mas o menos alguna noción mas técnica de cual era el objetivo de todo esto.&lt;br /&gt;Entonces empecé a navegar por el código de wordpress hasta que di con esta funcion ubicada en el archivo:&lt;br /&gt;&lt;a href="http://lab.yukei.net/wp-code/" target="_blank"&gt;/wp-includes/comment.php&lt;/a&gt; -&amp;gt; line 1508&lt;/p&gt;&lt;br /&gt;&lt;h5&gt;&amp;lt;?php&lt;br /&gt;function weblog_ping($server = '', $path = '') {&lt;br /&gt;global $wp_version;&lt;br /&gt;include_once (ABSPATH . WPINC . '/class-IXR.php');&lt;br /&gt;// using a timeout of 3 seconds should be enough to cover slow servers&lt;br /&gt;$client = new IXR_Client($server, ((!strlen(trim($path)) ('/' == $path)) ? false : $path));&lt;br /&gt;$client-&amp;gt;timeout = 3;&lt;br /&gt;$client-&amp;gt;useragent .= ' -- WordPress/'.$wp_version;&lt;br /&gt;&lt;br /&gt;// when set to true, this outputs debug messages by itself&lt;br /&gt;$client-&amp;gt;debug = false;&lt;br /&gt;$home = trailingslashit( get_option('home') );&lt;br /&gt;if ( !$client-&amp;gt;query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping&lt;br /&gt;$client-&amp;gt;query('weblogUpdates.ping', get_option('blogname'), $home);&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/h5&gt;&lt;br /&gt;&lt;p&gt;Esta funcion de WP es la encargada de enviar los pings cada vez que nosotros posteamos, WP envía pings a las direcciones que estén cargadas en la lista de Tablero&amp;gt;Opciones&amp;gt;Escritura y después se van abajo de todo:&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_QPVnXEzDdCg/SaK6rSDtH5I/AAAAAAAAAsA/o6NIwCquT0A/s1600-h/pingwp%5B3%5D.gif"&gt;&lt;img title="pingwp" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="229" alt="pingwp" src="http://lh3.ggpht.com/_QPVnXEzDdCg/SaK6sH7UdDI/AAAAAAAAAsE/T-d8cKsaWy4/pingwp_thumb%5B1%5D.gif?imgmax=800" width="384" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mas abajo en este mismo post les pasare la lista de urls para hacer ping, ya que si están leyendo esto pero tienen WP tambien les puede servir.&lt;br /&gt;Bueno de allí en mas empecé a editar la funcion como mejor me pareció.&lt;br /&gt;Las variables a cambiar son las que corresponden a la versión de Wordpress, las que corresponden a los datos del blog, y la url para hacer ping debe venir de otro lugar.&lt;br /&gt;El resultado de esta modificación fue el siguiente:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h5&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;function weblog_ping($server = '', $path = '')&lt;br /&gt;{&lt;br /&gt;include_once ('class-IXR.php');&lt;br /&gt;// using a timeout of 3 seconds should be enough to cover slow servers&lt;br /&gt;$client = new IXR_Client($server, ((!strlen(trim($path)) ('/' == $path)) ? false : $path));&lt;br /&gt;$client-&amp;gt;timeout = 3;&lt;br /&gt;$client-&amp;gt;useragent .= ' -- Blogturismo The Blogmap';&lt;br /&gt;// when set to true, this outputs debug messages by itself&lt;br /&gt;$client-&amp;gt;debug = false;&lt;br /&gt;$home = 'http://blogturismo.com.ar/';&lt;br /&gt;if ( !$client-&amp;gt;query('weblogUpdates.extendedPing', 'Blogturismo Argentina Mapa de Turismo', $home, 'http://blogturismo.com.ar/feed.xml' ) )&lt;br /&gt;$client-&amp;gt;query('weblogUpdates.ping', 'Blogturismo Argentina Mapa de Turismo', 'http://blogturismo.com.ar/');&lt;br /&gt;else&lt;br /&gt;echo "Error: ".$server."&lt;br /&gt;";&lt;br /&gt;}&lt;br /&gt;weblog_ping('http://rpc.technorati.com/rpc/ping');&lt;br /&gt;?&amp;gt;&lt;/h5&gt;&lt;br /&gt;&lt;p&gt;Esta funcion modificada de WP envía pings de manera correcta, por ahora envía un ping, he ingresado las variables como constantes literales adentro de la funcion, lo hago así por que mi idea no es hacer un servicio como el de &lt;a title="http://pingomatic.com/" href="http://pingomatic.com/" target="_blank"&gt;http://pingomatic.com/&lt;/a&gt; para que cualquiera lo use, si no que este código lo voy a ingresar en el archivo php que realice cambios en el sitemap. O quizás se pueda implementar simplemente como un archivo único llamado ping.php, cada vez que lo ejecutemos en el navegador avisara a todos los servicios que tengamos cargados que hay algo nuevo.&lt;br /&gt;Finalmente este es el código copy/paste para que tengan su propio sistema de notificación:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h5&gt;&amp;lt;?php&lt;br /&gt;function weblog_ping($server = '', $path = '')&lt;br /&gt;{&lt;br /&gt;include_once ('class-IXR.php');&lt;br /&gt;$client = new IXR_Client($server, ((!strlen(trim($path)) ('/' == $path)) ? false : $path));&lt;br /&gt;$client-&amp;gt;timeout = 3;&lt;br /&gt;$client-&amp;gt;useragent .= 'Blogturismo The Blogmap';&lt;br /&gt;$client-&amp;gt;debug = false;&lt;br /&gt;if ( !$client-&amp;gt;query('weblogUpdates.extendedPing', 'Titulo Blog', 'http://miblog.com/', 'http://miblog.com/feed.xml' ) )&lt;br /&gt;{&lt;br /&gt;$client-&amp;gt;query('weblogUpdates.ping', Titulo Blog', 'http://miblog.com');&lt;br /&gt;echo $server."----------------------OK&amp;lt;br&amp;gt;";&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;echo $server."----------------------NOT&amp;lt;br&amp;gt;";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;weblog_ping('http://xml-rpc.meaviso.com/ping.php');&lt;br /&gt;weblog_ping('http://rpc.pingomatic.com/');&lt;br /&gt;weblog_ping('http://rpc.technorati.com/rpc/ping');&lt;br /&gt;weblog_ping('http://ping.blogalaxia.com');&lt;br /&gt;weblog_ping('http://blogsearch.google.com/ping/RPC2');&lt;br /&gt;weblog_ping('http://1470.net/api/ping');&lt;br /&gt;weblog_ping('http://api.feedster.com/ping');&lt;br /&gt;weblog_ping('http://api.feedster.com/ping.php');&lt;br /&gt;weblog_ping('http://api.moreover.com/ping');&lt;br /&gt;weblog_ping('http://api.moreover.com/RPC2');&lt;br /&gt;weblog_ping('http://api.my.yahoo.com/RPC2');&lt;br /&gt;weblog_ping('http://api.my.yahoo.com/rss/ping');&lt;br /&gt;weblog_ping('http://bblog.com/ping.php');&lt;br /&gt;weblog_ping('http://bitacoras.net/ping');&lt;br /&gt;weblog_ping('http://blogdb.jp/xmlrpc');&lt;br /&gt;weblog_ping('http://blog.goo.ne.jp/XMLRPC');&lt;br /&gt;weblog_ping('http://blogsearch.google.com/ping/RPC2');&lt;br /&gt;weblog_ping('http://blogmatcher.com/u.php');&lt;br /&gt;weblog_ping('http://bulkfeeds.net/rpc');&lt;br /&gt;weblog_ping('http://coreblog.org/ping/');&lt;br /&gt;weblog_ping('http://mod-pubsub.org/kn_apps/blogchatt');&lt;br /&gt;weblog_ping('https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast');&lt;br /&gt;weblog_ping('http://ping.amagle.com/');&lt;br /&gt;weblog_ping('http://ping.bitacoras.com');&lt;br /&gt;weblog_ping('http://ping.bloggers.jp/rpc/');&lt;br /&gt;weblog_ping('http://ping.blogmura.jp/rpc/');&lt;br /&gt;weblog_ping('http://ping.blo.gs/');&lt;br /&gt;weblog_ping('http://ping.cocolog-nifty.com/xmlrpc');&lt;br /&gt;weblog_ping('http://pinger.blogflux.com/rpc/');&lt;br /&gt;weblog_ping('http://ping.exblog.jp/xmlrpc');&lt;br /&gt;weblog_ping('http://ping.feedburner.com');&lt;br /&gt;weblog_ping('http://ping.myblog.jp');&lt;br /&gt;weblog_ping('http://pingqueue.com/rpc/');&lt;br /&gt;weblog_ping('http://ping.blogg.de/');&lt;br /&gt;weblog_ping('http://ping.rootblog.com/rpc.php');&lt;br /&gt;weblog_ping('http://ping.syndic8.com/xmlrpc.php');&lt;br /&gt;weblog_ping('http://ping.weblogalot.com/rpc.php');&lt;br /&gt;weblog_ping('http://ping.weblogs.se/');&lt;br /&gt;weblog_ping('http://rcs.datashed.net/RPC2/');&lt;br /&gt;weblog_ping('http://rpc.blogbuzzmachine.com/RPC2');&lt;br /&gt;weblog_ping('http://rpc.blogrolling.com/pinger/');&lt;br /&gt;weblog_ping('http://rpc.britblog.com/');&lt;br /&gt;weblog_ping('http://rpc.icerocket.com:10080/');&lt;br /&gt;weblog_ping('http://rpc.newsgator.com/');&lt;br /&gt;weblog_ping('http://rpc.pingomatic.com/');&lt;br /&gt;weblog_ping('http://rpc.tailrank.com/feedburner/RPC2');&lt;br /&gt;weblog_ping('http://rpc.technorati.com/rpc/ping');&lt;br /&gt;weblog_ping('http://rpc.weblogs.com/RPC2');&lt;br /&gt;weblog_ping('http://rpc.wpkeys.com/');&lt;br /&gt;weblog_ping('http://services.newsgator.com/ngws/xmlrpcping.aspx');&lt;br /&gt;weblog_ping('http://signup.alerts.msn.com/alerts-PREP/submitPingExtended.doz');&lt;br /&gt;weblog_ping('http://topicexchange.com/RPC2');&lt;br /&gt;weblog_ping('http://trackback.bakeinu.jp/bakeping.php');&lt;br /&gt;weblog_ping('http://www.a2b.cc/setloc/bp.a2b');&lt;br /&gt;weblog_ping('http://www.bitacoles.net/ping.php');&lt;br /&gt;weblog_ping('http://www.blogdigger.com/RPC2');&lt;br /&gt;weblog_ping('http://www.blogoole.com/ping/');&lt;br /&gt;weblog_ping('http://www.blogoon.net/ping/');&lt;br /&gt;weblog_ping('http://www.blogpeople.net/servlet/weblogUpdates');&lt;br /&gt;weblog_ping('http://www.blogroots.com/tb_populi.blog?id=1');&lt;br /&gt;weblog_ping('http://www.blogshares.com/rpc.php');&lt;br /&gt;weblog_ping('http://www.blogsnow.com/ping');&lt;br /&gt;weblog_ping('http://www.blogstreet.com/xrbin/xmlrpc.cgi');&lt;br /&gt;weblog_ping('http://www.holycowdude.com/rpc/ping/');&lt;br /&gt;weblog_ping('http://www.lasermemory.com/lsrpc/');&lt;br /&gt;weblog_ping('http://www.imblogs.net/ping/');&lt;br /&gt;weblog_ping('http://www.mod-pubsub.org/kn_apps/blogchatter/ping.php');&lt;br /&gt;weblog_ping('http://www.newsisfree.com/RPCCloud');&lt;br /&gt;weblog_ping('http://www.newsisfree.com/xmlrpctest.php');&lt;br /&gt;weblog_ping('http://www.popdex.com/addsite.php');&lt;br /&gt;weblog_ping('http://www.snipsnap.org/RPC2');&lt;br /&gt;weblog_ping('http://www.weblogues.com');&lt;br /&gt;weblog_ping('http://xmlrpc.blogg.de');&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/h5&gt;&lt;br /&gt;&lt;p&gt;Las variables que deben cambiar son: $client-&amp;gt;useragent pónganle el nombre que mas les guste, y en $client-&amp;gt;query deben poner en este orden el nombre del blog, la dirección del home y la dirección del feed. Claro hay que tener un feed validado!! Ojo son dos líneas donde hay que modificar el query.&lt;br /&gt;Me perdonaran la brutalidad de no incluir las llamadas a weblog_ping en un bucle, pero en el momento me pareció mas rápido agarrar la lista de urls y hacer un replace text con el bloc de notas. Ustedes podrían guardar las urls en una tabla de MySQL para que quede mas lindo.&lt;br /&gt;La lista de url pings se puede agrandar o achicar según sepan que hay un servidor nuevo o deseen quitarse de alguno.&lt;br /&gt;Por ultimo les digo que esta web tarda bastante en cargarse así que no se preocupen si no responde por un minuto o dos, mientras indique que aun se esta cargando esta todo perfecto, les mostrara los resultados al final, se puede jugar con la variable $client-&amp;gt;timeout para darle mas tiempo a los servidores para que respondan o para acortar el tiempo de espera de la pagina ping.php.&lt;br /&gt;Este script sirve para cualquier blog que tenga feed, no solo un WP, tambien un blogger(blogspot) o cualquiera, incluso para otros conceptos de webs 2.0, tal es el caso de la mía que no es exactamente un blog &lt;a href="http://blogturismo.com.ar/" target="_blank"&gt;Blogturismo Argentina&lt;/a&gt;.&lt;br /&gt;Me olvidaba el archivo 'class-IXR.php' esta en la misma carpeta que el archivo comment.php, si tienen alguna versión de WP lo sacan de allí si no lo pueden copiar de aquí: &lt;a title="http://lab.yukei.net/wp-includes/comment.php.html" href="http://lab.yukei.net/wp-code/" target="_blank"&gt;http://lab.yukei.net/wp-code/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo prometido, esta lista de urls para hacer ping esta en muchos lugares de la blogosfera y se agregan al panel en donde les explique mas arriba, ver imagen donde esta pingomatic.com. No se si será mas efectiva que utilizar solo pingomatic, si van a la web verán que tienen una interesante lista de servicios y que debe estar bien actualizada.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h6&gt;http://1470.net/api/ping&lt;br /&gt;http://api.feedster.com/ping&lt;br /&gt;http://api.moreover.com/ping&lt;br /&gt;http://api.moreover.com/RPC2&lt;br /&gt;http://api.my.yahoo.com/RPC2&lt;br /&gt;http://api.my.yahoo.com/rss/ping&lt;br /&gt;http://bblog.com/ping.php&lt;br /&gt;http://bitacoras.net/ping&lt;br /&gt;http://blog.goo.ne.jp/XMLRPC&lt;br /&gt;http://blogdb.jp/xmlrpc&lt;br /&gt;http://blogmatcher.com/u.php&lt;br /&gt;http://blogsearch.google.com/ping/RPC2&lt;br /&gt;http://bulkfeeds.net/rpc&lt;br /&gt;http://coreblog.org/ping/&lt;br /&gt;http://mod-pubsub.org/kn_apps/blogchatt&lt;br /&gt;http://ping.amagle.com/&lt;br /&gt;http://ping.bitacoras.com&lt;br /&gt;http://ping.blo.gs/&lt;br /&gt;http://ping.blogalaxia.com&lt;br /&gt;http://ping.bloggers.jp/rpc/&lt;br /&gt;http://ping.blogmura.jp/rpc/&lt;br /&gt;http://ping.cocolog-nifty.com/xmlrpc&lt;br /&gt;http://ping.exblog.jp/xmlrpc&lt;br /&gt;http://ping.fakapster.com/rpc&lt;br /&gt;http://ping.feedburner.com&lt;br /&gt;http://ping.myblog.jp&lt;br /&gt;http://ping.rootblog.com/rpc.php&lt;br /&gt;http://ping.syndic8.com/xmlrpc.php&lt;br /&gt;http://ping.weblogalot.com/rpc.php&lt;br /&gt;http://ping.weblogs.se/&lt;br /&gt;http://ping.wordblog.de/&lt;br /&gt;http://pinger.blogflux.com/rpc&lt;br /&gt;http://pingoat.com/goat/RPC2&lt;br /&gt;http://rcs.datashed.net/RPC2/&lt;br /&gt;http://rpc.blogbuzzmachine.com/RPC2&lt;br /&gt;http://rpc.blogrolling.com/pinger/&lt;br /&gt;http://rpc.britblog.com&lt;br /&gt;http://rpc.icerocket.com:10080/&lt;br /&gt;http://rpc.newsgator.com/&lt;br /&gt;http://rpc.pingomatic.com&lt;br /&gt;http://rpc.tailrank.com/feedburner/RPC2&lt;br /&gt;http://rpc.technorati.com/rpc/ping&lt;br /&gt;http://rpc.weblogs.com/RPC2&lt;br /&gt;http://rpc.wpkeys.com&lt;br /&gt;http://services.newsgator.com/ngws/xmlrpcping.aspx&lt;br /&gt;http://topicexchange.com/RPC2&lt;br /&gt;http://trackback.bakeinu.jp/bakeping.php&lt;br /&gt;http://www.a2b.cc/setloc/bp.a2b&lt;br /&gt;http://www.bitacoles.net/ping.php&lt;br /&gt;http://www.bitadir.com/ping.php&lt;br /&gt;http://www.blogdigger.com/RPC2&lt;br /&gt;http://www.blogoole.com/ping/&lt;br /&gt;http://www.blogoon.net/ping/&lt;br /&gt;http://www.blogpeople.net/servlet/weblogUpdates&lt;br /&gt;http://www.blogroots.com/tb_populi.blog?id=1&lt;br /&gt;http://www.blogshares.com/rpc.php&lt;br /&gt;http://www.blogsnow.com/ping&lt;br /&gt;http://www.blogstreet.com/xrbin/xmlrpc.cgi&lt;br /&gt;http://www.lasermemory.com/lsrpc/&lt;br /&gt;http://www.mod-pubsub.org/kn_apps/blogchatter/ping.php&lt;br /&gt;http://www.newsisfree.com/RPCCloud&lt;br /&gt;http://www.newsisfree.com/xmlrpctest.php&lt;br /&gt;http://www.popdex.com/addsite.php&lt;br /&gt;http://www.snipsnap.org/RPC2&lt;br /&gt;http://www.weblogues.com/RPC/&lt;br /&gt;http://xmlrpc.blogg.de&lt;br /&gt;http://xping.pubsub.com/ping/&lt;/h6&gt;&lt;br /&gt;&lt;p&gt;Bueno espero que les encante el post y le encuentren utilidad, acepto trackbacks en esta entrada, aunque o todavía no recuerdo la url, creo que aparecerá por allí mas abajo.&lt;br /&gt;No sabes lo que es un trackback? en la próxima les explico y hacemos nuestro propio sistema para enviarlos sin tener WP.&lt;br /&gt;Saludos, blogterrier.&lt;br /&gt;&lt;br /&gt;Post?Post&lt;br /&gt;He implementado la funcion para avisar de este post, tarde solo 3 minutos en estar en Google!!&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_QPVnXEzDdCg/SaMwht2QP_I/AAAAAAAAAsM/I8uGV3YQ3ns/s1600-h/3minutos.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5306138141773545458" style="WIDTH: 380px; CURSOR: hand; HEIGHT: 216px" alt="" src="http://4.bp.blogspot.com/_QPVnXEzDdCg/SaMwht2QP_I/AAAAAAAAAsM/I8uGV3YQ3ns/s400/3minutos.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Pueden votar este post en Bitacoras.com, que tambien fue notificado por la funcion en php en: &lt;a href="http://bitacoras.com/votar/anotacion/blogterrier.blogspot.com/2009/02/pings-xml-rpc-con-php-y-en-castellano.html" target="_blank"&gt;http://bitacoras.com/votar/anotacion/blogterrier.blogspot.com/2009/02/pings-xml-rpc-con-php-y-en-castellano.html&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-27374054199645027?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/27374054199645027/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=27374054199645027' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/27374054199645027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/27374054199645027'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/02/pings-xml-rpc-con-php-y-en-castellano.html' title='Pings XML-RPC con PHP y en Castellano sin WordPress'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_QPVnXEzDdCg/SaK6sH7UdDI/AAAAAAAAAsE/T-d8cKsaWy4/s72-c/pingwp_thumb%5B1%5D.gif?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-3133343589518168468</id><published>2009-02-18T10:35:00.001-02:00</published><updated>2009-03-27T20:22:33.130-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Colgado de La Palmera'/><title type='text'>Sequoia ¿El Villano de Terminator?</title><content type='html'>Estoy aburrido en el trabajo y me puse a leer el suplemento de tecnologia del diario La Nacion.&lt;br /&gt;Empeze a leer la interesante nota sobre las supercomputadoras que hay en funcionamiento y la que IBM esta preparando para darle ON en el año 2012, se trata de Sequoia, un gigante que en la era de los microchips ocupara mas de 300 metros cuadrados!&lt;br /&gt;La capacidad de calculo de Sequoia es de 20 petaflops, llegado a este punto debo ir a wikipedia a ver que quiere decir petaflops: 20 petaflops equivale a 20.000 billones de calculos por segundo.&lt;br /&gt;Sinceramente es muy impactante saber que se esta diseñando un ordenador con smejeante capacidad de calculo, una demostracion mas del ingenio.&lt;br /&gt;Continunando con la nota resulta que &lt;strong&gt;Sequoia serà utilizada por el Departamento de Energia de Estados Unidos para supervisar el arsenal nuclear de ese pais&lt;/strong&gt;.&lt;br /&gt;Una supercomputadora de 200.000 nuecleos sera la encargada de llevar la cuenta de las bombas atomicas de Estados Unidos.&lt;br /&gt;Bueno la alusion a la pelicula Terminator no es exacta, ya que alli es un programa de inteligencia artifical y no una supercomputadora quien empieza la guerra, sin embargo quien no puede dejar de sentir algo, admiracion, temor, por semejante logro de ingenieria que se viene para el 2012.&lt;br /&gt;&lt;br /&gt;Nos vemos en la proxima jornada de trabajo aburrido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-3133343589518168468?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/3133343589518168468/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=3133343589518168468' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3133343589518168468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/3133343589518168468'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/02/sequoia-el-villano-de-terminator.html' title='Sequoia ¿El Villano de Terminator?'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-7034969750579551782</id><published>2009-02-18T07:56:00.001-02:00</published><updated>2009-03-27T20:22:51.620-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Maps'/><title type='text'>Webs Generacion Maps</title><content type='html'>Desde que en argentina se libero Google Maps en formato mapa carretero han empezado a aparecer decenas de webws que trabajan con un "mapa de fondo", entre ellas estan la popular Mapa de la Inseguridad &lt;a href="http://www.mapadelainseguridad.com/"&gt;http://www.mapadelainseguridad.com/&lt;/a&gt;, y la geek &lt;a href="http://www.mapadefiesta.com/"&gt;http://www.mapadefiesta.com/&lt;/a&gt; pero esta vez quiero mostrar una nueva que me ha maravillado con tres cosas, la calidad del diseño, la calidad de la programacion de fondo cuidada hasta el ultimo detalle y el potencial de su diseñador SEO.&lt;br /&gt;Esta web es el &lt;a href="http://www.mapadelabuenaonda.com/"&gt;Mapa de La Buena Onda&lt;/a&gt;, &lt;a href="http://www.mapadelabuenaonda.com/"&gt;http://www.mapadelabuenaonda.com/&lt;/a&gt; Esta aplicacion parece ademas estar integrada con Wordpress.&lt;br /&gt;Alli cualquier usuario puede ingresar y cargar su propio lugar Buena Onda, un ciber, una farmacia, un camping, su casa, en fin lo que el usuario desee.&lt;br /&gt;Y adjuntar una imagen a su lugar buena onda.&lt;br /&gt;Ademas existen los llamados Megapost! que entran en el feed del sitio y son distribuidos por Technoraty, claro que para hacer un Megapost! hay que esmerarse un poco, o tener un buen lugar.&lt;br /&gt;Los invito a visitar los ultimos Megapost! del mapa:&lt;br /&gt;&lt;a href="http://www.mapadelabuenaonda.com/mapa221.htm"&gt;La Buena Onda del Tren de Las Sierras&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mapadelabuenaonda.com/mapa212.htm"&gt;Abuelo de Dinosaurios en El Valle de la Luna&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mapadelabuenaonda.com/mapa208.htm"&gt;Cometa de dos colas se acerca a la Tierra&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mapadelabuenaonda.com/mapa207.htm"&gt;Deep Purple en Argentina - Cosquin Rock&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mapadelabuenaonda.com/mapa205.htm"&gt;Bosque de Tabaquillos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bueno espero que esta iniciativa les cuase la misma impresion que a mi&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-7034969750579551782?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/7034969750579551782/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=7034969750579551782' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/7034969750579551782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/7034969750579551782'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2009/02/webs-generacion-maps.html' title='Webs Generacion Maps'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-4706568901441084942</id><published>2008-12-17T17:27:00.001-02:00</published><updated>2009-03-27T20:23:26.529-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>Gmail y Google, aveces me dan miedo</title><content type='html'>Hoy estaba revisando mi cuenta de gmail y vi un link que decia "Consigue un Gmail mas rapido" hice clic y me envio a una pagina de la ayuda de Gmail:&lt;br /&gt;&lt;a href="http://mail.google.com/support/bin/answer.py?&amp;amp;answer=107906&amp;amp;hl=es"&gt;http://mail.google.com/support/bin/answer.py?&amp;amp;answer=107906&amp;amp;hl=es&lt;/a&gt;&lt;br /&gt;En este pequeño articulo nos explican que navegadores hacen que Gmail funcione mas rapido. Recomiendan utilizar Google Chrome o Firefox 3 y ofrecen los links de descarga, pero haciendo una importante aclaracion "hay una versión más rápida de Internet Explorer en desarrollo, IE8, que se encuentra disponible en versión &lt;a style="COLOR: rgb(0,0,204)" onclick="javascript:urchinTracker('/support/outgoing/browseradoption/IE8')" href="http://www.microsoft.com/spain/windows/products/winfamily/ie/beta/default.mspx"&gt;beta&lt;/a&gt;."&lt;br /&gt;&lt;br /&gt;Estoy acostumbrado a la filosofia Google, es mas me considero un desarrollador web que diseña con estilo Google(hablando de graficos claro), tengo cuentas de Adsense, Gmail, Blogger, Analitycs, Picassa, Alertas, Herramientas de Webmaster, Grupos, creo que no me falta ningun servicio.&lt;br /&gt;&lt;br /&gt;Decia que estoy acostumbrado a la filosofia Google y la celebro, Google me ofrece hasta una salida economica a traves de Adsense, sin embargo no deja de asombrarme cada gesto nuevo que descubro de este Dios, si eso es lo que me asusta.&lt;br /&gt;&lt;br /&gt;La forma en que teniendo un navegador en clara competencia con IE como lo es Chrome, siga promocionando a Firefox y al mismo IE. Claro que esto esta en la pagina de ayuda a Gmail y es indiscutible que esto deberia estar. Me gustaria encontrar lo mismo en una pagina de ayuda de Hotmail(Es muy cierto que la nueva version de Hotmail, esa blanca, funciona mejor con Chrome).&lt;br /&gt;&lt;br /&gt;Otro gesto que "descubri" esta semana fue en los foros de Adsense, donde un editor preguntaba por que Google no favorece a los resultados de busqueda que utilicen Adsense, y digo que lo "descubri" por que nunca se me habia ocurrido pensar semejante aberracion.&lt;br /&gt;&lt;br /&gt;Muchos internautas avanzados o no tanto se han quedado pensando en el poder que tiene Google, ahora imaginense si este Dios cayera en manos inescrupulosas que no tuvieran ninguna carga en su conciencia en jugar en este mercado de otra manera mas agresiva y capitalista, informaciones falsas, manipulacion, incomunicacion, etc, etc.&lt;br /&gt;&lt;br /&gt;Pienso que Google esta a punto de llegar a un lugar en el mundo que nunca tuvo otra institucion, salvo algun que otro pais norteño.&lt;br /&gt;Ese punto de equilibrio es muy critico.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Un ejemplo muy burdo pero que podria ser reemplazado por otro tipo de informacion:&lt;/strong&gt;&lt;br /&gt;Supongamos que en este momento Google empieza a informar a traves de sus servicios informativos sobre el clima que las temperaturas seran 10° mas altas para los proximos dias.&lt;br /&gt;Que fecto produciria esto en los millones de personas que tienen el gadget del clima en su igoogle.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Otro ejemplo:&lt;/strong&gt;&lt;br /&gt;Que sucede si el superpoderozo Adsense tiene una falla en las estadisticas y estas empiezan a contabilizar un 30% menos de ingresos. Todas las empresas que trabajan de manera activa en internet y tienen como Adsense su fuente de ingresos automaticamente disminuyen un 30% su valor.&lt;br /&gt;&lt;br /&gt;Viva la Competencia!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-4706568901441084942?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/4706568901441084942/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=4706568901441084942' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4706568901441084942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/4706568901441084942'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2008/12/gmail-y-google-aveces-me-dan-miedo.html' title='Gmail y Google, aveces me dan miedo'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-5939682111471758451</id><published>2008-12-17T01:40:00.001-02:00</published><updated>2009-03-27T20:23:42.855-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>Botones nuevos en los resultados de busqueda de Google</title><content type='html'>Esta noche navegando en la web Google se abrio en ingles y buscando casualmente como estaba posicionado este blog descubri estos nuevos botones en los resultados de busqueda de google.&lt;br /&gt;Se trata de botones para votar positiva o negativamente a una pagina. La verdad es que no se si esos botones estan funcionando como una variable mas para ordenar los resultados de busqueda pero me parecio llamativo y le agrega un poco mas de dinamismo al espartano de Google.&lt;br /&gt;Lo unico que sabia de esos botones hasta ahora es que estaban en proceso de experimentacion en Google Labs o algo asi. Pero esta es la primera vez que los veo. Si quieren provarlos pueden hacer clic aqui: &lt;a href="http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3Aes-ar%3AIE-Address&amp;amp;rlz=1I7GGIH_es&amp;amp;q=blogterrier&amp;amp;lr=lang_es"&gt;http://www.google.com/search?hl=en&amp;amp;rls=com.microsoft%3Aes-ar%3AIE-Address&amp;amp;rlz=1I7GGIH_es&amp;amp;q=blogterrier&amp;amp;lr=lang_es&lt;/a&gt;&lt;br /&gt;Otra cosa que descubri en estos resultados fue la viñeta para agregar comentarios sobre la web :&gt; sera que no la habia visto antes??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-5939682111471758451?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/5939682111471758451/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=5939682111471758451' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5939682111471758451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/5939682111471758451'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2008/12/botones-nuevos-en-los-resultados-de.html' title='Botones nuevos en los resultados de busqueda de Google'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-2149243492962909675</id><published>2008-12-05T04:19:00.002-02:00</published><updated>2009-03-27T20:24:38.190-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Algoritmos y Estructuras de Datos Teórico</title><content type='html'>&lt;p&gt;&lt;b&gt;Programación Orientada a Objetos:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es una forma de pensar natural de pensar en relación con el mundo y de programar aprovechando esa capacidad del ser humano.&lt;/p&gt;&lt;p&gt;Se trata de aprovechar la capacidad de abstracción innata en el ser humano.&lt;/p&gt;&lt;p&gt;Los objetos del mundo real se pueden clasificar y reconocer de acuerdo a las características que poseen, mas específicamente las que importen a la hora de desarrollar un sistema.&lt;/p&gt;&lt;p&gt;De acuerdo a estas características los objetos se modelizan en clases y se instancian a partir de ellas.&lt;/p&gt;&lt;p&gt;Además de estos conceptos de abstracción la programación orientada a objetos hace hincapié en los objetos como la parte central de la programación, todo lo que hay en un programa son objetos(los métodos propios de ellos y los mensajes que se envían) a diferencia por ejemplo de la programación estructurada donde lo central son las funciones.&lt;/p&gt;&lt;p&gt;Definición: Es una técnica de programación que utiliza objetos para construir programas. Los programas son colecciones de objetos que se relacionan entre si enviándose mensajes.&lt;/p&gt;&lt;p&gt;Mensajes+Objetos=Programa.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Objeto:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Un objeto se caracteriza por métodos(que hace, como se comporta) y atributos(que es, cuales son sus características).&lt;/p&gt;&lt;p&gt;Los objetos en el entorno de programación de Java pueden ser de 4 tipos: Físicos(autos, persona), Interfaz(Botones, Ventana), Estructuras de Datos(Lista, ArrayList) y Definidos por el usuario(doble abstracción por ejemplo el dato fecha).&lt;/p&gt;&lt;p&gt;&lt;b&gt;Método:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Programa procedimental o funcion que esta asociado a un objeto y solo puede ejecutarse cuando otro objeto le envía un mensaje al primero o al ser llamada por un mensaje enviando a un objeto derivado del primero.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Mensaje:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Petición de un objeto a otro para que haga algo. Por ejemplo: Persona x = new Persona(“Juan”); es un mensaje pasado al objeto para que se inicialice. x.Cargar Altura(1,84); Mensaje enviado al objeto x para que cargue el atributo Altura.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Clase:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Modelo que describe los atributos y métodos de los objetos. Los objetos particulares se instancian tomando como modelo las características y comportamientos de esa clase de objetos.&lt;/p&gt;&lt;p&gt;Por ejemplo la clase Persona posee el comportamiento inicializarse y cargar altura y el atributo nombre y altura.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Características de la POO:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Abstracción:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es la extracción de las propiedades esenciales de un concepto. Implica o permite desechar las características que no son importantes. Implica identificar las propiedades y comportamientos que si caracterizan al objeto. De esta manera se aísla la informacion y permite clasificar los objetos de la realidad en distintas clases o conjuntos. Este concepto de aislamiento esta directamente relacionado con otro concepto de la POO.&lt;/p&gt;&lt;p&gt;&lt;b&gt;El Encapsulamiento:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es aislar la informacion del objeto para que esta solo pueda ser accedida o modificada por los métodos adecuados que son los que perecen al objeto y si conocen la forma en la que el objeto fue concebido.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Herencia:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Permite crear objetos a partir de objetos que contienen métodos y atributos reutilizables. Desde otro punto de vista es la clasificación sucesiva de los conceptos, ósea realizada un clasificación de primer orden se toma una de las clases y se la vuelve a clasificar de acuerdo a nuevas características identificadas como importantes.&lt;/p&gt;&lt;p&gt;Puede existir herencia simple y múltiple pero en Java solo existe la herencia simple, es decir una clase solo puede heredar atributos y métodos de una sola clase.&lt;/p&gt;&lt;p&gt;La forma de establecer una clase padre en java es declarar la clase derivada junto con la palabra &lt;u&gt;extends&lt;/u&gt;. Ejemplo: &lt;u&gt;Class&lt;/u&gt; Estudiante &lt;u&gt;Extends&lt;/u&gt; Persona{}. Mas adelante se puede ver las distintas clases de herencia(Public, Protected, Friendly, etc).&lt;/p&gt;&lt;p&gt;&lt;b&gt;Polimorfismo:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es la capacidad de los objetos de responder al mismo mensaje con reacciones distintas.&lt;/p&gt;&lt;p&gt;Esta directamente relacionado con la herencia ya que la herencia permite la redefinición de métodos de la clase padre.&lt;/p&gt;&lt;p&gt;Para que exista polimorfismo los objetos deben reaccionar de distinta manera así un objeto de la Clase Estudiante y otro de la clase Docente derivada de Persona reaccionaran distinto al método toString(); pero de la misma forma al método jetead(); existirá polimorfismo solo en el primer caso.&lt;br /&gt;Los métodos deben estar redefinidos para cada nueva clase derivada de la clase base.&lt;/p&gt;&lt;p&gt;Resumiendo para que exista polimorfismo debe existir una jerarquía de clases y el método debe estar redefinido para las clases hijas. Además se puede llamar de distintas formas: La primera es declarar objetos de las clases hijas y llamar a los métodos directamente, la segunda es crear un objeto padre y castear ese objeto como si fuera una de las clases hijas(Aunque en verdad se trata de lo mismo no?)&lt;/p&gt;&lt;p&gt;&lt;b&gt;Protección de métodos y atributos&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;public:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Estos metodos y atributos son accesibles a todos los metodos de cualquier clase.&lt;/p&gt;&lt;p&gt;&lt;b&gt;private:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Solo son accesibles desde los metodos de la misma clase en la cual estan definidos.&lt;/p&gt;&lt;p&gt;&lt;b&gt;protected:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;pueden ser accedidos por las clases del mismo paquete y las clases deribadas de la misma clase sean de cualquier paquete.&lt;/p&gt;&lt;p&gt;Se utiliza para ocultar los atributos y metodos a las clases de otros paquetes cuando no existe herencia. Son accesibles a todos los miembros de las clases deribadas.&lt;/p&gt;&lt;p&gt;&lt;b&gt;friendly:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es la definicion por defecto(default) de una clase o atributo a la cual no se le establece un nivel de proteccion, son accesibles para cualquier clase del mismo paquete pero no para la clases de otros paquetes ni aunque sean clases deribadas.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Como se hereda&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Cuando se desea crear una clase que herede de otra se debe escribir la palabra clave extends luego del nombre de la clase y el nombre de la clase de donde se hereda. Esto produce que todos los miembros public y protected sean heredados por la clase derivada. Es como copiar la clase base.&lt;/p&gt;&lt;p&gt;Herencia Publica: Una clase deribada tiene acceso a los miembros publicos y protegidos de la clase base.&lt;/p&gt;&lt;p&gt;Los elementos publicos se heredan como publicos y los protegidos como protegidos.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Dato e Informacion&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Dato&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Datos son los hechos que describen sucesos y entidades. Se representan por medio de simbolos.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Informacion&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Son colecciones de datos en cuanto sean utiles para la persona u ente que diseña la colección.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Estructuras de Control&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es la forma en que se van uniendo las distintas acciones hasta formar una estructura.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Estructura Secuencial&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Es la estructura donde las acciones se ordenan una detras de otra a lo largo de toda la estructura.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Estructuras Selectivas&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Cuando un programa desea especificar dos o mas caminos alternativos o sea que se rompe la estrucutra secuencial. Para decicidir que camino se debe seguir se debe valuar una expresion para saber si cumple con determinada condicion o no lo hace.&lt;/p&gt;&lt;p&gt;Las estructuras selectivas pueden ser:&lt;/p&gt;&lt;p&gt;&lt;u&gt;Simples&lt;/u&gt;: if(si pasa tal cosa), se valua la verdad de una proposicion logica y se realizan las acciones solo si la condicion es verdadera.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Dobles&lt;/u&gt;: if else(si pasa tal cosa, si no pasa), se valua la veracidad de una proposicion logica y si es verdadera se realizan determinadas acciones pero si es falsa se realizan otras.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Multiple&lt;/u&gt;: switch, se valua una variable y según cual se su resultado se eligen entre multiples alternativas o se realiza un accion por defecto.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Estructuras de Control: Bucles&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Cuando se desea que el programa ejecute una determinada secuencia de tareas mas de una vez se debe hace uso de una estrucutra repetitiva o bucle.&lt;/p&gt;&lt;p&gt;Es necesario que estas estructuras tengan una condicion de corte de otra manera seran bucles infinitos.&lt;/p&gt;&lt;p&gt;Para establecer estas condiciones de corte se puede establecer un contador si es que conocemos la cantidad de veces que se debe ejecutar la accion o colocar una bandera(utilizar algun dato como bandera) que nos diga que no es necesario seguir repitiendo el bucle.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Bucle while&lt;/u&gt;: Pregunta si se cumple la condicion de repeticion y si es asi realiza la accion, luego vuelve a preguntar. Se ejecuta 0 o mas veces.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Bucle do while&lt;/u&gt;: Primero realiza la accion y luego pregunta, a partir del primer paso se comporta como un while. Se ejecuta 1 o mas veces.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Bucle for&lt;/u&gt;: El bucle for se utiliza para ejecutar una secuencia de acciones una determinada cantidad de veces, la diferencia con el ciclo while es que ofrece mayor seguridad a la hora de establecer las condiciones de corte, en realidad se trata de un while disfrazado ya que bajo determinadas circuntancias se comportan de la misma manera. El bucle for tiene una zona de inicializacion que se ejecuta una sola vez al inicio del ciclo, una zona de evaluacion donde se evalua si se debe seguir corriendo la secuencia y una zona donde se controla la condicion de corte.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Bucle foreach&lt;/u&gt;: Se utiliza exclusivamente para recorrer elementos de una colección. Ver en ArrayList.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Tipos de Clases&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;public&lt;/u&gt;: significa que puede ser utilizada por cualquier clase en cualquier paquete.&lt;/p&gt;&lt;p&gt;&lt;u&gt;final&lt;/u&gt;: son clases que no pueden ser heredadas por ninguna clase.&lt;/p&gt;&lt;p&gt;&lt;u&gt;abstract&lt;/u&gt;: es una clase que puede ser derivada pero no puede ser instanciada.&lt;/p&gt;&lt;p&gt;Final y Abstract se utilizan como herramientas de seguridad y de diseño en una aplicación.&lt;/p&gt;&lt;p&gt;Ademas la palabra reservada extends para definir una herencia tiene un valor por defecto cuando uno se establece la clase de la que se deriva una clase Java por defecto hereda las caracteristicas de la superclase object.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Colecciones:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Cuando se desarrolla un progrma es habitual que sea necesario agrupar vario objetos del mismo tipo para resolver un problema de una manera ams optima. Estos metaelementos que agrupan a otros se llaman colecciónes y significa exactamente una colección.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Colecciones de Tamaño Fijo: Arreglos.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Cuando conocemos de antemano la cantidad de objetos que el programa debe procesar, o cuando tenemos la cantidad maxima podemso utilizar un tipo de colección muy eficiente llamada arreglo.&lt;/p&gt;&lt;p&gt;Un arreglo es un tipo especial de colección que puede almacenar un numero fijo de elementos.&lt;/p&gt;&lt;p&gt;Los arreglos son capaces de guardar tanto tipos de datos primitivos como objetos.&lt;/p&gt;&lt;p&gt;Los arreglos se encuentran guardados en la memoria asignada a Java de manera ordenada y consecutiva.&lt;/p&gt;&lt;p&gt;La otra caracteristica fundamental es que en java estan integrados al lenguaje y se pueden declarar arrays de objetos o primitivos simplemente con los corchetes.&lt;/p&gt;&lt;p&gt;Matrices: Internamente es una arreglo donde cada uno de sus referencias hacen referencia a otro arreglo. Tambien tienen su sintaxis especial para ser tratadas con java.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Colecciones de Tamaño Flexible:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Se trata de un paquete de clases definidas en java.util que permiten gestionar objetos como si se tratara de una lista. Por ejemplo el ArrayList.&lt;br /&gt;Esta estructura guarda una cantidad arbitraria de referencias que solo es limitada por la cantidad de memoria asignada a JVM. &lt;/p&gt;&lt;p&gt;Los metodos de ArraList son add(), size(), get().&lt;/p&gt;&lt;p&gt;Para recorrerlo se utiliza una objeto Iterator, que se intancia con la referencia al ArrayList, it.hasNext() it.Next().&lt;/p&gt;&lt;p&gt;Un Iterator es un objeto que proporciona funcionalidad para recorrer todos los elementos de una colección.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Casting, hacer un cast:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;new Auto = (Auto)vehiculos; //vehiculo es de la clase Vehiculo&lt;/p&gt;&lt;p&gt;int x= (int) y; //y es float&lt;/p&gt;&lt;p&gt;&lt;b&gt;Paquetes(package):&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es una forma de organizar grupos de clases. Un paquete contiene un conjunto de clases relacionadas bien por finalidad, por ambito o por herencia. Tambien sirven para resolver los nombres de las clases, puede haber clases con mismo nombre mientras se encuentren en distintos paquetes.&lt;/p&gt;&lt;p&gt;Como vimos antes la pertenencia a un determinado paquete tiene relacion con el grado de proteccion de las clases(friendly, protected, private, public).&lt;/p&gt;&lt;p&gt;Para importar paquetes, que las clases formen parte de la aplicación se hace con la palabra reservada import.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Excepciones:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Las excepciones son eventos inesperados que se suceden durante la ejecucion de un programa por ejemplo que un archivo al que se quiera acceder no exista.&lt;/p&gt;&lt;p&gt;Se pueden capturar encerrando el codigo donde puede ocurrir en un bloque try y capturandolas con un bloque catch.&lt;/p&gt;&lt;p&gt;Existen muchos tipos de excepciones pero lo mas basico es definir un excepcion Exception y enviar un error de acuerdo al bloque donde ocurrio.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Busqueda y Ordenamiento&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Algoritmos de Busqueda:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Secuencial:&lt;/u&gt; Se utiliza cuando un array no esta ordenado, se examina elemento por elemento hasta encontrar el que cumpla con las caracteristicas del elemento buscado.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Binaria:&lt;/u&gt; Se aplica a arrays que se encuentran ordenados, se trata de buscar una palabra o numero en una ubicación al azar se puede acertar en el primer intento pero si no se acierta evaluando el elemento que obtuvimos se sabe si el buscado se encuentra a izquierda o derecha y las posibilidades se reducen a la mitad, se trata de aplicar este algoritmo varias veces hasta encontrar el elemento.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Algoritmos de Ordenamiento:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Por ejemplo para aplicar un metodo de busqueda binaria necesitamos que el array este ordenado, pero tambien para presentar una lista de contactos podemos necesitar que esten en orden alfabetico.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Ordenamiento Burbuja:&lt;/u&gt; es el menos eficiente de los metodos de ordenamiento, se trata de hacer tantas pasadas como elementos tenga el array, se comparan elementos de a pares y se intercambian si ocurre que no estan ordenados. De esta menera los valores mayores o menores van burbujeando hasta su posicion ideal.&lt;/p&gt;&lt;p&gt;Cada pasada implica evaluar un elemento menos, por que el elemento mayor siempre termina en la cima del array. El algoritmo no puede establecer si el array se encuentra ordenado desde un principio por lo que el algortimo se ejecuta la misma cantidad de veces.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Ordenamiento por Sacudida:&lt;/u&gt; Este algoritmo presenta mejoras con respecto al burbuja, se trata de hacer pasadas de izquierda a derecha y de derecha a izquierda ordenando los mayores y los menores, ademas se guarda un registro de donde fue la ultimo modificacion de esta manera se hacen menos recorridos y recorridos menores y si el array estuviera ordenado se hace una sola pasada.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Ordenamiento Peinado:&lt;/u&gt; Las mejoras con respecto a los dos algoritmos anteriores es que compara elementos que no son contiguos y va ajustando pasada tras pasada.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Estructuras de Datos Lineales:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Son colecciones ordenadas de objetos almacendas en una lista.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Pilas&lt;/u&gt;: Una pila es una estrucutra similar a la stack manejada por el microprocesador, se trata de una estrucutra LIFO(Last Input First Output) A este tipo de estrucuturas solo se puede acceder por un punto el final, solo se añaden ose quitan por su parte superior.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Colas&lt;/u&gt;: Es similar a la pila pero se varia en la forma que se eliminan elementos FIFO(First Input First Output).&lt;br /&gt;Estas estrucuturas se implementan a traves de listas, estructuras definidas con referencias donde se tiene una referencia raiz o inicio que apunta a otro objeto Nodo apto para continuar una cadena de referencias, si se elimina la referencia raiz se pierden todos los datos.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Recursividad:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Los metodos recursivos son mucho mas utilizados en la programacion estrucuturada pero con algunos cuidados es posible implementarlo en Java por ejemplo para recorrer una lista desde atrás hacia adelante o para recorrer distintas estructuras, tambien sirve para resolver series matematicas como el factorial u otros.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Las condiciones para que un metodo sea recursivo:&lt;/u&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Dentro del cuerpo del metodo debe haber una invocacion a si mismo.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Debe tener una condicion de corte para que no se tranforme en una llamada infinita.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;En un metodo recursivo se pueden establecer acciones en la ida o en la vuelta, es importante descubrir que por ejemplo si la funcio se llama asi misma 15 veces en la memoria del procesador la funcion esta instanciada y esperando 15 veces, asi por ejemplo una variable local x existe 15 veces y no una.&lt;/p&gt;&lt;p&gt;Llamada: objeto.contadorRecursivo(0);&lt;/p&gt;&lt;p&gt;Public contadorRecursivo(int x)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;x++;&lt;/p&gt;&lt;p&gt;if(x&amp;lt;15)//sentencia de corte&lt;/p&gt;&lt;p&gt;contadorRecursivo(x);//llamada a si misma&lt;/p&gt;&lt;p&gt;System.out.print(x);//imprimira desde 15 hasta 0&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;b&gt;Flujos y Archivos:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Flujo:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Un flujo(stream) es una abstraccion que se refiere a un flujo o corriente de datos que fluyen entre un origen y un destino, habitualmente esta conexión se referira a un archivo pero es importante aclarar que se puede tratar de un archivo tanto como de una conexión de red o una porcion de memoria.&lt;br /&gt;Un flujo es un objeto a travez del cual se pueden leer o escribir datos(bytes) en un medio. Es una interfaz entre el programa y un medio como por ejemplo un archivo.&lt;/p&gt;&lt;p&gt;Los flujos se implentan a travez de las clases abstractas InputStream y OutputStream, FileInputStream, FileOutputStream, ObjectInputStream y ObjectOutStream, existen otras clases abstractas que tambien pueden ser utilizadas.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Archivos:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Es una porcion de memoria defindida por el sistema operativo, capaz de ser refernciada por un objeto File o alguna clase que contenga instancias de File o sea deribada de File.&lt;/p&gt;&lt;p&gt;Para que Java tenga acceso a los archivos se implentan las abstracciones Streams, por ese medio se pueden escribir y leer archivos y por medio de la clase File se pueden crear archivos o comprobar su existencia.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Metodos de acceso y organización de los archivos:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Archivos Secuenciales:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;La organización de un archivo define la forma en que los registros se acomodan en una archivo, La organización secuencial se define que los registros se acumulan uno detras del otro de modo que para acceder a un registro n se debe pasar por los x registros antecedentes de n.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Archivos de Acceso Directo, Randomico o Aleatorio:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;En este caso cualquier registro se puede acceder especificando la posicion del registro con respecto a al origen del archivo. Es importante aclarar que el metodo con el que se accede al archivo debe ser diseñado por el programador ya que tanto el acceso secuencial como directo se puede implementar con la clase RandomAccesFile o con los flujos de objetos.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Flujos tipo Objeto:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Como se vio hasta ahora la posibilidad de guardar datos primitivos parece suficiente para crear y administrar archivos, pero existen clases provistas por Java para guardar objetos de cualquier tipo como Objetos simples o listas enlazadas enteras, simplemente escribiendo readObject o writeObject.&lt;/p&gt;&lt;p&gt;Para esto Java ofrece sus clases ObjectInputStream u ObjectOutStream que son creadas a partir de un flujo a un archivo FileInputStream o FileOutputStream.&lt;/p&gt;&lt;p&gt;Este metodo es el que se usa para crear:&lt;/p&gt;&lt;p&gt;&lt;u&gt;Archivos de Organización Secuencial Indexada:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Se trata de leer y escribir objetos sobre el archivo de manera secuencial, no se puede acceder a un objeto determinado conociendo su ubicación si no que se debe escribir la funcion readObject en un ciclo hasta encontrar el objeto deseado o cargar todos los objetos en una estrucutra de datos. Para escribir se llama a la funcion writeObject y se le pasa como parametro el objeto a ser escrito.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7906564711921234287-2149243492962909675?l=www.blogterrier.com.ar' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogterrier.com.ar/feeds/2149243492962909675/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7906564711921234287&amp;postID=2149243492962909675' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2149243492962909675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7906564711921234287/posts/default/2149243492962909675'/><link rel='alternate' type='text/html' href='http://www.blogterrier.com.ar/2008/12/algoritmos-y-estructuras-de-datos.html' title='Algoritmos y Estructuras de Datos Teórico'/><author><name>blogterrier</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-B3DEl9vmCEk/TrA7hiIEeKI/AAAAAAAABdY/HY5JUFCuv50/s220/SP_A0563.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7906564711921234287.post-6257110552691393652</id><published>2008-12-05T04:14:00.002-02:00</published><updated>2009-03-27T20:25:09.090-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Teoria'/><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><title type='text'>Arquitectura de Computadoras</title><content type='html'>&lt;p&gt;&lt;b&gt;Arquitectura de Von Neumann:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;UC&lt;/u&gt;: Unidad de Control. Es el “cerebro” de la CPU&lt;br /&gt;&lt;u&gt;UAL&lt;/u&gt;: Unidad Aritmética Lógica. Maneja cantidad limitadas.&lt;/p&gt;&lt;p&gt;&lt;u&gt;MP&lt;/u&gt;: Memoria Principal. RAM, ROM, Cache, La memoria cache tambien puede encontrarse adentro de la CPU.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Registros&lt;/u&gt;: Los Registros almacenen datos e instrucciones que esta utilizando la UC pueden ser de 1 byte o mas 2, 4, 8, etc. Esta compuesta por Flip-Flops&lt;/p&gt;&lt;p&gt;Tanto la memoria principal como los registros tiene una capacidad de almacenamiento limitada.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Buses&lt;/u&gt;: Están limitados a una palabra de maquina. Por ejemplo 1 byte = 8 bits, palabra de maquina.&lt;br /&gt;&lt;b&gt;Concepto de Palabra&lt;/b&gt;: &lt;/p&gt;&lt;p&gt;Cantidad fija de bits con la que se trabaja para representar algo que utiliza la memoria(CPU, Registros, etc).&lt;br /&gt;&lt;u&gt;Palabra de Maquina&lt;/u&gt;: Capacidad de Calculo de la CPU.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Palabra de Memoria&lt;/u&gt;: Cantidad de bits que se pueden escribir de una sola vez.&lt;br /&gt;Los buses tambien tienen una palabra y es la cantidad de bits que pueden transmitir en un solo envío.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;Microprocesadores y palabras:&lt;/b&gt;&lt;br /&gt;Un microprocesador es una CPU en un solo circuito integrado.&lt;br /&gt;Algunas empresas fabricantes de microprocesadores son INTEL, AMD, Sun, Motorola, IBM.&lt;/p&gt;&lt;p&gt;Microprocesadores Intel y sus palabras:&lt;br /&gt;4004 palabra de maquina de 4 bits&lt;/p&gt;&lt;p&gt;8008 palabra de maquina de 8 bits&lt;/p&gt;&lt;p&gt;8085 palabra de maquina de 8 bits y 16 bits de memoria&lt;/p&gt;&lt;p&gt;8088, 80286 palabra de maquina y memoria de 16 bits&lt;br /&gt;80386/486 Pentium I,II,III,IV 32 bits&lt;/p&gt;&lt;p&gt;Intel Itanium 64 bits, tambien hay AMD de 64 bits.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Sistemas Numéricos Posicionales:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Sus símbolos básicos poseen un valor absoluto intrínseco y un valor relativo que depende de su posición.&lt;/p&gt;&lt;p&gt;Numero: Idea abstracta de cantidad.&lt;br /&gt;Numeral: Símbolo con el que se representa un numero.&lt;br /&gt;&lt;u&gt;Características:&lt;/u&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;La combinación de símbolos básicos debe ser finita y contar con por lo menos 2 símbolos básicos, 1 unidad, 0 ausencia.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Los símbolos básicos deben ordenarse en forma monótona creciente.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;La cantidad de símbolos básicos se conoce como base del sistema.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;La coma (,) como símbolo auxiliar.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Debe tener definido la operación suma (+) y producto (.) para poder expresar un numeral en notación expandida.&lt;br /&gt;Ejemplo:&lt;br /&gt;Donde:&lt;br /&gt;N = numero, b = base del sistema&lt;br /&gt;e = cada uno de los símbolos básicos, correspondientes a la parte entera&lt;br /&gt;d = cada uno de los símbolos básicos, correspondientes a la parte fraccionaria del numero&lt;br /&gt;Los exponentes indican la posición del numeral.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;b&gt;Códigos y Representaciones:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Un código es una relación entre cada símbolo del conjunto del alfabeto general o una parte de el por ejemplo los números, y las palabras código de otro conjunto de símbolos habitualmente compuesto por 1 y 0, pero por ejemplo en el caso del código Morse se trata de una relación entre el alfabeto general y las palabras código del conjunto de puntos y rayitas.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Códigos de longitud variable&lt;/u&gt;: por ejemplo el Morse (la palabra código es de distintos tamaños)&lt;/p&gt;&lt;p&gt;&lt;u&gt;Códigos de longitud fija&lt;/u&gt;: por ejemplo el alfabeto o el BCD natural (la palabra código es de longitud fija)&lt;/p&gt;&lt;p&gt;&lt;u&gt;Códigos Numéricos&lt;/u&gt;: Alfabeto general → Números&lt;/p&gt;&lt;p&gt;BCD natural, Decimal Codificado en Binario&lt;/p&gt;&lt;p&gt;AIKEN, se refleja a partir del 4, pesos ponderados distintos&lt;/p&gt;&lt;p&gt;XS-3, BCD en exceso 3, Gray.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Códigos Alfanuméricos&lt;/u&gt;: Números, letras, símbolos.&lt;/p&gt;&lt;p&gt;EBCDIC, 8 bits = 256 caracteres distintos, IBM Mainframe, Extended BCD Código.&lt;/p&gt;&lt;p&gt;ASCII, Código de Intercambio de Informacion Estándar Americano, 7 bits = 128 caracteres y 1 bit de control de paridad.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Algebra de Boole(Circuitos Lógicos):&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Es un conjunto: B no vacio, +, *, 0, 1, !(negación)&lt;/p&gt;&lt;p&gt;Este conjunto cumple con los siguientes postulados:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Propiedad Asociativa&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Propiedad Conmutativa&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Propiedad Distributiva&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Existencia del elemento neutro&lt;br /&gt;a+0=a&lt;br /&gt;a.1=a&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Existencia del inverso&lt;br /&gt;a.!a=0&lt;br /&gt;a+!a=1&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Y de estos postulados se desprenden los siguientes teoremas:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Principio de Dualidad(Intercambio de * por . Y 1 por 0).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Acotación a+1=1 y a.0=0.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Idempotencia a.a=a, a+a=a.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Involución !(!a)=a&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Leyes de Morgan. !(a+b)=!a.!b; !(ab)=!a+!b&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;b&gt;Circuitos Integrados:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Chip: varios circuitos integrados en un zócalo.&lt;/p&gt;&lt;p&gt;Clasificación de los circuitos integrados:&lt;/p&gt;&lt;p&gt;(según la cantidad de compuertas o transistores)&lt;/p&gt;&lt;p&gt;SSI(short scale integrated) compuertas &amp;lt; 100&lt;/p&gt;&lt;p&gt;MSI(medium scale integrated) 100 &amp;lt; compuertas &amp;lt; 1.000&lt;/p&gt;&lt;p&gt;LSI(large scale integrated) 1.000 &amp;lt; compuertas &amp;lt; 10.000&lt;/p&gt;&lt;p&gt;primeros micros y memorias&lt;/p&gt;&lt;p&gt;VLSI(very large scale integrated) 10.000 &amp;lt; com &amp;lt; 100.000&lt;/p&gt;&lt;p&gt;ULSI(ultra large scale integrated) &amp;gt;100.000&lt;/p&gt;&lt;p&gt;Tamaño actual de una compuerta 0,15 um(millonésimas de metro)&lt;/p&gt;&lt;p&gt;otros tamaños 0,25 um&lt;/p&gt;&lt;p&gt;Los circuitos integrados sencillos como los decodificadores fueron analizados en la parte practica de la materia.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Circuitos Secuenciales y Combinacionales:&lt;/b&gt;&lt;br /&gt;La logica o circuitos digitales se dividen en combinacionales y secuenciales.&lt;br /&gt;En los circuitos combinacionales el valor de las salidas depende solamente del valor de las entradas.&lt;/p&gt;&lt;p&gt;En los circuitos secuenciales el valor de las salidas depende de las secuencias de entradas y de el valor de las entradas, un cicuito secuencial tiene memoria. Se denomina tambien automata finito. Un circuito secuencial consta esta caracterizado por 5 parametros(x salidas, y entradas, q estados, F, G)&lt;/p&gt;&lt;p&gt;F= funcion de transicion, el proximo estado en funcion del estado T y de las entradas T, el resultado es T+1.&lt;/p&gt;&lt;p&gt;G= Salida en funcion del estado interno y las entradas.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Flip-Flops:&lt;/b&gt;&lt;br /&gt;Circuito Biestable o Flip-Flop.&lt;br /&gt;Es una memoria de 1 bit(0,1) de dos estados posibles, de acuerdo a su constitucion pueden ser R-S, J-K, D, T. Y de acuerdo a que utilicen o no reloj en Sincronos y Asincronicos.&lt;/p&gt;&lt;p&gt;Asincrono= el estado interno cambia cuando cambian las entradas.&lt;br /&gt;Sincrono= el estado interno cambia con el pulso del reloj si las entradas lo habilitan a cambiar.&lt;/p&gt;&lt;p&gt;Para ver el comportamiento de un circuito Flip-Flop se debe confeccionar una tabla de transicion.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;Registros:&lt;/b&gt;&lt;br /&gt;Wiki:En arquitectura de ordenadores, un registro es una memoria de alta velocidad y poca capacidad, integrada en el microprocesador, que permite guardar transitoriamente y acceder a valores muy usados, generalmente en operaciones matemáticas. Los registros están en la cumbre de la jerarquía de memoria, y son la manera más rápida que tiene el sistema de almacenar datos. Los registros se miden generalmente por el número de bits que almacenan; por ejemplo, un "registro de 8 bits" o un "registro de 32 bits". Los registros generalmente se implementan en un banco de registros, pero antiguamente se usaban biestables individuales, memoria SRAM o formas aún más primitivas.&lt;/p&gt;&lt;p&gt;El término es usado generalmente para referirse al grupo de registros que pueden ser directamente indexados como operandos de una instrucción, como está definido en el conjunto de instrucciones. Sin embargo, los microprocesadores tienen además muchos otros registros que son usados con un propósito específico, como el contador de programa. Por ejemplo, en la arquitectura IA32, el conjunto de instrucciones define 8 registros de 32 bits.&lt;/p&gt;&lt;p&gt;Los registros se encuentran adentro de la CPU y son utilizados por la UC para almacenar datos, direcciones de memoria e instrucciones. La cantidad, tipo y funcion de estos depende de cada microprocesador pero se pueden identificar una serie de registros genericos que se encuentran en la &lt;u&gt;estructura IA16&lt;/u&gt;:&lt;/p&gt;&lt;p&gt;&lt;u&gt;Registros de Proposito General:&lt;/u&gt;&lt;br /&gt;AX: Acumulador, es un registro de 2 bytes aunque antes era de 1 byte, ahora existe un AL de 1 byte y un AH de 1 byte.&lt;br /&gt;BX: Base, direccionamiento.&lt;/p&gt;&lt;p&gt;CX: Counter, contador.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Registros Punteros:&lt;/u&gt;&lt;br /&gt;Apuntan a un lugar de la memoria donde estan los datos o las instrucciones de un programa.&lt;/p&gt;&lt;p&gt;BP: Base Pointer, Puntero Base.&lt;/p&gt;&lt;p&gt;SP: Stack Pointer, Puntero de Pila, Para gestionar una memoria pila LIFO Last Input First Output.&lt;/p&gt;&lt;p&gt;SI: Index Pointer, Puntero Indice.&lt;/p&gt;&lt;p&gt;DI: Source/Destination Pointer, Puntero de destino o fuente.&lt;/p&gt;&lt;p&gt;IP: Instruction Pointer, Puntero de Instrucciones, apunta a la proxima instrucción que debe ejecutar la UC y es manejado por la misma. Solo se altera en una interrupcion o en el llamado a una subrutina.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Registros Segmento:&lt;/u&gt;&lt;br /&gt;Se cargan dinamicamente.&lt;br /&gt;Se utilizan para organizar la memoria que utiliza la arquitectura, se puede establecer una analogia con un vector o con segmentos. Estos registros guardan el lugar donde comienza un segmento de memoria.&lt;/p&gt;&lt;p&gt;CS: Code Segment, Puntero hacia las instruccione del programa.&lt;/p&gt;&lt;p&gt;SS: Stack Segment, Puntero a la Stack o Pila.&lt;/p&gt;&lt;p&gt;DS: Data Segment, Puntero a donde comienzan los datos.&lt;/p&gt;&lt;p&gt;ES: Extra Segment, Puntero extra.&lt;/p&gt;&lt;p&gt;Los segmentos de memoria a donde apuntan estos resgitros son de longitud variable entre 0 y 64 kb en una estructura de 16 bits.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Registros de Estado:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Estos se cargan una sola vez al inicio de un programa.&lt;/p&gt;&lt;p&gt;Son de 16 bits, donde cada bit es un flag o bandera, osea que guardan un tipo de dato booleano.&lt;/p&gt;&lt;p&gt;CF: Carry Flag, indicador de carry o acarreo, esta asociado al resultado de operaciones aritmeticas y logicas de la UAL, se pone a 1 cuando existe acarreo.&lt;/p&gt;&lt;p&gt;OV: Overflow, indicador de fuera de rango, cuando una operación supera el rango se pone a 1.&lt;/p&gt;&lt;p&gt;ZR: Flag Zero, indicador de 0, se pone a 1 si el resultado de la operación es cero.&lt;/p&gt;&lt;p&gt;SF: Flago de Signo, se pone a 1 si el resultado es negativo y a 0 si es positivo, tal como se vio en “como realiza las operación la cpu”.&lt;/p&gt;&lt;p&gt;Estos registros manejan las estructuras repetitivas de alto nivel como los if, los while o los for.&lt;/p&gt;&lt;p&gt;Ademas existen otros registros que son de uso exclusivo del sistema operativo para conmutacion de tareas y otras cosas(Fueron agregados por intel en IA16).&lt;/p&gt;&lt;p&gt;&lt;u&gt;Registros en IA32:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Los registros que se vieron en IA16 se expanden y se llaman EAX, EBX, ECX, EBP, ESP, etc. Como parte de la compatibilidad entre IA32 e IA16 se pueden llamar a registros de 16 bits de la misma manera que en IA16. Notese que es lo mismo que sucedia con IA16 y las arquitecturas de 8 bits.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;b&gt;Memorias. Tipos de Datos. Clasificaciones de Memorias:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Tipos de Datos:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Los datos utilizados por el microprocesador son los datos primitivos(que se llaman asi justamente por que son comprendidos por la estructura de una cpu).&lt;/p&gt;&lt;p&gt;Enteros: con signo(short[1 byte], int[2 bytes], long[4 bytes], [8 bytes]) o sin signo.&lt;/p&gt;&lt;p&gt;Caracteres(Char): 1 byte que puede ser EBCDIC, ASCII o UNICODE.&lt;/p&gt;&lt;p&gt;Punto Flotante(float): de posicionamiento simple(32 bits, IEEE754) o de doble presicion(64 bits).&lt;/p&gt;&lt;p&gt;La notacion de doble precision esta compuesta por 1 entero(mantisa con signo y magnitud) una base y un exponente.&lt;/p&gt;&lt;p&gt;Booleanos(flags): datos bivalentes de 1 bit.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Como se administra la memoria:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Forma 1:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Forma de vector lineal de bytes, una direccion de memoria representa una direccion exacta donde se encuentra un dato.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Forma 2:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Forma segmentada, se precisan dos valores, uno indica donde comienza el segmento de memoria donde se encuentra el dato y otro la cantidad de posiciones que hay que correrse(desplazamiento) desde el inicio para encontrar el dato especifico.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Forma 3:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Forma Paginada, se divide la memoria en paginas de una longitud fija de 4k, y se leen y utilizan paginas enteras.&lt;/p&gt;&lt;p&gt;Es utilizado por el OS para administrar la memoria virtual, concepto que pretende simular una memoria infinita para trabajar con datos mas grandes, esto implica que por medio de distintos algoritmos se determinan cuales seran los datos mas utilizados o los proximos a utilizar. Principios de referencia temporal y espacial que seran vistos mas adelante en clasificaciones de memorias.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Clasificacion de las Memorias:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Los dispositivos o componentes habitualmente reconocidos como memorias son: RAM, Cache, ROM, Flip-Flop, Registros, Disco Duro, Pen Drive, CD, Disketes. La suma de los tiempos que tarda un memoria en responder se denomina Latencia.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Las memorias se pueden clasificar de distintas formas:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Volatilidad:&lt;/u&gt; volatiles o no volatiles.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Tecnologia de Fabricacion:&lt;/u&gt; Magneticas o Ferromagneticas, Opticas y Semiconductores.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Forma de Acceso:&lt;/u&gt; Aleatorio(RAM), Secuencial(Cintas Magneticas) Directo(Discos Magneticos).&lt;/p&gt;&lt;p&gt;&lt;u&gt;Operaciones con Memorias:&lt;/u&gt; Solo lectura(R, ROM) y Lectura Escritura(RW, RAM).&lt;/p&gt;&lt;p&gt;&lt;u&gt;Velocidad de Transferencia:&lt;/u&gt; cantidad de bits/seg.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Tiempo de acceso:&lt;/u&gt; periodo que se tarda en acceder a los datos.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Tamaño:&lt;/u&gt; Se mide en bits, bytes, kbytes, mbytes, etc, etc.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;u&gt;Jerarquias de memorias:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;La jerarquia de memorias establece que las memorias de menor tiempo de acceso y menor tamaño son las primeras y las de mayor tiempo de acceso y mayor tamaño son las ultimas.&lt;/p&gt;&lt;p&gt;De acuerdo a lo visto hasta ahora se puede hacer un pequeño paneo de esta jerarquia:&lt;br /&gt;Registros(&amp;gt; 1 kbyte, se encuentran adentro de la CPU)&lt;/p&gt;&lt;p&gt;Cache(1 mbyte, Memoria rapida ubicada entre la CPU y la MP)&lt;/p&gt;&lt;p&gt;RAM(1 gb, MP donde se almacenan los datos y procesos en ejecucion)&lt;/p&gt;&lt;p&gt;Discos Magneticos(80 gigabytes – 1 terabyte)&lt;/p&gt;&lt;p&gt;Ademas a medida que el tiempo de acceso a las memorias disminuye el costo por byte de las mismas aumenta.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Clasificacion de las Memorias RAM:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Las memorias RAM son volatiles, de acceso aleatorio y de 1 ns de acceso.&lt;/p&gt;&lt;p&gt;Estaticas: &lt;/p&gt;&lt;p&gt;SRAM(Static RAM)&lt;/p&gt;&lt;p&gt;Son mas rapidas que las dinamicas, de densidad mas baja y por ende resultan mas caras.&lt;/p&gt;&lt;p&gt;Flip-Flop(Tiene aproximadamente 6 transistores)(Caché)&lt;/p&gt;&lt;p&gt;Dinamicas: &lt;/p&gt;&lt;p&gt;DRAM (Dinamic RAM)&lt;/p&gt;&lt;p&gt;Compuestas por un transistor y un capacitor, necesitan una operación de refresco.&lt;/p&gt;&lt;p&gt;Asincronas&lt;/p&gt;&lt;p&gt;Son memorias viejas como las FPM o EDO.&lt;/p&gt;&lt;p&gt;Sincronas&lt;/p&gt;&lt;p&gt;SDRAM(Simple Dinamic Ram, 1 vez por pulso del clock, 1 flanco)&lt;/p&gt;&lt;p&gt;DDRRAM(Dual Data Rate RAM, 2 veces por pulso del clock, 2 flancos, acelera la velocidad)&lt;/p&gt;&lt;p&gt;DDR2 y DDR3 mejoran DDRRAM por que aumentan la frecuencia y disminuyen la tension de alimentacion. Con lo cual se acelera la velocidad, se disminuye el consumo y el calor.&lt;/p&gt;&lt;p&gt;Nota: la relacion de tamaño de DRAM a SRAM es que 1 bit en SRAM ocupa el misma espacio que 6 bits en DRAM.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Memoria Caché:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;La memoria caché es una memoria fabricada con Flip-Flops que se encuentra ubicada en la jerarquia de memorias entre los Registros y la MP, con las consiguientes relaciones de tamaño y tiempo de acceso.&lt;/p&gt;&lt;p&gt;La memoria Caché se utiliza para guardar copias de datos e instrucciones que se encuentra en la MP que serán utilizados proximamente o habitualmente por la CPU.&lt;/p&gt;&lt;p&gt;El uso de las memorias Caché se basa en &lt;u&gt;Los Principios de la Localidad de las Referencias&lt;/u&gt;.&lt;br /&gt;&lt;u&gt;Espacial:&lt;/u&gt; Si la CPU busca algo en la direccion x lo mas provable es que el proximo dato este en la direccion x+1.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Temporal:&lt;/u&gt; Si en un tiempo t la CPU busco algo en la direccion x, es provable que en el tiempo t+1 vuelva a buscar x.&lt;/p&gt;&lt;p&gt;A partir de la 80486 la memoria Caché se ubico adentro de la CPU denominada como L1. La memoria caché comun paso a denominarse L2.&lt;/p&gt;&lt;p&gt;A partir del Pentium L2 tambien se integra a la CPU y aparece una L3 afuera.&lt;/p&gt;&lt;p&gt;En algunos servidores puede encontrarse una memoria L3 integrada a la CPU.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Clasificacion de la memoria ROM:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Las memorias ROM son de solo lectura, no se pueden borrar ni escribir por metodos directos.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Rom de Mascara:&lt;/u&gt; Se fabrican a partir de un molde que se diseña a medida compuesto por 1 y 0, se hacen copias (unidades de memoria) por ejemplo las ROM BIOS antiguas(BIOS: Sistema Basico de Entrada/ Salida, Basic Input Output System).&lt;/p&gt;&lt;p&gt;&lt;u&gt;PROM:&lt;/u&gt; Es una memoria programable compuesta por fusibles, se puede grabar una sola vez con un aparato que quema los fusibles(1 se deja fusible, 0 se quema fusible).&lt;/p&gt;&lt;p&gt;&lt;u&gt;EPROM:&lt;/u&gt; (Erassable PROM) Se puede programar y borrar con luz ultravioleta(tienen una ventanita para ello).&lt;/p&gt;&lt;p&gt;&lt;u&gt;EEPROM:&lt;/u&gt; (Electrical Erassable PROM) Se puede borrar electricamente con un aparato.&lt;/p&gt;&lt;p&gt;&lt;u&gt;FLASH:&lt;/u&gt; (USB) Las primeras se utilizaron en BIOS y ahora se usan en dispositivos USB (Las BIOS Flash se pueden actualizar).&lt;/p&gt;&lt;p&gt;Le memoria RAM denota que es una memoria de lectura/escritura(punto de vista comercial), pero el significado de RAM es que tiene acceso aleatorio, osea el mismo tiempo de acceso a todas las posiciones de la memoria.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Factor de Forma:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Las memorias vienen en una plaqueta con distintas formas y conexiones(factor de forma → Tecnologia de la memoria → Capacidad, Rapidez).&lt;/p&gt;&lt;p&gt;Memorias SIMM: Son asincronas y S quiere decir simple una linea de contactos. Posee 30 contactos de los cuales 8 pertenecen al bus de datos, se necesitaban 4 bancos para llegar a ocupar la capacidad del bus que es de 32 bits. Tambien existe una SIMM de 72 contactos.&lt;/p&gt;&lt;p&gt;Memorias DIMM:&lt;br /&gt;Son sincronas y D significa Dual, tienen dos lineas de contactos.&lt;/p&gt;&lt;p&gt;SDRAM: 168 contactos, bus de datos de 64 bits → Pentium.&lt;/p&gt;&lt;p&gt;DDRRAM: 184 contactos.&lt;/p&gt;&lt;p&gt;DDR2, DDR3: 240 contactos y distintas frecuencias.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Algunos Conceptos sobre las memorias e Instrucciones:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;El registro de instruciones IP apunta a una direccion de memoria donde esta alojado el programa en ejecucion, a medida que una instrucción se ejecuta el IP se va corriendo para poder acceder a la proxima instrucción. El IP tambien es denominado a veces PC(contador de programa).&lt;/p&gt;&lt;p&gt;En la arquitectura IA16 los registros y la UAL trabajan con palabras de 16 bits, sin embargo el bus de direcciones no es necesariamente de 16 bits ya que se podria direccionar a muy poca memoria(solo 64k, mi maquina tiene 1.048.576 k) por lo general los buses de direcciones son de 32 bits. Por eso las notaciones habituales para acceder a una memoria son numeros hexa entre 0000 y FFFF.&lt;/p&gt;&lt;p&gt;En la cpu existen otros registros que no fueron vistos en la arquitectura IA16 desarrollada:&lt;/p&gt;&lt;p&gt;IR: Registro de Instrucciones, almacena la instrucción en curso.&lt;/p&gt;&lt;p&gt;MAR: (Registry Adress Memory)Registro de direccionamiento actual de memoria, se refieren a direcciones de datos.&lt;/p&gt;&lt;p&gt;DR: Data Registry (Registra un dato).&lt;/p&gt;&lt;p&gt;MAR y DR son registros genericos.&lt;/p&gt;&lt;p&gt;La CPU busca instrucciones, las interpreta y ejecuta. Cuando se prende la CPU el IP=FFFF esa direccion de memoria tiene un jump a la primera direccion de la BIOS. La CPU puede de esta manera comenzar a cargar los datos y programas basicos que utilizara para funcionar(controladores de discos, de video, etc).&lt;/p&gt;&lt;p&gt;Esto es gracias a que IP siempre apunta a la proxima direccion de memoria de donde esta alojada la instrucción actual y por que los programas habitualmente se guardan en lugares consecutivos de la memoria. Los datos por lo general tambien se encuentran en orden consecutivo.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Buses. Conceptos y Clasificaciones:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Los buses conforman un sistema de interconexion compartido, varios dispositivos comparten un mismo camino. Concepto tambien visto en redes similar al que se da en la conexión entre ciudades por medio de rutas.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Clasficaciones:&lt;/p&gt;&lt;p&gt;&lt;u&gt;De acuerdo a la temporizacion:&lt;/u&gt; en sincronos(las transferencias se hacen en los flancos del clock, un ejemplo de bus sincrono es el Front Side Bus MP-CPU) y asincronos(las transferencias se realizan de acuerdo al Hand Shake, Apreton de manos osea un acuerdo. Tipico bus asincrono: el bus paralelo, el bus serial).&lt;/p&gt;&lt;p&gt;En general los buses ubicados en la mother son sincronos(mas rapidos y faciles de diseñar) y los de entrada y salida son asincronos debido a la variedad de dispositivos que soportan.&lt;/p&gt;&lt;p&gt;&lt;u&gt;En interno y externos:&lt;/u&gt; si estan adentro de un chip son internos(buses que conectan los registros con la UC) mientraz que si estan en la mother son externos(Buses que conectan la CPU con la MP).&lt;/p&gt;&lt;p&gt;&lt;u&gt;De acuerdo a la informacion que transmiten:&lt;/u&gt; Datos, Direcciones(de su capacidad depende la cantidad de memoria direccionable), Control(genera señales de lectura escritura), Potencia(Envian energia a los dispositivos).&lt;br /&gt;&lt;u&gt;De acuerdo a la cantidad de lineas:&lt;/u&gt;&lt;br /&gt;Serial: 1 bit por vez, trasnferencia en una sola linea, ejemplo USB,(SATA es Serail ATA). Aunque paresca una contradiccion el hecho de emitir un dato por vez genera menos interferencia y ruido por lo que se puede elevar mucho la frecuencia y entonces se gana en velocidad de trabajo.&lt;/p&gt;&lt;p&gt;Paralelo: mas de 1 bit por vez, esto afecta a la trasnmision con ruidos e interferencias por lo que no tienen mucha velocidad, tipico bus paralelo el Puerto Paralelo, en general los bus de las internos son paralelos.&lt;/p&gt;&lt;p&gt;El ruido tiene que ver con distintos factores como la distancia, la potencia y la frecuencia de las señales.&lt;/p&gt;&lt;p&gt;&lt;u&gt;De acuerdo a la direccion de transferencia:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Los buses pueden ser bidireccionales(como por ejemplo el bus de datos que escribe y lee) y unidireccionales(como el bus de direcciones que solo puede ser seteado por la CPU).&lt;/p&gt;&lt;p&gt;&lt;u&gt;Metodo HandShake(apreton de manos, acuerdo):&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Utilizado en los buses asincronos para que 2 dispositivos se pongan de acuerdo. En el bus hay lineas de datos, control y estado. Un ejemplo puede ser un bus de 8 bits que conecta la CPU con la impreso los bits de posiciones 7=busy, 6=ack y 0=strobe.&lt;br /&gt;Estos estados son activos por bajo osea que informar ese estado cuando se ponen a 0.&lt;br /&gt;Strobe= La impresora le avisa a la CPU que puede tomar sus datos.&lt;/p&gt;&lt;p&gt;Ack= La Impresora avisa a la CPU que puede seguir enviando informacion.&lt;/p&gt;&lt;p&gt;Busy: La Impresora le avisa a la CPU que esta ocupada y deje de mandar informacion.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Proceso de Arbitraje:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;El proceso de arbitraje que existe en todos los sistemas de computacion es el que administra la utilizacion de los buses es decir decide quien es el Master. En una primera aproximacion podria decirse que el Master debe ser la CPU, pero pueden existir varias CPU(Dual Core) y ademas hay un DMA(Controlador de Acceso Directo a Memoria). Entonces por medio de este proceso de arbitraje los buses van cambiendo de Master(uno por vez) según quien tenga la prioridad.&lt;/p&gt;&lt;p&gt;El proceso de arbitraje puede ser Centralizado o Distribuido.&lt;/p&gt;&lt;p&gt;DMA: El Controlador de Acceso Directo a Memoria transfiere archivos y trabajos con la memoria sin que la CPU tenga que intervenir y asi la libera para que realice otros trabajos.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Jerarquia de Buses:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;El primer bus fabricado que fue standart(respeta determindas normas para que todo el mundo pueda fabricar componentes y perifericos para usarlo) fue el ISA(Industry Standart Architecture). Este bus se utilizaba en las maquinas de Intel 286 y conectaba la CPU con la MP, E/S, y el Video.&lt;/p&gt;&lt;p&gt;Cuando salio Windows(se necesitaba un video mas rapido) aparecio EISA(Extended ISA) y VESA(Video equipement standart asociation, creado por algunas empresas del sector que era un bus local entre el video y la CPU).&lt;br /&gt;El problema de VESA era que al cambiar por ese bus habia que cambiar la placa y por ende el micro.&lt;br /&gt;Por otro lado Intel saco al mercado el PCI(Periferal Component Interface). Este bus se extendio su palabra era de 32 bits y la frecuencia de 33mhz. PCI siguio evolucionando y aumentando su frecuencia y llevando la palabra a 64 bits.&lt;/p&gt;&lt;p&gt;Existe un bus llamado PCIX que se utiliza en servidores.&lt;br /&gt;Tambien esta el PCI Express(serial) que es como switch o hub, habitual para conectar placas de video pero no exclusivo.&lt;/p&gt;&lt;p&gt;En esta epoca aparecen las memorias caché, el Front Side Bus que une la CPU con la MP y el Bad Side Bus que conecta la CPU con la memoria caché, el bus PCI y el bus ISA(buses de distintas velocidades y palabras, ante esto hace falta algo que compatibilice estos rangos) esto es una interfaz o puente.&lt;br /&gt;Puente o Bridge: permite unir buses de distintas caracteristicas(frecuencia, velocidad, tamaño, etc).&lt;/p&gt;&lt;p&gt;En la carpeta hay un grafico sobre como se organiza la arquitectura de un Pentium 4 de 3.6 Ghz.&lt;/p&gt;&lt;p&gt;Las capacidades de una mother dependen de las capacidades de los chipsets(Puentes o Bridges).&lt;/p&gt;&lt;p&gt;MCH(Memory Control Hub): Compatibiliza el bus de la CPU con la MP.&lt;/p&gt;&lt;p&gt;AGP(Advanced Graphic Procesor): PCI mejorado.&lt;/p&gt;&lt;p&gt;IOH(Input Ouput Hub): Antes llamado puente sur&lt;/p&gt;&lt;p&gt;Super IO: Es un ISA de baja velocidad.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Metodos de Control de E/S:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Metodos de control de entrada salida:&lt;/p&gt;&lt;p&gt;&lt;u&gt;E/S programada(pooling)&lt;/u&gt;: Los procesos estan controlados por la CPU, y esta pregunta constantemente el estado del dispositivo. Los procesos de transmicion estan controlados constantemente por la CPU que pregunta a cada dispositivo su estado y si estan listos. El 1 equivale a listo, el 0 a ocupado.&lt;br /&gt;Pooling: Abrir puerta.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Interrupciones&lt;/u&gt;: El dispositivo avisa que ya termino la tarea o el estado. Al contrario del Pooling en las interrupciones es el dispositivo el que avisa que esta listo o que termino una determinada tarea.&lt;/p&gt;&lt;p&gt;&lt;u&gt;DMA(Direct Access Memory)&lt;/u&gt;: La CPU le cede el control a chipset DMA, le pasa la informacion a transmitir y el DMA toma control del bus, de esta forma la CPU puede seguir trabajando siempre y cuando no necesite usar el bus. Un ejemplo tipico es dejar las actividades entre el Disco y la MP al DMA.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Puede establecerse una analogia con una casa donde en la E/S programada el dueño de la casa abre constantemente la puerta para saber si llego alguien. En cambio en las Interrupciones la casa tiene un timbre entonces la persona que llega avisa de su llegada.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Interrupciones:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Interrupcion: Algun dispositivo interrumpe a la CPU para hacer algo, la CPU deja de hacer su tarea actual y atiende la nueva tarea, una vez concluida esta la CPU recupera sus actividades anteriores.&lt;/p&gt;&lt;p&gt;Las interrupciones se pueden clasificar de acuerdo a su origen en:&lt;/p&gt;&lt;p&gt;&lt;u&gt;Interrupciones de Hardware&lt;/u&gt;: Es una señal interna que interrumpe a la CPU emitida por algun componente o dispositivo.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Interrupciones de Software&lt;/u&gt;: Es una instrucción en la CPU que simula una interrupcion de Hardware.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Excepciones&lt;/u&gt;: Generadas internamente por la CPU, un caso tipico es cuando una operación que implica una division por 0 o un acceso indebido a memoria(Pantalla Azul de win9X).&lt;/p&gt;&lt;p&gt;A su vez las interrupciones de hardware pueden ser:&lt;/p&gt;&lt;p&gt;&lt;u&gt;Enmascarables&lt;/u&gt;: Representan la mayoria de las interrupciones, estas bajo determinadas circunstancias pueden no atenderse, de alli que son como capturables o enmascarables.&lt;/p&gt;&lt;p&gt;&lt;u&gt;No Enmascarables&lt;/u&gt;: Son anormales y representan sucesos graves como el fallo de una memoria o una caida de tension, estas interrupciones no pueden ser ignoradas por la CPU.&lt;br /&gt;La CPU tiene dos lineas de estado de interrupciones una para las enmascarables(INTR) y otra para las no enmascarables(NMI).&lt;/p&gt;&lt;p&gt;&lt;u&gt;Como se atiende una interrupcion:&lt;/u&gt;&lt;br /&gt;Interrupciones enmascarables&lt;/p&gt;&lt;p&gt;La CPU tiene una sola entrada de interrupciones, mientras que los dispositvos pueden ser muchos y teoricamente la CPU si bien puede saber que existe una interrupcion no puede saber cual de los dispositivos la esta emitiendo.&lt;/p&gt;&lt;p&gt;Como sabemos la CPU esta esperando que algun dispositivo le envie el aviso de interrupcion, para administrar estas interrupciones existen dos formas:&lt;/p&gt;&lt;p&gt;&lt;u&gt;Un Programa&lt;/u&gt;: Un programa en la CPU que pregunte a cada flag de estado de los dispositivos cada vez que INTR se pone en 1. Esta idea no parece una gran innovacion!&lt;/p&gt;&lt;p&gt;&lt;u&gt;Controlador Programable de Interrupciones(PIC)&lt;/u&gt;: Es la opcion utilizada por las computadoras actuales. Este controlador se ubica entre INTR y IRQ0...IRQ4(4 es para un ejemplo con 4 dispositivos) Este controlador sabe que dispositivo es el que esta enviando la interrupcion y tiene acceso a una tabla de prioridades para el caso de interrupciones simultaneas. El PIC le envia por el bus de datos a la CPU la informacion sobre el dispositivo(un numero entre 0 y 255).&lt;/p&gt;&lt;p&gt;El PIC se encuentra en el chipset sur, I/O Hub.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Idea de Interrupcion, Como es atendida por la CPU:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Supongamos que la CPU esta ejecutando una seria de instrucciones almacenadas en la memoria, en el momento que la CPU esta ejecutando la instrucción numero 3 se produce una interrupcion.&lt;br /&gt;Primero la CPU termina de ejecutar la instrucción numero 3.&lt;/p&gt;&lt;p&gt;Luego guarda la direccion de memoria de la instrucción 4(PI, Puntero de Instrucciones) y los flags de estado(registros) en la pila(stack) en ese orden.&lt;/p&gt;&lt;p&gt;El PI se carga con una direccion n que corresponde a la subrutina que debe atender la interrupcion, algo debe hacerse y esto depende de que dispositivo envio la interrupcion. Estos programas estan en la MP. Esta subrutina termina con RDI(Retorno de Interrupcion) el cual indica que la subrutina que atiende la interrupcion ha terminado. Este RDI es la señal para la CPU para que vuelva a cargar el PI y los flags de estado por los que se encuentran en la Stack.&lt;/p&gt;&lt;p&gt;De esta manera la CPU puede administrar la interrupciones sin dejar de lado las tareas habituales. Incluso el algoritmo es valido para administrar varias interrupciones dependiendo de las prioridades o para ejecutar subrutinas.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Como se sabe cual de las subrutinas se debe ejecutar:&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Cada IRQ esta asociado con un numero de interrupcion, este numero es enviado por el PIC a la CPU. La CPU busca en una &lt;u&gt;tabla de vectores de interrupcion&lt;/u&gt; la direccion de memoria donde empieza la subrutina de interrupcion. Codigo de Interrupcion = Direccion de memoria = subrutina.&lt;/p&gt;&lt;p&gt;Este metodo es el que se utiliza en modo real(DOS) para modo protegido(Win) se utilizan estructuras mas complejas de direccionamiento para acceder a las subrutinas.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Estructura de E/S Puertos:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;La CPU esta conectada con la memoria principal por un bus y tambien con los dispositivos de E/S por otro bus, este ultimo en realidad esta conectado a una serie de controladores y memorias que administran los dispositivos de E/S.&lt;br /&gt;En la primer capa de ese conjunto se encuentran los controladores de E/S, luego la Interfaz de E/S y finalmente los Puertos de E/S. Ademas hay una mem
