Posts by author chous

Si eres legal comparte

Acabo de leer una entrada en el blog de Partido Pirata relativo a luchar contra la campaña del gobierno de 'si eres legal, eres legal', utilizando una web alternativa si eres legal, comparte, y tratando de desbancarla de las primeras posiciones en google mediante un google-bombing. Aunque dudo mucho que sirva para algo, aquí van mis 2 cents :).

La 'clase política' es un fraude. Por un lado, los 'representados' podemos tener cierta inclinación a pensar que ante la duda ellos serán deshonestos, o tratarán de convencernos de sus mentiras si es necesario. Por otro, hay un 'tufillo' constante en la clase dirigente de 'triunfo', lo cual va arropado por su día a día de contactos con círculos de poder. Y eso es lo que al final hace tergiversar algo tan simple como la virtud de la generosidad. Hay intereses creados que, por estar más cerca de la clase política (desayunan o comen juntos, son 'colegas', etc.), contaminan de mercantilismo hasta los valores más fundamentales.

Por hacerlo más claro. Compartir está por encima del beneficio o pérdida económico. Las patentes no funcionaron para lo que se inventaron, sólo han servido para comprometer la innovación y hacerla un bien especulativo que pocas veces repercute en algún avance para la sociedad.

  • Posted: 2008-12-24 09:25
  • Author: chous
  • Categories: (none)
  • Comments (0)

Agile Methodologies considered religion

Last years I've tried to avoid Agile. Probably those days will be soon gone, since in the company I work for there's a strong commitment to adopt agile methodologies from the near future on.

So I'll have to adapt, I guess. There's no much space for discussion, but I still think Agile success means a failure in software engineering. Sounds dramatic, but I think its popularity has grown exclusively in business-focused software, since it's good to control (not exactly manage) software projects.

The main reason why agile practices are so popular among non-technical people is because it allows the software to follow their short-term criteria. They get the control, and they are no longer required to think deeply into their requirements, since the great news is that they can adapt when they actually see they were wrong. So now we have to deal ourselves with their trial-and-error approaches. This comes with the fact that now we (software engineers) have lost power. Maybe we didn't want it, or didn't use it, but it's gone. We are expected just to follow orders, and at the same time we don't need to think if what we develop will be able to handle probable future requirements. Nobody cares about them anymore.

Summarizing the point, we've lost the most precious area of our profession: modelling the abstractness. And nobody is doing it.

So I received some workshops about Agile. Of course, everything is carefully presented: all keywords are positive, some "benefits" but no "drawbacks" slides, and the annoying fallacy 1 of trying to prove Agile is correct by exaggerating waterfall possible outcomes.

I tried to find people daring to say they don't like agility, and found one 2. However, if you read the comments, youĺl see what I perceived in the workshops: there's no discussion, Agile is good, if it doesn't work for you is your fault.

What kind of approach is that? What is Agile invented for? To exalt the reputation of the Manifesto signers? To build a business on top of that? To write useless3 books? Do we need this? I don't buy it. I don't accept becoming a "believer" of someone else's ideas. Why Agile is not applied to non-business (-focused) software development, such as free software? I was told they're completely different stuff. Sure, but they define what we should consider success, in terms of software.

Probably I'm upset because I'm about to lose what I've fought hard to achieve. Say respect, confidence, long-term results, while keeping the eye on the business. All this, thanks to think abstract, to look further what I was told to do, to care about what I do, and to avoid thinking exclusively if this is taking too long.

From my point of view, we are asked to get rid of the engineering stuff and do only what we're told to do. In practice, this is a list of business-visible features. It's not only that the rest is not important, but the lack of flexibility to non-feature-oriented tasks means they won't be supported in practice. In other words: nobody but us wass doing engineering. Now we have to copy that if we want to be "good enough".


  1. 1. http://en.wikipedia.org/wiki/Argumentum_ad_baculum Argumentum ad baculum
  2. 2. http://antiagile.indigenious.ro/ Agile Development in Outsourcing Considered Harmful
  3. 3. I have only regretted of purchasing two books: One from Robert C. Martin and one of Martin Fowler

chous, ecamino, wiily

This blog is used by a group of individuals who don't share some of their interests, but we're friends. We use this blog to say whatever we want, to get feedback from others, and to hear critics from whoever dares! :D.

The participants' interests range from software engineering, politics, free-software, and anything they eventually think worth publishing.

  • Posted: 2008-09-21 07:51 (Updated: 2008-09-22 17:59)
  • Author: chous
  • Categories: about
  • Comments (0)

Smart ps

Just a minor Linux hack. You can override ps command to get rid of the usual | grep -v grep.

Define your own ps version in /usr/local/bin:

#!/bin/bash
/bin/ps $@ | grep -v -e "^.* \+.\+ $$ \+.*" | grep -v grep

Don't forget to make it executable, but make sure you have complete control of the basic commands you execute, since overriding commands such as ps is the first thing to do when implementing rootkits.

QueryJ screencast

I recorded a screencast that describes the methodology we use at Ventura24 regarding designing, modelling and accessing persistence layers from an application.

I'd have wished to spend more time explaining QueryJ in particular, but it was only part of what we wanted to describe. Anyway, you can enjoy the QueryJ experience without installing it :).

The screencast is 50-minute long, and take into account I'm not as fluent in english as I'd like.

There're two versions, the original (1280x1024), in both ogg format, and one adapted for ipod.

In any case, I'd be glad to hear about your comments.

QueryJ meta-language

As you may already know, the main development of QueryJ is right now being pushed by Ventura24 requirements.

We are including more features as soon as we find nice-to-haves. First, the query validation, the customization of templates to make Spring be aware of heterogeneous transactions (Connection/DataSource), some performance improvements, and so on.

Lately I made QueryJ support a dsl to support logical statements as part of the comments of the physical table model. So far, the following statements are interpreted:

  • static column-name

Used to improve performance by avoiding the need to access the database to operate on certain static tables, such as typecodes. This keyword makes QueryJ generate constants in the Java side with the contents of the table, at development time. The column-name is used to build the constant name.

  • @isa parent-table

Identifies the table as a child of given one. This means it inherits parent's attributes and relationships, besides its own.

  • @isatype type-table

For a parent table in an ISA relationship, it indicates which additional table is used to specify all possible children. That is generally not needed in practice, but makes the ISA more clear and self-explanatory.

  • @decorator

Indicates all DAO operations will use a decorator instead of a plain ValueObject. This is useful in refactorings, in which you had a ValueObject with a number of attributes (since its associated table was pretty wide), and you change it to use a metadata table(s) for the optional ones, so you can add more in the future without DDL changes. In such case, the API for the ValueObject changes, but you can make it appear as if it were the same, by using decorators. Since this kind of refactoring changes the API significantly, you'd end up with a lot of compile errors throughout all client code. Using @decorator allows you to reduce such errors by changing ValueObject to ValueObjectDecorator, and writing (and caching) logic for retrieving the missing attributes via DAO calls.

  • @relationship (foreign-key1),(foreign-key2)

This indicates to QueryJ that the table is an implementation of a many-to-many relationship, and that it makes no sense to build DAO or ValueObject for it.

  • @readonly

It's used to indicate that the column is managed completely at the database side, and that it cannot be modified from the application. This is usually the case of last-modified or creation-date helper attributes: you don't want/need them to be parameters in Java by any means. With this keyword, you can access them, but you're never supposed to specify them.

  • @bool trueValue,falseValue[,nullValue]

Denotes a column is a boolean value, regardless of its declared type. QueryJ declares it as boolean in the Java side, and transforms its value to given constants when accessing the database. In case the column is not nullable, and you want to be able to work with null values in the application, you'd then specify also the value to represent nulls.

  • @isarefs (value1, child-table1) ... (valueN, child-tableN)

For static tables used as helpers of ISA relationships, this keyword can be used in the actual attribute that enumerates all possible ISA children. That will be used in the future to improve ISA support by omitting redundant information from the child tables. This only makes sense in tables referred by ISA parents via @isatype keyword.

  • @oraseq sequence

This keyword attaches an Oracle sequence to a concrete attribute.

For more information, please take a look at the ANTLR grammar.

Enjoy!

Blog/podcast thoughts

I read somewhere the average lifetime of a blog is 6 months.

Despite I write less often lately, and that my posts are brief explanations of simple scripts or news, I plan not to stop writing.

Now I'm not sure whether using Trac as blogging system fulfills my needs. I don't really care about formatting too much, so wiki-like format support is enough for me. The important thing is RSS. I'll go on with current deployment, since anyway I don't think I have enough hardware resources to install a separate blogging system.

The reason why I wanted to start blogging has not changed: I still like to share some opinions, thoughts, or pieces of work. At first it can be a little embarassing, but it also pays back.

