Monday, 14 October 2013

Dishonored has addins! Daud the Knife of Dunwall and The Brightmore Witches

Daud's face, rendered as a painting It's difficult to remember that in the original Dishonored storyline there were two people carrying the mark of the Outsider. There was Corvo, but then there was Daud. The Knife of Dunwall and Brigmore Witches extended missions of the game both come as Dishonored downloadable content and both star Daud as the lead. He first has to fight an army of whale butchers then the overseers who come to destroy his army of assassins, then he goes to find the Brigmore Witches and foil their plans. It was a nice touch that they changed characters. Someone who either killed everything that moved or took great care to finish up Dishonored the non-lethal way would probably have issues with changing their game style in the continuation. Having a different character frees our conscience and lets us play this game as we wish at that moment. It also hints that the story is not in the characters, but in the island universe created in the game.

The story here is that the Outsider tips Daud, who is already conflicted about his choice to murder the empress and kidnap her daughter, about a mysterious woman called Delilah. It soon becomes evident that she is aware of Daud's interests when she seeks the Overseers on Daud's hidden base. She apparently is the leader of a coven of witches based in Brigmore Manor. Rumors about them appeared in the main Corvo story, as well. Delilah, originally a servant in Dunwall Tower and a talented painter, is attempting to take over Emily Kaldwin, the young daughter of the empress, and by defeating her you become a hero that, just as Corvo but unbeknownst to anyone but the Outsider, saves Emily. That was a nice twist, also, binding the two stories together. Events in Daud's story also parallel Corvo's, as NPCs talking to each other often reveal.

It is interesting that, besides Blink and Dark Vision which seem to be essential to playing the game, Daud has different magical powers as well as different weaponry. That annoying power that he used to overpower Corvo at the beginning of the main story is available to you and very handy. As with Dishonored, you can choose your level of mayhem which in turn, I suppose, changes the story. I tried to play it as non-lethal as I could, but having the reputation of a renowned assassin for hire really made me itch for bloodthirsty apocalypse. It felt great to know that I can kill everybody, even when I chose not to, I guess.

An intriguing idea came to me. Besides Corvo and Daud there were other people involved with Outsider powers: Delilah and Granny Rags. If they make more downloadable content for the game (which I really really hope they will) it could be interesting to play Delilah, or even Granny, as prequels to these stories. It would serve multiple purposes, as it would probably appeal to female players more, as well as changing the weaponry and magic almost entirely. Witches in this game use magic arrows and use dead animals and plants to do their bidding, while Granny Rags uses hordes of rats and an amulet that makes her immortal until you destroy it. There are neat tricks that would be a waste not to be used by the player. Both Corvo and Daud actually survive in the end and don't forget that the Dishonored universe is placed in an archipelago of islands, only one of them having been explored in any detail, with a lot of rumors and information about the others and a lot more opportunities. A story on the whaling ships, perhaps? Something in a wide open space, as demonstrated by the Brigmore Witches manor grounds, maybe? Dishonored may have started like something that seemed to clone Assassin's Creed, but it has a lot more potential. Knowing the guys at Arkane Studios, that potential is going to be used, even if the wiki on The Brigmore Witches says it is the last DLC for Dishonored. Perhaps Dishonored II will be made soon.

As a conclusion, I really enjoyed the game, even if Daud's voice was Michael Madsen's, who I usually dislike at first glance. It's good he wasn't visually in the game, then :)

Thursday, 10 October 2013

OpenLayers & AngularJS - add features, choose their appearance and behaviour with clustering

