Link del día: Optimización web vs. desarrollo prolijo

Hace tiempo ya estaba comentando con un colega sobre la enorme cantidad de medidas que pueden tomarse para mejorar la performance de una aplicación web. Existen miles de factores involucrados, entre los cuales hay muchas configuraciones y tweaks que pueden hacerse al servidor, pero muchos otros tienen que ver con el código en sí mismo. Sí señores, estamos hablando de HTML, CSS y JS.

El problema en este punto es que un HTML mínimo puede no ser el HTML que nuestro generador de contenidos genera. Puede que el CSS sea automatizado también, o que nuestro diseñador o desarrollador HTML no esté pensando en hacer las cosas de la forma “más mínima posible”, sino realmente trabajando en hacer que algo se vea bien y esté bien codificado. No está entre sus prioridades escribir

background: url("image.jpg") repeat top left scroll;

en lugar de

background: url(image.jpg);

Ambos son equivalentes, pero la segunda es más corta y por tanto más eficiente. Pero nuestro desarrollador debe realmente preocuparse porque el desarrollo sea correcto, que la visualización sea consistente y que sea acorde entre navegadores.

Ni hablar de JavaScript, en donde la cantidad de optimizaciones, minimizaciones y mejoras puede ser realmente importante. Alguno quiere trabajar sobre JavaScrpt minimizado? Sin duda: no.

La alternativa a la que llegamos era la de tener dos versiones de la aplicación. La de desarrollo con código normal y la de producción. Una vez que desde la de desarrollo se hicieran pruebas y quisiera hacerse un release, solo teníamos que correr una serie de herramientas que nos permitieran tener una versión minimizada y optimizada del código, bajo el riesgo de que algo se rompiera en el proceso.

Pero ahora Google acaba de publicar un módulo que han desarrollado para Apache 2.2, llamado mod_pagespeed, el cual hace optimizaciones y cache en el momento de los pedidos, para optimizar los sitios web sin tener que modificar los archivos reales. Por supuesto, es altamente configurable, y podemos ver la gran cantidad de mejoras que puede realizar en el poco tiempo que tiene.

Google nos cuenta que ya está trabajando con GoDaddy para que todos sus clientes puedan utilizarlo, y con Cotendo para que esté disponible en su CDN también. Si ustedes no tienen la suerte de estar entre ellos, pueden bajarlo por cuenta propia desde la página del proyecto de PageSpeed, e instalarlo en sus propios servidores.

Soy un zorrinito acelerado.

(Read more →)

Link of the day: Mouse trace your visitors

We’ve already presented some tools ([1], [2], [3]) that allows you to easily have some feedback of what the users do at your site or web application, or how do you need to improve it to make it better for their user experience.

So, here is another tool that will help us measure that bit of the user that’s not so easy to see: MouseTrace is a tool that being installed on our website will track exactly what the user does with it’s mouse. Even if they don’t click, it is a good idea to keep track of it so that we can find out if our layout is somehow confusing the users.

I haven’t tried this myself. Have you? Are you going to? Please share your experiences.

I’m a tracked little skunk.

(Read more →)

Link del día: Feedback 2.0, volumen 2

Alguna vez hablamos de dos sistemas (Uservoice y Votebox) que nos permitían obtener información de parte del usuario como ideas o propuestas para continuar con el desarrollo de nuestro sistema y entender sus necesidades. Sin embargo, quizá no sea del todo buena idea utilizar estos mismos para el reporte de problemas o para un feedback algo negativo sobre lo que los usuarios están encontrando. Ese tipo de cosas que “son como no deberían ser”.

GetSatisfaction es un sistema del mismo tipo, integrable desde su propio website, en donde los usuarios pueden loggearse de distintas formas (perfil de Google, Facebook, Twitter, etc.) para reportar problemas que estén encontrando en la aplicación. Más allá, podemos darles un feedback al respecto y que ellos continúen esa discusión basándose en nuestras respuestas. No hace falta que se dupliquen las respuestas innecesariamente, ya que un usuario distinto puede elegir la opción “Estoy teniendo el mismo problema” y automáticamente podremos ver cuántos son los usuarios afectados que están involucrados en este problema en particular.