So I'll try to retake some unfinished topics. But during last year, I've become a podcast addict1, even though all I listen is in english and I don't understand everything since it's not my mother language.

However, yesterday I downloaded a podcast entry from Adam Curry's Daily Source Code, that I did enjoy very much, up to the point to consider the possibility to do some amateur, home-made, podcasting myself.

The problem is that it takes time, it's much more embarrassing than plain blogging, and nobody I asked to is interested in co-authoring it.

Let's see if I have real guts at last...


  1. 1. This is my opml

  • Posted: 2007-07-22 08:05 (Updated: 2007-07-22 08:08)
  • Author: chous
  • Categories: chous
  • Comments (0)

Server moved to Atlanta

The websites for www.acm-sl.org, svn.acm-sl.org, and www.acm-sl.com have now moved to a remote UML-based hosting.

The server is not full of resources, but now that I can compare I think the bottleneck was my home ADSL connection. Let's hope hosting provider offers vserver-patched uml-compatible kernels someday soon...

  • Posted: 2007-07-21 09:08 (Updated: 2007-07-21 09:09)
  • Author: chous
  • Categories: chous
  • Comments (0)

Script to display inline descriptions of USE flags from emerge -uv output

When updating a gentoo system, knowing what are each USE flag for is important. USE flags affect how each package is built, whether it includes support for optional features, and so on.

For that reason, I pay attention to each flag. It makes me constantly grepping /usr/portage/profiles/use.* to know what is the meaning of each flag.

I've created a script to parse emerge -uv output and display the description of each affected flag, so that you can setup your /etc/portage/package.use/ file accordingly.

If you're interested, you can find it here.

Script to sort USE flags

When updating my system, mplayer got affected, and I found out that I already had a number of USE flags defined in my /etc/portage/package.use/mplayer.

I like to maintain the USE flags sorted alphabetically, so I decided to write a simple script to do it for me.

If you're interested, you can find it here.

Unhiding custom entries in /proc in vservers

I use vservers very often. They are easy to maintain and to deploy, and allow clean environments for servers with different purposes, avoiding the need to invest money on hardware resources.

I recently installed Oracle on a vserver, and got some errors from the Enterprise Manager application saying:

java.lang.Exception: Cannot read /proc/partitions

I noticed that such file was not unhidden by vprocunhide script. Such script uses two configuration files (in given order):

  1. /etc/vservers/.defaults/apps/vprocunhide/files
  2. /usr/lib/util-vserver/defaults/vprocunhide-files

The format is simple: each line points to a file in /proc to unhide. You can actually hide them, prepending a - character. Refer to the actual source code for /usr/lib/util-vserver/vprocunhide to get the full options and syntax.

In our context, we just need to

mkdir -p /etc/vservers/.defaults/apps/vprocunhide/
echo "+/proc/partitions" >> /etc/vservers/.defaults/apps/vprocunhide/files

The Oracle problem, however, persists. It now says java.lang.Exception: Unknown format in /proc/partitions, but it seems to be independent of hosting it inside a vserver. Probably some of the reasons why Oracle is selective regarding Linux kernels and distributions are issues like this.

Firefox Add-ons

I've just created a page with Firefox Add-ons, their links and brief descriptions, so that I can evaluate them and have an homogeneous toolset in all computers.

Take a look if you're interested: firefox-addons.

Script to generate bibtex entries from filenames

I've written a small bash script to generate BibTeX entries from the information found in the filename passed as argument.

Since the pdf files I have respect a format like this: publisher - book name[ - year]?.pdf I've been able to write a script to generate the following:

@book{filename_translated,
  title="book name",
  publisher="publisher",
  note="complete filepath"
}

The complete source is in Subversion (misc/trunk/bin/importbookcd.sh).

Blog posts migrated

I've just finished re-publishing posts from old Roller system.

I did it by directly performing SQL queries against the MySQL database, retrieving the text, fixing all invalid characters (due to some encoding problems which arose after a MySQL version upgrade), and republishing them directly using the Trac web interface.

The only problem with this approach has to do with the publishing timestamp. Blog plugin uses now no matter the timestamp you want it to use (which it's probably good). Since by default the plugin takes the timestamp of when the post was started to be written, and uses it as the name of the associated wiki page, by respecting the original timestamp in the post names I was able to do some SQL logic to fix the pubtime timestamp in Trac database (SQLite).

So I did the following:

  1. Start emacs
  2. M-x sql-sqlite -> database: trac.db
  3. select name,time from wiki where name like '200%';
  4. Record a macro to translate each one of the entries into update wiki set time=(select strftime("%s", datetime(t)) from (select substr(aux, 0, 10) || " " || substr(aux, 12, 6) as t from (select replace(replace(name, ".", ":"), "/", "-") as aux from wiki where name="XXX"))) where name="XXX"; and write them in a brand new buffer called *rows*.
  5. Execute the macro for each one of the retrieved rows.
  6. M-x switch-to-buffer *rows*
  7. C-x h
  8. M-w
  9. M-x switch-to-buffer *SQL*
  10. C-y [enter]
  11. commit

Voilá :) The problem is dealing with the date format YYYY/mm/DD/HH.MM used in the blog plugin, which has to be translated to a date. There's some lack of support for date formats in SQLite, so I had to translate such format to YYYY/mm/DD/HH:MM, then to YYYY-mm-DD-HH:MM, and finally split it into YYYY-mm-DD and HH:MM, so that I can concatenate them with a blank space in between.

  • Posted: 2007-05-23 18:24 (Updated: 2007-05-25 18:47)
  • Author: chous
  • Categories: chous
  • Comments (0)

Linking to SourceForge

Some of the projects now hosted here were initially signed up in SourceForge.

I decided to update them again, pointing them to this server, and start defining a release mechanism so that they can be downloaded from the SF mirrors.

  • Posted: 2007-05-17 06:03 (Updated: 2008-09-21 07:37)
  • Author: chous
  • Categories: (none)
  • Comments (0)

Milestone names

From now on I'll use a different naming scheme for milestones: famous algorithms.

The purpose is to learn something or at least invite to a brief reading about the concrete algorithm.

The list I'll use is provided by Wikipedia of course:

http://en.wikipedia.org/wiki/List_of_algorithms

  • Posted: 2007-05-02 21:19
  • Author: chous
  • Categories: (none)
  • Comments (0)

Trac-hosted blog

I decided not to restore the previous server at blog.acm-sl.net, which was using JRoller software. Once I migrated the servers, I found Trac useful to manage not only source-code views, but also as a full-featured wiki. The blog plugin lacks some features comparing to previous server, but fulfills my requirements.

Now it's time to migrate previous posts.

Keep tuned :).

  • Posted: 2007-05-02 19:02
  • Author: chous
  • Categories: (none)
  • Comments (0)

Analogías entre gestión de software y de música

Desde hace poco tengo a mi disposición una iPod. No es que esté orgulloso, máxime cuando por el momento me resulta muy poco asequible cambiarle el firmware por uno libre.

Aunque no todo está perdido: afortunadamente mi iPod nunca conocerá iTunes :).

En cualquier caso, dejando a un lado el dispositivo de moda, el haber dedicado algo de tiempo a organizar la música, conocer qué son los Podcast, etc. me ha hecho pensar sobre un concepto sencillo que nunca he aprovechado demasiado: las playlist.

Aunque suene trivial, los dispositivos de almacenamiento que usaba hasta la fecha (fundamentalmente cds o mp3 de pequeña capacidad) permitían no esforzarme mucho en cómo organizar los archivos: un directorio por autor, otro por disco y poco más. Fue cuando perdí la organización presente en mis cds cuando me di cuenta de que en realidad, las playlist no son más que lo que se denominan tags en sistemas de control de versiones como CVS o Subversion.

En el ámbito de desarrollo de software (que es dónde mayor acogida tienen estos sistemas, a pesar de que es provechoso para cualquier documento que vaya evolucionando) se utilizan tags y branches para referenciar colectivamente un conjunto de archivos (en el primer caso) y poder bifurcar el progreso de los mismos (en el segundo). Es decir, a partir de un nombre común, se puede obtener la foto de los archivos en el instante en el que se creó el tag.

Las playlist, por otro lado, pueden llevar asociadas connotaciones semánticas muy diversas en función de la intención del usuario o de quien las cree, pero en el fondo son lo mismo: una etiqueta única que permite obtener un conjunto concreto de ficheros.

Si algunos habéis descubierto ya el placer de usar Amarok, seguramente conozcáis ya sus playlists dinámicas, definidas en función de lo que más te guste o más frecuentemente escuches. Este tipo de playlists son análogas a los branches, con una salvedad: los archivos de mp3 son fijos, con lo cual el concepto de branch se ve reducido a la evolución temporal de archivos cuyos únicos cambios son ser añadidos o borrados del branch.

