spanish developers community

Page 1


Buzon del lector

pestaña. 4. Para personalizar una pestaña con una imagen: Wildfire's iFrames for Page. Es una herramienta muy sencilla y, a diferencia de la anterior, permite también la posibilidad de realizar Fan Gate, esto es, insertar contenido exlusivo para los que son fan.

de los que ya lo han hecho e, incluso, las entradas en la sección de últimas noticias, tan sólo tenemos que configurar los siguientes parámetros: Facebook page ID, width y una serie de parámetros varios. En el primer parámetro tan sólo tendremos que poner la dirección URL de nuestra página web, ¿fácil no?, con sólo copiar y pegar ya lo tenemos hecho.

5. Para organizar un concurso: Easy Promos. Esta es quizás la única herramienta en la que la versión completa es de pago, pero está especialmente indicada para la realización de promos y concursos.

A continuación tendremos que especificar el ancho y alto del cuadro en pixeles. En función del espacio que tengamos disponible en nuestra página web, así introduciremos nuestros valores.

spanishdevcommunity@gmail.co m

6. Para integrar el website de la marca: Cool Tabs. Permte añadir el website de la marca de una manera tan simple como escribir su URL.

o bien, podéis dejar vuestras cuestiones en cualquiera de las redes sociales que tenéis a vuestra disposición:

7. Para reconocer al fan más activo: Fan of the Week. Selecciona automáticamente, cada semana, al fan que más ha interactuado con la página mediante comentarios. El elegido aparece con la foto que figura en su perfil y su nombre junto con un mensaje que anima al resto a participar.

En cuanto a los parámetros que nos solicitan para terminar de configurar, se nos pedirá mediante checkbox si queremos mostrar o no la cabecera de la página web, si queremos o no mostrar las fotografias de los que ya han pulsado like en nuestra página. Con show stream especificaremos si queremos o no que se nos incluya las entradas de nuestra sección "últimas noticias" de nuestra página. Y por último, con "show border" especificaremos si queremos que se muestre o no una línea alrededor del cuadro.

facebook /spanishdeveloperscommunity twitter @spanishdc

8. Para retransmitir un evento en directo: Live Stream. Muy recomendable cuando el objetivo que se plantea es emitir eventos en directo mediante streaming, bien sea a través de una webcam, bien con una cámara.

Por último solo tenemos que pulsar en el botón "get code" que aparece abajo y obtendremos un código que nada más pegaremos en el interior del div de nuestra página web y ¡ya esta!.

9. Para promocionar una banda musical: Herzio. Ofrece a artistas la posibilidad de promocionarse y distribuir música generando ingresos de una forma sencilla. Permite integrar un FanStore para que el músico venda merchandising sin invertir ni un sólo euro. También permite esta aplicación vender entradas para conciertos. Además esta herramienta tiene un caracter totalmente gratuito.

Cómo integrar nuestra página facebook en nuestro blog wordpress.

Para insertar un cuadro "like box" en nuestro blog wordpress tendremos que seguir los sigientes pasos: en este caso tendremos que hechar mano de los numerosos plugin disponibles de forma gratuita en Internet. Vamos a detallar tres de ellos:

10. Para integrar una tienda de f­commerce: Social Buy. Aplicación impulsada por una empresa catalana, esta aplicación brinda una opción de comercio electrónico que incluye un sistema de analíticas con datos demográficos y segmentación de gustos e intereses. Tan sólo es necesario una cuenta de paypal y registrarse en la aplicación. Esta aplicación ofrece dos versiones una gratuita y otra de pago, la primera permite crear una tienda con un máximo de 10 artículos y un máximo de 2000 usuarios sociales.

1. Facebooks comments for wordpress. Este plugin implementa los comentarios de facebook de manera fácil, siguiendo unas instrucciones, y sin necesidad de entrar en facebook para su configuración.

Cualquier consulta la podéis realizar a través de nuestro correo electrónico:

Una seguidora de nuestra página de facebook nos pregunta cómo personalizar las pestañas de su página para agregar nuevos contenidos. En nuestras páginas de facebook se pueden agregar hasta 12 pestañas, aunque dos de ellas ya están asignadas por defecto y ocupan el primer lugar: una de ellas dedicada a las fotografías y la segunda una pequeña estadística a propósito del número de fans y las personas que están hablando de ello. Pero, ¿y qué hay de las 10 restantes?. En respuesta a la pregunta de nuestra seguidora, vamos a indicar una serie de aplicaciones, la mayoría de ellas de carácter gratuito que podrá emplear para personalizar su página de facebook de una forma muy sencilla y sin apenas conocimientos de programación. 1. Para integrar un formulario de contacto: Contact Tab. Es una forma sencilla de incorporar un formulario a nuestra página. Se puede incluir la descripción de la empresa, teléfono, correo electrónico, enlaces, ubicación en un mapa y ¡como no! un formulario preestablecido. 2. Para incorporar pestañas personalizadas: Static HTML for pages. Para usar esta herramienta no son necesarios conocimientos previos de programación, tan sólo basta con copiar el código fuente e ir siguiendo las instrucciones que la herramienta te va sugiriendo. 3. Para incluir un canal de youtube: Youtube for pages. Una herramienta que inserta de forma automática vídeos del canal de YouTube, perimitiendo destacar el último video subido y personalizar la imagen de la

2

Cómo integrar nuestras página de facebook en nuestras páginas web y también en nuestros blog.

Es frecuente encontrar en las páginas web de las empresas y de los blog, especialmente corporativos, un cuadro o una serie de enlaces hacia nuestra página de facebook o de twitter pero, ¿cómo hacerlo de una manera sencilla?. Para empezar, en el caso de una página web, necesitamos un espacio en donde integrarla, para ello, en el momento de diseño recomiendo el uso de div's con sus respectivas propiedades de css. A continuación, en nuestro navegador favorito nos iremos a la dirección URL http://developers.facebook.com/plugins; en ésta página encontraremos las numerosas opciones que facebook nos facilita para integrar distintos tipos de enlaces en nuestro site. En el caso de un "like box" que muestra en nuestra página web un cuadro con la posibilidad de pulsar like en nuestra página, ver algunos

de

Una vez que los descarges y lo subas en la carpeta wp­content/pluging de wordpress se puede escoger el estilo. También tiene una opción de notificación por correo electrónico cada vez que un usuario publique un comentario. 2. Facebook Like box. Esta es la forma más fácil de mostrar la página de fans de Facebook en tu sitio. Se hace a través de la página de configuración del widget de Facebook o, bien, acudir a la página oficial de plugin de wordpress en donde te podrás descargar de forma gratuita un plugin e instalarlo a través del escritorio de tu blog y configurarlo de forma identica a como hemos descrito anteriormente para el caso de tu web. 3. Simple facebook connect. Este es el más completo de los plugin que permite incluso que los lectores de tu blog puedan acceder con su cuenta de Facebook para publicar contenido en tu página o dejar comentarios en tus artículos del blog. Es posible insertar albunes de fotos en tu blog.

© 2013 - www.spanishdeveloperscommunity.es


¿Qué uso dan los universitarios españoles a las redes sociales? Es ya conocido por todos que los internautas ocupan la mayor parte de su tiempo en sus propias redes sociales. Estas páginas absorven la atención de la mayoría de los usuarios; y esto es particularmente cierto entre los jovenes.

No obstante, el primer intento por implementar un tipo de res social, dato que posíblemente sea desconocido para muchos, fue Geocities en 1994; la cuál nace con la finalidad de que los usuarios registrados crearan sus propios portales.

El objetivo de éste articulo es saber cuál es el uso que los El siguiente hito lo podemos situar aproximadamente a partir universitarios españoles dan a las redes sociales y cuáles son las del año 2000 en el que estalla, por fin, la burbuja mediática de favoritas en este sector de la población. Internet. Redes como Friendster, una red social dedicada a la búsqueda de amigos reales, logran un seguimiento de más de A pesar de la novedad que suponen las redes sociales, aunque tres millones de usuarios en poco más de tres meses, cifra que esta modalidad de comunicación, en si, no es demasiado ya de por si es impresionante. reciente. La primera forma de comunicación arranca con el correo electrónico, cuyo primer envío puede datarse en el año A partir de aquí comienzan a asentarse las bases de lo que 1971. supondrá el fenómeno de comunicación masiva más importante © 2013 - www.spanishdeveloperscommunity.es

3


de todos los tiempos. En el año 2004 aparece en escena Facebook, la red social que, hoy por hoy cuenta con el mayor número de seguidores a nivel mundial: pasan de los mil millones de usuarios, de los cuáles 15 millones de ellos están ubicados en nuestro país. A partir de aquí se desencadena la aparición de nuevas redes con formatos dispares que revolucionan la comunicación mundial. Así, el microblog Twitter, nacido en 2006, ya con tan sólo 7 años de vida cuenta con la friolera de 200 millones de seguidores. Pdemos seguir dando ejemplos de éxito comercial en este mundo de las redes sociales, en donde diáriamente se siguen sumando nuevos adeptos, superando la previsión de los analistas más optimistas.

España, según el informe publicado con el título de: "Desarrollo e influencia de las TIC en las universidades españolas" éstas están realizando un considerable esfuerzo por integrarse dentro de este mundo de la comunicación. Éste informe concluye que la presencia y el uso de las nuevas tecnologías redunda en la mejora de las oportunidades y de la calidad académica y en el perfeccionamiento de la comunicación entre los ditintos colectivos estudiantíles aumentando, además, la eficacia en los tramites administrativos. Esta apuesta de las universidades por el mundo de la comunicación y, particularmente, en el mundo de las redes sociales supone una potente herramienta a la hora de comunicarse con los alumnos.

Pese a todo, se ha detectado una considerable merma, en los ¿Cuál es el uso de las redes sociales por parte últimos años, en inversión en nuevas tecnologías, careciendo además muchas universidades de un plan de dotación y de los universitarios en España? distribución de los recursos humanos relacionados con ésta área. En nuestro pais, tres cuartas partes de los usuarios de Internet En cualquier caso, las universidades apuestan por el uso de las utulizan las redes sociales, un porcentaje como podemos apreciar redes sociales como el medio más eficaz para comunicarse tanto altísimo. Este volumen de usuarios nos convierte en la quinta con el alumnado como con la sociedad en general. potencia que las utiliza, superando a países como Francia o Hay que destacar casos como el de la Universidad de Valencia Alemania. que, además del uso de las redes sociales cuentan con un canal En términos estadísticos, podemos afirmar que tras Google, la de youtube en el que, con más de 2800 videos, podemos página que más se visita en nuestro pais es Facebook. encontrar numerosos recursos didácticos de temáticas tales como Centrandonos más en las redes sociales, Facebook también tiene topografía, cocina para estudiantes, programación de el privilegio de encabezar el puesto de red social más vista entre aplicaciones Android o procedimientos de construcción. nuestros universitarios, seguida muy de cerca por Twitter. La tercera red social más popular es Tuenti; ésta última, sin embargo, está más centrada dentro del mundo joven, estando situados sus usuarios entre los 14 y los 35 años y sumando más de 12 millones de seguidores.

Consultados sobre los beneficios que puede proporcionar éstas nuevas tecnologías en la educación, el personal adherido al eTitulo coincide en destacar la mejora en la accesibilidad, la simplificación de los tramites académicos y la disminución de los errores humanos. Se señala, sin embargo, que aún es De nuevo Facebook está presente en las principales instituciones necesario esperar mejoras en los trámites como la matrícula y las educativas de nuestro país, con un promedio de unos 9000 pasarelas de pago online. seguidores por página. Casi todas las universidades españolas cuentan ya con su propia página oficial de facebook, aunque las Es fácil acceder al este informe sobre el desarrollo e influencia que tienen mayor presencia en Internet son la Universidad a de las nuevas tecnologías en la universidad española en las dirección web: http://www.etitulo.com/wp­ Distancia de Madrid o la Universidad de Navarra, por citar siguiente content/uploads/2013/05/Desarrollo­e­influencia­de­las­TICs­en­ algunas de ellas. la­universidad­espa%C3%B1ola.pdf. Una amplia mayoría de jovenes usa las redes sociales más para buscar información, mantenerse en contacto con amigos y compañeros, o bien, plantear eventos de distinta naturaleza.

Redes sociales y universidad

En cuanto a lo que se refiere a las instituciones educativas en

4

© 2013 - www.spanishdeveloperscommunity.es



ÍNDICE

CONTENIDOS PRINCIPALES 01. Editorial 02. ¿Qué uso dan los universitarios españoles a las redes sociales?. 03. Uso de paquetes Debian en linux.

04. Servlets en Java. 05. La policía francesa migra ordenadores de escritorio a GNU/Linux. 06. Creando un captcha con GD. 07. Lanzamiento de Ubuntu Phone OS. Móviles y ordenadores todo en uno. 08. Firefox OS. 09. Ruby on Rails. Entendiendo las URL. 11. Como medir tu influencia en RRSS: Klout. 12. Errores en el desarrollo de app: cuáles son y cómo evitarlos. 13. Cómo subir apps a google play. 14. Lenguaje KV. 15. Estructura de datos Arbol Binario de Búsqueda. 16. Solucionar problemas de detección en redes inhalambricas

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 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.

responsable del proyecto: Antonio García Prats coordinación y comunicación: Antonio García sitio web: www.spanishdeveloperscommunity.es facebook: www.facebook.com/spanishdeveloperscommunity.es twitter: @spanishdc google+: @spanishdc diseño de portada: Antonio García 6

Contactar Puedes contactar conmigo para enviarnos cualquier duda que tengas en el correo electrónico:

antoniogarciaprats@gmail.com

Depósito Legal J 368­2013 © 2013 - www.spanishdeveloperscommunity.es


Editorial

Hemos llegado ya al cuarto número de ésta publicación centrandonos en la novedad que supone la programación sobre los nuevos sistemas operativos creados para funcionar en dispositivos móviles. Son ya numerosos éstos sistemas que, aún estando dominado el mercado por Android e iOS, ya comienza a notarse la irrupción en escena de nuevos competidores como windows phone, patrocinado por windows, que quiere hacerse un hueco con la reciente compra de Nokia, o Firefox OS. Este último aún timidamente, ha creado la suficiente espectación para que compañias como ZTE lancen ya al mercado dispositivos móviles funcionando con éste sistema operativo. Mi intención, a partir de ésta edición de Spanish Developers Community, es prestar una especial atención al mundo de la programación de estos sistemas: Android, Java MicroEdition, Firefox OS e iOS, proporcionando información sobre estos sistemas que puedan ser útiles a nuestros lectores. Abundando más en este tema, contamos con la valiosa participación de María Ripoll que nos ofrece cada mes una amplia información sobre el mundo de la programación de aplicaciones para dispositivos móviles. No olvidamos prestar la debida atención al mundo de las redes sociales que, de la mano de Ángela Escobar, recibimos cada mes su aportación sobre este novedoso y fascinante mundo. En este número de la revista digital, Sergio Haro nos introducirá en el lenguaje de programación Kivy, dandonos ejemplos básicos de su uso. Por último, pretendemos mejorar los contenidos y, ante todo, hacerlos prácticos para nuestros lectores a fin de que puedan usarlos libremente.

Antonio García Prats

© 2013 - www.spanishdeveloperscommunity.es

7


Linux

Uso de paquetes Debian en linux

En sus funcionalidades globales, los paquetes Debian son similares a los RPM, pero los detalles de su funcionamiento difieren en cada caso, por lo que los paquetes Debian se utilizan en distribuciones distintas que los RPM. Como cada sistema utiliza su propio formato de base de datos, RPM y Debian no pueden intercambiar paquetes sin convertir formatos. Para utilizar paquetes Debian hay que saber cómo utilizar los comandos dpkg, dselect y apt­get y puede ser útil conocer algunos otros.

