lunes, 5 de enero de 2015

Arquitecura de Android SOLID(A) II

El Modelo de Vista

El Modelo de Vista representa el estado de los componentes de la vista. Contiene variables que representan el estado de los controles como su visibilidad, si están activos, chequeados, si debe tener un color de fondo u otro, etc.

La lógica que encapsula el MV es la toma decisiones con respecto a la interfaz de usuario dependiendo de el Modelo y/o el estado de otros controles.

Por ejemplo, el MV podría contener el código y los estados que controlan si una lista desplegable se debe activar o desactivar dependiendo de si el usuario ha activado un checkbox y además cambia de color el fondo de una caja de texto para que al usuario no se olvide de rellenarla. Ofreciendo una función al controlador que tendría esta pinta :

martes, 23 de diciembre de 2014

Arquitecura de Android SOLID(A) I

Continua en la Parte II y Parte III

Como ya comenté en una diatriba en un post anterior, la segregación de responsabilidades en Android es un maldito infierno debido a que las infames Actividades establecen los eventos de la vista, reciben los mensajes del bucle de mensajes del contexto de la aplicación, controlan su ciclo de vida, etc.

Para poder cumplir el principio de responsabilidad única y un diseño SOLID hemos de segregar las responsabilidades y proporcionar los mecanismos adecuados para su intercomunicación.

Para ello he preparado un pequeño ejemplo que, aunque muy muy básico para usarse en el mundo real, puede representar un buen comienzo y/o un buen ejemplo para que se comprenda y se pueda empezar a crear una arquitectura en Android decente.

Este ejemplo se compondrá de:
  • Un Modelo que representa el estado y el comportamiento de nuestra entidad de negocio.
  • Un Modelo de Vista que representará el estado de la vista.
  • Un Controlador que recibe las llamadas de la vista, realiza las operaciones con las entidades de dominio y manda notificaciones a la vista.
  • Una vista que muestra el modelo y el modelo de vista, llama al controlador para aplicar reglas de dominio y ofrece el feedback al usuario con las notificaciones del controlador.

jueves, 30 de octubre de 2014

God Mode

No, que no se me exciten los más jugones. No voy a revelar el "Modo Dios" de ningún top del mundo de los videojuegos... De hecho es una información un poco antigua y probablemente no tan interesante, pero yo (y unos cuantos compañeros de mi entorno) no la conocíamos y se me antoja bastante útil. Navegando por la red me he encontrado con un interesante truco que se ha dado en llamar el God Mode de Windows 7. Si eres usuario de este Sistema Operativo, seguro que alguna vez has perdido algo de tiempo buceando por menús y carpetas en busca de alguna utilidad del sistema de esas que usamos con poca frecuencia... 

Pues bien, creando una simple carpeta (en cualquier sitio) y dándole un determinado nombre se obra la magia... Si creamos una carpeta y la llamamos "GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}" veremos como inmediatamente se cambia el icono y dentro tendremos accceso a una especie de "super panel de control" donde podremos acceder a un montón de opciones para modificar diferentes aspectos del sistema. Muchas son accesibles con más o menos facilidad de la forma tradicional, otras igual no tanto...

martes, 26 de agosto de 2014

Frase celebre del dia.

Como si tuviéramos una frase celebre cada dia....

La cantidad de energía necesaria para refutar gilipolleces es un orden de magnitud superior que para producirlas.
Y unos casos mas reales de lo que parece: 1, 2, 3, 4, 5 y

viernes, 25 de julio de 2014

Embellece tu juego 2D - Self-Shadowing

Existen varias técnicas para que una textura de 2 dimensiones proyecte sombras en tiempo real sobre sí misma. Las técnicas más rápidas hacen uso de mapas de horizonte pero es menos precisa y genera más artefactos que la implementación que voy a presentar aquí. Esta implementación es computacionalmente muy pesada pero, asumiendo que en un juego 2D tenemos una carga de GPU relativamente baja y que somos un poco putilla gráfica y tenemos hardware puntero, puede llegar a ser viable en una aplicación interactiva; sobretodo si nuestro motor gráfico trabaja con deferred rendering.

martes, 15 de julio de 2014

Embellece tu juego 2D - Bloom

El efecto bloom queda genial en escenas de alto contraste de colores; y nuestro juego seguro que tiene una preciosa paleta de colores a la que le quedaría de maravilla.

Ejemplo de bloom:


La técnica implica varios pasos a seguir:

1) Obtener en una textura únicamente los pixeles más luminosos de la imagen.
2) Aplicarle un desenfoque gausiano (vertical y horizontal)
3) Combinar el resultado de la imagen desenfocada con la imagen original usando additive blending.

Todo esto lo realizamos con una resolución pequeña para mejorar el rendimiento puesto que no nos hace falta tanta precisión.

Profundizando en CSS. Selectores

Llevo una temporada intentado retomar el diseño web para cubrir, por una parte, ciertas inquietudes profesionales, y por otra, una serie de trabajos, de esos sin remuneración, a los que "obligan" los consabidos lazos afectivos. En la parte más temprana de mi recorrido profesional hice algunas modestas webs, pero me quedé en la maquetación con frames y tablas. Lo de maquetar una página con etiquetas div es una chulada, pero me parece una temeridad sin una buenísima planificación de estilos, por eso las posibilidades que se me están revelando con CSS me llevan a pensar que un día podría llegar a ser el Harry Potter del diseño web (sic)... En fin, coñas a parte, hay por ahí auténticas virguerías hechas -sólo- con HTML y CSS, y merece la pena profundizar un poco más en sus posibilidades.

Hace ya algún tiempo publicamos en este blog una pequeña guía con algunos conceptos básicos de CSS. En ella se decía que la sintaxis general de CSS se componía de selectores y sus correspondientes declaraciones de estilos o bloques de estilo. Hoy vamos a profundizar en los selectores.

martes, 8 de julio de 2014

Embellece tu juego 2D - Specular Highlight

Specular Highlight es el brillo que aparecen en los objetos cuando la luz incidente es reflejada directamente hacia nuestros ojos.

La propuesta, a bote pronto, es sencilla: Calcular el vector de "rebote" de la luz y hacer el dot product con el vector de la vista; mientras menor sea el ángulo entre estos 2 vectores, más brillo vamos a apreciar.


L es el vector de dirección de la luz (invertido), N es el vector normal del pixel (sacado del normal map), V es la vista (o cámara), H es el Half Vectror que yo no voy a usar porque es más preciso utilizar el vector de la luz reflejado (R).

martes, 1 de julio de 2014

Embellece tu juego 2D - Point Light

La técnica de normal mapping del post anterior queda muy bien, pero nos falta mejorar un poco el punto de luz creado para iluminar la textura. De momento el punto de luz ilumina toda la textura al completo pero es probable que en nuestro motor gráfico necesitemos definir un punto de luz con un rango finito. Para ello, vamos a añadirle la atenuación.

lunes, 30 de junio de 2014

Embellece tu juego 2D - Normal Mapping

Muchos de los juegos 2D que muestran iluminación dinámica se basan en una técnica llamada Color Blending. Con esta técnica se puede simular la iluminación de una textura como se ve en la imagen del enlace anterior.

Para mejorar los gráficos 2D se pueden emplear técnicas de iluminación 3D que embellecen enormemente el resultado final.

La primera técnica que podemos aplicar es NormalMapping. Esta técnica define la dirección hacia la que está orientado cada pixel en la textura por lo que podemos calcular como incide la luz en él.