Press "Enter" to skip to content

Category: computers

Not Just The Numbers

Recently I was working on a high visibility end user problem with computer performance that ended up having a somewhat-unexpected cause: the laptop’s external power supply.

For months this person had been complaining of serious performance issues with a JavaScript-heavy websites that he needed to get his job done, and despite numerous technicians taking a look at the machine, none were able to fix it. In attempts to resolve the issue he’d been given new hardware, switched from a 32-bit to 64-bit OS, and had his user profile (all settings) reset to defaults more than once, to no avail. By the time the case got to me he was quite frustrated as fault was now being assigned to his data and the websites he was accessing, so I set up a meeting so he could show me the problem and talk through what’s going on. I hoped to get a better understanding of what he was doing and what was occurring to see what I could do for him.

After some cursory remote poking to check the laptop’s capabilities and be sure the it seemed stable we sat down and talked. He showed me what was clearly unacceptable performance, explained how the issue only seems to occur when he’s in the office at his desk, sometimes when at remote sites, and never when he’s connected via VPN. Seeing a nicely bundled set of cables behind his the monitor to which his laptop was connected I asked if he had a another power supply that he used when traveling, and if the one on his desk stays there.

That was it; the one on his desk was the cause. Newer Dell and HP business-class machines both use the same physical power connector and they’ll often charge each other’s devices, but depending on the laptop model, power supply model, and BIOS differences sometimes the  laptop will significantly scale back its performance. This is to save battery, allow charging on a limited supply, or (if you are conspiracy minded) steer people away from the use of third party power supplies. When in the office or at a borrowed desk at a remote site he was using a mismatched power supply, so the laptop would scale back its performance and the job-critical website would be unusable slow. Working from outside of company facilities (via VPN) he’d use the power supply that he carried with him — the one which shipped with the laptop –and performance was as expected.

When troubleshooting complicated problems like this it’s easy to fall into the trap of blaming user behavior, providence (the kind of data being stored), or the big mysterious technical places: bad hardware / software. The numbers. Sometimes one has to step back, sit down, talk to those involved, and look over the whole of the problem. Sometimes it’s as simple tab A being plugged into an incompatible slot C, but without stepping back and taking the user and his/her report into account this can be very hard to find.

Power supply model will even cause power scaling issues within the same brand if a given laptop requires, for example, a 90W supply and it is connected to a 65W supply. There is a POST prompt which warns the user of this, but sometimes users or technicians will see the laptop charging anyway (albeit at a lower rate) and disable it without realizing the consequences.

2 Comments

Moving from Ascent to rubiTrack

Since getting a GPS-based cycling computer and finding that Garmin’s offline analysis software, Training Center, is a bit lacking I’ve been using Ascent to log and aggregate my ride data. Ascent is okay, has some bugs, and seems to work but is otherwise abandoned. It also doesn’t work on the forthcoming OS X Mavericks, which means I need to find some other way to do offline ride analysis.

I enjoy tools such as Strava (and to some degree Garmin Connect), but I don’t like the idea of keeping my ride data on someone else’s system without an easy way to export it. Sure, I could back up the FIT files (raw files from the GPS unit), but that doesn’t include post-ride metadata that I’d add like the a name and general description of the route, or notes about the ride itself.

Stereo from the Reddit /r/bicycling IRC channel pointed me to rubiTrack, whose version 3 seems like it’ll be a good replacement for Ascent. There’s some claims of bugginess, and it’s lacking some features that Ascent had (eg: equipment maintenance log), but it otherwise seems good and is actively being developed. I’ve now switched over to it, so I wanted to give some details as to what it took to move my data over.

