Spanish Developers Community

Page 1

Spanish Developers Community numero 6 足 noviembre 2013


Ibidem Network Consultores Informáticos

¿Quieres encontrar soluciones prácticas para tu negocio que se adecuen a tus necesidades y a tu bolsillo? Encuentra en nosotros la solución ideal para tu negocio. Página web: www.ibidem­network.es

Blog www.ibidem­network.es/blog

Facebook www.facebook.com/ibidemnetwork

Pinterest www.pinterest.com/ibidemnetwork

No sólo deben verte también tienen que recordarte 2

© 2013 - www.spanishdeveloperscommunity.es


Contenidos 01 Detecta intrusos en tu wifi desde tu móvil android 02 Reino Unido y otras naciones toman el camino del open source en lo público. 03 Instala el tema de windows en tu distribución linux ubuntu o linux mint 04 Elegir el mejor repositorio en la distribución debian 05 Estructuras de datos en C: Arboles AVL 06 ¿Cómo instalar wine en ubuntu 13.10 para ejecutar aplicaciones windows

número

6

© 2013 - www.spanishdeveloperscommunity.es

3


Acerca de Spanish

Developers Community es una iniciativa sin ánimo de lucro, dedicada al fomento y difusión del software basado en licencias GPL, Programación de lenguajes de programación, Sistemas Operativos Linux / Android e iOS así como diseño gráfico y redes sociales. Alcanzar nuestro objetivo de una función docente y con la intención de que estos conocimientos puedan aplicarse de una manera práctica en las actividades cotidianas de los estudiantes universitarios, empresarios y autónomos . Spanish developers community se basa en la colaboración desinteresada de profesionales y estudiantes que comparten sus saber­hacer, sus conocimientos teóricos y prácticos con la comunidad informática en Internet. Esta publicación digital se distribuye mensualmente bajo una licencia Creative Commons

Colabora ¿Quieres colaborar con Spanish Developers Community?. Tienes muchas formas de hacerlo:

Envía tu artículo Puedes enviarnos tu artículo a la

Detecta intrusos en tu wifi desde tu móvil android Las redes locales se han convertido en un estandar y, aunque aún funcionan algunos dispositivos mediante bluetooth, la mayoría estan conectadas a los router wifi que tenemos en casa. Debido a esto es necesario proteger las redes locales ya que, de lo contrario, a través de ellas se pueden alcanzar vulnerabilidades en todos los equipos que funcionan sobre ellas.

¿Quién está en mi wifi? Los expertos pueden tener a mano muchos medios para controlar las redes. Lo más típico es a través de los paneles de control que disponen los routers. Sin embargo para los usuarios básicos y que no dispongan de conocimientos avanzados se dispone de una herramienta en nuestros móviles android que pueden facilitarnos bastante la tarea. who is on my wifi nos permite saber de una manera facil qué equipos están conectados a nuestra red. Podemos encontrar PC's, portátiles, móviles, tablets y ... en fin todos los dispositivos que usen en ese momento la red.

dirección de correo electrónico:

spanishdevcommunity@gmail.com Colabora en nuestros proyectos Puedes ayudarnos en los proyectos de canal de youtube, blogs, página web, redes sociales y página web.

Contactar Puedes contactar conmigo para enviarnos cualquier

Para conseguirlo tan sólo tenemos la aplicación, y si estamos conectados a una red, pulsaremos "scan" y comenzará la búsqueda. Para los más entendidos, lo que hace es buscar un escaneo de puertos. Si se usa esta herramienta con una red con seguridad adicional, puede hacer que salten las alarmas y alguien os busque enfadado. Más vale no utilizarlo cerca de redes públicas.

duda que tengas en el correo electrónico:

antoniogarciaprats@gmail.com

Depósito Legal J 368­2013

4

Veréis que el escaneo va mostrando los resultados en la pantalla, y lo que muestra son las direcciones IP de cada uno de los equipos conectados. La aplicación intentará identificar también de dispositivos móviles, equipos conectados por cable u otros, aunque no los distingue todos. Si pulsamos sobre una de las direcciones encontraremos más información importante, como la dirección MAC y el nombre del equipo, si está disponible. La pega es que, si no consigue el nombre del equipo, no tenemos forma de saber qué equipo es cada uno, a no ser que tengamos memorizadas cada una de las MAC de nuestros dispositivos. La cuestión es la misma, debemos discernir entre dispositivos conocidos y dispositivos desconocidos o intrusos, si los hay. © 2013 - www.spanishdeveloperscommunity.es


Reino Unido y otras naciones toman el camino del Open Source en lo público

El Reino Unido se sube a la ola del ahorro en los gastos y promoviendo el ahorro reduciendo costes que generan las administraciones públicas. Este movimiento parece tener un aspecto de tendencia: reemplazar Microsoft Office por soluciones equivalentes basadas en Open Source, así como hacer uso de formatos abiertos.

pequeño oligopolio domina el mercado… Quiero ver una mayor gama de software utilizable para que los funcionarios públicos tengan acceso a la información que necesiten y puedan hacer su trabajo, pero sin tener que comprar una determinada marca de software”.

