Tag Archives: clojure

mocomp released


rencontre anuncioo
message original site rencontre
theme rencontre joomla
manhunt rencontres
rencontrer des gens pour sortir
site de rencontre html
centres culturels de rencontre
rencontre avec mickey pour faire une séance photo
rencontre femme meurthe et moselle
prostituees stade de france
rencontre education sentimentale
forum msn rencontre
belle rencontre du net
telecharger rencontre en ligne film
site de rencontre polemique
rencontres célibataires timides
rencontre 3e type wiki
prostituee a rio de janeiro
rencontre avec joe black streaming megavideo vf
la rencontre allan
rencontres gratuites haut rhin
adresse ip site rencontre
site gratuit pour faire des rencontres
rencontre bixente lizarazu claire keim
rencontre homme guichen
abitibi rencontre
site rencontre coiffeuse
scène de première rencontre princesse de clèves
rencontre allier
rencontre amicale veuf et veuve
prostituée étymologie
prostituees noisy le grand
site de rencontre pour cancer
le point de rencontre liotard
choisir pseudo rencontre
rencontre gratuite dax
mimichat rencontre google
prostituee grenoble fr accueil
www paru vendu rencontres
rencontre raerae tahiti
rencontres jeunes chercheurs parole
site de rencontres musulmanes gratuit
rencontre avec malvoyant
prostituee canebiere
rencontre avec le roi des armes
quand naruto rencontre sa mere
rencontre femmes dominicaines
rencontre ligne film wiki
pourquoi devient on prostituée
rencontre arabe en france
rencontre femmes les abymes
rencontre nationale de cirque
je suis accro aux prostituées
rencontres l histoire blois 2011
site de rencontre pour ado de 15 a 17 ans
prostituee sur geneve
lieu prostituée loiret
dating femmes venissieux
deux chemins pour une rencontre
garage bonne rencontre plessis
rencontres maghrebine gratuite
message apres une premiere rencontre
rencontre fille new york
rencontre femme oranaise
cholet rencontre
one piece rencontre chopper
dating femme les mureaux
site de rencontre ngaoundere
espaces rencontres mons
rencontre à elizabethtown streaming vk
site de rencontre femme plus de 50 ans
site de rencontre quicky
passion site rencontres
rencontres le cannet
lorie rencontre ses fans
la grande rencontre parc lafontaine
rencontre portbail
rencontre frenda
rencontre toronto
rencontre serieuse darling
a la rencontre du flot
rencontres hip hop rambouillet 2013
recherche meilleur site rencontre gratuit
app store rencontre
afromeet rencontre algerie
rencontre annuelle des musulmans de l est
rencontre vernon
site de rencontre fleur africaine
se rencontrer konjugation
rencontre femme percée
rue prostituées karlsruhe
site de rencontre barlieu
rencontres photographique d arles 2012
rencontre hettange grande
crete terre de rencontres
rencontre riom es montagnes
rencontres henri langlois international film schools festival
site de rencontre pour ado de 18 ans
rencontre grecque
prostituees juive
sites de rencontres lgbt
rencontres cap com rennes
sites de rencontres dom tom
rencontre commequiers
bo rencontre avec forester
rencontres improbables 2011
site de rencontre pour moto
rencontre mahajanga madagascar
ayem ma plus belle rencontre
au plaisir de se rencontrer
site de rencontre tahitien
site de rencontre pas cher et efficace
la rencontre restaurant grec bruxelles
je serai ravie de vous rencontrer pour un entretien
espace rencontres mons
rencontre badoo vannes
rencontres sur rennes
point de rencontre gare montparnasse
rencontre vichy
rencontre du 3e type youtube
première rencontre chez lui
rencontre jehovah
rencontre hispanique
rencontre femme tanger
comment valere rencontre elise
rencontre avec numero de gsm
rencontres acteurs publics juillet 2011
rencontre veuve cholet
tchat rencontre ado gratuit
rencontre harley davidson 2012
rencontre haiti montreal
quand lunette rencontre-t-elle yvain la première fois
site de rencontre atlantis
chic rencontre
rencontre sur email
sites de rencontres gratuits en espagne
dieudonné rencontre mahmoud
sites rencontres internet comparatif
rencontre nationale veterinaire 2011
prostituees beyrouth
rencontre humanoide
rencontre en arabe
rencontre polynésienne
comment rencontrer les bb brunes
faire des rencontre sur rouen
quand harry rencontre sally scene culte
prostituee de guerre
rencontre azur payant
prostitute tumblr
site de rencontre catholique 100 gratuit
prostituee mayenne
humour sur les prostituées
rencontres internationales emi
rencontres russes france
rencontre amoureuse dans un train
rencontre indienne paris
je contact je rencontre
rencontre ado aix en provence
rencontre amoureuse dans ma region
rencontre bout monde aix provence
club de rencontre gratuit a 100
les sites de rencontres payants en france
rencontre vins
rencontrer debby ryan
eva peron prostitute
eden filtre rencontre
rencontres de bmw
rencontres sorosoro
rencontre sexe yvelines
rencontres amoureuses blois
rencontre femme florennes
nicole scherzinger ancienne prostituée
sites rencontres polynesie
des bordels indonésiens utilisent des singes orangs-outans comme prostituées
rencontre guingamp
rencontre femme nikolaev
pourquoi utiliser des sites de rencontres
se decrire pour site de rencontre
sites rencontres net
prostituée sourdun
chat sexe saint michel sur orge
rencontre joueur psg
je veux rencontrer karl lagerfeld
prostituée du futur
echodalsace rencontres
rcbb boe bon encontre
site de rencontre nidami
mes cheres rencontres tf1
prostituée lyon numero
site de rencontre pour projet
rencontre cassel
prostituée au perthus
rencontre motard idf
la rencontre entre 2 cultures source de conflit ou d enrichissement
asse prostituée
la rencontre de parmenie
site de rencontres bretagne gratuit
perspectives croisées sur la figure. à la rencontre du lisible et du visible
la rencontre amoureuse topos
cyber cartes anniversaire rencontre

