Stupid Calendar UX

Here’s something I don’t get about calendaring software, that I cannot believe Microsoft has not figured out —

Let’s say you have a meeting that starts early in the morning on Mondays, Wednesdays, and Fridays. Someone creates the recurring event in Outlook, and sends it around. Why the fuck doesn’t Outlook, or whatever, create two reminders for you automatically?

Based on the average starting and stopping times in a work day, and the definition of an average working week (Monday to Friday), why do these stupid calendaring programs not —

  1. create a reminder that goes off 15 or 30 minutes before the event starts
  2. create a reminder that goes off 18 hours before the event starts, i.e. shortly before the end of the previous working day (or on Friday, if the next working day is Monday?)

I really don’t get it, is this tricky? The User Experience on the world’s calendars is stupid, when this isn’t happening. As a personal example, this very problem bit me in the ass this week at work. We’d defined a new meeting, along these early morning lines, and I missed the first meeting in the series. Had I been usefully reminded before leaving work the previous day, this probably wouldn’t have happened. I know it sounds a bit like kicking the dog, but seriously, is this that hard to implement?

I noticed the same issue when I was leaving work this evening. Because I’d set the whole event-series reminders to trigger 18 hours ahead of time, it’ll go off on Sunday evening, when I’m not at work. (No, I don’t sync my work calendar with my phone, I’m not that important, nor do I want to mix business and personal syncs.)

Xamarin’s Installer Needs Help

Variations on a theme, I’ve been trying to get Xamarin Studio up and running on Windows 7, and it is a royal pain. I don’t think they test it using Standard User accounts on Windows, because there is a huge a number of problems here.

  • First and foremost, the Xamarin Studio shortcut is installed only in the installing account’s profile, which is by default an Administrator’s account. It’s not installed for All Users, so you can’t see it as a Standard User. You’ve got to create a shortcut to the executable in the C:\Program Files (x86)\Xamarin Studio\bin folder.
  • If you start Xamarin Studio as a Standard User, it cannot find the connected Android devices. Android Debug Bridge (adb) doesn’t seem to be started in a way that lets it see them. However, if you’re using Google’s Android Studio as a Standard User, it works just fine, so it can’t be a permissions problem.
  • The Xamarin installer downloads a separate 32-bit Java 6 JDK, even though the 64-bit Java 8 JDK works just fine now with Android. Worse yet, you can try as much as you want to point Xamarin to your system-installed Java 8 JDK, and it will absolutely refuse to use it. This seems to be related to a 64-bit vs. 32-bit issue, however, as I stepped my JDK down to 32-bit Java 7, and Xamarin seems to be ok with detecting it.

After futzing around with all of this stuff as a Standard User, I seem to now have a working system. The specific configuration that works for me on a 64-bit Windows 7 desktop, is to do all of the following as an Administrator user:

  • Install Android SDK for All Users to C:\Program Files (x86)\Android\android-sdk.
  • Unpack 64-bit Android NDK to C:\Program Files (x86)\Android\android-ndk-rxxx.
  • Install 32-bit Java 7 JDK.
  • Set ANDROID_NDK_PATH=C:\Program Files (x86)\Android\android-ndk-rxxx, where xxx is whatever revision they’re up to now.
  • Set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_xx, where xx is whatever point release they’re up to now.

Then, run Xamarin Studio as your Standard User account, and set the SDK Locations to:

xamarin-sdk-locations

With any luck, Xamarin Studio should have picked up the locations automatically, via the environment variables. With all of these items set, the build should now work properly and adb should pick up the connected device. And you don’t have to run your system as an Administrator, or do any other hokey things to get Xamarin to work.

But the fact is, Xamarin asks you to install it as an Administrative user, but it shouldn’t actually need any special administrative rights to do its job. Or, if it does (to install a JDK, for instance), then it doesn’t need those rights any longer once it is installed. For instance, it installs its own copy of the Android SDK in the Administrative user’s %APPDATA% folder, which it could just as easily do in a Standard User account.

Overall, they are assuming that everyone out there uses a single Administrator account on their computers, and I suppose that’s a pretty safe guess, except for when it’s not the case. I get the impression there are probably other devs out there who don’t run around as Administrator, because we know just how bad of an idea that is (even with User Account Control).

(Parting thought: I’d be willing to bet even money that the Xamarin installer works without a hitch on OS X, because that seems like the place most devs spend their time these days, if the Berlin coffee shop scene is any indication.)

Windows 7’s Updater Sucks

I reinstalled Windows 7 from a recovery disc recently and have had to suffer through the seemingly drawn-out process of applying all the patches via Windows Update. After failing to install Service Pack 1 for Windows 7 a number of times, the Service Pack installation finally succeeded, and I was then greeted with the option to install 164 other patches.