Y para terminar las analogías, el calvario de actualizar los tags Id3 (que por otro lado se ve aliviado con EasyTag) no se da tanto en el software, ya que los metadatos asociados a cada archivo son escasos.

Aun así, algo parecido se da cuando uno se enfrenta a conflictos derivados de los ^M y atributos como el "eol-style" (en Subversion). Una diferencia fundamental es que, en el caso de los archivos ogg o mp3, el nombre del fichero es un metadato más (con EasyTag se puede generar a partir de los demás), mientras que en los sistemas de gestión de versiones lo habitual es que se use como clave primaria (tal como lo hace el sistema de archivos).

Lo bueno de los Id3 es que definen un conjunto de atributos fijo. Lo malo es que los valores por lo general estarán desnormalizados.

Uno puede normalizar su colección, con esfuerzo, pero es dudoso que si la comparara con la de otra persona el criterio coincidiera sin problemas, y el encoding no hace sino empeorarlo.

Ojalá se llegara a un punto en el que, aparte de modificar el continente, fuéramos capaces de actualizar el contenido con la misma facilidad, tal como se hace en el software libre.

Obstáculos: DRM y creatividad musical. Y es que ya se puede vivir sin software propietario, pero el porcentaje de música libre es irrisorio.

El victimismo ilustrado

Como todo el mundo sabe, recientemente falleció Pinochet. Es difícil no haber recibido la noticia, dado que ha dado lugar a numerosas impresiones por parte de casi cualquier profesional de la comunicación.

Yo por ejemplo vi a Pablo Motos haciendo chistes congratulándose del hecho, a Jesús Vázquez comentando la noticia con júbilo, y da la impresión de que se entiende por correcto el mostrar desprecio por ese personaje y alegría por su fallecimiento.

La verdad es que mostrar alegría por la muerte de alguien me produce, cuando menos, rechazo. Me produjeron rechazo las imágenes de palestinos (o vete a saber quiénes eran en realidad aquellas personas) difundidas por todos los medios celebrando el éxito del 11-S, igual que las muestras de júbilo por la pena de muerte para Sadam Hussein, e igual que las del caso con el que he comenzado.

También me llama la atención que uno pueda hacer juicios de valor y establecer una opinión sobre Pinochet cuando no ha sido juzgado.

Creo que el no haber sido juzgado es más importante que su muerte, porque el no existir un veredicto ni una investigación que permita arrojar objetividad al historial del acusado, impide que uno tenga la autoridad moral para emitir juicios objetivos (los únicos válidos afortunadamente). Dicho de otro modo, al no ser juzgado, Pinochet sigue siendo presuntamente inocente.

Y eso, a pesar de que al final con seguridad se hubiera demostrado sus horribles crímenes, es bueno.

Todo esto, claro está, es algo que suena mal. Suena bien despreciar a cualquiera que se pueda hacer pasar o sea sospechoso de pertenecer a cualquiera de estos grupos (por poner algunos de moda)

  1. Terrorista
  2. Dictador
  3. Maltratador

Así todo es más sencillo. Pero aún lo podemos simplificar más. Podemos sentirnos ofendidos, heridos o al menos molestos con cualquiera que no comulgue con esa forma de actuar ni con esos pre-juicios. Y es que vivimos en una época de uniformidad, de subjetividad, y de consagración de las víctimas como interlocutores.

Ahora ser víctima tiene muchas ventajas: te permite autoproclamarte portavoz político y/o moral para influenciar procesos de paz (más bien, curiosamente, para tratar de boicotearlos), te permite favorecer que se presuponga la culpabilidad del acusado de maltrato, te permite cometer injusticias impunemente. Y lo mejor es que puedes arrojar como contraargumento tu sufrimiento y supuestamente defenestrar las opiniones de personas que no se rinden ante ese ardid.

De aquellos que tienen la desfachatez de pensar que el perder a un hijo precisamente te impide una visión objetiva sobre las vías de solución del conflicto y entendimiento con sus autores; que las muertes de mujeres no se deben a características inherentes al gen Y al cual hay que combatir ante el más mínimo indicio, aunque se prive con ello a ciudadanos de derechos fundamentales como la presunción de inocencia. Sí, ya sé que ayer hubo otra muerte y llevamos ya X este año.

No hay que darle vueltas a las cosas. Reflexionar es secundario, lo fundamental es lo que te dice el corazón.

A ver quién tuvo narices para estar en desacuerdo con Pilar Manjón en su día (no ahora, que para eso está la Cope), con todo lo que estaba sufriendo. Yo no dudo que sufriera, con lo que no estaba de acuerdo era con lo que decía. Su dolor no era el objeto de debate, sino un recuerdo vivo de la tragedia.

Como apunte final en contra de este auge del victivismo como arma moral, en mi opinion debería establecerse un criterio o una clasificación en niveles, para evitar malentendidos. Para mi, por ejemplo, una víctima del terrorismo es alguien que murió en un atentado, o que resultó herido y las secuelas le causan una minusvalía.

Los padres, hijos, nietos, demás familiares o amigos son personas que se vieron afectadas indirectamente por el hecho, pero no son víctimas. No estoy en desacuerdo con que se les denomine como víctimas, pero no pertenecen al mismo grupo. Hay una diferencia cualitativa. De difundirse el criterio seguramente les dolería, pero supongo que estarán acostumbradas, ya que hacen de eso su bandera.

Supongo que después de decir esto debería sentirme mal, porque está claro que lo digo movido por una especie de odio irracional a gente de bien que bastante tiene con vivir día a día con el recuerdo de su tragedia, de cómo arruinó sus vidas. Todo el esfuerzo es para camuflar bajo un manto de reflexión que soy algo despreciable y que acabaré siendo un maltratador.

Las cosas facilitas, por favor, y que me hagan caso que para algo tiene que servir la putada que me ha pasado.

Bloom's Taxonomy on Software Delivery

There's a big difference between developing something that works and packaging software as a product.

Many people think the main purpose of a piece of software is to perform a set of tasks. However, there're many other issues which affect the average user satisfaction: Is it easy to understand? Is it easy to make it understand what I want it to do? Some people tend to summarize all of them in a single one: Is it simple?.

In the bazaar model widely spread among free software projects, the software is delivered when a set of features or bug fixes are completed. Sometimes it includes useful documentation along with the software itself.

Users are free to ask questions in forums and mailing lists, and even on irc.freenode.org. Most of the times the learning process consists of a set of trial and error steps till the user manages to configure the software to fit her needs.

The more difficult it takes for the user, the more likely she will give up. At the end, only two kind of users manage to get the software working: lucky newbies and unlucky experts.

Recently I read about Bloom's Taxonomy 1.

Bloom identified categories to quantify how much knowledge a person has, how good it is, and how high she is able to apply it:

  1. Knowledge: To be able to remember concepts
  2. Comprehension: To understand and explain the topic
  3. Application: To apply knowledge to solve new situations
  4. Analysis: To divide an idea and reason about the relationships between each piece
  5. Synthesis: To define and build an abstract idea out of existing knowledge
  6. Evaluation: To be able to judge regarding the feasibility or validity of new ideas

Back to the bazaar topic, regarding the software delivered, the developers are at least at the Application level. A new user starts below Knowledge, and tries to reach Comprehension in order to configure it by herself. The bazaar model makes the knowledge tend to get distributed among people, imposing no constraints on how far a user can get.

I think the cathedral model is less productive for the user, since the communication channel is somehow more fixed or controlled.

Worst of all is when we try to analyze non-free models: the user receives no help even to get the knowledge level (which can happen even though she has access to the user manual). That's fine since most of the users of propietary software don't understand what free software is (in case they know it exists), and would hardly find valuable to get access to the source code (which is one of the two ways they have to progress).

How many of you have heard arguments such as "We chose Oracle since PostgreSQL provides no support"? It's like saying "I don't mind to be limited in terms of how far I can get learning Oracle, since I would sit on the knowledge level or lower, and would pay for each time I need to solve more difficult problems than I can fix".

Other issue that surprises me is related to customized vs packaged (i.e. available in a local store) software.

The user of a cd-burning software knows it's not suitable of being customized (at least, to a certain degree). That is not seen as a drawback.

Furthermore, Excel users tend to think they get more features and complexity they are able to understand. For on-demand, customized projects what happens is the opposite: the software is always too complex, there're always too many mouse clicks, and the user always tend to express she is still expecting it becomes more expert in the problem domain than the user itself.

It's like saying: "What! I'm supposed to know how to use this? It's the software who should know what I have to do and how I manage to do it!".

