Keyjnote deleted, one action of Apple's gorillas on a dubious trademark

keyjnote, a fine software project, is no longer at sourceforge.net. What is more, no public repository remains with the code history, at least that I could find (destroying it is, IMO, a grave sin in the ethos of free/open software).

The reason? According to debian forums:

KeyJnote has come under trademark litigation from Apple, 
and the main developer is currently AWOL. For the time being, 
you can access the code at 
http://www.cs.rit.edu/~jrm8005/accentuate.html, and hopefully 
there will be more information there soon about the future of keyjnote.

keyj’s blog gives more information on the issues. In my opinion, Keynote does not seem something one can have a trademark on (probably Apple Keynote is their trademark, and I can’t see how using the keyjnote was infringing on it). Second, keyj is the nick of the author of the software, so there is even more rationale for using the keyjnote name than it looks like. Third, what has done the Apple lawyer team sent as cease and desist to motivate closure of the sourceforge site (with loosage of the code history) and mostly every trace of the package?

Barring an answer from the former main developer, we can only speculate. But I don’t like companies that use lawyers to destroy our commons, and the code history is one such common. For the moment the current version is still available, and now the repository, being distributed (accentuate.git) is more difficult to destroy. I hope Apple can make a public statement about why they contribute to destruction of the commons and the former main developer can tell us more and maybe even help us reconstruct a code repository.

Lessons: go distributed, go distributed, go distributed. Ah, and get a good legal umbrella or they will screw you even when they use a dictionary word as a trademark. Another lesson that Apple might extract from this issue if we all are diligent enough to stop buying their products and put some effort to destroy their brand is that one should not mess with freedom using the strength of their lawyers. But I think most people would rather look at their shiny logos than at their dubious legal practices.

Haikus and mistakes

Today I wrote a couple of haiku. I’m not very sure about how grammatical this one is:

The clouds are crying.
Ail for the silent, sudden
End of the Summer.

It occurred to me as a reaction of a sudden and slow rain that announced for all of Madrid that the Summer will be due in two weeks.

The other one is more interesting because it has a mistake that fits into the “interesting” category:

"You're so tall!!
You said while I was frozen,
lost in your green eyes.

It is interesting because the first verse it not correctly metered. I noticed a while after writing it, and I found it strange. I would never write it as “You are so tall!”, as Spanish metrics almost forbid me to count You-are as two silabs.
Where was the error coming from? I noticed soon. The sentence was real, and it was said in Spanish (or at least I remember it
in Spanish). In Spanish it has 5 silabs, and, furthermore, the global rhythm is much better. So I decided to switch it to Spanish and have my first multilingual haiku :):

"¡Eres tan alto!"
You said while I was frozen,
lost in your green eyes.

It even makes more sense given a strange, implicit and private rule I have for haiku in English :). And it would be part of my Eres muy alto series...

Hofstadter, in "Le ton beau de Marot" has one full chapter, if I remember correctly, devoted to such speech errors. I wonder, as I can’t remember, if he has such an error where the lexical (visual) level is taken from one language while the meter (rhythmic) level is taken from another...

A new month is starting

Memories floating...
They never fit the suitcase.
A room is empty,

Luck as a topological property

Dan Kaminski on Dan J. Bernstein being right on Source Port Randomization, versus Paul Vixie, in the recent DNS protocol bug:

There is a fantastic quote that guides a lot of the work I do:
Luck is the residue of design.

Excellent quote, I didn’t know it. One of those nuggets of wisdom I try to collect here. I see the quote as luck being a nice property of the “shape” of a well designed solution space.

Integration: the filtering of source code revisions

From time to time it is fascinating to learn how the linux community deals with the Software Engineering processes involved when the development speeds is so damned fast as it is being for the linux kernel as of lately. This whole thread is very interesting. Linus hightlihts development as patch pressure:

So here's the math: 3,500 commits per month. That's just the *average* 
speed, it's sometimes more. And we *cannot* merge them continuously, 
because we need to have a stabler period for testing. And remember: those 
3,500 commits don't stop happening just because they aren't merged. You 
should think of them as a constant pressure.
So 3,500 commits per month, but with a stable period (that is *longer* 
than the merge window) that means that the merge window needs to merge 
that constant stream of commits *faster* than they happen, so that we can 
then have that breather when we try to get users to test it. Let's say 
that we have a 1:3 ratio (which is fairly close to what we have), and that 
means that we need to merge 3,500 commits in a week.

Later, when asked to slow down:

On Thu, 1 May 2008, Rafael J. Wysocki wrote:
> 
> > And there's no way to avoid the fact that during the merge window, we will 
> > get something on the order of ten thousand commits (eg 2.6.24->25-rc1 was 
> > 9629 commits).
> 
> Well, do we _have_ _to_ take that much?  I know we _can_, but is this really
> necessary?
Do you want me to stop merging your code?
Do you think anybody else does?
Any suggestions on how to convince people that their code is not worth 
merging?

Another pearl of wisdom:

An example of this: I don't believe code review tends to much help in 
itself, but I *do* believe that the process of doing code review makes 
people more aware of the fact that others are looking at the code they 
produce, and that in turn makes the code often better to start with.

And this whole message:

Hey, guv, do you _honestly_ believe that some kind of ISO-9000-like 
process generates quality?
And I dislike how people try to conflate "quality" and "merging speed" as 
if there was any reason what-so-ever to believe that they are related.
You (and Andrew) have tried to argue that slowing things down results in 
better quality, and I simply don't for a moment believe that. I believe 
the exact opposite.
The way to get good quality is not to put barriers up in front of 
developers, but totally the reverse - by helping them.

And this one, for us, normal people, who are really slow:

And as a result of that, my personal belief is that the best way to raise 
quality of code is to distribute it. Yes, as patches for discussion, but 
even more so as a part of a cohesive whole - as _merged_ patches!
The thing is, the quality of individual patches isn't what matters! What 
matters is the quality of the end result. And people are going to be a lot 
more involved in looking at, testing, and working with code that is 
merged, rather than code that isn't.
So _my_ answer to the "how do we raise quality" is actually the exact 
reverse of what you guys seem to be arguing.
IOW, I argue that the high speed of merging very much is a big part of 
what gives us quality in the end. It may result in bugs along the way, but 
it also results in fixes, and lots of people looking at the result (and 
looking at it in *context*, not just as a patch flying around).
And yes, maybe that sounds counter-intuitive. But hey, people thought open 
source was counter-intuitive. I spent years explaining why it should work 
at all!

Keep on reading the thread, those linux kernel discussions are great software engineering!

Happy Ending

Excellent version of “Happy Ending”, a beautiful song by Joe Jackson in the album Body and Soul. This version is played live by Elaine Caswell and him.

I'm in a movie
Where boy meets girl
What happens to me
In this brave new world

Do I listen to my heart, do I listen to my head?
Do I look at what I see, or remember what I read?
When I tell you how I feel, do I wonder what I've said?

Is there nothing we can do about it, anyone
Anyone can be so hard hearted
But everyone
Still everbody wants a happy ending

It's not so easy, it's '84 now
How tough must we be to ask for more now?
Do I listen to my head, do I listen to my heart?
Do I try to feel the same as I feel when we're apart?
Do I think about the end when it's only just the start?

Is there nothing we can do about it, anyone
Anyone can be so hard hearted
But everyone
Still everbody wants a happy ending

I get so scared when I see the evidence against our case
Each movie so far this year ends up with someone crying
Or even someone dying

Do I listen to my head, do I listen to my heart?
Do I try to feel the same as I feel when we're apart?
Do I think about the end when it's only just the start?

Is there nothing we can do about it, anyone
Anyone can be so hard hearted
But everyone
Still everbody wants a happy ending

Haiku in English

I have the habit of writing haiku when I need to “vomit” strong emotions, much like the character in Cortázar’s Carta a una señorita en París (A Comentary in English, a short film, very faithful to the text) was vomiting rabbits:

Nunca se lo habĂ­a explicado antes, no crea que por deslealtad
pero naturalmente uno no va a ponerse a explicarle a la gente
que de cuando en cuando vomita un conejito.

Recently I had a number of very strong emotions while speaking mostly in English, something that never had happened to me before. The result is that I started “vomiting” haikus in English, of which I’m going to give you a number. Not all are conventional haikus, as the haiku metrics, but not the tone or conventions, is rather similar to the Spanish seguidilla. /me being andalúz I have a trend to mix haiku with seguidilla from time to time. What I would be glad about is correction or links about how to metter and understand metrics in English. Spanish is very easy to meter, and I have serious problems understanding the rules for English. Those are all supposed to be “classic” 5/7/5 ones, though not all of them are “moments”, or refer to nature or seasons.

A tango poem:
While the music is flowing
We stand together.
No moon, no kisses.
Just a couple that dances.
The world keeps turning.
Your eyes are closed
April rains while you whisper:
pouring illusions

T.S. Elliot should probably wake up and kill me on this one:

Seasons are mixing.
Memories and desires
Dancing around us.
What are my tears for?
Flowers blossom so healthy!
April is caring.
Madrid is dying:
Four million corpses walking
After you left me.

Mob software

I got very surprised that a number of git hosting sites are literally providing an account for the mob. See for instance repo.or.cz description of the mob feature.

The idea that distributed scm is a great tool for anonymous contribution takes actually some time to percolate, at least it took to me. Being able to commit locally actually means that a structured representation of the intended change to the code exists. git, for instance, provides a clean way to export commits: git format-patch does basically it. I have  already spotted how, for instance, some people uses git-svn to have a local repo and uses it to send patches for Apache harmony (see the characteristic diff --git ...). A repository that can be found in repo.or.cz. Such a use case would be typical of in-house teams tracking a remote repository. Instead of cloning subversion with in-house subversion they do it with git, and each developer can have their own commits, merging them while one or more developers commit remotely. I have a couple of repos tracking Apache shindig and gajim, both in github.

Going back into the mob feature: the mob account is a wiki for commits. A step beyond the “I track your repo and send patches to your tracker” work flow. With the mob account everybody can commit on the mob branch, typically using their name for the commit. Everybody can also cherry pick those commits, and the gatekeeper(s) can apply them to the officialish repository. A brave new world, we are getting into! Somehow it remembers me the story (cyber legend?) about how a group of webmasters exchanged patches to get “a patchy server”.

Politheistic Babel

A chart in a recent entry from Dalibor Topic gave me a chance to check for diversity in computer languages. I have seen reasoning about the importance of diversity in computer languages in several places, but I remember notably Ben Hyde’s. I think his post about small gods (June 2003) is a good description of the process:

A scripting layer creates a huge range of large range of affordances for the the users (or more likely their agents the developers) to leverage the underlying data-type.