Seriously? I wish Microsoft could figure out a way to slipstream the install, or just do like Apple does and download the latest operating system image before doing a clean install*. There has to be a way for them to know what the state of the system should be, given patches X, Y, and Z (to infinity) have been applied. Maybe they could treat the Windows system directory as a super-secret / protected storage area that they can just update bitwise with binary diffs (you know, like real firmware). Maybe they should stop differentiating their operating system features so much and just unify them into 2 versions with no subversions (Home and Business). It’d certainly make it easier to unify what the operating system actually needs to install.

And if they still can’t do this, if they still can’t override the inertia of useless business units and middle management (seriously, who came up with Windows Home Premium versus Ultimate, and why? What benefit was it to all users to sell a crappier version of your OS, en masse? The incremental price for one additional unit of software is what, exactly?), they should get one of their people at Microsoft Research to figure this out. It’s only a few million man hours per year of wasted time at stake.

What an utter waste of bandwidth and time, not to mention the wear and tear on the hard disks of the world.

updater-2

As it chugged through the 164 patches, I also noticed that the memory usage on my system seemed to be rising inexorably.

And wouldn’t you know it, Process Explorer told me this:

updater-1

That’s right. The Trusted Installer component felt the need to consume over 4 gigabytes of memory during the update process. Why? I have no idea, but screw you for asking! Seriously, does nobody test this stuff in Redmond?

Thank goodness my system has 8GB of RAM, or who knows how badly the system would be swapping right now.

Update

And of course, right after I finish that big batch of updates, after the next reboot, Windows Update tells me I have 21 more:

updater-3

I feel like I’m living Zeno’s Paradox. It’s a mathematical certainty that I will reach my goal, but from the halfway point it certainly doesn’t feel like it.

*I know, I know, I’m not a huge fan of Apple’s Software Update system either, why they can’t do binary diffs like Google or JetBrains can, doesn’t make sense to me.

Windows 7 Not At Fault

Damn it, not again. So Windows 7 started bluescreening immediately at boot, before I was even logged into my normal user account. Reason? Turns out my solid state disk is hosed. I’m not happy, but I’m also not surprised.

I’d bought two OCZ Vertex 2’s sometime in 2010, and not put all too many bytes onto them over the past four years. One of them had already died some years back, but I was too lazy to call in the warranty service. Now the second drive has died, and both of them are out of warranty! Booo. I thought they had 5 years, but turns out it was only 3. Oh well.

I put a copy of Ubuntu Linux onto a USB stick and booted off of it to see if there were any kernel messages reminiscent of what I’d seen a few years back. Sure enough, ad infinitum:

[...]
[   45.391281] sd 0:0:0:0: [sda]  
[   45.391282] Add. Sense: No additional sense information
[   45.391284] sd 0:0:0:0: [sda] CDB: 
[   45.391284] Write(10): 2a 00 00 60 d1 a8 00 00 a8 00
[   45.391339] sd 0:0:0:0: [sda]  
[   45.391340] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[   45.391342] sd 0:0:0:0: [sda]  
[   45.391342] Sense Key : Aborted Command [current] [descriptor]
[   45.391344] Descriptor sense data with sense descriptors (in hex):
[   45.391344]         72 0b 00 00 00 00 00 0c 00 0a 80 00 00 00 00 00 
[   45.391349]         00 60 d6 40 
[...]

And:

[   45.392104] ata1: EH complete
[   45.392338] ata1.00: exception Emask 0x50 SAct 0x7fffffff SErr 0x400801 action 0x6 frozen
[   45.392339] ata1.00: irq_stat 0x0c000000, interface fatal error
[   45.392341] ata1: SError: { RecovData HostInt Handshk }
[   45.392343] ata1.00: failed command: WRITE FPDMA QUEUED
[   45.392346] ata1.00: cmd 61/a8:00:78:dd:60/00:00:00:00:00/40 tag 0 ncq 86016 out
[   45.392346]          res 50/00:e8:40:d6:60/00:00:00:00:00/40 Emask 0x50 (ATA bus error)
[   45.392347] ata1.00: status: { DRDY }
[   45.392348] ata1.00: failed command: WRITE FPDMA QUEUED
[   45.392351] ata1.00: cmd 61/a8:08:d0:dc:60/00:00:00:00:00/40 tag 1 ncq 86016 out
[   45.392351]          res 50/00:e8:40:d6:60/00:00:00:00:00/40 Emask 0x50 (ATA bus error)
[   45.392353] ata1.00: status: { DRDY }
[   45.392354] ata1.00: failed command: WRITE FPDMA QUEUED
[   45.392357] ata1.00: cmd 61/a8:10:28:dc:60/00:00:00:00:00/40 tag 2 ncq 86016 out
[   45.392357]          res 50/00:e8:40:d6:60/00:00:00:00:00/40 Emask 0x50 (ATA bus error)
[   45.392358] ata1.00: status: { DRDY }
[   45.392359] ata1.00: failed command: WRITE FPDMA QUEUED
[   45.392362] ata1.00: cmd 61/a8:18:80:db:60/00:00:00:00:00/40 tag 3 ncq 86016 out
[   45.392362]          res 50/00:e8:40:d6:60/00:00:00:00:00/40 Emask 0x50 (ATA bus error)

