Monday, 16 October 2017

Dictionaries, Keys and Hash Codes

It's (or should be) common knowledge that objects used as keys in Dictionaries/Maps (Objects that are based in hash tables...) must be immutable [1], [2]. In few words, the Hash code of an object being used as key will be used to obtain the index in the internal structure in the hash table to locate the object. If you mutate an object, its hash code should also change, so it will no longer work for finding the right bucket in the Hash table. You can read a .net centric explanation here

In .Net when using an object as Dictionary key, the GetHashCode method will be used, and in case of collision it'll move to the the Equals method (and you should have overriden both methods in your class as the default Object.GetHashCode is considered not fit for dictionaries). Something similar is done in Java and Python.

ES6 introduced the Map class, and one of its advantages over using plain Objects as dictionaries is that we can use any object as keys (and not just strings). Object.prototype does not have a "getHashCode" method, so well, it seems a bit strange. Checking the MDN documentation on Maps it says that key equality works according to the semantics of the === operator. This means that if you use as key an objec (other than a string or a number), the key comparison will be based on the memory address of the object, so if you mutate the object, it will continue to be valid for accessing the dictionary. I mean:

let myMap = new Map();

let key1 = {name: "aaa"};

myMap.set(key1, "this is a value");

console.log("first item: " + myMap.get(key1));
//output: this is a value

key1.name = "bbbb";

//the modified object that we use as key is still valid!!! 
//"===" semantics/reference equality is being used

console.log("first item: " + myMap.get(key1)); 
//output: this is a value

This seems like a rather bizzarre behaviour for a Map/Dictionary. You can see here how people implement a "more standard" one.

Notice that MDN says according to the semantics of ===. Obviously one expects access to a Map item to be O(1), so for sure the runtime is not going to traverse the whole Map comparing the keys with "===". To simulate "===" sematics and have instant access, I guess one possibility is to get the hash code of the memory address of the object used as key.

Related to this, given that JavaScript objects behave similarly to a Dictionary of string keys (you can add or remove items and the lookup is supposed to be almost immediate), one could assume that they would be implemented as a Hash Table. Hash Tables are very fast, but they are slower that property access in a other class based languages (C#, Java, C++...) where the access to a specific property will always use a same offset from the beginning of the object (so you save the time of running the "getHashCode" function). Well, I can read here that for example V8 uses dynamically created hidden classes, making property access as fast as in C++.

I noticed this sentence: A Map may be perform better in scenarios involving frequent addition and removal of key pairs. in the MDN comparison. It rather fits with the V8 policiy. Each time you add a new property to an Object I guess V8 needs to create a new hidden class, and that comes at a (small) cost that most of the times is pretty much compensated by the very fast property access that the new class provides. However, if you add/remove very frequently, maybe the time saved in property access does not compensate the time spent in the hidden class creation.

Sunday, 15 October 2017

Hendrik Beikirch Back in Toulouse

L'année dernière j'ai déjà écrit sur le magnifique et monumental fresque murale fait par Hendrik Beikirch à Toulouse (quartier Empalot). Comme je l'ai expliqué dans ce post, le bâtiment ignoble sur lequel le fresque a été fait, va être démoli. C'est pour ça que, et compte tenu que les habitants du quartier aiment bien cet fresque, la ville de Toulouse l'a invité à faire une autre fresque le mois dernier. Je suis allé voir le résultat ce weekend, et encore une fois, c'est magnifique!

Essayer d'écrire en Français m'épuise encore, je vais passer à l'anglais...

So another 12 stories building block 200 meters far from the one of the previous year was chosen to be gifted by this amazing piece:

In this picture you can see both murals:

Hendrik Beikirch had already visited Toulouse before these works in Empalot. In 2015 he took part in that year's edition of the Mister Freeze Urban Contemporary Art and Graffiti exhibition. He painted this not so massive but equally beautiful mural in the Mountaudran are. It's still in good health nowadays.

By the way, the Mister Freeze Urban Art festival has kept improving year after year. In 2015 it was good, in 2016 it was very good, and this year is's been just amazing. I should find some time to dedicate a post to this last edition.

Friday, 6 October 2017

Low-Rise Cities

I've ever loved skyscrappers. My first times in The City and Canary Dwarf in London I was amazed, and in my first visit to La Defense in Paris I was on the verge of extasis. When I visited Frankfurt, it was mainly cause it's nicknamed "Mainzhattan" :-). Gothick cathedrals have always captivated me, and I tend to see Skyscrappers as a continuation of them.
As of today, I continue to enjoy the view of a skyscrapper dominating a cityskype, but I've turned more selective. It's not that they need to be architectonic masterpieces, but there are some aesthetical minimums that if not reached turn the skyscrapper (or any high-rise building) into a real pain. It's not just a matter of materials, in some occasions I find more interesting some restored high-rise residential buildings of the 70's that some recent glass and steel buildings. For example some of the skyscrappers in Tallinn are pretty "untasty".

