Buscar en Mind w/o Soul

jueves, diciembre 31, 2009

An OR simulation project

Proyecto del compañero de trabajo Nelson para diseñar un entorno reutilizable para proyectos de simulación estadística.

SEDETEP - Transformation of the Spanish Operation Research Simulation Working Environment

Describe el propósito de varios módulos de definición de ontologías y requisitos, generación y análisis de experimentos basados en modelos.

A military Spanish project to develop an Operations Research simulation environment, model-based and with reuse between different simulation projects.

Look Ma! I have a tag cloud

I've found Blogger has an option to show labels as a tag cloud. This is how it looks at the momento of this post:

lunes, diciembre 28, 2009

Magic interfaces

Diseño de interfaces "naturales" usando técnicas de los magos profesionales:


Every great magic trick consists of three parts or acts. The first part is called "The Pledge." The magician shows you something ordinary: a deck of cards, a bird or a man. He shows you this object. Perhaps he asks you to inspect it to see if it is indeed real, unaltered, normal. But of course it probably isn't. The second act is called "The Turn." The magician takes the ordinary something and makes it do something extraordinary. Now you're looking for the secret, but you won't find it, because of course you're not really looking. You don't really want to know. You want to be fooled. But you wouldn't clap yet. Because making something disappear isn't enough; you have to bring it back. That's why every magic trick has a third act, the hardest part, the part we call "The Prestige."

Riqueza militar y paz de civilizaciones

La fracción militarizable de la riqueza

Insight sobre la relación entre la potencia militar naval y las rutas comerciales - el equilibrio mundial actual se debería a que la principal tecnología militar actual está conectada con la prosperidad comercial y el avance científico.

Mientras la guerra terrestre es intensiva en mano de obra, y depende de la capacidad del Estado para efectuar grandes conscripciones, la guerra en el mar es intensiva en capital.[...]La naturaleza benigna de las talasocracias en la Historia es inevitable: el poder sobre el mar depende no del número de hombres o de los dominios de un Estado, sino de la calidad y abundancia de sus barcos, y los barcos son la herramienta del comercio, es decir, de la prosperidad y la fraternidad internacional.
Si nuevas técnicas vuelven a desacoplar la eficacia militar del aumento del nivel de vida y complejidad social, la barbarie podría volver a triunfar.

..y .el equilibrio podría estar cambiando.

sábado, diciembre 19, 2009

Web Dogma

Danish webshop FatDux has created 10 simple Web Dogma for designing web sites, inspired by George Orwell's 5 writting rules (which are 6).

They seem tailored to convince stakeholders not falling into some very common 'business falltraps' and technicians into not overdoing it.

jueves, diciembre 17, 2009

Netbook reviews





Wink y Denim: software para prototipos

Captura de pantallas para prototipos, pantallazos, record y edición de grabación de interacción de screencast:


Herramienta experimental para prototipos en Java mediante manipulación directa (sketch) : DENIM

The Art of Unix Programming

The Art of Unix Programming is the book that teaches the principles of Unix design, and it's online.
By ERS (Eric Steven Raymond).

Lo que siempre deseaste saber

Cómo se dice "Fulanito de tal" en todos los idiomas del mundo

NationMaster, world statistics

NationMaster is a website for aggregated statistic data about nations from different sources.

So I decided to put together a website that allowed users to generate graphs based on numerical data extracted from the Factbook. The next (rather obvious) realisation was that there's no reason I couldn't take in data from other sources. Why shouldn't the net have a central location that allows you to compare countries on any statistic you like?

miércoles, diciembre 16, 2009

KDE TaskJuggler

Parece que al fin y al cabo tenemos competencia open source:


Sketches, prototypes, documentation, and Microsoft Blend

Kevin Silver uses Blend as an excuse to mull over the role of prototyping tools in the early design process and its communication to development teams.

It links to Parti & The Design Sandwich for a way to derive design criteria for a particular project.

Some article higlights:

Sketches and prototypes serve different purposes, even if they are built with the same tools. Take care not to create a prototype while sketching is still needed.
Buxton makes a succinct distinction between sketching and prototyping. Sketches are noncommittal and tentative. They let you suggest, explore, and question. Conversely, prototypes are specific depictions that allow you to describe, refine, and test your design solutions. So, prototypes are refined demonstrations of your design intent.

Design documentation must tell the complete story. Sketches and prototypes don't do that, but are good starting points.

To create an effective demonstration of your design intent, you must consider your audience. I have no problem showing a hand-drawn, static sketch to a design-savvy crowd, who can easily see and understand the invisible behavior with little explanation. However, I am more inclined to show a digital, dynamic sketch or prototype to a mixed room.

Documentation is needed even if it's an afterthought:
Dave points out that various departments within your organization—like quality assurance, legal, or compliance—might need to be able to review the deliverables you create to understand parts of a product. Dan Brown reminds us that we also have to consider other documentation needs like guidelines, standards, and pattern libraries when creating our final deliverables.

lunes, diciembre 14, 2009

The Charmr. A design success for medical devices.