The chart is in ohloh, about monthly commits by language. It shows C/C++ going slowly down from a plateau at about 80% of Open Source, to the current 40%, while all other languages (java is second at a plateau around 20% since 2002) eat slowly into C’s share. I think the data is suspect, though. When Emacs Lisp is charted, the first years in the chart seem to reflect mostly the process of maturity in Open Source: from 1995 to 2000 we see how emacs (C+emacs list) gets from being all of the open source pool to just a small drop of it, as we can see in  this view of “all-but-the-first”. Still, even discounting the 1995-2000 period, we see C/C++ loosing relevance, java as a stable second, php standing around 10% while python is in a close sprint for this third position, and other languages (perl, C# and ruby) in a pack after it. It looks like the web is a driving force of this tendency. I see it as a synergy of:

Another quote from Ben’s post, still relevant after five years:

People tend to get all fixated on the role of protocols (XML et. al.) as the tool for creating openness and interoperability across the Internet. That maybe a mistake. It maybe we should be a lot more conscience about the role of a diverse population of languages in this game. That a world of one language is, in time, a monotheistic world. That world, while possibly somewhat more efficient, encourages a monopoly.

Hackability as a marketing strategy, the XO and Joost

I’m watching a very interesting (very long too) Google Tech Talk, called Python on the OLPC XO Laptop. While watching it I noted that Joost’s and the OLPC’s strategies for mindshare are opposite:

I recently ranted against Intel’s leaving the OLPC. To remain today in the highly positive tone set up by the long description, I wanted to point to Yves Béhar talking about the design. The design is really amazing, Yves Béhar is a well known designer, and nobody should perpetuate the meme of the cheap laptop after watching those two videos. Watch for his detailed comments on the mechanical design and the aesthetics details.

Iterator protocol change in python 3k

I got a bit angry when I noticed that the iterator protocol has been changed for python 3k. I didn’t like it at first, and I still think that it will be the worst compatibility nit of the whole transition, but at least I found a nice positive side of it.

The python iterator protocol used to be simple: an object is iterable if iter(object) returns an iterator. An iterator has an __iter__ method, which returns self, and a next method, which returns the next value or raises StopIteration.

What is the change? In python 3.0 the next method will be renamed to __next__, and there will be a new builtin called next(iterable,default) that calls __next__ and returns default or raises StopIteration, if default is missing.

While I was testing python3k, and I was getting errors because of the change, I was getting more and more angry, it looked quite gratuitous. It was on the context of /me trying to understand the concept of a generator, and exploring a series of variations on syntax, as well as old articles. One of the papers, General ways to traverse collections, has a nice section on generators on Icon, Python and scheme. I was trying to reproduce the first Icon example:

sentence := "Store it in the neighboring harbor"
if (i := find("or", sentence)) > 5 then write(i)

Is is supposed to print 22, i.e, the first value of i that matches. I couldn’t find a good way to do this in python until I noticed the new builtin. Then it was obvious (still a bit less readable as regular expressions have no syntax in python):

>>> import re
>>> sentence = "Store it in the neighboring harbor"
>>> next( (i.start() for i in re.finditer("or",sentence) if i.start()>5) )
22
>>> next( (i.start() for i in re.finditer("or",sentence) if i.start()>32),-1)
-1

We can even use the default value to avoid the exception and return a sentinel or an empty value. With this addition, python gets one idion I was missing: get me the first value that fills a condition (expr(i) for i in iterable if condition(i)) is a filter. On it:

Borrowing the generator example from the wikipedia , slightly changed to avoid the list there:

>>> def primes():
...     n = 2
...     p = []
...     while True:
...         if not any( n % f == 0 for f in p ):
...             yield n
...             p.append( n )
...         n += 1
... 
>>> next(i for i in primes() if i>10000)
10007

will return the first prime greater than 10000. Dealing with infinite generators is a bit tricky, but at least now python will have a nice, readable idiom for just the first.

Complicators

Steve Vionsky gives a great metaphor in Serendipitous Reuse

The layers of complexity required to maintain the resulting leaky illusion of local/remote transparency are reminiscent of the convoluted equations that pre-Copernican astronomers used to explain how the Sun and other planets revolved around the Earth.

There is a certain trend in every one of us to keep the familiar framework by making it more and more complex over time, I guess the same feature in our thinking process that leads to the paradigm shifts in science every so and so is the one that makes people avoid simplifying and stick with patches upon patches.

Shame at the core of Intel

Intel playing dirty tricks:

A frail partnership between Intel and the One Laptop Per Child educational computing group was undone last month in part by an Intel saleswoman: She tried to persuade a Peruvian official to drop the country’s commitment to buy a quarter-million of the organization’s laptops in favor of Intel PCs.

(...)

In Peru, where One Laptop has begun shipping the first 40,000 PCs of a 270,000 system order, Isabelle Lama, an Intel saleswoman, tried to persuade Peru’s vice minister of education, Oscar Becerra Tresierra, that the Intel Classmate PC was a better choice for his primary school students.

Unfortunately for Intel, the vice minister is a longtime acquaintance of Mr. Negroponte and Seymour Papert, a member of the One Laptop team and an M.I.T. professor who developed the Logo computer programming language. The education minister took notes on his contacts with the Intel saleswoman and sent them to One Laptop officials.

No big comments on that one. I find it a shame that Intel can’t limit themselves to do for profit business in the free markets and allow the OLPC consortium to make substantial non-for-profit efforts to improve the education in the third world. I know the cliche, corrupt government officials that will throw public money into the vendors hands (Intel and Microsoft in this case), supposedly in exchange for a cut in the deal... Classic.

When Intel joined the consortium I was guessing they would play fair and push for the school server market in the short term, until they are able to leverage low energy designs enough to be competitive in this area. But I see they are trying to push for the classic strategy of giving them the surplus capacity of the first world markets. I hope Intel was not playing the game of putting lots of money in... to cut it in the hope to cause bankrupcy, another old time classic for financial sharks.

Well, first they ignored the OLPC initiative, after that they laughed at it... now we are seeing the last attempts to fight against it... so the initiative is about to succeed.

Please, stop doing dirty tricks and limit to your share of the new solid state handheld competing for the first world markets, much like Asus is trying to do with the EeePC. You’ll notice fast that this is not about features, but about integrated design and high efficiency computing.

Notes on Identity in the Eastern Thought

Interesting metaphor in Meher Baba cosmogony:

Meher Baba compares God’s original state to an infinite, shoreless ocean which has only unconscious divinity — unaware of itself even though there is nothing but itself. From this state, God had the “whim” to know Himself and asked “Who am I?” In response to this question, creation came into existence. In this analogy, what was previously a still, shoreless Ocean now stirred, forming innumerable “drops” of itself or souls.

I read this and remembered The Emergent Self, and how Varela views the immune system as an identity builder system. Now I get an extra bonus: differentiation is identity building. I was already familiar with the concept of the frontier of an important part of identity building, but never before saw the undifferenciated magma of a uniform universe as something without identity, and identity sparking from the creation of entropy.

All of this in the context of the Buddhist’s view on identity:

Said the Blessed One: “Suppose a man were to light a lamp; would it burn the night through?” "Yes, it might do so," was the reply. “Now, is it the same flame that burns in the first watch of the night as in the second?” Kutadanta hesitated. He thought it is the same flame, but fearing the complications of a hidden meaning, and trying to be exact, he said: “No, it is not.”

I rest, like Kutadanta after the dialog goes on, in a funny state:

“Lord of the world,” he said, I see my error, but I am still confused."

Short and confused post, in the spirit of twitter

why on hacking for hack’s sake :

Subverting the authority is totally inherent to hacking.

It is about Stormings of Bastilles, sure. Not so much doing things as trying to understand what’s going on by shaking the foundations and hearing the noises made by the structure...

Rather than attacking a fixed opponent, one who is clearly sitting across from you and obviously masked under the inverted color to yours, the novice hacker introduces volatile code into the pristine (or supposedly pristine) empire of the operating system (the “establishment”.)

Again authority as the opposite of hacking... i.e., hacking as entropy building, chaotic mutation force in the mutation/selection annealing...

No big conclusions here. Only that the two opinions about programming are to be balanced like ying and yang. Knowledge vs Action, Philosophy vs Engineering, Poetry vs Accountancy. Both are needed.

Baby: remember my name!

Moore’s Law and Gilder meet Andy Warhol:

Everybody will be world famous for 15/($year - 1979) minutes.

But the copyright of those minutes is gonna live forever. The thought about the ever shrinking standard of fame came watching twitter (a glorified IRC with avatar) making my “speech” the greatest and latest one until the next one arrives in a few seconds... :P

Note en passant the quote from George Gilder (supra, 1996):

Feeding on low power and high bandwidth, the most common computer of the new era will be a digital cellular phone with an IP address.

We are arriving there, still we have no IPv6 and walled^WNATted gardens are the norm in the cellular world.

The wrong pixels

Photoshops + Ctrl-U + search for artifacts:

When I look into your eyes, I see JPEG artifacts.  I can tell by the pixels that we’re wrong for each other.

Script to make tiny URLs less opaque

I asked the lazyweb some time ago about hacks to get a couple of things done:

The second one was getting more and more critical as use of twitter and jaiku makes tinyurls mandatory. They even do it automatically in certain cases. Yesterday (via Brian McCallister and a colleague) I got a greasemonkey script that does the later. It is from @kosugi, and it is called detinyurl. It requires greasemonkey, and got published just two weeks after I requested it, which confirms I’m an early  adopter.

I’m modifying it to make it deuglyfy google URLs in the clipboard. Google’s javascript in the results page rewrites the clear URL every time I change it, so it is not a straightforward problem. I’ll report when I get something working. I hope I’ll be able to get a way to copy URLs from google result pages without having to edit them by hand.

I’m proceeding slowly as it is the first time I install greasemonkey and I’m not familiar with refacing DOM trees :). I never really felt the need to mess with loaded pages before: flashblock and adblock plus where enough for me.

