Blind Monkeys Everywhere
There are things you expect from big companies, like Google for example. You expect some level of talent. You expect scalability. You expect (now that it's so big) some level of treachery. But sheer incompetence? Well, I didn't. I should have known better.
It's all about me trying to create a new android app in the Google Play Console. That's where you create apps. Now, maybe because I am in Europe, who knows, but it asks you what type of data your app collects. In great details. So I check: Name, email, phone, id. Now, for each of those, it asks a few questions. I dutifully answered them.
Then, it tells you "To submit your Data safety questionnaire, you must let us know the target age group of your app, and other information about its contents". That's great! more questions. So you click on the link below entitled "Go to Target audience and content".
Then there is a popup. A popup. It tells you that "Any changes you haven’t saved will be discarded". All the stuff you dutifully answered. Will. Be. Discarded. Because in order to save it, you must first LEAVE THE PAGE. And discard it.
That's a new one for me. The only way to save your data is to discard it. Good job.
Remote real time computer monitoring
Conkw is a new project I've been working on for a few month. It stands for web-based Conky.
Just like Conky, it is aimed at hobbyists that want a small dashboard where their most essential data is displayed. CPU, temperature, fan speeds, but also the weather forecast, stock market, latest emails received, etc.
Unlike conky, the metrics are exposed through a REST API and there is a HTML UI to display your stuff on any browser. The goal is to find some use to the old ipads/tablets/laptops we all have lying around. You can put them next to your screen and have your metrics displayed there, with no real estate consumed from your screens. The UI has been properly prepared to run on old browsers.
The very nature of the web based architecture allows a conkw running on a machine to send all of its metrics to another central one for instance. So it is right out of the box ready to monitor a large park of machines, all reporting to one or more central instances.
It is also very lightweight to deploy as it stores nothing, it is real time! As such, one other way of using it is to gather all of your monitoring data through one instance, and have all that data exported to grafana, graphite or any other monitoring system that stores data.
Hop on the github for more details.
Migration of Arbitrage from Windows to Mesos
Note: Arbitrage is a "big" application in our ecosystem. Read further to see how big.
This article is the last piece of our series about migrating apps at scale from .net (so, on Windows) to .netCore, on Mesos. It recaps the whole process: https://medium.com/criteo-labs/migration-of-arbitrage-from-windows-to-mesos-eddd4dbba732
Apple is so great
Apple invented the personal computer with the Apple II, igniting the personal computer revolution. Apple is unique in that regard.
Apple made the mouse ubiquitous and popular, as well as the GUI. That's goundbreaking.
Apple changed twice of CPU architecture (68k -> PPC -> x86) in their computers, maintaining backward compatibility. That's no small feat.
Apple invented what we know today as being a smartphone. "The smartphone revolution". That was Apple starting it.
Apple introduced tablets and is arguably the biggest tablet manufacturer in the world. In fact, it produces one third of all tablets produced. Wow!
No other company has that track record.
Yet, Apple, to this day, still fails at making available to devs the number of pixels available for a webpage. CSS doesn't know. JavaScript doesn't know. HTML doesn't know. There is no way.
No other company has that track record indeed.
The importance of signal / noise ratio, or how Facebook is shooting itself in the foot.
I subscribed to Facebook in January 2008. It was the trendy thing to do, and I found it quite useful. It brought a new type of connection with my friends. I had friends abroad with which keeping in touch was a bit challenging. We could now interact whenever and lightly follow each other's life events.
By then I had the notifications activated, pinging me when I was explicitly mentioned by someone, or on a birthday. The signal / noise ratio was high.
[The signal noise ratio is a number between 0 and 1. The higher, the better, meaning less noise and so a better signal. In my analogy, if all notifications and/or posts present an interest to me, this ratio is 1. If most are of no interest, it is closer to 0. For example my main mailbox is close to zero now, with an overwhelming number of spam.]
So the signal / noise ratio was high, meaning every time I had a notification popping on my phone I would be interested by it. Facebook was a source of news and not at all an annoyance.
Fast forward to today. I read this very interesting article by Beth Skwarecki and suddenly realized tides had turned. Most notifications are of no interest to me anymore and interesting notifications are extremely scarce. Moreover, I only see posts from ~30 of my friends now, leaving the rest no opportunity to keep me up to date. Sometimes I go see the wall of some of my "silent" Facebook friends only to see plenty of updates that I didn't see in my timeline. It's as if Facebook decided that I was not really "friends" with that person. By themselves. Also, when browsing my timeline, the majority of the posts I see are of no interest to me.
The signal / noise ratio had been dropping dramatically. I knew that, but I now realized how terribly low it was. It's no wonder the new generation doesn't want to go to facebook anymore, it has become a spam machine. It doesn't have any appeal anymore.
As a result I did silence the Facebook app on all my devices. And I realized a lot of my friends had already done so in the past months.
Not only did this have kind of silenced my phone but I found myself going 10 times less on Facebook than before. Yes, Beth was right, I clearly didn't need to go there that often. Once of twice a week is just fine.
Of course, I lost a few stuff in the process. I usually now read birthday notifications a couple of days late. Well, it was a good feature, but clearly not worth being harassed by Facebook on a daily basis. Because this is what it has become. Harassment.
So a bit like with a toxic friend, I'm taking distances. And I feel so much better now.
So I guess spamming people with notifications and mixing timeline with commercial content does bring some money. Or even a lot. But if you overdo it, it will break the confidence that your users have in your service. And it's something that is really hard to overturn.
You overdid it.
Tired of so many notifications ...
Pure madness
The other day I was waiting on a disqus blog to start up, loading the comments section. I have a 20MB/s ADSL line. I can download at 1.8 Mega Bytes per second without any issue.
The browser was spinning for so long that I decided to hit F12 in Firefox and headed for the "Network" tab. I hit F5 at that stage.
When everything was finished loading I could read:
340 requests, 7 557,42 KB
Granted, the content was available way before everything was loaded. But still. 7 Megabytes. 340 requests... This is PURE MADNESS!
Then again, buzzfeed.com's home page:
223 requests, 9 382,25 KB
Ok, ok, this is buzzfeed. Let's go to the nytimes.com.
283 requests, 8 158,95 KB
The biggest page of the website I'm currently working on shows:
40 requests, 198,45 KB
Out of these, there are 32 images that come out of a DB. And I find that too high and am trying to reduce it.
This. Is. Madness... Pure madness. But it seems to be the web today.
The good news is, on the performance front it is quite easy to get an edge. There is always an opportunity :-)
Is it lunch yet?
I get it, you're hungry. Because luch time can never be too soon, I've designed this webpage:
Just set it up as your homepage and everytime you open a tab you'll see if it's that time of the day already. On Chrome, you can use the New Tab Redirect extension, on Firefox, the New Tab Override extension.
Garbage Collectors are awesome (until they bite back)
JPEG Compression: Is 80 the magic quality - Part 1 - the retina screens
Foreword - encoding JPEGs
How do you encode your JPEGs ?Let's take a concrete example. You you have a 150x150 image. You want to compress it in JPG, but which quality settings should you use? JPEG encoders usually take a quality setting as a parameter, between Q1 and Q100, where 1 is the worst quality and 100 the best.
Q 10 - 1579B |
Q 20 - 1960B |
Q 30 - 2260B |
Q 40 - 2513B |
Q 50 - 2729B |
Q 60 - 2973B |
Q 70 - 3308B |
Q 80 - 3826B |
Q 90 - 4939B |
Q 100 - 32KB |
We can see that the greater the quality, the better and bigger the image. There is clearly a compromise to be done as Q100 is clearly too big an image and the increase in filesize doesn't translate to an equivalent increase in visual quality. 80 seems a sensible choice. The filesize is 3.8KB.
While this 80 quality settings is the most sensible, we're going to show that in some circumstances it is completely off the mark.
In this first part, we'll focus on high density displays, aka retina screens as they were first introduced by Apple a few years ago.