My first 100 days with a MacBook Pro 16″ impression: MacOS vs KDE/Linux comparison

During autumn/winter 2019, the Slimbook Katana I had started showing symptoms(*) that I would’ve been better off changing laptop, soon. Therefore I started looking for viable alternatives and you can imagine my surprise when Apple announced, during that very same period, that a new MBP was about to be released. With the promise of finally fixing all the poor engineering decisions (i.e. the keyboard) made in the past few generations of MackBooks, I said to myself “Well, this could finally be the time I’ll buy one of these machines”.

So I waited for about a month, reading and watching online reviews to get a better idea about it, until I finally settled on the decision; and since mid-January 2020, after 16 years of day-to-day Linux usage, I moved to Apple, at least on the personal side.

Note: I’m not going to repeat what countless reviews already said about how good the product is; it truly is the best hardware I’ve had the pleasure to play with. I’ll point out instead what I, as a KDE/Linux user, would have expected to see/have in the software department, given how much appraisal MacBooks receive from their regular userbase.

The point of this blog post is to give a more down-to-earth MacBook Pro review, especially for people who’ve never used an Apple product before and don’t know what it would be like. And perhaps a laugh or two ๐Ÿ™‚ It would also be nice to hear how your experience was, so don’t hesitate to drop a comment or leave a remark/suggestion in case I made a mistake/missed something.

And in case you’re curious about my setup, this picture should give you all the infos you’d ever need to know.

also, an AMD Radeon Pro 5500M, 8GB GDDR6

Intro

For many years, I’ve been hearing praises from Mac users, repeatedly saying how Apple is the pinnacle of User Experience, Usability, and integration with other Apple products. While I can’t say anything about the latter, since this laptop is the only Apple device in my possession, I can say a thing or two about UX and software in general, which hopefully will help other people who’s considering to buy a MBP.

ย 

Finder

The very first thing you’ll notice in your day-to-day usage is that Finder, the Dolphin/Nautilus/Explorer equivalent for KDE/Gnome/Windows, has a very peculiar way to handle navigation: if you hit Enter, you won’t go inside a folder/open a file with its associated app. Instead, it will highlight the filename, such that you can rename it. And backspace won’t bring you back to the previous folder, in case you were wondering.

While there is a very good argument about the real meaning of using Enter key, it certainly does not explain why doing so should mean “I want to rename a file”. And if we want to follow the same line of reasoning, it certainly won’t explain then why hitting the spacebar is going to actually play a video (mind you, only if its format is recognized by QuickTime), open a simple image editor if it’s an image, or just display a popover with a tiny bit of infos (size and last modified) in the other cases. In what universe are these sensible, UX compliant behaviors? Luckily this ~6 years old question has still a valid solution for it, that is, install an extraย  software to configure Finder’s behavior.

Also, by default, Finder doesn’t impose any layout on how files are visually lay out, which means, you’ll end up in a mess of misplaced icons sitting all around your desktop and folders. Luckily you can set the sorting option to “Align to Grid” and boom, and you’ll have neatly positioned files. Again, though, in what universe is “align to grid” a valid sorting option? And why this option is not active by default anyway?

In my day to day work and life, I happen to copy text, snippets of code, etc from various sources like Slack, github, or even chats and save it on disk, such that I can read it later even when I have no internet connection. How would you do that? You’d copy some text, then right click on the desktop/empty space inside a folder and select “New F”… oh wait, there is no such option, how peculiar. Once again, AskDifferent to the rescue:

If you have the Finder window open, use Spotlight to open TextEdit. When you’re ready to save the file, option+drag the text file icon from the title bar of TextEdit into the Finder window where you want to save it.

Or, if you think this solution is a bit.. clumsy, you can create an Automator script, and assign a keyboard shortcut to it.

With KDE? Copy the text and paste into the destination folder, then give it a name. Just as simple as that.

Example in action; it would have been even faster if I CTRL-C and CTRL-V, but visually you wouldn’t have seen a lot going on ๐Ÿ™‚

ย 

Window Management

I always wondered why my colleagues using Apple MBPs rarely do maximize their windows; I’d personally want to have them fully maximized (especially when coding, using the console or browsing the internet), right? Sure… until you discover how annoying MacOS window manager is. First of all, the button that you would think maximizes the window, will actually set your application in fullscreen mode, which has the neat effect to place it on a new, separate virtual desktop. One fullscreen app = one virtual desktop. And secondly: in this state you cannot have, say, a non-maximized application over a fullscreen one, so you’ll see a constant sliding animation transition between apps which will, very soon, start to annoy you. At this point you have the following options:

