New keyboard - and not the computer kind

Earlier this year, I decided to treat myself to a new keyboard.  No, not a replacement for my UHK, but a digital piano.  Specifically, a Roland FP-30X, the white one, complete with stand and pedal bar.

I got the idea from a music shop in the Colonie Mall in Albany.  We stayed at a nearby hotel on the way home from our vacation this summer and were walking around the mall to stretch our legs after the long drive.  The shop had a bunch of digital pianos set up, and the FP-30X was one of them.

I tried a out a few and quite enjoyed playing the Roland.  The main attraction was the keyboard action, which was very realistic - much closer to a real piano than most keyboards I've tried.  The keys were well weighted and, even though they're plastic, they felt close to ivory.  It was also pretty compact - only about a foot deep - while still having a full-sized keyboard.  That's actually what made me think about buying one.

IMG_20221125_185547-small.jpg

Our old upright piano is nice, but it takes up a pretty good chunk of the living room, which is the only place we have to put it.  It's also getting very out of tune.  I mean, it's been very out of tune, but for a long time it was "in tune with itself", i.e. everything was out of tune in the same direction, so if you were playing by yourself, you didn't really notice.  However, that's increasingly not the case anymore.  And that's the piano I learned to play on when I was in high school, which my mother bought second-hand when I was a kid, so it's not exactly new.  I'm not sure how much it would take to get it make into proper tune and repair, but I figured it would probably cost about as much as the retail price of that Roland keyboard.  So why not just replace the piano with the keyboard?  It would probably cost the same and it's small enough to fit in my office, so it fixes two problems at once.

So that's what I did.  I bought the keyboard a few months ago.  It fits comfortably against the back wall of my office.  I even got a matching bench to go with it.  And we just got rid of the old upright today.  My wife put it on Facebook marketplace and a very nice couple took it off our hands for their daughters to use.  It served me well for many years and I hope they enjoy it.

But back to the new keyboard.

IMG_20221212_203528-small.jpg

I already mentioned that I really like the action and feel of the FP-30X.  I'm no audiophile, but the sounds is pretty good as well.  The maximum volume level is just about what I would expect for a "real" piano and the internal speakers project the sound well.  But one of the "killer features" to me was the plain, simple headphone jack.  (Actually, there are two - a 3.5mm and a 6.35mm, if I'm not mistaken.)  One of the main down-sides of the old acoustic piano was the fact that you can't play it while people are using the living room or trying to sleep.  I mean, you can try to keep the noise down, but that doesn't really work all that well.  But with the Roland, I just plug in some headphones and now I can play after my son has gone to bed.  It's great!

The one thing that's kind of a mixed blessing about the FP-30X is the control scheme.  As you can see from the picture, there's no display of any kind and there aren't exactly a lot of buttons either.  On the one hand, I really like this from an aesthetic standpoint.  It makes the unit look more like a musical instrument and less like something they pulled out of an air traffic control console.  But on the other hand, that makes it a little awkward to change the settings.  Of course, you can configure pretty much everything using just the keyboard, but that involves combinations of holding down control buttons and pressing specific keys.  It's weird and you really can't do it unless you have the reference sheet right there.

However, the preferred control method is Bluetooth.  The FP-30X supports MIDI over Bluetooth, so you can pair the piano to your mobile device and control it using Roland's Piano App.  The app itself is...fine.  The interface and control scheme is decent, but not remarkable.  The pairing and connection is sometimes a little slow and doesn't always work the first time, but it does work as advertised and it does allow you to twiddle with all the settings of the keyboard.  It also includes some paid extras, like downloading sheet music in the app and things like that which I haven't played with much.  However, using the app to control the more advanced features is definitely preferable to using key combinations.

If you want to read more about the Roland FP-30X, I found this review very helpful and informative.  Honestly, a lot of the details there went over my head, but the gist is that it's pretty darn good for a budget digital piano.  I just know that it meets my needs well and I've been having a very good time using it to play Christmas songs this week.