Being a beginner in both OpenLayers and AngularJS it took me a long while to do this simple thing: add stuff on a map and make it show as I wanted. There were multiple gotchas and I intend to chronicle each and every one of those bastards.
First, while creating a map and doing all kinds of stuff with it using OpenLayers is a breeze, doing it "right" with AngularJS is not as simple. I thought I would not reinvent the wheel and looked for some integration of the two technologies and I found AzimuthJS. In order to add a map with Azimuth all you have to do is:
<div ol-map controls="zoom,navigation,layerSwitcher,attribution,mousePosition" control-opts="{navigation:{handleRightClicks:true}}">
<az-layer name="Street" lyr-type="tiles"></az-layer>
<az-layer name="Airports" lyr-type="geojson" lyr-url="examples/data/airports.json" projection="EPSG:4326"></az-layer>
</div>
You may notice that it has a simple syntax, it offers the possibility of multiple layers and one of them is even loading features dynamically from a URL. Perfect so far.
First problem: the API that I am using is not in the GeoJSON format that Azimuth know how to handle and I cannot or will not change the API. I've tried a lot of weird crap, including adding a callback on the loadend layer event for a GeoJson layer in order to reparse the data and configure what I wanted. It all worked, but it was incredibly ugly. I've managed to add the entire logic in a Javascript file and do it all in that event. It wasn't any different from doing it from scratch in Javascript without any Angular syntax, though. So what I did was to create my own OpenLayers.Format. It wasn't so complicated, basically I inherited from OpenLayers.Format.JSON and added my own read logic. Here is the result:
OpenLayers.Format.RSI = OpenLayers.Class(OpenLayers.Format.JSON, {

read: function(json, type, filter) {
type = (type) ? type : "FeatureCollection";
var results = null;
var obj = null;
if (typeof json == "string") {
obj = OpenLayers.Format.JSON.prototype.read.apply(this,
[json, filter]);
} else {
obj = json;
}
if(!obj) {
OpenLayers.Console.error("Bad JSON: " + json);
}

var features=[];
for (var i=0; i<obj.length; i++) {
var item=obj[i];
var point=new OpenLayers.Geometry.Point(item.Lon,item.Lat).transform('EPSG:4326', 'EPSG:3857');
if (!isNaN(point.x)&&!isNaN(point.y)) {
var feature=new OpenLayers.Feature.Vector(point,item);
features.push(feature);
}
}

return features;
},


CLASS_NAME: "OpenLayers.Format.RSI"

});
All I had to do is load this in the page. But now the problem was that Azimuth only knows some types of layers based on a switch block. I've not refactored the code to be plug and play, instead I shamelessly changed it to try to use the GeoJson code with the format I provide as the lyr-type, if it exists in the OpenLayers.Format object. That settled that. By running the code so far I see the streets layer and on top of it a lot of yellow circles for each of my items.
Next problem: too many items. The map was very slow because I was adding over 30000 items on the map. I was in need of clustering. I wasted almost an entire day trying to figure out what it wouldn't work until I realised that it was an ordering issue. Duh! But still, in this new framework that I was working on I didn't want to add configuration in a Javascript event, I wanted to be able to configure as much as possible via AngularJS parameters. I noticed that Azimuth already had support for strategy parameters. Unfortunately it only supported an actual strategy instance as the parameter rather than a string. I had, again, to change the Azimuth code to first search for the name of the strategy parameters in OpenLayers.Strategy and if not found to $parse the string. Yet it didn't work as expected. The clustering was not engaging. Wasting another half an hour I realised that, at least in the case of this weirdly buggy Cluster strategy, I not only needed it, but also a Fixed strategy. I've changed the code to add the strategy instead of replacing it and suddenly clustering was working fine. I still have to make it configurable, but that is a detail I don't need to go into right now. Anyway, remember that the loadend event was not fired when only the Cluster strategy was in the strategies array of the layer; I think you need the Fixed strategy to load data from somewhere.
Next thing I wanted to do was to center the map on the features existent on the map. The map also needed to be resized to the actual page size. I added a custom directive to expand a div's height down to an element which I styled to be always on the bottom of the page. The problem now was that the map was getting instantiated before the div was resized. This means that maybe I had to start with a big default height of the div. Actually that caused a lot of problems since the map remained as big as first defined and centering the map was not working as expected. What was needed was a simple map.updateSize(); called after the div was resized. In order to then center and zoom the map on the existent features I used this code:
        var bounds={
minLon:1000000000,
minLat:1000000000,
maxLon:-1000000000,
maxLat:-1000000000
};

for (var i=0; i<layer.features.length; i++) {
var feature=layer.features[i];
var point=feature.geometry;
if (!isNaN(point.x)&&!isNaN(point.y)) {
bounds.minLon=Math.min(bounds.minLon,point.x);
bounds.maxLon=Math.max(bounds.maxLon,point.x);
bounds.minLat=Math.min(bounds.minLat,point.y);
bounds.maxLat=Math.max(bounds.maxLat,point.y);
}
}
map.updateSize();
var extent=new OpenLayers.Bounds(bounds.minLon,bounds.minLat,bounds.maxLon,bounds.maxLat);
map.zoomToExtent(extent,true);