Here’s what I did:

  1. Buy rubiTrack, install the license.
  2. Launch Ascent.
  3. Show each activity as a separate row. (At the top of the Ascent window click the gear button and hold, then select Browser View, All Activities. Alternately, press Option-A / ⌥A.)
  4. Select a range of activities, perhaps a year at a time. Attempting to export too many at once will result in Ascent crashing.
  5. Right click in the Activity Browser (on the highlighted events) and select Export as tcx…. Give the export file an appropriate name.
  6. Repeat selection and export until all activities are exported.
  7. Quit Ascent.
  8. Launch rubiTrack, create a new set of data.
  9. Import each TCX file one at a time. Note that importing takes a while, and the rubiTrack UI doesn’t look like it is doing anything during the first import; be patient. During the subsequent imports an animation will display next to the Latest Import section.
  10. After importing, some of your activities may be listed as something other than Biking. By selecting multiple entries, right-clicking and picking Edit… you can change multiple activities to Biking all at once.
  11. Unfortunately, the TCX exports won’t contain either the name or equipment, so each activity will need to be edited to note these. Instead of a name, rubiTrack supports both a Location and Route, where Route (if present) is a subset of the location. For example, Stony Creek Metropark could have routes such as 6/12 Hour Race, Group Ride + Bonus, etc. Before beginning the renaming, go into Preferences and uncheck the Set similar locations automatically option in the General tab. Setting this automatically renames other activities in the same geographic area, which doesn’t work well if one regularly rides in a given area. Note that the options Import Category as: and Import “Name” as route on the Import tab do not help get names when importing from Ascent-exported TCX files.
  12. In Customize, Activity Types, Manage… delete other activities as needed so that only Biking, Racing, and Trainer exist with colors being Green, Blue, and Red, respectively. Set Biking to the default. Find appropriate icons in …/rubiTrack 3.app/Contents/Resources/ as atb_*.png. (Other people may want to keep these, but I wanted to reduce clutter… I can always add other activities if I decide to track them.)
  13. Define Heart Rate Zones as appropriate. More info on my HR zones can be found in this post, and I colored the zones the same as the LW Coaching chart.
  14. Define equipment via Window, Equipment. This, unfortunately, is not as useful as Ascent’s equipment log in that it can’t serve as a maintenance log. I have one entry for each bike and the trainer, with each bike or bike+trainer used with each activity. I may replace the maintenance log with a spreadsheet.
  15. Edit entries one at a time to have an appropriate location and activity type. Most of my Locations were copied from Ascent’s Title field. Autocomplete and the ability to select multiple entries at once and edit them en masse made this go quickly.
  16. Rides starting from home were tagged From Home and those which are part of certain group rides are tagged CRAMBA-IMBA Group Ride.
  17. After editing entries, the left side bar which groups rides by Location can be used to refine the listed locations. For example, I may have interchangeably used CRPT and Clinton River Park Trails, or RB and River Bends, depending on the ride. With a comprehensive listing of all locations used its easy to refine these for greater consistency.
  18. Play with the Options… on a given ride, in particular the Original device data and Use speed and distance data from device in chart options. Currently, with my Edge 500 and 510 data, this is a bit problematic. With Original device data checked the distance seems to reflect the distance that the unit showed (from the wheel sensor), but the Total Duration and Active Duration match and are short. Without this checked the Total Duration and Active Duration vary appropriately, illustrating the amount of time stopped, but the distance seems to be based on GPS and thus under recorded. This has been reported here and I hope that it’s fixed soon.

Other than the issue mentioned in #18, I’m pretty happy with rubiTrack. I’m particularly fond of its use of OpenStreetMap data, as this means that the trails that I’ve mapped in OSM (eg: Addison Oaks) have their routes right in my preferred analysis software. This is probably going to make me map even more stuff…

It’s also great for viewing things like heart rate data, where stops were made, high elevation points along the way, and also comparing rides. The author seems actively engaged in making it better, it should work with 10.9, is much faster to save, and is much nicer for answering questions like “How many races have I done in X year?” or “How many times did I ride at Stony Creek?”.

1 Comment

Garmin Edge 500 Time Issues during Lumberjack 100

After getting back home from completing Lumberjack 100 I was excited to review the logged data from my Garmin Edge 500 bike computer. A few times during the ride the unit lost GPS signal, but as I’ve had this happen on other rides without issue I didn’t pay it much attention. Unfortunately, it looks like this time the data really went odd. After poking with the data and attempting to correct it in Ascent I downloaded Fit File Repair Tool to see what it could tell me.

As shown in the screenshot above (click to embiggen), roughly 15.52 miles in, at 44.2119°N 86.1295°W, just beyond the Steinberg Road crossing in Road Monkey during my first lap (map here), the recorded time suddenly jumped from June 15, 2013 to October 19, 2019. This explains the strange duration I’d been seeing in analysis software, with everything from Ascent and Strava both reporting an elapsed time of around 55619:03:11, the length of a ride which I don’t quite think the Edge 500’s battery would endure, but which matches the 6-some year offset. Weirdly, Garmin Connect doesn’t show the issue (link), almost as if they filter out this problem.

When this issue occurred my Garmin was running firmware v3.00, something which I was hesitant to change soon before the race. Since the changelog to v3.20 only lists two minor changes which aren’t useful for me (power meter serial number display and a change to support manufacturing) I didn’t see a good reason to rush to upgrade. It’d also worked otherwise well for long rides, so I didn’t anticipate any problems. I upgraded the unit to v3.20 today and I’ll see if similar problems arise, but I can’t imagine I’ll be doing that length of ride any time soon, so it’ll be hard to get an equivalent test.

If any of you wish to review this damaged FIT file from Lumberjack 100 it can be found here: svigneau_2013_lumberjack100.fit.

Leave a Comment

Google Nexus 4 Supports GLONASS (and GPS)

