More laptop repair

Following on my previous post, this last weekend I did a little more laptop repair.  I was successful again, but this time it was much easier.

This time my task was to fix up an old laptop for my son.  After a month off, it's time for him to get back to doing some school work.  He functions better when he has a regular schedule and the whole learning-from-home coronavirus pandemic thing really threw him for a loop.  So it will do him good to get back to a little Reflex math and Lexia reading, in addition to doing some writing on the computer.  (He hates writing, but seems to tolerate it better when he can type rather than print.  Plus he likes the "learn to type" program he was using.)

Well, to do that he needs a computer.  He was using the school laptop that he used in the classroom (you know, back when kids were allowed to go into the school - we still don't know for sure if that'll be a possibility for the fall), but we had to return that at the end of the year.  And since neither I nor my wife wanted to sacrifice our laptop to the cause, we decided the easiest solution would be to fix up the old MacBook Pro I had sitting on a shelf.  It's a 2010 model that we hadn't used in several years, but it was still functional.  It also had the benefit of being a retired web development laptop, so it had a decent amount of horsepower.  This may serve us well if he has to do distance-learning from home in the fall, because the school laptop he was issued was hideously slow.  It basically had the memory to run Windows 10, whatever central management software the school had installed on it, and just barely enough left to run one actual user application.  Any more than that and it started thrashing like crazy and ground to a halt.  And don't even think about letting it go more than a day without a reboot.

Anyway, shortly after setting about this task, I realized this laptop would need some hardware work.  There were actually two things wrong.  The first I already knew about: the trackpad was broken.  It tracked finger movement, but it wouldn't click, which made it fairly useless.  You could sort of work with it by turning on the "tap to click" setting, but that was highly limited and painful at best.  However, I figured that problem would be solved with a USB mouse.

The second problem was more immediate.  While creating an account and figuring out what to do software-wise, I realized that the bottom of the Macbook wasn't flat.  In fact, one side of the bottom panel wasn't even flush with the rest of the case.  At first, I figured maybe a screw had come loose, or that I'd opened it up for some reason and put the panel back on crooked.  But no.  It was the battery.

Bulging Macbook battery

That's the battery that I took out of the Macbook.  In case you can't see in the image, it's bulging to the point that the external plastic casing has started to break open.  It was actually putting so much pressure on the case that it was forcing it open.  So that had to be replaced too.

Fortunately, this was a much less involved operation than the Dell repair.  I don't know about the current models, but the 2010 Macbook Pros are built to be pretty easy to service.  No annoying plastic clips or other weird tricks needed to open the case - just take out the screws on the bottom.  I'm sure replacing the keyboard would be more difficult, but the battery and trackpad were pretty easy.  In fact, I was just able to follow the video below.

The only hard part was getting the trackpad out.  That's because one of the screws was hopelessly stuck and I managed to strip the head trying to get it out.  I eventually had to leave that screw in, remove the screws that fixed the support bracket to the case, and bend the bracket to get the trackpad out.  Then, after some struggle, I was able to work the stripped screw out with some pliers and a little WD-40.  I didn't have any other screws of the proper size, so I had to put the stripped screw back in the new trackpad using the pliers, which was a pain, but less difficult than getting it out.

All in all, it was a pretty painless repair.  The next part was just cleaning it up the software on the system.  The first thing was to upgrade OSX.  Since I hadn't used that laptop in years, it was still running Mavericks (OSX version 10.9), so I updated it to High Sierra (version 10.13), which is the newest one that supports the Mid-2010 hardware.  It's still two releases out of date (current is Catalina, v10.15), but it's better than nothing.  

The next step was removing all the old (and in some cases no-longer-working) software and upgrading the things that my son might actually need.  The two big ones were, of course, Chrome and Microsoft Office.  I also set up KeePassXC along with the Chrome plugin and created a password database for him to use.  He might only be seven, but it doesn't hurt to start instilling some basic security awareness.  Last but not least, I got a copy of MSP360 (formerly Cloudberry) Backup for Mac and set that up like the instances on our other laptops, so that he's all backed up.

So for an investment of a few hours time and about $110 in parts and software, my kid has a nice, working laptop.  I walked him through logging in, what applications are available, using KeePassXC, and the other things he needs to know for now.  It'll take a little practice for him to get used to it, since there's a lot there and he's never used a Mac before, but he took to it pretty well.  Hopefully this will be the beginning of a good educational experience for him.

My biggest laptop repair

I am very proud of myself.  Last weekend, I undertook my most extensive laptop repair yet, and it worked!