So I guess I need a new hard drive. Lame.

Windows 7 Getting Me Angry

I’m not sure how it’s still possible in 2014, but, between yesterday and today I changed nothing on my computer and now it is blue-screening every time I log in or shortly after I log in. No hardware changes were made. The only thing I changed (but which seemed to work fine) was to activate Hibernation, by setting a multi-gigabyte hiberfil.sys file, and disabling the “Hybrid sleep” function on Windows 7.

So I went ahead and uninstalled a bunch of things I’d been meaning to clean up (but which didn’t seem to be the source of the crash, since it’s still crashing). I really don’t know what could have changed overnight, but it’s already a huge time suck.

Even after I ran the various uninstallers, a bunch of leftover executables and other garbage are still running on my system, and which I am currently attempting to root out, with the help of AutoRuns, a tool from the Sysinternals gurus. AutoRuns shows all of the various places where a executable (or shell extension DLL, or etc) code is invoked by Windows.

So far, the code that is autostarting that I don’t want to run at all anymore looks like this:

SPIRunE                        SPIRun Endpoints Dynamic Link Library                                            Creative Technology Ltd.        c:\windows\syswow64\spirune.dll             5/9/2007 3:07 AM
AMD External Events Utility    AMD External Events Service Module                                               AMD                             c:\windows\system32\atiesrxx.exe            4/20/2011 4:04 AM
amdkmdag                       ATI Radeon Kernel Mode Driver                                                    ATI Technologies Inc.           c:\windows\system32\drivers\atikmdag.sys    4/20/2011 3:53 AM
amdkmdap                       AMD multi-vendor Miniport Driver                                                 Advanced Micro Devices, Inc.    c:\windows\system32\drivers\atikmpag.sys    4/20/2011 3:22 AM
amdsata                        AHCI 1.2 Device Driver                                                           Advanced Micro Devices	        c:\windows\system32\drivers\amdsata.sys     3/19/2010 2:45 AM
amdsbs                         AMD Technology AHCI Compatible Controller Driver for Windows - AMD64 platform    AMD Technologies Inc.           c:\windows\system32\drivers\amdsbs.sys      3/20/2009 8:36 PM
amdxata                        Storage Filter Driver                                                            Advanced Micro Devices          c:\windows\system32\drivers\amdxata.sys     3/19/2010 6:18 PM
AODDriver4.2.0                 File not found: C:\Program Files\ATI Technologies\ATI.ACE\Fuel\amd64\AODDriver2.sys

These are all old support drivers and executables from AMD/ATI and Creative Labs. I did once have a Radeon video card in the system, which I replaced with a much more powerful Nvidia card. Frankly, if AMD can’t get their driver development, updating, and cleanup code in order, they should stop making graphics cards. There’s so much extra crap they install (Catalyst Control Center anyone?) but don’t maintain, that it’s very frustrating being left with this crap on my system when I clearly want it gone. Same goes for Creative Labs, talk about a company that makes it a pain in the ass to get new drivers. It’s been like that as long a I can remember.

I probably should not have swapped video cards between manufacturers like that, but come on. Again, it’s 2014, and this is disappointing if this stuff is getting through the Windows hardware certifications. Nvidia’s software also has plenty of bloat which can be cleaned up (which I also just did), but at least they have a fairly regular update schedule and solid support for their older graphics cards too.

Basically, I’m disabling all the drivers except what I think is actually in the system.

Here’s what the AutoRuns Drivers tab looks like after I finished disabling things. These are all drivers that the Windows bootloader will attempt to load when Windows is starting up. You’ve probably seen this list of files when starting Windows in Safe Mode. The thing is, most of this hardware either doesn’t exist anymore, or never existed in widespread use on desktop PCs. So why is Windows checking for it, anymore? Some of those devices are for high-end server systems, with Fibre Channel or SAS connections, but seriously, this code runs on all of the desktops in the world, so who knows how many million seconds are wasted because of these checks? If someone wants to run server-grade hardware on their home computer, let them, but make sure it doesn’t slow everyone else’s boot process down.

autoruns

Turns out after I disabled all those extra drivers, the system both a) boots faster and b) seems to run more smoothly. No more crashes, no more extra crap getting started in the background. So I’m happy.

But one other thing I noticed, before I go: Why the hell isn’t the Microsoft Windows Defender DLL “mpsvc.dll” a signed binary?