Using your tablet as a monitor

The other week I was wondering: can I use my tablet as an external monitor?  I mean, it would be nice to have a portable monitor so I can do dual-display on my laptop wherever I go.  And I usually have my tablet with me.  And it's got a nice 10" display with decent definition.  So why not use it as an extra monitor where I can toss my Slack window or something like that?

Unfortunately, it doesn't seem like there's an out-of-the-box way to do this with my Windows laptop and Galaxy S6 Lite tablet.  But the good news is that there's software that will make it work pretty painlessly.

The solution I ended up going with was Duet.  It's a combination of a desktop app and mobile app working in tandem that works for Windows, Mac, Android, and iOS.  There is a service you can create an account for, but it's not necessary - you can use the apps locally without signing up for anything.  (In fact, I haven't even tried creating an account yet.)  By default Duet connects via a USB connection to your device, but you can also enable an option to connect wirelessly over WiFi.  The WiFi connection is fine, but at least on my network there was a lot of mouse lag when trying to use apps on the tablet.  It's not unusable, but it is unpleasant.  The USB connection is super-responsive, though, so I normally just use that.  As a nice extra, Duet even allows you to use the touchscreen of the tablet, so if your laptop has a touchscreen (which mine does), your secondary screen will work just the same.  Very slick!

IMG_20211214_154055-small.jpg

The only down side of Duet I've seen so far is that it's not free and there doesn't seem to be a demo version.  There's no cost for the desktop component, but the Android app is about $10.  That's not exactly a fortune, but it's enough to be annoying if you try it and it doesn't work.  Thus my first attempt was with Spacedesk, which is completely free.  However, I didn't actually get a chance to try it out, as the desktop driver install experience was...not great.  For some reason, it took an uncomfortably long to for the installer to run.  Like, after half an hour it was still working.  So I clicked "cancel".  And then, after another hour, the rollback finally completed and I closed the installer.  I have no idea what it was doing, but that was enough to make me not trust it.

Duet, on the other hand, installed fast and worked the first time.  The settings are pretty minimal.  For the connection, you can change the framerate, performance setting, and resolution.  System-wide, you can toggle notifications and "Duet Air", which is what they call the WiFi connection.  To connect the tablet, you pretty much just plug it in.  Duet on the tablet will prompt you to connect the screen and Duet on the laptop will also detect the connection and add the display.  (Of course, if you're using a WiFi connection, it's not that simple.  But it's still pretty simple.)  After that, the tablet just behaves like a regular touchscreen display.  Unfortunately, it only supports one device at a time, so you can't plug in two tablets, or your tablet and your phone, but that's not a huge deal.

So far I'm pretty happy with Duet.  It's a nicely done little utility that "just works" and does a useful thing.  Definitely worth checking out if you have a device that would make a good extra monitor.

Readera finally has synchronization

In recent years, I've been reading a lot more e-books. However, I've tended to stay away from PDFs and other non-proprietary formats when I could. This is weird, because it's the opposite of my usual preference.

The reason is, quite simply, convenience. The Kindle and Nook apps are free, easy to use, and offer good (or, at least, sufficient) support for the two things I care most about: text zooming and synchronization.

While changing text size is a basic feature for mobi and epub most readers, it's awkward for PDFs because they do page-based text layout. So you can zoom in on a page, but it's not generally possible to change the font size and reflow the page, which makes reading less pleasant - particularly on a phone. Now, if you have a 10-inch tablet, that's not really an issue, as the real size of the text will be about what you'd get in a physical book.

This leads to the second feature: synchronization. Sometimes you just don't want to carry a tablet around. But if you find yourself waiting for something, it would be nice to read your book. And since you always carry your phone, why not read on that? It may not be as good, but it's fine for 15 minutes here or there. And the proprietary apps are great for that. But DRM-free e-books, not so much. You can always use a file synch app to get copies of them, but syncing the last read page is a different question.

It turns out that Readera Premium now has me covered on that. I've been using the free version for a while, but never really needed the premium features. However, it looks like they recently added file and progress sync via Google Drive to the list of premium features. This alone was enough to make me she'll out the $11 for it.

So far it works pretty well. When I fired up the premium version on my tablet, it searched for files on my device and created.a library. Unfortunately, many of the files it "found* were phantoms - they'd long since been deleted, but for some reason Readera thought they existed. Apparently this is an artifact of how they scan the device. The main issue was that this seemed to interfere with the sync. I removed those and was able to sync the handful of real files I cared about.

Next step: install and run the premium version on my phone. It went through the same scanning process, adding the local files to my library, but no sync problems this time. And best of all, I was able to open up the PDF book I'd been reading on my tablet and it opened to the correct page!

So now I can read any book anywhere. That'll be nice for books like the one I'm reading now, which is out of print and not available on the commercial platforms. I'm not crazy about it using Google Drive (as I don't use that for anything else), but for progress sync, I'll take it.

Phone upgrade time

It's that time of the year again: phone upgrade season.  

This one was a long season.  It's been a while since my last phone upgrade - almost exactly four years, actually.  My previous phone (and my wife's - I generally get us the same thing) was a OnePlus 5 which I bought in September of 2017.  It was a really nice phone and, to be honest, I didn't really want to upgrade.  I mean, why spend $500 on a new one when the one you have is perfectly fine?