En un primer momento, esto ayudará a los departamentos para hacer algo tan simple como compartir documentos entre sí con mayor facilidad. Pero también hará que sea más fácil para el público "El software que usamos en el gobierno todavía es utilizar y compartir la información del gobierno. Por suministrado por sólo unas pocas grandes empresas. Un ello hemos estado hablando con los usuarios sobre los Según expresa el ministro de la presidencia del gobierno británico, Francis Maude:

© 2013 - www.spanishdeveloperscommunity.es

5


Instala el tema de Windows XP en vuestra distribución linux Ubuntu / linux Mint y derivados Examinando un poco los contenidos de mi facebook, y casi siempre con un orígen latinoamericano; para ser más concretos argentino, tropecé el otro día con un interesante tutorial que, de alguna manera, intentaba emular el clásico escritorio de windows en una distribución de ubuntu/linux mint. Lamentablemente para los seguidores de Linux, estas adaptaciones tan peculiares para los que aún añoran el sistema operativo windows xp, tan sólo son válidas en entornos basados en ubuntu: ya sea el mismo ubuntu, linux mint y en general, derivados de linux ubuntu con cinnamon y Gtk.

Instalación del tema Instalar este tema se convierte en una tarea de lo mas sencilla que nos llevará tan sólo unos minutos. Lo único que tendríamos que hacer es abrir nuestra consola y escribir en ella lo siguiente: sudo add-apt-repository ppa:noobslab/icons sudo add-apt-repository ppa:noobslab/themes

Una vez que esto esté añadido, sólo nos quedará actualizar nuestra lista de software, escribiendo en la terminal: sudo apt-get update

Sinceramente hay que agradecer a los desarrolladores de habla hispana el enorme aporte y su contribución a linux. Es y ya, para finalizar el proceso, añadiremos todo lo que es de fácil encontrar cualquier ayuda proveniente de páginas de windows ­como por ejemplo los iconos­. Escribimos en la estos países. terminal sudo apt-get install win-xp-theme sudo apt-get install win-icons

6

Espero que disfrutéis del tutorial y cuento con vuestras aportaciones en nuestra página web y nuestra página de facebook. © 2013 - www.spanishdeveloperscommunity.es


Elegir el mejor repositorio en Para minimizar el tiempo de la actualización del sistema en el futuro, lo que haré es ver cuales son los repositorios de Debian más rápidos en función de mi ubicación geográfica. De está forma podré actualizar mi sistema operativo de forma más rápida.

más rápido pienso que la mejor herramienta es usar apt­ spy. El motivo de esta afirmación es que los parámetros de evaluación que considera apt­spy son el ancho de banda del servidor y su ping, mientras que netselect­apt considera el ping y el número de servidores por los cuales una petición debe pasar antes de alcanzar su destino.

Para realizar este proceso hay distintas herramientas. La herramienta que voy a usar se llama apt­spy.

COMO FUNCIONA APT­SPY

Nota: Una de las herramientas alternativas a apt­spy es netselect­apt. No obstante si queremos usar el repositorio

El funcionamiento de apt­spy es simple de comprender. La forma en que apt­spy evaluará cada uno de los repositorios es

© 2013 - www.spanishdeveloperscommunity.es

7


la siguiente:

hacer una copia de seguridad de nuestro fichero sources.list. Para realizar la copia de seguridad tenéis que ingresar el El programa va a chequear uno por uno los repositorios que siguiente comando en la terminal: se indican en la siguiente dirección web: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak Una vez finalizada la copia de seguridad ya podemos ejecutar apt­spy. Para ejecutar apt­spy deben introducir el siguiente Los parámetros usará apt­spy para evaluar cada uno de los comando: repositorios especificados en este enlace son el el ping, y el ancho de banda. Los repositorios más adecuados serán sudo apt-spy -d testing -o newsources.list aquellos que tendrán un buen ancho de banda y un ping bajo. Los repositorios con las características mencionadas serán Este comando analizará el ancho de banda y ping de cada uno aquellos que podrán descargar más información en un tiempo de los repositorios de Debian Testing que se hallan descritos determinado en este enlace. Una vez finalizado el análisis, apt­spy ubicará ftp://ftp.us.debian.org/debian/README.mirrors.html

un archivo con nombre newsources.list en nuestra home que Una vez realizada la comprobación de todos los repositorios, contendrá el repositorio más rápido para nosotros. apt­spy nos generará un archivo de texto del cual podremos extraer cuales son los repositorios más adecuados para Si en vez de hallar los repositorios más rápidos de Debian nosotros en función de nuestra ubicación geográfica. testing queréis hallar los repositorios más rápidos de Debian Estable el comando a usar seria el siguiente: Nota: Un repositorio es un servidor web donde se alojan los paquetes y aplicaciones que acostumbramos sudo apt-spy -d stable -o newsources.list descargarnos y a instalar con apt­get, Synaptic o Aptitude. Y si finalmente estáis usando Debian Sid o inestable el

INSTALACIÓN DE APT­SPY

comando debería ser el siguiente: sudo apt-spy -d unstable -o newsources.list

El proceso de instalación de apt­spy es sumamente fácil. Tan solo tienen que abrir una terminal y teclear el siguiente Una vez finalizado el proceso, que seguramente durará más comando: de una hora, ya podemos ir a nuestra home a consultar cual es el repositorio más rápido. Como se puede ver en la captura de sudo apt-get install apt-spy pantalla abro el archivo newsources.list que se acaba de generar: Después de introducir el comando se procederá a la instalación de apt­spy.

