dimanche 19 mars 2017

Intelligence, an adventure of complexity

This article is a reflection on "Intelligence" development through its history which I try to project into the future. It is inspired to a large extent by the exceptional geneticist, philosopher and humanist Albert Jacquard, in a context of Artificial Intelligence (AI) rise and an extremely sick society (inequality, neo-fascism, terrorism..).

Intelligence is evolving complexity. Complexity is when simple elements interact with each other, and surprise you with the outcome. According to Wikipedia, Complex is composed of the Latin words com (meaning: "together") and plex (meaning: woven) characterizing a system with many parts where those parts interact with each other in multiple ways, culminating in a higher order of emergence greater than the sum of its parts. If you take two inanimate Silex stones, and you scrub them together, they produce sparks!


In the first phase of complexity evolution, a long period of 13,8 billion years, hazard (i.e. randomness) is the king. The word Hazard is derived from Andalusian Arabic Azahr, which means dice.
  • After the Big Bang, quantic perturbations created some irregularities in the big homogeneous soup that was our baby universe.
  • With the help of four fundamental forces (gravitation, weak, electromagnetic, strong) more and more complex structures were emerging: neutrons and protons, then atoms like helium and carbon, then molecules, then stars and planets.
  • One of these planets, the earth appeared 4.5 billion years ago and it was quite special because it had ocean and atmosphere, two protecting layers from dangerous and fatal cosmic rays. These layers preserved emerging complexity on earth from rapid destruction, and prepared them for next evolution.
  • 500 million years later, an amazing thing happened. The appearance of DNA molecules codified genetic information and gave it the possibility of duplicating itself, or as we now say, creating a backup of its data! That preserved it for next complexity evolution: formation of cells and bacteria, the first form of life. 
  • Another revolution happened 900 million years ago, which was sexual procreation instead of replication. In this paradigm, 2 genetic pools are mixed to produce a completely new and unique organism, instead of just replicating the same existing genome.
  • The last decisive natural hazard was a deformation in primate brain that happened a couple of million years ago. Indeed, a kind of hypertrophy that exploded the number of neurons up to 100 billion!!
With that last master piece of natural selection and randomness, the universe gave us the physical potential to go even beyond. Nevertheless, that "beyond" was from now on in the hands of humans, not nature anymore.

Some anthropologists say that the first step of moving out from animal state was when our ancestors got rid of jealousy. In fact, less male competition during mating seasons gave more place for group solidarity which is more robust against the uncertainty of nature. We are now ready for the next level of complexity: Society. Society is the crucial factory that transform our physical potential to a human being by developing our conscious. Thanks to other's "you" when addressing me, I become an "I", I become aware of my own existence, and that changes everything. Another important achievement of society is transmitting knowledge representation, in other words preserving acquired complexity, the same as DNA did to our genetic information. From that moment human never stopped conscious conquest of more and more knowledge, explore new fields, ask new questions, and control nature.

What is the next step in the adventure of complexity? All eyes are now fixed on Artificial Intelligence. I recommend reading this article series for an excellent introduction to AI. In a nutshell, AI mimics human brain by creating software-based meshed neurons (Neural Network) that trigger an output according to the input. For example the input is an image, and the output is 1 if it's an image of a bird, and 0 otherwise. In order to have an intelligent Neural Network, we need to train it, i.e. give it thousands of images and make sure it adapts itself until it makes the correct bird identification. Neural Network creates knowledge representation through training.

AI, NN are all old concepts to some extent, but gained a lot of traction recently thanks to cloud computing and big data. Indeed, training a NN requires a lot of computing power, and a huge amount of organized data. Today, our brain has 10 000 more computational power than the biggest known NN, and is very efficient energetically. With our abstract though, we don't need big data to learn, a couple of bird images are enough to identify the concept of a bird. It is the result of billions of years of training:
  • Visual perception: 540 million years of data
  • Bipedal movement: 230 million years of data
  • Abstract thought: 100 thousand years of data