No relacionado a la funcionalidad, quiero destacar lo novedoso de la presentación en la página principal de GetSatisfaction. Podrán ver que en la parte superior de la página hay una especie de rueda de la fortuna (Wheel of satisfaction, como ellos la llaman) con logos de distintas empresas que tienen historias de éxito. Podemos hacerla girar y cambiar la historia que estamos viendo.

Soy un zorrinito orientado a los usuarios.

(Read more →)

Link del día: CSS3 para navegadores viejos

Todos sabemos que cuando queremos avanzar en las tendencias tecnológicas, muchas veces debemos dejar atrás a una serie de usuarios que no quieren o no pueden actualizar sus plataformas. Para muchos desarrolladores web, Internet Explorer es hoy el problema de dar soporte a todos los posibles usuarios, más específicamente en las versiones antiguas de este navegador. (Según parece, todavía hay gente que utiliza la versión 5.)

Gracias a un tweet de @jmma me enteré de un script llamado Selectivizr (nombres 2.0 si los hay) que simula los selectores CSS3 para IE6, IE7 e IE8. Por supuesto, ya luego podemos utilizar CSS3 y librerías JavaScript con selectores CSS3 sin problemas.

En el fondo, sabemos que no es perfecto (vean la sección “You need to know”), pero está mucho más cerca de ayudarnos a avanzar sin dejar a muchos usuarios de lado.

Soy un zorrinito compatible.

(Read more →)

Link del día: Framework de Ingeniería Social

Muchos de nosotros debemos pensar que la ingeniería social tiene mucho de talento innato, mucho de arte y mucho de particular. Por la forma en que muchas cosas se desarrollan en este área de la seguridad, creemos que hay realmente poco de reutilizable, exceptuando ciertos detalles técnicos, ciertas acciones que pueden desarrollarse a través del ámbito virtual.

Estas cosas son, por supuesto, fácilmente reproducibles y reutilizables, y deben de serlo cuando se trata de la utilización de ciertos exploits o de ciertas técnicas que necesitamos utilizar para que el usuario nos brinde información propia (por ejemplo, phishing, tab-nabbing, click-jacking, etc.).

Social-Engineer.org tiene muchísima información sobre este tema, sobre distintas aproximaciones y técnicas, y, lo más curioso, un framework de ingeniería social llamado de forma muy creativa Social Engineering Framework. Pero no sólo eso, sino que para asistir a la sección de computer-based social engineering hay herramientas muy conocidas, las cuales son:

Yo diría que todo esto es un must-read para un aspirante a testeador de seguridad.

Soy un zorrinito social.

(Read more →)

Link del día: HTML Instant

Gracias a la gente de BreakingDev me enteré de una aplicación web llamada HTML Instant, en donde podemos comenzar a maquetear HTML instantáneo, viendo los resultados ahí mismo en donde estamos trabajando.

Lo bueno es que podemos ver los resultados de forma instantánea y sin mucho trabajo, podemos codificar al mismo tiempo que vemos nuestros errores para fácilmente corregirlos. No hay siquiera por qué cambiar de ventana. La aplicación de una sola página consta también de ciertos snippets pre-armados sobre los cuales podemos trabajar más fácilmente.

Por supuesto, también acepta CSS y JavaScript.

Soy un zorrinito web.

(Read more →)

Link del día: Evercookie

Hace un tiempo me crucé con un artículo que hablaba sobre HTML5 y la privacidad en internet. Si bien me pareció que era un poco exagerado, parece que muchas fuentes, incluyendo algunas bastante confiables como el NYTimes.

Pero en realidad no estamos hablando de un problema de HTML5, sino de la seguridad que los navegadores implementen para dar soporte a este nuevo estándar.

Todo en el fondo se trata de la utilización de más técnicas para el almacenamiento de información local en una computadora, que de una forma u otra puede ser utilizada (y de hecho, lo es hoy en día) para identificar gustos y tendencias de navegación en ciertas partes de internet, de forma que, por ejemplo, Google pueda anunciar cosas de nuestro interés, incluso aunque estemos viendo una noticia sobre algo que no está relacionado.