Just kidding, in terms of cleverness, the order is: Excel developers, Excel itself, average user (trying to get the most of Excel but with no time to do it), and this damn stupid customized software.

Should we develop software to reach Evaluation levels on behalf us? Shouldn't we want to reach such level by ourselves instead?

Keep It Accurate, Stupid

Have you ever heard of the KISS1 principle? It usually refers to software engineering, and means Keep It Simple, Stupid.

The idea behind is: whatever you do, make it as simpler as possible regarding what it has to do.

I guess it's so simple :) that everybody would understand it, and most will agree with it. I'm one of the ones who don't. Let me explain why.

I tend to think a piece of software is a model of something "real", (I mean, part of the nature). We split the reality in pieces, and provide models to the ones we are interested in (say customer behavior, flood simulation, etc.).

Should we have no hardware constraints, we could be building an increasingly better model of the world. Such model would cover some aspects in detail, and some others very abstractly.

That's not what's happening, at least in business-oriented software. Each company focuses on its field of interest, and its competitors do the same. At the end, we probably won't know more, and won't have better models.

Business also dictate their own rules in such modeling activities: the result have to be fast to develop, cheap to maintain and easy to understand.

There's a gap between the amount of information we're able to grasp of a concept, and the concept itself.

Simplification is a mechanism we use in general in order to be able to operate with the concepts... things don't tend to be simpler by nature.

Nowadays, in which everything needs to be justified in terms of business feasibility or usefulness, simplification has gained momentum, so to say. Everything has to be simple, although can be shown as complex to outside if that makes it more interesting or attractive.

The reality is that we badly can choose which model to use to represent concepts we work with, when we usually lack of models. How can anybody say "less is more" or "the simpler the better"? There's no clue about why that is supposed to happen and under which circumstances.

We live in a period in which Darwin is questioned, and in which most important things are assumed to be true without proofs. I won't be surprised if people still wonder whether Earth isn't the center of the universe.

This "KISS" is one of such beliefs in current software engineering trends.

Democracia, Alternancia, Rotondas y Semáforos

Se me ha ocurrido una analogí­a entre determinadas prácticas polí­ticas y formas de regular el tráfico.

La democracia, tal como comúmente se concibe, favorece el criterio más respaldado por la mayorí­a. Eso da lugar, como es sabido, a lo que se denomina como dictadura de la mayoría. Este hecho es algo característico y me da la impresión de que se considera valioso.

Por otra parte, en ocasiones la democracia se pone en práctica de forma que el poder se va alternando de una forma más o menos periódica entre (por lo general) dos partidos, los cuales "representan" (dicen representar) la voluntad y el criterio de amplios porcentajes de la población.

Dejando a un lado si de hecho se representa a nadie, y si dichos representantes actúan realmente como portavoces de los que dicen representar, se podría hacer un paralelismo, y pensar en la alternancia como un semáforo, que regula a quién se le permite pasar durante un período de tiempo en detrimento del resto. Ese sistema es bastante fácil de entender, dado que no es muy sofisticado: se reparte el derecho de uso en franjas temporales.

Hay que tener en cuenta, por otro lado, que los sistemas que regulan el acceso a un recurso limitado se pueden analizar usando una rama matemática denominada teoría de colas. Aprovecho para dejar caer que no está de más la aplicación del conocimiento científico a las disciplinas sociales, en la medida que se pueda, y no ceder ante la subjetividad generalizada bajo el argumento de que no hueco para la objetividad en las ciencias humanas.

Imaginémonos por otro lado lo que sucede en una rotonda. A priori, es un modelo "liberal", en el sentido de carecer de elemento regulador: el que llega antes y puede, gana. Comparado con el semáforo, funciona bastante bien. Es más eficiente, ya que garantiza que el recurso sólo está desocupado si no hay usuarios que lo demanden. Un semáforo hace esperar incluso si no hay nadie haciendo uso de la vía.

En términos democráticos, la mejora conseguida por un sistema basado en rotondas en lugar de semáforos encaja bastante con la idea de una democracia más "pura" (más representativa que parlamentaria), en la cual no hay que esperar 4 años (o los que acordados) para que tus ideas se vean reflejadas en el criterio de la clase dirigente.

Sin embargo, la rotonda, y por ende la analogía democrática, tiene un punto débil: margina a las minorías. Si la mayoría de vehículos que accede a una rotonda va en la misma dirección, el resto de las rutas que se vean entorpecidas lo tienen crudo. Es fácil ver ejemplos cada día: la rotonda no garantiza un acceso en un tiempo finito al recurso a nadie. La corriente dominante favorece el uso de la rotonda a quienes van en esa dirección. Llega un momento de saturación en el que sólo pueden acceder a la rotonda quienes vayan en una dirección que no entorpezca dicha corriente.

La pregunta es: ¿Las minorías importan?

What I think about homosexuality

The songs says "love is all around", but I think that is true not for love, but for sex.

I'm convinced of the absurd of thinking of others' lives regarding habits or tastes. Such absurdity becomes unacceptable when instead of merely think, we judge, moreover if our criteria is based on sane and free sexual practices.

This leads me to support gays in their quest for a more fair society.

Their cause is a clear symptom of how immature is our self-satisfied reality in terms of freedom and respect, and in this sense there's a great benefit for us all if they succeed.

There're other fights of this kind, though.

Besides the rightfulness or fairness of their claims, it's very important to restore lost rights with no regret.

Otherwise the overall message gets interpreted as an attempt not to promote progress towards a more fair society, but to selfishly improve the situation of a certain minority.

In case of homosexuals, I would like to tell my daughter nobody will have a word regarding the kind of people she will get sexually attracted by. Sadly I cannot ensure that.

Having said that, I must say I like what the message is about, not how it's transmitted. Gays are shown as a group of people who are very proud of not being heterosexuals.

The ones that appear in the media stress their sexual nature or preference very clearly. They seem to give an astonishing importance to their look and their style.

Of course, in every generalization, there's unfairness. There're gays who don't feel themselves as part of the above description.

Nevertheless, it seems that the ones fitting in the description above get all the attention from the press or tv programs. And I must say I don't agree with that approach, since they don't seem to say "Let me be whoever I am", but "I am lovely, I like myself and wouldn't like to be hetero instead. Probably you'd say the same if you give it a try".

There's always the possibility to transmit the wrong message, and messing it up with clothes, perfumes or ways to move the hands is a way to do it.

We shouldn't be frivolous if there's something unfair which harms minorities or majorities and we are trying to repair it.

Comment by rodent on 2006-04-17 15:04:02

I have to say I think many, if not a majority, of the homosexuales fighting for their rights, are just selfishly trying to improve theis own situation. Which is quite understandable.

The problem, in my opinion, is not repression on homosexuality itself, but the existence of so many stereotypes, rules on how we should live, which impede people realization by just making unthinkable to act in a different way.

We must not only get rid of sexual orientation discrimination, setting as "normal" the fact of being gay.

It is not first the people having sex with same sex members and then the word for calling them. Nobody says "I will only have sex with blonde people". But I'm sure if we had a word for it, like "blondesexual" and "darksexual", many would do, many would feel the urge to align with one group or another. The mere existence of an stereotype shrinks our freedom to choose.

When it comes to sex, it is obvious that the reason is that our reproduction is sexual and for reproduction, gender matters. But now sex is not just for reproduction, it is much more and almost every one uses it as a different thing.

To get free we must abandon the words and labels and stop defining ourselves, because definitions kill our freedom in the future and impoverishes the individual and, as a result, our society,

Comment by chous on 2006-05-29 06:51:33

I fully agree.

Our society is transforming into an uniform set: few groups represent the vast majority in terms of opinions and life style.

Some of us want to be normal, since that seems to prove we're rational and moderate. Others want just the opposite, ultimately building their identity based on the others'.

Homosexuals are just plain people. They're neither against nature, nor against religion or moral habits (unless they try to drive what is part of the privacy of each individual, which is an excess anyhow).

Sex doesn't define us. Sexual perversions are probably just symptoms of a mental disorder.

Nobody should ever need to explain to the rest why he/she gets attracted to individuals of the same gender, but as you say they shouldn't define themselves in those terms.

Well-known stereotypes of men trying to have sex with as many as possible, and women having to explain why they have started a new relationship so quickly, seem not to be part of the past.

Welcome gays, you're different and not different than the rest.

  • Posted: 2006-04-11 11:55 (Updated: 2006-04-11 11:55)
  • Author: chous
  • Categories: chous
  • Comments (0)

Freedom of speech

What is Freedom of speech?

I guess it could be defined as the right of an individual to express his or her opinions, even if they are considered wrong or inadequate. Such a right makes people get used to reject and to react against any law aiming to allow only certain opinions. That is somewhat associated to democracy, since it's not possible without such individual freedom.