Now, while the clustering was working OK, I wanted to show stuff and make those clusters do things for me. I needed to style the clusters. This is done via:
        layer.styleMap=new OpenLayers.StyleMap({
"default": defaultStyle,
"select": selectStyle
});

layer.events.on({
"featureselected": clickFeature
});

var map=layer.map;

var hover = new OpenLayers.Control.SelectFeature(
layer, {hover: true, highlightOnly: true}
);
map.addControl(hover);
hover.events.on({"featurehighlighted": displayFeature});
hover.events.on({"featureunhighlighted": hideFeature});
hover.activate();

var click = new OpenLayers.Control.SelectFeature(
layer, {hover: false}
);
map.addControl(click);
click.activate();
I am adding two OpenLayers.Control.SelectFeature controls on the map, one activates on hover, the other on click. The styles that are used in the style map define different colors and also a dynamic radius based on the number of features in a cluster. Here is the code:
        var defaultStyle = new OpenLayers.Style({
pointRadius: "${radius}",
strokeWidth: "${width}",
externalGraphic: "${icon}",
strokeColor: "rgba(55, 55, 28, 0.5)",
fillColor: "rgba(55, 55, 28, 0.2)"
}, {
context: {
width: function(feature) {
return (feature.cluster) ? 2 : 1;
},
radius: function(feature) {
return feature.cluster&&feature.cluster.length>1
? Math.min(feature.attributes.count, 7) + 2
: 7;
}
}
});
You see that the width and radius are defined as dynamic functions. But here we have an opportunity that I couldn't let pass. You see, in these styles you can also define the icons. How about defining the icon dynamically using canvas drawing and then toDataURL? And I did that! It's not really that useful, but it's really interesting:
        function fIcon(feature,type) {
var iconKey=type+'icon';
if (feature[iconKey]) return feature[iconKey];
if(feature.cluster&&feature.cluster.length>1) {
var canvas = document.createElement("canvas");
var radius=Math.min(feature.cluster.length, 7) + 2;
canvas.width = radius*2;
canvas.height = radius*2;
var ctx = canvas.getContext("2d");
ctx.fillStyle = this.defaultStyle.fillColor;
ctx.strokeStyle = this.defaultStyle.strokeColor;
//ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.beginPath();
ctx.arc(radius,radius,radius,0,Math.PI*2);
ctx.fill();
ctx.stroke();
ctx.fillStyle = this.defaultStyle.strokeColor;
var bounds={
minX:1000000000,
minY:1000000000,
maxX:-1000000000,
maxY:-1000000000
};
for(var c = 0; c < feature.cluster.length; c++) {
var child=feature.cluster[c];
var x=feature.geometry.x-child.geometry.x;
var y=feature.geometry.y-child.geometry.y;
bounds.minX=Math.min(bounds.minX,x);
bounds.minY=Math.min(bounds.minY,y);
bounds.maxX=Math.max(bounds.maxX,x);
bounds.maxY=Math.max(bounds.maxY,y);
}
var q=0;
q=Math.max(Math.abs(bounds.maxX),q);
q=Math.max(Math.abs(bounds.maxY),q);
q=Math.max(Math.abs(bounds.minX),q);
q=Math.max(Math.abs(bounds.minY),q);
q=radius/q;
var zoom=2;
for(var c = 0; c < feature.cluster.length; c++) {
var child=feature.cluster[c];
var x=-(feature.geometry.x-child.geometry.x)*q+radius;
var y=(feature.geometry.y-child.geometry.y)*q+radius;
ctx.fillRect(parseInt(x-zoom/2), parseInt(y-zoom/2), zoom, zoom);
}
feature[iconKey] = canvas.toDataURL("image/png");
} else {
feature[iconKey] = OpenLayers.Marker.defaultIcon().url;
}
return feature[iconKey];
};