Una aplicación proof of concept de cómo se puede almacenar información casi-persistente (cuando se supone que no debería de serla) es EverCookie. Evercookie es una suerte de cookie que a través de distintos mecanismos de almacenamiento se permite persistir de forma prácticamente persistente, incluso luego de la limpieza de caché, cookies y otro tipo de limpiezas estándares que muchos de nosotros haríamos pensando que ya debería de haber desaparecido.

¿Ustedes creen que esto realmente tenga implicaciones en la seguridad? ¿Creen que HTML5 se convertirá más en un problema que en una solución?

Soy un zorrinito persistente.

(Read more →)

Link del día: Replicación MySQL en 5 minutos

Gracias al Twitter de @BreakingDev me topé con un artículo muy interesante llamado Get MySQL Replication up and running in 5 minutes. Creo que es realmente útil para novatos como yo en estos asuntos, ya que recuerdo mis pobres intentos de trabajar con replicación MySQL y pasar horas y horas intentando hacerlo trabajar, basándome en unas instrucciones mágicas que alguien que lo comprendía me pasó y yo solo las seguía ciegamente.

Por suerte el artículo es lo suficientemente explícito como para darnos a entender qué es lo que estamos haciendo, y lo suficientemente breve como para no hacernos perder tiempo e ir directo al grano.

Por supuesto, siempre podemos ir al manual oficial y checkear el capítulo Replication, en donde la primera parte está titulada How To Set Up Replication. Este es el que contiene toda la información que podamos necesitar sobre opciones extras o customizaciones que quisiéramos hacer.

Soy un zorrinito replicado.

(Read more →)

La máquina de emociones - Capítulo 4: Conciencia

Continuando con mi lectura del libro de Minsky, el capítulo 4 se titula “Conciencia”, y definitivamente trata sobre eso.

La primera sección del capítulo intenta definir lo que la conciencia es, por supuesto, fallando por el hecho de que “conciencia” no es más que una palabra describiendo algo que somos capaces de percibir. Al igual que nuestra mente, no puede ser lo suficientemente simple como para ser definidia por solo una palabra (o solo un proceso), de modo que Minsky deduce que la conciencia es de hecho la interacción de diferentes recursos mentales. él propone la idea de que nuestras mentes tienen un detector de conciencia que se activa cuando ciertos recursos están involucrados o activados. En esta idea podemos explicar comportamientos complejos inconscientes a la vez de comportamientos simples conscientes (y por supuesto, los opuestos también.)

Minsky también describe cómo las redes de conectividad o redes neurales no pueden describir completamente los secretos de nuestra conciencia, pero las redes semánticas sí. ( ¿Qué tan de acuerdo se encuentra esto con la neurobiología?) Esto se debe a que nuestros procesos de conciencia deben tener al menos cuatro características:

  • Memoria: necesitan involucrar la memoria debido a la ilusión de la inmanencia - la ilusión de que todo lo que percibimos, pensamos y sentimos está ocurriendo ahora mismo, y de que poseemos toda la información que podemos obtener de nuestros sentidos. Lo que pensamos no se debe a lo que está ocurriendo en este preciso momento, sino a lo que acabamos de ver o hacer.
  • Procesos seriales: parece que para procesos complejos o para procesos que requieran un recurso en específico, solamente podremos ejectuar una sola tarea a la vez, y esto explicaría conceptos como la “atención”.
  • Descripciones simbólicas: necesitamos construir modelos abstractos y representaciones semánticas de nuestros mundos y de nosotros mismos incluídos en él.
  • Modelos del propio-ser: también necesitamos una forma de modelarnos a nosotros mismos y poder predecir nuestras propias reacciones ante ciertas situaciones, en varios modelos (no sólo uno) de nosotros mismos.

Minsky también propone que existe otro detector que activaría ciertos recursos para hacernos concientes de un problema específico que debemos resolver cuando el comportamiento instinctivo no lo resolvería.