But the opposite is not necessarily true. I personally find such right so obvious it cannot be discussed. If everyone had the duty to think the correct way or else shut up, we'd not have not only real democracy, but we'd slow down progress, since nothing important would actually be allowed to be questioned. However, freedom to speech doesn't come at no cost.

Actually, even if you are given such right, the kind of things you can say is limited at least by law. The society you belong to somehow decided what subjects are considered harmful. For me, here's the point.

As long as you agree with what the society you're in thinks is too bad to be allowed, you'll never notice any restriction on your right to express your opinions. Recently, we've seen what happens when societies have different criteria, and what some see as untolerably offensive, others see an exercise of an individual right. I think this right has to be reviewed, since it's not precisely defined. Here's my opinion.

  • There's a difference between freedom of speech and freedom of influence others.

In a society following or minimally respecting UDHR1, any of its members should be free to think, and should be free to speak as well. However, if the opinions expressed influence the people so that the society would get hurt, it will defend against. So I would say the relationship between individual people and their society should keep freedom of speech intact, and leave the discussion only to what opinions are allowed to be dispersed among individuals and which aren't. However, if democracy is, in practice, the "tyranny of the majority"2, then the only way a concrete person could change or improve it is convincing others, that is, trying to influence others against what most other people think.

  • Anybody should be aware that the world is still plenty of different cultures, even in the current globalization stage.

Be aware the Universal declaration is just an aggreement, not a physical law, and therefore some societies can decide there're other objectives more important to pay attention to. Now, a message can actually reach unintended recipients, who interpret it according to their culture, not to the original society's. We could talk about who is to blame, but the difference is a wrong understanding of the individual right and its boundaries.

  • This matter is increasingly important in current times, since, in one sense or the other, we live inside societies in which the individual opinions are, in practice, pre-defined.

It's a situation in which, if you're lucky enough to be confused about what to trust, you'll probably assume the most repeated version of each story as true, consciously or not. The more people are convinced, the more distorted is the sense of democracy, and the least chances have to progress. The end of the story is, of course, the vast majority thinking in terms of we're right, they're wrong.

  • The key point is probably the intention.

If a personal opinion is expressed aiming to change other's, intentionally, then I see indirect resposibilities on the final outcome. However, if the author doesn't intend anything but to say what he wants to say, he/she should not be considered guilty of anything.

These concerns, when applied to the media, makes me think whether certain people are actually assuming their responsibilities when they, apparently, just express their political opinions. Some people think democracy needs all kind of opinions, to make people think by themselves by promoting all kind of points of view. Some opinions are valuable just because they make us figure out how was the life in Europe before French Revolution. That's all they're good for.

No intention to promote progress, or to make people be constructive, or to give the value the moment in history we live in deserves.

I see two reasons for this: plain ignorance, and addiction to power. But both of them use the same method: intentional speeches.

We'd need to discuss what we want Freedom to speech to be, and to define its boundaries, since we take it for granted.

Libros 2005

Recopilatorio personal de los libros que he leido durante 2005.

  • Koba el temible-Amis.

No coincido con la marcada fobia comunista del autor, pero aporta mucha información sobre los logros de Stalin.

  • Gödel, Escher, Bach-Hofstadter.

Este libro es increíble. Exageradamente bueno. No tengo palabras.

  • ¿Qué es la propiedad?-Proudhon.

Muy interesante. Debe ser una de las primeras obras dedicadas a este tema.

  • Via revolucionaria-Yates.

Novela sobre el EEUU de los 50, con personajes muy creíbles.

  • Mente y materia-Schrödinger.

Breve pero hace reflexionar sobre Darwin/Lamarck, y hace una graciosa advertencia sobre el posible efecto del funcionariado en la evolución del hombre.

  • La torre oscura 5-King.

Los personajes conocen al autor en la propia novela.

  • Cómo se reparte la tarta-Chomsky.

Chomsky duele, pero es que la realidad duele.

  • Free Culture-Lessig.

Muy recomendable para tener un punto de vista propio sobre la preocupante propaganda actual destinada a conseguir, por la fuerza, un consenso social para demonizar lo que hasta ahora era un valor: compartir.

  • Mona Lisa acelerada-Wibson.

Para pasar el rato.

  • El teorema de Gödel-Nagel, Newmann.

Resumen del famoso teorema y el enfoque de la demostración.

  • La sombra de Hegemón-Scott Card.

Me gustó más "La sombra de Ender", pero es divertido.

A punto de terminar:

  • Materia de reflexión-Changeaux, Connes.

Se abarcan muchos temas desde dos puntos de vista distintos.

  • Brevísima historia del tiempo-Hawking, Mlodinov.

Para los que nos resistimos a dejar de interesarnos por la física básica: muy bien terminado, conciso y claro.

A medias:

  • El código y otras leyes del ciberespacio-Lessig.
  • Keynes-Skidelsky.
  • La riqueza de las naciones-A. Smith.
  • Leibniz en 90 minutos-Strathern.

Técnicos relacionados con las Tecnologías de la Información:

  • Linux server hacks-Flickenger.

Consejos sencillos pero útiles.

  • Knoppix hacks-Rankin.

Para empezar a personalizar Knoppix.

  • An introduction to programming in Emacs Lisp-Stallman.

Para saber más sobre Emacs.

  • Version control with Subversion-Collins-Sussman, Fitzpatrick, Pilato.

Muy útil y bien estructurado.

En curso:

  • ANSI Common Lisp-Graham.

Lisp engancha.

  • Classic Shell Scripting-Robbins, Beebe.

Para no tirar siempre de los mismos recursos.

  • Texinfo-Chassell, Stallman.

Después del paso (relativamente) en falso de DocBook, Info es una garantía.

  • Open Source licensing-Rosen.

Discusión en profundidad de las licencias más conocidas.

  • Concurrent and Real-Time programming in Java-Wellings.

Cómo usar Java en situaciones más exigentes.

La riqueza del lenguaje

No hace mucho le comenté a un amigo que el lenguaje oral no necesariamente permite la transmisión del meme sin alteraciones.

Es decir, la utilización del lenguaje para transmitir una idea conlleva una representación verbal muy ligada a la forma que suponemos que el receptor interpretará el mensaje.

Todo esto es una forma muy abstracta de expresar algo tan sencillo. De hecho, el párrafo anterior junto con éste permite una realimentación que hace que pierda ese toque de sencillez.

Muchas veces da la impresión que las dificultades en la comunicación tienen que ver con la riqueza de vocabulario. Sin embargo, hay mucha información en el contexto. Puedes mentir sin que el otro se dé cuenta, o decir la verdad sin saber que el otro cree que mientes. Pero en cuanto haya realimentación, la cosa se complica. Y es que, si lo que se quiere es que lo que se dice se interprete de una forma particular, hay que cuidar no sólo el qué, sino también el cómo. Pero eso no es todo. Puede que ambos deban parecer congruentes. Puede que información no controlada por el emisor influya en la interpretación: ¿Lo dice con seguridad, o duda? ¿Asegura o sugiere?

Además, hay connotaciones sociales ("decir las cosas a la cara", "no le escribas un mensaje, llámale"), que fortalecen la intención del que habla de cara a influenciar al que escucha. No sólo es decir lo que se quiere decir, sino que se entienda lo que se quiere que se entienda.

La influencia puede ser inversa, es decir, casos en los que la actitud del receptor impone sus propias condiciones: desinterés, impaciencia, brevedad, simplicidad. Esto puede imponer unas restricciones tan severas que haga que el que tiene algo que decir decida desistir por la imposibilidad de conseguir una representación en el receptor remotamente parecida a la propia.

En general, podríamos asociar el mensaje con la parte objetiva de la comunicación, y el contexto y la actitud de los contertulios con la parte subjetiva. Bajo esas hipótesis, si lo que se desea es el aspecto subjetivo de la comunicación, es conveniente una comunicación personal, sonora, con presencia física. Si por el contrario se quiere que prime la objetividad, sin verse afectado por los condicionantes del destinatario, la comunicación escrita da mejor resultado.

Eso no impide que sepas que habrá gente que no lea tu blog no porque no le interese o porque no esté de acuerdo, sino porque es demasiado largo de leer.

La toma de decisiones

Vengo un tiempo utilizando un cliente RSS1, el KNewsTicker.

Eso me permite recibir titulares de artículos y noticias de mis fuentes preferidas.

Uno de ellos es República Internet2. En la opinión alarmista de fondo en lo referente a lo político y social, solemos concidir.

Al ver el titular 3 RSS de Nemo, he seguido leyendo y me he vuelto a sorprender de lo que se entiende por "capacidad para tomar una decisión".