ELEGIR EL REPOSITORIO MAS RÁPIDO Una vez instalado apt­spy el primer paso es actualizar la lista de repositorios que se analizará. Para actualizar la lista de repositorios tenemos que introducir el siguiente comando en la terminal: sudo apt-spy update

Una vez actualizada la lista de repositorios a analizar ya podemos ejecutar apt­spy. Pero antes de hacer nada tenéis que ir con cuidado a la hora de aplicar los comandos que se mostrarán a continuación. En el caso de introducir el comando de forma errónea podéis dañar vuestro fichero Una vez abierto vemos que el contenido es el siguiente: sources.list. Por lo tanto lo primero que vamos a realizar es

8

© 2013 - www.spanishdeveloperscommunity.es


Nota: En el archivo sources.list es dónde indicamos a apt­get o aptitude desde que repositorios nos tenemos que descargar los paquetes y aplicaciones. VARIANTES DEL COMANDO APT­SPY En el caso de querer acotar más nuestra búsqueda, apt­spy nos ofrece varias opciones. La totalidad de opciones que nos ofrece se pueden consultar introduciendo el siguiente comando en la terminal: man apt­spy Como se puede ver en la captura de pantalla, en mi caso el repositorio aconsejado es ftp://mirrors.ircam.fr/pub/debian. Por lo tanto ahora tan solo tenemos que ir a nuestro sources.list y remplazar nuestro repositorio actual por el nuevo repositorio. Para acceder a nuestro sources.list abren una terminal y escriben el siguiente comando: sudo gedit /etc/apt/sources.list

Se abrirá el editor de textos. Una vez se haya abierto el editor de textos localizan los repositorios a reemplazar que en mi caso son los que se muestran en la siguiente captura de pantalla:

Variante 1 sudo apt­spy ­d testing ­w newsources.list ­n 7 Este comando a diferencia del primero nos dará el nombre de los 7 servidores más rápidos de la rama de Debian Testing. El resultado lo escribirá en un archivo que se generará en nuestra home con nombre newsources.list. Este comando pienso que es más útil que el primero ya que tendremos más de una opción de repositorio a elegir. Variante 2 En el caso que queramos analizar un número determinado de servidores en un continente en particular, podemos usar el siguiente comando: sudo apt­spy ­d unstable ­a europe ­e 100 ­o newsources.list Este comando testea 100 repositorios de la distribución Debian inestable ubicados en Europa. Una vez analizados los servidores, en nuestro servidor se genera un archivo con nombre newsources.list que contiene el repositorio más apropiado en nuestro caso.

Una vez localizados los repositorios, reemplazan el contenido actual por la recomendación de apt­spy. Seguidamente presionan el botón de guardar tal y como se muestra en la captura de pantalla: Una vez realizados estos pasos ya podremos disfrutar de los nuevos repositorios. Nota: Los resultados obtenidos pueden variar de un momento a otro en función de la carga que tiene el repositorio al que nos conectamos. Cuando un servidor tiene mucha carga la velocidad de descarga que ofrecerá a los clientes que se conectan será menor.

© 2013 - www.spanishdeveloperscommunity.es

Variante 3 Ahora supongamos estoy usando Debian Estable y quiero usar un repositorio cuyo servidor esté ubicado físicamente en España. Bajo estas premisas lo que realizaré es utilizar el siguiente comando para averiguar cual es el mejor repositorio para nosotros: sudo apt­spy ­d stable ­s ES ­o newsources.list Este comando lo que hará es analizar la totalidad de repositorios de Debian Estable ubicados en España

9


problemas que enfrentan al leer o trabajar con nuestros Free Software Foundation Europe (FSFE). documentos y hemos invitado a expertos sobre la Como recuerdan en OpenSource.com, no obstante, el diablo manera de resolver estos retos. Normas técnicas para formatos de documentos pueden no sonar como el primer disparo en una revolución pero no tenga la menor duda: la adopción de normas obligatorias en el gobierno romperá el oligopolio de los formatos propietarios y permitirá el uso de software de código abierto."

está en los detalles, y el año pasado la Comisión Europea emitió una guía similar dirigida a organismos públicos de toda la zona, sin demasiado éxito. La diferencia con Italia es que esta última sostendrá su iniciativa con la ley por delante (así lo dan a entender), pero un término como software reutilizable (¿software gratuito? ¿licencias específicas?) unido a la interpretación de “qué es una solución adecuada” (¿adecuada a la función concreta o al usuario?)… Pues eso, habrá que ver cómo se aplica.