defaultStyle.context.icon=function(feature) {
return fIcon.call(defaultStyle,feature,'default');
}
selectStyle.context.icon=function(feature) {
return fIcon.call(selectStyle,feature,'select');
}
This piece of code builds a map of the features in the cluster, zooms it to the size of the cluster icon, then also draws a translucent circle as a background.
I will not bore you with the displayFeature and clickFeature code, enough said that the first would set the html title on the layer element and the other would either zoom and center or display the info card for one single feature. There is a gotcha here as well, probably caused initially by the difference in size between the map and the layer. In order to get the actual pixel based on latitude and longitude you have to use map.getLayerPxFromLonLat(lonlat), not map.getPixelFromLonLat(lonlat). The second will work, but only after zooming or moving the map once. Pretty weird.

There are other issues that come to mind now, like making the URL for the data dynamic, based on specific parameters, but that's for another time.

Tuesday, 8 October 2013

Clustering (or any other Strategy) not working in OpenLayers

As promised, even if somewhat delayed, I am starting programming posts again. This time is about working with OpenLayers, a free wrapper over several Javascript mapping frameworks. The problem: after successfully creating and displaying a map and adding "features" to it (in this case a yellow circle for each physical location of a radio station), I wanted to add clustering; it didn't work. Quick solution: add the layer to the map BEFORE you add the features to the layer.

For the longer version, I have to first explain how OpenLayers operates. First order of business is creating an OpenLayers.Map object which receives the html element that will contain it and some options. To this map you add different layers, which represent streets, satellite imagery and so on. One can also add to any of these layers a number of features which will be displayed on the map. A common problem is that for many data points the map becomes cluttered with the rendering of these features, making for an ugly and slow interface. Enter "clustering" which means using a layer strategy of type OpenLayers.Strategy.Cluster to clump close features together into a larger one. It should be as easy as setting the layer 'strategies' array or adding to it an instance of a Cluster strategy. But for me it did not work at all.

After many attempts I finally realized that the clustering mechanism was dependent on the existence of an event handler for the 'beforefeaturesadded' event of the layer. Unfortunately for me and my time, this handler is only added when the layer is added to a Map! So all I had to do was to add the layer to the map before adding the features to it. Good thing that I recently shaved my head, or I would have tufts of bloody hair in my fists right now.

Monday, 7 October 2013

Starcraft II - Heart of the Swarm

After playing the second campaign in the Starcraft II game, the Zerg one, I have to say that I wasn't terribly impressed. 27 missions in all, nothing very fancy, and a linear script that involves only Kerrigan getting stronger and going after Mengsk. The only delight here was the character of Abathur, the Zerg "scientist", who speaks like that Korean doctor in Monday Mornings and his only concern is to find new strands of evolution for the swarm. Kerrigan, even if her voice was that of Tricia Helfer, is a cardboard character who acts arrogantly like a queen (well, she is one) taking about vision and cunning, but acting impulsively and in a direct manner most of the time. She is the character I was playing, so that is probably why I didn't really enjoy the story so much. Mark my words, if you want to find the funny moments in the game, just click on Abathur whenever you can.