Distribuciones y convenciones en Debian

MIPS o Sparc entre otros. La arquitectura original era x86; las derivadas, normalmente sólo funcionan en sistemas x86, aunque esto seguramente cambiará en el futuro. La nomeclatura que siguen estos paquetes es similar a la usada en RPM, aunque a veces omiten los códigos del nombre de archivo para especificar la arquitectura del paquete, en particular en los paquetes x86. Cuando aparecen códigos, es posible que no sigan las convenciones RPM.

El conjunto de comandos de dpkg.

Los paquetes Debian son incompatibles con los paquetes RPM, pero los principios básicos de funcionamiento son los mismos en ambos tipos. Al igual que los de RPM, los paquetes Debian incluyen información de dependencia y las utilidades del paquete de Debian mantienen una base de datos de paquetes, archivos y otros elementos instalados. El comando dpkg se utiliza para Aunque debian no da demasiada importancia a las herramientas instalar un paquete Debian. La sintaxis de este comando es de configuración GUI, sus derivados si que se la dan, lo cuál lo similar a la de rpm: hace más atractivas para los recien llegados a el sistema dpkg [opciones][accion] [archivos paquete | nombre de operativo Linux. Como indica su nombre, los paquetes Debian procedende la distro Debian. Desde entonces, el formato ha sido adoptado por casi todas las distribuciones, entre las que se incluyen como las más importantes Ubuntu, Linux Mint o Xandros. Todas estas distribuciones deriban de Debian.

paquete]

Al igual que RPM, el formato de paquete Debian es neutral con La acción es la acción que realizar; las acciones comunes se respecto al sistema operativo y al tipo de CPU. resumen en la tabla que mostramos al final de este artículo. Las La distribución Debian original ha sido llevada a muchas CPU opciones modifican el comportamiento de la acción, de manera diferentes, entre las que se incluye x86, IA­64, ARM, PowerPc, muy similar a las opciones de rpm.

8

© 2013 - www.spanishdeveloperscommunity.es


del paquete especificado. Esta información puede ser útil para Como ocurre en rpm, dpkg espera un nombre de paquete en rastrear problemas relacionados con las dependencias. El algunos casos y un nombre de archivo de paquete en otros. En subcomando rdepends localiza las dependencias inversas, es concreto, tanto ­­install (­i) como ­­info (­I) requieren el nombre decir, los paquetes que dependen del especificado. de archivo de paquete, pero los demás comandos toman el nombre de paquete más corto. Localizar todos los paquetes: el subcomando pkgnames muestra los nombres de todos los paquetes instalados en el sistema. Si Si está actualizando un paquete, puede que tenga que eliminar incluye un segundo parámetro, como en apt­cache pkgnames sa, uno antiguo antes de instalar el nuevo. Para ello, utilice la opción el programa devolverá sólo aquellos paquetes que comiencen ­r de dpkg. con la cadena espedificada. Para localizar información sobre un paquete instalado, utilice el Existen muchos más subcomandos y opciones, pero estos son los parámetro ­p de dpkg. que utilizará más probablemente. Varios de los subcomandos apt­ cache están pensados para los mantenedores de paquetes y para Con frecuencia, los sistemas de tipo Debian utilizan un par de depurar problemas serios de la base de datos de paquetes, más utilidades de nivel superior, apt­get y dselect, para gestionar la que para la administración cotidiana del sistema. instalación y eliminación de paquetes. Sus interfaces pueden ser muy útiles cuando desea instalar varios paquetes, pero, con Uso de apt­get frecuencia, dpkg es más cómodo cuando se manipulan sólo uno o dos. APT, junto con su utilidad apt­get, es equivalente de Debina para Yum en determinadas ditribuciones de tipo RPM. Esta Como dpkg puede aceptar como entrada nombres de archivos de herramienta de meta­empaquetados le permite realizar paquete, este método es también el preferido para instalar un fácilmente actualizaciones de paquetes, especialmente si dispone paquete descargado desde una fuente poco habitual o uno que de una conesión rápida a Internet. hayamos creado nosotros.

Uso de apt­cache

La suite de herramientas APT incluye un programa apt­cache, cuya única finalidad es ofrecer información sobre la base de datos de paquetes Debian. Hay varias características de esta herramienta que pueden interesarle: Mostrar la información del paquete: con el comando showpkg, como en apt­cache showpkg samba, muestra información sobre el paquete. La información mostrada es diferente de la devuelta por las acciones informativas de dpkg.

Los sistemas basados en Debian incluyen un archovo /etc/apt/sources.list, que especifica las ubicaciones desde las que se pueden obtener los paquetes importantes. Si instaló el sistema operativo desde una unidad de disco óptico, este archivo mostrará inicialmente los directorios del CD­ROM de instalación en los que se pueden encontrar los paquetes. Es probable también que aparezcan unas cuantas líneas cerca del principio marcadas con almohadillas, indicando los directorios de un sitio FTP o sitio web de los que puede obtener los paquetes actualizados.

Aunque APT se asocia principalmente con sistemas Debian, también hay disponible un acceso para sistemas basados en Mostrar estadísticas de los paquetes: puede saber cuántos RPM. paquetes hay instalados, cuántas dependencias hay grabadas y otras estadísticas de la base de datos de paquetes si pasa el La utilidad apt­get funciona obteniendo información sobre los subcomando stats, como en apt­cache stats. paquetes disponibles de las fuentes indicadas en /etc/apt/sources.list y empleando luego dicha información para Localizar dependencias no satisfechas: Si un programa informa actualizar o instalar paquetes. de que faltan bibliotecas o archovos, puede ser útil usar apt­ cache unmet; esta función de apt­cache devuelve información A continuación también mostramos los comandos más utiles del sobre las dependencias no satisfechas, lo cual le puede ayudar a comando apt­get. rastrear el origen de los problemas de los archivos que faltan. Mostrar las dependencias: con el subcomando depends, como en apt­cache depends samba, se muestran todas las dependencias © 2013 - www.spanishdeveloperscommunity.es

9


Artículo de portada

Acciones principales de dpkg Comando ­i

Descripción instala un paquete

­­configure

Reconfigure un paquete instalado: ejecuta el script posterior a la instalación para configurar las opciones especificas del sitio.

­r

Borra un paquete

­P

Elimina un paquete

­p

Muestra información sobre un paquete instalado.

­I

Muestra información sobre un archivo de paquetes desinstalado.

­­list­patron

Enumera todos los paquetes instalados cuyos nombres coincidan con patron

­L

Enumera los archivos instalados relacionados con el paquete.

­S

Localiza el o los paquetes que incluyen el o los archivos especificados.

­C

Busca los paquetes parcialmente instalados y sugiere qué hacer con ellos.

Opciones para afinar las acciones de dpkg Comando ­­root­dir

DSe utiliza con... Todas

Descripción Modifica el sistema linux utilizando el directorio raiz.

­­B

­r

Desactiva los paquetes que se basan en el que se está eliminando

­­force­cosas

Diversas

Reemplaza los valores predeterminados que harían abortar a dpkg.

­­ignore­depends ­i ­r

Ignora la información de dependencia del paquete especificado.

­­no­act

­i ­r

Verifica las dependencias, los conflictos y otros problemas sin instalar o eliminar realmente el paquete.

­­recursive

­i

Instala todos los paquetes que coinciden con el comodín de nombre de paquete del directorio especificado y todos sus subdirectorios.

­G

­i

No instala el paquete si ya hay instalada una versión más reciente del mismo.

­E

­i

No instala el paquete si ya se encuentra instalada la misma versión del mismo.

10

© 2013 - www.spanishdeveloperscommunity.es


Los comandos de apt­get Comando update

Descripción Obtiene información actualizada sobre los paquetes disponibles de las fuentes de instalación enumeradas en source.list

upgrade

Actualiza todos los paquetes instalados con las versiones más recientes disponibles

dselect­upgrade Realiza cualquier cambio en el estado del paquete que se haya quedado sin hacer tras la ejecuciónde dselect. dist­upgrade

Es similar a upgrade, pero realiza resoluciones de conflictos para evitar actualizar un paquete si con ello se rompe una dependencia.

install

Instala un paquete por su nombre.

remove

Elimina un paquete especificado por su nombre.

source

Obtiene el archivo de paquete fuente más reciente disponible partiendo del nombre de su archivo y empleando la información disponible sobre los paquetes disponibles y los archivos de instalación enumerados en sources.list

check

Revisa la consistencia de la base de datos de paquetes y las instalaciones defectuosas de paquetes.

clean

Realiza tareas de mantenimiento para hacer una limpieza a fondo de la información de los archivos obtenidos de la base de datos de paquetes Debian.

Las opciones más útiles de apt­get Opción

Se utiliza con Descripción

­d

upgrade, dselect­upgrade install, source

Descarga los archivos de paquetes, pero no los instala

­f

install, remove

Intenta corregir un sistema cuyas dependencias no se satisfacen.

­m

upgrade, dselect, upgrade, install, remove, source

Ignora todos los archivos de paquetes que no se pueden obtener.

­q

Todos

Omite información parcial de los indicadores de progreso. Se puede duplicar para generar menos información de progreso.

­s

Todos

Realiza una simulación de la acción sin modificar, instalar o borrar realmente los archivos.

­y

Todos

Genera una respuesta afirmativa a cualquier pregunta del tipo si/no de los scripts de instalación.

­b

source

Compila un paquete fuente tras obtenerlo.

­­no­upgrade

install

Hace que apt­get no actualice un paquete si ya hay instalada una versión anterior

© 2013 - www.spanishdeveloperscommunity.es

11


Programación Java

Servlets en java Antonio García www.ibidem­network.es

/antgarprats @antgprats

Se podría definir un servlet como un programa escrito en Java que se ejecuta en

Servlets frente a CGI

responde a las peticiones de uno o más clientes.

La forma más tradicional de añadir funcionalidad a un servidor web era a través

Una forma muy extendida a la hora de solicitar los datos, son los formularios,

aproximación tradicional de abordar estos problemas:

el marco de un servicio de red (un servidor HTTP, por ejemplo) y que recibe y

de los que no carece casi ningún sitio web. Los formularios son una

combinación directa de código html y scripts, o programas que se ejecutan en el servidor.

Visto desde el lado del sitio web, un servidor HTTP se limita a enviar los ficheros que solicitan los navegadores. En un caso más complejo, como el que

representan los formularios, el servidor hace llamadas a programas específicos. Éstos programas recogen los datos de los formularios y construyen páginas

dinámicamente para responder a esta petición. De hecho, estas páginas no existen en el disco duro de nuestro ordenador, por ello, se le llaman páginas dinámicas.

La popularidad de estos scripts son muy populares por las siguientes razones:

son totalmente independientes del navegador, respuestas con más complejidad son ejecutadas desde el servidor y la seguridad es mucho mayor puesto que estos programas están bajo el control directo del administrador del servidor.

12

de scripts CGI. Sin embargo los servlets presentan varias ventajas frente a la

­ Un servlets no se ejecuta en un proceso separado.

­ Una vez que se ha invocado, éste se queda almacenado en memoria sin consumir más recursos del servidor.

­ Sólamente hay una instancia del servlet que responde a todas las peticioes concurrentemente, lo que supone un considerable ahorro de recursos.

­ Un servlet puede ser ejecutado por un motor Servlet en una caja restringida de la misma forma que un applet es ejecutado por un navegador en una caja restringida.

­ Los servlets están escritos en Java y, por tanto, tienen acceso a todos los recursos de este lenguaje.

­ Son portables entre diferentes plataformas, siguiendo la premisa en la que se basa Java.

­ Al estar escritos en Java, gozan de las características de seguridad propios de Java, como puede ser el manejo de memoria.

­ Los servlets son muchos más eficientes que los CGI.

© 2013 - www.spanishdeveloperscommunity.es


Api Servlet Un servlet es una clase Java que implementa la interfaz Servlet, que define cinco métodos:

service ( ) es el corazón de los servlets. El servidor invoca al método service ( ) para ejecutar respuestas. Éste método acepta como parámetros objetos ServletRequest que encapsula la petición del cliente y ServletResponse que dispone de los métodos para devolver la información del cliente.

init ( ) es el lugar en donde se inicializa el servlet. Es un método que acepta

como parámetro un objeto de tipo ServletConfig, que contiene la configuración del servidor, y garantiza que será llamado tan sólo una vez en la vida del servlet.

getServletConfig ( ) debe devolver el objeto ServletConfig que se pasó como parámetro en el método init ( ).

destroy ( ) libera el servlet. Se llama cada vez que el servlet debe de ser descargado, por ejemplo, debido a que se va a cargar una nueva versión.

getServletInfo ( ) devuelve una cadena con la información del CopyRight.

La clase HTTPServlet La clase HttpServlet es una clase que implementa la interfaz Servlet y que incorpora, además, métodos específicos para servidores web. Un uso típico de

esta clase es el procesamiento de formularios html. Pero antes de poder escribir

el primer servlet es necesario tener algunas nociones básicas sobre el protocolo HTTP.

Este protocolo está orientado a petición­respuesta. Una petición está formado por unos campos de cabecera y un cuerpo que puede estar vacío. Una respuesta HTTP contiene el código del resultado y de nuevo una cabecera y un cuerpo.

El método service ( ) de la clase HttpServlet lanza diferentes peticiones a

distintos métodos Java para sistemas de petición diferentes. Reconoce los

métodos estándar en formato HTTP/1.1 y no es conveniente sobrecargarlo en subclases, a no ser que se necesiten implementar métodos adicionales. Los

sistemas o métodos de petición que reconoce son GET, HEAD, PUT, POST, DELETE, OPTIONS y TRACE; cualquier otro método obtendrá como respuesta un error HTTP de tipo Bad Request. Para cada uno de los métodos

anteriores, Java lanza un método de tipo doXxx ( ), por ejemplo, para GET lanza doGet ( ). Todos los métodos esperan dos parámetros: HttpServletRequest peticion;

HttpServletResponse respuesta; Los métodos doOptions ( ) y doTrace ( ) disponen de una implementación por defecto y no está permitido sobrecargarlos. El método HEAD, que se supone

GET, sin incluir el cuerpo. Así que los métodos que se pueden utilizar van a ser doGets ( ), doPuts ( ), doPost ( ) y doDelete ( ), cuyas implementaciones por

defecto en la clase HttpServlet devuelven un error HTTP de tipo Bad Request. Cualquier subclase HttpServlet debe sobrecargar uno o más de estos métodos para proporcionar la adecuada implementación a las acciones que desea realizar.

Los datos que la petición se pasan a todos los métodos como primer argumento de tipo HttpServletResques que es una subclase de la clase más general ServletRequest. Las respuestas que pueden crear los distintos métodos se devuelven en el segundo argumento de tipo HttpServletResponse, que es una subclase de ServletResponse.

Cuando se solicita una página desde un navegador, se está utilizando el método GET. La petición GET no tiene cuerpo, es decir, el cuerpo de la petición está vacío. La respuesta debería contener un cuerpo con los datos de la página

solicidata y campos de cabecera que describan la información que contiene el

cuerpo; de estos campos de cabecera son especialmente útiles los campos

Content­Type y Content­Encoding. A la hora de enviar datos, de un formulario, por ejemplo, se puede utilizar tanto el método GET como POST. La diferencia entre uno y otro es que en una petición GET los parámetros se codifican en la