Do you like to tile windows, from time to time? You’ll have to have a sniper-perfect aim, hover your pointer over your app’s fullscreen button, wait until a popover will show up, then choose whether you want to tile your window to the left, or to the right.

Would you like to have more tiling options, or perhaps window snapping? You can’t. Unless you install a third-party app, that is.

On the other hand, this is how it’s done with KDE:

Just simple, neat and immediate.

ย 

Clock applet

How difficult would it be turning a not-so-useful clock applet like this

into something more that conveys more info, say a small calendar? For example, here’s KDE’s clock applet

And how cool would it be, if I could also check the vacation days? Even better, if I could pick any number of Countries, such that you could see their vacation days at a glance? Well, KDE has been doing this for years as well:

Yes, I know, there’s a Calendar app that can be configured to eventually do sort of the same (but still, no clock <-> calendar events synchronization/visualization, as far as I know).. but why should I use an app, when the clock applet is sitting there, at one mouse click distance from me, doing nothing?

ย 

OS Updates

When I updated MacOS from 10.15.3 to 10.15.4, I didn’t notice I was still connected to internet using my phone (crappy day with my regular internet connection). Fair enough, I cancelled the process just after downloading ~40MB of data, with the intent to resume the process later in the week. But then, MacOS decided it was already fully upgraded to 10.15.4. I therefore tried to force-check for updates, which didn’t work. Downgrading MacOS wasn’t an option either in my case. In the end I found out that I could download the entire *.dmg update package from Apple website, and execute it locally. I did run it thrice, just in case ๐Ÿ™‚ Well, I had to, because the first two attempts ended up prematurely due to unspecified errors… and when I was almost in despair, the third time did finally succeed.

I don’t recall ever having such experience when upgrading packages (once, when doing a major OS upgrade between two versions, not one) with Kubuntu, just sayin’. Network unexpectedly goes down? You can retry later, and apt will pickup from where it left.

ย 

Misc

ย 

TL;DR: so, is it worth it or not?

Yes. Despite me ranting for the reasons above (and rest assured, I’ll keep the list updated!), I want also to emphasize what I’ve said at the beginning of this post: it truly is the best hardware I’ve had the pleasure to play with, in a long time. Great screen, awesome cpu performance, extremely silent, audio quality beyond belief. Battery doesn’t last as it’s advertised, which shouldn’t come as a surprise at all. The trackpad and its gestures are great when you’re on the move and for mundane tasks, but for anything serious, in my opinion using a mouse is still the way to go. The preinstalled software is overall okay; I like garageband and the piano lessons it offers, but I didn’t have a chance to use the Office suite yet. The touchbar feels a bit of a gimmick, but for example I do love the autocorrection proposals it shows when I make a typo.

In the end, the MacBook Pro is a good laptop; I just wish Apple would have used more common sense in developing its apps, considering how an OpenSource community like KDE can deliver high quality apps despite having

  • far less developers at its disposal
  • much broader hardware pool to support

And perhaps, it would be great if Apple would add Linux support in the same way they support Windows with the Bootcamp project. I also wish Apple adopted KDE’s philosophy, “simple by default, powerful when needed“, rather than “weird by default, powerful if you google for an answer that usually leads to install 3rd-party apps to get what you need“.

But who knows, maybe in the future…

ย 

ย 

ย 

(*) to elaborate it a bit more: after a year of usage, one of the two USB ports stopped working. I had to ship it back to Spain, where they replaced the entire motherboard and shipped it back to me. The whole process took more than 5 weeks in total and, few months after the 2-year warranty expired, the very same USB port stopped working again. meh. On top of that, I started experiencing random startup failures, and pc not resuming from sleep anymore, even after a clean OS installation, and despite checks on the SSD/RAM showed no outstanding issues at all.

Merry Christmas, and a PlasMate surprise for you :) [screencast]

Hello planet,
It’s been a looong time since my last post here. As I wasn’t selected for attending the GSoC this year, I focused myself mostly on passing my last few exams, and finding a teacher for the thesis I’m currently doing.
But, as PlasMate mantainer (along with sebas), I always felt completely unstatisfied about the current codebase and I couldn’t stop thinking about the improvements I had to do1.