El ministro también saludará cambios destinados a la pequeña y mediana empresa que ganan contratos en el sector público. Se hará incapié en la creación de cloudstore, un Con todo, un gran paso hacia adelante para Italia que harían mercado en línea para compra de software por los bien en seguir otros países del entorno, en especial España. ayuntamientos y otros organismos públicos. Uruguay también apuesta por el uso de los formatos abiertos y el software libre Por lo que se ve, no es el en las administraciones del Estado. único organismo público que abre las puertas de par La nueva ley, aprobada tras casi diez en par al software libre en años de anteproyectos que fueron muchas administraciones “sistemática archivados”, indican las públicas. Esto, fuentes, consta de cinco artículos: evidentemente no es algo sencillo de conseguir, Obligación para cualquier organismo como podemos dependiente o ligado al Estado de imaginarnos. En cuanto a “distribuir toda la información en al lo que se refiere a las menos un formato, estándar y libre”. suites ofimáticas, se está observando una tendencia Preferencia en la contratación de más que clara a cancelar licencias a desarrollos de software libre, los contratos de microsoft excepto cuando éste no cumpla las Office y sustituirlo por exigencias técnicas. otras soluciones basadas en el software libre. Promoción del uso del software libre en el sistema educativo. Lo curioso es que las mayoría de las administraciones que han llevado a efecto el cambio, han quedado bastante Plazo de 180 días desde la aprobación de esta ley para que el Poder Ejecutivo organice la transición. satisfechas. El gobierno taliano, también está impulsando una serie de cambios en la normativa por la que se rigen las administraciones públicas a la hora de elegir con qué software se va a trabajar, poniendo primero en la lista el uso del software libre o "reutilizable".

Aclaración sobre qué software es considerado como libre, formatos abiertos y formatos estándar.

En los demás paises del continente sudamericano también se están moviendo las cosas en esta dirección, destacando, por ejemplo, el caso de Ecuador como la próxima nación que “No hay excusa. Todas las administraciones públicas legislara a favor del open source. deberán optar por software libre o reutilizable siempre que sea posible. Ahora el software libre y el reutilizable son la norma, no la excepción. Esta es la acción más avanzada de Europa de lejos“, indica Carlo Piana, Asesor General de la

10

© 2013 - www.spanishdeveloperscommunity.es


estructuras de datos en C

árboles

Definición Árbol AVL . Un árbol AVL es un árbol binario de búsqueda que cumple con la condición de que la diferencia entre las alturas de los subárboles de cada uno de sus nodos es, como mucho 1. La denominación de árbol AVL viene dada por los creadores de tal estructura (Adelson­Velskii y Landis). Recordamos que un árbol binario de búsqueda es un árbol binario en el cual cada nodo cumple con que todos los nodos © 2013 - www.spanishdeveloperscommunity.es

AVL

de su subárbol izquierdo son menores que la raíz y todos los nodos del subárbol derecho son mayores que la raíz. Recordamos también que el tiempo de las operaciones sobre un árbol binario de búsqueda son O(log n) promedio, pero el peor caso es O(n), donde n es el número de elementos. La propiedad de equilibrio que debe cumplir un árbol para ser AVL asegura que la profundidad del árbol sea O(log(n)), por lo que las operaciones sobre estas estructuras no deberán recorrer mucho para hallar el elemento deseado. Como se verá, el tiempo de ejecución de las operaciones sobre estos

11


árboles es, a lo sumo O(log(n)) en el peor caso, donde n es la izquierdo, igual que los ABB, y además un miembro nuevo: cantidad de elementos del árbol. el factor de equilibrio. Sin embargo, y como era de esperarse, esta misma propiedad El factor de equilibrio es la diferencia entre las alturas del de equilibrio de los árboles AVL implica una dificultad a la árbol derecho y el izquierdo: hora de insertar o eliminar elementos: estas operaciones pueden no conservar dicha propiedad. FE = altura subárbol derecho ­ altura subárbol izquierdo; Por definición, para un árbol AVL, este valor debe ser ­1, 0 ó 1.

ROTACIONES SIMPLES DE NODOS Los reequilibrados se realizan mediante rotaciones, en el siguiente punto veremos cada caso, ahora vamos a ver las cuatro posibles rotaciones que podemos aplicar. Rotación simple a la derecha (SD): Esta rotación se usará cuando el subárbol izquierdo de un nodo sea 2 unidades más alto que el derecho, es decir, cuando su FE sea de ­2. Y además, la raíz del subárbol izquierdo A modo de ejemplificar esta dificultad, supongamos que al tenga una FE de ­1, es decir, que esté cargado a la izquierda. árbol AVL de enteros de Figura 1 le queremos agregar el entero 3. Si lo hacemos con el procedimiento normal de inserción de árboles binarios de búsqueda el resultado sería el árbol de Figura 2 el cual ya no cumple con la condición de equilibrio de los árboles AVL dado que la altura del subárbol izquierdo es 3 y la del subárbol derecho es 1.

Procederemos del siguiente modo: Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de ­2. Y llamaremos Q al nodo raíz del subárbol izquierdo de P. Además, llamaremos A al subárbol izquierdo de Q, B al subárbol derecho de Q y C al subárbol derecho de P. En el gráfico que puede observar que tanto B como C tienen la misma altura (n), y A es una unidad mayor (n+1). Esto hace que el FE de Q sea ­1, la altura del subárbol que tiene Q Cada nodo, además de la información que se pretende como raíz es (n+2) y por lo tanto el FE de P es ­2. almacenar, debe tener los dos punteros a los árboles derecho e

FACTOR DE EQUILIBRIO

12

© 2013 - www.spanishdeveloperscommunity.es


1. Pasamos el subárbol derecho del nodo Q como subárbol izquierdo de P. Esto mantiene el árbol como ABB, ya que todos los valores a la derecha de Q siguen estando a la izquierda de P.