La noticia en sí no es más que una de las tantas del estilo, en las que se pide a nuestros representantes políticos que evalúen una propuesta y tomen una decisión al respecto, dando como resultado una absoluta falta de criterio y conocimiento.

Habida cuenta de las dificultades que encuentra la gente para entender el software libre, podría entenderse que una muestra de ese público general tomara asiento en el congreso. Por lógico que parezca, a mí me parece una irresponsabilidad.

En mi opinión, el que no entienda el tema a discutir no debería tener la potestad para influir en la decisión. Y menos aún, demostrar su incapacidad con declaraciones.

Se podría equiparar la argumentación usada para justificar la decisión, basada en que se tendería al monopolio, al conflicto fumadores/no-fumadores. Fumar impone una restricción al no fumador, que no puede evitar respirar el humo.

Se podría favorecer el monopolio si se discutiera favorecer una empresa tabacalera frente a otra.

Aquí, además, se evalúa el conflicto dentro del ámbito de los servicios públicos.

Siguiendo con el ejemplo, sería como si se le dijera a un no-fumador que no tiene más remedio que conformarse a respirar humo, dentro de un hospital público (eso no tendría sentido en el Ruber4).


  1. 1. Lo comento porque la mayoría de los usuarios de MsWindows no sabréis lo que es. Para el próximo día de Internet, habría que recordar a red.es que Internet no es el Explorer.
  2. 2. http://www.republicainternet.com
  3. 3. Carta a los Reyes Magos
  4. 4. Cuyo nombre o se pronuncia incorrectamente, o debería ser Rúber

Periodismo

Hay una característica de los medios de comunicación tradicionales, como la televisión o la prensa, que establece una relación informante-informado muy desigual en su cardinalidad.

Es obvio, el contenido no se adapta al receptor: la misma noticia la leen muchas personas. Tampoco hay realimentación o bidireccionalidad, el efecto o la opinión producida en respuesta no se divulga, y sólo es captada indirectamente a través de mecanismos que en cualquier caso únicamente proporcionan una estimación de la reacción de la audiencia, en promedio.

¿Y todo esto a qué viene? Bueno, por un lado, mi papel como receptor cada vez me resulta más incómodo. Por otro, me hace cuestionar tanto la aptitud como la actitud de los informantes o mensajeros.

Será cuestión de organizar un poco más la argumentación. Probemos con un ejemplo:

Hace poco puse la tele cuando transmitían (como que yo sepa sólo lo hicieron una vez, no hablaré de "retransmisión") unos informativos en Telemadrid. Digo el nombre porque no encuentro el motivo para no hacerlo.

La reacción que causó en mí el contenido que recibí fue, aunque más o menos leve, de indignación. Daré algunos ejemplos de noticias que contribuyeron a tal estado de ánimo:

  1. El nuevo Papa dice algunas palabras en castellano. Aparece una estatua del antiguo Papa en la Castellana, y el presentador lo califica como "uno de los mayores luchadores por la paz".
  2. Aparece C. Rice compareciendo para hablar de lo de las cárceles de la CIA, a la vez que aparece en la parte inferior de la imagen "explicación satisfactoria".

Tengo que reconocer que no sé nada de periodismo. Puede ser que trate de informarme más de su historia, de sus personajes más relevantes, etc. Como resultado posible de mi ignorancia, siempre he pensado o he compartido con los demás la idea de que en el periodismo lo fundamental es el rigor, la independencia, y la objetividad. Hay espacios claramente delimitados para interpretar las noticias y dar la opinión personal, y ésos no son los informativos.

Habiendo dicho esto, comento, por si es necesario, por qué me indigné:

  1. Yo considero dudoso que eso sea noticia, pero en cualquier caso, la afirmación sobre el antiguo Papa no es ni rigurosa, ni independiente, ni objetiva.

De haberla iniciado con un "en mi opinión, ...", sólo se habría incurrido en un defecto: incluir un contenido propio de tertulia periodística en un informativo.

Pero es que se afirma, dando a entender que el oyente tiene que aceptar eso como verdad.

¿"Explicación satisfactoria"? ¿Es una broma? ¿Es satisfactoria para quién? Si eso no es una interpretación (en mi opinión, extraordinariamente sesgada), es que el concepto de periodista debe ser distinto al que yo pensaba.

En ese estado de indignación, me pregunto: ¿es un problema de actitud o sólo de aptitud? Como he dicho, el papel de receptor impide hacer esa pregunta directamente. Sólo me queda plantear hipótesis y decidir cuál me parece más probable.

  1. Puede ser que sea simplemente debido a errores no intencionados. Pero en ese caso, lo normal sería una rectificación.

Lamentablemente, sólo hay rectificaciones en casos de presión, y a consecuencia de ésta, no de una evaluación y reflexión sobre las posibles incorrecciones cometidas. Por poner un ejemplo, el famoso "12 meses 12 causas, mes de Octubre"1. Esta hipótesis no me convence mucho, veamos más.

  1. Puede ser sea habitual manipular más o menos sutílmente la forma en la que se difunden las noticias, de forma que:
  1. Se interprete la noticia de una forma u otra.
  2. Se trate de influenciar la opinión del oyente/lector.

En mi opinión, las deficiencias en la aptitud se ven ampliadas por unas más preocupantes carencias en la actitud. Siempre he oido opiniones manifestando cuánto difieren los enfoques que dan dos periódicos distintos frente a la misma noticia. Creo que todo el mundo aprecia este hecho, como norma general. Aceptemos, por tanto, la hipótesis b). Nos queda decidir si simplemente nos quedamos en la b.1) o si por el contrario hemos alcanzado ya la b.2).

Me inclino a ser pesismista. Sin embargo, aunque al ponerme la camisa de lector/oyente/receptor me esfuerce por llevar a cabo una interpretación inversa, para poder llegar a algo más o menos fiable, eso no me impide pensar que realmente lo más probable es que la gente, el público en general, digiera los contenidos, por así decirlo, sin procesarlos antes.

Esto, de cumplirse, resolvería algunas preguntas que me hago, y es que, en promedio, nuestra opinión no es nuestra, es fundamentalmente la que interesa que sea. Como eso parece alarmista, lo decoramos con diversidad, y así atenuamos la preocupación. Sí, me refiero a leer tanto El País como El Mundo. A contrastar las fuentes. Eso, lamentablemente, no funciona si la información que se contrasta les llega a dichas fuentes ya sesgada, o es directamente mentira.

Pero por otro lado, hay que ser paranoico para pensar así. Siempre hubo armas de destrucción masiva.

Hay que luchar contra la piratería y su clara relación con el tráfico de lo que sea. Hay que hablar de terrorismo, o de chapapote, o de cualquier palabra que es parcial en su esencia, y ponerla en boca de las personas de a pie.

En los ratos en los que no hablan de fútbol, claro :).

jde-docindex

In emacs-wiki 1 it seems there's a problem trying to download jde-docindex from its original website 2.

I noticed I have version 0.9.3. I make it available here.

Hope this helps.

¿Adelantar o atrasar el reloj?

No es que quiera hablar de nada profundo ni particularmente interesante: el pasado fin de semana, hubo cambio de hora.

El hecho en sí era que había que cambiar la hora a las 3 de la mañana, de forma que volviera a ser las 2.

El caso es que me sorprendí al leer en los periódicos que había que retrasar la hora.

A pesar de la diversión que supone el ir a contracorriente, creo que en este caso no se hace un buen uso del lenguaje. Por el momento, describiré el punto de vista mayoritario ("natural", "obvio", etc.), y después veré si consigo hacer entrar en razón a alguien :).

El hecho de hablar de retraso viene de que la acción requerida por el cambio de hora implica hacer retroceder el reloj. Éste es, por así decirlo, un punto de vista espacial, es decir, utiliza los referentes de detrás/delante.

Supongo que epistemológicamente será válida la correspondencia entre retrasar y retroceder. La raí­z común puede justificar el que se utilice retrasar, cuando se está refiriendo en realidad a retroceder. Asimismo, la acción opuesta es aún más ambigua, ya que coincide el mismo verbo: adelantar.

Lamentablemente, en este caso, como en tantos otros, se hace un uso incorrecto del lenguaje. El verbo retrasar hace referencia a la diferencia temporal entre dos sucesos. Si dicha diferencia es positiva, es un retraso, en caso contrario un adelanto. Por tanto, al hacer que artificiosamente se vuelva atrás en el tiempo se incurre en un retraso negativo, es decir, un adelanto. Para ilustrarlo más gráficamente, el efecto del cambio de hora se refleja en que, si no cambias tus planes, llevarás a cabo lo que tengas planeado con una hora de adelanto a lo previsto.