AI is an important breakthrough for humanity in its relation with intelligence and complexity, though big questions are yet to be answered. One of them is about machines becoming conscious of them selves, just like what happened to us.
For me the next step of complexity is elsewhere. It's the common intelligence, the "com" (together) in complexity. Even though humanity made exponential progress, but it sill fails major challenges such as stopping wars, financial crisis, famine... The most flagrant one is climate change, which threaten our whole existence, but we are rushing into the tragedy just like the novel "Chronicle of a Death Foretold" of Marquez. Like homo became conscious of itself, we humans we must become conscious of "ourselves" as a whole and be masters of our destiny. On this idea Jesus Christ and Karl Marx agreed together:  "When you are united, I  (the superhuman) will be among you" - JC, "We do not find the essence of humanity in each human, but in the human community."- KM. The revolutions of the last centuries are somehow this next level of complexity trying to emerge.

jeudi 2 mars 2017

Video streaming security

How can I protect my OTT platform from attacks? how can I stop bad people from stealing my content and monetizing it instead of me? Any OTT actor should be having these questions on video streaming security. In this post, I will share some answers from delivery (CDN) perspective, by building on my customers experiences. Video streaming security is tackled with respect to OTT platform & content components.


Typically, the OTT platform (origin) sits behind a CDN. As a result, bad actors will either attack the origin through the CDN or completely bypass it and attack the origin directly. I suggest the following solutions and best practices to enhance your platform security:
  • Isolate the origin on a separate infrastructure from other services, like email server for example.
  • Avoid using easy-to-discover FQDN of the origin (such as my-origin.ottdomain.tv) and do not expose it publicly (better use a completely different domain name).
  • Whitelist on your firewall (a cloud-based firewall is even better) solely CDN IP ranges. Most CDNs can ensure that origin fill is done through a predefined IP range.
  • Use CDN parent cache in order to reduce traffic back to the origin. In certain cases, when an asset has a very distributed audience, all CDN edge servers will go back to the origin to fill, which might bring it down like a DDoS attack!
  • Use CDN based geoblocking in order to block traffic from countries where you do not have audience. For exemple, if not operating in Latin America, you would better block this region because it has a considerable DDoS botnet concentration.
  • Understand how your CDN is capable of mitigating DDoS layer 3/4/7 attacks.
  • Implement restrictions on CDN: block HTTP POST requests if not used, ignore query strings that are not part of your normal usage.

I've got a lot of cases where customers have suffered from having their content appearing on third party websites and thus loosing potential revenues. The following solutions can help protecting against content theft:
  • Apply simple HTTP best practices on CDN like enforcing cross origin policy, and blocking requests based on Referrer header.
  • Authenticate streams on CDN by using cookie based (pay attention to cookies device compatibility and acceptable legal framework) or path based token authentication.
  • Add DRM protection to video workflow. This is the ultimate solution but comes with cost and complexity drawbacks since the DRM industry is still very fragmented and not standardized. Make sure that your CDN is compatible with the chosen DRM technology (for exemple Widevine’s WVM format requires that the CDN supports byte range requests).
  • Use TLS for video delivery in order to reduce the risk of a third party sniffing  your content on clear unencrypted channels. Make sure that your CDN is up to date in regards to the latest TLS security and best practices (secure cipher suits, OSCP-stapling, keep alive, false start...).
  • Contact CDN & IP providers of  websites which are stealing your content in order to block illegal content and dissuade them from continuing theft practices.

One last advice, common to platform and content security, is monitoring CDN logs and building some relevant security oriented analytics around it to have better insights on your streaming and take actions quickly to mitigate any abnormal behavior.

dimanche 25 décembre 2016

Data driven communication

I've noticed that in our communication, we often tend to pass judgment, which is processed information, instead of passing raw information. That is unfair to the ones that we are speaking to, because we do not give them the chance to have their own judgement. Not only it's unfair, but it is also source of misunderstandings and conflicts:
  • Upset customer about service: "Your network's quality is not good enough, we are receiving complaints from our users"
  • Excited business developer about a new opportunity: "Management should support me, this project will generate around 1M€ of revenues, huge one!"
  • Angry work colleague: "You did not reply to my emails several times this week"
In all of the above examples, sent information is not objective. I will give in the following some tips for achieving healthier communication.


The first golden tip would be: "A little less adverbs, a little more data!". Adverbs (too much, extremely, slightly, highly, nearly, very, quite, sometimes, seldom, often) without supporting data are pure judgment. Consider the upset customer again rather telling you, his network provider: "In the last week, the latency on your network was 150ms on average between our offices in Dubai and Paris, causing up to 10 user complaints regarding calls quality". In the first case, you are probably opening a ticket with your technical services in order to correct the issue, but in the second case, you are probably going to compare noted performance to contracted SLAs, might find it compliant, and thus propose a new feature (VoIP QoS) in order to improve the customer experience. In the first case, you are loosing time, whereas in the second you are generating new revenues.