En el árbol resultante se puede ver que tanto P como Q quedan equilibrados en cuanto altura. En el caso de P porque sus dos subárboles tienen la misma altura (n), en el caso de Q, porque su subárbol izquierdo A tiene una altura (n+1) y su subárbol derecho también, ya que a P se añade la altura de

2. El árbol P pasa a ser el subárbol derecho del nodo Q. 3. Ahora, el nodo Q pasa a tomar la posición del nodo P, es decir, hacemos que la entrada al árbol sea el nodo Q, en lugar del nodo P. Previamente, P puede que fuese un árbol completo o un subárbol de otro nodo de menor altura.

cualquiera de sus subárboles.

Rotación simple a la izquierda (SI): Se trata del caso simétrico del anterior. Esta rotación se usará

cuando el subárbol derecho de un nodo sea 2 unidades más alto que el izquierdo, es decir, cuando su FE sea de 2. Y además, la raíz del subárbol derecho tenga una FE de 1, es decir, que esté cargado a la derecha.

Procederemos del siguiente modo: Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de 2. Y llamaremos Q al nodo raíz del subárbol derecho de P. Además, llamaremos A al subárbol izquierdo de © 2013 - www.spanishdeveloperscommunity.es

13


P, B al subárbol izquierdo de Q y C al subárbol derecho de Q.

2. El árbol P pasa a ser el subárbol izquierdo del nodo Q.

En el gráfico que puede observar que tanto A como B tienen 3. Ahora, el nodo Q pasa a tomar la posición del nodo P, es la misma altura (n), y C es una unidad mayor (n+1). Esto decir, hacemos que la entrada al árbol sea el nodo Q, en lugar hace que el FE de Q sea 1, la altura del subárbol que tiene Q del nodo P. Previamente, P puede que fuese un árbol como raíz es (n+2) y por lo tanto el FE de P es 2. completo o un subárbol de otro nodo de menor altura. 1. Pasamos el subárbol izquierdo del nodo Q como subárbol derecho de P. Esto mantiene el árbol como ABB, ya que todos los valores a la izquierda de Q siguen estando a la derecha de P.

En el árbol resultante se puede ver que tanto P como Q quedan equilibrados encuanto altura. En el caso de P porque sus dos subárboles tienen la misma altura (n), en el caso de Q, porque su subárbol izquierdo A tiene una altura (n+1) y su subárbol derecho también, ya que a P se añade la altura de cualquiera de sus subárboles.

ROTACIONES DOBLES DE NODOS Esta rotación se usará cuando el subárbol izquierdo de un nodo sea 2 unidades más alto que el derecho, es decir, cuando su FE sea de ­2. Y además, la raíz del subárbol izquierdo tenga una FE de 1, es decir, que esté cargado a la derecha. Este es uno de los posibles árboles que pueden presentar esta estructura, pero hay otras dos posibilidades. El nodo R puede tener una FE de ­1, 0 ó 1. En cada uno de esos casos los árboles izquierdo y derecho de R (B y C) pueden tener alturas de n y n­1, n y n, o n­1 y n, respectivamente.

14

© 2013 - www.spanishdeveloperscommunity.es


El modo de realizar la rotación es independiente de la estructura del árbol R, cualquiera de las tres produce resultados equivalentes. Haremos el análisis para el caso en que FE sea ­1. En este caso tendremos que realizar dos rotaciones. Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de ­2. Llamaremos Q al nodo raíz del subárbol izquierdo de P, y R al nodo raíz del subárbol derecho de Q.

3. El árbol Q pasa a ser el subárbol izquierdo del nodo R. 4. Pasamos el subárbol derecho del nodo R como subárbol izquierdo de P. Esto mantiene el árbol como ABB, ya que todos los valores a la derecha de R siguen estando a la izquierda de P. 5. Ahora, el nodo R pasa a tomar la posición del nodo P, es

1. Haremos una rotación simple de Q a la izquierda. 2. Después, haremos una rotación simple de P a la derecha. Con más detalle, procederemos del siguiente modo: 1. Pasamos el subárbol izquierdo del nodo R como subárbol derecho de Q. Esto mantiene el árbol como ABB, ya que todos los valores a la izquierda de R siguen estando a la derecha de Q.

decir, hacemos que la entrada al árbol sea el nodo R, en lugar del nodo P. Como en los casos anteriores, previamente, P puede que fuese un árbol completo o un subárbol de otro nodo de menor altura. 6. El árbol P pasa a ser el subárbol derecho del nodo R. Rotación doble a la izquierda (DI):

2. Ahora, el nodo R pasa a tomar la posición del nodo Q, es decir, hacemos que la raíz del subárbol izquierdo de P sea el nodo R en lugar de Q.

© 2013 - www.spanishdeveloperscommunity.es

Esta rotación se usará cuando el subárbol derecho de un nodo sea 2 unidades más alto que el izquierdo, es decir, cuando su FE sea de 2. Y además, la raíz del subárbol derecho tenga una FE de ­1, es decir, que esté cargado a la izquierda. Se trata del caso simétrico del anterior.

15


En este caso también tendremos que realizar dos rotaciones.

3. El árbol Q pasa a ser el subárbol derecho del nodo R.

