Full disclosure: this is more or less going to be however many words of me hating on my MacBook Pro. Just so you know.
I have a 2019 13” MacBook Pro system, the base two USB-C port model with slightly upgraded storage (256GB from the base 128GB). I bought this system to do software development and as a general purpose daily driver to replace the hodgepodge of machines I was using so I could be a more effective software developer on a project I was working on. The choice to get this particular model machine came down to cost, capabilities over the similar tier MacBook Air model, and desire to have a macOS-based system (as my dev toolchain works best on a Unix-y system). This was a $1,500 system when I bought it, after my educator discount and fortuitous timing to get it during a tax-free weekend.
This thing was a mistake. (This is the bit where I just complain about this dumb computer.) On paper, it seems pretty nice for the time, but there’s problems. The 8th generation Core i5 CPU in there was getting old, even in 2019, and it doesn’t help that it’s a laptop efficiency SKU so base clock on it is 1.4GHz (and no HyperThreading). The 256GB storage is far more limiting than it seemed it would be. The keyboard, well.. this one’s got the 3rd generation butterfly switches, so it doesn’t fail if you look at it wrong or happen to not live in a clean room, but the switch feel is terrible. Some of this I tried to remedy - really, this thing mostly lived as a desktop, so I’ve amassed a bunch of USB-C dongle docks and one quite fancy CalDigit one, and so I had additional storage hooked in and screens and a real keyboard - but then you have to deal with macOS getting confused by there being things attached and then generally sometimes forgetting that there are screens, getting stuck in beachball mode, etc. All the while, WSL kept getting better, and PC parts kept getting cheaper, so ultimately I ended up building (now a handful of times - fiddling with things is fun!) a desktop system that’s now my daily driver and the Mac rarely gets used anymore. I didn’t even miss it when it had to spend a week or so out at AppleCare for service. (The keyboard broke. But not in the way everyone’s did - my backlight gave up. So, it’s got a new keyboard now. And a new screen, because the shitty webcam also failed. First time I’ve sent a machine in for service in maybe a decade.)
Now, the easy fix for this is one you can do on the front-end: don’t buy the base model. I thought 8GB RAM, especially coupled with Apple’s “fast” SSDs, would be OK, but really with the stuff I tend to need to have running (which includes Docker, IDEs, all that) it doesn’t work out. I thought too that I could make do with 256GB but that just meant I was running the SSD close to full all the time, which is bad. And sorry 1.4GHz Core i5 sucks. Just does. Almost as much as the keyboard. So, why didn’t I get the 4-port model instead? In this case, because the cost went up dramatically - I got this thing during a tax-free weekend, so not only would stepping up mean going to the $1,800 system or so, it’d also mean paying another roughly 10% more in sales tax, so really instead of a $300 difference, it’s closer to $600. (In Tennessee, tax-free weekends cover computer purchases up to $1,500 as long as they’re entirely under that amount. Go a penny over and the entire purchase price becomes taxable again.) Plus, the obvious - I had the money for that machine, and not more than that. So, I dealt with it and as things went on built up my daily driver desktop PC into the fairly ridiculous system it is.
Laptops are nice to have and it’s also nice to be able to do stuff from not my desk with the questionable ergonomics, so I’ve been looking and thinking about getting a new system. I’m also now mostly a Windows user again - Docker and WSL 2 especially make things a lot nicer for the things I need to do - so I’ve been considering those things too. I’d mostly thought on a Dell XPS 13” or HP Spectre x360 13”, as I like the form factor of the smaller machine. Either of those would run about $1,500 - of those, the Spectre was the winner since Dell likes to run warranty scams and it just had better specs for less money. But, I saw that Best Buy actually had a Lenovo system for pretty cheap that had pretty nice specs. Poor impulse control said I could get it, so I did.
The machine I got is a Lenovo Yoga 6, which I suppose is nominally part of their ideapad line, so not a fancy ThinkPad system. It’s a 13.3” machine again, occupying the same 2d space as the MacBook Pro but somewhat thicker (maybe about 33%? Both of these machines are super thin) largely due to its convertible nature (has touchscreen, folds backwards). The screen isn’t quite as nice as the Mac’s - just a 1080p panel versus the sort of 2.5k that the Mac has that you can’t actually run at native resolution - but it’s close enough. The trackpad isn’t as nice but it’s worth noting that Windows Precision trackpads are leaps and bounds better than what used to come on Windows laptops. (Again, it’s close enough.) Port selection is way, way better - 2 USB-Cs and 2 USB-As, though only one of the USB-Cs supports PD, and no headphone jack on the Lenovo. The keyboard is so much better and mine’s even slightly broken - the LEft Shift Key Sticks Occasionally - but the layout is comparable to the Mac and is even backlit. No touch bar, which I prefer but I wasn’t a touch bar hater. (Escape is still roughly in the same place either way but tactile feedback is nice, but on that same token, the touch bar does some neat things too that I sort of miss a bit.) Has a fingerprint reader! The webcam sucks - it’s a 720p thing, but it works, I guess - but as a nice touch it has a physical shutter you can activate. Mine came in a nice darkish blue with a denim cover on the screen, which I like a lot. Needless to say, this is a plastic machine, but it’s nice plastic.
The guts are where the thing really stands out. Even adjusting for time, it’s way better. The Lenovo came with an AMD Ryzen 7 5700 CPU, 16GB of RAM, and a 512GB SSD that’s actually upgradable. This means it’s got a CPU that’s pretty comparable to my desktop and better graphics than most anything Intel has, especially the UHD stuff that’s in the 8th gen. (Prob worth noting that despite the name the laptop 5700 Ryzen is internally a Zen 2 CPU, so it is really the baby laptop-style sibling of my main machine’s Ryzen 7 3700X. Same architecture, same 16 threads, but clocks and TDP are different, and the laptop CPU’s got graphics where the desktop one does not.) 16GB RAM is good too, especially since that isn’t upgradable, and though it’s limited to PCI-Express 3.0 I can swap in a bigger SSD easily. The SSD itself is a Western Digital Black model, even, that I believe benchmarks faster than the one in the Mac too. (I can feel the difference between it and the ridiculous Sabrent Rocket PCIe 4.0 one in the desktop but that’s a ridiculous drive.)
Price comparisons are a fun thing to do, so let’s do that. I looked on the Internet’s favorite auction and corporate intimidation site, eBay, and found that my MacBook Pro can be had for around the $600-$700 mark at this point. Which is handy, because the Lenovo was $700. Yep. Granted, I saw this system on Best Buy via the Ars Technical deals thing, so it was on sale - normally it’s $950.
Basically, this all made me somewhat more annoyed than I was with the Mac before - if I stripped out the macOS requirement when I was looking initially, I’d have ended up with a much better laptop, and now, barely 2 years later, I spent about half the price of the Mac and got easily way more machine. Oh well. At least the USB-C dongles and such are still useful - while the Lenovo lacks Thunderbolt (it’s an AMD machine), it’s still got a couple of whatever the fast USB C ports are so I can still use ‘em. (And part of my annoyance was/is those things - I have like 3 of the dongle dock things, and the CalDigit one wasn’t cheap.)
So, moral of the story: don’t buy the base model, and, yeah, look at the damned Windows machines. I’d have been happier with either a contemporary Dell XPS or HP Spectre/Envy or something or by saving a bit more and getting one of the 4-port MacBook Pros. (Or even the Air, really - 512GB storage would be better. Or being able to upgrade the storage. Damned Apple SSDs aren’t even that fast. They’re not magic.) I am, though, real impressed with this cheap Lenovo.
Other thoughts: Battery life is still pretty great - I get a good 8 hours at least depending on what I’m doing. Lenovo gives you a year warranty and adding on up to 4 years is pretty cheap - something like $200ish to go up to 4 total years with on-site support; less if you’re good with shipping it out. Mine didn’t have too much bloat crap on it, just a handful of annoying Lenovo apps and McAfee (or the ghost thereof), all of which (other than a couple of Lenovo things to make the support site work) went away when I reformatted and installed Windows 10 Pro. I can’t unlock it with my watch, but then most of the time I unlocked the Mac with the Touch ID sensor because the watch unlock is really slow. The convertible bit is pretty nice, though I won’t use it much. Still nice to have and because of poor impulse control I did get a Wacom Bamboo pen for it, which works pretty well (at least as good as my ancient Surface Pro 4 pen). I have in fact used it a few times in the short time I’ve had it so far. And man the keyboard. It’s like it was designed by people who actually use their computers for things and who might want to type on them occasionally. Nice travel, nice tactile bump, and this isn’t even the nicer ThinkPad keyboard. Being able to actually do things from the couch is nice.
The other day, I shipped my MacBook Pro off to be fixed, as the webcam and the backlight on the keyboard stopped working. (They broke some time ago, but it’s coming up on the end of the standard warranty, so I figured I’d get that done before it cost actual money to fix.) This post isn’t really about that computer, though; it’s much more about something that I managed to cobble together to take care of a thing I was doing on it. This post is much more about Platypus.
So, while I do still use my Macs a good bit, they don’t get used a whole lot for real work. (The ridiculous Ryzen machine takes care of that for the most part.) The Mac gets used for Web terminal stuff, email - Outlook on Mac is better than Outlook on Windows, because unified inbox and it actually checks gmail accounts on a regular basis why is this so freaking difficult - and messaging via Messages, so basically text messaging. With the new machine in for service, I set up my 2010 MacBook machine to handle the handful of Mac-type things I can’t reasonably do on the Windows PC. It works well enough for its age but it’s not the quickest thing to do Web browsing on, and I was getting somewhat annoyed anyway with having to switch machines to send Messages (or otherwise having to do all that on my phone).
To that end, I set up the MacBook as sort of a third screen next to the Ryzen machine’s monitors and put Synergy on it. Synergy still works really well, and I can control the MacBook from the Ryzen box. Then I got thinking on getting it set up to open links and stuff on the Ryzen system, rather than trying to do it on the MacBook itself. I did some poking around and found some manager apps that give you a lot more options on the Mac side - there’s Choosy and Finicky and a few other things - and I found a page talking about using the Chrome remote debugger, which has now been deprecated, and I had an epiphany: can’t I open a URL on the command line? And, well, yes - on either Mac or Windows, running a command will allow you to open arbitrary things through the GUI (on Mac you use “open”, on Windows you use “start”). So, “start http://www.google.com" opens a new tab in Chrome and loads that URL.
So now I just needed a way to get URLs across the wire from the Mac to Windows. The Windows side was actually pretty easy: I just wrote a (very) simple PHP script that looks for a “url” GET argument and then pipes that into an exec call. This is wildly insecure but it does at least check for a valid remote IP and it’d be pretty easy to put in a simple URL regex check in there or to add some simple request signing (and of course everything’s behind a firewall anyway), but, after firing it up with the built-in PHP server, I could hit a URL with another URL in it and it’d open on the Windows machine.
The Mac side was a bit more involved. I wrote a simple shell script to pump the first argument passed to it into curl, so curl’s hitting my fancy endpoint ont he Windows side of things, and so I could open URLs remotely via the command line that way. The next step was figuring out how to get macOS to treat it as a “Web browser” and therefore “open” links using it. That’s where Platypus comes in.
Platypus is a pretty neat utility that I had no idea existed until today. At its core, it allows you to wrap a script (including a shell script) in a standard Mac app bundle, so that to the system it looks and works mostly like a normal app. It’s also got a bunch of neat features to handle script output and do things like load bits into a WebView (not like an app-specific browser, though), or display progress bars, or etc. etc. etc. The only drawback to it nowadays is that modern macOS really, really wants your apps to be signed, and it doesn’t do that, so if you’re on a modern system you’ll have to jump through some hoops to get that to work. But, it’s a pretty versatile utility that’s available for free.
I packaged the shell script up using Platypus. That worked about as well as it could have - I didn’t make any attempt, really, to get it to do anything but launch and run the script, and it did that (and, somewhat hilariously, it kept blocking because on the Windows side it was spawning a command prompt, which I had to close before PHP would consider itself done and then also return data back to curl on the Mac). The next step was to figure out how to get the thing registered as a Web browser system-wide and hope that macOS passed the target URL into it in a sane way.
Registering an app as a Web browser requires a couple of things: the app’s Info.plist needs a couple of key/value pairs to tell the system that it can handle http and https links, and the app needs to be in the system Applications folder. Platypus doesn’t have any controls in it to edit the default app Info.plist, so a bit of poking about was needed to edit it. (The gist of it: on the command line, I just used the plutil -convert command to convert the plist to XML format, then made some chanages, and then same thing to convert it back to binary format.) The necessary values that had to go into the plist itself I found in this Stack Overflow post, and, once I had those in and move the app bundle to /Applications, it showed up in the Default Web Browser dropdown in System Preferences. Selecting it, then opening a URL.. actually worked. (Not the first time as.. well, that blocking issue? I’d managed to trigger that again, and had a couple of requests queued with no URL in there. So, once I cleared out the command prompt windows, I got a barrage of things I’d clicked on.) So, now I can click on URLs on the Mac and they’ll open in Chrome on my Ryzen machine.
Now, the next steps are to make this somewhat more secure. Platypus can run pretty much any script - it just, really, runs it, so it can be in any language; it just happened that shell script was the most straightforward for now. So, I’d like to switch it up a bit so that I can maybe accept an SSH key or something and do this that way, so it’s not just piping things in cleartext over the network and has at least some form of authentication. It’d also be great if the thing could figure out if nothing’s listening on that particular IP and port so that it can revert back to a local web browser - if I grab the machine and go elsewhere, I’ll have to remember to switch it back over to Chrome or I won’t be able to click links outside the browser, and that’ll be annoying. Then, maybe I can release it on Github or something.
Is this the easiest way to do this? Oh god no - the easiest way is probably just to keep using my phone for this stuff. And, as mentioned, I have Synergy set up between these systems - it syncs the clipboard, so I can right-click and copy links and paste them into Chrome (in either direction) that way too. But, this was a fun 30 minute distraction that honestly makes things a lot nicer. (And, as a note, I’ve spent easily two to three times as much time writing this post about all this - and it was supposed to be short, even! - than I did actually doing the thing. I don’t even want to calculate the difference in length here with code written as it’s quite literally less than 10 new lines of code so far.)
So, just a.. well, not quick post about this neat thing. Stay tuned for the next post, in which I will invariably do something stupid with an old computer!
(Updated shortly after posting: Platypus actually does have an interface in it to register URI handlers for your generated app. I missed that somehow, so you can probably use that instead of mucking about with the Info.plist directly. Whoops!)
One of the ridiculous pieces of computing gear I’ve got is an HP ProLiant ML350 G6. This is for-real server gear, with (optional) redundant PSUs and remote management and all that nonsense. It began life as a single-CPU 8-thread Xeon E..5620something or other, but which is a first-generation Core architecture based type thing basically, with 4GB RAM and a single 147GB SAS 15k drive. It’s now a dual CPU X5560 (so 24-thread) system with 24GB RAM and 3x240GB Adata 2.5” SFF SSDs. And VMware ESXi 6.7, which is the point here.
Turns out, VMware Fusion on the Mac and Workstation Pro on Windows allow you to manage an ESXi server from your machine. (Manage is kind of a loose term - you can fiddle with VMs but you can’t do any host management stuff without logging into the Web UI or vSphere.) But.. it’s super neat to be able to sit at your Mac laptop, fire up Fusion, and then fire up a Windows 10 VM that’s not on your actual computer. That’s almost like magic. It’s legit like running the VM locally, except your actual computer doesn’t take the hit. (You don’t get the Unity stuff you do with a real local VM, though.) And, what’s also cool is firing up Fusion on the Mac and then Workstation Pro on the Windows PC and controlling the same VM on both systems. Watching the mouse move and stuff on both screens is just kinda neat. Did I mention I’m a huge nerd who thinks things like that are neat? Because if you haven’t gotten the hint by now..
That, plus the additional Docker workflow stuff that Fusion Pro at least gets on macOS, may actually push me into dropping Parallels for VMware. At least with the Docker integration on the macOS side I’d actually be using VMware on a regular basis; I can’t remember the last time I used Parallels at all. Running full VMs on my computer just isn’t a thing I do anymore.
This is just a quick post while I’m in between a number of things. I do plan on writing up a bunch of gibberish on all the upgrades that I did to the ProLiant - I’ve even swapped out the drive backplane at this point! and I still need to put more disks and RAM and the 2nd PSU in it - and the “let’s build some sort of PC cheap” project is about to turn into a “oh, well, here’s an actually good computer” project. But, things for later, and ideally when I’ve got some time to write some stuff for this to present multiple posts as a story type situation. Or work on this at all.
In conclusion, I have the best ping time.
And I actually posted a video to YouTube. (The Sun still rises! And runs Solaris 8! And has the IDPROM I got it!)
For about half a week now, I’ve been performing a bit of an experiment with my main computing environment. This has been triggered by my frustrations with macOS Catalina - it’s no secret that Catalina isn’t perhaps as well baked as it should have been, and my complaints with it aren’t new. There came a point where I just got tired of dealing with it not remembering that I had extra monitors, or getting all sorts of chewed up because of.. reasons (never really could figure that one out), or the admittedly small boot volume in it being damned near full all the time. I finally got fed up with it and decided to do two things: reimage the damned thing (which I honestly should have done to begin with - never trust the base image in the box) and switch up the environment some.
With that in mind, I took the silly Linux/Windows desktop I’d built up and began looking at what it’d take to push it into full-time use. The answer to that question was “not much”: most of the stack I use nowadays really works just as well on Linux as it does anywhere else, and I’d really just need to find a way to hook my screens into it. (If you’ll recall, this is a Pentium Gold-base system on a pretty entry-level H310 chipset board - integrated graphics here, and the board itself only has VGA and HDMI video outputs.) A bit of looking and some quick education on video cards pointed me in the direction of an AMD (weird) Radeon RX 570 GPU, and one in particular with 3x DisplayPort 1.4 outputs on it, so I grabbed that. For good measure, and certainly not because it was really necessary, I also opted to upgrade the storage to 500GB of M.2 SSD (it was on sale). I figured that, worst case scenario, this would mean I’d have a decent enough gaming PC to work with if the experiment failed. I do have a pretty long list of things in Steam and such that I either haven’t played or couldn’t play because of a lack of Mac support.
The SSD and video card came in on a Saturday and I went ahead and got everything installed and configured. And, of course, I started out by testing it out with some games. Intel has certainly come a long, long way from the i810 chipset video, and even the cut-down stuff in the Pentium Gold CPUs is pretty decent (especially for the older games I tend to like to play), but that RX 570 is so, so much faster.
After a lot of cultivating was done - Farming Simulator ‘19 is surprisingly fun - I went ahead with the core of the thing and got Xubuntu installed and going on the machine. That went pretty well, outside of some issues that were more caused by my router being dumb intermittently, and I got my normal stack installed and all that. Xubuntu got the Radeon configured and set up fine and it’s humming along nicely with my ridiculous mouse and the two 4K displays I’ve got for the main system. I’ve got my SSH and other access set up and working and have deployed some code and all that. So far, so good, and I’ve been able to be pretty productive on the system without it being too weird. There are very much some differences between macOS and Xfce on Linux but a lot of my work revolves around using PhpStorm, Sublime Text, Chrome, and a terminal, so all of that generally works just fine.
There are, of course, a few quibbles.
The one of these that’s really a big deal is the screensaver - one reasonably expects that to, yano, actually work, and to be able to get back into your machine when you’ve wandered off. Perhaps moving to regular xscreensaver over xfce4’s one will help. And, there’s little things that macOS does (and the tight integration that Apple can provide when you’re all-in on the ecosystem) that I miss. I never turn my phone off now because if I do it’s just that much more of a pain to talk to people. Unlocking my computer via my Watch is neat (even if I can only do that at home for now). The keys are in the wrong damned place now and I miss having Alfred and less shitty access to my Apple Music library. These (other than screensaver stupidity of course) are all fairly minor and ultimately I can get my stuff done without really noticing that I’m on a Linux system.
That said, I’m half of a week into it, during a week in which I’m not being particularly productive, so we’ll see what happens when I get back into gear and do stuff. But, who knows - this might just be the wave of the future for me. It’s been a really, really, really long time since I’ve actually wanted to and enjoyed using Linux on the desktop.
Oh - and that Pentium Gold CPU? Perfectly acceptable. I honestly can’t tell that much of a difference between it (2-core, 4-thread, 3.7GHz nominal speed, 9th gen Coffee Lake architecture) over the Core i5 in the laptop (4-core, 4-thread, 1.4GHz nominal speed, 8th gen Coffee Lake). Yes, they’re cut from the same cloth, but the Pentium chips slot under the Core i3 CPUs and the difference between 8th gen and 9th gen aren’t much. But, I have to say, this thing flies.