A few days back Jeff pointed out to me that the Google Nexus 4 supports both GPS and GLONASS for satellite-based geolocation. I hadn’t noticed this before, but sure enough as seen above in GPS Status & Toolbox there they are. The GLONASS satellites are the boxes shown in grey, where the GPS satellites are the green circles.

This helps explain why the device is so good at getting fast location fixes and also why it works so well for my amateur mapping work. I’ve wanted a GLONASS-supporting device for a while and now I have one. Yay!

(This screenshot was taken while logging the location of Stony Creek’s Trolly Trails so I can commit the route to OpenStreetMap.)

 

Leave a Comment

Adobe Creative Suite Weirdness on OS X after Manual Backup

I’d been having a problem on my main OS X machine where, every time Adobe Acrobat would try to do a security update I’d receive a cryptic error message stating that I’d modified the installation and therefore the update wouldn’t work. During use of Creative Suite products (mostly Illustrator) I’d occasional see odd quirks, like slow(-er than expected) application launching or updates that seemed to run more than once.

After some digging I eventually found that the root of the problem was a backup of my Applications folder that I’d created when I reinstalled the OS post-SSD failure.

In recovering from this failure I figured that a clean OS install would be nice, so I moved /Applications off to a corner of my disk (/Volumes/Cruft/Storage/Applications.old if I recall correctly) and let it sit, just in case I forgot to copy or reinstall something and was later wanting for it. It appears that these .app bundles (the special folders suffixed .app, such as Adobe Illustrator.app) were still being seen as valid programs, and sometimes run instead of the intended ones in the root of the drive. This resulted in updates working strangely, slow launching as they weren’t read from the SSD, and the other quirkyness that I’d seen.

Having been a number of months since I created the …/Applications.old backup and not needing anything in there I deleted it, and all was better. Adobe Acrobat updated once more, and since then everything has worked as expected.

So, if you’re having problems with Adobe application updates failing weirdly on OS X, look around for other copies of the application bundles. Maybe this is your problem as well…

Leave a Comment

Tiny Tiny RSS on nuxx.net

With Google announcing that Google Reader will be shut down on July 1, 2013 I finally got around to trying out Tiny Tiny RSS, a web-based, host-it-yourself, multi-user, database-backed RSS reader. I’ve always tried to keep an eye on alternatives to Google’s services, and for the last year or so I’ve considered giving this a go. The announced sunset finally made me give it a go.

This was pretty easy to set up, with the biggest hassle coming from trying to make the optional Sphinx search engine do its thing. The poller took a little bit of effort to get right as well, but running it in the background via daemon(8) seems to have done the needful. Getting my Google Reader feeds into was pretty easy as well. By visiting https://www.google.com/reader/subscriptions/export I received an XML file that I could import into Tiny Tiny RSS via the Preferences → Feeds → OPML menu. I received a rather odd error during the import, but after exiting from Preferences all of my feeds were listed. (One can get all of their Google Reader info via Takeout as detailed here on Google’s Data Liberation page.)

Beyond a growing number of desktop apps that support Tiny Tiny RSS as a back end (as opposed to Google Reader) there is also an official Tiny Tiny RSS Android app which, so far, seems nicer than Google’s mobile Reader offering. The app costs $1.99 after the initial 7-day trial, but I think this is a small price to pay to support the author for such a nicely working setup. The source for the app is available here if one really doesn’t want to pay, but for this I think supporting the author is a great idea.

I’m really looking forward to seeing how fast development on Tiny Tiny RSS will progress now that it is getting widespread attention as a Google Reader replacement. While it seems to work well the UI is a bit ugly, and when used from work via a proxy it seems a bit slow at times. I could see a whole bunch of UI changes and performance improvements coming if it gets attention from folks who specialize in this.

If any of you who read this and know me would like an account on nuxx.net so you may use it yourself as a replacement for Google Reader, drop me a note and I’ll set you up.

(And yes, this is a test post to see if it shows up in the reader, just to confirm that everything is working…)

4 Comments

The New MMBA Trail Guide

I’ve been working on much of the behind-the-scenes stuff for the Michigan Mountain Biking Association (MMBA) website for a few years now. This started with a group of us moving from a broken phpBB2-based site to a Joomla site and a phpBB3 forum. After a couple of years the Joomla site was replaced with the more manageable and updatable WordPress.

Back when on Joomla there was a decent page that presented a Trail Guide that Rob Ritzenhein had built for Joomla which was a searchable list of mountain biking trails within the state along with a ZIP code-based proximity search. With the move to WordPress I had to drop this searchable trail guide and replaced it with a basic, text-based list that had been generated off of the old trail data. After two mis-starts and incomplete attempts to find a replacement during 2012, I was a bit concerned that I wasn’t going to have much luck finding someone who was able to write such a guide.