URL, mientras que en una petición POST se transmiten en el cuerpo. Los editores HTML y otras herramientas de descarga utilizan peticiones PUT para descargar recursos en un servidor web y luego peticiones DELETE para eliminar estos recursos.

Un ejemplo práctico de servlets Para mostrar un primer ejemplo que pueda mostrar de una manera práctica cuál

es el funcionamiento de una aplicación Servlet realizaremos una página HTML que denominaremos param.html que incluirá un formulario a rellenar por el usuario (cliente). Cuando éste pulse el botón enviar, se llamará a un servlet (ParamServlet.java) que recogerá los datos tecleados y generará una página

dinámica como respuesta, con los datos, y que será mostrada de nuevo al cliente que desencadenó el proceso.

Para que exista un servlet atento a las peticiones que le vayan llegando, tendremos instalado e iniciado el contenedor de servlets (Tomcat) al que

configuraremos un archivo web (web.xml). donde deben figurar todos los servlets disponibles para su ejecución.

Antes de escribir ninguno de los tres ficheros, es importante señalar unos

cuantos requisitos que hay que cumplir para escribir servlets. Una vez instalado el contenedor, existirá un directorio llamado "webapps". Es en él donde

colocaremos todas las aplicaciones web que hagamos (servlets, jsp, ejb, etc). Lo ideal es que nos creemos otro directorio dentro del mismo y allí dentro, otra estructura de directorios que incluirán uno llamado "WEB­INF" y dentro de