Luego trata sobre nuestra capacidad de reflexionar sobre nosotros mismos como si fueramos espectadores del Teatro Cartesiano, un concepto similar a la metáfora de Sócrates de la caverna y las sombras en la pared. Sin embargo, el teatro cartesiano es más una idea de Daniel Dennet, y podría ser descripta brevemente como si nuestra conciencia fuera un espectador en un espectáculo en donde diferentes partes de nosotros mismos son los actores.

Finalmente, Minsky explica la idea de _cerebros _reguladores y detectores. Estos cerebros podrían ser meta-mentes que interactúan como si el mundo exterior para ellas fuera la información que pueden obtener de nuestro cerebro real. Una especie de una mirada interior, que podría permitirnos alcanzar más planos abstractos fuera de la experiencia del mundo real.

Una cuestión curiosa es que Minsky explica que tenemos seis niveles de cerebros internos, lo que corresponde con los distintos niveles de conciencia que los humanos tienen: instinctos, deliberación, reflexión, reflexión del ser-propio, y reflexiones de la conciencia propia. No ha entrado en detalle sobre ninguno de ellos, pero realmente encuentro interesante el hecho de que ya he leído al respecto habiendo estudiado hace mucho Kabbalah y el árbol de la Vida como un mapa para la mente humana, en donde los seis sephiroth inferiores (Yesod-Hesed) representarían seis niveles de conciencia huamana. Quizá sea solamente casualidad, pero intentaré volver a esto después en más detalle.

(Read more →)

The Emotion Machine - Chapter 4: Consciousness

Going on with my reading of Minsky’s book, chapter 4 is titled “Consciousness” and it definitely treats about that.

The first section of the chapter tries to define what consciousness is, of course, failing as in fact “conscience” is nothing but a word that describes something that we are able to percieve. As our mind, it can’t be so simple as to define with just one word (or just one process) so Minsky states that consciousness may be in fact the interaction of different mind resources. He proposes the idea that our minds have a consciousness detector that is activated when certain resources are activated. In that idea we can explain for unconcious complex behavior and conscious simple behavior. (Of course, also the oposite.)

Minsky also describes how neural or connectivity networks cannot fully describe the secrets of counsciousness, but semantic networks can. (How aligned is this with neurobiology?) This is because our counsciousness process must have at least four characteristics:

  • Memory: they need to involve memory because of the Inmanence illusion - the illusion that everything we percieve, think and feel is happening right now, and that we have all information we can get from our senses. What we think of is not because of what’s happening right now, but what we have just seen/done.
  • Serial processes: it seems that for complex processes, or processes that require a certain resource, we can only do one at once, and that would explain concepts like “attention”.
  • Symbolic descriptions: we need to build abstract models and semantic representations of our world and ourselves included in them.
  • Self-Models: we also need a way to model ourselves and predict our own reactions to certain situations, based on different models (not just one) of ourselves.

Minsky also proposes that there is another detector which would activate certain resources to make us conscious of a specific problem that we need to solve when instinctive behavior would not solve the problem.

Then he treats our self-reflection as if we were spectators of The Cartesian Theater, somewhat alike Socrate’s metaphor of the underground den and the shadows on the wall. However, cartesian theater idea is mostly from Daniel Dennett, and could be briefly described as if our conscience was a spectator in a show were different part of ourselves were the actors.

Finally, Minsky explains the idea of regulator and detector brains. This brains could be meta-minds that interact as if the outer world for them was the information they could get from our real brain. Some sort of an inside-looking, that could prove for more abstract plans rather than real world experience.

A curious thing is that Minsky describes that we’ve got six levels of inner-brains, which correspond to different consciousness levels that humans have: instinctiveness, learning, delibering, reflection, self-reflection and self-conscious reflections. He hasn’t gone further in detail about them, but I truly find it amusing that I already have read that when studying Kabbalah and the Tree of Life as a map to human mind, where the lesser six sephiroth (Yesod-Hesed) would represent six differents levels of human counciousness. Maybe was just chance, but I’ll try to get back to this later with further detail.

(Read more →)