When I started looking into functional languages in 1998, I had just come off a series of projects writing video games for underpowered hardware: Super Nintendo, SEGA Saturn, early PowerPC-based Macintoshes without any graphics acceleration. My benchmark for usefulness was "Can a programming language be used to write complex, performance intensive video games?"
After working through basic tutorials, and coming to grips with the lack of destructive updates, I started thinking about how to write trivial games, like Pac-Man or Defender, in a purely functional manner. Then I realized that it wasn't performance that was the issue, it was much more fundamental.
I had no idea how to structure the most trivial of games without using destructive updates.
Descubrimientos de una inteligencia artificial que supera el test de Turing
On the Internet, everybody knows you're a chatbot.
Buscar en Mind w/o Soul
lunes, junio 30, 2008
Programar videojuegos en un lenguaje funcional
Lista Robinson - proteje tus datos personales
La Lista RobinsonFECEMD - Federación de Comercio Electrónico y Marketing Directo - Listas Robinson
¿Está harto de recibir en su buzón infinidad de folletos, cartas, anuncios sobre productos y/o servicios que no le interesan en absoluto? Si éste es su caso, usted puede apuntarse a la llamada Lista Robinson.
Esta lista recoge los nombres y direcciones de todas aquellas personas que no desean recibir publicidad por correo. Adhiriéndose a este sistema, usted dejará de recibir al menos la publicidad de todas las sociedades pertenecientes a la Asociación Española de Marketing Directo (AEMD); actualmente, cerca de 200.
La <> de la Lista Robinson no alcanza, sin embargo, a los impresos sin dirección y depositados en mano en su buzón; las revistas gratuitas; los impresos insertos en revistas o en sus facturas; y la publicidad de empresas no adheridas al servicio.
Servicio Listas Robinson
Es un servicio gestionado por la Federación de Comercio Electrónico y Marketing Directo, con el fin no lucrativo de reforzar las buenas relaciones entre los profesionales del sector y el público en general.
El Servicio de Listas Robinson se enmarca en el ámbito de la publicidad personalizada, es decir, aquella publicidad que recibe un usuario a su nombre y dirección, y está dirigido a consumidores particulares y empresas.
Protección de datos - cómo pedir la exclusión
Derecho de Exclusión
Modelos de ejercicio del derecho de exclusión
Ejercicio del Derecho de Exclusión de la utilización de los datos para fines de publicidad y prospección comercial.
Ejercicio del Derecho de Exclusión en los Repertorios Telefónicos de acceso público.
viernes, junio 27, 2008
Uno que no le gusta el futbol
A pesar de que sus orejas son enormes y me cuesta, pero de qué manera, contener mis ganas de agarrárselas y etcétera, etcétera contra el borde de una mesa, intento razonar con él, si es que algo así es posible. Le hablo de la belleza plástica de ver a los representantes de tu nación humillar con el poder de su hombría y la magia que nace de sus botas en forma de regates a otras naciones enemigas. Le explico lo emotivo que es ver cómo el equipo de tu ciudad remonta un resultado adverso para llevarse a casa una copa. ¡Una copa! ¡Una copa grande! ¡Un copón de mucho cuidado! ¡Con lo pesado que es limpiar el polvo de esas cosas! Le hablo de ese suspiro contenido mientras la pelota surca el aire, gira producto del efecto y toca la red, rozando el palo y haciendo que cientos de miles de personas griten al mismo tiempo. Le digo esas cosas y muchas más hasta que la erección que se inició con mi discurso hace que me
duela la etcétera.
Su respuesta… No me atrevo a… Fue… Dijo que… Me cuesta respirar. Pero
tengo que hacerlo. Lo escribiré… Aunque duela… Y no hablo de la
etcétera… Dijo: “Pues a mí me aburre”.
“A mí me aburre”.
miércoles, junio 25, 2008
The Little Prg'mer
The Little MLer
The Little Schemer
The Seasoned Schemer
A Little Java
The Little MLer
How to Design Programs
The Reasoned Schemer
martes, junio 24, 2008
Ubuntu Mobile
We know darn well that Ubuntu Mobile uses a lot of the open source code from Hildon, well developed by Nokia's maemo team. With this latest news, the code can be flowing both ways. Ubuntu Mobile developers may well be working on porting their existing interface to the Nokia Internet Tablets! And why not? It's an interesting interface and has common goals with Nokia. Hop over to this article to see what I have learned of Ubuntu Mobile so far.
El juego de la memoria histórica
KAOSENLARED.NET ::: El Juego de la Memoria Histórica.El lanzamiento de este didáctico juego de preguntas y respuestas
se engloba dentro de los actos de homenaje previstos para este
recientemente designado Año de la Memoria. Es
nuestra aportación al merecido reconocimiento de todos los
hombres y mujeres, injustamente relegados al olvido, que a lo largo de
la Historia han luchado por hacer de nuestro país un lugar
libre, justo e igualitario.
En la primera modalidad, "Preguntas de todas las categorías en orden", las preguntas se irán mostrando en el orden establecido en el cuadro que indica la evolución del juego. Aparecerá una pregunta de cada una de las seis categorías y al llegar a la última se volverá a empezar de nuevo por la primera.
En la segunda modalidad, "Preguntas de categoría aleatoria", las preguntas irán apareciendo al azar sin ningún orden establecido.
En la tercera modalidad, "Preguntas de una categoría elegida", todas las preguntas serán de una misma categoría elegida previamente por los jugadores.
Aprovechamos para daros las gracias por la excelente acogida que está teniendo este proyecto de memoria histórica y os animamos a seguir participando enviando sugerencias y proponiendo preguntas
lunes, junio 23, 2008
El iceberg de UI
affective design » The User Experience Iceberg
when the User Experience Iceberg is used to add context to the Elements, it illuminates the dark, unknown depths for project stakeholders who are new to UX. Because in the end, the unseen elements of user experience are the parts of the iceberg that will sink your project, while your stakeholders are busy focusing on the “tip”.
You can view the UX Iceberg slides below and download the UX Iceberg slides from Slideshare to add to your UX presentations.
Arquitecturas imposibles
Las figuras 3-D imposibles de Andreas Aronsson | Microsiervos (Arte y Diseño)
Las figuras 3-D imposibles de Andreas Aronsson
Andreas-Aronsson
La colección de figuras imposibles de Andreas Aronsson es interesante por el tipo de perspectiva que utiliza (denominada no-isométrica) lo cual junto con el fondo cuadriculado les da un extraño y curioso toque de «realidad» añadido.
jueves, junio 19, 2008
Mónadas: intuiciones
- una Monad es un módulo funcional con estilo Inversion of Control. (Es decir, se pueden construir funciones que usan la mónada como parámetro, y la ejecución de la mónada llama a estas funciones en el orden adecuado).
- el type constructor M es el functor usado para construir expresiones del tipo monádico. (La "declaración" del tipo monádico).
- la unit function transforma un valor normal en un valor del tipo monádico (el "cuerpo" del constructor de tipo monádico).
- el método Bind (>>) de una mónada recibe argumentos, y una continuation. (Es decir, para construir la definición de la mónada tenemos que indicar cómo se combinan las funciones a las que hay que llamar, y para controlar ese flujo utilizamos un estilo de programación con continuations).
Considerando lenguajes como Nombre Verbo: Si en programación orientada a objetos los objetos son nombres (son una abstracción de un dato o conjunto de datos reutilizables), en funcional las mónadas se podrían considerar verbos (son abstracciones de computaciones reutilizables).
Me autocito de la Wikipedia:
Intuitively, the type constructor would correspond to a type declaration, the unit function takes the role of a constructor method in OOP, and the binding operation contains the logic necessary to execute its registered callbacks (the monadic functions).
Formally, a monad is constructed by defining two operations bind and return and a type constructor M that must fulfill several properties to allow the correct composition of monadic functions (i.e. functions that use values from the monad as their arguments). The return operation puts a value from a plain type into a monadic container of type M. The bind operation performs the reverse process, extracting the original value from the container and passing it to the associated next function in the pipeline.
Principios de diseño de interfaces de usuario
This document represents a compilation of fundamental
principles for designing user interfaces, which have been drawn
from various books on interface design, as well as my own
experience. Most of these principles can be applied to either
command-line or graphical environments. I welcome suggestions for
changes and additions -- I would like this to be viewed as an
"open-source" evolving document.
Programación Orientada a Lenguajes
Chris Smith's completely unique view
I will define what LOP is: Language Oriented Programming is a style of programming that tries to produce code that looks like it came from a Domain Specific Language but is still valid in a general purpose programming language.
The rest of this essay will provide examples of LOP in F# and how using LOP results in simpler code that better expresses the problem at hand. I’ll my examples along three major themes:
* Abstract Representation. Features in F# that allow you to represent domain-specific concepts in your F# code without needing to introduce a new layer of abstraction.
* Concrete Representation. Features in F# that allow you to describe your problem in another language and load that into F#.
* Computational Representation. Finally I’ll go into features in F# that enable you to write code to process concepts in some other language without resorting to a third, more specialized language.
La teoría de la relatividad, sin fórmulas
En la entrada del “pozo intuitivo“, manolo me pide que explique por qué no se puede ir más rápido que la velocidad de la luz. Le he estado dedicando tiempo a pensar cómo hacerlo sin usar fórmulas y sin dar cosas por sentado, para que no sea simplemente “pues porque esta ecuación dice que haría falta una energía infinita”, que es lo que suelo leer por ahí…y no puedo hacerlo. Al menos, no sin establecer unas bases antes.
De manera que, al final, he decidido “tirar por el camino de enmedio” y dedicar una serie entera de Ahora que lo pienso… a la Teoría de la Relatividad Especial, y de paso contestar a la pregunta de manolo. Eso sí, siendo esto El Tamiz vamos a intentar no utilizar fórmulas sino hablar de las cosas cualtitativamente. Mi objetivo es explicar que todas las “cosas raras” que parecen pasar cuando vas muy rápido (la dilatación del tiempo, contracción de la longitud, etc.) son consecuencias muy lógicas e inevitables de un punto de partida muy sencillo.
miércoles, junio 18, 2008
Huevo de pascua en Firefox 3
Bug 417302 – about:robots
Poema original:
The robots were created by man.
They evolved.
They rebelled.
There are many copies.
Interfaces adaptativos: la exactitud, más importante que la consistencia
Two research articles on adaptive interfaces:
- the first one shows that accuracy is more important than predictability to achieve a useful interface.
- the second studies several alternative designs for adaptive interfaces, and finds a dedicated "smart menu" to be the best option.
---
Dos artículos sobre interfaces adaptativos:
- el primero indica que la precisión es importante
- el segundo estudia qué estructura adaptativa es más eficaz
Predictability and accuracy in adaptive user interfaces
We present a study that examines the relative effects of
predictability and accuracy on the usability of adaptive UIs.
Our results show that increasing predictability and accuracy
led to strongly improved satisfaction. Increasing accuracy
also resulted in improved performance and higher utilization
of the adaptive interface. Contrary to our expectations,
improvement in accuracy had a stronger effect on performance,
utilization and some satisfaction ratings than the improvement
in predictability.
Exploring the Design Space for Adaptive Graphical User Interfaces
...fast and largely mechanical
interactions caused users to pay more attention to the operational
properties of the interfaces. For example, in the
more complex and more slowly-paced interactions of the
first experiment, users were less concerned with distance
between the extra toolbar and the original location of the
adapted buttons but they frequently commented that they
appreciated that all relevant functionality was grouped in
one place, allowing them concentrate on the task rather
than on navigating the interface.
...it is surprising that Greenberg’s design proved
successful, since it drastically restructures the interface
after each adaptation. This result might be explained by
the very high complexity of the interface (a hierarchical
menu with over a thousand leaf elements), which prevented
the users from developing strong motor memory
for the location of different elements.
Madrid fue capital de Armenia
León V de Lusignan era rey cristiano de Armenia desde 1374.
Finalmente, decidió visitar también a Juan I de Castilla quien, en un arranque de generosidad, le regaló el señorío de Madrid, Andujar y Villarreal (Ciudad Real) con sus rentas, amén de 150.000 maravedíes de pensión.
Y así, León V trasladó e instaló su Corte en Madrid, que se convertiría en la nueva y efímera capital del reino de Armenia.
Tipos abstractos de datos en Javascript
Algebraic Data Types in JavaScript - w3future.com
Introduction
Algebraic data types are types like you can declare in Haskell with data declarations. If you are not familiar with Haskell, you can try the Wikipedia page about algebraic data types.
I have written the library in Javascript 1.8, which means that as of this writing it only runs in Firefox 3.0. I have chosen to keep it 1.8, because the code is a lot cleaner, thanks to the new expression closures. But there is nothing that cannot be made to work in ECMAScript edition 3. And I have no doubt that the same thing could be done in Python or Ruby.
martes, junio 17, 2008
El zoo de los minilenguajes
The Programming Language Zoo
The Programming Language Zoo
On this page you will find on display a number of mini languages which demonstrate various techniques in design and implementation of programming languages. The languages are implemented in Objective Caml.
I teach Theory of Programming Languages (page in Slovene) at the Faculty of Mathematics and Physics of University of Ljubljana. For the course I implemented languages which demonstrate basic concepts such as parsing, type checking, type inference, dynamic types, evaluation strategies, and compilation. My teaching assistant Iztok Kavkler contributed to the source code as well.
The languages are not meant to compete in speed or complexity with their bigger cousins from the real world. On the contrary, they are deliberately very simple, as each language introduces only one or two new basic ideas. You should find the source code useful if you want to learn how things are done.
Juegos avanzados online
What’s especially impressive is that these games are not even based in Flash or Silverlight. Rather, they run on top of a cross-browser compatible, 150k custom plugin that only has to be downloaded once. The plugin, which has been developed for two and a half years, works with games that are programmed in pretty much any language (C++, Java, Python, etc.).
Escritorio
So its just one question, Do you think this works as an wallpaper?
Retro - frikis
20D-2Dc
En Christie’s subastan un dado romano del siglo II, lo que acertadamente describieron en Clipset con un nuevo y genial término:
retro-frikismo
No redimensiones la ventana!
No redimensiones la ventana!
Al iniciar la página se redimensionará la ventana, mas allá de las ganas que tengas de maximizar no lo hagas, un buen corto jugará con tamaños y movimientos de tu navegador.
Visualización de contribuciones a código libre
code_swarm
This visualization, called code_swarm, shows the history of commits in a software project. A commit happens when a developer makes changes to the code or documents and transfers them into the central project repository. Both developers and files are represented as moving elements. When a developer commits a file, it lights up and flies towards that developer. Files are colored according to their purpose, such as whether they are source code or a document. If files or developers have not been active for a while, they will fade away. A histogram at the bottom keeps a reminder of what has come before.
Please have a look at the videos below. Each one shows a particular software project's evolution.
lunes, junio 16, 2008
Separation of Concerns
Recent approaches such as adaptive programming, aspect-oriented programming, composition filters, role-modeling and subject-oriented programming have enhanced object-oriented programming by providing separation of concerns along additional dimensions, beyond "class." Multi-dimensional separation of concerns is more general, and its goals are more ambitious, than these approaches; considerable research is still required before any existing approach fully achieves the goals listed above.
Tutorial Maemo - manual de programación
Nokia releases Internet Tablet development manual
By Ryan Paul | Published: December 12, 2007 - 08:37PM CT
Nokia has officially released the Maemo 4 training manual, extensive documentation for third-party Maemo application developers. The manual, which consists of three distinct guides, is intended to serve as a starting
jueves, junio 12, 2008
Consejos para sobrevivir en el siglo 10
Marginal Revolution: Time travel back to 1000 A.D.: Survival tips
I wanted to ask for survival tips in case I am unexpectedly transported to a random location in Europe (say for instance current France/Benelux/Germany) in the year 1000 AD (plus or minus 200 years). I assume that such transportation would leave me with what I am wearing, what I know, and nothing else. Any advice would help.1) Wouldn't *I* be the one infecting everyone else, rather than the other way around, because I'll have
the antibodies for all the futuristic strains infesting me and they won't?2) Tell them that the aeolipile (sp?) is not just a toy; steam power has untapped potential.
3) Teach them about mass production and automation. (actually, don't know what specifics I could give here)
4) Teach them about sanitation and hygiene.
5) Back up all claims with bets, putting up whatever wealth you can get as collateral.
6) Teach them Bayes's Theorem -- an even better epistemology than the scientific method.
7) Teach them the Put-Call Parity Theorem so they can discard their prejudices against usury.
8) Teach them Ricardian comparitive advantage so they can discard their prejudices against foreign goods.
9) Most of all, advise them, in no uncertain terms, not to be timist. (That's like racist, but against people
from a different time.
miércoles, junio 11, 2008
Buenas noticias...
Google News
A New Era Dawns for China and Tibet
Guardian Unlimited -
LHASA (AP) - Tibetan culture is poised to flower again as thousands of exiles return, thanks to the series of historic meetings between Chinese leaders and the Dalai Lama which have resolved longstanding...
"Lost" Buddhist texts returned from secret Beijing storehouse
Dalai Lama, Panchen Lama to reunite in Lhasa
NDTV.com |
Reuters -
BAGHDAD (Reuters) - UN observers have pronounced phase one of the McNally-Dey plan to uplift Iraqis and promote democracy "a rousing success," citing numerous cases of families transformed by the US government's $17,000-per-capita payout...
Payoffs an Immense Savings Compared to War
Goodwill Gesture Derails US Tensions with Iran
lunes, junio 09, 2008
Elisa - Linux media center
Elisa - Home
Elisa is an open source cross-platform Media Center connecting the internet to your all-in-one media player.
domingo, junio 08, 2008
Acceso WEP
http://www.smallnetbuilder.com/content/view/24244/98/
http://www.governmentsecurity.org/archive/t15149.html
viernes, junio 06, 2008
Videojuego electoral
The ReDistricting Game
"It is not easy to make the redistricting process understandable -- and near-miraculous to be able to do so in a highly entertaining way. But that is just what The Redistricting Game does, to the gratitude of all who want Americans to understand how this process is working, and why it needs real reform."
Aprende a hablar chino con un juego / mundo virtual
A team of developers supported by Michigan State University and the Office of the Chinese Language Council International have spent the past few years piecing together Zon -- a browser-based virtual world wherein users can learn the Mandarin Chinese language. The game is currently in its open beta phase; you can sign up to play right now.
miércoles, junio 04, 2008
El mundo a tu alcance
The sum of all human knowledge at your fingertips,
and you're searching for "Britney Spears".
El mundo a tu alcance
Tienes al alcance de tus dedos la mayor suma de conocimientos de toda la humanidad y lo único que se te ocurre es buscar «Britney Spears»
martes, junio 03, 2008
YubNub: una CLI sobre la web
Jon Aquino's Mental Garden: YubNub: My entry for the Rails Day 24 hour programming contest
What is YubNub?
YubNub is a command-line for the web. After setting it up on your browser, you simply type "gim porsche 911" to do a Google Image Search for pictures of Porsche 911 sports cars. Type "random 49" to return random numbers between 1 and 49, courtesy of random.org. And best of all, you can make a new command by giving YubNub an appropriate URL.
Well I have completed my submission for the 2005 "Rails Day" 24-hour
programming contest. The idea was to make the coolest program in 24
hours, using a wonderful programming system called Ruby on Rails. I made a web application called YubNub (haven't had a chance to make it publicly accessible -- will do soon).
lunes, junio 02, 2008
Tutorial: Prototipos en Flash
I was excited to find that Flash not only felt more streamlined and intuitive when creating basic click-throughs, but it also offered almost limitless potential for prototyping rich interactions. With some basic ActionScript (a scripting language used in Flash to define interactions) knowledge and a bit of resourcefulness, I was able to create functional combo box navigations, type-ahead mechanisms, and eventually a complex, drag-and-drop scheduling application similar to Google Calendar. And whenever the screen designs changed, all I had to do was import the new background images, while the interactivity layers stayed happily in place, requiring only minimal tweaking.
Screencast de KDE 4.1
Too many things are going on in this amazingly dynamic community, and really interesting ones. I have recorded a screencast which can speak by itself on what way KDE 4.1 is different to 4.0. This way we can see the huge step we have made between .0 and .1 series. I really believe the progress is now a matter of time. We’ve reached a point right now that our libraries are in a pretty good shape, and our applications are stabilizing again.
You can download the screencast from here (71 MiB). It is impossible to make a screencast that shows all the new features and all the stuff, but is only for letting you make an idea of how things are going in SVN, and how 4.1 looks like.