My task: replace the keyboard in my wife's laptop.  Now, this might not sound difficult, but the problem is that my wife has a Dell Inspiron 13 7359.  It's one of those convertibles where the screen will fold all the way around to turn into a quasi-tablet.  It's actually a fairly nice laptop, and it's got more than enough horsepower for her use.  The problem is that she's kind of tough on it and the keyboard was going bad.  In fact, it had quite a few keys that were either flat-out dead or very hard to press, to the point that the keyboard was basically unusable.  So it needed to be replaced.

The problem is that you can't replace this keyboard from the top.  The top of the case is all one piece and covers the space between the keys.  So you have to do it from the bottom, which means that you need to take literally all the components out of the case.  But it's not even that simple.  You can't just  take everything out and then unscrew the keyboard.  Noooo, that would be too easy.  You need remove a layer of adhesive plastic, which is on top of a protective metal plate which is glued and plastic-welded to the case and keyboard.  Then you can remove the glue that holds the keyboard to the case and replace it.  And, of course, then you've got to put back the plate and all the components.

The good news is that I managed to get through all that without too much difficulty.  I used the YouTube video above as a guide to disassembling the core components.  Then I took the advice from this iFixit thread to use use a soldering iron to melt the plastic welds (and also the glue).  I was able to use the soldering iron to go around the edges of each plastic weld and push the melted plastic to the middle of the post, as in the image below.  I used a small screwdriver to pry up the plate as I removed each weld. The soldering iron also easily melted the glue.  After replacing getting everything out, I was able to snap the new keyboard in over the plastic posts without too much trouble.  I used a little hot glue to hold it, then replaced the metal plate, using the soldering iron to spread the plastic from the welds back over the edge of the metal.  Probably not as good as new, but good enough to hold.  Then it was just a matter of putting back the sheet of adhesive plastic and all the system components.

Inside of the case with some of the plastic welds melted

The only part that I actually had any serious problems with was reconnecting the circuit board that houses the WiFi chip to the the motherboard.  For some reason, I just couldn't get the cable to stay put.  I'm not sure if it was just loose or if I wasn't getting it seated properly.  This was especially annoying because that board is what the power button is connected to, so the system wouldn't even turn on if it came loose, which kept happening in the process of putting the back cover on.  I eventually was able to get it to stay put with some tape, so at least it worked out.

In the process, I also upgraded the laptop hard drive from spinning rust to solid-state.  I used EaseUs Todo Backup Home version to and a USB hard drive enclosure to clone the existing system from the HDD to the SSD and just swapped in the SSD when I was putting the system back together.  It worked out great.  The drive cloning process was fairly painless.  It took around 45 minutes to clone the 500GB drive.  The only annoyance was the progress bar that stayed at 53% for half an hour before jumping to 90% when it was about to finish.  The software seemed fairly nice, but I didn't use it much - I really just needed to clone that one disk.  They have a free version, but sadly it does not seem to include the system cloning feature, so I just used the free trial of the paid version.  This does require you to sign up for a subscription and cancel before the trial ends, which is annoying, but not ultimately a big deal.

So now my wife can actually type on her laptop and it has a faster disk.  Total cost: $115.  That's probably less than I would have paid for just the parts if I'd taken it to a shop (which I don't know if they're even opened now).  The break-down was $20 for the keyboard, $70 for the SSD, $15 for the hard drive enclosure, and $10 for a soldering iron.  Yes, I had to buy a soldering iron.  I'd never actually used one before, believe it or not.  But I used it successfully and only burned myself once.  Not bad for a software guy, if I do say so myself.

A substitute for the Olympics

I'm not a big sports fan.  I'll watch a fight now and then (boxing, Muay Thai, or MMA), but that's about it.  I don't have favorite teams and I don't follow the careers of individual athletes.

However, I do make an exception for the Olympics.  Every other year I become an avid sports fan for a couple of weeks and watch as much coverage of the Olympic games as I can.  And I don't really even care what the events are, either.  I'll watch everything from racing to curling - anything I can find.  Because, for me, it's not about the sports per se.  It's more the atmosphere of (usually) good-natured competition between nations.  It's a chance to celebrate the success of individual athletes while simultaneously cheering for your "team".

Sadly, this year the Olympics have been postponed due to coronavirus.  However, my wife found an acceptable substitute on Netflix in the form of the Ultimate Beastmaster.

I know that probably sounds crazy, but stick with me.

If you haven't seen the show, the basic premise is that it's a game show where contestants have to run through an obstacle course.  They take turns running the course and get points for getting past the obstacles.  Whoever ends up with the most points wins.  There are multiple "levels" to the course and the game is run as an elimination tournament to get to the final level where the winner is determined.

