<?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-24250916</id><updated>2012-01-08T07:12:51.860-08:00</updated><category term='net neutrality'/><category term='salvar internet'/><category term='libertad'/><title type='text'>La era de la informatica</title><subtitle type='html'>Blog para los amantes de la informática.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24250916.post-6037062931938022623</id><published>2007-11-27T02:07:00.000-08:00</published><updated>2007-11-27T02:38:37.803-08:00</updated><title type='text'>Preguntas sin respuesta sobre el mac</title><content type='html'>¿Por qué las aplicaciones que no están migradas a arquitectura intel, es decir, que son aún Power pc (y que van muy lentas por cierto) necesitan un proceso llamado database deamon que nunca se elimina de memoria una vez has abierto una de dichas aplicaciones? ¿Por qué microsoft no saca una versión de office y messenger migrados a arquitecturas intel y así se evitan que debido a la lentitud se haga imposible usar sus programas? Lo peor de todo, ¿a qué espera Apple para sacar la versión de Safari que corra de forma nativa en intel? Es increible que haga ya 2 años que cambiaron a arquitecturas intel y que hayan sacado la nueva versión de Safari incluso en Windows, y que Leopard traiga una versión que aún es para arquitectura Power PC, lo que lo convierte quizá en el navegador mas lento que jamas haya usado un servidor desde IE 4.0&lt;br /&gt;&lt;br /&gt;Safari en Windows da muchos errores, pero al menos va rapido. A ver si solucionan ya estos problemas porque si seguimos así, ¿cómo me voy a dar de baja definitivamente de microsoft?&lt;br /&gt;&lt;br /&gt;FE DE ERRATAS: dejo mi entrada original, pero corrijo mi error, ya que safari si está migrado totalmente a intel pero aún ciertos plugins de Safari funcionan como PowerPC lo que fuerza a que el proceso se ejecute como PowerPC y por eso vaya lento. En cualquier caso deberían solucionarlo...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-6037062931938022623?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/6037062931938022623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=6037062931938022623&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6037062931938022623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6037062931938022623'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/11/preguntas-sin-respuesta-sobre-el-mac.html' title='Preguntas sin respuesta sobre el mac'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-3814395803744233337</id><published>2007-11-21T18:21:00.001-08:00</published><updated>2007-11-21T18:27:55.673-08:00</updated><title type='text'>Problemas de Leopard con MacBook</title><content type='html'>Hola de nuevo. Hacía mucho tiempo que no escribía nada, y es que estoy liado y no puedo. El caso es que me instale el nuevo Leopard en mi MacBook Pro y empezé a tener problemas con el teclado. Lo que pasa es que de repente sin venir a cuento el teclado deja de funcionar y la unica solución es reiniciar. Creo que con los macbook nuevos que venden ahora con Leopard es incluso peor, ya que en algunos casos ni reinicar vale, tienen que cambiarte el teclado. La incidencia está reportada desde hace mucho y es un error bastante extendido, pero ni siquiera en la nueva release 10.5.1 lo han resuelto. Apple calla al respecto por el momento. Otro de los problemas con el nuevo Leopard es que la vida de la batería se ve reducida bastante, en algunos casos mas de un 30%. Esto no he llegado a comprobarlo ya que normalmente no uso la batería. Así que si pensais compraros un macbook o macbook pro en las próximas fechas yo os recomiendo ver los foros de discusion de apple en http://discussions.apple.com/category.jspa?categoryID=235&lt;br /&gt;Y allí podréis comprobar si ya se han resuelto los problemas o no antes de comprarlo. Es una máquina muy cara para tener los problemas que tiene, yo os recomendaría esperar a que se arregle. Por lo demás Leopard me está funcionando muy bien y aunque no representa un gran cambio respecto a Tiger, si se nota que siguen estando a mejor nivel que Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-3814395803744233337?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/3814395803744233337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=3814395803744233337&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3814395803744233337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3814395803744233337'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/11/problemas-de-leopard-con-macbook.html' title='Problemas de Leopard con MacBook'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-948868814061272036</id><published>2007-07-21T05:47:00.000-07:00</published><updated>2007-07-21T06:09:10.315-07:00</updated><title type='text'>Actualizaciones windows XP sin validación</title><content type='html'>Hola de nuevo. Recientemente me he actualizado el windows XP con el windows media player 11 y el internet explorer 7, y como se que muchas veces la validación de windows con microsoft da muchos problemas os voy a comentar como podeis actualizarlo sin validarlo. Esto no me lo he inventado ni lo he descubierto yo, lo he leido en otros blogs y ahora lo transmito yo para difundir aún mas el conocimiento. Voy a empezar con windows media player 11 que es mas sencillo.&lt;br /&gt;Lo primero que hay que tener en cuenta es que WM Player 11 es una versión beta, y por tanto debéis pensaros mucho si queréis usarlo o no, las versiones beta suelen dar problemas, a mi de momento no me ha dado problemas, pero os recomiendo pensarlo bien.&lt;br /&gt;1- Bajar el instalador de la página de microsoft, el link es: &lt;a target="_blank" href="http://www.microsoft.com/windows/windowsmedia/player/11/default.aspx"&gt;WM Player 11&lt;/a&gt;&lt;br /&gt;2- Una vez descargado el instalador (un fichero .exe) no ejecutarlo, lo que debeis hacer es descomprimirlo en una carpeta utilizando un programa como por ejemplo winrar (&lt;a target="_blank" href="http://www.rarlabs.com/"&gt;http://www.rarlabs.com/&lt;/a&gt;)&lt;br /&gt;3- Una vez descomprimido en la carpeta, ir a la carpeta y ejecutar wmfdist11.exe&lt;br /&gt;4- Cuando termine de instalar esa parte, ejecutar wmp11.exe&lt;br /&gt;5- Ya está instalado, ahora ejecutar el windows media player y configurarlo a vuestro gusto.&lt;br /&gt;&lt;br /&gt;Ahora vamos con Internet Explorer 7. Este proceso es mas complicado pero no requiere la intervención de un experto si seguís los pasos en el orden correcto.&lt;br /&gt;1- Bajar la actualización. Para esto ir a la página de microsoft: &lt;a target="_blank" href="http://www.microsoft.com/spain/windows/downloads/ie/getitnow.mspx"&gt;IE 7&lt;/a&gt;&lt;br /&gt;Pulsar en "descargar", elegir el idioma y copiar el nombre del fichero, en español el nombre del fichero es: IE7-WindowsXP-x86-esn.exe&lt;br /&gt;2- En google buscamos el fichero por su nombre. mi busqueda dio esto como resultado &lt;a target="_blank" href="http://download.microsoft.com/download/4/C/4/4C4FC47B-974C-4DC9-B189-2820F68B4535/IE7-WindowsXP-x86-esn.exe"&gt;IE7-WindowsXP-x86-esn.exe&lt;/a&gt;&lt;br /&gt;3- Una vez bajado el fichero, no ejecutarlo. Descomprimirlo con winrar en una carpeta&lt;br /&gt;4- Hay que bajarse de internet dos ficheros mas, dos .dll. iecustom.dll y normaliz.dll Yo los he encontrado haciendo la siguiente búsqueda: intitle:"index.of" normaliz.dll y me ha salido la siguiente página &lt;a target="_blank" href="http://wwwhome.cs.utwente.nl/~damhuisjr/meuk/"&gt;http://wwwhome.cs.utwente.nl/~damhuisjr/meuk/&lt;/a&gt; Aquí están las dos dlls&lt;br /&gt;5- En el directorio donde hemos descomprimido el ejecutable de IE7, en la subcarpeta "update" copiamos iecustom.dll (debemos sobreescribir la que se encuentra allí)&lt;br /&gt;6- Ejecutamos "update.exe" y terminamos sin reiniciar.&lt;br /&gt;7- Copiamos la dll normaliz.dll en "windows\system32" y reiniciamos&lt;br /&gt;8- Una vez reinciado vamos de nuevo a la carpeta donde descomprimimos el ejecutable y en la subcarpeta "update" ejecutamos "xmllitesetup.exe"&lt;br /&gt;9- Reiniciamos de nuevo&lt;br /&gt;10- Ya está instalado, podemos ejecutarlo y configurarlo.&lt;br /&gt;&lt;br /&gt;Eso es todo, si no os queda claro ponerme un comentario o mandarme un email... Hasta la próxima&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-948868814061272036?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/948868814061272036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=948868814061272036&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/948868814061272036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/948868814061272036'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/07/actualizaciones-windows-xp-sin.html' title='Actualizaciones windows XP sin validación'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-3924787809644658622</id><published>2007-07-18T21:31:00.000-07:00</published><updated>2007-07-18T23:10:18.587-07:00</updated><title type='text'>Leopard para Mac</title><content type='html'>Aunque lleva ya tiempo en su página web, he entrado hoy por primera vez a ver las nuevas capacidades que incluirá MAC OS X (Leopard) que saldrá presumiblemente el próximo otoño. &lt;br /&gt;En realidad prefería comprarlo y verlo por mi mismo, pero era demasiado tentador y al final no he podido evitar echar un vistazo.&lt;br /&gt;Por supuesto todos los videos en la página web de Apple lo ponen como algo cojonudo, aunque deja lugar al escepticismo.&lt;br /&gt;Aunque hay cosas que no dicen, ya sabeis, por aquello del marketing, voy a dar mi visión sobre las novedades que destacan en su página web.&lt;br /&gt;-Finder:Terminan de integrar soptlight con itunes y finder en una aplicación y mejoran el aspecto. Encuentro el Finder de lo peor de MAC, mas que nada por comparacion con el explorer de microsoft, que tendrá sus defectos pero es de lo mas sencillo de manejar que existe (y no es solo el acostumbrarse, llevo un año con mac y el finder me sigue resultando algo incomodo)&lt;br /&gt;-Time machine:Interesante para aquellos que quieran reservar una parte (grande) de su disco duro externo en mantener backups. Algo que añade seguridad ante pérdidas de datos que realmente será útil para muchos usuarios, pero que a mi no me parece una utilidad propia de un sistema operativo, podría distribuirse como "Bundle", y abaratar el precio.&lt;br /&gt;-Spaces: Esto es el timo del siglo, no porque sea malo, mas bien porque no parece muy novedoso a primera vista. Me parece que esto ya era posible con KDE o GNOME desde hace bastante, pero ahora lo han hecho algo mas bonito.&lt;br /&gt;-Mail: Las opciones que presentan no están mal pero son poco útiles, todo lo que puedes hacer con el programa Mail de Apple, lo puedes hacer y mejor con outlook. Pero tiene algunas pijadillas para hacerlo mas chulo, llamar la atención. Lo que hace apple puede ser revolucionario o simplemente fachada, es lo que tiene.&lt;br /&gt;-Escritorio y Quick Look: Esto es más de la fachada del MAC OS, muy bonito, y mejoras para poder "navegar" entre los ficheros, muy chulo, pero poca innovación.&lt;br /&gt;-iChat: Este quizá sea el programa de chat menos usado y el mejor hecho del mundo. En realidad es España al menos no lo usa ni dios, y estaría bien que puediese extenderse con mas protocolos para conectarse a otras redes, tipo Yahoo o MSN. No es que lo tenga que hacer Apple, pero que lo pudiera ampliar la comunidad GNU, de esta forma se podrían usar las posibilidades de iChat para desbancar MSN y Yahoo. Pero no creo que Apple quiera dar este software gratuitamente con licencia GPL. Aún así también tiene inconvenientes, por ejemplo el hecho de que en la mayoría de las redes de internet, sobre todo en España, hacer esas videoconferencias con videos por detras o presentaciones de powerpoint es mas que imposible hasta que el ancho de banda mejore bastante...&lt;br /&gt;&lt;br /&gt;Bueno quizá he sido muy crítico, pero es que me da la sensación de que esta actualización incluye cosas interesantes, pero no es una actualización revolucionaria como sí lo fue Tiger. De las cosas que más me interesan y no hablan en la página de Apple es del rendimiento. Si ahora le cuesta a mi nuevo macbookpro abrir varias aplicaciones a la vez en Tiger, va a ser mejor o peor Leopard? Porque la verdad, si me actualizo me gustaría que el rendimiento fuese al menos tan bueno como hasta ahora, si va a ir mas lento (vease lo que necesita vista para correr)entonces prefiero quedarme como hasta ahora.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-3924787809644658622?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/3924787809644658622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=3924787809644658622&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3924787809644658622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3924787809644658622'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/07/leopard-para-mac.html' title='Leopard para Mac'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-2889711287563881869</id><published>2007-07-16T04:32:00.000-07:00</published><updated>2007-07-16T04:44:41.049-07:00</updated><title type='text'>Mac y built-in isight</title><content type='html'>Para muchos de los que tenemos un mac con procesador intel, nos ha resultado un quebradero de cabeza el configurar la camara al usar Widnows. En principio el Bootcamp 1.0 no incluia la compatibilidad y Parallels (en forma de maquina virtual) nunca lo ha incluido. Bootcamp 1.1 ya salio con la compatibilidad para la camara, pero hay gente que sigue prefiriendo usar Parallels y asi tener windows unicamente como maquina virtual. Para los que tengan esta opcion han de saber que hay una forma de configurar la camara a partir de la version 3188 de Parallels.&lt;br /&gt;&lt;br /&gt;Aqui se explica como:&lt;br /&gt;&lt;a target="_blank" href="http://forum.parallels.com/archive/index.php/t-10334.html"&gt;Instrucciones&lt;/a&gt;&lt;br /&gt;No os olvideis de ir a esta pagina a coger los drivers de la camara:&lt;br /&gt;&lt;a target="_blank" href="http://www.maconlysource.com/?p=885"&gt;Driver&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Con compatibilidad de USB 2.0 y la camara funcionando hay pocas cosas ya que queden para preferir BootCamp a parallels. Pero la eleccion es vuestra.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-2889711287563881869?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/2889711287563881869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=2889711287563881869&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/2889711287563881869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/2889711287563881869'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/07/mac-y-built-in-isight.html' title='Mac y built-in isight'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-7813744752003439389</id><published>2007-04-22T05:30:00.000-07:00</published><updated>2007-04-22T05:34:59.277-07:00</updated><title type='text'>Solucion Problema 5</title><content type='html'>Hola a todos,&lt;br /&gt;&lt;br /&gt;Como me apunto de forma correcta el Cremero, esta es la solucion al problema 5. Aqui os pongo la solucion que el Cremero me envio por e-mail:&lt;br /&gt;&lt;br /&gt;La solución es sencilla: se aplica una implementación del patrón de diseño denominado “Singleton” (un solo objeto en memoria):&lt;br /&gt; &lt;br /&gt;public class UnaSolaVez {&lt;br /&gt; &lt;br /&gt;            private static UnaSolaVez ObjetoUnaSolaVez == null;  // objeto interno, que luego devolveremos &lt;br /&gt; &lt;br /&gt;            private UnaSolaVez() {&lt;br /&gt;                        // no dejamos instanciar con el constructor por defecto, declarándolo privado&lt;br /&gt;            }&lt;br /&gt; &lt;br /&gt;            public static UnaSolaVez getObjetoUnaSolaVez() {&lt;br /&gt;                        if (ObjetoUnaSolaVez == null)  // si no se ha reservado memoria entonces lo hacemos        &lt;br /&gt;                                    ObjetoUnaSolaVez = new UnaSolaVez();&lt;br /&gt;                        return ObjetoUnaSolaVez; &lt;br /&gt;            }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Como veis es muy sencillo. Aunque es algo mas complicado garantizar que solo se crea un objeto si tenemos varios hillos ejecutandose a la vez. O si tenemos varios "namespaces", en estos casos hay que hacer ciertos cambios en el codigo. No es extremadamente dificil resolver el problema de los hilos concurrentes asi que os animo a comentar esta entrada con vuestras sugerencias!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-7813744752003439389?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/7813744752003439389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=7813744752003439389&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/7813744752003439389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/7813744752003439389'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/04/solucion-problema-5.html' title='Solucion Problema 5'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-3758260951078738360</id><published>2007-04-13T06:34:00.000-07:00</published><updated>2007-04-13T06:36:54.345-07:00</updated><title type='text'>Problema 5: un solo objeto</title><content type='html'>En este quinto problema vamos a utilizar Java. Como Java es muy facilito y mucha gente lo conoce bien, espero que mucha gente se anime a intentarlo.&lt;br /&gt;El problema consiste en crear una clase en Java, definida publica y no estatica, que solo permita ser instanciada una vez. Es decir que si intentamos instanciarla varias veces en el codigo, en realidad solo tendremos un objeto creado en memoria.&lt;br /&gt;&lt;br /&gt;Ya sabeis, como siempre deshabilito los comentarios y espero vuestras respuestas en mi email. Suerte. &lt;br /&gt;Hasta la proxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-3758260951078738360?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3758260951078738360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3758260951078738360'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/04/problema-5-un-solo-objeto.html' title='Problema 5: un solo objeto'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-1490511864690061146</id><published>2007-03-25T02:42:00.000-07:00</published><updated>2007-03-25T03:01:38.437-07:00</updated><title type='text'>Solucion Problema 4</title><content type='html'>Hola de nuevo. Os traigo la solución al problema 4. Era muy sencillo, pero hay que saber bien que operadores tienen preferencia y como actua cada uno de ellos. En todos los ejemplos usamos un puntero e incrementamos 1, pero el resultado de las operaciones puede ser muy diferente. &lt;br /&gt;&lt;br /&gt;Lo primero que os pedía era organizar las instrucciones y agruparlas en grupos de instrucciones que produzcan el mismo resultado. Luego explicar que hace cada grupo de instrucciones. Por tanto lo primero que voy a hacer es agruparlas:&lt;br /&gt;&lt;br /&gt;Primer grupo:&lt;br /&gt;x = *(p+1);&lt;br /&gt;Segundo grupo: &lt;br /&gt;x = *p+1;&lt;br /&gt;x= (*p)+1;&lt;br /&gt;Tercer grupo:&lt;br /&gt;x = (*p)++;&lt;br /&gt;Cuarto grupo:&lt;br /&gt;x = *(p)++;&lt;br /&gt;x = *p++;&lt;br /&gt;x = *(p++);&lt;br /&gt;x = (*p++);&lt;br /&gt;Quinto grupo:&lt;br /&gt;x = *++p;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vamos a ver que hace cada grupo. Para ello voy a establecer unas condiciones iniciales. &lt;br /&gt;p es un puntero que apunta a un array de 2 posiciones [1,7]. Tras la instrucción vamos a ver cual es el contenido de x y el contenido de p con la instruccion printf("x=%d,p=%d\n",x,*p);&lt;br /&gt;&lt;br /&gt;El primer grupo da como resultado:&lt;br /&gt;x=7, p=1&lt;br /&gt;Es decir, que primero aumentamos el puntero p a la segunda posicion, el contenido lo asignamos a x y p no se modifica.&lt;br /&gt;El segundo grupo da como resultado:&lt;br /&gt;x=2, p=1&lt;br /&gt;Es decir, que a x se le asigna lo que apunte p mas 1, y p no se modifica.&lt;br /&gt;El tercer grupo da como resultado:&lt;br /&gt;x=1, p=2&lt;br /&gt;Es decir, que a x se le asigna lo que vale p y luego se suma al contenido de p un 1.&lt;br /&gt;El cuarto grupo da como resultado:&lt;br /&gt;x=1, p=7&lt;br /&gt;Es decir, se asigna a x lo que vale p y luego se aumenta el puntero p en una posicion&lt;br /&gt;el quinto grupo da como resultado:&lt;br /&gt;x=7, p=7&lt;br /&gt;Es decir, que se incrementa en 1 la posicion de p y se asigna a x el valor.&lt;br /&gt;&lt;br /&gt;Como veis las operaciones eran parecidas, pero producen resultados dispares. La moraleja de esto es que lo mas recomendable en C es usar siempre un convenio, utilizar siempre el mismo tipo de instrucciones para no dar lugar a confusiones. Las mas comunes suelen ser *p++ y (*p)++. La primera para recorrer un array y la segunda para guardar el valor e incrementar el valor del contenido de p.&lt;br /&gt;&lt;br /&gt;Hasta la proxima&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-1490511864690061146?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/1490511864690061146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=1490511864690061146&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/1490511864690061146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/1490511864690061146'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/03/solucion-problema-4.html' title='Solucion Problema 4'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-6215738224395808258</id><published>2007-03-18T00:18:00.000-07:00</published><updated>2007-03-18T00:32:42.809-07:00</updated><title type='text'>Problema 4: Punteros y precedencia de operadores</title><content type='html'>Hola, este es el problema 4. Es muy sencillo como todos los anteriores. Se trata de agrupar las siguientes instrucciones entre aquellas que hagan exactamente lo mismo, y despues para cada grupo explicar que es exactamente lo que se esta haciendo. Estas son las instrucciones:&lt;br /&gt;&lt;br /&gt;x = *(p+1);&lt;br /&gt;x = *(p)++;&lt;br /&gt;x = (*p) + 1 ; &lt;br /&gt;x = (*p)++; &lt;br /&gt;x = *p+1;&lt;br /&gt;x = (*p++);&lt;br /&gt;x = *(p++); &lt;br /&gt;x = *++p;&lt;br /&gt;x = *p++;&lt;br /&gt;&lt;br /&gt;Se trata de nuevo de no usar un compilador sino intentar hacerlo a mano. Mandad vuestras respuestas a mi correo electronico.&lt;br /&gt;&lt;br /&gt;Hasta la proxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-6215738224395808258?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6215738224395808258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6215738224395808258'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/03/problema-4-punteros-y-precedencia-de.html' title='Problema 4: Punteros y precedencia de operadores'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-2245133370378756643</id><published>2007-03-17T23:58:00.000-07:00</published><updated>2007-03-18T00:16:43.109-07:00</updated><title type='text'>Solucion Problema 3</title><content type='html'>Hola de nuevo. Esta es la solución al problema 3, que trataba sobre ANSI C. La pregunta era, sobre este cógido ¿Que numero minimo de cambios hay que hacer para que compile con codigo ANSI, que funcione y la salida por pantalla sea logica?&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void main(); {&lt;br /&gt;int *p, x=5, y; // init&lt;br /&gt;y = *(p = &amp;x) +10;&lt;br /&gt;int z;&lt;br /&gt;flip-sign(p);&lt;br /&gt;printf("x=%d,y=%d,p=%d\n",x,y,p);&lt;br /&gt;}&lt;br /&gt;flip-sign(int *n) {*n = -(*n)}&lt;br /&gt;&lt;br /&gt;Empezemos linea por linea a ver los errores que encontramos y al final os pondre el codigo definitivo.&lt;br /&gt;&lt;br /&gt;En la primera linea no hay errores, se trata de incluir la libreria estandar de entrada y salida.&lt;br /&gt;En la segunda linea encontramos el primer error. &lt;br /&gt;void main(); {&lt;br /&gt;El ; sobra, por tanto deberia ser &lt;br /&gt;void main() {&lt;br /&gt;la tercera linea contiene un error en los comentarios:&lt;br /&gt;int *p,x=5,y; // init&lt;br /&gt;// no es la forma correcta de comentar codigo en ANSI, los comentarios deben ir entre los simbolos /* y */ Por tanto quedaria asi:&lt;br /&gt;int *p,x=5,y; /* init */&lt;br /&gt;La cuarta linea no contiene errores, al puntero p se le hace apuntar a la variable x, y luego se suma 10 con la "dereferencia" (el valor donde apunta) de p y el resultado se almacena en y.&lt;br /&gt;La quinta linea es erronea, ya que solo se pueden declarar variables al principio del bloque de la funcion. Por tanto esta linea la deberiamos pasar arriba, y pasaria a ser la cuarta linea del codigo y la cuarta pasara a ser la quinta. Si nos fijamos bien, la variable z no se usa nunca en el codigo, por lo que esta linea de codigo puede ser eliminada, es otra opcion.&lt;br /&gt;La sexta linea contiene un error en en nombre de la funcion:&lt;br /&gt;flip-sign(p);&lt;br /&gt;Ya que el simbolo - indica resta, por tanto esta linea lo que hace es restar de la variable flip el resultado de la funcion sign, esto es incorrecto ya que ni la variable flip ni la funcion sign estan declaradas, para corregir esto hay que cambiar el nombre de la funcion, por ejemplo podriamos poner:&lt;br /&gt;flip_sign(p);&lt;br /&gt;La septima linea no contiene errores, pero hace algo que no tiene sentido, esto es, imprimir en pantalla el valor de un puntero, es algo que no nos interesa por lo que cambiariamos la linea por esta otra:&lt;br /&gt;printf("x=%d,y=%d,p=%d\n",x,y,*p);&lt;br /&gt;La octava linea es correcta.&lt;br /&gt;La novena linea de codigo tiene 2 errores, una es el nombre de la funcion como se ha explicado antes, y otra es la sentencia dentro de la funcion debe terminarse en ; por tanto la linea correcta seria:&lt;br /&gt;flip_sign(int *n) {*n = -(*n);}&lt;br /&gt;&lt;br /&gt;Por tanto contando los cambios, son 7 los cambios minimos para que el codigo sea ANSI y semanticamente correcto. El codigo final sera:&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void main() {&lt;br /&gt;int *p, x=5, y; /* init */&lt;br /&gt;int z;&lt;br /&gt;y = *(p = &amp;x) +10;&lt;br /&gt;flip_sign(p);&lt;br /&gt;printf("x=%d,y=%d,p=%d\n",x,y,*p);&lt;br /&gt;}&lt;br /&gt;flip_sign(int *n) {*n = -(*n);}&lt;br /&gt;&lt;br /&gt;Para comprobarlo podeis usar el gcc con las opciones "-ansi -pedantic" que hacen que se compile el codigo teniendo en cuenta el estandar ANSI mas estricto.&lt;br /&gt;&lt;br /&gt;Hasta la proxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-2245133370378756643?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/2245133370378756643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=2245133370378756643&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/2245133370378756643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/2245133370378756643'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/03/solucion-problema-3.html' title='Solucion Problema 3'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-440700674385764006</id><published>2007-03-14T20:00:00.000-07:00</published><updated>2007-03-14T20:23:24.294-07:00</updated><title type='text'>Redondeo 2</title><content type='html'>Hola de nuevo. Voy a poner la sencilla solución al problema del redondeo. En realidad en su comentario de la anterior entrada, el cremero lo respondio correctamente pero de forma muy general. Su solucion fue:&lt;br /&gt;&lt;br /&gt;Redondeo(x) = TRUNC(x + DEC(x))&lt;br /&gt;&lt;br /&gt;Donde DEC se queda con la parte decimal de x y TRUNC con la parte entera. Esto es correcto, pero deja abierta la incognita de encontrar una forma adecuada de quedarnos con la parte decimal y con la parte entera. Ademas, esto realmente no necesita de llamadas a funciones, en realidad se puede realizar de forma mas sencilla observando que solo nos preocupa el redondeo teniendo en cuenta el primer decimal y solo si su valor es 5 o no. Como ya dije si el valor es &gt;=5 se redonde hacia "arriba" (el menor entero mayor o igual que x) y si es &lt;5 se redondea hacia "abajo" (el mayor entero menor o igual que x). &lt;br /&gt;&lt;br /&gt;Para hacer esto podemos fijarnos en las funciones matematicas mas parecidas a la descripcion dada anteriormente. La función "suelo" (floor, en ingles) coge el mayor entero menor o igual que x (redondeo hacia abajo). La función "techo" (ceiling, en ingles) devuelve el menor entero mayor o igual que x (redondeo hacia arriba)&lt;br /&gt;&lt;br /&gt;Dicho esto y puesto que solo nos preocupa que el primer decimal sea mayor o menor que 5, podemos usar una de estas funciones, suelo o techo. La pregunta sería como hacerlo usando bien el suelo o el techo de un valor real. &lt;br /&gt;&lt;br /&gt;Pues la forma mas sencilla sería usar la función suelo(x), por ejemplo, de esta forma:&lt;br /&gt;&lt;br /&gt;Redondeo(x) = Suelo(x + 0.5)&lt;br /&gt;&lt;br /&gt;Siguiendo la notación dada por El Cremero anteriormente. nos queda por tanto definir esa función Suelo, ya que puede haber muchas implementaciones... o tal vez no? En un lenguage como C se puede hacer de la forma más sencilla posible con un "casting", ya que nos interesa un número entero podemos hacer un casting a un valor entero, de forma que en C lo más sencillo, teniendo que x es un número real (float), sería hacer lo siguiente:&lt;br /&gt;&lt;br /&gt;z = (int) (x + 0.5);&lt;br /&gt;&lt;br /&gt;Donde z sería una variable entera que guardaría el valor del redondeo. Esto era lo más sencillo, no hacía falta complicarse como veis. Pero tiene limitaciones, como todo en informática, debido a la precisión de los números. Para ambos tipos "float" e "int" se utilizan 32 bits, pero la forma de almacenar el número es distinta, pudiendo con un "float" especificar un valor entero mayor que lo que se puede con un "int", y al hacer el casting habría un desbordamiento y el valor final no sería correcto. Esto siempre hay que tenerlo en cuenta al hacer "castings" a tipos de datos distintos al que realmente se almacena, por tanto no es recomendable hacerlo a menos que se sepa con certeza que el resultado va a ser correcto.&lt;br /&gt;&lt;br /&gt;Si quisieramos hacer un redondeo sencillo pero sin las limitaciones del "casting" se puede hacer teniendo en cuenta la notación en coma flotante y haciendo operaciones con bits, pero eso ya sería mas complicado y dependería del tipo y el lenguage de programación que se usase.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-440700674385764006?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/440700674385764006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=440700674385764006&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/440700674385764006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/440700674385764006'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/03/redondeo-2.html' title='Redondeo 2'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-5742339810141533167</id><published>2007-03-11T20:59:00.000-07:00</published><updated>2007-03-11T21:02:12.885-07:00</updated><title type='text'>Redondeo</title><content type='html'>Hola, quiero lanzar una pregunta al aire. ¿Cual es la función mas sencilla para redondear un número real a su número entero mas cercano? Es decir, si el primer decimal es &lt;5 se redondea hacia abajo y si es &gt;=5 hacia arriba. Meter comentarios con vuestras sugerencias o mandarlas al email. Dentro de unos días pondré mi sugerencia si nadie pone la misma...&lt;br /&gt;&lt;br /&gt;Hasta la proxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-5742339810141533167?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/5742339810141533167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=5742339810141533167&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5742339810141533167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5742339810141533167'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/03/redondeo.html' title='Redondeo'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-601634372934249490</id><published>2007-03-03T18:33:00.000-08:00</published><updated>2007-03-11T19:15:25.018-07:00</updated><title type='text'>Problema 3: ANSI C</title><content type='html'>(Editado: Por petición popular he decidido dar una semana más para resolver este problema. Animaos que es muy sencillo. Teneis hasta el 18/03/2007 para mandar vuestras respuestas)&lt;br /&gt;&lt;br /&gt;Hola de nuevo. Este es el problema 3 del blog, como veis intento mantener el ritmo de 1 problema por semana aunque no se si va a ser posible siempre. Vamos a ver el siguiente codigo:&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void main(); {&lt;br /&gt;  int *p, x=5, y; // init&lt;br /&gt;  y = *(p = &amp;x) +10;&lt;br /&gt;  int z;&lt;br /&gt;  flip-sign(p);&lt;br /&gt;  printf("x=%d,y=%d,p=%d\n",x,y,p);&lt;br /&gt;}&lt;br /&gt;flip-sign(int *n) {*n = -(*n)}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Este codigo tiene ciertos errores sintacticos y semanticos, y lo que se pretende es que compile y funcione. El codigo final debe ser ANSI C. La pregunta entonces es: ¿Que numero minmo de cambio hay que hacer para que compile con codigo ANSI, que funcione y la salida por pantalla sea logica? Mandar tambien el codigo definitvo que os ha quedado. &lt;br /&gt;&lt;br /&gt;Lo interesante de esto es hacerlo a mano, sin usar un compilador. Os animo por tanto a no usar el compilador. Dentro de una semana publicare la respuesta.&lt;br /&gt;&lt;br /&gt;Hasta la proxima&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-601634372934249490?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/601634372934249490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/601634372934249490'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/03/problema-3-ansi-c.html' title='Problema 3: ANSI C'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-5455679065291544348</id><published>2007-03-03T18:11:00.000-08:00</published><updated>2007-03-03T18:26:07.161-08:00</updated><title type='text'>Solucion problema 2</title><content type='html'>Hola de nuevo. Ya ha terminado el plazo de 1 semana que di para resolver este segundo problema. Como habreis comprobado es algo trivial. Ambos codigos hacen algo parecido, esto es, mantener 2 hilos ejecutandose a la vez, uno de ellos se ejecuta primero, modificando una variable global y luego la imprime por pantalla. El otro hilo espera a que el primero termine y luego imprime la misma variable global por pantalla. &lt;br /&gt;&lt;br /&gt;Esta es la salida del primer codigo por pantalla:&lt;br /&gt;value = 5&lt;br /&gt;value = 0&lt;br /&gt;&lt;br /&gt;Esta es la salida del segundo codigo por pantalla:&lt;br /&gt;value = 5&lt;br /&gt;value = 5&lt;br /&gt;&lt;br /&gt;La diferencia entre el primer codigo y el segundo es la llamada que se hace en el primer codigo a la función fork(). &lt;br /&gt;&lt;br /&gt;Como sabeis la llamada a la función fork crea un proceso "hijo" del proceso que se está ejecutando, copiando todo su espacio de direcciones en un nuevo lugar, de forma que con el mismo codigo se crean 2 procesos con ejecuciones totalmente independientes y con un espacio en memoria igual pero independiente.&lt;br /&gt;&lt;br /&gt;En el primer codigo la creacion del hilo se hace dentro del proceso "hijo". Mientras el proceso padre espera a que el hijo termine. El hilo del proceso hijo modifica la variable global llamada "value", la imprime por pantalla y termina. Como esto se hace dentro del proceso hijo, aunque la variable global sea la misma (el espacio de memoria es igual), este cambio no se ve reflejado en el proceso padre (los espacios de memoria son iguales pero independientes), ya que se trata solo de una copia.&lt;br /&gt;&lt;br /&gt;En el segundo codigo se ejecuta un solo proceso. En este proceso se crea un hilo que hace lo mismo que en el primer codigo, modificar la variable global "value" e imprimirla por pantalla. Ya que no llamamos a fork, la API de hilos no crea un espacio de memoria independiente, sino que permite que en el mismo proceso haya 2 hios de ejecucion sobre el mismo codigo y la misma memoria, es decir compartiendo absolutamente todo el espacio de memoria. Por tanto al modificar el hilo la variable global este cambio es "visto" por todos los hilos del proceso en ejecucion. Por tanto en el segundo codigo ambos hilos de ejecucion imprimen por pantalla el nuevo valor de la variable "value".&lt;br /&gt;&lt;br /&gt;Como veis este problema era muy sencillo, solo hacia falta saber que con fork se copia el espacio de direcciones de un proceso y se crea un proceso hijo con un espacio de direcciones igual pero independiente. Mientras que al crear simplemente hilos se crean 2 ejecuciones independientes pero compartiendo el mismo espacio de direcciones ambas. Lo cual permite que se compartan recursos facilmente entre varios procesos, pero esto se debe de hacer con cautela, ya que el acceso simultaneo de varios procesos a la misma zona de memoria puede acabar en resultados indeseados.&lt;br /&gt;&lt;br /&gt;Hasta la proxima&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-5455679065291544348?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/5455679065291544348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=5455679065291544348&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5455679065291544348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5455679065291544348'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/03/solucion-problema-2.html' title='Solucion problema 2'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-3551133984591131294</id><published>2007-02-27T23:23:00.000-08:00</published><updated>2007-02-28T00:03:26.158-08:00</updated><title type='text'>Solucion Problema 1</title><content type='html'>Hola, hoy cumplía el plazo para resolver el problema 1. No he recibido muchas respuestas, pero aquí os voy a poner la solución, si lo sabiais bien y si no pues seguro que os parece interesante. El código, que era muy sencillo, realizaba una llamada a la función ptr, que devolvía un puntero a una variable local de la función. El valor de esta variable era 3. Imprimiamos el valor de esta variable por pantalla y nos devolvía 3, pero luego lo volvíamos a imprimir y obteniamos "basura", un número que dependiendo de cada sistema y de cada momento cambia.&lt;br /&gt;&lt;br /&gt;La pregunta que os formulé era: ¿Por qué sucede esto?&lt;br /&gt;&lt;br /&gt;Lo más lógico sería pensar que si imprimimos un valor por pantalla, y luego sin haberlo modificado en nuestro código lo volvemos a imprimir, este valor no cambie. Pero si que cambia. Para entender esto debemos comprender como se estructura un programa en memoria cuando se está ejecutando. Y para que sirve cada zona de la memoria. Un proceso (programa en ejecución) utiliza dentro de su espacio de memoria 4 zonas bien diferenciadas:&lt;br /&gt;&lt;br /&gt;- Zona de código: Donde se aloja el código fuente del programa. Solo se puede ejecutar una instrucción si está en memoria.&lt;br /&gt;- Zona estática: Donde se alojan las variables globales del programa, que pueden ser accedidas desde cualquier punto del programa.&lt;br /&gt;- Heap: Zona de memoria dinámica. Zona de memoria que debe reservarse para su uso mediante llamadas a funciones como malloc, que a su vez piden memoria al sistema operativo.&lt;br /&gt;- Stack: También conocido como pila de llamadas, esta zona es la zona relevante a nuestro problema. Contiene información necesaria para las llamadas a las funciones dentro de un programa. Esta zona es de rápido acceso ya que es dinámica y no necesita ser reservada, el sistema operativo se encarga de hacerlo automáticamente.&lt;br /&gt;En el siguiente gráfico se pueden ver las distintas zonas de la memoria. Dependiendo del sistema operativo y de la arquitectura el heap y el stack pueden estar intercambiados respecto a este gráfico, pero es indiferente para el funcionamiento de los programas.&lt;br /&gt; &lt;a target="_blank" href="http://4.bp.blogspot.com/_vVCbTWwlYro/ReUzq5DV23I/AAAAAAAAAGs/Pdyv9XouHJ0/s1600-h/runtimestorage.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_vVCbTWwlYro/ReUzq5DV23I/AAAAAAAAAGs/Pdyv9XouHJ0/s320/runtimestorage.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5036488570246126450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como decía el Stack es el que toma el papel protagonista en nuestro problema número 1. El stack, también conocido como pila de llamadas, es la zona encargada de albergar la información necesaria para las llamadas a las funciones de nuestro programa. La típica información que se guarda en el stack es:&lt;br /&gt;- Dirección de retorno de la función. Para saber donde seguir ejecutando una vez que la función termine&lt;br /&gt;- Parametros de entrada de la funcion&lt;br /&gt;- Registros internos que necesiten ser almacenados&lt;br /&gt;- Variables locales de la funcion&lt;br /&gt;&lt;br /&gt;En un lenguage como C, a la hora de llamar a la función simplemente escribimos el nombre de la función y nos olvidamos de la complejidad que hay debajo. El compilador se encarga de traducir esa llamada en almacenamiento de lo necesario en el stack, dejar espacio suficiente en el stack para variables locales y de llamar finalmente a la funcion. &lt;br /&gt;&lt;br /&gt;Vamos a ver por tanto que pasa en nuestro programa. Cuando llamamos a la función "ptr", en la pila se almacena la dirección de retorno y espacio para una variable de tipo "int" llamada "y". Cuando la función termina, devuelve un puntero a la variable "y". Es decir, devuelve un puntero a la dirección física en memoria dentro del stack. Luego metemos ese valor dentro de la variable content y lo imprimimos por pantalla.&lt;br /&gt;&lt;br /&gt;Para imprimir ese valor por pantalla llamamos a la función printf. Esa función como todas las funciones utiliza el stack para almacenar parametros de entrada, dirección de retorno, variables locales, etc. De forma que la función printf sobreescribe la zona de memoria en el stack donde antes estaba "y". Y perdemos el valor de esta variable. Ahora referenciamos de nuevo el puntero que apuntaba a la zona donde antes estaba "y", pero ahora encontramos otro valor distinto, que nos lleva a una zona de memoria que puede contener cualquier cosa. Por tanto la salida del segundo printf es "aleatoria".&lt;br /&gt;&lt;br /&gt;En Windows con el código original no pasó, ya que printf no sobreescribe el stack, por eso introduje una llamada a otra función que no hacía nada en especial pero que utilizaba variables locales, de forma que me aseguré de que la llamada a esa función sobreescribiese el stack y el segundo printf sería distinto al primero.&lt;br /&gt;&lt;br /&gt;Como veis era muy sencillo. Simplemente había que entender que cada vez que llamamos a una función se utiliza la misma zona de memoria para toda la información necesaria para la función. Por eso es una mala práctica devolver referencias a variables locales. En lugar de devolver una referencia a una variable local se debe usar la función malloc para reservar memoria en el heap, y ésta ya es inamovible. Utilizar el stack es rápido y sencillo, pero una llamada posterior a una función sobreescribirá esa memoria, así que de usarlo se debe usar con mucho cuidado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-3551133984591131294?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/3551133984591131294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=3551133984591131294&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3551133984591131294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/3551133984591131294'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/solucion-problema-1.html' title='Solucion Problema 1'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vVCbTWwlYro/ReUzq5DV23I/AAAAAAAAAGs/Pdyv9XouHJ0/s72-c/runtimestorage.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-6102810305125896124</id><published>2007-02-27T23:09:00.000-08:00</published><updated>2007-02-27T23:22:27.705-08:00</updated><title type='text'>SHell de P: Para Windows</title><content type='html'>Hola, en la anterior entrada preguntaba si se os ocurría como modificar el SHell de P para que funcionara en Windows. Después de ver las funciones para creación de procesos y manejo de hilos en la anterior entrada, la modificación del shell para que funcionase en windows es muy sencilla, teniendo en cuenta las siguientes diferencias que nos forzarán a hacer modificaciones:&lt;br /&gt;&lt;br /&gt;- No podemos usar la función fork() ya que no existe en la API de win32. Para emular la llamada de fork() y exec que tenemos en el shell para UNIX, vamos a crear un hilo con la función CreateThread, y la función que ejecute el hilo va a utilizar la función System, que es la forma mas sencilla de ejecutar otro programa.&lt;br /&gt;&lt;br /&gt;- Cambia el manejo de señales. Pero lo bueno es que se vuelve mas sencillo. La función signal hace que podamos especificar una función de procesado de la señal. La función de procesado de la señal es equivalente a la de UNIX.&lt;br /&gt;&lt;br /&gt;- No necesitamos algunas de las funciones propias del shell que si necesitabamos en UNIX. Por ejemplo, no necesitamos "export" para variables de entorno, ni "cd" para cambio de directorio, estas 2 se ejecutarán en el proceso hijo como cualquier otro programa. Solamente vamos a dejar "exit" para terminar la ejecución del programa y "r" para reejecutar un programa.&lt;br /&gt;&lt;br /&gt;- Para "pintar" el "prompt" usaremos la función _getcwd que mete en un buffer de caracteres el path completo. De esta forma coseguimos el "look" propio de ms-dos.&lt;br /&gt;&lt;br /&gt;Solo con estos cambios nos queda un código aún más sencillo que para UNIX. El código es el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/shwindows.c"&gt; shwindows.c &lt;/a&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/shwindows.h"&gt; shwindows.h &lt;/a&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/Makefile-windows"&gt; Makefile-windows &lt;/a&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/shwindows.zip"&gt; shwindows.zip &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Espero vuestros comentarios.&lt;br /&gt;&lt;br /&gt;(Nota: no lo he probado mucho, por ejemplo aunque permitimos ejecutar procesos en modo "background" no he probado que funcione correctamente. Si os falla decidmelo y a ver si lo resolvemos entre todos :))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-6102810305125896124?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/6102810305125896124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=6102810305125896124&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6102810305125896124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6102810305125896124'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/shell-de-p-para-windows.html' title='SHell de P: Para Windows'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-5176171077911394450</id><published>2007-02-25T20:01:00.000-08:00</published><updated>2007-02-25T20:16:58.473-08:00</updated><title type='text'>Hilos en Win32</title><content type='html'>Hola, cuando subi el problema 2 al blog escribi que si me daba tiempo escribiria el codigo equivalente en Windows. Pero me he dado cuenta de que en windows ambos codigos presentados en el problema 2 serían tan diferentes, que no tendría sentido presentar un problema así. Esto viene de que en Windows la API de Procesos y de Hilos es distinta que en UNIX, y además funciona de diferente manera. Por ejemplo, en unix los procesos creados por otros procesos no se eliminan si el proceso "padre" termina, pero en windows si. Lo mismo sucede con los hilos, si el proceso que generó los hilos termina, los hilos creados que no hayan terminado de ejecutarse mueren automaticamente. Pero hay muchas mas diferencias. Estas son algunas de las funciones que se pueden usar para crear procesos e hilos en Windows:&lt;br /&gt;- System (...) : Ejecuta un comando&lt;br /&gt;- Exec (...): Exec y sus variantes (execv ...) realizan exactamente lo mismo que exec en UNIX.&lt;br /&gt;- Spawn (...): Similar a exec.&lt;br /&gt;- CreateProcess(...): Ejecuta un comando paralelamente al proceso que llama a la funcion. Además permite compartir memoria entre ambos procesos. Sería el equivalente de hacer fork y exec seguidos en unix.&lt;br /&gt;- CreateThread(...): Crea un hilo independiente que se ejecuta en el mismo espacio de direcciones del proceso que lo crea (como en cualquier implementacion de hilos), lo que hace que se comparta la memoria y el codigo del programa. Esta funcion fuerza a especificar una funcion desde donde va a empezar a ejecutarse el hilo.&lt;br /&gt;&lt;br /&gt;Como veis esta es la forma de "jugar" con procesos e hilos en Windows. Aquí os dejo un código parecido a los del problema 2, que ilustra la creación y manejo de Threads (Hilos) en Windows:&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/winthread.c"&gt;Thread Win32 API&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta librería de funciones puede ser un punto de partida para modificar el shell de UNIX que cree hace 2 semanas y hacer uno similar pero para Windows. ¿Se os ocurre como?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-5176171077911394450?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/5176171077911394450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=5176171077911394450&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5176171077911394450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5176171077911394450'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/hilos-en-win32.html' title='Hilos en Win32'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-5597442275356759265</id><published>2007-02-24T17:35:00.000-08:00</published><updated>2007-02-24T18:38:49.809-08:00</updated><title type='text'>Problema 2: Concurrencia. Hilos</title><content type='html'>Hola. Me complace presentaros el segundo problema de "Era Informatica", este problema lo vi en un libro de sistemas operativos y es realmente muy sencillo. Aqui os dejo 2 links con 2 codigos muy parecidos pero con una pequeña diferencia. Estos codigos ejecutan hilos concurrentemente y modifican una variable global. Si los compilais y los ejecutais vereis que la salida por pantalla es distinta. La pregunta es ¿Por que la salida del programa es distinta? (De nuevo explicar con el mayor detalle posible)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/concurrente.c"&gt;Codigo 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/concurrente2.c"&gt;Codigo 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como comprobareis es realmente una trivialidad. Espero que os animeis a participar. Mandad un email con vuestra respuesta.&lt;br /&gt;&lt;br /&gt;PD: La API de hilos usada es PThreads por lo que solo podreis compilarlo en sistemas tipo UNIX. Si tengo tiempo esta semana hare un codigo parecido para windows (pero no se si podre). En cualquier caso el codigo es tan sencillo que no hace falta compilarlo para deducir la salida del programa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-5597442275356759265?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5597442275356759265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/5597442275356759265'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/problema-2-concurrencia-hilos.html' title='Problema 2: Concurrencia. Hilos'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-7472480645096586205</id><published>2007-02-20T00:16:00.000-08:00</published><updated>2007-02-20T17:48:02.186-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libertad'/><category scheme='http://www.blogger.com/atom/ns#' term='salvar internet'/><category scheme='http://www.blogger.com/atom/ns#' term='net neutrality'/><title type='text'>Salvar internet</title><content type='html'>Desde hace meses se esta debatiendo en Estados Unidos una petición por parte de varias empresas de telecomunicaciones, que controlan los ISP (proveedores de servicio de internet), para cambiar la politica que reina en internet.&lt;br /&gt;&lt;br /&gt;Cuando internet fue inventado se tomo una decision que ha sido hasta el dia de hoy critica para la evolucion tan fantastica que esta plataforma ha tenido, una decision que nadie sabia si iba a ser buena o no en su dia, pero todos aquellos que diseñaron internet comparten, hoy por hoy, que fue lo mejor que se podia haber hecho entonces. Esta decision se basaba en dejar la "logica" en los "extremos". &lt;br /&gt;&lt;br /&gt;Por "logica" entendemos los procedimientos logicos que los terminales digitales son capaces de procesar.&lt;br /&gt;&lt;br /&gt;Por "extremos" entendemos las partes comunicantes, no el medio por el que se comunican.&lt;br /&gt;&lt;br /&gt;Por tanto mantener la logica en los extremos significaba que los terminales digitales (moviles, pcs, etc...) conectados a internet tendrian que procesar cada mensaje por si mismos y que el medio fisico por el cual se enviaban mensajes de un terminal a otro solo se encargaba de encontrar el camino entre un punto y otro. Es decir, todo contenido que viaja por la red es igual, se trata de una señal codificada que representa un conjunto de bits y todas las señales son tratadas como iguales, independientemente de que contengan y de donde vengan. Es por tanto labor de los extremos, de los terminales conectados, el evaluar esa señal, decodificarla y convertirla finalmente en una pagina web, un video de youtube, un mensaje de voz, una señal de television, etc...&lt;br /&gt;&lt;br /&gt;Este entorno tan libre y equitativo, ha sido la plataforma ideal para que emprendedores de todos lados del planeta sean capaces de hacer llegar su ingenio a cualquier parte del mundo. Empresas como Google, Youtube, eBay o Amazon empezaron siendo un sueño de personas que tuvieron una idea y que gracias a las posibilidades que internet les ofrecia se convirtieron en empresas multinacionales que ofrecen servicios impensables tan solo 15 años atras.&lt;br /&gt;&lt;br /&gt;Ahora, en 2007, tras un largo debate entre empresas y politicos, pero nunca ciudadanos de a pie, se está intentando en Estados unidos que todo esto cambie. Las empresas que controlan los ISP cobran por dar un servicio de conexion a internet a sus clientes. Ademas, empresas que controlan los "dominios" (subredes con nombres facilmente reconocibles a los humanos, especialmente importantes para las paginas web) tambien cobran por el alquiler de un nombre dentro de internet.&lt;br /&gt;&lt;br /&gt;Sin embargo, si una empresa ademas quiere vender junto con su conexion a internet un servicio digamos de mensajeria (como MSN messenger) o de blogs (como blogger), lo tiene muy dificil en un ambiente tan competitivo como el de internet. Cualquiera está dando esos servicios a coste 0, ¿como poder cobrar por ello?&lt;br /&gt;&lt;br /&gt;La respuesta es sencilla. Ya que las lineas fisicas de conexion (cables de telefono, cables coaxiales, cables de fibra optica o antenas para conexion inalambrica) son propiedad de las empresas que realizaron esa inversión en contruirlas. Y dado que todo mensaje enviado por internet se procesa a traves de esas lineas por los "servidores" que son propiedad de dichas empresas. Sería facil eliminar la premisa de "logica en los extremos", y poner algo de "logica en el medio".&lt;br /&gt;&lt;br /&gt;Por ejemplo, cuando un ordenador de España se conecta a un ordenador en Estados Unidos, el ordenador de España manda un mensaje a traves de su ISP, el ISP lo manda al ISP del ordenador estadounidense y este a su vez se lo envia al destinatario. Ahora mismo los servidores solo "enrutan", es decir, encuentran el camino para que el paquete llegue a su destinatario. Pero con la "logica en el medio", los ISP podrian decidir que si el paquete que el ordenador en España envia es por ejemplo una web, esta deberia ser discrimanada frente a un paquete de video, y tambien si esta web esta publicada en una empresa competidora, seria tambien discriminada, de forma que aunque finalmente la conexion se pudiera realizar, esta quedaria relegada a la conexion mas lenta posible.&lt;br /&gt;&lt;br /&gt;De esta forma se controlaria lo que las personas hacen en internet, ya que cuando acceden a ciertos servicios para los que han pagado estos se distribuirian sin problemas por la "via rapida" y si acceden a servicios de otros operadores, gratuitos o ajenos a cualquier contrato con el ISP, todo quedaria relegado a la "via lenta"&lt;br /&gt;&lt;br /&gt;Si esta propuesta de las empresas de telecomunicaciones mas grandes de Estados Unidos y de las mas grandes del mundo se aprueba en el congreso, estas empresas crearan dos redes, la lenta y la rapida. La rapida contendra todos aquellos servicios que ellos venden (lo que promoveria contratos multimillonarios entre grandes empresas para dar TV, musica, telefonica, etc... por internet), y la lenta contendria todo lo que se queda fuera. En esencia, los datos por los que mas se pague, que seran datos audiovisuales, iran por la via rapida, mientras que consultar webs, compartir ficheros, etc, iria por la via lenta. En un extremo de todo esto esta el que al dar ese poder sobre la red a las empresas, estas implantarian un codigo segun el cual se reservan el derecho de autorizar un contenido u otro. Por ejemplo, si tienes un amigo que tiene un blog en una pagina A, y tu ISP decide que no autoriza ver contenidos que vengan de A, ese blog quedara censurado para ti hasta que cambies de proveedor, o tu amigo decida pagar por tener un blog en el mismo proveedor que tu.&lt;br /&gt;&lt;br /&gt;Los riesgos de esto son muchos, las empresas pueden pactar precios para fijar el mercado a su antojo. Toda innovacion que no controlen no tienen porque autorizarla en sus redes (ni las rapidas ni las lentas). Empresas que salian de la nada sin nigun dinero como Google, Yahoo o Amazon, no volveran a surgir, solo nuevos servicios de empresas grandes ya consolidadas que tengan acuerdos multimillonarios con los proveedores. La censura vendra dada por intereses economicos de las empresas y no por la justicia ordinaria (en base a criterios de libertad e igualdad)&lt;br /&gt;&lt;br /&gt;Afortunadamente aun hay esperanza. Muchos senadores norteamericanos (sobre todo democratas), aprovechando la campaña politica de 2006, se han puesto del lado de lo que alli llaman "net neutrality", que no es ni mas ni menos que oponerse a este intento de cambio de internet. Por otro lado, Estados Unidos no esta solo en el mundo, hay muchos otros paises con diferentes puntos de vista. Sin embargo no conviene dormirse ante una noticia asi. Pensar que esto aqui no pasara o que no alli lo conseguiran y olvidarse del tema, solo llevara a lamentaciones posteriores. Es necesario concienciarse de que no podemos permitir este nuevo aprovechamiento de los poderosos frente a los debiles, de destruir lo que se ha convertido en una de las mejores herramientas para el avance y la unidad de todo el mundo. &lt;br /&gt;&lt;br /&gt;Debeis saber que como en toda democracia el poder esta en nuestras manos, el de denunciar y el de luchar por lo que es justo.&lt;br /&gt;&lt;br /&gt;Hay mucho en internet sobre este tema, os dejo el link de una de las web que mas esta haciendo por el "net neutrality" &lt;a target="_blank" href="http://www.savetheinternet.com"&gt; Save the internet &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un saludo a todos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-7472480645096586205?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/7472480645096586205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=7472480645096586205&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/7472480645096586205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/7472480645096586205'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/salvar-internet.html' title='Salvar internet'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-6771465014680153265</id><published>2007-02-18T21:43:00.000-08:00</published><updated>2007-02-18T21:48:01.262-08:00</updated><title type='text'>Codigo del Shell</title><content type='html'>Hola de nuevo, espero que hayais descansado este fin de semana. Mientras os pensais el problema, no se si alguien lo habra visto... Os publico mi codigo del SHell de P (shp), como vereis se puede optimizar en muchos puntos, pero esa hecho para que sea facil de entender y ademas es un codigo muy cortito. Podeis bajaros tanto los ficheros sueltos, como un zip donde estan los 3 ficheros que he creado (makefile, sh.c y sh.h). Espero vuestros comentarios al respecto.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/Makefile"&gt;Makefile&lt;/a&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/sh.c"&gt;sh.c&lt;/a&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/sh.h"&gt;sh.h&lt;/a&gt;&lt;br /&gt;&lt;a href="http://era-informatica.bravehost.com/shp.zip"&gt;shp.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-6771465014680153265?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/6771465014680153265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=6771465014680153265&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6771465014680153265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/6771465014680153265'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/codigo-del-shell.html' title='Codigo del Shell'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-8658981626059135051</id><published>2007-02-17T22:33:00.000-08:00</published><updated>2007-02-21T17:38:02.036-08:00</updated><title type='text'>Problema 1: Reserva de memoria en C</title><content type='html'>(EDITADO: como me apuntaba el cremero (&lt;a target="_blank" href="http://lacremerie.blogspot.com"&gt;La Cremeriè&lt;/a&gt;) este programa compilado con el gcc en windows muestra la misma salida por pantalla para ambos printf, lo cual lleva a confusion, pero eso no quiere decir que no suceda lo que realmente sucede, que es lo que os pregunto, ¿que sucede? Para solucionar esto y que al compilar en windows os salga una salida diferente y esto no os desvie del verdadero problema he creado un codigo que lo que hace es meter una llamada a una funcion que como vereis no hace nada, pero esto provoca que ya si la salida de los 2 printf sea distinta. Ahora resolver el misterio es mucho mas facil ¿verdad? Espero vuestros correos y amplio el plazo de resolucion hasta el dia 28/02. Recordad la pregunta, porque pasa esto? Explicar con detalle)&lt;br /&gt;&lt;br /&gt;Hola, que tal? Ya que estoy decidido a darle un poco de vidilla a este blog, voy a poner un problemita de programación en C. Este primero es muy sencillo y curioso. El siguiente codigo tiene un problema obvio, pero las preguntas que os hago son: ¿Cual es la salida por pantalla del siguiente codigo? ¿Por que sucede esto? (Explicar con el maximo detalle posible).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(EDITADO: Nuevo codigo)&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int *ptr()&lt;br /&gt;{&lt;br /&gt;int y;&lt;br /&gt;y=3;&lt;br /&gt;return &amp;y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void funcionquenohacenada()&lt;br /&gt;{&lt;br /&gt;   int *x;&lt;br /&gt;&lt;br /&gt;   x=(int*)malloc(sizeof(int)*5);&lt;br /&gt;   free(x);   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;int *pointer, content;&lt;br /&gt;pointer = ptr();&lt;br /&gt;content = *pointer;&lt;br /&gt;printf("%d\n", content);&lt;br /&gt;funcionquenohacenada();&lt;br /&gt;content = *pointer;&lt;br /&gt;printf("%d\n", content);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;(FIN DE EDICION)&lt;br /&gt;&lt;br /&gt;(EDITADO: codigo antiguo, no usar en windows)&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int *ptr()&lt;br /&gt;{&lt;br /&gt;int y;&lt;br /&gt;y=3;&lt;br /&gt;return &amp;y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;int *pointer, content;&lt;br /&gt;pointer = ptr();&lt;br /&gt;content = *pointer;&lt;br /&gt;printf("%d\n", content);&lt;br /&gt;content = *pointer;&lt;br /&gt;printf("%d\n", content);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Podeis compilarlo y ejecutarlo para ver que aunque aparentemente los 2 printf son similares la salida es distinta. Aunque lo suyo es intentar hacerlo sin programarlo. Mandar vuestras respuestas a mi direccion de correo que esta en mi perfil y dentro de una semana publicare el resultado y dire quien lo ha acertado. Como es muy sencillo imagino que todo el mundo lo acertara sin problemas.&lt;br /&gt;(A partir de ahora dejare las entradas de los problemas sin comentarios para que mande cada uno su solucion al email y asi no se entorpezcan los unos con los otros)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-8658981626059135051?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/8658981626059135051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/8658981626059135051'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/problema-1-reserva-de-memoria-en-c.html' title='Problema 1: Reserva de memoria en C'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-301895346306859297</id><published>2007-02-16T19:32:00.000-08:00</published><updated>2007-02-16T20:10:26.218-08:00</updated><title type='text'>Como hacer un shell</title><content type='html'>Buenas a todos. Quizas el titulo es demasiado pretencioso. No quiero dar una forma detallada de como hacer un shell, hoy en dia hacer un shell es una tonteria ya que existen muchos en el mercado que ademas hacen cosas increibles, pero vamos a hablar de los princpios que tiene todo shell. Repito que lo mejor no es hacer un shell, sino contribuir a la mejora de los que ya existen (de eso va el software libre).&lt;br /&gt;&lt;br /&gt;Empecemos por definir un shell.&lt;br /&gt;Como yo no soy muy elocuente, intentare definirlo atendiendo a su funcionalidad y espero que con eso sea suficiente para que todo el mundo lo entienda (si ya lo sabes podeis obviar esta seccion). Historicamente los ordenadores no tenian lo que se llamaban terminales de entrada o consola de entrada, y la unica salida era una impresora o una cinta. Las cosas avanzaron y se crearon los sistemas operativos que procesaban las ejecuciones de los procesos en forma de ejecucion por lotes (un trabajo tras otro). Segun evolucionaba todo y a la vez de disponer de teclados y pantallas era necesaria una forma de comunicarse con el sistema operativo de forma que le indicasemos que proceso debia ejecutar a continuacion. Esa forma arcaica de comunicacion entre el humano y la maquina la llevaba a cabo el shell (interprete de comandos). Para muchos es simplemente la pantallita negra con el cursor parpadeante. El shell era el encargado de hacer las llamadas al sistema operativo necesarias para que éste ejecutase un programa. Hoy en dia todo esto esta muy avanzado, los shell no solo permiten comunicarse con el SO para ejecutar un programa, ademas permiten la ejecucion en paralelo de varios programas, crear scripts propios para automatizar tareas, mandar la salida de un proceso como entrada de otro de forma automatica, etc. &lt;br /&gt;&lt;br /&gt;Nuestro shell basico.&lt;br /&gt;Dado que mi nombre empieza por P lo voy a llamar SHell de P, abreviado shp. Las funciones que va a tener serán las siguientes:&lt;br /&gt;1. Debe coger la entrada de un comando mediante teclado, y ejecutar el comando en un proceso hijo&lt;br /&gt;2. Normalmente el shell debe esperar a que el proceso hijo termine de ejecutarse para pedir otro comnado, pero si el ultimo parametro del comando es &amp;, entonces no debe esperar, ejecutandose el shell y el comando de forma simultanea.&lt;br /&gt;3. Vamos a incluir la ejecucion especial de comandos propios del shell, que seran cd para cambiar de directorio, export para crear variables de entorno y exit para terminar la ejecucion del shell.&lt;br /&gt;4. Mediante una señal provocada por la combinacion de teclas CTRL+C (señal SIGINT) se imprimira por pantalla el historial de los ultimos comandos ejecutados (se podra especificar mediante una variable de entorno la longitud de esta lista, que por defecto sera de 10)&lt;br /&gt;5. Mediante un nuevo comnado r num (numero de linea) se reejecutara un comando que este en el historial de ejecuciones, determinado por el numero de entrada (num).&lt;br /&gt;&lt;br /&gt;Dados los requerimientos vamos a determinar unas limitaciones del shell:&lt;br /&gt;1. Tanto la creacion de procesos, como el manejo de señales sera el propio de UNIX intentando acomodarse a los estandares POSIX. Es decir, el programa no sera portable a otros sistemas operativos. Yo lo he programado y probado en BSD y Linux.&lt;br /&gt;2. El shell es muy basico y no contendra de momento funcionalidades tipicas de otros shell como redireccionamiento de entrada o salida estandar, ni lectura de ficheros, etc etc.&lt;br /&gt;&lt;br /&gt;Vamos a desarrollar el shell en C, intentando que sea ANSI, aunque no se si habre metido la pata en este punto, si es asi agradecer vuestras correcciones.&lt;br /&gt;Las herramientas que necesitamos son las siguientes:&lt;br /&gt;Funcion fork() para crear procesos&lt;br /&gt;Funcion waitpid(...) para esperar a la ejecucion de un proceso&lt;br /&gt;Funcion sigacion(...) para la captura de la interrupcion ctrl+c&lt;br /&gt;Funcion execvp(...) para la ejecucion de un comando&lt;br /&gt;Y lo demas son funciones de la libreria estandar de C. Para ver la ayuda de como usar estos comandos, tanto en unix como linux teclead man + nombre del comando, y vereis como se usan.&lt;br /&gt;&lt;br /&gt;Esta es una breve descripcion funcional del proceso:&lt;br /&gt;La funcion main(donde empieza todo) se mete en un bucle infinito y llama la funcion setup. La funcion setup coge la entrada de teclado, la separa en un array de comandos y retorna. La funcion main determina si es un comando propio de shell o se debe ejecutar en la maquina. Si es de shell se ejecuta en una funcion propia. Si es de la maquina se crea un proceso hijo. El proceso hijo ejecuta el comando y el shell determina si debe esperar o seguir su ejecucion (parametro &amp;). Vuelve a empezar el proceso. Si durante el proceso el usuario pulsa ctrl+c, se imprime el historial de ejeuciones y se continua el proceso donde se dejo.&lt;br /&gt;&lt;br /&gt;Os animo a que si teneis tiempo lo programeis, se tarda muy poquito y es divertido. Como veis no he detallado totalmente como funcionara el shell, los detalles se dejan a la imaginacion de cada uno. Si quereis podeis añadir cosas nuevas. En la proxima entrada del blog dentro de unos dias publicare el codigo fuente que yo he creado, aunque quiza el vuestro sea mejor. Agradecere comentarios y sugerencias, a ver si asi consigo hacer de esto algo participativo (aunque dada mi popularidad en la blogosfera lo dudo mucho...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-301895346306859297?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/301895346306859297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=301895346306859297&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/301895346306859297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/301895346306859297'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2007/02/como-hacer-un-shell.html' title='Como hacer un shell'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-115830594348917067</id><published>2006-09-15T00:34:00.000-07:00</published><updated>2006-09-15T00:39:03.490-07:00</updated><title type='text'>Mas cursos</title><content type='html'>Hace unos posts hable del OpenCourseWare del MIT, donde podiais bajaros gratis videos o audios de las clases que dan alli. Ahora le toca el turno a Berkeley. La Universidad de California en Berkeley tambien es una de las prestigiosas universidades estadounidenses, y se han subido al carro de los webcasts y podcasts. Desde iTunes y completamente gratis podeis bajaros cursos de Berkeley en muchas materias, como Fisica, Biologia, Informatica, etc etc. La URL es webcast.berkeley.edu/courses, en el iTunes podeis bajaros el mp3 de la clase. Aunque muchas veces solo un audio no dice mucho, en la pagina web os podeis bajar en formato "streaming" ram de real audio los videos. En realidad no podeis bajaros los videos al ordenador, pero si podeis verlos siempre que tengais conexion a internet. &lt;br /&gt;&lt;br /&gt;Pues nada, animaos a aprender, que nunca es tarde... Me pregunto cuando haran esto en España.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-115830594348917067?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/115830594348917067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=115830594348917067&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115830594348917067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115830594348917067'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2006/09/mas-cursos.html' title='Mas cursos'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-115591284431768781</id><published>2006-08-18T07:46:00.000-07:00</published><updated>2006-08-18T07:56:43.860-07:00</updated><title type='text'>Mac o PC? (3)</title><content type='html'>Voy a terminar esta serie sobre el Mac y el PC con un ultimo comentario acerca de las diferencias o dificultades que podemos encontrarnos si adquirimos un Mac en lugar de un PC y le instalamos windows. El problema mas llamativo con el que me he enfrentado ha sido la diferencia de teclado. Yo tengo un portatil, lo cual ya lleva por problemas de espacio restricciones de teclas, pero aun mas si pensamos en Mac, que utiliza bastantes menos teclas que windows, teclas a las que muchos estamos acostumbrados como Supr o Ins. Fijaos la importancia de la tecla Supr para windows, ya que a veces es necesario poder aplicar la combinación Ctr+Alt+Supr, por ejemplo para inicar la sesión si tenemos el inicio de sesión de windows con la máxima seguridad posible. Para solventar este problema se pueden usar 2 programas de fácil manejo y bastante eficientes que la única funcionalidad que tienen es la de mapear el teclado a nuestro gusto, es decir, le decimos en que tecla queremos que otra tecla. Por ejemplo, en mi caso he puesto que la tecla F11 sea Supr y la F12 la tecla Ins, puesto que estas teclas suelen usarse poco (a menos que programes en VB). Las aplicaciones que se pueden usar para conseguir este efecto son:&lt;br /&gt;- Microsoft resource Toolkit (remapkey.exe)&lt;br /&gt;- KeyTweak (gratis y se puede bajar de &lt;a target="_blank" href="http://webpages.charter.net/krumsick/"&gt;http://webpages.charter.net/krumsick/&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Bueno, espero que os haya gustado estos comentarios para acercaros un poco al mundo de Mac, yo no se mucho todavía, pero me está gustando, y visto que puedo solventar todos estos pequeños problemitas con windows creo que he hecho bien en comprarme el macbook, asi tengo al alcance mas posibilades que si tuviese un PC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-115591284431768781?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/115591284431768781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=115591284431768781&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115591284431768781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115591284431768781'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2006/08/mac-o-pc-3.html' title='Mac o PC? (3)'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-115554241307959124</id><published>2006-08-14T00:52:00.000-07:00</published><updated>2006-08-14T01:00:13.096-07:00</updated><title type='text'>Mac o PC? (2)</title><content type='html'>Si has decidido comprarte el mac, aqui te indico unos links que te serán de utilidad en el caso de que quieras usar otros sistemas operativos en tu mac:&lt;br /&gt;&lt;br /&gt;- www.parallels.com: software de maquinas virtuales que permite compartir recursos como memoria, carpetas etc, entre mac y otros OS&lt;br /&gt;- BootCamp de Apple (si lo buscais en google lo encontrareis facil): De momento solo en versión beta os permite crear una partición para instalar windows (home o XP con SP2) en una partición independiente y arrancar el OS que os apetezca cada vez (necesita reiniciar para cambiar de OS). De momento solo es versión beta, pero vendrá incluido en la próxima versión de mac os, la Leopard.&lt;br /&gt;- Pronto, dicen que a finales de año habrá una versión de VMWare para mac os x. Si esto es así el VMWare os permitirá crear máquinas virtuales con los OS que queráis.&lt;br /&gt;&lt;br /&gt;Un apunte mas sobre el cambio de PC a Mac, por si acaso lo estás pensando, el software de windows que quieras usar en mac suele estar disponible en otras versiones, aqui os pongo lo mas comunmente usado en su versión mac:&lt;br /&gt;- www.microsoft.com/mac: esta dirección es lo que microsoft llama mactopia, es un conjunto de aplicaciones de microsoft para mac, como el office, el messenger, el windows media, etc..&lt;br /&gt;- Flip4Mac: un conjunto de herramientas y codecs para Quicktime para poder visualizar formatos de microsoft&lt;br /&gt;- aMule: versión de eMule para Mac o Linux&lt;br /&gt;- aMsn: versión para Mac o Linux de messenger, es bastante mejor que el Messenger de microsoft ya que tiene compatibilidad con emoticonos y con la webcam y el audio de mac.&lt;br /&gt;&lt;br /&gt;Eso es todo de momento, volveremos a vernos..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-115554241307959124?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/115554241307959124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=115554241307959124&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115554241307959124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115554241307959124'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2006/08/mac-o-pc-2.html' title='Mac o PC? (2)'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-115547191594279098</id><published>2006-08-13T05:14:00.000-07:00</published><updated>2006-08-13T05:25:15.953-07:00</updated><title type='text'>Mac o PC?</title><content type='html'>Siempre estudiando lo bueno de la arquitectura RISC y animando a Apple a que siguiese y demostrase que eso era lo mejor y no se equivocaban. Pero se equivocaban, al final al optado por Intel, y les va mejor. Decidi comprarme un Macbook pro, un portatil de Mac, con core duo, porque me aseguraba no solo el software y hardware de Apple, sino tambien el poder instalarme mi windows y seguir trabajando como hasta ahora si es lo que queria. Pero hay muchos indecisos, quizas lo que mas asusta es el precio de estos portatiles, realmente caros. Yo animo a optar por uno de los nuevos macs, estoy contento, el software de mac es compatible con casi todo, el unico problema que encontrareis es con algun hardware que no quiera funcionar en el mac os x. Pero para eso podeis usar windows, hacer una particion pequeñita para windows e instalarlo, y asi podeis usar esa camara de fotos antigua o lo que sea que no funcione, porque lo demas no solo lo podeis hacer en mac, sino que os gustara mas hacerlo en mac. El aspecto es mas elegante, funciona mejor, no se cuelga, es compatible con todo sofware que corra en X11, esta motado sobre un UNIX, robusto, seguro, alejado de los virus que nos destrozan continuamente el windows. Hay una cosa que no me gusta, si es que te decides a comprarlo y le pones un windows, debes saber que la compatibilidad con el hardware no es total, tenemos problemas con algunos puertos, con la camara web, el ordenador se calienta mucho mas, y no funcionan las opciones de energia (como salvapantallas o suspension del ordenador), por lo que no es recomendable dejarlo encendido toda la noche bajando pelis con el emule. Por otro lado, si quereis hacerlo en mac podeis, no se calentara tanto, y funcionara sin problemas. Solo una ultima cosa, he leido en internet que antiguamente los power book de Apple tenian un pequeño problema con la bateria, mas o menos el problema era que podia estallar si se calentaba demasiado. Apple dice que ese problema esta resuelto, pero es cierto que el mac book se caliente bastante asi que hay que tener cuidado de cargar la bateria solo el tiempo necesario y si lo vais a dejar encendido quitarle la bateria y dejarlo enchufado a la red electrica, sera mas seguro. Espero que este comentario os ayude a decidiros, os dire una cosa, si os pasais a mac nunca os arrepentireis...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-115547191594279098?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/115547191594279098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=115547191594279098&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115547191594279098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115547191594279098'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2006/08/mac-o-pc.html' title='Mac o PC?'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-115148924833112033</id><published>2006-06-28T02:58:00.000-07:00</published><updated>2006-06-28T03:09:44.806-07:00</updated><title type='text'>MIT gratuito</title><content type='html'>Hay alguien que no sepa que es el MIT? Si es asi has debido de pinchar el link equivocado, en cualquier caso bienvenido. Breve explicación del MIT: universidad americana. Bueno, es el massachusetts institute of technology, y es una de las universidades mas caras del mundo, y mas prestigiosas. Ofrece muchas carreras distintas y es muy dificil entrar, ya que tienes que ser una especie de friki o genio del estudio. En fin, para aquellos sin tanto nivel economico, con ganas, que se aburren, curiosos, o gente que busque apoyo para su carrera, etc... Pues el MIT ofrece unos cursos on-line gratuitos en su pagina ocw.mit.edu, lo de ocw viene de OpenCourseWare, que es como se llama el programa este. Pues esto que tiene que ver con la informatica? Pues simplemente que alli tambien hay cursos de informatica, si a alguien le interesa. Podeis encontrar apuntes, presentaciones, examenes de ejemplo, videos o audios de clases, e incluso un foro con el que discutir conceptos con otra gente como vosotros. Yo lo suelto y lo dejo en links, para que si alguien esta interesado, pues que lo use y santaspascuas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-115148924833112033?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/115148924833112033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=115148924833112033&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115148924833112033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/115148924833112033'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2006/06/mit-gratuito.html' title='MIT gratuito'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-114743914579115866</id><published>2006-05-12T06:01:00.000-07:00</published><updated>2006-05-12T06:05:45.803-07:00</updated><title type='text'>Sentido homenaje</title><content type='html'>Mientras me pienso que poner aqui, una foto de los padres del C, del UNIX y de todos nosotros en definitiva (Cardigan y hardley):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/4951/1929/1600/Ken_n_dennis.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/4951/1929/320/Ken_n_dennis.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aqui les tenemos despues de salir de un agujero de 3x5m en los laboratorios bell, tras año y medio creando el C, el UNIX, y yo que se que mas...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-114743914579115866?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/114743914579115866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=114743914579115866&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/114743914579115866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/114743914579115866'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2006/05/sentido-homenaje.html' title='Sentido homenaje'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24250916.post-114260199453809377</id><published>2006-03-17T05:23:00.000-08:00</published><updated>2006-04-24T07:14:24.366-07:00</updated><title type='text'>Primer mensaje</title><content type='html'>Hola, este es un blog dedicado a hablar sobre informatica desde conceptos tecnicos, profesionales y de divulgación. Es un proyecto ambicioso que como muchos otros puede caer en saco roto, por eso tendre que hacer un sobreesfuerzo si quiero mantenerlo, ademas los comentarios que pongais pueden ser de gran ayuda. Os dare mi direccion de correo tambien para que podais comunicaros conmigo y mandarme algo que querais que publique. De momento solo lo he reservado, en cuanto la cosa empiece a funcionar vereis bien a que me refiero&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24250916-114260199453809377?l=era-informatica.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://era-informatica.blogspot.com/feeds/114260199453809377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24250916&amp;postID=114260199453809377&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/114260199453809377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24250916/posts/default/114260199453809377'/><link rel='alternate' type='text/html' href='http://era-informatica.blogspot.com/2006/03/primer-mensaje.html' title='Primer mensaje'/><author><name>Marion Etta</name><uri>http://www.blogger.com/profile/09156396545113848238</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