A design problem.

A solution.

Dimensions and principles of design

Dimensions of design/Against ahistoricity « Adam Greenfield’s Speedbird
How does design affect choice?
The design of a place affects the choices people can make, at many levels:
- it affects where people can go and where they cannot: the quality we shall call permeability.
- it affects the range of uses available to people: the quality we shall call variety.
- it affects how easily people can understand what opportunities it offers: the quality we shall call legibility.
- it affects the degree to which people can use a given place for different purposes: the quality we shall call robustness.
- it affects whether the detailed appearance of the place makes people aware of the choices available: the quality we shall call visual appropriateness.
- it affects people’s choice of sensory experiences: the quality we shall call richness.
- it affects the extent to which people can put their own stamp on a place: we shall call this personalization.

Ten principles for good design

miércoles, diciembre 09, 2009

Firefox extensions - the easy way

Mozilla Labs Jetpack | Exploring new ways to extend and personalize the Web
Jetpack is a Mozilla Labs project that enables anyone who knows HTML, CSS, and JavaScript to create powerful Firefox add-ons. Our goal is to allow anyone who can build a Web site to participate in making the Web a better place to work, communicate and play.

The Usability Methods Toolbox

The Usability Methods Toolbox

Glossary and resources of usability methods

miércoles, noviembre 25, 2009

Monads explained to imperative programmers

(See also: answers to this slashdot comment)

I come from an imperative background myself. Let's see if my explanation of I/O and state handling in pure funtional languages, based on imperative metaphors, makes more sense for you. Please let me know if you find the following useful, I might expand it to my own personal "monad tutorial" (this seems to be a tradition when learning Haskell).

- Monads are program structures that represent processes (and one particular kind of process for each kind of monad), but in a different way than functions represent processes. Actually I think of monads as little virtual machines embedded in the functional language, that encapsulate all the boring bookkeeping and boilerplate that must be done in any program alongside the interesting business logic.

- A monad is used as a framework: you will program a sequence (or 'pipeline') of instructions in an imperative style (the do-block), using some vocabulary defined by the monad (the monadic type constructor, and return and bind operators). These blocks can then be instantiated and passed to the monad, to be executed according to the control logic programmed in the monad definition. Side effects during the sequence of actions in the do-block are instructions evaluated outside the do-block, but inside the (functional) monad code.

- As for the I/O and state handling, remember that you have IO and State monads, and that each monad represent one kind of computation. IO represents *processes that interact with the real world*, and state monads represent *processes that depend on an internal state, that changes as the process evolves*. The trick to use them in a pure functional language is that the actual side-effect is not spread all over your programming language, it's encapsulated inside the monad definition.

- The good thing of all this programming style is that you can actually *do* imperative programming, but in a much more controlled manner: instead of relying on the "generic VM" embedded in your imperative programming language (with all its risk of incorrect side-effects) you can execute it in your controled micro-VM defined by the monad. In that way, the only side-effects allowed inside the do-block are those that you enable yourself. Monads work as aspects in OOP: they represent one particular kind of unrelated logic (such as exceptions, concurrency...) that must be processed in the background of your main computation, and can alter its control flow. If you want your block to handle several aspects at once, you can always wrap several monads one inside another with monad transformers.

For example, the List type when used as a monad represents a computation which can return more than one result (or less than one, which is the empty list). Inside a do-block where one instruction has a List result, this means that the following instruction will get executed *once for each element in the list*, with its input parameter being each element. This is used for example in list comprehensions:

do { x <- [1..3] ; y <- [1..x] ; return (x,y) } ---> [ (1,1) , (2,1) , (2,2) , (3,1) , (3,2) , (3,3) ]

Is Haskell a "pure functional" language?

1) Haskell is pure functional, but that means "everything can be described as functions, even side-effects". Side effects happen inside do-blocks during the monad pipeline evaluation, but are side-effects only with respect to the do-block, not with respect to the language (the language views them as function calls over the monadic values).