Thanks to Giorgios, ย who took the responsibilty for keeping the bug count low and implemented a lot of cool features too, I was able to use my little spare time to think about how improve PlasMate codebase.

I started with implementing a small core library which basically:

  • loads a series of language definitions (no more hardcoded values for each language);
  • performs a scan of the plasmate projects dir;
  • loads the projects and reads their specific project settings.

Then, I started implementing a simple plugin structure to make PlasMate more flexible without the risk of ย letting the code grow with no ย control. The current supported plugins are:

  • DockWidget (surprise! ๐Ÿ˜› ) – widgets that can be placed in a QDockWidget, but also in an overlay or in a special “pinnable widget” (yet to be implemented). The File Browser, TimeLine and Previewer in the video all belongs to this type (coming soon: a console to collect the applet output);
  • EditorCreator (blah, i have to rename it to EditorFactory): creates and Editor for the given file, based on its type; for now we have a kate editor and the metadata editor available (coming soon:ย QtDesigner editor);
  • WebServices – allows PlasMate to interact with online services such as OCS, OwnCloud and others (none done yet, I’m porting the OCS one however).

At this point I’ve also implemented a configuration manager to write plasmate-wide settings,project-specific settings and also plugin-specific settings, so there is just one centralized place which takes care of this kind of stuff ๐Ÿ™‚

The library bits and the UI are working quite ok, I can load the old projects and save the project-specific settings, open the source files/edit/preview the changes, but there is still a lot of work to do.ย The code is hiiiiighly unstable and lives only on my hard drive for now: as soon as I get something more stable, I’ll publish it ๐Ÿ™‚

In the meantime, enjoy this video teaser ๐Ÿ˜›

Or, you can download the video in HQ and watch it later.

And Merry Christmas to all of you!

_______________________________________________________________

1: To Igor and the other people I told I was busy with a secret project.. yeah, it’s this one ๐Ÿ™‚ When I started developing the kmix applet replacement, I started having the concrete feeling that PlasMate was too much difficult to adapt to my workflow (i.e. no tabs to switch from a source to an other, the problems with the previewer size..) so I finally decided to start its modularization immediately ๐Ÿ™‚โ†‘

[Screencast] KMix QML Applet, the real one

When I started writing my last blog post, exactly two weeks ago, I never imagined that I would receive so many positive feedbacks and responses1 for a project that, as I’ve always restated, was just an proof of concept and nothing more.

Anyways that experiment (and the act of sharing it with the community) leaded, besides the comments, to an awesome consequence: the developer in charge to improve KMix DBus interface and provide the Plasma applet replacement, Igor Poboiko2, sent me an email the same day I wrote the aforementioned post.

Long story short: he was busy (like me) with College duties so, after refactoring the DBus interface, he was forced to stop his work. But theย  amazing news was an other: he even wrote a Plasma DataEngine, and a Plasma Service for KMix ๐Ÿ˜€

So we joined our forces,ย  I advised him to publish his work on reviewboard (he did a huge work, kudos!) to receive more feedbacks about his doings and I started coding, on my spare time, to a new KMix applet replacement. Since I had at my disposal this new “mixer” Plasma DataEngine, I started wondering why not making a QML applet, instead of a regular C++ plasmoid.

No sooner said than done, and this is the result (still incomplete) of my work:

[HQ Version]

The applet has all the basic functionalities required for a mixer, you can modify the volume level/state for each control (in my past experiment, I was only able to act on the Master) but still, there is a lot of room for improvements.

I was really impressed about the power of QML and Plasma technology combined (plus some Javascript flavors),ย  I think I’m in love with them ๐Ÿ™‚

As soon as Igor’s work will be published, also mine will land on reviewboard and, hopefully, will be part of the kdemultimedia module ๐Ÿ™‚

Stay tuned for updates, cheers!

_______________________________________________________________

1: I even scored the busiest day on my blog, and my previous record was half of the visit I received that day O.oโ†‘
2: Unfortunately, he doesn’t have a blog; I’ve found his sourceforge and twitter page, if you are interestedโ†‘

KMix plasmified [Screencast]

Hello folks, it’s been a looong time since my last post. Three months ago, during the Christmas holydays, and inspired by Aurelien’s posts about how improve UI’s in KDE-Land, I got inspired and started submitting some small patches to plasma and ksysguard, and then I focused on an application I (and I think all of you) use a lot: the audio applet.