Out of the blue in late January 2013 I received email from a guy named Jeff Lau who said (in much more polite words) that our existing guide sucks and that he’d like to have a go at making something better. He was very right, and after he showed a very promising proof of concept I was really impressed, so he and I met up and things got rolling. Fast forward a couple weeks and he had software nearly ready to go. I was able to help out with some graphics stuff (made my first sprite sheet) and get the old trail data adapted to the new format and loaded into the site, and get a bunch of interested volunteers to proof and submit updates to the data. Following a few rounds of testing and small tweaks it was ready to release.

Last night Jeff and I were able to launch the site publicly, and thus far it’s been very well received. The guide is no longer an impenetrable wall of text, but instead a dynamic, flowing, zoomable Google-based map paired with a list of trails and their details which simply feels nice to use. Updates are easy, done by putting data in an OpenOffice.org Base database and running an SQL query which generates the CSVs, then uploading them to the trail guide’s data directory. Everything seen by the user is client-side JavaScript with the actual data stored in simple CSV files, so it all runs in the user’s browser and requires nothing special on the server.

I’m really impressed with the work that Jeff did in writing the Trail Guide software. He said he wanted to do something, did it, and turned it around very quickly, just in time for spring. The weather is just starting to warm here in Michigan, and getting this kind of guide ready before people look for it is key. I believe that this guide is one of the most important publicly accessible Michigan mountain bike trail advocacy tools that has been put forward in a while.

I strongly believe that one of the best ways to ensure trails remain good for and open to biking is to keep people using them. Once they reach a critical mass they become self-maintaining (users remove much of the deadfall themselves), and the chance of them becoming closed to bikes diminishes because they are well-used and known cycling areas. Giving people a guide to help them find trails increases usage by increasing accessibility.

This cost of this guide came in at a cost of about 120 hours of Jeff’s time, and 40-50 of mine. (While he kept detailed records I did not, but I did have a few 6 hour evenings of researching trails details for accuracy and entering them in the database one at a time.)

The official announcement of the new trail guide can be found here on the MMBA website, and the trail guide itself can be found here: http://mmba.org/trail-guide

Leave a Comment

osm2ai.pl w/ JOSM XML Support

When working up some map stuff and trying to follow my own OSM workflow I ran into a quirk where the osm2ai.pl script wouldn’t deal with OSM XML coming out of JOSM.

Thank to help from a few folks on IRC I now have this updated version of osm2ai.pl available and it will successfully parse files from JOSM.

The root cause of this problem is the script parsing XML by hand, but as I didn’t have the time (or knowledge) to fix the problem by using an XML parser, this hack which deals with differing quote types and extra spacing, was put into place. It works, and I was able to get the map that I promised to someone complete.

Leave a Comment

Fixing nuxx.net’s Backups

nuxx.net has a backup system which uses rsync to back up the server (and everything it hosts) to my desktop iMac, deduplicating the files by way of rsync’s --link-dest argument to create hard links (detailed info here). Maintaining a 30 day backup history it only uses the space of one full backup plus 29 days of change, which isn’t much given the utility allowed. It’s been running fine for a few years, but about a month or so ago I began getting errors where the target disk for the backups was full, which seemed a bit odd to me. As a stopgap I was able to clean up some other things and keep backups working, but the space was a lot more than normal.

Today I managed to get this resolved, but it took a bit of digging. Below the fold you can see what I found.

Leave a Comment

How To Disable IPv6 w/ Sendmail on FreeBSD 9.0-RELEASE

Due to some issues with Comcast flagging some email I’ve been sending via IPv6 as Spam I wanted to keep mail from being sent this way. Comcast publishes this document explaining how to keep IPv6 mail from being blocked, but I’ve got some rDNS issues to sort out before I can work through all of those. So, in the mean time I simply wanted to stop

It took a bit to figure out how to disable IPv6 in the base Sendmail, but now that I’ve got it done I figured I’d share. This is in 9.0-RELEASE, but I’m sure it applies to many other recent FreeBSD Versions:

Edit /etc/make.conf to ensure that IPv6 is turned off for Sendmail compiles. Add this line to the file:

SENDMAIL_CFLAGS= -UNETINET6

Rebuild Sendmail as described here in the FreeBSD Handbook:

# cd /usr/src/lib/libsmutil
# make cleandir && make obj && make
# cd /usr/src/lib/libsm
# make cleandir && make obj && make
# cd /usr/src/usr.sbin/sendmail
# make cleandir && make obj && make && make install

Then, go into your Sendmail config directory (/etc/mail), and if you haven’t so before, run make all to build your machine-specific Sendmail config files.

Edit hostname.mc and locate the line that reads DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O') and comment it out by adding a dnl in front of it:

dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')

Compile the Sendmail config and restart Sendmail:

make install
make restart

And, now you’re done! Look at /var/log/maillog to ensure that mail is no longer being delivered via IPv6.

Leave a Comment