2) Thanks to monads, you can embed side-effects to the do-block inside the IO monad (whose low-level system calls are then defined as a language primitive embedded in the read/write functions, the same way as it's done in imperative languages with read/write subroutines). If you expand the syntactic sugar of the do-block it gets transformed into a series of function calls, in which the monad state is one input parameter and the new state is in the result. In order to understand how this works, I'm affraid you should also learn about continuations, which complement monads in order to describe imperative execution in terms of functions.

Are side-effects part of the functional language, or something external to it?

We must get a bit philosophical here, in the sense that it depends on how you define "computation". It's been demostrated somewhere that imperative and functional programming are mathematically equivalent (i.e. both have the power of Turing machines). This means that you can represent functional languages using an imperative program, but also that you can represent imperative languages using a functional program.

In fact this is the trick used by Turing himself to solve the decision problem, even before computers existed! Mathematics is purely side-effect free, and yet it's used to describe all possible computations. There's a branch of it called "temporal logic" that is related to how continuations and the State monad work. Logic assertions are universally true, but you can create assertions about the world in a particular state that are not true for other states. By passing the transformed state from one logic expression to the next (or from one function to the next), you can represent state changes. Similarly, continuations are functions that represent *all the instructions left to be executed in the program*, and take as a parameter the current program state.

The one style you use is up to your personal preference, really. Modern Haskell is showing that we could switch all the imperative theoretical basis of programming as were defined during the 40's and 50's to a functional basis, and thus retaining all that can be done with state changes while gaining the reasoning properties of functional.

lunes, noviembre 23, 2009

Mathematical intuitions and pedagogy


Learning a new math concept requires building an intuition to it through examples, not grasping the simplest mathematical definition upfront.

User personas vs archetypes vs roles

La diferencia entre un "arquetipo" y un "personaje" de diseño es si se ha basado en investigación de campo real (numérica, medible!).

A well-researched example persona for web design:

A description of roles (focus on separate usage scenarios and performance, not users)

martes, noviembre 17, 2009

RAD prototyping tools

Adobe está diseñando una herramienta para creación de prototipos interactivos en Flash.
Se llama FlashCatalyst. Será un producto comercial, pero de momento la versión beta es pública para obtener feedback.

Otras herramientas RAD prototyping:

Lista: http://www.adaptivepath.com/blog/2009/09/16/rapid-prototyping-tools-revisited/

http://protoscript.com/ - comportamientos javascript predefinicos

lunes, noviembre 16, 2009

jueves, noviembre 12, 2009

GMF visual programming generator

Eclipse GMF is a framework to generate visual programming languages from models. The language engine is created (mostly) without the need to program in traditional text languages.

Article explaining it

sábado, noviembre 07, 2009

I took the nerd test...

I am nerdier than 94% of all people. Are you a nerd? Click here to take the Nerd Test, get geeky images and jokes, and write on the nerd forum!

But it really doesn't count! It's the general populace version. I'm a plain 50% nerd, I swear.

NerdTests.com says I'm a Cool Nerd King.  Click here to take the Nerd Test, get nerdy images and jokes, and write on the nerd forum!

jueves, noviembre 05, 2009

jueves, octubre 29, 2009

Context Free art

Context Free es un programa GPL para generar dibujos artísticos a partir de una sencilla gramática generativa con solo 2 primitivas de dibujo, "Circle" y "Square".

Incluye el formato de rendering Anti-Grain Geometry, librería C supuestamente mejor programada que los estándares de antialias usados por los sistemas operativos actuales.

Imagen por Guigui

viernes, octubre 09, 2009

Semiotic Engineering of HCI

I've recently stumbled upon the book "The Semiotic Engineering of Human-Computer Interaction" and I'm going through it now.

It offers a thorough foundation of Human Computer Interaction as a discipline, following an alternate approach which tries to complement usual HCI practice.

Semiotics is "the study of signs and signification", so it views HCI as an ongoing communication process between the software designer and its user - using the particular software artifacts as the form of messages, and describing the whole process with the established vocabulary and insight of the semiotic science. So far it has added some perspective to my other readings on this subject. In particular it gives a sound justification to those techniques often considered less scientific because of their lack of hard data (heuristic evaluation, user personas, scenarios & storytelling...)

This article from Celeste Lyn Paul, HCI Foundations: Theoretical Frameworks talks about other theoretical frameworks.

HCI Foundations: Theoretical Frameworks

martes, octubre 06, 2009

HCI experience storytelling

Experience themes
Narrativa de la intención del diseñador de una interfaz. (Semiótica del diseño de interacción)

sábado, octubre 03, 2009

Chistes de ingenieros vs matemáticos vs informáticos


An experiment was conducted in order to study the differences between programmers, engineers, and mathematicians. One programmer, one engineer, and one mathematician were all locked in separate classrooms for one week. Each classroom contained all of the normal things you’d find in a classroom: chalkboard, chalk, desks, etc. In addition to that each classroom contained water, one can of food (enough to feed a person for a week), but no can opener. At the end of the week, they opened the programmer’s door first. The programmer walked out. When they looked in the classroom they saw the can beat to hell, but opened. When they opened the engineer’s door, the engineer walked out. In the classroom were a bunch of equations and diagrams written on the board, one small dent in the can which was all that was required to open it. Lastly they opened the mathematician’s door. No one came out. They looked in and saw the mathematician laying dead on the floor, the can of food untouched, and a long series of equations on the chalkboard. But at the end of the equations was written the phrase: “A solution exists”.

martes, septiembre 29, 2009

JOLIE, un lenguaje para diseñar SOA

Jolie es un lenguaje específico de dominio (DSL) para programar aplicaciones con "arquitectura orientada a servicios" - permite conectar funciones publicadas en distintos protocolos (D-bus, DCOM, REST...) para conseguir una aplicación compleja. Es "como COM pero bien hecho, 20 años después".

Entrevista con el autor

domingo, septiembre 27, 2009

Docbook y Algoritmo del pintor

Painting / painter algorithm

Grouping using painters

Algoritmo para "decorar" nodos de XML con un lenguaje específico de dominio DSL

miércoles, septiembre 23, 2009

Pensamientos de los Fiordos - futuro de la tecnología actual

Presentación " PPT " con las previsiones de estrategia del mercado tecnológico por parte de una empresa de diseño en Helsinki, Finland que saben lo que hacen.
- Android en dispositivos baratos - commodity
- Mapas (con Nokia y Google como principales competidores)
- Móviles con teclado
- App stores + web apps fáciles de instalar en móvil
- TV móvil
- "The cloud+microblogging" desplaza al PC como "hub central"
- Netbooks para chavales
- 2 dispositivos móviles: teléfono-superbatería + pda-multimedia-net
- Mercados emergentes+tercer mundo: Nokia vs teléfonos baratos taiwaneses


martes, septiembre 22, 2009

Storitelling and Homo Narrativus

A Journal of Impossible Things: Homo narrativus and Pratchett
"Storytelling is the opposite of reductionism; 26 letters and some rules of grammar are no story at all"

RTFM: La respuesta científica

Por qué los usuarios no leen manuales, y cómo esto produce procedimientos estables subóptimos.

Resolving the paradox of the active user Cuenta la historia del usuario que borró un boton en Hypercard poniéndole un rectángulo blanco encima.

aka "I don't want to RTFM" Para responder a esos posts en Slashdot.

miércoles, septiembre 16, 2009

martes, septiembre 15, 2009

Updates del Nokia N800

Mer - Artículo

Mer Website

Midori web browser

Librería Python para Reactive Programming

Trellis es un módulo Python para gestionar "programación reactiva" con facilidad:

The Trellis solves all of these problems by introducing automatic callback management, in much the same way that Python does automatic memory management.

(Instead of worrying about subscribing or "listening" to events and managing the order of callbacks, you just write rules to compute values. The Trellis "sees" what values your rules access, and thus knows what rules may need to be rerun when something changes -- not unlike the operation of a spreadsheet.)

viernes, septiembre 11, 2009

Las 4 posturas del diseño de interacción

Fuente: http://www.cl.cam.ac.uk/~afb21/CognitiveDimensions/CDtutorial.pdf

Pilares del diseño de interacción

Las 4 categorías de actividades de usuario (incrementation, transcription, modification, exploratory design)

  • Incremento: introducción de nueva información no existente en el sistema.

Añadir un nuevo registro a una tabla; añadir una fórmula a una hoja de cálculo.

  • Transcripción: transformación de un tipo de información otro tipo de información diferente, manteniendo esencialmente los mismos contenidos.

Copiar de detalles de un libro a una tarjeta de índice; traducir una fórmula matemática a una en términos de la hoja de cálculo.

  • Modificación: alteración/edición de los contenidos de la información.

Cambiar los términos del índice en un catálogo de la biblioteca; cambiar la disposición de una hoja de cálculo; modificar la hoja de cálculo para calcular un problema distinto.

  • Diseño exploratorio: manipulación de la información con un objetivo, pero sin conocer la forma final deseada.

Diseño tipográfico; dibujar bosquejos o esquemas; programación “sobre la marcha” (`hacks’)

Fuente: Cognitive dimensions

Formación para Formadores

Curso encontrado en el Proyecto Morfeo de Formación y Certificación en Tecnologías Libres:

Formación para Formadores


El e-Learning se ha perfilado en los últimos años como una buena solución para los problemas formativos de las empresas.

El desarrollo de la formación online requiere, por lo tanto, de profesionales cualificados en este ámbito capaces de dar una respuesta efectiva a las necesidades del mercado y de los alumnos.
Las tutorías son una parte fundamental del e-Learning, pues a través de ellas se suplen algunas deficiencias del e-Learning. Para desarrollar sus funciones correctamente, lo primero que tiene que hacer un teletutor es acercarse al e-Learning y comprender todas sus funciones, características y posibilidades.
El presente curso busca instruir a los alumnos en el enfoque pedagógico que deberá tener el tutor online y su capacitación básica con las herramientas destinadas a la formación online.

miércoles, septiembre 09, 2009

Fail fast to create successful projects

Here's what I've learned about how to combat User Discomfort and get your projects started off on the right track. It's a simple 5 step plan that will provide amazing results if done correctly.

1. Solve a real problem
2. Get user input early
3. Create density
4. Provide recognition
5. Fail fast

miércoles, septiembre 02, 2009

Diet planner software

KDiet Planner

Un programa que calcula los parámetros de la dieta introducida a mano, con varios medidores de progreso y de dieta equilibrada


lunes, agosto 31, 2009

The laws of simplicity

Las leyes del diseño simple: como simplificar

The laws of simplicity
Law 1: Reduce
The simplest way to achieve simplicity is through thoughtful reduction.

lunes, julio 13, 2009

n800 code & diablo HOWTO

Howto reinstall diablo n800 in linux

Official maemo page: Other HOWTOs

Reset nokia n800 password
i was able to find the password in /dev/mtd* ...

Install KDE

Proceedings in HCI



viernes, julio 10, 2009

Seen on slashdot: checkbox humor

slashdot posting form

Slashdot Posting Form v0.1
Please select all that apply:
[ ] IANAL but ____
[ ] XKCD link : ___
[ ] Bash quote: ____
[ ] There, fixed that for you
[ ] In soviet russia the _____'s YOU
[ ] sudo _____ > /dev/null
[ ] Get off my lawn
[ ] Cory Doctrow
[ ] Al gore
[ ] Natalie Portman

a.k.a. checkbox humour

martes, julio 07, 2009

Semiótica y diseño de interacción

The Semiotic Engineering of Human-Computer Interaction

"Semiotics has a reputation for being difficult, abstract, and obtuse. This is most unfortunate, for as Clarisse de Souza illustrates in this powerful book, semiotics offers a compelling and novel viewpoint. It is common to think of interaction between a person and technology as communication with the technology. De Souza shows that the real communication is between designer and person, where the technology is the medium. Once designs are thought of as shared communication and technologies as media, the entire design philosophy changes radically, but in a positive and constructive way. This book has changed my thinking: read it and change yours."
—Don Norman, Nielsen Norman Group, author of Emotional Design

Tipos de menú contextual

Aza Raskin


viernes, julio 03, 2009

Crear Wireframes con Firefox

Firefox Pencil Project

(Paper prototypes and wireframes)

Un plugin para Firefox que permite crear prototipos de interacción (wireframes)

Formas de aprendizaje de uso de una interfaz

UI Design Newsletter – June, 2009

Do age and experience impact interaction with devices?

Here's what they notated about strategies during their observations:

  1. Systematic exploration – people are testing and evaluating hypotheses about how the device works and then making plans for the next action to take.
  2. Trial and error – less logical than systematic exploration, people are trying various actions without a plan
  3. Rigid exploration – repetitive actions without meaningful outcomes, people are doing the same things over and over even if they don't work; there is a lack of self reflection
  4. Encapsulation – Focused information searching without an progress in task flow; people continue to search for information even though they aren't making progress in getting the task done

martes, junio 30, 2009

Hash: Password checkword

Métodos y código/programas javascript para generar códigos hash a partir de claves.

Puede servir para programar una extensión Firefox para la usabilidad de formularios de login (mostrando la checkword para comprobar si ha habido errores al teclear)


Por qué PIM es difícil (de los creadores de Haystack)

How and Why Information eludes our Personal Information Management Tools ?

Recopilación de Métodos de Usabilidad

Recopilación de Métodos de Usabilidad

Smart.fm - aprender sin darse cuenta

http://smart.fm/ es una web para aprender un idioma, o una lección, en pequeñas dosis.

jueves, junio 25, 2009

Security vs usability in login passwords

Jakob Nielsen has a recent Alertbox against obscuring passwords with ****asterisks****. Some people has proposed several solutions, but none of them is both secure and usable. I think I've found a solution that is both.

Thinking of this as an information problem instead of (just) a security one,
what is needed to solve it is something like the hash codes as used in

You don't really need to show the *whole* password, just enough
information derived from it so that the user will notice if there was
an error. For an example on how it could work:

- Say, the chosen password is HOMELAND.
- As a simple hash, remove every second letter: HMLN
- Shift each letter one character down: GLKM
- For this result to be usable, combine each obtained letter with the
nearest vowel: GILOKOMO

If the user mistypes the password, a different check-word will be produced.
For example: HOPELAMD -> HPLM -> GOKL -> GIOUKOLO *error, the
password is wrong.

Of course, a real hash function should be used that utilizes *all* the
information in the original password, not half of it! The important
property of a hash function is that the original information can't be
recovered from it, so the password is safe. Much better for security
than a plain-text exposed password, isn't it?

This process has a small usability problem in that you'll have to
learn the check-word for every new used password, but login is such a
repetitive procedure that this learning should happen quickly.

Password field design solutions

3 soluciones para campos de login con contraseña usables.


martes, junio 23, 2009

40+ design patterns websites


Interactive Fiction design

Cómo diseñar juegos conversacionales, entrevista con un experto

1) The pieces of text you write are the player's reward for thinking of the command that calls them up. So make them rewarding. Every diegetic piece of text should have something to recommend it: a joke, a nice bit of imagery, a character insight, something.

2) The player should always have a pretty compelling reason to type something other than QUIT. The fact that something came out of your head may by itself make it fascinating to you, but you'll have to put in some other source of interest and motivation before players will find it so.

3) Get into the habit of finishing things. One of the reasons I've released so many short pieces while working on the long ones is to keep from getting discouraged at working and working and not yet having anything to show for it. One of the best pieces of advice I ever received when I was just starting to write regular fiction was to stop writing the first chapters of epic novels and to instead write a three-page story from start to finish. And then to write a ten-page story, and then a 25-page story, and then an 80-page story, and only then to think about writing a novel. Something similar might well be true for IF. Because of course, you can't write a good game if you don't complete it.

viernes, junio 12, 2009

FOSS cube metalogo, the original

As a follow-up to my previous post:

I've created a logo based in the outline of a Compiz-Beryl cube. It should work as a meta-logo to combine it with the logos from several popular Free-Open Source Software projects. This could help create a common brand identity for such diverse ecosystem.

See the result:

And see how it combines with some other logos.
I've published the .svg source under the Creative Commons attribution, share-alike license.



Más inspiración:

martes, junio 09, 2009

On Linux and meta-logos

In response to Aaron Seigo's thoughts about a common branding for the Free movement:

Given the plurality and diversity of the FOSS ecosystem, the branding effort needs a meta-logo. People really identifies the different client-side kinds of computers through the bitten Apple, the flying Window and the "Intel inside" circle. Tux won't work at that level, it's more of a mascot than a logo.

Thinking of it, there's a distinctive visual landmark of the modern Linux/BSD client, and that's the Compiz-Fusion Rotating Cube. See the outline created by the cube borders in this screenshot:

It is immediately recognizable as a Linux desktop. It can be easily stylized, it's modern and dynamic, doesn't resembles any popular logo, and the best: it works as a meta-logo.

The Cube is a container, so it can be mixed with the logos of any other project. Think Cube containing the K gear, Cube containing Ubuntu circle, Cube containing Google's Android...

The unifying appearance of other desktop elements (colors, wallpapers...) a-la Tango icons guidelines can help, but it will never by adopted in a universal enough way. But a single unified silhouette can be put anywhere, doesn't require rebranding of complete products, and is already quite popular and recognizable as FOSS.

sábado, junio 06, 2009

11 trucos para sacar buenas instantáneas

Consejos para fotografía instantánea

Metáfora para programación

Tradicionalmente se ha equiparado los programas de ordenador con las recetas de cocina.

Otra metáfora quizá más expresiva para referirse a la programación en general y a la programación de interacción en particular, es el mundo de la moda y la alta costura. Los programadores tienen mucho de artistas que utilizan una base muy técnica para hacer creaciones, que deben ser prácticas a la vez de atractivas.

lunes, mayo 18, 2009

More monadic and non-monadic parsers in python

More monadic and non-monadic parsers in python


Some intuitions on Monads

Remember your first lesson in structured programming, when the teacher insisted there where 3 operations for program structure: the conditional (if), loop (while), and sequence (;) operators. Conditionals choose between two alternate control sequences; loops repeat a sequence; and 'sequence' itself defines the order in which simple operations are chained together.

Did you mutter to yourself then, "how can 'sequence' be an operator and not just, well, how the program is laid out in the file?" Well, fact is you really can think of sequence as an explicit operator. And monads are a way to overload that operator, in the OOP sense of operator overloading.

If you have defined a monad in a functional program, you can use it to build a sequence of operations, just like you would in an imperative program. But you can actually change the meaning of the composition in the sequence: every step of your program, the logic in the monad is activated and it decides how (and if) it should perform the next step.

See this example from Monads in Ruby (with nice syntax!):
def with_failable_rbinding(first_divisor)
with_monad Failable do
val1 =xx fdiv(2.0, first_divisor)
val2 =xx fdiv(3.0, 1.0)
val3 =xx fdiv(val1, val2)
Here you have a do-block containing a sequence of divisions composed using the special monadic assignment =xx. Everything executed within the block is handled by the Failable monad, wich is programmed to return a special non-numeric Failure value when a division by 0 is performed:

puts fdiv_with_binding(1.0)
=> Success(0.666666666666667)
puts fdiv_with_binding(0.0)

=> Failure(cannot divide by zero)

For every side effect in traditional imperative programming (control of errors, concurrency, input/output, commit/rollback of the whole application state, non-determinism... and some more) you can get some specific logic added for it, anytime, for free, without any syntactic complexity other than the sequence operation. Better yet, you can change the allowed side effects without actually changing a single line of your imperative procedure, just by redefining the logic encapsulated in the monad that glues the statemens in the procedure together.

See some more of my intuitions on monads here.

martes, abril 28, 2009

Caja de Herramientas de Usabilidad

The Usability Methods Toolbox by James Hom
The Usability Methods Toolbox
brought to you by
James Hom
Welcome to the Usability Methods Toolbox! I've attempted to compile information about almost all of the methods and techniques (well, ok, a lot of them) used in usability evaluation. I hope you find helpful information here, or at least a pointer to additional information that will help you find what you need.

jueves, febrero 19, 2009

Interfaces con fotografías

Recommendations for photography in next-generation interfaces

  • Integrate the images into the interaction design. This can be achieved by making areas responsive to user behaviour, enhancing its function from a visual element to an instrument of interaction. Due to its realistic and nonverbal nature, photography can be equally or more powerful than icons, buttons or other classic interface elements.
  • Work with screen space. Place images in a way that they have a real impact on the overall appearance instead of putting them into small banner-like screen areas.
  • Photography invokes an emotional reaction and has the capability to create a certain ambiance more easily than other media. Use pictures that make the user feel comfortable and adequate to the application context.
  • Clarity, structure, movement, separation, union – photos can convey messages instantly to the viewer, by means of blur, motion, composition, and of course motive. Work with these as design elements.
  • If used as content element, think about alternatives to simply placing photography on a grid. There are a lot of possibilities to make images "tangible" to the user. Think of multiple layers, movable objects, or 3D approaches.
  • Keep the subject of the application and the nature of the content in mind while designing. Choose photos that convey a real meaning and make sense in the application context. Avoid standard (stock) images or those with only decorative function. Prefer custom-made images tailored to your intentions and requirements.
  • Combine and integrate all elements to create a holistic interface design where all visual elements work together and make the interface.

miércoles, febrero 18, 2009

CORE: un engine lógico para usabilidad

CORE es " Constraint-based Optimal Reasoning Engine ":
un motor de razonamiento para modelar modelos mentales


[7] Vera, A., Howes, A., McCurdy, M., & Lewis, R.L.
(2004). A constraint satisfaction approach to predicting
skilled interactive performance. Proc. of the SIGCHI
Conference on Human Factors in Computing Systems.

Google search

Ars Technica - Good PS3 games


lunes, febrero 16, 2009

Idea para un idioma de programación universal usable

Idea clave: reificar los conceptos de "enlace" y "colección".

Igual que la web revolucionó el almacenamiento de información gracias a hacer visible la idea del "enlace" entre documentos, se podría revolucionar la Programación por el Usuario Final creando una entidad "enlace" y otra "colección" que funcionen:
  • como entidades genéricas
  • con una "API" visual sencilla y homogénea
  • que funcionen SIEMPRE, sobre cualquier otra entidad manejable por el usuario (ésto es lo más difícil, haría falta un clasificador universal de información de usuario tipo Nepomuk + URIs).
¿Por qué se puede revolucionar la programación por parte de los usuarios? Ahora no existe una forma sencilla de automatizar tareas:
  • los lenguajes de programación son demasiado abstractos - la separación código/datos es un salto conceptual difícil para no programadores. (El caso más sencillo, el Apple Automator es un lenguaje de scripting, es difícil hacer flujos más allá de lo estrictamente trivial)
  • el Excel es el paradigma más programable a nivel de usuario, pero sólo maneja relaciones numéricas - y no es aplicable a los objetos de interfaz, sólo a bases de datos.
¿Cómo se programaría con "enlaces" y "colecciones"?

  • Un Enlace entre dos objetos permite definir acciones asociadas a eventos (desde un extremo "Origen" está accesible el otro "Destino") con un esquema mental sencillo. Como los enlaces se pueden aplicar a objetos de la interfaz, los enlaces se pueden usar para acceder a información no visible en el estado actual de la máquina.
  • Una Colección permite automatizar una tarea repetitiva (sin las complicaciones del uso de bucles): aplicar una acción a todos los objetos de la colección, o a todos los que quedan tras aplicar un filtro.
  • Tanto Enlaces como Colecciones soportan la "programación basada en ejemplos": los programas se pueden definir sobre datos reales, no como una entidad abstracta separada ("programa") sino como una serie de ediciones de manipulación directa sobre información. El feedback es mucho mayor que con un entorno/lenguaje de programación.
  • Ver la "metáfora del pintor" para crear agrupaciones automáticas:
    • Now, for the following let's think of nodes being white bricks placed in an ordered row on the floor. These bricks can be painted with one (or even several – think: spotty!) colors. The color indicates the element by which the bricks should be grouped.
    • The grouper does one very simple thing: It wraps all adjacent, likewise colored nodes in a parent element (think of this being some kind of bag) that has the same name as the color of the nodes it wraps.So the essential part to be done beforehand is to color the nodes in the desired way. This is a two-step process: First, you need to check the role of each node as far as grouping is concerned and assign it that role by placing a painter on it that knows how to go about painting for this specific role. Second, the painting is actually performed.

sábado, febrero 07, 2009

Docbook Windows Howto

Como generar help files desde docbook en windows

http://mawi.org/articles/DocBook_On_Windows_Bliss.html "One page install in windows"



Herramientas docbook

Libro online:

DocBook: The Definitive Guide


Upcast & Downcast

The DocBook XSL project (http://docbook.sf.net/) has exactly what you
want - an XSL stylesheet that converts DocBook into WordML. The
project also happens to have the reverse as well; XSL stylesheets that
convert WordML into DocBook.

You may need to look in the CVS repository to find the stylesheet(s);
I'm currently working towards having them included in the distribution.

Stock options HOWTO

Preguntas interesantes si te ofrecen stock options

Specific questions to ask:

1. What's the vesting schedule? Others have touched on this. It is the single most important factor to consider. Half now and 1/120th per month for 60 months is a lot different than a bulk grant that vests in 2014.

2. Can you vote and/or receive dividends on unvested shares? Control matters, and dividends matter even more. In many states, you can be fires without cause at any time. That includes one day before your shares vest.

3. What kind of shares are they? I would not accept common shares in this situation; I would insist on preferred shares. Preferred shareholders are paid dividends first and if the company is liquidated they receive the proceeds first (though a consulting company isn't likely to have much in the way of assets).

4. What is the company's existing and potential future capital structure? If the company has a great deal of debt, you aren't likely to receive much money. If your approval is not required to issue more shares, especially more preferred shares (possibly senior to your own) then you may find your stake nearly worthless when future employees or investors are issued new shares.

5. What does the company's balance sheet look like? Most small companies have little or no assets. This means they should also have no debt. But in either case, be aware that you are buying shares that have little or no liquidation value. If the company's operating performance suffers, it is likely to go bankrupt and your shares will be worthless.

6. What do the recent income and expense reports look like? What do the current bookings look like? You need to know exactly who the customers are, how diverse they are, and what their future commitments are.

7. Do you trust management? Are they owners? Do they have control?

8. Will you get a seat on the board? If so, who else is on the board? Do you trust them? Are any of them independent?

9. Last, and deliberately least because we are considering an investment here, do you like the work? Your coworkers? Is this an environment in which you want to spend your time? This helps you figure out what you're giving up by staying; you might also earn a higher salary elsewhere or enjoy other perks that you must value against the compensation you would receive by staying.

Quite frankly, as a dotcom bust veteran, I don't value equity very highly. This is especially true of companies with little in the way of tangible assets and even more true if it's common equity. This situation would have to be almost perfect for me to even consider it; i.e., the answers to almost all of the above questions would need to be favourable.

Let's ask one more question, of ourselves, that might help lay the issue to rest:

10. Why wasn't I inquiring about buying shares in this company before the offer was made?

miércoles, febrero 04, 2009

Proyecto Euler - programación y matemáticas

About Project Euler

Leonhard Euler (1707-1783)

What is Project Euler?

Project Euler is a series of challenging mathematical/computer
programming problems that will require more than just mathematical
insights to solve. Although mathematics will help you arrive at elegant
and efficient methods, the use of a computer and programming skills
will be required to solve most problems.

The motivation for starting Project Euler, and its continuation, is to
provide a platform for the inquiring mind to delve into unfamiliar
areas and learn new concepts

martes, febrero 03, 2009

"Estilos extremos" en MS Word

Howto de uso eficiente de estilos. Consejos avanzados de uso de estilos y plantillas (templates)

  • Style (defined by Microsoft)
A combination of formatting characteristics, such as font, font
size, and indentation, that you name and store as a set. When
you apply a style, all of the formatting instructions in that style
are applied at one time.
  • “Extreme” Advantages
– Saves oodles of time
– Adhere to corporate standards / style guide
– Format pasted text easily
  • Access & Select Styles
– Style Pull-down menu
– Styles and Formatting Task Pane

domingo, febrero 01, 2009

Qué debes saber para comprar un descodificador de TDT

1)Guia para comprar un receptor TDT.

2)Qué debes saber para comprar un descodificador de televisión digital terrestre

Pablo Nieto. 23.05.2006 - 20:08h
Qué debes saber para comprar un descodificador de televisión digital terrestre

EPG: Guía Electrónica de Programación que puede visualizarse de forma paralela a los programas. Es un contenido en forma de fichas de texto que indica los horarios, nombres y contenidos de los programas.

Receptor Dual: Imprescindible para poder grabar y ver canales diferentes a la vez o grabar dos canales de forma simultánea.

Conexiones recomendadas: Dos Euroconectores (SCART), una para el televisor y otra para el vídeo, una entrada de antena y una salida de antena, salida de sonido analógica y digital, puerto USB y conexión LAN.

Picture in Picture (PiP): es la función que nos permite estar viendo un canal y a la vez visualizar otro diferente en una pequeña pantalla ubicada en una esquina de la imagen.

Time-Shift: Es una función de grabación que nos permite comenzar a visualizar un programa que aún se está grabando. Se utiliza, por ejemplo, cuando llegamos unos minutos tarde a ver una película o cuando suena el teléfono y tenemos que interrumpir el visionado del programa.

Formatos compatibles: MPEG, MP3, JPG, BMP, DivX... Cuantos más, mejor.Descodificador de TDT.

Conexión de Red: Mediante una conexión Ethernet podremos comunicar el receptor de TDT con nuestro ordenador. Así, por ejemplo, desde el receptor podremos hacer uso de los archivos multimedia del ordenador.

Conexión inalámbrica: La conexión de red puede ser WiFi, aunque sea a través de un accesorio.

Grabación: Si queremos grabar es necesario que incorpore doble sintonizador y que integre un disco duro, o al menos admita la conexión de uno a través de USB o LAN. Si además permite reproducir música, vídeo o imágenes almacenados en el disco duro, mejor.

Guía TV: Se trata de un sistema que desarrollan los fabricantes de los dispositivos que permite conocer con antelación la parrilla de programación que emiten los canales.

viernes, enero 16, 2009

Prototipos con Visio y Java

Plantilla y tutorial para maquetas con MS visio:


STC Usability SIG Newsletter: Usability Interface

Usability SIG Logo
Prototyping Using Visio

DENIM: Herramienta experimental de prototipado en Java, Universidad de Washington




Microsoft Visio