KMix has a fancy monochrome tray icon, which makes it appear homogeneous with the other plasmoids contained in the Notification area. From a non-developer point of view, this is great: the user doesn’t need to know the difference between a regular application and a plasmoid placed in the notification area; he/she simply has to use it. The problem raises exactly when we want to use it: instead of showing to the user a beatiful interface which takes advantage of the Plasma API, the audio applet shows the old and plain slider with a regular pushbutton, destroying the feeling of an homogeneous and polished panel. Moreover, if the notification area is embedded in a vertical panel, when you click the KMix tray icon, the widget partially covers the panel.

For these reasons, I started porting KMix as plasmoid. I encountered some troubles so I contacted the mantainer whom kindly told me that port was already started by an other developer. So I leaved that project, and focused on something else. Why this post then, you may ask?

About one month ago my exams session started and, as usual, I got inspired on some projects (daaaamn :P) and specifically on KMix. I was curious to see how a possible port of KMix to Plasma would look like, so I’ve started this small experiment/proof of concept.

In the video below, you can see what I did, plus a cool feature made possible thanks to Plasma:ย  a minimalistic media panel ๐Ÿ™‚

(Sorry for the bad quality of the video, but recordmydesktop is not working on natty, plus I’m having problems with fglrx so I’m using the opensource driver1)

[HQ Version]

Some screenshots for those that don’t want to download 53 MB of video:

KMix Applet - Collapsed in an icon

KMix Applet - Popup shown

KMix Applet - Controls shown inside panel

Pretty cool, isn’t it? ๐Ÿ˜‰

However, there are a lot of issues with the current implementation, mostly because I’m using DBus calls to an interface exposed by KMix. Don’t get me wrong: it is awesome, because saved meย  a lot of headaches like dealing with alsa/oss and whatever but, on the other hand, the interface exposed to DBus is outdated and far from complete. For example, you can retrieve only the ID of the master device and set/get/mute/unmute only that device, there is no signal exposed for notifying changes of the volume level, so you cannot be notified of the volume level if an other app is modifying it unless you repeatedly poll the result of the masterVolume() call2. Sometimes, when adding/removing multiple instances of the applet3, plasma crashes (this is my fault). Since I rely on DBus calls to get/set the volume, this means that you can’t quit the old KMix application; however, you can open KMix main window, click on “Configure KMix”, uncheck the “Dock in system tray” option, and then close the KMix window.ย  In this way KMix will run in the background, wihtout showing himself in the notification area, and you can enjoy the plasmoid version ๐Ÿ™‚

If I didn’t scared you enough and you still want to give it a try (until the official version will be released) you can grab the code from my personal repo, and then compile and install it as usual.

Cheers!

_______________________________________________________________

1: By the way KWin’s “Magic Lamp” effect works way better with the opensource driver rather than the closed one, so much win ๐Ÿ˜€ โ†‘
2: The mantainer told me that the developer in charge of porting KMix to plasma is also writing a better and efficient DBus interface, to allow a fine-grained control of the Mixer object, so the official release will really kick ass! โ†‘
3: I know that it does not makes sense with the current implementation, since I can only modify the master channel, but I like to test all the possiblities ๐Ÿ˜›โ†‘

KDE project template(s) for QtCreator

Laziness is such a great virtue, sometimes ๐Ÿ˜€

Yesterday I was sitting in front of my computer, ready to start an application from scratch, and I felt very bored when I thought about all the files I need to create every time in order to have a minimal and functional application to start with. You have to write a CMakeLists file (and every time I forget to set some vars, or make some stupid typo), a .desktop file, a main.cpp source file and a class.h/cpp files. Oh God, why QtCreator doesn’t ship with some simple and handy template for KDE projects?

So I sat down, learned how to build a custom template wizard, and here you go: I made three project wizard: one for KDE console app, one for GUI ones, and the last is a plasmoid wizard template ๐Ÿ™‚

And, of course, now I’m gonna showing you some screenshots!

 

Overview of the Projects page

Overview of the options inside the KDE gui project page

Overview of the options inside the Plasma Applet project page

Final result

Of course these wizards are far from being complete, so any comment/suggestion/critics is highly appreciated ๐Ÿ™‚

You can grab the templates by cloning my repository:

$git clone git://anongit.kde.org/scratch/casella/qtcreator_kde_wizards

and then simply copy the folders under $HOME/.config/Nokia/qtcreator/templates/wizards or /share/qtcreator/templates/wizards/ .

Cheers!