Llamaremos P al nodo que muestra el desequilibrio, el que 4. Pasamos el subárbol izquierdo del nodo R como subárbol tiene una FE de 2. Llamaremos Q al nodo raíz del subárbol derecho de P. Esto mantiene el árbol como ABB, ya que todos derecho de P, y R al nodo raíz del subárbol izquierdo de Q. los valores a la izquierda de R siguen estando a la derecha de P. 1. Haremos una rotación simple de Q a la derecha. 5. Ahora, el nodo R pasa a tomar la posición del nodo P, es 2. Después, haremos una rotación simple de P a la izquierda. Con más detalle, procederemos del siguiente modo: 1. Pasamos el subárbol derecho del nodo R como subárbol izquierdo de Q. Esto mantiene el árbol como ABB, ya que todos los valores a la derecha de R siguen estando a la izquierda de Q.

decir, hacemos que la entrada al árbol sea el nodo R, en lugar del nodo P. Como en los casos anteriores, previamente, P puede que fuese un árbol completo o un subárbol de otro nodo de menor altura. 6. El árbol P pasa a ser el subárbol izquierdo del nodo R.

REEQUILIBRADOS EN ÁRBOLES AVL Cada vez que insertemos o eliminemos un nodo en un árbol AVL pueden suceder dos cosas: que el árbol se mantenga 2. Ahora, el nodo R pasa a tomar la posición del nodo Q, es como AVL o que pierda esta propiedad. En el segundo caso decir, hacemos que la raíz del subárbol derecho de P sea el siempre estaremos en uno de los explicados anteriormente, y nodo R en lugar de Q. recuperaremos el estado AVL aplicando la rotación adecuada.

16

© 2013 - www.spanishdeveloperscommunity.es


Ya comentamos que necesitamos añadir un nuevo miembro a cada nodo del árbol para averiguar si el árbol sigue siendo AVL, el Factor de Equilibrio. Cada vez que insertemos o eliminemos un nodo deberemos recorrer el camino desde ese nodo hacia el nodo raíz actualizando los valores de FE de cada nodo. Cuando uno de esos valores sea 2 ó ­2 aplicaremos la rotación correspondiente. Debido a que debemos ser capaces de recorrer el árbol en dirección a la raíz, añadiremos un nuevo puntero a cada nodo que apunte al nodo padre. Esto complicará algo las operaciones de inserción, borrado y rotación, pero facilita y agiliza mucho el cálculo del FE, y veremos que las complicaciones se compensan en gran parte por las facilidades obtenidas al disponer de este puntero. Cuando estemos actualizando los valores de FE no necesitamos calcular las alturas de las dos ramas de cada nodo, sabiendo en valor anterior de FE, y sabiendo en qué rama hemos añadido o eliminado el nodo, es fácil calcular el nuevo valor de FE. Si el nodo ha sido añadido en la rama derecha o eliminado en la izquierda, y ha habido un cambio de altura en la rama, se incrementa el valor de FE; si el nodo ha sido añadido en la rama izquierda o eliminado en la derecha, y ha habido un cambio de altura en la rama, se decrementa el valor de FE.

que sigue teniendo los mismos nodos que antes, de modo que si la altura de la rama que pertenece al camino no cambia, tampoco puede cambiar el valor de FE. Por ejemplo, supongamos que en siguiente árbol AVL insertamos el nodo de valor 8: Para empezar, cualquier nodo nuevo será un nodo hoja, de modo que su FE será siempre 0. Ahora actualizamos el valor de FE del nodo padre del que acabamos de insertar (P). El valor previo es 0, y hemos añadido un nodo en su rama izquierda, por lo tanto, el nuevo valor es ­1. Esto implica un cambio de altura, por lo tanto, continuamos camino hacia la raíz. A continuación tomamos el nodo padre de P (Q), cuyo valor previo de FE era 1, y al que también hemos añadido un nodo en su rama izquierda, por lo tanto decrementamos ese valor, y el nuevo será 0. En este caso no ha incremento de altura, la altura del árbol cuya raíz es Q sigue siendo la misma, por lo tanto, ninguno de los valores de FE de los nodos hasta el raíz

Los cambios de altura en una rama se producen sólo cuando el FE del nodo raíz de esa rama ha cambiado de 0 a 1 ó de 0 a ­1. En caso contrario, cuando el FE cambia de 1 a 0 ó de ­1 a 0, no se produce cambio de altura. Si no hay cambio de altura, los valores de FE del resto de los nodos hasta el raíz no pueden cambiar, recordemos que el factor de equilibrio se define como la diferencia de altura entre las ramas derecha e izquierda de un nodo, la altura de la rama que no pertenece al camino no puede cambiar, puesto puede haber cambiado. Es decir, no necesitamos seguir recorriendo el camino. Si verificamos el valor de FE del nodo R vemos que efectivamente se mantiene, puesto que tanto la altura del subárbol derecho como del izquierdo, siguen siendo las mismas. Pero algunas veces, el valor de FE del nodo es ­2 ó 2, son los casos en los que perdemos la propiedad AVL del árbol, y por lo tanto tendremos que recuperarla.

Reequilibrados en árboles AVL por inserción de un nodo © 2013 - www.spanishdeveloperscommunity.es

17