Resulta que si uno consulta la RAE, verá cómo incluye las dos acepciones: la espacial y la temporal, incongruentes entre sí. Hay que tener en cuenta que la RAE, por su parte, tiene también dos funciones: servir de referencia, por un lado, y recopilar el uso cotidiano que se hace del lenguaje, por otro.

Si se consulta el verbo "atrasar" 1, veréis con claridad las dos acepciones contradictorias.

Herencia del rectángulo

A pesar de que el concepto de herencia (en terminología de la programación orientada a objetos) es bastante fácil de asimilar, podemos encontrarnos ejemplos paradójicos, como el que ilustra el libro de Robert C. Martin 1.

El ejemplo en cuestión trata de modelar los conceptos Figura, Rectángulo y Cuadrado. Intuitivamente, los conceptos se relacionarán de una forma similar a ésta:

  +--------+
  | Figura |
  +--------+
      ^
     / \
    +---+
      |
      |
+------------+
| Rectángulo |
+------------+
      ^
     / \
    +---+
      |
      |
 +----------+
 | Cuadrado |
 +----------+

Es decir, un Cuadrado no deja de ser un caso particular de Rectángulo, y ambos son Figuras.

Sin embargo, Cuadrado es un Rectángulo, y a la vez no lo es, ya que que el concepto de Rectángulo mezcla dos definiciones:

  • Cuadrilátero cuyos lados:
    1. forman ángulos rectos,
    2. tienen longitud arbitraria (2 a 2)

Un cuadrado satisface la primera condición, pero no la segunda. Por ese motivo, si usáramos el modelo anterior, incurriríamos en incongruencias como métodos válidos en la clase padre Rectángulo, pero no válidos en Cuadrado, p.ej.: <tt>redimensiona(base, altura)</tt>.

La única opción es, por tanto, un refinamiento en el modelo:

         +--------+
         | Figura |
         +--------+
              ^
             / \
            +---+
              |
              |
    +------------------+
    |   Cuadrilátero   |
    +------------------+
              ^
             / \
            +---+
              |
              |
    +-------------------+
    |   Cuadrilátero    |
    | de ángulos rectos |
    +-------------------+
      ^               ^
     / \             / \
    +---+           +---+
      |               |
      |               |
 +----------+  +------------+
 | Cuadrado |  | Rectángulo |
 +----------+  +------------+

Se podrían unificar las clases Cuadrilátero y Cuadrilátero de ángulos rectos, pero entonces podríamos encontrarnos con dificultades parecidas al tratar de modelar a la vez Cuadrado y Rombo, aunque curiosamente la intuición funciona mejor para éste caso, y no tratamos de pensar que "un cuadrado es un cierto tipo de rombo".

Es recomendable definir la herencia como una relación de pertenencia obvia, sin casos particulares, ya que de lo contrario podemos llevarnos sorpresas.

En concreto, en el libro citado se analiza el problema como una violación sutil del Principio de Sustitución de Liskov: "Subtipos deben ser reemplazables por sus tipos base".

El análisis se basa, como es frecuente en nuestros días, en una visión prágmatica, consistente en mostrar las incongruencias en las que se incurren al aplicar el citado principio en el modelo de clases original. De hecho, incluso se llega a la conclusión de que la validez del modelo depende de un tercero: el código que recibe indistintamente un Cuadrado o un Rectángulo, y que sin embargo percibe que ambos no se comportan igual. En otras palabras: según el autor, un cuadrado es o no es un rectángulo dependiendo del punto de vista de quién los use.

éste es un buen ejemplo que muestra en lineas generales mi opinión del libro: tiene cosas interesantes, pero te va dando bofetadas sin parar.

Si alguno lo quiere, lo regalo/presto/vendo (depende de lo que le resulte más cómodo).


  1. 1. Agile Software Development. Principles, Patterns, and Practices.

Comment by ecamino on 2005-11-02 11:14:39

Buscar herencias

Sin ser un experto en el tema, me gustaría decir que no es necesario ser Rober Martin para darse cuenta de que si haces una herencia de un rectángulo para crear un cuadrado vas a tener problemas.

Creo que no hay que confundir la particularizaciones de un elemento con la esencia de lo que quieres heredar. Es decir no hay que buscar herencias como una caza de brujas, no hay que exagerar, en general el cerebro funciona bastante bien en este tipo de cosas. Hay que tratar de heredar cosas que conceptualmente tengan descendencia intuitiva, de modo que el padre realmente sea un ente mayor que el hijo, algo conceptualmente mayor, no hijos que sean particularizaciones.

Si se me permite, o utilizas sólo la clase rectángulo y jamás nombras la palabra cuadrado, válido porque puedes también modelar un cuadrado o si decides utilizar cuadrado hay que poner ambas clases al mismo nivel, como figuras.

No creo que dependa de un tercero el decidir si se puede heredar o no un cuadrado de rectángulo, aunque claro si publicas libros (Rober Martin) parece que tengas la verdad en tus manos ..... y probablemente sea así.

Error: Failed to load processor AddComment
No macro or processor named 'AddComment' found

Fallacies (1)

I'm 30 years old.

It takes time to build an opinion on certain subjects.

I'm pretty sure it depends on each one: fortunately, we're different; but unfortunately, we're not equal.

Anyhow, what follows is just a list of some of the fallacies I'm particularly worried about. They're not necessarily complaints, just opinions, but I guess you'll perceive a rather pessimistic baseline. If you find valid refutations, please don't hesitate...(Warning, long article)

Capitalism

Well, it doesn't seem a fallacy, right? Not for me. Since I was young, I've always thought of capitalism as a way to reward effort and risk. Maybe a little more risk than effort, and also allowing a degree of dishonesty, but those appeared as inevitable minor drawbacks.

I was said: it's not perfect, but there's nothing better.

I have to admit I've never really read about communism or anarchism until recently. My criticism in this matter was asleep. As in other topics, I only have a vague idea of what could possibly work better than capitalism.

But it's always good to analyze a problem in two separate stages: first identify it, second look for a fix. As I said, it's vague, but it's based on a solid one: we cannot afford convincing ourselves there's nothing to improve, to reconsider. Is it possible to believe that there's nothing better just because Stalinism was a terrible period in human history?

It's not the point to cite capitalism counter-examples. Who is so irresponsible of trying to convince with such a fallacy? Such statement needs a proof, and its absence means we still have to find ways to improve capitalism, and to discard it if we find something better. Of course, better could mean a balance between pros and cons, but we cannot get stuck in the conformism regarding capitalism and aggressiveness towards other choices. So it seems a matter of attitude, indeed I suspect the system is self-satisfied: no radical change would be allowed by the ones who currently profit from it.

Let's make this clear: it doesn't depend on us. We are supposed to play the game of trying to win with these rules. Such rules eventually (or progressively) forces us to decide how much of ourselves we accept to lose in the way: honesty, dishonesty tolerance, looking down the customers, convincing ourselves someone else will do it anyway, suspecting of everybody else by default, ... Not to the point to 1984, but a step towards it...

I read capitalism tries to drive human greed to make it valuable to the society. However, I think in practice much of the greed is awaken by the capitalism itself. In other words, a person starting a business doesn't really care about being valuable to the society or not, just the best way of making money (taking it from his or other societies). He'll not focus in trying to identify ways to increase the overall richness. Also, there're businesses whose sole purpose is to create new illusionary needs so that such demand justifies the new products or services, which are of no (little) value anyhow, even if people buy it. The best businessman will avoid thinking in anything but making as much money as possible. First, money; second, rules; third, ethics.

We're not used to do or to see habits that, at least for me, seem reasonable. Why no business shows the margin of each offered product? Why isn't possible to do business with the customer? Since no business do it, one could think all businesses, at the end, at some degree, cheat and lie, consciously or not. That doesn't happen at all levels. At high-school (or equivalent) we organized trips which required money. The ones who managed it charged a fee for their time: everybody was aware of it, and nobody thought it wasn't right. We scale one level up and the same doesn't apply. The only way to overcome these unfortunate consequences, in my opinion, implies allowing (and promoting) criticism, free speech, and reformism.

On purpose, I'm not gonna write about the building blocks of capitalism: money and property.

Democracy

This doesn't seem a fallacy, either. At least, if you look at the word's roots: rule by the people. However, the term refers both to an ideology and an implementation of it.

I was said: it's not perfect, but there's nothing better.

There's valuable content about this topic in Wikipedia 1. At this point, let's assume the referred ideology is the optimal approach in all senses, so that we can discuss the ways to implement it:

  • Representative

