iSpective

Igor on tech and life

Facebook's misleading ads

I was scrolling my timeline in Facebook's iOS app the other day when I got this bizarre ad:

Facebook-ads1

As a drone owner myself I actually recognized my DJI Mavic Air in the video. And what got my attention was the episode where some guy threw a water balloon at the drone. That's where I first thought it's an ad for some sort of water protection glue or skin which allows you to make your drone resist water since most of them are afraid of it.

I naturally clicked the ad since it resonated well with me (praise Facebook's targeting!) and the idea I can preserve my drone from water damage. But when the ad's landing page finished loading I saw they are not selling any protection but the drone itself! The images again displayed the Mavic Air with the initial price of twice as much as you would pay for a new one and a discount of 95% of that price or about 88% discount of the Air's real price! And of course at the end of the page you would find a countdown urging you to purchase.

Facebook-ads2

Facebook claims they are reviewing each ad. But in the next few days I was getting all sorts of gadget ads displayed in my timeline and every time with a huge discount. And each of the ads had tons of commends with the word 'scam' in them. So the reach of those ads was big and such ad should have gotten even more Facebook's attention but it didn't. I assume the clicks pay off nicely for both the social network ad revenue and for the scammer as well.

MacBook Pro 2018 thermal throttling explained

Macbook-Pro-2018

Last week Apple unexpectedly updated their whole Macbook Pro line except the entry 13" model without the Touch Bar.

This release like all previous ones were accompanied by a lot of controversies. That Apple might not have fixed the faulty butterfly keyboard regarding which they are facing now three class action lawsuits. The keyboard scandal also resulted in a keyboard service program which brings free defective keyboards replacements in all MacBooks and MacBook Pros produced since 2015. And if you have one of these laptops you'll be covered by this program for the next four years!

People also blamed Apple for only now allowing to opt-in for 32GB of DDR4 ram, previously supposedly unavailable due to higher energy consumption and leaving everyone with one option of having only 16GB of energy efficient LPDDR3 memory when competitors offered 32GB DD4 ram even before 2016.

Besides that Apple is under fire for taking up so long to bring the 8-th gen Intel CPUs, high prices, no chassis changes, #donglelife was brought up, etc.

I personally think this is a good update. Yes, from the outside everything looks the same (except probably the screen is now enabled with True Tone) but on the inside is the real deal. Or at least it should have been.

The new MacBook Pros are carrying even faster than their already pretty fast nVME SSDs with read and write speeds now up to 3GB/s which is the fastest on the market. I wish their Radeon 555X and 560X GPUs where that advanced, when the portable PC market has Nvidia's GTX 1060, 1070 and sometimes even 1080s onboard. The same is for screen resolution - Apple ships the same 2880x1800px since 2012 when at that time it definitely was a blast and on which it's still hard to recognize individual pixels on a 15" diagonal. But in the meantime the competing devices in the high-end market like the Surface Book 2 from Microsoft caught up with screens as dense as 3000x2000px on a 13" area!

So besides the fastest storage and irreplaceable MacOS limited to Apple's hardware the only real advantage of MacBook Pros was the CPU.

I'm the owner of a 2016 top of the line Macbook Pro 15". Maybe I'm lucky or because I use it in clamshell mode most of the time, I got only one stuck key in the 16 months of owning this device. But oh I couldn't escape the issues with dongles and expensive USB-C cables which in real life is far from mass adoption and except being able to charge my laptop from both sides was mostly a pain to use.

But the main reason I chose the laptop at that time was to have a more powerful machine then my previous 2015 MacBook Pro 13" which wasn't a slouch either but when it comes to compiling (which I do most of the time) the more horsepower you have - the better. And moving from 2 cores of the 13" to 4 cores in the 15" resulted in 3-4x faster compiling times.

At that time I was more than satisfied with my 15", using it daily at home and on the go. Among all possible options it was the most CPU power you could have in a small light chassis, period. I'm still not considering a desktop because I don't want to manage project files sync between a desktop and mobile computer so I wanted as much performance in as little footprint I can have - and the MacBook Pro is the best candidate for that role. Especially when you don't consider much Windows as your primary work OS πŸ™‚

During my use of the laptop I ignored few messages on Twitter about thermal throttling in the 2016-2017 MacBook Pros. For example when you connect it to a HiDPI screen, the integrated Intel GPU switches to the discrete Radeon GPU and that automatically increases the baseline heat the laptop has to deal with. And you can beat heat in two ways: increasing fan speed and cooling the system more, or decreasing CPU clock speed, make it less efficient in heat production but also in it's own performance.

In the last few years that's where CPU design generally was heading. In order to achieve longer battery life and potential high performance, Intel, the main CPU supplier was making CPUs more efficient when idle to preserve battery on light tasks and to give performance bursts on more demanding ones. That's why CPU clock speeds are no more static like they were before. Now instead of '3.1 Ghz' clock speed, you would see '2.6-4.3 Ghz' on the box, which means 2.6 Ghz as base clock with bursts up to 4.3Ghz. And when a CPU generates heat, it can't sustain being in the high (called 'Boost') levels for long and has to lower the clock speed not to overheat. That's what Thermal Throttling means

My laptop was also thermal throttling, I just didn't know how much. I knew it did, but I wasn't giving it much attention. But this week I did.

The thing is the new MacBook Pros introduced new 6 core CPUs in the 15" line and bumped the core count from 2 to 4 in 13" and I was really excited about the increased core counts recalling how much performance I gained last time after switching from 2 to 4 cores. I was thinking whether to switch to a smaller lighter 13" from my 15" and keep my current 4 cores or upgrade to 6 cores and achieve ultimate mobile power. Usually preferring more power I was leaning more towards the latter. And by latter I mean I was looking again into the top of the line option of the 15" MacBook Pro with an Core i9 CPU.

And this is when thermal throttling concerns came back:

Under short load, to finish benchmarks, the i9 CPU shows excellent results. In the mobile CPU chart the specific Intel Core i9-8950HK as of now holds #7 in overall mobile CPU rating in terms of performance which is huge. In coincidence the i9 MacBook Pro scores #7 in all-time Geekbench multi-core results loosing only to the 10-18 core beast iMac Pro desktop.

But when it comes to this CPU being under load for a long time, it's results are not so promising. Being hot for a long time, combined with Apple's love to spin down the fans to reduce noice and making the laptops unnecessary thin with sacrifices to cooling, this results in CPU thermal throttling when its clock speed is not only not capable of Boosting up to 4.8Ghz but sometimes drops even lower it's 2.9Ghz baseline! This way the CPU and thus the whole laptop at high loads works only on a fraction of it's potential. And a last year's less powerful CPU with less cores throttling less blows the new 6 core i9 chip out of the water!

What does this mean for a regular customer? That it's not worth paying extra for the high tier model since at peaks it may be slower than the low tier model within the same line. And for a non-regular user that means Apple tries selling you more expensive laptop that performs worse than cheaper models. And all of that on top of the already increased prices introduced along the new USB-C only design in 2016.

One of the reasonable theories of putting a hot CPU in the chassis that wasn't really designed for it that I've heard is that Apple while designing the chassis long before 2016 was relying on Intel's promises to reduce their technology process in timely manner which would help building and using less hot CPUs in 2018 and onwards. And when Intel couldn't keep up with their promises, it was too late for Apple to design new chassis for that. But the main question remains: if Apple knew they won't get more efficient and cooler CPUs, why they even put the severely throttling i9 version in their Stores in the first place? I surely hope it was a mistake rather than trying to earn on top models despite knowing their limitations upfront.

Update Jul 24
Apple released a software fix for throttling in the whole 2018 Macbook Pro line. They claim they fixed an issue with power management and didn't address the supposedly VRM throttling problem that was revealed in one of the Reddit threads. In any case that is good news, the CPU frequency spikes aren't there anymore according to users with the i9 MacBook Pro. Unfortunately the fix won't change the state of the case not being able to handle higher thermals and limiting the i9 from boosting. But at least the frequency now shouldn't fall below it's baseline which is better than nothing πŸ™‚

The PowerPod Case Review

PowerPod-1

After backing up in around March, today I got my PowerPod Case in about a week after getting an email of it being shipped. Everything happened according to schedule, with shipping aimed at July, and I'm really happy with that.

In short PowerPod is a silicon case for your AirPods that not only protects their case but enables them with wireless charging from any Qi-enabled charger.

PowerPod-2

The PowerPod fits the AirPods really nicely. The case doesn't flop around and the headphone's case sits there nice and firm.

PowerPod-3

In my tests the PowerPod added about 18% to the AirPod's case battery within 15 minutes of charging. The case got a bit warm though, while using with my standing Samsung Wireless Charger.

PowerPod-4

One thing I got puzzled about was that the charging case wasn't reaching the middle of the charger. A quick 180 degree turn later and it started charging nicely. That's not what Apple would approve but since their AirPower is delayed almost for a year now it's better than nothing. And by the way, even Apple can't handle their own design each time right πŸ™‚

You probably already noticed the single con of the PowerPod - the rubber that it's built of collects all the lint in all of your pockets. But on the flip side it keeps your AirPods safe from falls (mine are chipped a bit after a year of use) and scratches and even helps opening the lid easier with that additional grip.

Overall I can highly recommend the PowerPod Case for those who wants to secure and charge his AirPods wirelessly along with their other Qi-enabled devices.

Let’s Encrypt certificate for different domains in different folders

Lets-Encrypt

If you're struggling setting up Let's Encrypt on some custom server setup of yours - look no more.

When it comes to tech I'm the kind of guy who likes something to be just the way I want it. Of course I might stop with some intermediate decision, but it will bug me until in days or months I still do it just the way I see it.

I have a home server running few VMs with few services and websites on them. Recently in order to simplify my setup that grew over the last few years I started consolidating all the domains I have been using and moving them onto the subdomains of one of them.

I like having SSL everywhere I can. Either it's the lock icon in the address bar what makes it special, or just the basics of Internet security I try being part of. In any case, if you're hosting any kind of web service yourself, not really depending on your setup you can get SSL for free from a trusted Certificate Authority like Let's Encrypt. And with the help of CertBot it's really easy. Unless you're like me and don't look for the easy way πŸ™‚

There are many 1st and 3rd party manuals online on how to install Let's Encrypt or a SSL certificate from another issuer. The problem is that they are usually written for people who has their domain in question handled by Apache on the 80-th port. Which probably matches 95% of the use cases, but not mine. Except using not the standard 80 port I run multiple domains and subdomains on one server in multiple server blocks and configurations.

I was getting problems with using regular CertBot's commands for a Nginx+Ubuntu 16.04 setup. I didn't need the bot to setup my configurations since I did that myself, so I used
sudo certbot --nginx certonly
or even
sudo certbot certonly
But that didn't help, I was getting 404 errors on the ACME challenge. I thought my custom port was to blame as probably CertBot is setup to work only with the 80-th port so it couldn't find needed files there since I am using another port. As it turned out the port wasn't to blame.

The real issue was that CertBot was looking for files in a wrong folder on my VM's drive. Turns out if you don't specify it explicitly, the bot looks for the files in predefined paths, which in my case also were custom πŸ™‚

That's where a handy --webroot option comes in:
certbot certonly --webroot -w /var/www/example.com/test/ -d test.example.com

And that's how I got a shiny lock icon on one of my new subdomains.

For more info on the --webroot (and other) options you can read in the official Certbot user guide.

UITableView automatic cell height change with animation

UITableView-cell-resize

Today I had to update cell's height in UITableView while typing into a UITextView in that cell. After going through several approaches without any luck I stumbled on this interesting solution.
Objective-c:

[tableView beginUpdates];
[tableView endUpdates];

Swift:

tableView.beginUpdates()
tableView.endUpdates()

You call these two methods whenever you need to update the cell's height, whether you use tableView heightForRowAtIndexPath (tableView heightForRowAt)
with predefined cell height or AutoLayout with automatic

estimatedRowHeight,
rowHeight

In both cases UITableView will reload only the cell which height needs to be updated and not the whole table. And also as a nice bonus it will do that with a smooth built-in animation.

Even after few radars to include this behavior into their official documentation Apple didn't add this side-effect to the method's description, despite actually recommending such use in their WWDC 2010 'Mastering Table View' session 😊

So if you want to just change your the height of the rows in your table view, it's an easy way to do it.
You can do that in conjunction with a change of the rows in your table view.
You can also actually just do a simple Empty Update Block.
You can call it beginUpdates immediately followed by endUpdates with no actual changes to your table view.
We'll go through all the same steps here.

Adblocker privacy

Adblocker-privacy

After scratching the surface with my best Android adblocker review and the tl;dr version of the results I wanted to share a deeper take on the privacy aspect of using adblockers.

The Adblocker Results #2 and deeper insights (longer, recommended version)
Let's get back for a second to the apps that didn't make the cut as the adblocker options I've tested:

  • Free Adblocker Browser - was crashing after start not giving the option to test it at all
  • AppBrain Ad Detector - detects apps on your device which might send your data. Marked Facebook app as highly malicious πŸ™ƒ
  • AdAway - requires root, so it's not an option for everyone
  • TrustGo Ad Detector - asks all possible permissions upfront (how reading my messages or call info would help me stop seeing ads on the web?) which you never should allow unless you're completely sure what you're doing. The irony with the 'TrustGo' name is actually really funny. Trust them all with your data and go away πŸ˜ƒ Uninstalled.

The last app actually brings up an important topic with adblockers - privacy. The thing is, when you allow any adblocker to work on any of your platforms, what you essentially are allowing it is getting access to all your browsing information, so the adblocker can see it and cut out ads and/or trackers. That's why if you don't want your adblocker instead of blocking ads actually use your browsing data for serving you even more personalized ads, make sure you install a trusted one.

As you probably know by now, there are few ways of blocking ads: by using adblocker extensions for Yandex Browser and Samsung Internet browser (and maybe others that didn't cross my eyes), or using a standalone browser like the AdBlock Browser with adblocking already built in. Both ways do their job in a reasonable manner, but what if you're using Google Chrome as your default browser and you don't want to give up bookmarks, passwords and history sync with your Google Account? For that case there is a third option which enables you not only block ads in Google Chrome but block them overall, through your whole system. And it's done by installing a sideloaded apk which creates a local VPN server on the device itself and sends and receives all the Internet traffic through it, filtering it on the fly. How insane is that? Setting a local VPN server on your cellphone - Android never stops impressing me with its crazy hacks.

When you (or in our case the app on your behalf) setup a local VPN, except being able to filter ads and trackers on a much wider scale, throughout the whole system and in all of your apps you'll get two additional advantages if you compare such solution to connecting to the Internet via a traditional remote VPN:

  1. Unlinke remote ones, local VPNs don't consume almost no additional battery power for the same filtering operations
  2. Local VPNs don't add that painful additional delay of your phone transferring all the data through a remote server. As the result you get ad filtering without sacrificing your Internet connection speed.
    But there are few disadvantages as well:
  3. Local VPNs usually don't encrypt your traffic like remote VPNs do, so you don't get that additional layer of security
  4. Your device IP address will still be the same, so you won't be able to go around IP-based resource blocking, Great Firewalls, access restricted websites unlike while using remote VPNs.

That said, when you're using VPNs on Android you have to choose between fast and efficient adblocking or slow but secure Internet browsing. If you know any way that combines the two - please hit me up πŸ™‚

Since usually no one usually would setup a local VPN for blocking ads on their own, that means we'll have to rely on someone's solutions. And by rely I mean trust some company not to use our browsing data in malicious ways. We already have issues trusting big companies like Google, Facebook or Apple which have something meaningful to loose if it turns out they are in fact using our data for their own advantages and without our consent. But what about smaller companies? On one hand for them loosing trust often means just getting out of business, since small companies usually are barely profitable and can't afford loosing any substantial part of their userbase by being involved in privacy scandals. On another hand such companies have more incentive to get those few additional bucks by selling your data in order to survive. And frankly after the latest news of Facebook beating their all time high stock prices even after privacy controversies, it sends a wrong signal to companies which collect any kinds of data that it's okay to leak or sell it - people won't care anyway and investors would still love you.

That being said it means that nobody except you won't really care about your privacy. And even though as mentioned in the first part of the research AdGuard's local VPN does the best job filtering ads not only in Google Chrome that doesn't support adblockers, but in other apps and throughg the whole system in general, people are legitimately concerned about the safety of using any AdGuard's products since their team is actually based in Russia and registered on the non-neutral law-enforcement Cyprus. Even though the openness of the developer and opensourcing their products help a bit, they still don't overcome the overall fear of using any kinds of tools (especially those ones that potentially can snoop your traffic) coming from Russia and that those tools and their developers are considering privacy like they should. Because of that on Android as the adblocker browser extention I would recommend using Adblock Plus which was build as a non-profit organization from the ground up and uses donations to keep developing their product. Having AdGuard's local VPN set to high filtering mode and enablihg https filtering is your best bet against ads but you may risk with your privacy instead. But if you still looking forward to a local VPN you can trust, I highly recommend you another free open-source project Blokada built by a few guys in their spare time that don't have a big company behind them with big expenses that need to be covered by potentially selling end user's data or whitelisting ad companies which usually is another form of income for adblocking companies. Granted AdGuard has a paid Pro iOS app and a subscription business model, but I doubt their earnings from those on a market with generally free adblocking solutions (including their own) is enough for you to trust them with your data.

Best Android ad blocker (July 2018)

Best-android-ad-blocker-july-2018

Recently I had interesting and boring at the same time thing to do: find out which ad blocking options on Android are worth considering.

Starting with a disclaimer: even though all my testings were meant to be objective, some of the results might be inaccurate or non-repeatable. This is mostly due to the nature of the adblocker tests themselves: depending on your Android version, adblocker version and the filter databases state you can and you will get different results than me. In fact your results may vary each time on the same website, like mine did sometimes. Your results may even depend on other apps installed on your device and your device's performance in general. Also I didn't research traffic savings and how secure each adblocking option is - both are separate big topics to discuss on their own and weren't my concerns at the time.

Having that out of the way, here's my setup, testing methodology and short summary of the research.

The Setup
All my tests I ran on a Xiaomi Mi A1 powered by Android One and running Android 8.0 with May security updates. I don't have many apps installed except few messengers and few utility apps (Dropbox, 1Password). I'm not running any VPNs on the device and was using my home private wifi for the consistency of tests.

The Methodology
I used this list of websites to test adblockers. Pi-hole.net in general is a very nice resource that knows and tells how to avoid ads and trackers on the Internet - I highly recommend checking them and their free opensource project.

Not all the websites from the list were even loading, so you will find a shorter list of them in my raw data spreadsheet.

The idea was to go through this selection of websites and each time use a different adblocker or browser. That's what I did and that's what I consider the boring part - opening 12 websites 11 times is not very amuzing πŸ™‚ But what was interesting were the results and what I learned in the process.

The Results (short version)

  • If you're okay with Yandex Browser - free AdGuard Content Browser is probably your only viable option, since there is nothing much else that works with Yandex Browser and also keeps the ads out.
  • If you're rocking Samsung Internet Browser - both free AdGuard Content Blocker and Adblock Plus are good choices, even though I would recommend sticking with Adblock Plus, because of my personal privacy standpoint against AdGuard, on which you can read in the end of this post.
  • Google Chrome users don't have much choice except sideloading (outside of the Play Store) AdGuard for Android or Blokada since Google Chrome doesn't support adblockers. Actually it's a very nice option for everyone, but use it with caution, and read more info on local VPNs. I personally use Blokada out of the two.
  • No good adblocker news to third-party browser lovers out there. Opera Browser has some filtering built in which in my tests are clearly not standing ground against ads like the other solutions. And although Adblocker Browser is doing its job well on par with their own browser extension, their browser experience part is less compelling than Google Chrome or Samsung Internet Browser bring.
  • Nice adblockers remove the ad but leave the frame. Good adblockers remove blank spaces as well. AdGuard and Adblock do the latter.

If you're interested in the privacy concerns of using an adblocker, I highly recommend reading part #2 of my research that focuses on the deeper level of how adblocker function and what you should be aware of while using one.

Added:
For best iOS adblockers look here.

Platform lock-in

Platform-lockin

When it comes to locking in users to your product or service companies tend to use all available differentiators. A while ago I mentioned Google's recent transition from their blob emojis which many call a mistake and ask at least to let the users decide which emojis to use. Which obviously would never happen πŸ˜€

As for deciding for the users, emoji-wise another thing happened this week as well, now with Facebook. They had their emojis for a while now, but with the option to dig deep into settings in order for you to switch to your beloved emojis which were coming with your device. But now Facebook flipped the switch and at least on the main website/app you will see smiley faces redesigned by them. Messenger still behaves like before, but I don't think that's for long.

It may sound minor - who cares which emojis are on facebook.com but keep in mind Facebook is used regularly by 2.2 billion users, it's Messenger has 1.3 billion, Instagram (owned by FB) recently also hit its first billion, which in total have almost as many users as Apple and Google combined. With that userbase Facebook puts it's leg onto the emoji scene to be recognized as the primary emoji provider in the world. And when they flip switches in Instagram, Messenger and not less important WhatsApp, people will get mad, but they won't have to go elsewhere - Facebook is that big. And forcing everyone use their emojis and eventually getting used to them will unconsciously lock people into Facebook's platform and will make people dissatisfied with other social networks that don't use familiar smilies they see everyday browsing Facebook's news feed or chatting in Messenger. Like with iMessage where people are actually ashamed being 'the one with the green bubble', Facebook creates a mental barrier for people to dislike other means of conversations (messengers, social networks) where you won't have access to the 'norm' thoughtfully declared by Facebook. And being 'main' and 'primary' allows them to reach new all-time high stock prices despite the privacy controversies. So it's just a bit more than emojis πŸ˜‰