So how is that like the Olympics?  Well, for starters, there's a meeting of nations.  Each episode features six teams of athletes, each representing a different country.  And I say "athletes" rather than "contestants" because that's what you have to be to get through this obstacle course.  Like the Olympics, the course requires some strategy and is very physically challenging.  Actually, that's an understatement - it's not "challenging", it's absurdly difficult.  The course varies between seasons and episodes, but I swear some of them are borderline impossible.

But more importantly, the Ultimate Beastmaster has very much the same vibe as the Olympics.  There are two announcers from each country represented, and yes, they talk a lot of crap to each other, but they keep the overall mood very positive.  Everyone roots for their team, and when their team is eliminated, they root for the another team.  The sportsmanship and camaraderie, both from the athletes and announcers, is inspiring.

So while it's not the Olympics, Ultimate Beastmaster gives me a lot of the same things - global community mixed with national pride, intense competition, and celebrating great personal achievements.  If you're missing that Olympic feeling this summer (and you're a Netflix subscriber), then give it a try.

What happened to your favorite wrestlers

Like many kids, I watched professional wrestling when I was growing up.  From the time I was about 10 or 12 I was a big fan of the WWF and WCCW.  For a while I would religiously watch the regular programs on TV and even rented the older Wrestlemania VHS tapes from the local video store.  I lost track of it when I was in college, but it was great fun for a kid - lots of bold, flashy characters and enough action to be exciting, but not scary.

A few weeks ago I listened to Joe Rogan's interview with Diamond Dallas Page and it made me wonder what happened to some of the other iconic wrestling figures I remembered from my childhood.  Some of them I knew about - Hulk Hogan has been in the news; I knew Andre the Giant had died; I'd listened to Jake the Snake Roberts on Joe Rogan a few months ago.  But what about all the others?  What about people like Mr. Perfect, Bam Bam Bigelow, Ravishing Rick Rude, or the Ultimate Warrior?

Well, it turns out they're all dead.

I learned this from an unexpectedly captivating site called the Ten Bell Salute.  It's a database and tribute site dedicated to memorializing the deaths of professional wrestlers.  And it turns out there are a lot of them.

Part of the reason the site is both captivating and depressing is that it really brings home how tough the life of a pro wrestler actually is.  According to their data page, of the 2024 wrestler deaths in their database, 473 died before the age of 50 and the average age of death was only 61.  It's actually strangely comforting when you happen across one who was old enough to collect social security.

Each wrestler listed on the site has their own story, but many of them are quite tragic.  Many were due to drug use or complications thereof - sometimes from the performance-enhancing drugs used to build muscle, other times from narcotics to deal with injury or stress.  And some, like Kerry Von Erich, who committed suicide at 33, or Chris Benoit, who killed his family and then himself, are their own special kind of tragic.

Beyond the stories themselves, these deaths seem so impactful because it's the first time I've really looked at them as actual people.  On TV, I knew them only as their characters - big, muscular, walking down to the ring in elaborate costumes, putting on larger-than-life personalities and engaging in epic feuds with each other.  They hardly seemed capable of having the same problems as regular people.

But, of course, they were regular people. 

The fact is, you don't get into a line of work like that if you have a Harvard degree and a trust fund.  Wrestling may be "fake" in the sense that the outcomes are predetermined, but it's still incredibly physically demanding.  It's hard to take that amount of punishment, as often as they do, without your body starting to break down.  These people lived tough lives and it took a toll.  

So if you, too, loved pro wrestling as a kid, I recommend browsing through the Ten Bell Salute.  It's a nice way to bring back those childhood memories and, at the same time, reflect on the transience of life and the reality of the human beings behind the heroes and villains that we know from the media.  That may sound a bit heavy, but it's a surprisingly rewarding experience.

Reinstalling Ubuntu

I finally got around to re-installing my desktop/home server the other day.  I upgraded it to Ubuntu 20.04.  It had been running Ubuntu for several years, and in the course of several upgrades, it somehow got...extremely messed up.

Of course, it doesn't help that the hardware is really old.  But it had accumulated a lot of cruft, to the point that it wouldn't upgrade to 20.04 without serious manual intervention - which, frankly I didn't feel like taking the time to figure out.  And something had gone wrong in the attempted upgrades, because several programs (including Firefox) had just stopped loading.  As in, I would fire them up, get a gray window for a second, and then they's segfault.  So it was time to repave.

Sadly, the process was...not great.  Some of it was my fault, some of it was Ubuntu's fault, and some of the fault lands on third parties.  But regardless, what should have been a couple of hours turned into a multi-day ordeal.

Let's start with a list of the things I needed to install and configure.  Most of these I knew going in, though a few I would have expected to be installed by default.  Note that I started with a "normal" install from the standard x64 Ubuntu Desktop DVD.  I completely reformatted my root drive, but left my data drive intact.  I had to install:

  • Vim.  I'm not sure why this isn't the standard VI in Ubuntu
  • OpenSSH server.  I sort of get why this isn't included by default in the desktop version, but it kinda feels like it should be the default for everything except maybe laptops.
  • Trinity Desktop, because I really liked KDE 3, damn it!
  • The Vivaldi browser, because I really liked old-school Opera, damn it!
  • Cloudberry Backup, for local and off-site backups.
  • libdvdcss, because I've been ripping backups of all my old DVDs before they go bad (which some already are).
  • OwnCloud, which I use to facilitate sharing various types of media files between my devices.
  • The LAMP stack, for my own apps as well as for ownCloud.
  • Cloudberry Backup.  Turns out that was super-easy - just restored the files to /opt and installed an upgrade (was on 2.x, installed .deb for 3.0), worked like a charm.

The up side is that Cloudberry was super-easy to reinstall.  I created a backup of the file in /opt before reformatting, then just restored those and installed a .deb for the latest release over top of them.  Worked like a charm!  Since it's a proprietary package with license validation, I'd been expecting to have to have to contact support and get them to release and refresh the license, but it turns out that wasn't necessary.

On the down side, a lot of other things didn't go well.  Here's a brief summary of some of the issues I came up against, for posterity.

  1. The video was corrupted.  This happened in both the installer and the main GNOME desktop.  It wasn't so bad as to be completely unusable, so I was able to get in and work around it.  But it was almost completely unusable.  Fortunately, the issue went away when I switched to Trinity Desktop.
  2. The sound didn't work.  It seems that the system picked up the wrong sound card.  I'm not sure why.  I was able to find and fix that by installing PulseAudio Volume Control.
  3. The scroll buttons on my Logitech Marble Mouse trackball don't work.  I still haven't figured this out.  Of course, there's no graphical utility to re-map mouse buttons that I've found, so it's all editing config files.  I found several possible configs online, but they don't seem to work.  I might just have to live with this, because I'm not sure I care enough to devote the time it would take dig into it.
  4. I forgot to take a dump of my MySQL databases before reinstalling.  Of course, this was completely my fault.  But the down side is that, from what I read, you can't just "put back" the old database files for InnodDB databases.  Apparently it just doesn't work that way.  Luckily I didn't have anything important in those databases (it was all just dev testing stuff), but it was still annoying.
  5. Re-installing ownCloud did not go as smoothly as anticipated.  In addition to the MySQL issue, it seems that Ubuntu 20.04 ships with PHP 7.4 out of the box, which is great.  However, ownCloud apparently doesn't support 7.4 yet, so it refused to run.  A quick search suggested that the "not working" parts were mostly in some tests, so I was able to comment out the version checks and get it to work.  I wasn't running anything but the standard apps on this instance, so it might not work in the general case, but it seems to be OK for what I need.
  6. Plex was annoying.  When I installed it, I got a brand new server that I had to claim for my account, which is fine, but the old instance was still present in my account.  Which is understandable, but annoying.  I had to re-add my libraries to my managed user accounts and was able to remove the dead instance from my authorized devices without much trouble.  It just took a bit to figure out what was going on.  Probably didn't help that both servers had the same name.  I also had to re-do all the metadata changes I'd manually made to some of my media files.  Next time I'll need to figure out how to backup the Plex database.
  7. I probably should have thought of this, but I didn't move my user and group files in /etc over to the new install.  Not a big deal, since I don't have that many, but it meant that several of the groups I created weren't present and were recreated with different GIDs than on the old install.  This was mainly an annoyance because it meant that some of the group ownerships on my data drive ended up wrong.
  8. I had some trouble getting Linga back up and running.  After setting up a new virtualenv, I kept getting errors from the Pillow image manipulation library that there was "no module named builtins".  This was really puzzling, because, as the name suggests, "builtins" is built into Python 3.  I initially assumed this was just my Python-fu being weak and that I had an error in my code somewhere.  But no - it was my environment.  After some Googling (well, actually Duck Duck Go-ing), I realized that this was a common problem with Python 2 to 3 compatibility and was reminded of this post that I wrote six months ago.  The short version is that Apache was running the Python 2 WSGI module.  That seems weird, given that the system only ever had Python 3, but apparently that's how the Apache module works.  Anyway, I installed libapache2-mod-wsgi-py3 and everything was fine.

All in all, this experience reminds me why I don't do this sort of thing very often.  All this tinkering and debugging might have been kind of fun and interesting when I was 25 and had nothing better to do with my time, but these days it's just tedious.  Now I'd much rather things "just work", and if I have to forgo some customization or flexibility, I'm kinda fine with that.