There were some nice surprises in the game, though, like when destroying a neutral vehicle on a map and receiving a communication from a human soldier complaining he just paid for that car. A huge game, made with people from three continents, SCII must appease the masses to pay for itself, therefore the script could not have been too complex. They also concentrated on the multiplayer action, not on the storymode one plays on Casual difficulty in order to see the "movie", but still... a good script and a captivating story could have brought millions more into the fold, so to speak. The Starcraft universe is, after all, a very interesting one, describing the interactions between three interstellar cultures (four, if you consider the Xel'Naga). The potential here is immense, with books and movies to keep people interested for generations.

I liked the concept of evolution missions. You see, Abathur had the ability to alter strains of units and gave you two choices which were mutually exclusive. But before you chose, you had to play two mini-missions that showed the different strains in action. You usually had to kill some indigenous lifeform, absorb its essence and integrate it into your creatures. Also in the game there was a creature called an Infestor, which, judging by how the Terran campaign went, you will not see it in the multiplayer game. It allowed you to capture any enemy unit, except the heroic ones. Pretty fun. One of the evolution missions gave you the ability to morph hydralisks to lurkers, one of my favourite units from the old Starcraft game.

Overall I enjoyed playing the campaign, even if I felt that it could have been a lot greater. Finished it in about 10 hours, too. Of course, it would have taken a lot longer if I hadn't played on the easiest difficulty, but I didn't have a mouse and I really was only interested in the story. Unfortunately, I didn't feel like I gained much by playing the campaign as opposed to watching all the cinematics one after the other on YouTube, and that is, probably, what bothered me most.

So here is a compilation of Abathur dialogs.

Friday, 4 October 2013

Star Trek Enterprise - a good show corrupted

The crew of EnterpriseThere are multiple problems with Star Trek Enterprise that doomed the show from the beginning. One, I am sad to say, is Scott Bakula, who I couldn't really see as a smart and resourceful captain till the very end of the show. Another reason was the name, making people confuse Star Trek Next Generation with this series.

Yet another, and perhaps the most important reason, were the producers who abused their station to steer the show into an impossible position: an Earth ship that is older than Kirk's starship stuck in the middle of epic conflicts through time and space. Even the writers complained that it should have remained a show about early exploration and abstain from the flamboyant temporal cold war or the Xindi saga.

You see, the show started very nicely, with the launch of the first warp 5 capable human starship. The Vulcans are still not sure whether the humans should attempt this, if they are ready for the big bad universe, while humans react like teenagers that have been forbidden something. We get to see the birth of technologies so important in the Star Trek universe: the transporter, newly invented and feared (maybe rightly so, considering the multitude of episodes that involve some accident with it in the other series); they use grapnel hooks to tow; they use explosive torpedoes at start and phaser cannons that they constantly upgrade; the replicators can only manufacture simple food and they have cooks on board for the rest. The interactions of the crew were also welcome, as all of them seemed perfect for the job.

That is why the first season was good, promising a very interesting show about the beginning of human exploration. Then they botched it, with the introduction of a silly and pointless race, the Suliban, who have a faction of people receiving instructions from the future, while other future people are trying to stop them interfering with the "proper" timeline. Basically they should have asked Jean Claude VanDamme to come. This almost destroyed the second season.

A strange decision, which I can't quite say was bad or good, was to make a season that is continuous, rather than the individual episodes of Star Trek until then. They introduced the Xindi, another intriguing concept, of a coalition of species: reptilian, arboreal, simian, insectoid and aquatic. This probably wreaked havoc with their budget, so only the humanoid species usually appear. Somehow they wanted to write about terrorism, since all Americans were being influenced by 9/11, therefore the theme appeared throughout season three and quite a few episodes in season 4. First were the Xindi, who (for no reason that I can see) tested a small variation of a weapon on Earth, in preparation for a bigger one that they were still constructing. Rather than compare it with the American atomic bombs, which were the natural analogy here, they, of course, compared it with the 9/11 attacks.

A strange patch of the universe where the laws of physics are warped by huge metal spheres that have weird effects is the stage for the entire season three, while Enterprise goes to find the Xindi and stop them from destroying Earth. I felt that it was an interesting season, the only bad bits being some inconsistencies of the overall story, rather than individual episodes.

Then they had a religious sect that threatened to blow themselves inside Enterprise unless Archer destroys their enemies. The caricatured religion and condescending jabs at Palestinians should have angered Muslims more than cartoons of Mohamed. Then there was the final act of terrorism, when a faction of xenophobic humans take over the Verteron array on Mars. That script was a mess, probably because it was the last episode before the show ending one. Too much terrorism for a show that defines the transition of humanity into a peaceful future.

And then there was T'Pol, played by the lovely Jolene Blalock. That was probably the problem: she was too damn sexy. They had, therefore, to make her have emotional issues, get into relationships with everybody, make regular trips in the decontamination chamber and rub her body with antiseptic cream and so on. It is a disgrace for women in Hollywood that her role was massacred by all of these preconceptions and easy ways to get audience attention. And she was a Vulcan, the precursor of Spock, for crying out loud!

In other words the powers that be exaggerated everything and allowed Archer to be moving through time or singlehandedly creating the federation, while trying to keep something for Kirk and Picard to do. I know it is difficult to make an enticing and modern prequel to series that you watched and loved as a kid, but randomly choosing themes and ideas to "fix" the show to be more something or another is not a solution. That is why, while it the newest series of Star Trek, it was also one of the worst.

The disappointment comes, for me, when I see several portions of the show actually being great. The MAKO concept, for example, highly trained military personnel that accompanied Enterprise in the Xindi story arch was a good thing and the interaction with the regular security personnel. The controversial decisions that Archer had to make to protect Earth lent more character depth than most of the moral cardboard crap that usually infests Star Trek. The old school technology made the voyages of the new starship bring smart new levels of excitement to the exploration of space. I liked the "In the Mirror Darkly" episode, which was not a crossover to an alternate universe, but only a show about the Enterprise of the alternate universe where there were all ambitious and evil. Even the start credits looked different, showing the glorious history of Earth conquests.

My conclusion, especially today, when the number of sci-fi shows explodes as the audience requires more and more fantasy, is that Star Trek represents the hope of humanity for a bright future and that allowing it to be defined by money hungry Hollywood production companies was ultimately a mistake, no matter how much soul the writers, directors and actors put into it. A space exploration show made by Europeans, something that would mirror Star Trek's United Federation of Planets in cinematography, bringing talent and ideas from Britain, Germany, France, Russia, etc, and borrowing from the sci-fi legacy of all. I would love to see that.

Friday, 20 September 2013

Voyages

  Few people know this, but for a while now I've kept tabs on what happens in outer space, specifically Solar System colonization and asteroid mining. This means I've been connected to the wonderful revolution that is silently unfolding regarding human understanding and access to our small patch of universe.

  But this entry is not about space news, but rather my own thoughts on a subject that keeps bugging me: our own place in the world. You might have heard about the Fermi paradox. It is the theory that as big as the universe is as much time that has passed, the possibility that life and intelligence arose somewhere else is very close to 1. Not only that, but it remains close to 1 even if we look at the universe a few billions years back. The Fermi paradox asks then, how come we haven't heard of anybody else? Look at how fast we are evolving technologically; given a billion years surely we would invent at least the grey goo (although admittedly we would have the good taste to have it in more beautiful colors). What is going on?

  You might think this is not a real problem, but it truly is. To believe that no one in the whole of the universe did think to create self-reproducing probes is as ridiculous as believing we alone are intelligent enough to do it. Even at non relativistic speeds (stuff drifting aimlessly in the void) such a machine should have spread across the galaxy. Why aren't they here already?

  I am writing this piece while we have received confirmation that Voyager, one of the space probes launched in the 70's, run by computers with 4Kb of memory and spending power equivalent to that of a small light bulb to send info back to Earth, has reached interstellar space. It took more than three decades, but it is there. Another few tens of thousands of years and it leaves the Solar System. Triple that time and it reaches our nearest star. Billions of years have passed, though, and a thousand centuries are nothing on that timescale. And we build Voyager in the 70's! Of course, one could get pissed that no 20 Watt light bulb ever survived 30 years here on Earth, but that's another issue entirely. So where are the Voyagers of other species?

  There are several schools of thought on the subject. One, which I won't even discuss, is that we are the chosen people and are the only ones intelligent or even alive. Some versions of panspermia that suggest the ingredients of life came from meteors and are extremely rare on planets seem equally implausible to me.

  Another one, which I found really interesting, is that as technology advances, we are bound to create more complex virtual worlds, which, as comfort goes, are much easy to live in than "real" worlds. And I double quote the word here because when the simulation is advanced enough, the inhabitants there will also make other simulations of their own. In this view, we are most likely creatures that have evolved on the spare CPU of some machine, which is itself a simulation. It's turtles all the way down, man.

  Anyway, I find this theory fascinating because it also fights the law of entropy and the infinity of time. You see, in a simulated world, time would run faster than in real life. There is no need to wait 4 billion years for life to evolve, if a computer can simulate it faster. Do this until you reach the quantum limit underneath which time and space cannot be divided into smaller units anymore (if that even exists in the "realest" world) and you get universes that function with the fastest possible speed. Duplicate one of these virtual machines and two universes live simultaneously at the same time. It's a wonderful concept. Also, the quantum nature of our universe is eerily similar to the bits in a computer. Of course, once we get on that path, anything would be possible. We might be alone in the universe because it was designed as such. Or because the developers of our world are using a very common trick that is to render the graphics of a virtual world only where there are people playing. Another eerie similarity with the quantum world that changes behavior when someone it watching.

  There is also the concept of the multiverse. It says that all the possible states that can be taken by the universe are actually taken. We just happen to live in one version. If a particle can go one way or another, it will go both, once in each of two universes. Universal constants have values in the entirety of a range and a universe for each. We haven't met aliens yet and we were not destroyed by the culture shock because we are here not destroyed. It's a sort of a circular definition.

  Then there is the quarantine hypothesis. Aliens are not only present, but very much involved into our lives. They are waiting patiently for us to discover space flight or quantum matrix decomposition or whatever, before they make contact. They could even make contact just to tell us to stay away, all the universe if full, we are just late to the party. I guess it's possible, why not?

  Another idea, a more morbid one, is that no civilization survives beyond a certain threshold that we have not reached yet. When a global problem arises, there are people who are quick to associate this idea with that problem. Nuclear weapons, global warming, terrorism, sexting, Justin Bieber, twerking, etc. In the universal landscape they are irrelevant, at least until now and in the foreseeable future. Still, there is always the possibility that a game changing technology, what we call disruptive, will emerge naturally and will make any civilization disappear or simply obsolete or completely pointless. Just like the others above, this idea may assume a type of absolute. We could have a tiny chance to escape doom, only its probability is as close to 0 as the probability that there is a whole lot of life in the universe is close to 1. It's a bit terrifying, but because of its inevitability, also pointless to worry about.

  This idea of a chance, though, is interesting because it makes one think further ahead. If such a disruptive event or technology (Kurzweil's singularity, maybe) is about to come, what will it be? When did we burst technologically? When we developed mass production of commodities. When did we explode as a populace? When we developed mass production of food. When will we become more than we are? When we develop mass production of people, perhaps. That's one scenario that I was thinking about today and spurred this blog post. After all, it would be horrible to live in a world where every cell phone or computer is designed and/or built individually. Instead we take the models that are best and we duplicate them. We could take the smartest, more productive and more beautiful of us and duplicate them. The quality of the human race (as measured by the current one, unfortunately) would increase exponentially. Or we don't do that and instead create intelligent machines that surpass us completely. Only we design them to take care of us, not evolve themselves. Lacking the pressure to survive, we devolve into unthinking pets that robots feed and clean. That is another of these scenarios. What is both exciting and worrying is that there are a number of these scenarios that seem very logical and plausible. We can already see a multiverse of doom, but we are not doing anything about it.

  This brings me back to the colonization of the Solar System. For most of us, that sounds pointless. Why go to Mars when we haven't really finished colonizing the high mountains, the deep seas or even the African desert. All of these are orders of magnitude more friendly to human life than Mars. But the overwhelming advantage, the only reason why we must do it (there are others, but not necessary, only compelling), is to spread humanity in more than one basket. It is the good thing to do exactly because we don't know what is going to happen: just make a backup, for crying out loud, otherwise our simulated worlds of increasing complexity will just cease to exist when a larger meteor hits the planet.

  And speaking of meteors, I met people that had no idea that recently a meteor exploded in Chelyabinsk. What does it take for people to take notice of this very plausible threat? A meteor crashing into the new World Trade Center?

  This last point of view, of all I have discussed, is the most liberating and the only one worthy of consideration. Not because it is the best idea ever, but because it leaves us with a way out. We can, if we are careful, see the threat before it becomes unavoidable or spread ourselves wide enough so we don't get wiped out instantly. It gives us both hope and vision. All the others are absolutes, ideas that, just as the concept of an almighty god, are pointless to consider just because we can do nothing about them. All of our voyages, the most treasured discoveries and realizations of human kind, they all start with a thought. Let us think ahead.

Tuesday, 17 September 2013

The Culture Shock

As you know, I have been living in Italy for a whole two weeks now - I am a veteran, practically - and since friends keep asking me how things are, I am writing this entry. I will not dwell on the regular stuff; this is a hill region, close to the mountains so you can see them on the horizon, but not really mountainous. I am stationed right between the villages of Ispra and Cadrezzate and working 10 walking minutes from where I live. I don't really have anything else to say about the region, it's not that interesting. What I did find interesting are the differences in culture between this place in Italy and Romania. For starters, it seems the northern part of Italy is - proudly - different in culture from the rest of Italy as well.

Pizza, for example, is something that I find hard to understand. In this region close to Milan they make pizza like a sort of prosciutto, very thin. But it's a weird and cumbersome thin, since the outer crust is hard and brittle, while the interior is soft. That means that one cannot cut it easily unless the knife is very sharp, one cannot roll it up like a shawarma or doner kebab, since the margins break and the content of the pizza is not really bound to the dough, so it falls down, and one cannot hold a slice in hand because the core is soft. The way I found works best for me is to cut it into thick ribbons, then kind of compressing them with the fork so that you get several layers of rectangular pizza that you can put into the mouth and chew. I've also tried folding the pizza, so that it becomes a sort of quarter pizza of regular thickness, but that soft core makes it rather difficult to manage and often the ingredients tend to try to escape from the sides when you bite on the thing. Another difference in pizza culture is that they don't use tomato sauce on the pizza, they barely use any in the pizza anyway, instead pouring oil, spiced or not, over it. In my mind a pizza is made out of dough, tomato paste and cheese. They use little tomato paste and, since they feel the need to put oil on it, they probably use little cheese as well.

Coffee. Italians love their coffee, which they call espresso. It's a (pinky) finger thick layer of coffee, which they savor for the taste of it, then get back to work. My colleagues have this ritualized fixed hour coffee breaks, about two or three a day. They also have something called a lungo coffee, which means tall in Italian. This coffee is about two pinky fingers thick, but not quite. To get a full (small plastic) cup of coffee from the machine here, one has to ask for a cappuccino, which is a normal coffee with a lot of milk foam. Apparently they don't have anything like Starbucks in Italy; market research showed that they would not be successful. A mug of coffee is as abhorrent to Italians as a pint of palinka would be for a Romanian. Actually, some Romanians would not mind... Also, while this espresso thingie is small, it only concentrates the taste, as far as I can see, since I feel almost no caffeine effect.

Alcohol. Italians need to have beer with pizza. Drinking anything else, like wine or - God forbid - Coca Cola, is uncouth. However a half a liter of beer is in any bar at least 4 euros. Usually it is tasty, so it's probably a little higher end than a Romanian beer, but consider that in my country a beer is as expensive as mineral water. In comparison a glass of grappa (a grape brandy that seems to be the most alcoholic beverage they have) is about 3 euros. I don't know yet, but it might be that wine is as cheap here, if not more so, than beer. And speaking of wine, they don't have a clear marking on their wine bottles specifying the sweetness of the contents. Worse, I've bought a "secco" bottle of wine which was sweet as honey (this is bad for wine). At first I refrained from buying Chianti, because the name sounded sweet. But no, that's the good wine, apparently, while most wines in Lombardy as crap - lucky me. There are other wines here, as well, but you must know them. It is good that my colleagues are well versed in the alcoholic arts. Apparently in Italy you are allowed to have some blood alcohol content while driving, the equivalent of a having drunk a beer or so. But they don't check for it anyway, so it is customary to drive to a bar, eat and drink there, then drive back. Drinking at work doesn't seem to be a problem either.

Coperto. Sometimes translated as service on the bill, the coperto is the price of staying at a table, having a paper towel and using their utensils. At first I thought they were trying to rip me off, as in Romania we don't have a tax per place - strangely so, I would expect establishment owners to want to encourage people staying in, rather than making them pay for it. Italians don't really tip, though, as the coperto and the price of the food includes the tip. As a comparison, in Romania we habitually tip around 10-15%; not doing so sending a message that we are either cheap or that we disliked the service.

Services are very expensive. If the prices in a supermarket seem similar to ours, anything one does for you seems overpriced to me. I know it's a perception issue that I have and I must adjust it, but still when I got an offer to wash and iron my shirts with 4.5 euros each, I thought they were kidding. Luckily I found a Romanian speaking woman who will do all the work and not give me these insane prices, so maybe the price of service only seems high because I don't know where to find it, yet.

What else? There are no stray dogs or cats that I could see in the area. That's something I miss, actually. In Bucharest there are a lot of dogs and cats. Unfortunately scare tactics in the media and politics will probably lead to them being killed in the name of "progress" and "Europeisation". I did see squirrels and wild rabbits around here, though. Everybody moves around in a car or a bicycle. Not having either makes me the odd fruit in the tree. When I told them I don't even have a driver's licence my colleagues were flabbergasted. Italians don't shake hands when they see each other every day, so when I came to work the first few days and went to everybody to shake, they got freaked a little. I still haven't gone to Milan yet, but I went there to visit and work when I was employed in an Italian company, so I know the city is nice, but the culture is similar. No dogs there, either.

That's about it for now. More to come soon.