The other big change in my perception of skyscrappers is their location. In the past I absolutely loved huge concentrations of skyscrappers, now I tend to prefer isolated ones (1, 2 or 3) scattered over different points of one city. They act as reference points for the urban landscape and I pretty apreciate the contrast with the low or mid-rise surrounding buildings. Related to this also, I don't see the need (or the good taste) of going much higher than 200 meters. I pretty much like Brussels for example, with several towers between 80 and 150 meters spreading all over the cityscape, and with a "non oppressive" small concentration of them in the Gare du Nord area. I also quite like how it goes in Berlin.

Regarding high-rise buildings (I consider like that buildings between 40 and 80 meters), it's a bit the same. I like them a lot, but not massive concentrations of them. Coming from a city (Xixon) where there are no skyscrappers, but half of the city is made up of buildings above 40 meters, disorderly glued ones to others... I can understand that some people are not particulary fond of them (and if you've ever been to Vigo or A Corunha it's even easier to understand).

When I arrived to Toulouse I pretty missed (and continue to miss, waiting eagerly for the planned Tour d'Occitanie and the intended Tour Fenetre de Pista) having at least 1 skyscrapper, and this lack felt odd to me, I was not familiar with cities of this size and healthy economy that didn't have a single skyscrapper (at this moment no building rises above 70 meters). On the other side, I felt quite pleasant its low-rise nature. You find quite a few buildings between 10 and 15 stories, but there are not massive areas full of them, so putting aside that most of them are from the 60's/70's, are ugly and desperately need a total facade refurbishing, they work a bit as the reference points that I mentioned earlier. The low-rise nature of the city center and certain neighbourhoods is really nice, but I absolutely can not understand that they have been constructing tons of buildings of 3 or 4 stories in the last decade (hopefully as of late there seems to be a tendency to construct a bit higher). Low density means a crazy level of urban sprawl that means that you'll never manage to have an efficient public transport system. Just to give you an idea, the future third Metro line that will go from one end to another of the Metropolitan area (the one of 750.000 inhabitants, not the urban area of 1.250.000) will be 25 kms long!!! I think it should be forbidden to construct new buildings of less than 5-6 stories, and 7-9 ones should be the norm. Indeed, overtime I've started to appreciate the mid/high rise mess of my hometown (also because many of them have undergone an amazing facade renovation).

In general terms French people dislike mid/high-rise buildings, and deeply hate skyscrappers. I think it's a sort of trauma caused by how bad things have gone in the social housing states (cités) of the 70's. For me for sure architecture has nothing to do with this disaster. There are some housing states (at least in Toulouse) that are mainly low-rise (Les Izards) and that have ended up turned into no-go areas. It's not a matter of architecture, it's a matter of Islam, fake victimization and pure senseless hate for the old colonial power. There's also a sort of Tour Montparnasse syndrome. Most Parisians hate it; to the point that time ago one candidate to the mayor's office intended to demolish it! (fuck, J'adore cette tour!!!, it makes an amazing contrast with the perfect and so Parisian neighbourhoods around it). Another reason why it's pretty uncommon to see skyscrappers in the French landscape outside Paris it's that there are some very strict security rules. Buildings above 60 meters need to have a permanent unit of fireworkers, so this makes maintenance crazily expensive, and even for cities that seem to be more friendly to high rise buildings (like Marseille and Lyon) it's difficoult to get more than one skyscrapper per decade.

Ma si belle Tour de Montparnasse

I love cities, and I got quite interested in whether there are other relatively big cities that at this day lack any skyscrapper. From my trips, I could think of a few candidates, but I didn't know if maybe there would be some office building or some huge residential block in the outskirts. So I've been investigating in wikipedia and Emporis, and I've come up with a listing (for sure there can be errors, maybe outdated data or some skyscrapper in the metropolitan area that did not show up in the listings I've checked). Notice that I'm not including here churches, historical buildings or TV/Airport towers.

  • Washington DC. This pretty shocked me. The strong height restrictions that have always been in place cause that no building rises above 60 meters.
  • Dresden. It seems no building goes beyond 60 meters
  • Edimbourgh. Tallest building is 64 meters and is just an ugly tower block in a housing state. No proposed skyscrappers as far as I know.
  • Glasgow. Quite a few 70-60 meters towers in housing states. There's some proposal for going higher, but nothing confirmed so far.
  • Dublin. Seems the Irish are "very French" regarding buildings height. Right now the highest building is below 70 meters, but there are approved plans for some buildings between 90 and 70 meters (that have caused quite controversy).
  • Belfast. A couple of buildings around 80 meters.
  • Stuttgart. This one rather surprised me. In one of the most wealthy European cities just a couple of buildings reach 75 meters (hey, like my hometown!!!)
  • Athens. They have a 100 meters building done in the 70's leveraging one moment when they managed to skip the very strict law that prevents buildings from going above 40 meters!!!
  • Bremen. It has a recent office tower reaching 80 meters
  • Strasbourg. Its top is below 80 meters, no plans for rising higher.
  • Malaga. Right now nothing goes beyond 60 meters. There's a controversial proposal for a 130 meters hotel
  • Zaragoza. They have a couple of buildings around 80 meters.
  • Budapest. This beautiful, decadent city has an unintersting tower reaching 85 meters, for the rest is rather low-rise and skyscrappers remain a very controversial topic.
  • Helsinki. A not particularly interesting residencial building tops the city (that as a whole is not particularly beautiful) at 86 meters.
  • Copenhagen. A hospital in the suburbs reachs 120 meters. Then it has several towers between 100 and 80 meters (some of them very beautiful) scattered over the whole city. I pretty like its urban landscape.
  • Geneve. Pretty surprising for such an international city, even more when Zurich and Basel have been moving high in the last years. They just have an old, uninteresting, 90 meters residential building in a "cite".
  • Thesaloniki. Seems like nothing goes beyond 50 meters!
  • Nice. Quite similar to Toulouse. Contrary to Lyon, Nantes or Bordeaux, the 70's, when French laws were not so strict, did not gift them with a remarkable office tower or an ugly residential tower in a "Cité", that would rise beyond 70 meters. There does not seem to be plans for breaking this dynamic

I've also found quite a few other cities that just got their only (or very few) skyscrapper in the last years

  • Seville. They've built a pretty nice glass and steel tower in the last years. Other than that, no building seems above 60 meters.
  • Rome. They seem to have woken up lately, maybe trying to catch up with Milan and Naples.
  • Turin. It's been in the last years when the have had the luck to see the completion of 2 pretty beautiful towers (200 and 160 meters). Notice that before that the city's roof was a 100 meters building of 1933!!!.
  • Goteborg. One recent tower reaches 100 meters. Then a few towers of 80-70.
  • Bilbao. Well, this is a quite particular case. In the city proper there is a single building well above 100 meters (the beautiful Iberdrola Tower, 166 meters). Then there's a new, not particularly cute, residential tower next to the bus station, and then the city is full of mid/high rise buildings absolutely everywhere, so indeed it's a very vertical city. Notice that in Baracaldo (just next to Bilbao) you find the 100 meters BEC tower and some rather noticeable and interesting residential towers.
  • Marseille. The magnificent 150 meters CGA-CGM tower was completed in 2010, and the slightly shorter Jean Nouvel tower should be completed next year. These 2 towers aside, Marseille is very vertical for being a French city. The breathtaking views from La bonne Mere show tons of mid/high-rise buildings, reminding me of Bilbao

Sunday, 1 October 2017

Islamists and Delinquency

There's an evident link between radical Islam and delinquency. A big part of the Islamists that go to rape and enslave women in Syria have a background as dealers, common thieves and so on. The same goes for those committing attacks in Europe, indeed, in many cases these ones have not left behind their past as petty criminal, and have been dealing and committing robberies until the day before their attacks. One root reason why these bastards fall easily into Islamism is that they are most of the time very poorly educated people (better to smoke joints in the park than going to high school...) and in most cases they are not particularly smart individuals... This bunch of ignorant bastards are easy prey for any of those Saudi paid and educated imams managing the radical mosque of the neighbourhood, for the Video game style yihadist propaganda on the net or for a previously radicalised prison mate.

It's not only that petty criminals are easier to indoctrinate, it's also that the more criminality exists in one neighbourhood, the more isolated from the rest of the city it will become. The closer and more communitarist the area becomes, the easier it will for the disaffected population to be lured into the Islamist trap. So for the Islamist indoctrinators, every time the police is prevented from entering a "quartier sensible", or the firemen are attacked while trying to do their work, or an ambulance is set on fire (like last month in "Le Mirail" in Toulouse), or a teacher is silenced, insulted and even physically attacked, it's a step in the right direction. That's the main reason why these "thinking heads" of the islamization of Europe, while advocating a "society" where people will get an arm chopped for having committed a robery, approve and support delinquency in the neighbourhoods that they are trying to dominate.

The other day, reading an impressive and terrifying investigation in Charlie Hebdo about the Islamization of the High Schools in the Northern neighbourhoods of Marseille (it's even worse that I would expect), I came across with another motivation for Islamists to tolerate and get involved in delinquency. One High School director explains how in 2004 (yes, the islamization process to destroy our societies has been working from well before many people think) a group of dealers used to insult some young teachers, calling them bitches and infidels for wearing a skirt... After the intervention of the police there was some "negotiation" between the school and these pieces of crap to calm down the situation. The director was quite intrigued by how it was possible that these "very strict" Muslims would be involved in a vicious activity (drugs are forbidden in Islam, they are "haram") like dealing drugs, and discussing with them he learnt:

"They've sweared to me that they only sold drugs to "whites", the French youngsters, and that this was their way to practice jihad. To fuck their brain, their defenses, to break their shit society. That day, I understood that these guys, even if they were lying, were at war with you, with us, with me".

So they conduct jihad by poisonig "the infidels" with drugs. Quite in line with the last directives by Daech and other Islamist beasts, asking for poisoning water supplies, supermarket foods... they also ask for burning forests!!!

Just before publishing this post I learn with sadness about this new Islamist attack, this time in Marseille, in one of world's most beautiful train stations, a place that I particularly love. Hopefully the terrorist has been shot dead by the Security Forces.

More than ever, Let's hunt down (dead or dead) the Islamists

Friday, 29 September 2017

Expirable Promises

I'd read some samples of using Promise.race to implement timeouts for Promises (reject the promise if it has not finished after x time). You can see an example here. Looks good, but it's not what had come to my mind when thinking about this issue and not having had the race function into account.

Given that I can not reject and existing promise, I would have to create a new one, that would be rejected if the timeout expires, or resolved if the original promise finishes before the timeout. I call this new promise an "expirable promise". Let's see the code

function createExpirablePromise(pr, expirationTime){
		let nP = new Promise((resolve, reject) => {
			let timeout = setTimeout(() => {
				reject("timed out");
			}, expirationTime);
			pr.then((result) => {
				clearTimeout(timeout);
				resolve(result);
			});
		});
		return nP;
}

If we are given a function that returns a promise we can create a function that returns an expirable promise like this:

//fn is a function that returns a promise
//we return a function that retuns an "expirable promise"
function createExpirableFunction(fn, expirationTime){
	let expirableFn = (val) => {
		let pr = fn(val);
		return createExpirablePromise(pr, expirationTime);
	}
	return expirableFn;
}

With the joyful addition of async/await to the javascript arsenal, we can write a cute sample like this:

//example of a long running async operation
//function that returns a Promise
function formatter1Promisified(st){
	return new Promise((res, rej) => {
		console.log("formatter1 running");
		st = st.toUpperCase();
		setTimeout(() => {
			res(st);
		}, 3000);
	});
}


async function testUsingAsync(){
	let expirationTimes = [1000, 4000];
	for (let i=0; i < expirationTimes.length; i++){
		let timeout = expirationTimes[i];
		try{
			let res = await (createExpirableFunction(formatter1Promisified, timeout))("Hi"); //timeout expires("Hi"); 
			console.log(`succeeded with timeout: ${timeout}, result ${res}`);
			break;
		}
		catch (ex){
			console.log(`failed with timeout: ${timeout}`);
		}
	}
}



testUsingAsync();

Tuesday, 19 September 2017

Promises and Tasks

.Net Tasks and JavaScript Promises are rather similar, as both are used for the same. They hold a value that will be available at some point, moment at which they will invoke some code that we've provided to them as a continuation. There are differences though. In the multithreaded world of .Net the creation of a promise can involve the execution of another thread (when we do Task.Run for example), this is not the case with Promises, as at the Javascript level everything is single-threaded. Another difference is the parameter passed by to the (callback) function that will be executed as a continuation. While Promise.prototype.then will pass just the result of the precedent Promise, Task.ContinueWith will pass the Task itself. This stems from the fact that while we can access the result of a Task via the (blocking) Task.Result property, the only way to access the result of a Promise is by the Promise itself passing that result to us.

I've found another not so obvious difference that I'll share here. In .Net there was only a 2 years gap between the introduction of Tasks (.Net 4.0 in 2010) and the arrival of the magic async/await pair (C# 5 in 2012). In JavaScript the gap between Promises and the introduction of ES7 async/await in some environments (let's put aside libraries that simulated it via iterators) has been much bigger. This means that in .Net the exposure of programmers to ContinueWith has been rather low when compared to how much Javascript developers have dealt with then. To work with "then" we need to clearly interiorize this: Given a Promise P1, when we invoke then on it and obtain a P2 promise, if the callback/handler function that we have passed to then returns another promise (P3), then P2 will not be resolved until when P3 is resolved. This allows us to chain calls to "then" rather than nesting them. I mean (from Exploring ES6):


asyncFunc1()
.then(function (value1) {
    asyncFunc2()
    .then(function (value2) {
        ···
    });
})


The flat version looks like this:


asyncFunc1()
.then(function (value1) {
    return asyncFunc2();
})
.then(function (value2) {
    ···
})


The above is well explained in MDN:

A Promise in the pending status. The handler function (onFulfilled or onRejected) gets then called asynchronously (as soon as the stack is empty). After the invocation of the handler function, if the handler function:
...
• returns another pending promise object, the resolution/rejection of the promise returned by then will be subsequent to the resolution/rejection of the promise returned by the handler. Also, the value of the promise returned by then will be the same as the value of the promise returned by the handler.

In .NET the behaviour of ContinueWith when the delegate passed to it returns in turn a Task is not so straightforward. This internal Task can be either an Attached Child Task or a Detached Nested Task. By default it'll be a Detached Nested Task, meaning that the outer task does not need of this internal task to be finished to be finished on its own. So this behaviour is different from JavaScript. If we want that the completion of the outer task depends on the completion of the inner task, we have to create this inner task with the TaskCreationOptions.AttachedToParent flag. It is explained here and here.

... the Task being created registers with that parent Task as a child, leading to two additional behaviors: the parent Task won’t transition to a completed state until all of its children have completed as well, and any exceptions from faulted children will propagate up to the parent Task (unless the parent Task observes those exceptions before it completes).

I've tested it myself, but the code using Tasks is rather ugly and odd and won't upload it here. Hopefully using async/await abstracts us of all of this.

The Last Face

To make things clear from the beginning, forget all the crap reviews that you could have read, The last face is an excellent movie. Tough, touching, almost captivating, and the performances of Bardem and Charlize Theron are impressive.

When I found that there was a film directed by Sean Penn and starred by Bardem and Charlize Theron I assumed that it had many chances to be a good film. The plot: 2 doctors working on humanitarian missions in war ravaged Africa end up falling in love, but the relation proves to be too difficoult given their circumstance. Well, the "love story" thing is not my cup of tea, but the attrocities in the different African conflicts are of quite more interest to me, so all in all it still could be a good watch. Then I read the critics and felt shocked. Seems like all the "educated and intelectual critics" (and the so cool attendants to its premier in Cannes) were treating it like shit, mocking it and calling it "the laughing stock of Cannes" and "refugees porno"... I felt quite puzzled, so I decided to see by myself.

The film is amazing. Its 3 components: brutality of senseless conflicts in Africa, the risks taken by Humanitarian workers in their uncompromising devotion to saving unknown lives, and the difficoult (to say the least) love story between two of them, play together masterfully. There are many gripping moments like for example when a kid is being forced to shoot his father (that will literaly blow your head away), or the amazing speech of Charlize Theron in a fund raising event. Also when Charlize advocates for focusing efforts on trying to stop the conflicts and allowing development, questioning what sense it makes to try to save these human beings now, just to keep them living in biggest misery, and Bardem tells her that even in all this misery, they manage to find dignity and joy, loving their children and living on. This film is emotional and inspiring, and I really can't understand the bad reviews. Well, maybe I can.

It seems like much criticism comes from relating this film to the White Savior complex. So it seems portraying whites trying to save black lives is a sort of "neocolonial product". It's as if all these humanitarian heros were just trying to purge the "evil white man" culpability, and furthermore they have no right to fall in love (precisely people that show so much love for others sacrificing their comfortable lives as doctors in wealthy western countries to go deep in hell... ) Fuck off, all this criticism denotes all the stupid colonial shame so predominant in western (sort of) leftists. This film is not about colonialism (the past), it's about people dying now and people that will continue to die tomorrow... And by the way, sure many bad things were done in the past, but thinking that all the current misery is just a consequence of "evil white colonial powers" is an oversimplification and for sure will not help at all.

Maybe some "critics" will also dislike the introduction of the AIDS drama in the film by means of a white woman and not an African. I don't think the intent is to denounce how devastating AIDS is Africa, but to remember us that it's even one more threat stalking these doctors that do not doubt in getting soaked in the blood of a stranger to try to save his life.