El valor de FE del nodo P pasa de 1 a 2, sabemos que cuando En ese caso, cuando el valor de FE de un nodo tome el valor el valor de FE de un nodo es 2 siempre tenemos que aplicar ­2 ó 2, no seguiremos el camino, sino que, con el valor de FE una rotación a izquierdas. Para saber cual de las dos del nodo actual y el del nodo derecho si FE es 2 o el del nodo izquierdo si es ­2, determinaremos qué tipo de rotación debemos hacer. El resto de los casos no nos interesan. Esto es porque en nodos desequilibrados hacia la derecha, con valores de FE positivos, siempre buscaremos el equilibrio mediante rotaciones a la izquierda, y viceversa, con nodos desequilibrados hacia la izquierda, con valores de FE negativos, buscaremos el equilibrio mediante rotaciones a la derecha. Supongamos que el valor de FE del nodo ha pasado de ­1 a ­2, debido a que se ha añadido un nodo. Esto implica que el nodo añadido lo ha sido en la rama izquierda, si lo hubiéramos añadido en la derecha el valor de FE nunca podría decrecer. void insertar (AVLTree ** t, int x); /* inserta x en el árbol en un tiempo O(log(n)) peor caso. */ void insertar (AVLTree ** t, int x) { if (es_vacio (*t)) *t = hacer (x, vacio (), vacio ()); /* altura actualizada automáticamente */ else { if (x < raiz (*t))

rotaciones debemos aplicar miramos el valor de FE del nodo

insertar (&(*t)->izq, x); else insertar (&(*t)->der, x); balancear (t); actualizar_altura (*t); } }

Reequilibrados en árboles AVL por borrado de un nodo Cuando el desequilibrio se debe a la eliminación de un nodo la cosa puede ser algo diferente, pero veremos que siempre se puede llegar a uno de los casos anteriores. Supongamos el siguiente ejemplo, en el árbol AVL derecho. Pero en este caso, el valor de FE de ese nodo es 0. eliminaremos el nodo de valor 3: Esto no quiere decir que no podamos aplicar ninguna de las

18

© 2013 - www.spanishdeveloperscommunity.es


rotaciones, por el contrario, podremos aplicar cualquiera de ellas. Aunque por economía, lo razonable es aplicar la rotación simple.

(*t) = vacio(); } else if (es_vacio (izquierdo (*t))) {/* subárbol izquierdo vacio */

Si aplicamos la rotación simple, el resultado es:

aux = (*t); (*t) = (*t)->der;

Y aplicando la rotación doble: Del mismo modo, el valor de FE del nodo derecho podría haber sido 1 ó ­1, en ese caso sí está determinado el tipo de rotación a realizar.

free (aux); } else if (es_vacio (derecho (*t))) {/* subárbol derecho vacio */ aux = (*t);

El razonamiento es similar cuando se eliminan nodos y el resultado es que se obtiene un nodo con FE de ­2, en este caso se realizará una rotación a derechas, y la rotación dependerá del valor de FE del nodo izquierdo al que muestra el desequilibrio. Si es 0 ó ­1 haremos una rotación simple, si es 1, haremos una rotación doble.

(*t) = (*t)->izq; free (aux); } else /* caso más complicado */ { (*t)->dato = eliminar_min (&(*t)->der); }

Los árboles AVL siempre quedan equilibrados después de una rotación.

} balancear (t); actualizar_altura (*t);