trailer film Boyka: Undisputed IV

Language design

When talking to people about the benefits of clojure often people point out that most modern languages have evolved to “support” the functional paradigm with lambda functions. The argument is that one can stay in the familiar safe environment of imperative programming and use the functional constructs when they fit the problem better. That is a very valid and good strategy but I’ll show in the following that it brings a whole lot of accidental complexity with it. Some of this is specific to the way .NET is implemented and some are a clash of the functional paradigm with the imperiative.

Exhibit 1:

My favorite example is what has been known in the office as the lambda bug. Coming from a background of having been coding in C++ for a couple of years, we switched to python in the last semesters of University. The lambda bug manifests itself when one combines two classical constructs of two different programming models: for-loop iteration and closures:

foreach (var i in list)
save_callback_function_for_later_use(x => System.Console.WriteLine(i));

Given that list contains the numbers 1,2,3,4,5 guess what the code will print when all the callback functions are called?

Exhibit 2:

In C# events seems to have been programmed to a pre-functional model and never updated when they added functional constructs. The interface for an event is += for adding events and -= for removing. This is all fine for point-and-click GUI programming. Meaning it works good on something like event += somefunc; and not event += delegate { use_the_power_of_closures_Luke ) 🙁

To add injury to insult, events doesn’t even support something like clear().

Exhibit 3:

In clojure all the seq library is lazy. Thus once one has figured that out (I must say it took a little while for me), everything behaves as would be expected. In C# some things are lazy (linq) while others are not. Imagine list contains 1,2,3. Then the following works:

var changed = list.ConvertAll(x => x * 2);
list.Clear();
list.Add(something)
list.AddRange(rest);

But the following doesn’t work because it behaves lazy:

var rest = observablelist.where(x => x != 1);
observablelist.Clear();
observablelist.Add(something)
observablelist.AddRange(rest);

Try guessing what the outcome of running the code above will be. I’ll confess that it was different from what I expected it to be.

Again it’s mixing two styles of programming, functional lazy code with imperative mutable objects.

Finally, my argument is that a language with clean design principles, even with relatively steep learning curve, far outweights the complexity of industry standard languages in the long run.

mucomp released into the wild

Today I’m happy to announce that the world is one audio player richer! This is a personal project of mine that I have been working on for a little while. It’s written in clojure and javascript (jQuery) and uses alsaplayer as the audio player. I probably won’t have much time to hack on it, so consider this a code dump that hopefully someone else will find useful and play/run/do-whatever with. As for maturity I use it almost daily and it’s pretty stable. There are some known bugs and kinks (mostly due to that its using alsaplayer and that the java inotify library is buggy).

Programming nirvana part 4: the repl

A repl is a very important tool in the arsenal of a programmer. It allows one to test bits and pieces of code and then assembling that into a running program. Examples of this includes the excellent firebug utility for firefox and various shells (like the python shell). There has even been tries to bring a repl to C#, but the languages is not at all designed for this purpose, so it’s a crude hack at best.

Often developing using the repl consists of a lot of copy pasting back and forth between then editor and the repl. Moving the repl into the editor makes this even less painful, but I would argue that in order to fully embrace a repl one has to have something like lisp, or a very good editor (that I havn’t seen yet). In lisp it’s very easy to take parts of a function and evaluation only that part simply by finding the right parenthesis and evaluation that. Using Emacs and SLIME it’s a simple two-key-gesture.

But one can take it one step further. Why not simply start your program as a repl, instead of adding a repl to your program. That way also the running state of the program can be determined. But in order for that to work, one has to be able to redefine functions without stopping the program. Clojure allows that, and it’s the key that makes it all work.

Programming in clojure is a process of organically growing your program in a bottom-up fashion where the running state of the program allows one to inspect, debug and fix programs all without shutting it down.

The best way to do this is to start up a repl in a seperate process and then to connect to that process, that way one can always disconnect and reconnect again when the need arises.

Programming nirvana part 3: avoid relational databases

This is actually a blog post I have been meaning to write for quite a while not, but I just never got around to it. Relational databases are ubiquitous in programming. Whether it’s mainframes, application programming or even phones now a days everyone stores persistent data in a database. Recently there has been some talk about non-schema databases and there’s a myriad different implementations of them, but why the sudden interest?

  • Database has at least two things that makes it less than ideal for agile development. First one being types, especially if the types propagate out into the application code (*cough* Microsoft). The second being based on a schema, which means that one has to make all the choices up front.
  • Databases are really built for a single machine, and even though all the big database vendors has replication support, it still seems like a bad solution if one really wants scalability. There are a lot better ways of doing scalability now a days (a distributed hash tables comes to mind).
  • Databases are meant to be standardized, but in reality they are not. They all have different syntax to do common things.
  • It has been said that when you build a DSL, then sooner or later it will turn into a (bad) full-fledged programming language. What if instead the data was simply part of the program and you could manipulate it as you are used to? Functional languages makes this much easier and possible. Especially a programming language that is built with concurrency in mind.