However, this time I didn't have much choice.  A month ago I got a text from Cricket telling me that my phone would stop working on their network in February.  Apparently, this is due to the retirement of their 3G network.  For your phone to keep working, it has to support "HD Voice".  Of course, I had no idea what the heck "HD Voice" was, but a quick search revealed that that's just AT&T's nicer sounding term for VoLTE (Voice over LTE).  And, sadly, the OnePlus 5 does not support VoLTE.  At least, not out of the box.  In a previous version of the firmware, there was an experimental setting in the debugging utility that allowed you to enable VoLTE and voice-over-WiFi, but that seems to be gone now.  And, frankly, I'm not really comfortable with the idea of downgrading the software on my primary communications device so that I can rely on an experimental feature.  Seems like that's just asking for something to go wrong.

So I decided to bite the bullet and upgrade.  I really loved the OnePlus 5, so I wanted to stick with OnePlus.  And as luck would have it, the 8T happened to be on sale.  

When I got the OnePlus 5, one of the "criticisms" of it was that it was grossly over-powered.  I forget what the processor was, but the model I got had 8GB of RAM and 128GB of internal storage.  So it was closer to a decent-quality laptop than a typical cell phone.  And the OnePlus 8T is pretty much the same - my model has 256GB of storage and 12GB of RAM.  So my wife's phone now has more RAM than her laptop.  Is this necessary?  I don't know - maybe not.  But with the OnePlus 5, I noticed that I never had problems with it feeling "slow".  With my previous Samsung Android phones, that did become an issue after a few years, but the OnePlus had enough horse-power to handle anything the app store could throw at it.  So I figured it would be nice to continue that trend.