ese, otro con el nombre "classes" (exactamente, incluyendo las mayúsculas, guiones, etc. Para la práctica, yo hice el directorio "misServlets", quedando la estructura siguiente:

que devuelve las mismas líneas de cabecera que podría devolver el método

© 2013 - www.spanishdeveloperscommunity.es

13


+­­­Tomcat 5.5

formulario rellenable. Comienza con <FORM...> y termina con </FORM>. En

+­­­webapps

cuyo nombre es "ParamServlet" y está en un directorio llamado "misServlets",

|

él se indica que los datos se enviarán mediante el "Método POST" al servlet,

|

en el contenedor Tomcat. Dicho contenedor está en el mismo ordenador ya que

+­­­misServlets

el nombre del servidor que lo alberga es "localhost". Esa llamada al servlet se

| Param.html

producirá en cuando el usuario pulse el botón "Enviar" (<INPUT

|

TYPE=SUBMIT>). La página la colocamos en la carpeta "misServlets" (o el

+­­­WEB­INF

nombre decidido para este fin).

| web.xml |

A contunuación listamos el código de la página servlet, no sin antes indicar

+­­­classes

que hay que incluirle la librería servlet­api.jar, que se encuentra en la carpeta de

ParamServlet.class

Tomcat ..\common\lib. Se puede establecer el classpath, copiarla, o adjuntarla

Listamos en primer lugar el código de la página param.html. Observemos unos cuantos puntos importantes. En la página incluimos un

al proyecto. En Eclipse es con las opciones Project­>Properties­>Java Build Path­>Libraries y botón "Add external jar" para, navegando, incluir el fichero mencionado.

Una vez compilado este programa, se coloca en la carpeta classes de la

Listado de la página param.html <!--Param.html Lectura de parámetros con formularios + servlets --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>Param.html</TITLE></HEAD> <BODY BGCOLOR="#CCCCFF"> <P></P> <H2>Introduce tus datos:</H2><BR> <HR></HR> <CENTER> <FORM NAME="FORM1" METHOD="POST" ACTION="http://localhost:8080/misServlets/ParamServlet"> <TABLE BORDER> <TR> <TD><B>Nombre:</TD> <TD><INPUT TYPE=TEXTBOX NAME="NOM" SIZE="25" VALUE=""></TD> </TR> <TR> <TD><B>Edad:</TD> <TD><INPUT TYPE=TEXTBOX NAME="EDA" SIZE="20" VALUE=""></TD> </TR> </TABLE> <P></P> <INPUT TYPE=SUBMIT VALUE="Enviar"> <HR></HR> Formulario HTML que invocará a un servlet </FORM> </CENTER> </BODY> </HTML>

14

© 2013 - www.spanishdeveloperscommunity.es


estructura que hicimos. Por último nos queda escribir el "descriptor de despliegue", elemento necesario antes de que pueda invocarse cualquier servlet y que describe cada uno de ellos. Este fichero se llama siempre web.xml, por lo que podemos copiarnos otro cualquiera de carpetas similares (yo tomé el de la carpeta ROOT, que también cuelga de webapps). Luego lo editamos a nuestro gusto y lo dejamos más o menos como se muestra en el siguiente listado.

Es importante ser cuidadoso con la sintaxis, ya que los errores por fallos en este

archivo a veces son difíciles de detectar. Obsérvese cómo incluimos dos etiquetas <servlet> y <servlet­mapping> que dan a conocer este servlet al contenedor. Una vez que lo iniciemos, estará disponible para ser invocado.

Para ejecutar esta aplicación, nos iríamos a la carpeta bin de Tomcat a ejecutar el programa Tomcat5.exe, que abrirá una consola que observaremos detenidamente para comprobar que no hay errores. Si todo va bien, quedará como se muestra en la imagen.

Si todo lo anterior ha funcionado, ya podemos abrir nuestro navegador favorito y teclear en la barra de navegación.

http://localhost:8080/misServlets/Param.html Si pusimos la página donde se indicó (misServlets), no debería haber problemas. Las dificultades pueden venir al pulsar el botón Enviar del formulario, momento en el cual se envía la "petición" del usuario a Tomcat. El

contenedor recibe la petición y buscará el servlet en la lista de los posibles en nuestro descriptor web.xml. Si todo está bien, será encontrado e invocado, ejecutando el método POST (que es como el main), ya que así se indicaba en la etiqueta <FORM> de la página HTML. El método Post() tiene dos

argumentos. El primero representa la "petición" del cliente (usuario remoto) y con el nombre de HttpServletRequest; el segundo es la "respuesta" que

generará el servlet hacia el cliente en la forma del objeto HttpServletResponse. El servlet, lo primero, ha de indicar el tipo de información que se va a emitir

Listado del código Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ParamServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // Obtenemos un objeto Print Writer para enviar respuesta res.setContentType("text/html"); PrintWriter pw = res.getWriter(); pw.println("<HTML><HEAD><TITLE>Leyendo parámetros</TITLE></HEAD>"); pw.println("<BODY BGCOLOR=\"#CCBBAA\">"); pw.println("<H2>Leyendo parámetros desde un formulario html</H2><P>"); pw.println("<UL>\n"); pw.println("Te llamas " + req.getParameter("NOM") + "<BR>"); pw.println("y tienes " + req.getParameter("EDA") + " años<BR>"); pw.println("</BODY></HTML>"); pw.close(); } } (html) y luego forma un objeto asociado con el navegador web del cliente para

imprimir allí los resultados, por medio del método getWriter(). Extraerá los datos de los cuadro de texto (el nombre y la edad) mediante los métodos getParameter() y se dedicará a formar la página HTML dinámica. Una vez terminada, se cierra (close) y es enviada automáticamente.

© 2013 - www.spanishdeveloperscommunity.es

Como instalar el apache Tomcat 7.0.35 en Linux Ubuntu 13.04. Apache Tomcat es un contenedor web que le permite servir servlets Java y aplicaciones web JSP (Java Server Pages). Esta entrada de blog le guiará a través del proceso de instalación paso a paso de Apache Tomcat 7.0.35 en

15


Listado del descriptor <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/webapp_2_4.xsd" version="2.4"> <display-name>Servlets ejemplo</display-name> <description> Servlets de ejemplo para practicar </description> <!-- Publicamos nuestro servlet aqui --> <servlet> <servlet-name>ParamServlet</servlet-name> <servlet-class>ParamServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ParamServlet</servlet-name> <url-pattern>/ParamServlet</url-pattern> </servlet-mapping> <!-- Fin de la publicacion de servlets --> </web-app> Ubuntu Linux 13.04 32 bits. Esta instalación se realiza en una instalación limpia de Ubuntu Server 13.04.

no están certificados en la plataforma OpenJDK. Recomiendo la instalación de la distribución oficial JDK de Oracle en su lugar. PASO

Antes de instalar Tomcat, necesita instalar Java. El 7 Ubuntu paquete distribución OpenJDK de Java. He

software que utilizo que aún no

PASO

están certificados en la plataforma de

la

distribución

a la ruta OpenJDK debido a diversos productos de software que utilizo que aún

16

Java

7

INSTALAR

EL PAQUETE

Durante este paso, Tomcat y OpenJDK está

oficial JDK de Oracle en su lugar.

estándar Tomcat incluye la distribución OpenJDK de Java. He optado por no ir

2:

TOMCAT7

la

Antes de instalar Tomcat, necesita instalar Java. El 7 Ubuntu paquete Paquete

Oracle

Oracle Java 7 día 21 en Ubuntu 13.04 Linux

debido a diversos productos de

instalación

el

Siga las instrucciones en Cómo instalar

optado por no ir a la ruta OpenJDK

Recomiendo

Instale

hecho

Paquete estándar Tomcat incluye la

OpenJDK.

1:

ACTUALIZACIÓN 21, si usted no lo ha

instalado. Vamos a configurar Tomcat en un

paso posterior para utilizar el JDK de Oracle en su lugar. Ejecute los siguientes comandos en la consola:

sudo apt-get update

© 2013 - www.spanishdeveloperscommunity.es


sudo apt-get install tomcat7

instalación se ha realizado correctamente. También puede utilizar el comando

PASO 3: Detenga el servicio TOMCAT7

carpeta actual, si la instalación se ha realizado correctamente.

wget para probar la instalación. Esto creará un archivo index.html en la

Ejecute el siguiente comando en la consola para detener el servicio tomcat7:

1

sudo service tomcat7 parada

el servicio tomcat7:

Respuesta:

sudo service tomcat7 parada

Parar Tomcat motor servlet tomcat7 [OK]

Respuesta:

PASO 4: EDITAR LA CONFIGURACIÓN POR DEFECTO TOMCAT7

Parar Tomcat motor servlet tomcat7 [OK]

START­UP ARCHIVO

Este paso asume que ha instalado Java, como se detalla en el paso 1. Si utiliza otra versión de Java ajuste AVA_HOME en consecuencia. Ejecute el siguiente comando en la consola para editar JAVA_HOME en el archivo de configuración de arranque por defecto tomcat7:

wget localhost: 8080Ejecute el siguiente comando en la consola para detener

PASO 4: EDITAR LA CONFIGURACIÓN POR DEFECTO TOMCAT7 START­UP ARCHIVO

Este paso asume que ha instalado Java, como se detalla en el paso 1. Si utiliza

otra versión de Java ajuste JAVA_HOME en consecuencia. Ejecute el siguiente comando en la consola para editar JAVA_HOME en el archivo de

sudo nano / etc/default/tomcat7

configuración de arranque por defecto tomcat7:

Cambie la opción JAVA_HOME a la siguiente y retire la partida #:

sudo nano / etc/default/tomcat7

JAVA_HOME = / usr/lib/jvm/jdk1.7.0_21

Cambie la opción JAVA_HOME a la siguiente y retire la partida #:

Guarde el archivo y se le hacen. Tomcat ahora comenzará a utilizar el JDK de

JAVA_HOME = / usr/lib/jvm/jdk1.7.0_21

Oracle en lugar del OpenJDK.

PASO 5: Iniciar el servicio TOMCAT7

Guarde el archivo y se le hacen. Tomcat ahora comenzará a utilizar el JDK de Oracle en lugar del OpenJDK.

Ejecute el siguiente comando en la consola para iniciar el servicio tomcat7:

PASO 5: Iniciar el servicio TOMCAT7

sudo service tomcat7 inicio

Ejecute el siguiente comando en la consola para iniciar el servicio tomcat7:

PASO 6: Asegúrese de que está ejecutando en Oracle JDK

sudo service tomcat7 inicio

Ejecute el siguiente comando en la consola:

PASO 6: Asegúrese de que está ejecutando en Oracle JDK

/usr/share/tomcat7/bin/version.sh

Ejecute el siguiente comando en la consola:

PASO 7: Abra el DEFAULT TOMCAT PUERTO EN SU FIREWALL

/usr/share/tomcat7/bin/version.sh

La apertura de un puerto es opcional y sólo tendrá que ejecutar este comando si

PASO 7: Abra el DEFAULT TOMCAT PUERTO EN SU FIREWALL

tiene un firewall habilitado y desea utilizar Tomcat para un host diferente: UFW sudo enable 8080/tcp PASO 8: PRUEBE SU INSTALACIÓN

La apertura de un puerto es opcional y sólo tendrá que ejecutar este comando si tiene un firewall habilitado y desea utilizar Tomcat para un host diferente: UFW sudo enable 8080/tcp

Navega con tu navegador a http://localhost:8080. Si aparece "¡Funciona!", La

© 2013 - www.spanishdeveloperscommunity.es

17


Open Source

La policía francesa migra ordenadores de escritorio a GNU/Linux.

Tal y como hemos conocido a través de la revista Linux Magazine, conocemos la acción emprendida por la policía gala de migrar más de 70.000 ordenadores pertenecientes a la fuerzas de seguridad del estado, acción que se hará de forma progresiva en los próximos años.

distribución la podéis encontrar en la página de la enciclopedia online wikipedia: http://en.wikipedia.org/wiki/GendBuntu.

Pero esta migración, así como la utilización de nuevas herramientas de software no se ha hecho de forma abrupta; por el contrario, desde el año 2004, se vienen incorporando poco a Esta noticia viene recogida en la página: poco nuevas aplicaciones tanto ofimáticas como gestión de clientes de correo, ... etc, de forma que el personal técnico de la https://joinup.ec.europa.eu/community/osor/news/french­ gendarmería francesa vaya adaptando su forma de trabajar así gendarmerie­open­source­desktop­lowers­tco­40 como conociendo las potencialidades de las nuevas herramientas basadas en open source, antes de la incorporación definitiva a y pretende, con ello, reducir los costes que supongen para la Linux. gendarmería francesa el mantenimiento de los equipos y software necesario para realizar su trabajo. Creo que estes un buen ejemplo del que deberían tomar nota las instituciones españolas, con lo que no sólo ganarían en seguridad El sistema operativo que se empleará es una versión y estabilidad sino que también abaratarían los costes de una customizadas de la distribución Ubuntu, que tendrá la forma más que sensible en el apartado de software y aplicaciones denominación final de Gendbuntu. Más información sobre esta informáticas.

18

© 2013 - www.spanishdeveloperscommunity.es



Programación PHP

Creando un captcha con GD

Es natural ya para el usuario en muchas páginas web encontrarse un capcha o texto de verificación para asegurarse de que fuera un humano y no una máquina quién ingresaba los datos y no, como decimos, un proceso automático. La palabra catcha es un acrónimo de Completely Automated Public Turing test to tell Computers and Humans Apart, o dicho en castellano, prueba de turing pública y automática para diferenciar máquinas y humanos.

instalada la librería GD. Entonces, crearemos una clase que hará uso de esta librería, y nuestro objetivo sera generar una imagen distorsionada, siendo configurable su longitud, tipo de caracteres, color de fondo, etc, de manera de que pueda ser adaptada en todos nuestros desarrollos. El método texto, que vemos en el primer listado, será el que nos entregará una cadena aleatoria formada por los caracteres definidos en el atrivuto privado $caracteres. Aquí podremos agregar o quitar elementos para dar mayor o menor complejidad , el string resultante tendrá la longitud dada como parámetro o por defecto será de 5 caracteres como se indica en el parámetro $long.

El captcha es si consiste en una serie de caracteres alfanuméricos que se muestran en una imagen con fondo de color determinado, o bien los caracteres distorsionados lo que hace que una máquina notenga posibilidades de leerlos. Además, de para evitar que los usuarios provoquen un proceso que genere votos para su El único método público de nuestra clase será captcha, que por preferencia mediante un proceso automatizado. llevar el mismo nombre que la clase, actuará como constructor, El PHP no sólo se limita a producir código HTML, también es pedirá al método texto una cadena aleatoria y la asignará en la posible el manejo de archivos de imágenes en formatos como variable de sesión $_SESSION['captcha'], para que podamos PNG, GIF, JPG. Para esto, es necesario que se encuentre comparar lo que el usuarioingrese con la cadena generada. Por

20

© 2013 - www.spanishdeveloperscommunity.es


Listado de la clase captcha class captcha { private static $caracteres = 'abcdefghijklmnipqurstuvwxyz123456789'; private function texto ( $long= 5 ) { for ( $i=0; $i<$long; $i++ ) { $texto.=self::$caracteres(rand(0,strlen(self::caracteres)); } return $texto; } public function captcha ( $w=150, $h=30 ) { session_start ( ); $_SESSION['captcha']=self::texto ( ); $captcha = imagecreate ( $w, $h ); $colorfondo = imagecolorallocate ( $captcha, 0, 0, 255 ); $colortexto= imagecolorallocate ( $catpcha, 255, 255, 0 ); $colorlinea = imagecolorallocate ( $catpcha, 255, 105, 180 ); imageline ( $catpcha, 0, 9, 150, 9, $colorlineal ); imageline ( $catpcha, 0, 15, 150, 15, $colorlineal ); imageline ( $catpcha, 0, 20, 150, 20, $colorlineal ); imageline ( $catpcha, 5, 30, 5, $_SESSION['catpcha'], $colorlineal ); header ("Content-type: image/png" ); imagepng ( $captcha ); imagedestroy ( $captcha ); } }

otra parte, el constructor recibirá el forma opcional un ancho y alto para el tamaño de generación de la imagen. Haciendo uso de las funciones de la libreria GD para el manejo de gráficos desde PHP crearemos un rectángulo de 150x30 píxeles mediante imagencreate. La imagen creada no tiene fondo por defecto, por lo cual le asignaremos un color con la función correspondiente. Nuestro script PHP devolverá una imagen. Para esto, deberemos indicarle al navegador mediante el envio de haders o cabeceras que el contenido a mostrar a continuacion será una imagen de tipo png; a continuación la mostraremos en pantalla. Es muy habitual destruir la imagen dinámicamente creada en de la memoria una vez que ha sido mostrada. En caso contrario, estaríamos almacenando contenido innecesario en la memoria de nuestro servidor web.

HTML img, indicando como origen de la imagen nuestro archivo PHP. En el archivo captcha.php encontraremos el código que mostramos en el listado correspondiente. A continuación, mostramos el código correspondiente a la aplicación de un formulario web de ejemplo. Siempre verificaremos que el texto ingresado esté en minúsculas, dado que no consideramos a las mayúsculas en nuestro atributo de clase $caracteres. Finalmente contamos con una clase para sumar en nuestros formularios de ingreso, registración o consulta de información, que nos permite controlar los ataques o intentos abusivos, pudiendo modificar todos nuestros formularios de forma centralizada si deseamos.

La aplicación de nuestra clase será simplemente utilizar el tag © 2013 - www.spanishdeveloperscommunity.es

21


Listado de la página captcha.php <?php require ("classes/clsCaptcha.php" ); $captcha = new Captcha ( ); ?>

Listado del formulario de ejemplo <?php if (!empty($_POST['enviar'])) { session_start ( ); if ( $_SESSION['captcha'] == strlower ( $_POST['txt'] )) { echo "El texto ingresado es correcto"; exit ( ); } else { echo "El texto ingresado es incorrecto. Por favor intentelo nuevamente"; } } ?> <html> <head></head> <body> <form action="index.php" method="post"> <img src="captcha.php" /><br /> <input name="txt" type="text"><br /> <input name="enviar" type="submit" value="Verificar código"> </form> </body> </html>

22

© 2013 - www.spanishdeveloperscommunity.es


Linux ubuntu

Lanzamiento de Ubuntu Phone OS. Móviles y ordenadores todo en uno

Ubuntu phone es el Sistema operativo para móviles que ha Nexus 10. desarrollado la compañía Ubuntu para potenciar nuestro teléfono ¿Y qué pasa con los terminales con Ubuntu Phone OS de serie? buscando tener no sólo un móvil sino también un ordenador. Para ello necesitamos tener un ratón, un teclado, un monitor y un Canonical comentó, en el momento que presentaron la plataforma, que contaban con un gran partner con el que estaban dock station. trabajando y esperaban lanzar terminales en 2014. Por la información que ha salido de Al conectarlo, nuestro Canonical, parece que la terminal se convertirá en una maquinaria realmente está en distribución de linux para marcha porque desde la poder trabajar como si nos compañía anuncian una primera encontraremos en un versión de smartphone con ordenador, pero además poder Ubuntu Phone OS para dentro realizar lo que solemos hacer de mes y medio aunque, eso sí, con nuestro móvil, mandar podría ser un prototipo con el sms, llamar, y utilizar nuestras objetivo de lanzar dispositivos mejores aplicaciones. comerciales en 2014. El próximo 17 de Octubre Evidentemente, si ahora no van (aunque ya habían aparecido a lanzar ningún terminal, el algunas versiones de prueba), será la fecha prevista para el lanzamiento de estos dispositivos. objetivo del lanzamiento de esta imagen con Ubuntu Phone OS Los terminales que soportará son los terminales de google que se es doble. Por un lado, creo que Canonical demuestra que su apuesta por el segmento de la movilidad sigue viva y que están encuentran ahora en el mercado que son: trabajando en esta línea; por otro lado, lanzar esta primera imagen es fundamental para recoger el feedback de los usuarios Galaxy Nexus y detectar fallos, problemas o ajustes a realizar cara al Nexus 4 lanzamiento, en 2014, de un smartphone con Ubuntu Phone Os Nexus 7 instalado de fábrica. © 2013 - www.spanishdeveloperscommunity.es

23


Artículo de portada

Firefox OS

Firefox OS4 (nombre clave: Boot to Gecko o B2G)5 es un sistema operativo móvil, basado en HTML5 con núcleo Linux, de código abierto, para smartphones y tabletas. Es desarrollado por Mozilla Corporation bajo el apoyo de otras empresas como Telefónica6 y una gran comunidad de voluntarios de todo el mundo. Este sistema operativo está enfocado especialmente en los dispositivos móviles incluidos los de gama baja. Está diseñado para permitir a las aplicaciones HTML5 comunicarse directamente con el hardware del dispositivo usando JavaScript y open web APIs. Ha sido mostrado en smartphones y Raspberry Pi, compatibles con Android.

Historia de este sistema operativo

Los antecedentes del Firefox OS estaban relacionado con el futuro de los móviles mediante conceptos. En el 2010, Billy May, de Mozilla Labs, publicó un video acerca del móvil del futuro llamado SeaBird inspirada en Android. Lamentablemente, la fundación no tenía planes para distribuirla pese a sus buenas críticas de la comunidad. El proyecto se inició en el 2011 bajo la dirección del experto de seguridad Andreas Gal. El plan era revolucionar el modelo enfocado en plataformas abiertas de bajos recursos económicos. Según el blog especializado en tecnología ALT 1040 decía que cuando los desarrolladores crearon la biblioteca pdf.js, que visualizaba documentos PDF mediante HTML5, quisieron hacer de manera similar a los sistemas operativos tradicionales.

24

En julio de 2012 se reemplazo el nombre a Firefox OS.16 El 21 de octubre del mismo año Mozilla estrena el Firefox Marketplace, una tienda on line de aplicaciones para Firefox OS, cuyo lanzamiento está proyectado para 2013. En septiembre de 2012, los analistas de Strategy Analytics pronosticaron que el Firefox OS representaría el 1% del mercado mundial de smartphones en 2013, su primer año de disponibilidad comercial. En febrero de 2013 Mozilla anunció planes para el lanzamiento mundial de Firefox OS. Mozilla ha comunicado en rueda de prensa antes del inicio del Mobile World Congress en Barcelona, que la primera ola de dispositivos con Firefox OS estará disponible Brasil, Colombia, Hungría, México, Montenegro, Polonia, Serbia, España y Venezuela. Firefox también ha anunciado que LG Electronics, ZTE, Huawei y TCL Corporation se han comprometido a la fabricación de dispositivos con Firefox OS..

Arquitectura de Firefox OS

La arquitectura de FirefoxOS tiene tres componentes muy importantes: Gonk: Es el "sistema operativo" de bajo nivel de B2G. A grandes rasgos, consiste en un kernel Linux y una capa de abstracción de hardware.

© 2013 - www.spanishdeveloperscommunity.es


Gecko: Es el entorno de ejecución. En Gecko están implementados los estándares de HTML, CSS y JavaScript y permite que esas interfaces se ejecuten correctamente en los distintos sistemas operativos. Esto significa que Gecko consiste en una serie de pilas de gráficos, un motor de dibujado y una máquina virtual para JavaScript, entre otras cosas. Gaia: Es la interfaz gráfica del sistema operativo. Todo lo que aparece en la pantalla desde que B2G se inicia, es parte de Gaia. Es decir, las aplicaciones tales como la pantalla de bloqueo, el marcador telefónico, la aplicación de mensajes de texto, etc, son parte de Gaia. Esta interfaz gráfica está escrita enteramente en HTML, CSS y JavaScript.

Firefox llega a los móviles para hacer frente tanto a Android como a iOS. El mundo de los sistemas operativos móvil está monopolizado por Android (Google) e iOS (Apple). En escena aparece ahora Firefox OS, de la Fundación Mozilla, responsable del navegador Firefox y del cliente de correo electrónico Thunderbird. Cuenta ya con el apoyo de fabricantes y diferentes operadoras de telecomunicaciones. El interés de las operadoras para apoyar a Firefox OS es precisamente intentar contrarrestar el poder de empresas como Google y Apple. Desde Consumer repasan las principales características de Firefox OS: Incluye por defecto una versión móvil del navegador FirefoxCon Firefox OS, estos operadores quieren conseguir que usuarios y desarrolladores utilicen un sistema más libre, fuera de los ecosistemas de tiendas de aplicaciones de sus principales rivales. Para ello, Firefox OS tendrá su propia tienda de aplicaciones web, denominada Firefox Marketplace, donde los cobros por la compra de apps estarán asociados a la factura mensual de la operadora contratada por la persona.

Características técnicas

sentido, una de las ventajas para los desarrolladores es que Firefox OS se basa en estándares web, como HTML5 y Javascript, que se ejecutan de forma nativa en el núcleo del sistema. Así, el sistema permite crear aplicaciones multiplataforma de manera más sencilla y rápida, frente al desarrollo de apps para cada uno de los diferentes sistemas operativos móviles existentes. De hecho, los operadores y los desarrolladores saben que disponer de apps de alta demanda por parte de los usuarios, como WhatsApp y similares, son una de las claves para su éxito o fracaso de sus modelos en ciertos mercados con alta demanda comunicativa.

¿En qué teléfonos podemos encontrar ya Firefox OS?. La empresa española Geeksphone fue la primera en tener un modelo basado en Firefox OS. Ocurrió en el mes de abril. Sin embargo, estos móviles están orientados a desarrolladores que necesiten de un terminal donde hacer pruebas para la mejora de sus aplicaciones. Esta empresa apuesta, además, por otro modelo destinado a usuarios finales, llamado Peak. Este teléfono tendrá un coste de 149 euros y contará con una pantalla IPS de 4,3 pulgadas, un procesador de doble núcleo Qualcomm 8225 chipset a 1,2 gigahercios, un gigabyte de memoria RAM, una cámara de fotos trasera de 8 megapíxeles con flash y otra delantera con dos megapíxeles. El teléfono ZTE Open es el primero que se comercializa para los usuarios finales. Entre sus características de hardware destaca por tener una pantalla de 3,5 pulgadas con resolución 320 x 480 píxeles, un procesador de un gigahercio y una cámara de fotos de 3,2 megapíxeles. Cuenta con una memoria interna de 100 megabytes e incorpora una tarjeta microSD de 4 gigabytes, aunque puede ampliarse hasta 32 gigabytes. La batería es de 1200 mAh que, según el fabricante, permite un tiempo de conversación de hasta cuatro horas.

En el apartado de conectividad, presenta conexión wifi 802.11 b/n/g y redes GSM de cuatro bandas. Telefónica, a través de su Los usuarios cuentan con un entorno gráfico sencillo de utilizar y filial Movistar, comercializa este teléfono en España a un precio rápido de ejecución, debido a que este sistema operativo no de 69 euros. En el paquete se incluye el terminal, una tarjeta necesita grandes requerimientos de hardware. Incluye por SIM, una tarifa de datos activada y 30 euros de saldo. defecto una versión móvil del navegador Firefox. A nivel técnico, el núcleo de este sistema operativo está basado en Otro móvil basado en Firefox Os que estará disponible en código abierto del sistema operativo Linux, al igual que en algunos mercados en breve es Alcatel One Touch Fire. Este Android. Sobre este núcleo, existe un programa denominado teléfono presenta una pantalla de 3,5 pulgadas con resolución de Gecko, encargado de interpretar los lenguajes HTML5 y 480 x 320, un procesador Qualcomm Snapdragon de un Javascript. El entorno gráfico está controlado por la capa interfaz gigahercio, 256 megabytes de memoria RAM y 512 megabytes Gaia, que también se ocupa de las aplicaciones básicas como las de almacenamiento.También posee cámara de 3,2 megapíxeles y funciones de teléfono, SMS y la cámara de fotos. En este conectividad wifi. © 2013 - www.spanishdeveloperscommunity.es

25


¿En qué entorno se pueden realizar aplicaciones para Firefox OS?

La estructura interna de una aplicación para Firefox OS se parece mucho a la de cualquier proyecto web, acompañada de un manifest que servirá de índice para que el sistema sepa qué debe Como bien sabéis, por lo general, desarrollar para un sistema coger de cada directorio. operativo requiere que uses diferentes IDEs y frameworks. Lo mejor en este caso es que el desarrollo para la plataforma Firefox OS Mobile requiere exactamente lo mismo que requeriría cualquier desarrollo web, por lo tanto, tanto si estáis acostumbrados a usar Eclipse, como Sublime Text, como Dreamweaver, como el bloc de notas, podéis seguir haciéndolo. Lo que sí vais a necesitar es un simulador para hacer las pruebas, y aquí es donde entra r2d2b2g, el prototipo que hay a día de hoy para simular el entorno Firefox OS. Hace tiempo, os traje un tutorial de cómo instalarlo, aunque a día de hoy, resulta más sencillo hacerlo de la siguiente manera: Instalamos Firefox Aurora, que es la versión de Firefox para desarrolladores. Digo Firefox Aurora y no Firefox o Firefox Nighty por la simple razón que en Aurora están implementadas todas las novedades día tras día (sí, se actualiza cada día), por lo que siempre tendremos un entorno de desarrollo con las últimas versiones de APIs disponibles.

Para agilizar las cosas, os he subido a mi cuenta de GitHub una plantilla base, que nos servirá de ejemplo a lo largo de todo el tutorial, además de poder usarse como inicio en vuestros futuros proyectos. El enlace es el siguiente:

Instalamos el simulador (versiones Mac, Windows y Linux) https://github.com/PabloYglesias/Firefox­OS­Boilerplate­App­ desde la web de Mozilla. Normalmente, tendremos que instalarlo Template cada vez que lo queramos usar, ya que al actualizarse Aurora, se Para probar la aplicación, bastaría con pinchar en Add Directory suele perder la extensión. desde la página de gestión del simulador, elegir el archivo mainfest.webapp, y darle a continuar, lo que nos abrirá el simulador, y recorriendo el menú, encontraremos nuestra app (Firefox OS Boilerplate). La aplicación es un compendio de llamadas a funciones propias del SO (mandar SMS, cámara, localización, ir a agenda,…). En la siguiente entrada, que tendrá de hashtag #FirefoxOSDeveloper, conoceremos los tipos de certificación del Para abrirlo, basta con ir a Herramientas > Desarrollador web > Firefox OS Simulator, que nos abrirá una ventana del navegador Market, así como una iniciación a los packages. donde podremos instalar las aplicaciones y ejecutar el simulador.

Desarrollando para Firefox OS. Primeros pasos

Tanto el diseño como la implementación vienen dadas por entornos web, por lo que un framework del tipo de Cordova­ PhoneGrap es suficiente. Puesto que el uso de estas aplicaciones está destinado tanto para dispositivos móviles como de escritorio, Mozilla recomienda tener muy en cuenta dónde colocar la barra de navegación (los menús), siendo recomendable el margen superior para dispositivos de pantalla grande o móviles en forma horizontal, y el margen inferior, con slide para la posición vertical.

26

© 2013 - www.spanishdeveloperscommunity.es


Respecto a la implementación, en Firefox OS tienes acceso a todas las prestaciones de HTML5 y CSS3, incluso las pendientes de estandarización. Respecto a JavaScript, es interesante recordar que Mozilla tiene un gran repertorio de APIS en este lenguaje que se nutren de HTML5 y controlan diferentes aspectos de los dispositivos, como la batería, la administración del almacenamiento,…

quizás estén en una carpeta que se desprende del directorio raiz llamada css, enlaces internos a código JavaScript (o Ajax, o jQuery,…), contenidos a su vez en otra carpeta js, e imágenes, que pueden estar en una carpeta images.

Archivos de una aplicación para Firefox OS

Aplicaciones certificadas (Certified App): Son aplicaciones destinadas a tener acceso a funciones críticas del teléfono, como la configuración del mismo. Este tipo de certificación es por tanto solo accesible si la firma el fabricante y la compañía, y a efectos prácticos, son iguales a las aplicaciones privilegiadas con la salvedad que en éstas el permiso a APIs críticas está aceptado implícitamente (sin necesidad de preguntar al usuario).

La estructura que acabo de detallar, se convierte en package para Firefox OS Mobile cuando incluimos al menos un archivo manifest, en este caso, manifest.webapp, y todo ello lo Puesto que hablamos de aplicaciones web, es entendible que el comprimimos en un archivo .zip. primer paso sea subirlas a un hosting (GiHub, dropbox, google drive,…) y desde ahí enlazarla a tu cuenta de desarrollador, El porqué de los packages y la certificación de los markets donde quedará pendiente de revisión. Instalar en un SO un archivo es más sencillo que pasarle listas Siendo un proyecto de Mozilla, estaba claro que no restringirían enormes de archivos y que tenga que ir uno a uno compilándolos su uso únicamente al Marketplace, y es que en Firefox OS se o interpretándolos. Además, un paquete permite certificar una puede instalar desde cualquier página web, gracias a aplicación de forma mucho más sencilla por parte de las stores, de tal forma que para el sistema operativo, resulta muy sencillo navigator.mozApps.* una API de JavaScript. saber tan pronto accede a un paquete si éste está certificado Lo mejor viene con la posibilidad de probar betas de (cuenta con el visto bueno) del market, o por el contrario no (y aplicaciones gracias a Aurora, que se integra como anillo al dedo por tanto, no ha pasado los criterios de seguridad y privacidad al propio navegador (genial para probar en Android cómo predefinidos para instalarse). Como estaréis pensando, esta funciona Firefox OS, o tener un entorno de este SO en tu certificación no es más que una private key que se embebe en el ordenador de casa). Después de dedicarle un rato, la principal código del zip, sirviendo además como categorizador de desventaja son las pocas aplicaciones que tiene, cosa entendible aplicaciones en Firefox OS Mobile, atendiendo al nivel de acceso interno que requiere la aplicación: ya que aún no ha salido al mercado.

Para el desarrollo de una app, y su correcta interpretación por parte del SO de turno, es necesario fijar una estructura de carpetas y ficheros que facilite por un lado la labor de los desarrolladores y diseñadores de cara a futuras implementaciones, y por otro la estandarización de la distribución interna de las aplicaciones para markets e Aplicaciones privilegiadas (Privilieged App): Una aplicación con instaladores por defecto contemplados en el sistema. privilegios o privilegiada es aquella que tiene acceso a APIs Por tanto, una aplicación, como la mayoría de proyectos de internas del SO de forma explícita. El mejor ejemplo son las desarrollo, parte de un esquema al cual llamamos paquete aplicaciones nativas de iOS y Android, donde antes de instalarlas, tienes que aceptar tú mismo que permites que dicha (package). aplicación acceda a diferentes servicios de tu terminal. Para Dependiendo del sistema operativo (o el tipo de proyecto) sobre publicarla en la tienda, tiene que ser aprobada por ellos después el que estamos trabajando, cada package contendrá un número de un análisis exhaustivo del código. mínimo de archivos y/o carpetas, con una denominación más o Aplicaciones regulares (Plain Package App): Se trata de menos obligatoria. aplicaciones que no necesitan acceder a ninguna API interna Si alguna vez habéis programado webs, seguramente estéis (como por ejemplo una webapp básica). Por tanto, no piden usando una estructura semejante a la contenida en paquetes, que permisos, y no tienen derecho a ellos. por lo general parte de la necesidad de una página inicial llamada index (index.html, index.php,…) que será la encargada de Instalación de paquetes en el terminal mostrarse tan pronto se acceda a la dirección. Dicha página, contiene a su vez enlaces internos a la hoja o hojas de estilo, que Hay dos maneras de publicar una aplicación. O bien hosteadas © 2013 - www.spanishdeveloperscommunity.es

27


en el servidor del market, o bien en un espacio propio.

con todas o la mayoría de las prestaciones que ella nos proporciona. Todos los datos son guardados en el caché del En el primer caso, el zip subido genera en el market un manifest terminal, y tiene una estructura tal que así: propio llamado mini­manifest, que estará basado en el manifiesto que hemos incluido dentro del zip, y será éste el que se envía al CACHE MANIFEST API installPackage() cuando queremos instalar la aplicación en el terminal. Una vez instalada, se usará el manifest # Version 0.6799999 implementado por el desarrollador. En las aplicaciones alojadas en servidores propios, este paso lo tendrá que llevar a cabo el desarrollador, mediante un archivo externo al .zip llamado package.manifest que hará las veces de “mini­manifest” y tendrá una estructura semejante a la siguiente:

index.html css/base.css js/base.js js/webapp.js js/offline.js

{ "name": "My App", "package_path": "http:///package.zip", "version": "1.0" }

NETWORK: * FALLBACK: / fallback.html

Y un archivo de instalacción install.html cuyo algoritmo sería El archivo manifest.appcache cuenta con tres apartados: algo así: <html> <body> <p>Packaged app installation page</p> <script> // This URL must be a full url. var manifestUrl = 'http://<server-ip>/package.manifest'; var req = navigator.mozApps.installPackage(manifestUrl); req.onsuccess = function() { alert(this.result.origin); }; req.onerror = function() { alert(this.error.name); }; </script> </body>

CACHE: Esta es la sección predeterminada para las entradas. Los archivos incluidos en esta sección (o inmediatamente después de CACHE MANIFEST) se almacenarán en caché explícitamente después de descargarse por primera vez. NETWORK: Los archivos incluidos en esta sección son recursos permitidos que requieren conexión al servidor. En todas las solicitudes enviadas a estos recursos se omite la caché, incluso si el usuario está trabajando sin conexión. Se pueden utilizar caracteres comodín. FALLBACK: Se trata de una sección opcional en la que se especifican páginas alternativas en caso de no poder acceder a un recurso. En la demo, cargaría el archivo fallback.html cuando no tenga acceso de red.

Readme.md (o readme.markdown): es un fichero que sirve de descripción para proyectos abiertos en repositorios como Otros archivos a tener en cuenta GitHub. No es necesario por tanto, aunque su uso se ha extendido y suele contemplarse como buenas prácticas en Hemos hablado de manifest.webapp y del package.manifest, proyectos genéricos. pero si habéis descargado el Firefox OS Boilerplate App Template de mi cuenta de Github, observaréis que existen dos Diseño de aplicaciones e instalación ficheros más que acompañan al resto del paquete: </html>

Hablaremos de varias características nuevas relacionadas con el manifest.appcache: se trata de un manifiesto contemplado en diseño front end que recomiendan seguir, así como un ejemplo HTML5 para mostrar la aplicación (o la web) sin conexión. En real de subida de una aplicación. él, definimos qué archivos deben cargarse en local, de forma que cuando no tengamos conexión, podamos acceder a la aplicación En la versión disponible de Firefox OS simulator se han

28

© 2013 - www.spanishdeveloperscommunity.es


solucionado algunos problemas que daba la anterior, así como incluido alguna que otra característica que se echaba de menos, y que ya veníamos usando en otros entornos de desarrollo como Android e iOS: Push to Device: Si contamos con un terminal Firefox, bastaría con conectarlo al ordenador y abrir el complemento del navegador para cargar las aplicaciones que estemos probando. Recordar que como en el resto de casos semejantes en otras plataformas, es necesario tener activo el modo depuración del terminal, llendo en este caso a Settings>Device information>More Information>Developer>Remote debugging.

pone a nuestra disposición desde la cuenta de GitHub del proyecto Gaia (recordemos que Gaia es la capa de interfaz del sistema) toda la parte visual del sistema, que está dividida en dos carpetas: style para los estilos que están terminados y style_unestable con todo el CSS que puede sufrir cambios. Los CSS están listos para ser usados, y se recomienda exportarlos según su necesidad, como ya viene siendo habitual en proyectos web: @import url(resources/action_menu.css); /* menús de acciones */ @import url(resources/buttons.css); /* botones */

Simulador de rotación: Tendremos un botón inferior para @import url(resources/confirm.css); /* panel de cambiar la rotación de la pantalla, que si bien he visto, por ahora confirmación */ @import url(resources/headers.css); /* cabeceras */ no he conseguido que funcionase. @import url(resources/status.css); /* panel de alerta

Simulación de API de geolocalización básica: Otro de los de estado */ botones inferiores nuevos, que es de agradecer para el testeo de apps de geolocalización. Podremos configurar la geolocalización en nuestro punto, o emular posiciones distintas.

@import url(resources/switc hes.css);

/*

interruptores, radio y checkbox */

Su uso es semejante al del resto de frameworks front­end. Basta dedicarle un tiempo a cacharrear con las hojas de estilo, e Validación del implementar mediante Manifest: La pantalla classes los diferentes de carga del simulador botones, títulos y otros servirá así mismo elementos comunes en como validador de las aplicaciones. Decir archivos, y junto con de paso que por el simulador, se defecto, el sistema entiende la mayoría de etiquetas con un estilo cargará una consola de errores que viene genial, y se echaba de propio amigable, por lo que una consulta del tipo button menos. type=date, devolverá por pantalla una suerte de rueda táctil con Correcciones de estabilidad para la instalación y actualización de el día por defecto (el de hoy), y con la posibilidad de subir o aplicaciones: Añadir únicamente que con CTRL+R podremos bajar para cambiarlo). actualizar una aplicación directamente (sin tener que parar el Habíamos visto que Firefox OS contempla varias maneras de simulador, darle update al manifest y volver a activar). instalar aplicaciones. Una de ellas es directamente desde el Nuevas versiones del motor de renderizado de Firefox y Gaia: El market, mientras que existe la posibilidad de mantener tu aplicación en un dominio propio, y que el market te redirecione a simulador ha ganado en estabilidad y velocidad. él para descargártela (muy útil para no tener que pasar por el market para rentabilizar una app), o directamente buscarte tú las Elementos de la interfaz mañas para atraer tráfico a la aplicación sin el market. Mozilla apuesta fuertemente por el responsive design, y una estructura en capas de la interfaz de cada aplicación. Para ello, © 2013 - www.spanishdeveloperscommunity.es

29


Programación RoR

Ruby on Rails. Entendiendo las URL

Básicamente, y sin liarnos mucho, decir que el comienzo del trabajo lo realiza el Servidor Web (WebRick, Mongrel …) enrutando las solicitudes entrantes a un script Ruby perteneciente al marco de trabajo Rails llamado “dispatcher” (algo así como despachador ???). La función de este despachador es la de analizar el URL que recibe para invocar la acción adecuada dentro del controlador adecuado. A su vez esta acción puede, entre otras cosas, invocar a un modelo y/o a una vista.

hablar: es una acción o un método de este controlador. Puede incluir una tercera parte en la cual serán enviados los distintos parámetros o valores a procesar dentro de las acciones. Por ejemplo: http://localhost/acciones/diEsto/Hola_Mundo

Como ya vimos en un POST anterior, la primera parte de la URL identifica un equipo y la segunda identifica un recurso Web. En Action Pack (recordad que es el marco de trabajo que utiliza Rails para administrar los controladores), el recurso tiene al menos dos partes: Un controlador y una accción. Retomando un ejemplo anterior: http://localhost/acciones/hablar localhost: Es el equipo acciones: es el controlador

30

© 2013 - www.spanishdeveloperscommunity.es


recibido pertenece a la posición “id” del array params[] (todo irá cobrando su sentido mas adelante), de modo que, como vemos en el ejemplo, la forma de acceder al contenido de esa posición del array params es por medio de params[:id]. Vale vamos a probarlo. Lanzad vuestro servidor Web abriendo la consola de comandos (Simbolo del Sistema del Windows o Termina de MacOs X) y escribiendo: >ruby script/sever Una vez puesto en marcha nuestro servidor, abrid vuestro navegador favorito y comprobad el resultado de la URL: http://localhost:3000/acciones/diEsto/ El resultado debe de ser algo parecido, (mas bien igual) al que se “Hola_Mundo” es el parámetro enviado a la accion “diEsto” del muestra en la imagen de arriba. En este caso, no le hemos controlador acciones. pasado ningún parámetro a la accion “diEsto” del controlador “acciones” , de modo que nos muestra el mensaje indicado para Como en toda aplicación Web, los distintos parámetros pueden los casos en los que el parámetro id no ha sido enviado. ser enviados mediante uno de esto dos métodos: GET o POST. A rails no hace falta especificarle porque método le están siendo Probad ahora con esta otra URL: enviados los parámetros. Éstos, independientemente de si proceden de un formulario con el método POST o forman parte http://localhost:3000/acciones/diEsto/Hola Mundo de un enlace Web (GET), son almacenados en un array de tipo Hash llamado params. El resultado de enviarle como valor del parámetro “id” el string “Hola Mundo” es mostrarnos en pantalla el valor del parámetro Pero el mejor modo de ver todo esto es poniéndolo en práctica. enviado. Volvamos a nuestro archivo acciones_controller.rb para añadirle una acción mas a nuestro controlador “acciones”. Recordad que se encuentra en app > controllers dentro del árbol de directorio de nuestra aplicación test. ¿Que hemos hecho?. Bueno, hemos añadido una nueva acción a nuestro controlador, llamada diEsto. ¿Que hace esta acción?. Comprobar la existencia del parámetro id para mostrarlo en pantalla o, en su defecto, la frase “Me he quedado sin palabras !!”. En Rails, se considera que el valor del primer parámetro © 2013 - www.spanishdeveloperscommunity.es

31


Redes sociales

Cómo medir tu influencia en las RRSS: Kloud Ángela Escobar www.aticaweb.com

/aticaweb @aticaweb

Una de las herramientas más populares que se utiliza para medir nuestro nivel de influencia en las Redes Sociales es Klout. Ese bocadillo naranja con la puntuación en blanco que nos encontramos en Twitter al lado del nombre de usuario. Para empezar a utilizar esta herramienta, en primer lugar debemos de crearnos un perfil en su página oficial: www.klout.com. Este perfil se puede crear a partir de nuestra cuenta de Twitter o Facebook, o a partir de un correo electrónico. La parte “buena” de crear el perfil con la cuenta de Twitter o Facebook es que ya quedarían conectadas con nuestro perfil de Klout.

para asignar un único “Klout Score”, el cual tiene un rango de 1 a 100. “Klout Score” se forma a partir de la iteración y participación en las cuentas de Twitter, Facebook, Google +, LinkedIn, Foursquare, Wikipedia e Instagram que hayamos asignado a nuestro perfil. Uno de los pocos usuarios que ha llegado hasta ese 100 ha sido Justin Bieber, si hablamos de política Obama ha llegado hasta un 99 y si nos vamos al ámbito español, uno de los políticos con mayor klout es Jose Antonio Rodriguez el alcalde twittero de Jun (Granada), cuya influencia medida por esta herramienta esta sobre un 80.

Antes de seguir explicando cómo conectar todas nuestras cuentas Para conectar las cuentas de las redes sociales con nuestro perfil de las redes sociales vamos a ver que redes sociales utiliza Klout de Klout, lo único que tenemos que hacer es entrar a la opción de

32

© 2013 - www.spanishdeveloperscommunity.es


edición de perfil y una vez allí seleccionar las cuentas, darle (amplification) así la información compartida y pudiendo permiso a Klout para que pueda acceder a ellas y listo. incrementar nuestra red (network) de seguidores. Cómo veis tocamos las tres categorías que Klout utiliza para su A partir de la entrada de Klout en nuestras diferentes Redes puntuación, por tanto nuestro Klout Score se ve influenciado de Sociales este empieza a clasificar nuestra información en tres manera muy positiva. categorías para formar el “Klout Score”, dichas categorías son las siguientes: Una cosa que si quiero dejar clara es que no hay que obsesionarse con esta herramienta, simplemente mide la ­ Reach (Alcance): Es el número de personas a las que llegamos influencia según unos indicadores, ahora mismo es la con la información publicada en las redes sociales conectadas. herramienta más utilizada, pero quién sabe si mañana puede En este apartado entrarían nuestros seguidores, amigos, grupos… aparecer otra, que utilice otro método de puntuación y la persona con klout más bajo puede que sea más influyente que otra con un klout medio. Por último he de decir que es muy difícil subir nuestra puntuación cuando tenemos un “Klout Score” de unos 35­40 y de ahí hacía arriba, pero es muy fácil que este pegue una bajada importante si estamos solamente un par de días sin actividad por nuestras redes.

­ Amplification (Amplificación): Se encarga de ver con que velocidad y por cuantos usuarios es compartida nuestra información, además tiene en cuenta la influencia que tiene el usuario que ha compartido, mientras más alta su influencia mayor repercusión de la información compartida. ­ Network (Red): También Klout analiza tanto nuestros seguidores o amigos como nuestros seguidos, para medir así su influencia. Una forma de que nuestro Klout ascienda, es que personas con un mayor Klout que nosotros y más influyentes responda a alguno de nuestros tweet o haga un retweet o comparta algo nuestro en sus tablones. ¿Por qué sucede este incremento? Muy fácil, el alcance (reach) al que llegamos es mayor, amplificando © 2013 - www.spanishdeveloperscommunity.es

33


Aplicaciones móviles

Errores en el desarrollo de app: cuáles son y como evitarlos María Ripoll www.yeeply.com

/marieta_mrm @marieta_rm

WhatsApp, Angry Birds, Apalabrados, Instagram… ¿Qué tienen en común

usuarios finales o que éstos la rechacen por no cumplir sus expectativas.

exitosas del mercado. Pero, ¿qué tienen en común? Aparentemente nada:

que aspiren a alcanzar el éxito.

todas esas aplicaciones? Sin lugar a dudas, que son algunas las apps más WhatsApp es un servicio de mensajería instantánea gratuito, que nos permite

Identificar estos errores y saber evitarlos es fundamental para desarrollar apps

estar en contacto con nuestros amigos y conocidos; Angry Birds y Apalabrados

Una app no es una web móvil

nueva vuelta de tuerca al concepto de red social, revolucionando la manera de

En ocasiones, muchas empresas caen en el error de convertir las aplicaciones

son dos juegos tan diferentes entre sí como adictivos; e Instagram ha dado una compartir fotografías con el resto del mundo.

No se sabe exactamente dónde reside la clave para desarrollar una aplicación móvil exitosa. Algunos dicen que todo se basa en una buena idea, que cubra un nicho de mercado todavía por explotar o que aporte un nuevo enfoque a lo que

ya se conoce. Otros aseguran que todo depende de conocer bien a los usuarios y de saber medir sus reacciones para ofrecerles lo que piden. Los más pesimistas

señalan que es la suerte el único factor realmente influyente para encumbrar o hundir a una aplicación móvil. Lo que está claro es que sin un buen desarrollo es complicado que una app triunfe en el mercado.

Recientemente, desde la empresa de desarrollo española InQBarna han señalado una serie de errores que suelen cometerse en el desarrollo de apps. Estos errores provocan que la aplicación no llegue adecuadamente a los

34

móviles en un calco de sus páginas web. Esto es un tremendo error; una app móvil con tanta información como una página web será demasiado pesada y su funcionamiento se ralentizará. Además, las pantallas de los dispositivos móviles no son tan cómodas como las de un ordenador, por lo que la

visualización de la app será más complicada. Para evitar este error, el desarrollador debe tener claro cómo quiere la empresa llegar al cliente, para mostrar a través de la app tan sólo el contenido indispensable de la compañía. Registro obligatorio En contra de lo que se pueda pensar, el registro obligatorio en una app puede

destruir cualquier intento de fidelización de consumidores. Hay muchas

aplicaciones que obligan al usuario a registrarse sin saber qué le pueden

© 2013 - www.spanishdeveloperscommunity.es


ofrecer. Si el usuario no sabe qué puede aportarle la aplicación, no sólo no se

facilitan la lectura de grandes masas de texto. Por este motivo, conviene que

que el usuario se registre, basta mostrarle a través de la aplicación un pequeño

que explicar en pocos pasos como utilizar la aplicación, por eso es tan

registrará, sino que la desinstalará y caerá en el olvido. Si lo que se quiere es

aperitivo de su contenido e invitarle al registro para acceder a más información y más oportunidades.

los tutoriales de funcionamiento de las apps sean cortos y clarificadores. Hay importante que la interfaz de usuario sea sencilla. Si el tutorial es muy largo, el usuario se aburrirá de leer e intentará aprender el manejo de la aplicación de forma autodidacta. Si, para colmo, la interfaz del usuario es complicada, la

aplicación tiene todas las papeletas para abandonar precipitadamente el

Formularios extensos Realmente, los dispositivos móviles –sobre todo los smartphones­ no son los

dispositivo móvil en el que haya sido instalada.

elementos más cómodos a la hora de rellenar páginas y páginas de formularios

La importancia del marketing

móvil. Por este motivo, es conveniente que los formularios de registro en las

Como es evidente, no todo depende del proceso de desarrollo. Hace un año,

usuario, correo electrónico y contraseña. El resto de información

marketing de una aplicación móvil era uno de los errores en el desarrollo de

de inscripción. Al menos así lo determina Mariya Yao, experta en consultoría aplicaciones sean cortos, recogiendo la información esencial: nombre de puede

intentar recogerse, de manera opcional, a través del apartado para configurar el perfil de usuario.

Interfaz de usuario complicada Este es otro de los errores en el desarrollo de apps que recoge Mariya Yao. Generalmente, en un intento de desarrollar aplicaciones vistosas o con un diseño revolucionario, se llega a herramientas difíciles de utilizar, con gestos

con los que los usuarios no están familiarizados o menús ocultos. En este caso conviene no complicarse y adaptar la app al diseño propio de cada sistema

operativo móvil, incluyendo gestos y menús propios de la plataforma. Los usuarios ya los conocen y la aplicación se integrará perfectamente en una

Oscar Hormigos, el CEO de The App Date, explicaba que no invertir en el apps más comunes. Sin invertir en marketing, el esfuerzo empleado en el desarrollo de la aplicación se pierde, puesto que nadie llega a conocerla y se registra un número muy bajo de descargas. Para que esto no suceda, conviene

repartir la inversión de una manera equitativa entre proceso de desarrollo y estrategia de marketing. Si no se tiene muy claro los pasos a seguir en el marketing de aplicaciones móviles, siempre se puede acudir a una agencia

especializada en este tipo de mercadotecnia. Además de proporcionar las

directrices adecuadas para una correcta estrategia de comunicación y promoción, muchas de ellas también cuentan con profesionales en el desarrollo de apps. Por tanto, también pueden ayudar a la hora de probar el funcionamiento de la aplicación.

interfaz amigable.

Realmente, es difícil saber cuál es la clave que convierte a una aplicación en

Tutoriales de uso sencillos y prácticos

la hora de desarrollar una aplicación. Sabiendo qué errores pueden cometerse

Las pantallas de los dispositivos móviles, sobre todo si son muy pequeñas, no

© 2013 - www.spanishdeveloperscommunity.es

un éxito de descargas. Lo que sí conviene saber es lo que no hay que hacer a

y cómo evitarlos se estará más cerca de lograr el éxito en el mercado de las aplicaciones móviles.

35


Android

Cómo subir apps a google play

Una vez que hayamos terminado de desarrollar nuestra app lista de mercados de android cambia constantemente debido a los android y hayamos comprobado que todo funciona como planes de expansión de android a nivel global. esperamos y está libre de errores, es el momento de compartirla a Es importante que tomes en cuenta que la cuenta del mercado de través del mercado global que supone google play. Google Play esta ligada directamente a tu cuenta de Google. Así El primer paso es registrarse como desarrollador. Este proceso es que analiza si utilizas tu cuenta personal o una nueva cuenta solo relativamente fácil ya que Google hace cada día más accesible e para eso. intuitiva la forma de publicar aplicaciones en su tienda de Google Play: http://gdroid.com.mx/blog/2012/12/04/como­ Adicionalmente a la cuenta de desarrollador de android, tú también deberías registrarte por una cuenta de Google en registrarse­como­desarrollador­en­google­ Checkout Merchant si deseas que tus aplicaciones sean vendidas. play/#sthash.gR2JhWWq.dpuf. Esta opción estará disponible durante el proceso de registro de tu Todo lo que tienes que hacer es registrar una cuenta como cuanta como desarrollador android. desarrollador android y hacer un pago de 25 USD o dólares. Este pago solo se hace una vez. Esta forma de pago e inscripción es Recuerda que debes de leer los advertencia y acuerdos legales posible en los países en los cuales Google puede instalar sus que se presentan al crear tu cuenta de android, ya que esto puede productos (recuerda que por ejemplo en china existen ciertas traer implicaciones al vender aplicaciones como lo son el limitaciones), al crear esta cuenta te permitirá poder poner tus requerimiento de pagar impuestos al gobierno de tu país debido a las ventas de tu aplicación android, sobre todo cuando tienes aplicaciones en Google Play. muchas ventas de ella. Tú podrás poner aplicaciones gratuitas o aplicaciones de paga o de las dos, esto dependerá del país en donde vivas. No todo es miel ya que por cada aplicación que vendas Google Especialmente para las aplicaciones de paga, tú debes de vivir en tomara un porcentaje de lo que vendas entre el 20 o 30 % (va alguno de los países que son soportados por Google para poder cambiando conforme pasa el tiempo), esto por cargos de ofrecer aplicaciones de paga. Google también tiene una lista de distribución de tu aplicación y cargos por uso de infraestructura países en los cuales tú puedes distribuir tus aplicaciones de en Google. forma gratuita y países en donde puedes distribuir la aplicación con cargo o aplicación de paga en android. Por supuesto esta Una vez que te hayas registrado, podrás subir fácilmente tus

36

© 2013 - www.spanishdeveloperscommunity.es


aplicaciones a Google Play. En la pantalla principal de la consola de Google Play para desarrolladores, selecciona Añadir nueva aplicación. Tendrás que rellenar la información de tu aplicación que se indica a continuación: Subir recursos Archivo APK: el tamaño máximo admitido de un único archivo APK es 50 MB. Puedes utilizar archivos de expansión para subir recursos adicionales como, por ejemplo, gráficos. Si un único archivo APK no es suficiente para todos los dispositivos que quieres, puedes subir varios archivos APK en la misma entrada de aplicación para que cada uno se encargue de la configuración de un dispositivo diferente. Ten en cuenta que los nombres de paquetes de los archivos de aplicaciones son únicos y permanentes, por lo que debes elegirlos con cuidado. Los nombres de paquetes no se pueden eliminar ni reutilizar en el futuro. Ten en cuenta que si has perdido tu almacén de claves, tendrás que publicar la aplicación con un nuevo nombre de paquete y una nueva clave. También debes actualizar la descripción de la aplicación original y eliminar su publicación. Borrador de archivo APK de aplicación: al subir un archivo APK, este se puede guardar como un borrador mientras editas el resto de aspectos de la lista. Verás un botón para guardar el borrador en el cuadro de diálogo después de subir el archivo APK. Si quieres añadir una nueva versión del archivo APK, pero no quieres publicarla, accede de forma inmediata a Google Play, cambia al modo avanzado y guarda tu nuevo archivo APK como borrador. Capturas de pantalla: son obligatorias dos capturas de pantalla y se pueden utilizar otras seis de forma opcional. Consulta el artículo sobre gráficos para obtener más información sobre las capturas de pantalla y los iconos. © 2013 - www.spanishdeveloperscommunity.es

Especificación de detalles Idioma: sirve para indicar el idioma de tu aplicación. El idioma predeterminado es el inglés de EE.UU. La lista de idiomas irá aumentando a medida que los dispositivos con la tecnología de Android estén disponibles en más idiomas. Asimismo, puedes incluir traducciones del nombre y de la descripción de la aplicación para promocionarla para usuarios que hablen otros idiomas. Las traducciones se mostrarán en Google Play. Nombre: es el nombre de tu aplicación tal como te gustaría que apareciera en Google Play. Puedes añadir un nombre por idioma. Descripción: es la descripción de tu aplicación que se verá en Google Play. Utiliza la función de traducción para traducir la descripción de tu aplicación a otros idiomas. En este campo, puedes utilizar un máximo de 4.000 caracteres. Cambios recientes: la función de cambios recientes te ofrece la oportunidad de añadir notas sobre los cambios específicos de la versión más reciente de tu aplicación. Utiliza el campo de cambios recientes para informar a tus usuarios sobre los cambios que has hecho en la aplicación. Más información sobre la función de cambios recientes. Texto promocional: es el texto situado junto al gráfico promocional en lugares destacados de Google Play. Tipo de aplicación: Google Play se divide en dos tipos principales de aplicaciones: Aplicaciones y Juegos. Elige uno. Categoría: debes elegir una categoría para la aplicación. Consulta más información sobre las categorías. Nota: el uso de palabras clave repetitivas o irrelevantes en la descripción promocional, en la descripción o en el nombre de la aplicación ofrece al usuario una experiencia negativa y puede dar lugar a la suspensión de la aplicación. Consulta las directrices completas en la página de ayuda de la Política para aplicaciones.

37


siempre una mejor opción. En el caso de idiomas en los que la traducción no la haya proporcionado el desarrollador, el usuario Ubicaciones: son las ubicaciones en las que puedes distribuir tus podrá ver una traducción automática de la información de la entrada en la página web de Google Play Store. Aparecerá una aplicaciones. nota sobre la traducción indicando que la traducción se ha No todas las ubicaciones de la lista actual tienen usuarios con realizado de forma automática y se mostrará una opción para volver al idioma predeterminado. Por ahora, no se admiten dispositivos con la tecnología de Android. traducciones automáticas de armenio, retorrománico, tagalo y Puedes seleccionar ubicaciones de forma individual o la opción zulú. Todas las ubicaciones actuales y futuras. Esta opción significa que se añadirán más ubicaciones de distribución a medida que Puedes añadir capturas de pantalla, gráficos de funciones, iconos las vayamos habilitando para tu aplicación. Antes de comprobar de alta resolución, URL de vídeo de YouTube y gráficos esta opción, consulta la página de cumplimiento de las leyes de promocionales localizados si quieres comercializar tu aplicación en diferentes idiomas. Crea una única entrada de Play Store para exportación. todos los idiomas. Una vez que hayas añadido gráficos y vídeos Nota: en este momento, solo puedes vender aplicaciones a en un determinado idioma, los usuarios cuyas preferencias de idioma coincidan verán la versión localizada de los recursos en usuarios que se encuentren en estas ubicaciones. la página web de Google Play Store y en el dispositivo. Información de contacto Opciones de publicación

Debes seleccionar un canal de asistencia para tu aplicación (por ejemplo, sitio web, correo electrónico o teléfono). Los usuarios de Google Play verán esta información. Puedes seleccionar varios canales de asistencia. Cómo subir aplicaciones del sistema

Podéis encontrar más información en la siguiente dirección:

https://support.google.com/googleplay/android­ developer/answer/113469?hl=es

La mayoría de los desarrolladores no necesitan subir aplicaciones del sistema, por lo que pueden ignorar esta sección. Las aplicaciones del sistema pueden venir instaladas previamente en algunos dispositivos y pueden estar publicadas o no en Play Store. Si necesitas subir una aplicación del sistema y recibes un mensaje de error al hacerlo, ponte en contacto con nosotros. Asegúrate de seleccionar la opción de problemas relacionados con la distribución y la publicación de aplicaciones. Las aplicaciones del sistema del usuario (incluidas aplicaciones precargadas) se muestran en la sección Mis aplicaciones del dispositivo del usuario en Google Play Store (en cuanto una aplicación con el mismo nombre de paquete se sube a la consola de Google Play para desarrolladores, aunque no se haya publicado la aplicación). Traducciones de las entradas de Play Store Una vez que hayas guardado un cambio realizado en tu aplicación, aparecerán las traducciones automáticas de tu entrada de Play Store. Debes recordar que una traducción humana es

38

© 2013 - www.spanishdeveloperscommunity.es


Créditos este proyecto solamente ha sido posible gracias a la colaboración

Staff

desinteresada y al firme compromiso de:

Antonio García

Ing. Técnico & freelance Gerente Ibidem Network

Angela Escobar

Dipl. Estadística e Informática Gerente Atica web

María Ripoll Periodista

Sergio Haro

Comunicador y programador

Responsable del proyecto Antonio García Prats


Tecnología

Lenguaje KV Sergio Haro /sharop @sharop

Como comentamos en el artículo pasado, Kivy cuenta con un satisfaga de una manera significativa e intuitiva y sea fácil de lenguaje de diseño que permite fácilmente integrar y diseñar adaptarse al cambio. interfaces de usuario. El aplicar la separación de intereses puede resultar en algunos Este leguaje simplifica el desarrollo de una Interfaz de usuario beneficios: permitiendo hacer una separación de la capa la lógica de la aplicación con la interfaz, esto internamente ligado a "Separation ­ Evita la duplicación de funciones of concerns principle" (principio de separación de intereses, o lo que sería que cada quien se haga cargo de lo que le toca). ­ Ayuda a tener un sistema más estable y de fácil mantenimiento. Para entrar en materia no podemos dejar de lado una breve explicación de que es el Principio de separación de intereses "separation of concerns principle": En ingeniería de software este principio se basa en que los componentes de un sistema mantenga la exclusividad de sus funciones, delegando lo menos posible a otros elementos. La separación de intereses permite una alta cohesión y bajo acoplamiento entre los elementos del sistema, lo cual permite establecer un orden y que cada parte

40

­ Cada componente se preocupa por sí mismo con una simple coercividad con otros componentes. The Art of Separation of Concerns. http://aspiringcraftsman.com/2008/01/03/art­of­separation­of­ concerns/ El lenguaje KV también llamado lenguaje kivy permite crear un © 2013 - www.spanishdeveloperscommunity.es


árbol de elementos en una forma declarativa y enlazar las propiedades de una forma natural. Kv facilita la creación de prototipos y cambios fáciles a la interfaz de usuario. La forma en que Kivy hace la carga de Kv puede ser de 2 formas, la primera se puede pasar el código mediante una cadena y la otra se le pasa mediante la ruta del archivo Kv (Como se muestra en código) Builder.load_file('ruta/a/archivo.kv') O Builder.load_string(kv_string)

¿Qué es builder? Kivy verifica si hay un archivo Kv con el mismo nombre de la aplicación en minúsculas, sin el sufijo "App" si fuera el caso de que el nombre de la aplicación terminara con el sufijo App: Ejemplo: PrimeraApp

-> primera.kv

Kv sigue dos reglas de construcción que son usadas para describir el contenido de los Widgets, Regla 1. La raíz del componente es declarada sin ninguna indentación, seguida de ":", a esta declaración kivy la llama "root rule". Regla 2. Se encarga de definir cómo será representada gráficamente cualquier instancia del widget, esta regla se le llama "class rule", la declaración es de la siguiente forma: <nombre de clase>: La documentación de Kv, recomienda que las reglas de indentación sean como las de Python por buena práctica, cuatro espacios por nivel.

dentro del contexto. 1 Para importar algo de Python es de la siguiente manera: #:import name x.y.z Es equivalente en Python: from x.y import z as name 1 Para establecer un valor global: #:set name value Es equivalente en Python a: name = value Para poder declarar un widget como como un elemento hijo, solo se declara dentro de la regla: ElementoRaiz: BoxLayout: Button: Button: Esta misma jerarquía se puede realizar desde Python de la siguiente forma: root = MyRootWidget() box = BoxLayout() box.add_widget(Button()) box.add_widget(Button()) root.add_widget(box)

Widgets predefinidos. Kivy cuenta con un módulo de widget: kivy.ux Algunos de los elementos se enlistan en el cuadro siguiente. Clase kivy.ux.label

Elemento label

Existen tres palabras reservadas de Kv:

kivy.ux.button

Button

­ app: hace referencia a la instancia de la aplicación. ­ root: hace referencia a la raíz del widget. ­ self: hace referencia al widget actual.

kivy.ux.checkbox

CheckBox

kivy.ux.image

Image

kivy.ux.textinput

TextInput

kivy.ux.gridlayout

GridLayout

Sintaxis especial

Kv tiene dos reglas de sintaxis especiales para definir valores © 2013 - www.spanishdeveloperscommunity.es

41


kivy.ux.boxlayout kivy.ux.bubble

BoxLayout

# Accion 1 def do_action1(self):

Bubble

kivy.ux.dropdown

self.imagen_c.source

=

'logo_kv.png'

DropDown

Primera aplicacion con KV

# Accion 2 def do_action2(self): self.imagen_c.source

El ejemplo siguiente despliega en la pantalla un widget que 'logo_pg.png' contiene dos botones y una imagen dentro de un boxlayout.

=

# Controlador Kivy

El ejemplo consta de dos archivos, Main.py y KvControl.kv, el class KvControlApp(App): primero contiene el controlador de Kivy y el segundo contiene el def build(self): layout de elementos de Kv. return KvControl()

Como primer punto, si el código de main.py se ejecuta sin el KvControl.kv, únicamente aparecerá una venta en negro sin if __name__ == '__main__': KvControlApp().run() mostrar los componentes. Igual que en el artículo anterior podemos ver que básicamente el código se divide en cuatro partes: Primera: es la declaración de los módulos de Kivy Segunda: KvControl, que es la clase que recibe el widget que creamos en KvControl.kv. Tercera: KvControlApp, es el que realiza la carga de KvControl.kv. Cuarta: Realiza el llamado al elemento de Kivy. Para análisis del código, nos vamos a enfocar en la segunda sección,

Main.py

class KvControl(BoxLayout): 2

'''

import kivy KvControl recibe el widget del archivo kv lang. from kivy.uix.boxlayout import BoxLayout Se agregan 2 acciones llamadas desde el archivo kv.

from kivy.app import App

'''

from kivy.properties import ObjectProperty 3 class KvControl(BoxLayout):

'''

# Instanciamos el objeto declarado en Kv. 4

imagen_c = ObjectProperty()

5

# Accion 1

Se agregan 2 acciones llamadas desde el archivo kv.

6

def do_action1(self):

7

# Instanciamos el objeto declarado en Kv.

'logo_kv.png'

KvControl recibe el widget del archivo kv lang.

imagen_c = ObjectProperty()

42

self.imagen_c.source

=

8

© 2013 - www.spanishdeveloperscommunity.es


9

# Accion 2

10

def do_action2(self):

11

self.imagen_c.source

=

'logo_pg.png'

La línea 4 del código, hace referencia a una variable declarada dentro del archivo kv llamada imagen_c, esta variable es atada con el id del objeto imagen_central, y es inicializada como un objeto de Python. Hasta este punto las ya tenemos la funcionalidad básica para poder lanzar eventos, las líneas 6 y 10 definen las acciones que se realizaran al presionar alguno de los botones, en este caso lo único que harán es que sobre escribirán la ruta de la imagen a mostrar en el objeto declarado en la línea 4.

KvControl.kv

#:kivy 1.0 2 <KvControl>: 3 imagen_c: imagen_central 4 5 BoxLayout: 6 orientation: 'vertical' 7 padding: 20

© 2013 - www.spanishdeveloperscommunity.es

8 BoxLayout: 9 orientation: 'horizontal' 10 11 text: 'Imagen 1' 12 on_press: root.do_action1() 13

Button:

Button:

14 text: 'Imagen 2' 15 on_press:root.do_action2() 16 Image: 17 id: imagen_central 18 source:'logo_kv.png'

Una vez que ejecutamos el código, muestra una pantalla similar a la siguiente.

43


Estructuras de datos

Estructura de datos Arbol Binario de Búsqueda

Un árbol es una estructura de datos, que puede definirse de forma recursiva como:

Listado 1 ­ módulo de cabecera

­ Una estructura vacía o ­ Un elemento o clave de información (nodo) más un número finito de estructuras tipo árbol, disjuntos, llamados subárboles. Si dicho número de estructuras es inferior o igual a 2, se tiene un árbol binario.

#ifndef ABB_[tip]_TYPO #define ABB_[tip]_TYPO

Es, por tanto, una estructura no secuencial. Otra definición nos da el árbol como un tipo de grafo: un árbol es un grafo acíclico, conexo y no dirigido. Es decir, es un grafo no dirigido en el que existe exactamente un camino entre todo par de nodos. Esta definición permite implementar un árbol y sus operaciones empleando las representaciones que se utilizan para los grafos. Sin embargo, en esta sección no se tratará esta implementación.

Nomeclatura sobre árboles

44

typedef struct tarbol { int clave; struct tarbol *izq,*der; } tarbol; typedef struct tarbol *a; void preorden(tarbol *a); void inorden(tarbol *a); void postorden(arbol *a); void amplitud(tarbol *a); boolean buscar(tarbol *a, int elem); void insertar(tarbol **a, int elem); void borrar(tarbol **a, int elem);

© 2013 - www.spanishdeveloperscommunity.es


­ Raíz: es aquel elemento que no tiene antecesor; ejemplo: a. ­ Rama: arista entre dos nodos. ­ Antecesor: un nodo X es es antecesor de un nodo Y si por alguna de las ramas de X se puede llegar a Y. ­ Sucesor: un nodo X es sucesor de un nodo Y si por alguna de las ramas de Y se puede llegar a X. ­ Grado de un nodo: el número de descendientes directos que tiene. Ejemplo: c tiene grado 2, d tiene grado 0, a tiene grado 2. ­ Hoja: nodo que no tiene descendientes: grado 0. Ejemplo: d ­ Nodo interno: aquel que tiene al menos un descendiente. ­ Nivel: número de ramas que hay que recorrer para llegar de la raíz a un nodo. Ejemplo: el nivel del nodo a es 1 (es un convenio), el nivel del nodo e es 3. ­ Altura: el nivel más alto del árbol. En el ejemplo de la figura 1 la altura es 3. ­ Anchura: es el mayor valor del número de nodos que hay en un nivel. En la figura, la anchura es 3.

Recorridos en árboles binarios

Se consideran dos tipos de recorrido: recorrido en profundidad y recorrido en anchura o a nivel. Puesto que los árboles no son secuenciales como las listas, hay que buscar estrategias alternativas para visitar todos los nodos. ­ Recorridos en profundidad: * Recorrido en preorden: consiste en visitar el nodo actual (visitar puede ser simplemente mostrar la clave del nodo por pantalla), y después visitar el subárbol izquierdo y una vez visitado, visitar el subárbol derecho. Es un proceso recursivo por naturaleza. Si se hace el recorrido en preorden del árbol de la figura 1 las visitas serían en el orden siguiente: a,b,d,c,e,f.

perdieran se rompe con la regla de manipular una estructura de datos inexistente. Una alternativa es utilizar una variable auxiliar, pero es innecesario aplicando este recorrido. Recorrido en amplitud: Consiste en ir visitando el árbol por niveles. Primero se visitan los nodos de nivel 1 (como mucho hay uno, la raíz), después los nodos de nivel 2, así hasta que ya no queden más. Si se hace el recorrido en amplitud del árbol de la figura una visitaría los nodos en este orden: a,b,c,d,e,f.

Árbol Binario de Búsqueda

Un árbol binario de búsqueda es aquel que es: ­ Una estructura vacía o ­ Un elemento o clave de información (nodo) más un número finito ­a lo sumo dos­ de estructuras tipo árbol, disjuntos, llamados subárboles y además cumplen lo siguiente: * Todas las claves del subárbol izquierdo al nodo son menores que la clave del nodo. * Todas las claves del subárbol derecho al nodo son mayores que la clave del nodo. * Ambos subárboles son árboles binarios de búsqueda. Un ejemplo de árbol binario de búsqueda:

Recorrido en inorden u orden central: se visita el subárbol izquierdo, el nodo actual, y después se visita el subárbol derecho. En el ejemplo de la figura 1 las visitas serían en este orden: b,d,a,e,c,f. Recorrido en postorden: se visitan primero el subárbol izquierdo, después el subárbol derecho, y por último el nodo actual. En el ejemplo de la figura 1 el recorrido quedaría así: d,b,e,f,c,a. La ventaja del recorrido en postorden es que permite borrar el árbol de forma consistente. Es decir, si visitar se traduce por borrar el nodo actual, al ejecutar este recorrido se borrará el árbol o subárbol que se pasa como parámetro. La razón para hacer esto es que no se debe borrar un nodo y después sus subárboles, porque al borrarlo se pueden perder los enlaces, y aunque no se © 2013 - www.spanishdeveloperscommunity.es

Al definir el tipo de datos que representa la clave de un nodo dentro de un árbol binario de búsqueda es necesario que en dicho tipo se pueda establecer una relación de orden. Por ejemplo, suponer que el tipo de datos de la clave es un puntero (da igual a lo que apunte). Si se codifica el árbol en Pascal no se puede establecer una relación de orden para las claves, puesto que Pascal no admite determinar si un puntero es mayor o menor que otro.

45


En el ejemplo de la figura 5 las claves son números enteros. Dada la raíz 4, las claves del subárbol izquierdo son menores que 4, y las claves del subárbol derecho son mayores que 4. Esto se cumple también para todos los subárboles. Si se hace el recorrido de este árbol en orden central se obtiene una lista de los números ordenada de menor a mayor. Cuestión: ¿Qué hay que hacer para obtener una lista de los números ordenada de mayor a menor? Una ventaja fundamental de los árboles de búsqueda es que son en general mucho más rápidos para localizar un elemento que una lista enlazada. Por tanto, son más rápidos para insertar y borrar elementos. Si el árbol está perfectamente equilibrado ­esto es, la diferencia entre el número de nodos del subárbol izquierdo y el número de nodos del subárbol derecho es a lo sumo 1, para todos los nodos­ entonces el número de comparaciones necesarias para localizar una clave es aproximadamente de logN en el peor caso. Además, el algoritmo de inserción en un árbol binario de búsqueda tiene la ventaja ­sobre los arrays ordenados, donde se emplearía búsqueda dicotómica para localizar un elemento­ de que no necesita hacer una reubicación de los elementos de la estructura para que esta siga ordenada después de la inserción. Dicho algoritmo funciona avanzando por el árbol escogiendo la rama izquierda o derecha en función de la clave que se inserta y la clave del nodo actual, hasta encontrar su ubicación; por ejemplo, insertar la clave 7 en el árbol de la figura 5 requiere avanzar por el árbol hasta llegar a la clave 8, e introducir la nueva clave en el subárbol izquierdo a 8. El algoritmo de borrado en árboles es algo más complejo, pero más eficiente que el de borrado en un array ordenado. Ahora bien, suponer que se tiene un árbol vacío, que admite claves de tipo entero. Suponer que se van a ir introduciendo las claves de forma ascendente. Ejemplo: 1,2,3,4,5,6 Se crea un árbol cuya raíz tiene la clave 1. Se inserta la clave 2 en el subárbol derecho de 1. A continuación se inserta la clave 3 en el subárbol derecho de 2. Continuando las inserciones se ve que el árbol degenera en una lista secuencial, reduciendo drásticamente su eficacia para localizar un elemento. De todas formas es poco probable que se de un caso de este tipo en la práctica. Si las claves a introducir llegan de forma más o menos aleatoria entonces la implementación de operaciones sobre un árbol binario de búsqueda que vienen a continuación son en general suficientes.

­ Búsqueda Si el árbol no es de búsqueda, es necesario emplear uno de los recorridos anteriores sobre el árbol para localizarlo. El resultado es idéntico al de una búsqueda secuencial. Aprovechando las propiedades del árbol de búsqueda se puede acelerar la localización. Simplemente hay que descender a lo largo del árbol a izquierda o derecha dependiendo del elemento que se busca. ­ Inserción La inserción tampoco es complicada. Es más, resulta practicamente idéntica a la búsqueda. Cuando se llega a un árbol vacío se crea el nodo en el puntero que se pasa como parámetro por referencia, de esta manera los nuevos enlaces mantienen la coherencia. Si el elemento a insertar ya existe entonces no se hace nada. ­ Borrado La operación de borrado si resulta ser algo más complicada. Se recuerda que el árbol debe seguir siendo de búsqueda tras el borrado. Pueden darse tres casos, una vez encontrado el nodo a borrar: 1) El nodo no tiene descendientes. Simplemente se borra. 2) El nodo tiene al menos un descendiente por una sola rama. Se borra dicho nodo, y su primer descendiente se asigna como hijo del padre del nodo borrado. Ejemplo: en el árbol de la figura 5 se borra el nodo cuya clave es ­1. El árbol resultante es:

3) El nodo tiene al menos un descendiente por cada rama. Al borrar dicho nodo es necesario mantener la coherencia de los Existen variaciones sobre estos árboles, como los AVL o Red­ enlaces, además de seguir manteniendo la estructura como un Black (no se tratan aquí), que sin llegar a cumplir al 100% el árbol binario de búsqueda. La solución consiste en sustituir la criterio de árbol perfectamente equilibrado, evitan problemas información del nodo que se borra por el de una de las hojas, y como el de obtener una lista degenerada. borrar a continuación dicha hoja. ¿Puede ser cualquier hoja? No, debe ser la que contenga una de estas dos claves:

Operaciones básicas sobre árboles de b

46

© 2013 - www.spanishdeveloperscommunity.es


∙ la mayor de las claves menores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del árbol de la figura 5. Se sustituirá la clave 4 por la clave 2. ∙ la menor de las claves mayores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del árbol de la figura 5. Se sustituirá la clave 4 por la clave 5. El algoritmo de borrado que se implementa a continuación realiza la sustitución por la mayor de las claves menores, (aunque se puede escoger la otra opción sin pérdida de generalidad). Para lograr esto es necesario descender primero a la izquierda del nodo que se va a borrar, y después avanzar siempre a la derecha hasta encontrar un nodo hoja. A continuación se muestra gráficamente el proceso de borrar el nodo de clave 4:

Construcción de un árbol binario

A continuación comienza un proceso recursivo. Se procede a crear el subárbol izquierdo, cuyo tamaño está limitado por los índices izq y der. La siguiente posición en el recorrido en preorden es la raíz de este subárbol. Queda esto:

El subárbol b tiene un subárbol derecho, que no tiene ningún descendiente, tal y como indican los índices izq y der. Se ha obtenido el subárbol izquierdo completo de la raíz a, puesto

que b no tiene subárbol izquierdo:

Hasta el momento se ha visto la declaración y recorrido de un árbol binario. Sin embargo no se ha estudiado ningún método para crearlos. A continuación se estudia un método para crear un árbol binario que no tenga claves repetidas partiendo de su recorrido en preorden e inorden, almacenados en sendos arrays. Antes de explicarlo se recomienda al lector que lo intente hacer por su cuenta, es sencillo cuando uno es capaz de construir el árbol viendo sus recorridos pero sin haber visto el árbol terminado.

Después seguirá construyéndose el subárbol derecho a partir de la raíz a.

Partiendo de los recorridos preorden e inorden del árbol de la figura 1 puede determinarse que la raíz es el primer elemento del recorrido en preorden. Ese elemento se busca en el array inorden. Los elementos en el array inorden entre izq y la raíz forman el subárbol izquierdo. Asimismo los elementos entre der y la raíz forman el subárbol derecho. Por tanto se tiene este árbol:

© 2013 - www.spanishdeveloperscommunity.es

47


Listado 2

} }

#include <stdlib.h> #include <stdio.h>

boolean buscar(tarbol *a, int elem)

#include "abb[tip].h"

{ if (a == NULL) return FALSE; else if (a->clave < elem) return buscar(a-

void preorden(tarbol *a)

>der, elem);

{

else if (a->clave > elem) return buscar(a-

if (a != NULL) {

>izq, elem);

visitar(a);

else return TRUE;

preorden(a->izq); preorden(a->der);

}

} void insertar(tarbol **a, int elem)

}

{ if (*a == NULL) {

void inorden(tarbol *a)

*a = (arbol *) malloc(sizeof(arbol));

{

(*a)->clave = elem;

if (a != NULL) {

(*a)->izq = (*a)->der = NULL;

inorden(a->izq); visitar(a);

}

inorden(a->der);

else if ((*a)->clave < elem) insertar(&(*a)->der, elem);

}

else if ((*a)->clave > elem)

}

insertar(&(*a)->izq, elem); void postorden(arbol *a)

}

{ if (a != NULL) { postorden(a->izq);

void borrar(tarbol **a, int elem) {

postorden(a->der);

void sustituir(tarbol **a, tarbol **aux);

visitar(a);

tarbol *aux;

} if (*a == NULL) /* no existe la clave */

}

return; void amplitud(tarbol *a) if ((*a)->clave < elem) borrar(&(*a)->der,

{ tCola cola;

/* las claves de la cola serán de

elem); else if ((*a)->clave > elem) borrar(&(*a)-

tipo árbol binario */ arbol *aux;

>izq, elem); else if ((*a)->clave == elem) { aux = *a;

if (a != NULL) {

if ((*a)->izq == NULL) *a = (*a)->der;

CrearCola(cola);

else if ((*a)->der == NULL) *a = (*a)-

encolar(cola, a); while (!colavacia(cola)) {

>izq; else sustituir(&(*a)->izq, &aux); /* se

desencolar(cola, aux); visitar(aux);

sustituye por la mayor de las menores */

if (aux->izq != NULL) encolar(cola, aux>izq);

free(aux);

if (aux->der != NULL) encolar(cola, aux}

>der); }

48

}

© 2013 - www.spanishdeveloperscommunity.es



Laboratorio práctico

Solucionar problemas de detección en redes inhalambricas

Si el equipo tiene un adaptador de red inalámbrica, Windows detectará automáticamente las redes inalámbricas que se encuentren dentro del alcance del sistema. Puede ver una lista de redes inalámbricas que Windows ha detectado en Conectarse a una red. Para abrir Conectarse a una red, haga clic en el botón Inicio y, a continuación, en Conectarse a.

alcance máximo es de 15 metros en el interior y 30 metros en el exterior. Estos alcances se obtienen en condiciones óptimas y sin interferencias. Asegúrese de que el equipo se encuentra dentro de este alcance y lo más cerca posible del enrutador o del punto de acceso. Si el equipo es portátil, intente moverlo para determinar el alcance de la señal inalámbrica y la mejor ubicación para colocarlo.

Si no puede acercarse más al enrutador o al punto de acceso, considere la posibilidad de comprar una antena externa e Si Windows no detecta una red que considera que se encuentra instalarla en el adaptador de red inalámbrica. Muchos dentro del alcance del equipo, puede deberse a uno de los adaptadores de red inalámbrica permiten la conexión de una motivos siguientes: antena; ésta proporciona mejor recepción que la antena integrada. Consulte la documentación que acompaña al El interruptor inalámbrico del equipo está apagado. adaptador de red inalámbrica para ver si puede instalar otra antena. Muchos PC móviles disponen de un interruptor inalámbrico en la parte delantera o lateral. Búsquelo en su equipo. Si tiene uno, El enrutador o el punto de acceso inalámbrico está apagado o asegúrese de que está encendido. Algunos equipos también usan no funciona correctamente. una combinación de teclas de función para encender o apagar el interruptor. Consulte la documentación que acompaña al equipo Puede intentar hacer dos cosas: para obtener más información acerca de la ubicación del interruptor inalámbrico. Asegúrese de que el enrutador o el punto de acceso está encendido, al igual que la luz de señal inalámbrica.Reinicie el El equipo está demasiado alejado del enrutador o del punto enrutador o el punto de acceso; para ello, apáguelo, espere unos de acceso inalámbricos. 10 segundos y vuelva a encenderlo. Advertencia Con los enrutadores y los puntos de acceso 802.11b o 802.11g, el alcance máximo es de 46 metros en el interior y 92 metros en el Al restablecer el enrutador o el punto de acceso, se desconectará exterior. Con los enrutadores y los puntos de acceso 802.11a, el

50

© 2013 - www.spanishdeveloperscommunity.es


temporalmente a todos los usuarios de la red. Si no administra el punto de acceso o la red, póngase en contacto con el administrador de red. Hay interferencias de otros dispositivos. Algunos dispositivos domésticos pueden producir interferencias entre el equipo y las redes que puedan estar dentro del alcance. Por ejemplo, los hornos microondas y algunos teléfonos inalámbricos usan una frecuencia de 2,4 gigahercios (GHz), la misma que usa el hardware de red 802.11b y 802.11g. Otros teléfonos inalámbricos usan una frecuencia de 5 GHz, al igual que el hardware de red 802.11a. Puede intentar hacer dos cosas en esta situación: Si hay dispositivos de estas características cerca del equipo, apáguelos temporalmente o aléjelos más. Cambie la configuración del enrutador o del punto de acceso de modo que use un canal inalámbrico diferente, o bien establezca la selección automática del canal, si está configurado en un número de canal fijo. A veces, un canal inalámbrico es más claro que los demás. En EE.UU. y en Canadá, puede usar los canales 1, 6 y 11. Consulte la documentación que acompaña al punto de acceso o el enrutador para obtener instrucciones acerca de la configuración del canal de la señal inalámbrica. Windows no está configurado para conectarse al tipo de red adecuado. Consulte la documentación que acompaña al enrutador o el punto de acceso para conocer el modo de conexión para el que está configurado el dispositivo. El modo debe ser ad hoc (cuando los dispositivos se comunican directamente sin pasar por un enrutador o un punto de acceso) o infraestructura (cuando los dispositivos se comunican mediante un enrutador o un punto de acceso). Asegúrese de que la opción de configuración de Windows para esta red coincide con la del dispositivo. Para comprobarlo, siga estos pasos: Para abrir la ventana Símbolo del sistema, haga clic en el botón Inicio, en Todos los programas, en Accesorios y, finalmente, en Símbolo del sistema.

Es posible que el enrutador o el punto de acceso esté demasiado ocupado para responder a nuevas solicitudes si lo usan varios equipos o dispositivos. Si tiene otros equipos que se conecten a la red, intente desconectarlos temporalmente. La red que está buscando está establecida para no difundir su nombre de red (SSID). Se pueden configurar los enrutadores y los puntos de acceso inalámbricos para que no difundan el nombre de red. En este caso, no puede detectar la red (a efectos de conexión) a menos que se haya conectado antes a ella o se conecte manualmente con el identificador de red SSID. Para conectarse a una red que no difunda una señal inalámbrica, siga estos pasos: Para abrir Conectarse a una red, haga clic en el botón Inicio y, a continuación, en Conectarse a. Haga clic en Configurar una conexión o red. Haga clic en Conectarse manualmente a una red inalámbrica y, a continuación, escriba la información de red. La red se agregará a la lista de redes y estará disponible para conexiones futuras cuando el equipo se encuentre dentro de su alcance. El administrador de red bloquea el acceso a determinadas redes. Si se encuentra en una red corporativa, es posible que el administrador de red use la directiva de grupo para controlar el acceso a las redes inalámbricas. Si considera que hay redes inalámbricas dentro del alcance del equipo y no están visibles, o bien no puede conectarse a ellas porque el administrador de red ha bloqueado el acceso, póngase en contacto con éste para obtener ayuda. El adaptador de red inalámbrica está en el modo de monitor. Si el equipo está ejecutando un programa de supervisión de redes, el adaptador de red inalámbrica se establecerá en el modo de monitor, lo que impide que Windows se conecte a redes inalámbricas. Para conectarse a una red inalámbrica, cierre el programa de supervisión de redes o siga las instrucciones del programa para salir del modo de monitor.

Escriba netsh wlan add filter networktype=tipo de red. Donde tipo de red es adhoc o infrastructure. El enrutador o el punto de acceso está ocupado. © 2013 - www.spanishdeveloperscommunity.es

51



Turn static files into dynamic content formats.

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