The second tip is backing absolute values with references for better appreciation. For example, compare sales growth rate of this quarter to the same quarter of last year and compare churn rate of your customer base to your industry average. Consider our excited business developer again: 1M€ is indeed a lot of revenues, but his company has limited resources and got in its pipe some other projects generating 10M€ each. It wouldn't be surprising that the 1M€ project will not get priority (a small confession: it's a true personal story!).

The third tip is providing information about samples as well as about the population that we are sampling. Consider the angry colleague again. It's true that this week you didn't answer 5 of his emails, but he globally sent you over 100 mails, which means that you had around 95% responsiveness rate! the sample here is unanswered emails, but the population is sent emails. That would completely calm your colleague :)

Using data in our communication is not about inhibiting the expression of our thoughts and emotions. On the contrary, you are free to add your own subjective judgement, as long as you provide the full picture backed with data. Not only you will give your interlocutor the chance to have his own judgement, but sometimes, by using objective data, your own perception and judgement can change. This is typically the case when your judgement is biased by temporary emotions.

In this post, I gave mostly work related examples, but it's applicable to everyday communications: Better say "I love you like the ocean" than "I love you a lot" hein? :D

jeudi 8 décembre 2016

Linkedin Influencers & Silent Evidence

This post will be a short one!

Many of us follow influencers on Linkedin, like CEOs of big companies such as Bill Gates, Jeff Bezos and Mark Zuckerberg. We follow their advice, read their "5 rules to change your life", and share their posts with our community. These people inspire us, and make us want to follow their path to replicate their success pattern in our careers. For example, I personally follow Laszlo Bock, Google's VP of Humain Resources, as I found interest in his advice around resume and job application. 

Nevertheless, following influencers to understand success is biased and can probably lead to wrong conclusions. It is the survivorship bias, or also silent evidence as called by Nassim Nicholas Taleb in his book Black Swan. He illustrated it by the following story:

Diagoras, a nonbeliever in the gods, was shown painted tablets bearing the portraits of some worshippers who prayed, then survived a subsequent shipwreck. The implication was that praying protects you from drowning. 
Diagoras asked, “Where are the pictures of those who prayed, then drowned?”




Do we know how much people applied the "5 rules to change your life" but failed and never made it to be Linkedin influencers? Until we do, we should stay skeptical, and do not take whatever a top influencer gives us as truth, but rather try to validate it.

jeudi 17 novembre 2016

CDN benchmarking

Today, when we want to compare the performance of different CDN providers in a specific region, the first reflex is to check public Real User Monitoring (RUM) data, with Cedexis being one of the most known RUM provider. RUM data is very useful, and many CDN providers buy it in order to benchmark with other competitors and continuously work on improving performance.



I will highlight in the following what exactly Community RUMs measure, so you do not jump quickly to some wrong conclusions. Let's focus on the latency performance KPI and list the different components that contribute to it:
  • Last mile latency to CDN Edge, which reflects how near is it to the user from network perspective.
  • Cache width latency, which is mainly due to CDN Edge not having the content locally and must go get it from somewhere (Peer Edge, Parent Caching or simply from the origin)
  • Connectivity latency from CDN to Origin when there is a cache fill needed.


In general, Community RUM measurements are based on calculating the time (RTD) it takes to serve users a predefined object from CDN Edges. Since the object is the same and doesn't change, it's always cached on edges. In consequence, Community RUM solely measure first mile network latency, which reflects sufficiently the latency performance of very high popular objects in cache.

Nevertheless that's only a part of the picture. In real life, CDNs have different capabilities and strategies for storing content beyond Edges and filling it from origin:
  • According to content popularity, CDN cache purge policy, disk space available (Cache Width) on the Edge and Parent Caching architecture, the request will be a cache miss or hit with impact on performance. VoD provider with large video library know very well this topic. 
  • According to CDN upstream connectivity, the number of hops needed to fill from origin impacts connectivity latency. CDNs who built their own backbone benefit from a good upstream connectivity. Dynamic content is very sensitive to this aspect.
As a final word, we also need to be aware that CDNs tend to optimize their configuration used by RUM measurement for this specific use case.