Advertising is not always boring and repetitive, only after the second time you watch it

Freixenet is a Spanish company that sells cava. Cava (see cava2) is the name of the caves where the wine is kept, and they also use it for a sparkling wine, done in Spain using the Methode Champenoise, which mostly makes it a Champagne clone.

At Freixenet they have the habit of spending lots of money in their Christmas ad campaign. This is due to the fact that, at least in Spain, most of the cava is drank during Christmas. For a number of years they do their campaign by hiring well known names (actors and actresses like Nicole Kidman, or Penélope Cruz). This year they have hired Martin Scorsese as director of a wonderful commercial movie. Watch it if you enjoy Martin Scorsese, Alfred Hitchcok, good cinema in general, intertwingled meta-references, and the like. Some people puts it at the level of the famous 1984 commercial by Apple. Watch the Spanish version too to see how dubbing films harms the industry, the people and pokes holes in the web that sews the universe together. It should actually be forbidden by the human rights code.

So, here I am, spreading the meme, thanks to their nice investment in quality advertising, instead of “bulk” eye-catching... I wonder when will google allow us to get no adsense ads when their cost per click is below a certain threshold, a nice way to save our few readers from the trash or bulk ads while keeping the interesting them and their associated income.

Note: I barely watch TV lately, I got the link from some twitter update which I sadly can’t remember or find again to reference here. The meme runs fast in Spain, let’s see if it moves to the rest of the world. :)

Threads are the wrong kind of abstraction, take 2

/me comments on a IRC channel:

Using threads in the application programming layer is a clean way to shoot yourself in any of your feet, at random


(link added for not so old programmers) (Take 1)

Memojo