We give away our will to one of the allowed representatives. That decision, supposedly, forces you to assume the responsibility of the decisions such person takes on your behalf. Personally, I cannot assume the consequences of decisions I don't take. I see it the other way around: in trascendental subjects, the representative needs my support, instead of taking it for granted. Anyhow, this practical usage of democracy is just too bad to be acceptable. Let's talk about the need to let others take my decisions:

Disadvantages:

  • I cannot anticipate the future, so it's not possible for me to allow someone else to take my decisions when I cannot know them yet.
  • My representative should be in debt with me, since he/she would have to take decisions which I could possible disagree with.
  • The allowed choices in terms of available parties and/or representatives are not part of what I can choose from. That depends on whether there're people willing to represent certain points of view.
  • The whole implementation leverage one major drawback: allows the people to be ignorant and to assume the representatives are more prepared to take the decisions for them than themselves
  • The worst disadvantage for me: it isn't aiming to find the best choice in all matters.

There're some things which are right or not, no matter what most people could think: God, Earth's shape, climate change... I see it reasonable to make mistakes, but hiding them under the coat of the "majority opinion" is not.

Advantages:

  • It defines a contract between certain people, allowed take the decisions, and society, who assume the consequences.
  • In theory, the ones who care most about the society are the ones which become candidates.
  • Also in theory, one representative belonging to a party has freedom to build his/her opinions and take decisions upon them, independently of the party's.
  • It defines the boundary of what can be decided without asking for direct participation to the society. In this sense, the society is protected of changing the political system, since the transition to some other dangerous political systems are prohibited.
  • Direct

This implementation expects from the citizens more than just choosing the best smile or the guy who speaks more eloquently. They choose, so they should make the effort of keeping themelves informed of each issue, and to assume the consequences.

I'm pretty sure not all people is really interested in participating on nation-wide decisions. I'm not saying anything about whether that is good or not. Also, some people dislikes or rejects this implementation arguing that frequent referenda is expensive.

I'd prefer direct democracies. But anyhow, I think democracy is never questioned, and it's expected to fulfill many issues at once:

  1. Rule by the people
  2. Freedom
  3. Economic progress

The fact that each decision is what the majority wants, doesn't necessarily mean it's good. Well, there're some issues which cannot be categorized as good or bad, and that's why I guess some objective criteria needs to be defined. People should be aware that choosing a concrete point of view on social issues requires ecomomic measures, and that influences the way the money gets invested. Also, the majority can think using cameras everywhere is good to prevent whatever, but it isn't free: it requires giving away people's freedom to some extent.

The best choice would mean saying publicly the truth: we don't know what will be best for the society, but we wish to bet for a result based on certain points of view, hoping they won't require taking too much freedom from the people. Basically, it's the same as saying: it's not really ruled by the people, there's no guarantee the freedoms will be respected, and the final economic outcome will be interpreted so that it is reasonably good.

No matter what you think.

Democracy is not a model to fulfill the three points listed above. Why should we try to convince ourselves it is?

We should try to stop "hoping" and leave our faith out on some important matters: the ones we control.

[To Be Continued]

  • Posted: 2005-10-23 17:25 (Updated: 2005-10-23 17:25)
  • Author: chous
  • Categories: chous
  • Comments (0)

Mail, Identity, Spam

Is it possible that time goes by and we are still fighting against spam?

I thought that digitally signing emails would contribute to eventually get rid of it. It hasn't been the case so far.

So, what makes spam so annoying? First of all, it makes you waste time managing (removing) it. Sometimes you lose valid messages by mistake. Maybe it makes you think you did terribly wrong when you used your address to subscribe to that newsletter. Or maybe someone forwarded one of your messages and it ended up in a list of "valid emails". Worse, an ex-boyfriend used your email just to bother you.

You'll never be sure.

In fact, there's little you can do, besides configuring your mail client by using smarter filters, better anti-spam tools, or using different addresses.

What is spam? To use the technology to deliver unsolicited advertising. If we'd have to summarize it, Internet is content and services. Services are almost always commercial, whereas content mostly isn't.

Spam is just a way to make money using Internet bandwidth (which is free, as in free beer). There's little or no cooperation at all between spammers and users: no matter if you write them asking for removing your address, their approach sits far from "the customer is right".

Spammers also hurt other companies aiming to make money "with" their customers 1.

I see three points of view regarding spam:

  1. The users (some of them potential customers),
  2. The spammers,
  3. The companies which rely on email: their employees send sensitive information or even sign agreements via email.

For me, the only ones who understand the underlying technology are the spammers.

The users are used to:

  • receive mails from their friends, sent by a virus,
  • be unaware of how easily anybody can send a mail on behalf them,
  • spend time fighting spam manually,
  • lose valid emails by mistake, when removing spam,
  • use html by default, even though they hardly ever use styles in their mails.

I find it surprising and dangerous. However, they're really unaware of it. Digital signing is not widely used, because apparently it's not needed, and because signed messages get not displayed correctly in email clients. No comments.

Users feel safe because they:

  • are not supposed to know,
  • ignorance is legally forgiven.

Actually, if you start working for a new company, and show how easy is to send an email as another person (sending it actually or not), not only the audience won't feel responsible of protecting themselves against these technically-valid uses of SMTP, but you will likely be identified as the most feasible candidate of causing any future suspicious situations of email address hijacking.

This means that, instead of trying to fight ignorance, what gets threatened is the knowledge itself, since either the company or the "victim" will likely success in their demands of justice.

How many emails can a person send without knowing how SMTP works? I guess there's no boundary.

However, ignorance in terms of technology is allowed, but not in terms on how to react and how to use confidential information sent to you by mistake or by any other means, that is, when you're not part of the "intended recipents".

This is the real world, and, in such case, you better do what they say, man. Sadly, you have nothing to win. The legal system is just a parody of what justice means. (Oops, I guess I need more tv, I'm just too far from what Chomsky calls "consensus".)

Getting back to the matter, from a narrow, "micro" point of view: The users:

  • spend more and more time removing spam from their mailboxes,
  • use disclaimers or EULAs 2 in their mails without actually thinking about it twice,
  • use HTML emails without even knowing what that means,
  • are unaware of the fact that anybody could be sending emails on behalf,
  • are willing to change their addresses just because they receive an invitation to sign up in the "new fashion" plain-old free email provider,
  • don't trust "chain emails" if their content rejects the traditional, trusted information sources.

From a "macro" perspective,

  • the spam is wasting most of the Internet's bandwidth,
  • the spam is ethically questionable (maybe in this stage of capitalism nobody thinks the customers define -or should define- the markets),
  • the ones who suffer mostly the spam: the users and the Internet itself, could request a review of the SMTP protocol. However, that would mean a step towards completely removing anonymous use of the Internet.
  • the companies have already won the battle against SMTP drawbacks by using EULA and threatening disclaimers.

There're other services, such as knowspam, which manage the spam for you. They request anybody sending you a message to prove he/she is not a program, and allows you to choose who you want receive mail from. Let's hope such preferences (part of your identity, anyway), won't ever be used for anything else. I'm afraid you, happy Gmail users, cannot say so. It'll probably affect the ones who carelessly send emails to you, too.

How would I be supposed to know?

Just to make it more annoying, I subscribed myself to a mailing list, but which nowadays is of no interest to me. Recently, I decided to request to be unsubscribed by sending the typical mailinglist-unsubscribe email. Guess what? That didn't work. The mailing list was one of the Apache's, and it didn't work because my IP was considered not valid enough. In this case, I need to convince sites such as sorbs that I have paid for a static IP, no matter if it fits into a range described as dynamically IP space.

Let's treat this under a non-pragmatic point of view. Here I see an analogy with so-called piracy. Let me use a real-world example: Someday, you decide it's time to purchase a certain kind of software (firewall, antivirus or whatever) from your local store. You check the box, and see nothing suspicious, so you buy it. Later, you open the envelope, put the cd in the drive, and go through the installation program till it asks you to accept an EULA. Such EULA basically denies you all rights but to use it just in that pc. Maybe it, once installed, communicates to the outside and you don't even notice it. If you don't accept the "agreement", what can you do? Basically, nothing. You hardly never will manage to get your money back. Why? Because just opening the box is considered enough to reject the item back. Even worse, you're considered a pirate, or at least suspicious.

Back to the black list of email servers, the situation is not as bad, but it's essentially the same: I have to proof I'm not guilty of spam. I have to give information (proofs), in order to distinguish mine from illegitimate email servers.

No matter how bad or annoying spam is: I've always thought innocence presumption was a good thing. Maybe the only choice is to fight: define a filter which sends a fake mailer-daemon message until the mailing-list engine signs off your email after complaining about the bounces.

It could work, but... Is that what we want?

  • Posted: 2005-10-01 19:23 (Updated: 2005-10-01 19:23)
  • Author: chous
  • Categories: (none)
  • Comments (0)