Android 4.4 KitKat cambia su máquina virtual a ART, ¿por qué?
www.asociacionaepi.es
Consejos para mejorar como arquitecto de aplicaciones web

- Conocer qué ofrecen las versiones de PHP 4 y 5 , conocer las mejoras de la versión 6:
En la versión 4 existe la posibilidad de especificar en las declaraciones de las funciones y operaciones de clases, las variables por referencia o por valor, esto se hace siempre por referencia a partir de la 5, en esta además se pueden especificar partes públicas y privadas en las clases además de poder usar el patrón Singleton y autocarga de clases, la versión 6 añade Unicode para nombrar clases, variables y funciones de la tabla de símbolos, y eliminan register_globals, magic_quotes y safe_mode, y atención : paso por referencias peligroso! - PHP, ASP.NET y Ruby on Rails, cuándo es mejor utilizar uno u otro lenguaje y sus tecnologías directamente asociadas que implican también otra forma de pensar y actuar frente a los problemas que puedan ocasionarse…
Si vas a construir un sitio que necesite ser escalable y muy grande (una gran red social o una tienda que vaya a sufrir muchísimos cambios) entonces es mejor utilizar RoR, en otro caso, si necesitas un lenguaje con el que construir una aplicación web puedes usar PHP o ASP, el segundo es más fácil para los que les gusta diseñar con un IDE y el primero para los que quieren tener un motor potente de un gestor de contenidos o hacerlo todo desde cero o con unframework de aplicaciones rápidas… - Ser capaz de realizar programas con sockets para implementar servicios (ftp, telnet, etc.)…un programa con sockets puede ser un plugin de WordPress que haga fetching (algoritmo capturador de contenidos) desde una URL, esto lo publicaré en futuro no muy lejano, mientras podéis ver un ejemplo deprogramación con sockets en PHP
- Programación Orientada a Objetos: POO
+ por qué especificar un método como privado o público
+ conceptos que son útiles de conocer: interfaces, constructores, destructores, private-public-protected, herencia, polimorfismo, métodos estáticos, etc. - Bases de datos: conocer qué es la normalización de base de datos y como exportar/importar esquemas de bases de datos con XML (además de saber como comprimir una base de datos con ZIP o GZIP y enviarlo por mail como adjunto)…ejemplo, además es imprescindible antes de empezar a crear las tablas, hacer nuestro diagrama de E/R
- Patrones de diseño
- Control de código fuente (SVN, CSV, etc): esto sirve sobre todo para trabajar en equipo y mantener un control sobre los cambios que vamos realizando en nuestro código fuente (usaremos OHLOH)
- Unit Testing o Pruebas de Unidad
- Ser parte de la Comunidad, participar en foros, debates, ayudar a extender los conocimientos, contribuir con algún proyecto aunque sólo sea traduciéndolo a tu idioma…OsCommerce, OpenCMS, Joomla, WordPress, etc.
- Habilidades con JavaScript, conocer los framework JS existentes (JQuery, Prototype, MooTools, Dojo, ext,etc.) y hacer ejemplos donde arreglar los problemas de compatibilidad entre ellos…
- Habilidades con CSS (utilizar CSS dinámico): diseñar online el esqueleto XHTML+CSS de una web
- Conocer el modelo de caja y cómo AJAX “encaja” perfectamente en esto 🙂
- Saber qué es y como se contruye un sistema gestor de contenidos
- Usabilidad y Arquitectura de la Información
- Integrar las redes sociales en nuestra aplicación: login, registro, etc, con facebook, gmail, twitter, menéame, (sharethis),etc.
- Conocer las herramientas de ayuda para el arquitecto integrables en el navegador: firebug ( y derivados ) ,selenium, etc.
- Pasión por mejorar (ganar amigos e influenciar para generar más conocimientos que compartir)
- Programación Orientada a Aspectos
- Trabajo con etiquetas multidominio
- Diagramas de Información de Arquitectura
- Algoritmos evolutivos de búsqueda de información : añadir la posibilidad de buscar dentro de documentos, como .pdf, .doc,etc.
- La importancia del uso de un profiler en la construcción de una aplicación web
- Generación del esqueleto de una aplicación web: una vez que hemos subido un peldaño importante como arquitectos de aplicaciones web necesitamos ir más allá, utilizar estructuras cada vez más mejoradas que automaticen el trabajo y así construir nuestras webs en dos días cuando antes nos requerían 2 meses
- Esta web es imprescindible: abrir Fundamentos de laArquitectura de la Información
Programación Orientada a Objetos en Java
La programación orientada a objetos (POO) es un paradigma de programación que usa objetos para crear aplicaciones. Está basada en tres pilares fundamentales: herencia, polimorfismo, encapsulación. Su uso se popularizó a principios de la década de 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos, entre ellos Java.
VENTAJAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS
- Fomenta la reutilización y ampliación del código.
- Permite crear sistemas más complejos.
- La programación se asemeja al mundo real.
- Agiliza el desarrollo de software.
- Facilita el trabajo en equipo.
Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.
Para entender este modelo vamos a revisar 2 conceptos fundamentales:
- clases
- objetos
LAS CLASES
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono móvil es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto móvil es una instancia de una clase conocida como “móvil”. Los móviles tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.).
Cuando se fabrican los móviles, los fabricantes aprovechan el hecho de que los móviles comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos móviles del mismo modelo. A ese modelo o plantilla le llamamos clase, y a los equipos que sacamos a partir de ella la llamamos objetos.
Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo tipo y mismas características.
Definición teórica: La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una clase.
OBJETOS
Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos.
Tomemos como ejemplo un ordenador. No necesitamos ser expertos para saber que un ordenador está compuesta internamente por varios componentes: placa base, procesador, disco duro, tarjeta de video, etc…
El trabajo en conjunto de todos estos componentes hace funcionar un ordenador, sin embargo no necesitamos saber cómo trabajan cada uno de estos componentes. Cada componente es una unidad autónoma, y todo lo que necesitamos saber es cómo interactúan entre sí los componentes, saber por ejemplo si el procesador y las memorias son compatibles con la placa base, o conocer donde se coloca la tarjeta de video. Cuando conocemos como interaccionan los componentes entre sí, podremos armar fácilmente un ordenador.
¿Que tiene que ver esto con la programación? La programacion orientada a objetos trabaja de esta manera. Todo el programa está construido en base a diferentes componentes (objetos), cada uno tiene un rol específico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas.
Todo objeto del mundo real tiene 2 componentes: variables de clase y métodos.
Por ejemplo, los automóviles pueden tener como variables de clase (marca, modelo, color, velocidad máxima, etc.) y como métodos (frenar, acelerar, retroceder, llenar combustible, cambiar llantas, etc.).
Los objetos de Software, al igual que los objetos del mundo real, también tienen variables de clase y métodos. Un objeto de software mantiene sus características en una o más “variables”, e implementa su comportamiento con “métodos”. Un método es una función o subrutina asociada a un objeto.
Imaginemos que tenemos aparcado en el garaje un Ford Focus color azul que corre hasta 260 km/h. Si pasamos ese objeto del mundo real al mundo del software, tendremos un objeto Automóvil con sus características predeterminadas:
Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Máxima = 260 km/h
Por lo tanto dentro de una clase tendremos como variables de clase las características descritas anteriormente y como métodos tendremos en este caso concreto (frenar, acelerar, retroceder, llenar combustible, etc…).
Vamos a ver un ejemplo práctico de como se hace esto en Java:
class Automovil { // VARIABLES DE CLASE private String marca; private String modelo; private String color; private String velocidadMaxima; // CONSTRUCTOR QUE INICIALIZA LAS VARIABLES DE CLASE public Automovil(String marca, String modelo, String color, String velocidadMaxima) { this.marca = marca; this.modelo = modelo; this.color = color; this.velocidadMaxima = velocidadMaxima; } // METODOS GETTER Y SETTER PARA PODER RECUPERAR O CAMBIAR // LOS DATOS DE LAS VARIABLES DE CLASE public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public String getModelo() { return modelo; } public void setModelo(String modelo) { this.modelo = modelo; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getVelocidadMaxima() { return velocidadMaxima; } public void setVelocidadMaxima(String velocidadMaxima) { this.velocidadMaxima = velocidadMaxima; } }
OTROS CONCEPTOS DE LA PROGRAMACION ORIENTADA A OBJETOS
Encapsulación
La encapsulación consiste en unir en tener las variables de clase declaradas como private para evitar que cuando instanciemos un objeto podamos acceder a ellas (por seguridad). ¿Y entonces como accedemos a los valores de esas variables de clase? Mediante los métodos getter y setter que declaramos anteriormente.
Herencia
La herencia es uno de los conceptos más cruciales en la POO. La herencia consiste en que una clase puede heredar las variables y los métodos de otra clase (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.
Si partimos de la clase Automovil que creamos anteriormente podríamos crear clases hijas de Automovil, la cuales heredarán todo lo que contenga la clase Automovil.
¿Como se hereda en Java?
Para crear herencia se usa la palabra reservada extends:
class Coche extends Automovil { }
Como puedes ver en este caso estamos haciendo que la clase Coche herede de la clase Automovil.
Polimorfismo
El polimorfismo es la habilidad de una función, método, variable u objeto de poseer varias formas distintas. Podríamos decir que un mismo identificador comparte varios significados diferentes.
El propósito del polimorfismo es implementar un estilo de programación llamado envío de mensajes en el que los objetos interactúan entre ellos mediante estos mensajes, que no son más que llamadas a distintas funciones.
Java tiene 4 grandes formas de polimorfismo:
- Polimorfismo de asignación
- Polimorfismo puro
- Sobrecarga
- Polimorfismo de inclusión
Estos conceptos los veremos en otra entrada!
Si te gusta Java y quieres seguir aprendiendo puedes apuntarte a algunos de nuestros cursos de Java:
Presencial: https://asociacionaepi.es/curso-programacion-java/
Presencial en aula virtual: https://asociacionaepi.es/curso-analista-programador-java-virtual/
Nos vemos pronto!!!
Las mejoras de seguridad en Android 4.4
SELinux en Enforce Mode
Soporte de claves de cifrado de curva elíptica (ECDSA) en
AndroidKeyStore
Avisos de Cifrados sospechosos SSL CA
Detección automática de desbordamiento de pila
Google Certificate Pinning
Delegados en C#
Una alternativa
La solución usando delegados
Solamente tendríamos que añadir el método:
Habilitar la depuración remota de eventos en las app de SharePoint
Habrá que escribir un nombre para el namespace del bus de datos y aceptar:
Hay que esperar un rato, mientras el Service bus se está activando:
Una vez que esté creada, hay que pinchar en ella y pinchar en “Información de conexión”:
Copiamos la “Cadena de conexión”:
Una vez hayamos hecho esto, podremos depurar eventos remotos en nuestra app.
Como configurar Android en Netbeans
Esta entrada está dedicada a aquellas personas que no les convence mucho la idea de usar Eclipse para desarrollar en Android por el motivo que sea. Lo primero que debemos hacer es descargarnos el plugin desde la siguiente dirección: http://plugins.netbeans.org/plugin/19545/nbandroid
Una vez descargado debemos descomprimirlo en nuestro ordenador.
Ahora para configurar Netbeans y poder crear nuestros proyectos de Android, tenemos que hacer lo siguiente:
- Abrimos NetBeans.
- Vamos al menú Herramientas/Plugins, esperamos a que la ventana se cargue y entramos en la pestaña Descargados.
- Presionamos el botón Agregar.
- Buscamos la carpeta que descomprimimos antes y seleccionamos los archivos.
- Empezará a instalar y nos pedirá que reiniciemos Netbeans.
- Y eso es todo.
Nos vemos en próximas entradas Developers!.