There's not really much to say about the OnePlus 8T itself.  Like the OnePlus 5, it's really nice.  It runs the same Oxygen OS, so there's no difference in the UI.  And OnePlus's "Clone Phone" utility made it pretty simple to copy apps, settings, and data to the new phone.  (It didn't get everything, particularly in terms of settings, but it got enough.)  In terms of the hardware, the big changes from the OnePlus 5 are:

  • The lack of front-facing "buttons".  Whereas the OnePlus 5 had reserved space at the bottom for the fingerprint scanner and dedicated virtual buttons, the displayable area on the 8T includes the entire pane of glass.  For navigation, you can either use virtual buttons along the bottom, or gestures (which seemed annoying and counter-intuitive to me).
  • Related to the above point, the front camera is in a cutout in the screen.  That's different.
  • The rear camera is friggin' massive!  Four lenses and two flashes.
  • The fingerprint sensor is under the screen.  So you can actually just put your finger in a certain spot on the screen rather than a dedicated spot at the bottom.  The fingerprint scanner on the OnePlus 5 never really worked all that well for me.  In fact, when I had a screen protector on the phone, it basically never worked at all.  But the one on the 8T seems pretty good.  Having a screen protector does interfere with fingerprint detection, but not so much as to make it unusable.

So far, I'm liking the new phone.  It's very much an incremental upgrade to the OnePlus 5, but that's not a bad thing.  I wasn't looking for anything revolutionary - just a comparable phone that would work on a modern network.  And I got that, plus a few bells and whistles.

I dislike voice interfaces

Last year I bought a new car.  And I mean a new new car - a 2019 model year right.  My last two "new cars" were low-mileage "pre-owned" (i.e. "used") cars.  They were fine, but they didn't have any bells or whistles.  In fact, my last one didn't even have power locks or windows.

The new car has all that stuff, though.  And one of those bells and whistles is an entertainment center with a touch screen and support for Android Auto.  This was actually something I really wanted, as opposed to having just the integrated options.  My reasoning was that with Android Auto, I can keep the "brains" of the system in my phone, which can be upgraded or replaced, whereas integrated systems are likely to become outdated and maybe even discontinued before I get rid of the car.

The Reality

The reality of Android Auto, however, is not as great as I'd hoped it would be.  Much of the reason for this is that it's primarily driven by the voice-control features in Google Assistant.  There's some support for typing and menu-driven UI, but it's intentionally limited for "safety reasons."  For example, you can't type into Google Maps while you're driving, nor can you scroll beyond a certain limit in the Plex app, because paying too much attention to the screen is dangerous.

You may have noticed I put "safety reasons" in "sarcasm quotes".  That's because the voice control can sometimes be so frustrating that I find myself more distracted by it than if I could just search for what I needed from a menu.  I end up angry and yelling at the console or just picking up my phone and using it directly rather than the car's console interface.

Let me give you an example.  While driving with my son, he asked to listen to some music.  He wanted to listen to "My Songs Know What You Did in the Dark (Light Em Up)" by Fallout Boy.  So I said to Google, "Plan light 'em up by Fallout Boy."  Google replied, "OK, asking Amazon Music to play 'My Songs Know What You Did in the Dark (Light Em Up)' by Fallout Boy."

Great!  The music started playing and I heard, "Do you have the time, to listen to me whine."  I looked at the screen and Amazon Music was playing Green Day.  Why?  I have no idea.  So I tried again and asked Google, "Play My Songs Know What You Did in the Dark by Fallout Boy."  Once again, Google replied "OK, asking Amazon Music to play 'My Songs Know What You Did in the Dark (Light Em Up)' by Fallout Boy."  And this time, it played the right song.  It claimed to be asking Amazon the same thing both times, so why did one work and the other didn't?  Who knows?

This wouldn't be a big deal if it were an isolated incident, but it's actually pretty common when using Android Auto.  Sometimes it gives you what you ask for, sometimes it doesn't.  Sometimes is claims it's giving you what you asked for, but gives you something else.  And sometimes it just doesn't give you any response at all.

And it's not just Google - I have an Amazon Echo and Alexa does the same sort of thing.  It seems to be a bit more reliable than Google, but it still has problems.

When it works...

The thing is, voice interfaces are really great...when they work as you'd expect.  When you know what you want and the system correctly understands you and maps your request to the right thing, they're like the computers on Star Trek.  And to be fair, they do work well often enough to make them useful.  It's just that when they don't work, I find them unreasonably infuriating.

I think the reason for this is that the discoverability of voice interfaces is limited.  On the one hand, yes, you can just ask your device anything.  But the world of "things you can ask" is so huge that it's overwhelming - it's hard to tell where to start.  And when something as simple as "play X song" doesn't work, it's not obvious where to go next.  Try also including the artist?  Maybe a variation on the title?  All you can do is keep trying random things and hope that one of them works.  Sometimes you stumble on the right thing, and sometimes you don't and just give up in disgust.

It's kind of like trying to use a command-line interface, but with no help and no manual.  OK, so the one command you know didn't work.  What next?  Well, you can try some variations on the arguments you passed it.  Maybe sprinkle in a common option that might be applicable.  But ultimately, it's just blind guessing.

When you're using a graphical interface, you still end up guessing, but at least it's a bounded search space - you're limited to what's on the screen.  Also, the options usually have at least some description of what they do.

If nothing else, these issues with voice interfaces are a good way to relate to non-technical users.  You've seen non-technical users get confused, frustrated, and angry when they encounter a task that they don't know how to accomplish or a problem that they can't seem to fix?  Well, that's how I feel when Android Auto tells me one thing and then does another.  Maybe they'll fix that some time soon....

Getting a password manager

After shamelessly reusing passwords for far too long, I finally decided to get myself a decent password manager. After a few false starts, I ended up going with KeePass. In retrospect, I probably should have started with that, but my thought process didn't work out that way.

Originally, my thought was that I wanted to use a web-based password manager. I figured that would work best as I'd be able to access it from any device. But I didn't want to use a third-party service, as I wasn't sure how much I wanted to trust them. So I was looking for something self-hosted.

PPMA

I started off with PPMA, a little Yii-based application. It had the virtue of being pretty easy to use and install. There were a few down sides, though. The main one was that it wasn't especially mobile-friendly, so there were parts of the app that actually didn't work on my phone, which defeats the whole "works on any device" plan. Also, it really only supported a single user, so it's not something I could easily set my wife up on as well. (To be fair, the multi-user support was sort of there, but it was only half-implemented. I was able to get it basically working on my own, but still.)

More importantly, I wasn't entirely confident in the overall security of PPMA. For starters, the only data it actually encrypted was the password. Granted, that's the most important piece, that's sort of a minimalist approach to account security. And even worse, I wasn't 100% convinced that that was secure - it's not clear to me that it doesn't store a password or key in session data that could be snooped on a shared server. Of course, I haven't done an extensive analysis, so I don't know if it has any problems, but the possibility was enough to make me wary and I didn't really want to do an extensive audit of the code (there was no documentation to speak of, and certainly nothing on the crypto scheme).

The next package I tried was Clipperz. This is actually a service, but their code is open-source, so you could conceivably self-host it. I had a bit more confidence in this one because they actually had some documentation with a decent discussion of how their security worked.

Clipperz - beta UI

The only problem I had with Clipperz was that I couldn't actually get it to work. Their build script had some weird dependencies and was a pain to deal with (it looked like it was trying to check their source control repository for changes before running, for some reason). And once I got it installed, it just flat-out didn't work. I was able to create a new account, but after that every request just returned an error out. And to make things worse, it turns out their PHP backend is ancient and not recommended - it's still using the old-school MySQL database extension. The only other option was the AppEngine Python backend, which wasn't gonna work on my hosting provider. So that was a bust.

It was at that point that I started to think using a web-based solution might not be the best idea. Part of this is simply the nature of the web - you're working over a stateless protocol and probably using an RDBMS for persistence. So if you want to encrypt all the user's data and avoid storing their password, then you're already fighting with the medium. A desktop app doesn't have that problem, though - you can encrypt the entire data file and just hold the data in memory when you decrypt it.

It also occurred to me that accessing my passwords from any computer might not be as valuable as I'd originally thought. For one thing, I probably can't trust other people's computers. God alone knows what kind of malware or keyloggers might be installed on a random PC I would use to access my passwords. Besides, there's no need to trust a random system when I always have a trusted one with me - namely, my phone.

Great! So all I really need is a password manager than runs on Android.

Well...no, that won't do it. I don't really want to have to look up passwords on my phone and manually type them into a window on my desktop. So I need something that produces password databases that I can use on both Android and Windows.

Luckily, KeePass 2 fits the bill. It has a good feature set, seems to have a good reputation, and the documentation had enough info on how it works to inspire some confidence. The official application is only Windows-based, but there are a number of unofficial ports, including several to iOS and Android. It's even supported by the Ninite installer, so I can easily work it into my standard installation.

KeePass2

For me, the key feature that made KeePass viable was that it supports synchronization with a URL. There are extensions that add support for SSH and cloud services, if you're into that sort of thing, but synchronizing via standard FTP or WebDAV is built right in. KeePass also supports triggers that allow you to automatically synchronize your local database with the remote URL on certain events, e.g. opening or saving the database.

For the mobile side, I decided to go with Keepass2Android. There are several options out there, but I chose this one because it supports reading and writing the KeePass 2.x database format (which not all of them do) and can directly read and write files to FTP and WebDAV. It's also available as an APK download from the developer's site, as opposed to being available exclusively through the Google Play store, which means I can easily install it on my Kindle Fire.

Keepass2Android also has a handy little feature called "QuickUnlock", which allows you one chance to unlock your database by typing just the last few characters of your passphrase. If you get it wrong the database is locked and you need to enter the full passphrase. This addresses one of my main complaints about smart phones - the virtual keyboards work to actively discourage good passwords because they're so damned hard to type. I chose a long passphrase which takes several seconds to type on a full keyboard - on a virtual keyboard, it's absolutely excruciating. This way, I don't have to massively compromise security for usability.

So, in the end, my setup ended up being fairly straight-forward.

  1. I install KeePass on all my computers.
  2. I copy my KeePass database to the WebDAV server I have set up on my web hosting.
  3. I set up all my computers with a trigger to sync with the remote URL.
  4. I install Keepass2Android on my phone and tablet.
  5. I configure them to open the database directly from the URL. Keepass2Android caches remote databases, so this is effectively the same as the desktop sync setup.
  6. Profit! I now get my password database synchronized among all my computers and devices.

I've been using this setup for close to a month now, and it works pretty darn well. Good encryption, good usability, plenty of backups, and I didn't even have to involve a third-party service.

New toy - Sandisk Wireless Flash Drive

I got a new toy the other week - a Sandisk Wireless Flash Drive. This was not normally something I would have bought, but it showed up as a Kindle-exclusive special offer on my new Kindle Fire HDX (post on that coming later) - the 32GB model was only $20, which is about 66% off the normal retail price. I didn't really know anything about the device or how it worked, but for only $20, I figured, why not?

Sandisk Wireless Flash Drive(Photo by Pierre Lecourt, licensed under Creative Commons BY-NC-SA 2.0.)

It turns out that this is an interesting little "flash drive". First, to be clear, it's not really what I would normally consider a "flash drive". For starters, it doesn't actually have any built-in storage - it has a MicroSD slot with a 32GB card in it. So the "flash drive" itself is more like a MicroSD card reader that's also a networking appliance.

The networking portion is actually kind of cool. In it's most basic configuration, the Wireless Flash Drive acts as a WiFi access point. You associate to it and it supplies you an IP and can serve out content. However, it also allows you to configure it to associate to an internet-connected access point. So you can tell it the SSID and WPA credentials of your network and anything on the LAN will be able to access it.

The device is built to work with a mobile app (available for both iOS and Android) which allows you to not only access the data on it, but also configure it. However, while the app is actually not bad, it turns out you don't need it. The device provides a web interface that lets you configure it as well as browse content. And on further research, it turns out that the Wireless Flash Drive serves it's content out over WebDAV! So forget the mobile app - you can actually access it from any PC with a WebDAV client.

Though I haven't had opportunity to use it heavily yet, I have to say the Wireless Flash Drive is actually a pretty cool little deice. I probably wouldn't pay $60 for it, simply because I don't need it that much. But if you happen to have a distinct use for such a device, it's pretty cool and more open to tinkering than I'd expected.