Esto puede comprobarse analizando los métodos de rotación que hemos estudiado, después de efectuada la rotación, la altura del árbol cuya raíz es el nodo rotado se mantiene, por lo tanto, no necesitamos continuar el camino hacia la raíz: sabemos que el árbol es AVL.

} int eliminar_min (AVLTree ** t) { if (es_vacio (*t)) {

void eliminar (AVLTree ** t, int x);

fprintf (stderr,

/* elimina x del árbol en un tiempo O(log(n)) peor caso.

"No se respeta precondición de eliminar_min()\n");

Precondición: existe un nodo con valor x en el árbol

exit(0);

t. */

}

int eliminar_min (AVLTree ** t);

else

/* Función auxiliar a eliminar(). Elimina el menor nodo

{

del árbol

if (!es_vacio (izquierdo (*t)))

*t devolviendo su contenido (el cual no se libera de

{

memoria). Se actualizan las alturas de los nodos.

int x = eliminar_min (&(*t)->izq);

Precondición: !es_vacio(*t) */

balancear (t);

void

actualizar_altura (*t);

eliminar (AVLTree ** t, int x)

return x;

{

}

AVLTree *aux;

else

if (x < raiz (*t))

{

eliminar (&(*t)->izq, x);

AVLTree *aux = (*t);

else if (x > raiz (*t))

int x = raiz (aux);

eliminar (&(*t)->der, x);

*t = derecho (*t);

else /* coincidencia! */

free (aux);

{

balancear (t);

if

(es_vacio

(izquierdo

(*t))

&&

es_vacio

(derecho

actualizar_altura (*t);

(*t)))

return x;

{/* es una hoja */

}

free (*t);

}}

© 2013 - www.spanishdeveloperscommunity.es

19


wine

¿cómo instalar en ubuntu 13.10 para ejecutar aplicaciones windows? En éste artículo vamos a explicar de una manera bien símple qué es wine, para qué sirve y cómo instalarlo en nuestra distribución linux ubuntu 13.10 o derivados, es decir, mint, ... etc.

arquitectura de microprocesador determinada. Wine, por el contrario, implementa lo que podría ser llamado una capa de compatibilidad, la cual provee alternativas a las bibliotecas de Windows.

A mediados del año 2002, ya se contaba con una aplicación con más de 1 millón de líneas de código fuente escrito en el lenguaje C y con un grupo de más de 300 programadores. El proyecto tuvo tiempos en los cuales no se avanzó lo suficiente, hasta que en el año 2003, aplicaciones muy Wine es un acrónimo en inglés para wine is not a emulator. extendidas en el entorno Windows como Microsoft Office e Wine provee de un conjunto de herramientas de desarrollo Internet Explorer fueron posibles de ser utilizadas en para portar código fuente de aplicaciones windows y unix. entornos Unix gracias a Wine. Además lleva un cargador de programas, el cuál permite que muchas aplicaciones para windows se ejecuten sin El proyecto presenta grandes retos para los desarrolladores, al menos en parte debido a la incompleta documentación de la modificarse en varios sistemas operativos. API de Windows. A pesar de que la mayoría de las funciones la API Win32 están correctamente documentadas, existen aún Historia del proyecto muchas áreas, como formatos de archivos y protocolos, para El proyecto Wine comenzó en 1993, época de la versión 3.11 las cuales no existen especificaciones documentadas por parte de Windows. El proyecto posiblemente se originó en de Microsoft. discusiones en comp.os.linux. Los programadores Eric Youngdale y Bob Amstadt crearon su primera versión. La Hacia comienzos de 2003, Wine podía ejecutar muchos razón por la cual Wine no es un emulador es que los programas populares, como Lotus Notes y algunas versiones emuladores tienden a duplicar el entorno completo en el que de Microsoft Office, con comportamientos y estabilidad un programa vive, incluyendo la simulación de una variables. El éxito del funcionamiento de cada aplicación Buscando una definición en la web, wine se podría definir como una reimplantación de la interfaz de programación de aplicaciones win16 y win32 para sistemas operativos basados en linux.

20

© 2013 - www.spanishdeveloperscommunity.es


depende del uso de bibliotecas dinámicas (DLL) de manejo de nuevos estados en Direct3D y mejora del sistema de audio, entre mejoras importantes. Windows. La empresa de software Corel ayudó mucho al proyecto, empleando temporalmente a uno de los principales desarrolladores, Alexandre Julliard, junto con muchos otros programadores secundarios. Esta ayuda fue motivada por el porting de la suite ofimática de Corel a GNU/Linux. Sin embargo, debido a dificultades económicas, el apoyo de Corel cesó. Otras organizaciones han hecho esfuerzos comerciales para apoyar el proyecto, incluyendo CodeWeavers y Linspire. CodeWeavers ha desarrollado una versión comercial, cerrada y visualmente más atractiva, de Wine y la comercializa bajo el nombre CrossOver Office; además, colabora con el proyecto, ya sea financiándolo o con parches. El desarrollo oficial de Wine está orientado hacia la correcta implementación de la API de Windows como un todo y aunque se encuentra un poco atrasado en estas áreas, desde su versión 1.0 de verano de 2008 es capaz de ejecutar con éxito y con pocos o escasos errores una gran variedad de aplicaciones diseñadas para Windows.

El 16 de julio de 2010 el proyecto Wine lanzó la versión estable 1.2,4 presentando más de 23.000 cambios en el código fuente, más de 3.000 bugs arreglados y el soporte para aplicaciones de 64­Bits. El 7 de marzo de 2012 el proyecto Wine lanzó la versión estable 1.4,5 añadiendo soporte a muchas nuevas aplicaciones como Microsoft Office 2010,6 y juegos de última generación como Skyrim7 o Starcraft 2.8 El 18 de julio de 2013 el proyecto Wine lanzó la versión estable 1.6,9 añadiendo más de 10.000 cambios en el código fuente y añadiendo soporte a aplicaciones .Net y Mono.

Instalar Wine 1.6.1 en ubuntu Para todos aquellos que andas buscando instalar programas de Windows en Linux Ubuntu, les recomiendo Usar Wine que tienen un gran biblioteca con mucha compatibilidad para los para programas de Windows en Ubuntu.

Mas informacion de este proyecto lo podeis conseguir a $ sudo add-apt-repository ppa:ubuntu-wine/ppa $ sudo apt-get update traves de su pagina web oficial http://www.winehq.org/ . $ sudo apt-get install wine1.6 winetricks

Estado actual de wine De acuerdo a un estudio realizado en Internet por DesktopLinux.com2 en 2006, la aplicación Wine es bastante usada con relación a las demás con una demanda de 33,5% de los encuestados, mientras que un 16,7% utiliza el VMware y apenas un 7% usa la aplicación CrossOver. En tanto la porción de los encuestados que no utiliza ninguno fue de un 39%. El 17 de junio de 2008 el proyecto Wine lanzó la versión 1.0,3 la primera versión estable en quince años de desarrollo. Ésta presenta mejoras con relación a las versiones alfa y beta, de las cuales se puede mencionar un mejor soporte de ratón en los juegos, aplicaciones con uso de bibliotecas OpenGL, © 2013 - www.spanishdeveloperscommunity.es

21



Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.