Saturday, May 16, 2020

Making the Rii Wireless Keyboard function keys work on a Raspberry Pi

A while back I bought a Raspberry Pi. I wanted to use it to play videos on our downstairs TV, but I also use it to play Minecraft with the kids and do math lessons with my son using Khan Academy. It's a fun, versatile little device.

Then last Christmas, my wife gave me a Rii wireless keyboard/trackpad to use with the Raspberry Pi. It worked nicely for the most part, but for some reason the function keys wouldn't work. The function keys on this keyboard double as media keys (for volume, etc,), but even when pressing the "fn" button they refuse to act as function keys like they should. This made switching to "full screen" mode in Chrome a little difficult.

Fortunately, there's a way to make them work perfectly, and like most things in the Linux world, it's not at all straightforward or simple. Fortunately, I managed to figure out the steps to accomplish this fix not only once, but twice. I got most of the steps from this article here, but I decided to write them down here for anyone else as well (in my own clumsy way) who might need them.
  1. First, go and download this hid-apple-patch. Put it somewhere easy to find on your Raspberry Pi and unzip it (right clicking and choosing "extract here" works nicely). This is a "patched hid-apple kernel module."
  2. Next, you need to install something called "dkms" (Dynamic Kernel Module Support). Open the terminal app and enter "sudo apt-get update" then "sudo apt-get upgrade" to update everything first. Then do "sudo apt-get install dkms."
  3. Now with dkms installed, navigate your way in the terminal to the folder you unzipped in step 1. Then do the following commands to build and install the patch.
    1. sudo dkms .
    2. sudo dkms add .
    3. sudo dkms build hid-apple/1.0
    4. sudo dkms install hid-apple/1.0
  4. Next, use the nano text editor to open the config file:
    sudo nano /etc/modprobe.d/hid_apple.conf
  5. Add this single line to the empty text file: options hid_apple fnmode=2
  6. Save the text file and reboot
Ta-da! Your Rii wireless keyboard now has function keys that work when you press the "fn" button.


Thursday, April 16, 2020

Under-depreciated

Oh, how I hate programming — and in particular programmers who decide that easy bits of code that anybody can use need to be depreciated (because "security") and replaced with nothing, requiring you to go hacking away in PHP at the core bits of your WordPress installation to achieve something you used to get with one line of code and should be built into a plug-in to begin with.

Take the simple act of having a "success page" after filling out a form. Any decent contact form program written since the dawn of the web would have this as an option — a page you go to after filling out a form that says, "Thank you." Easy enough, right?

Not in Contact Form 7. Oh sure, you used to be able to do this with one line of code:

on_sent_ok: "location = 'http://www.example.com/thank-you-page'";
But then someone decided, "Oh that's too easy, let's mess with people a bit." So now the process is considerably more complicated, namely editing the functions.php file in your WordPress installation to do exactly the same JavaScript thing, just in a way more likely to break things.



  1. add_action( 'wp_footer', 'redirect_cf7' );
  2.  
  3. function redirect_cf7() {
  4. ?>
  5. <script type="text/javascript">
  6. document.addEventListener( 'wpcf7mailsent', function( event ) {
  7.        location = 'https://www.example.com/thank-you/';
  8. }, false );
  9. </script>
  10. }

And again, it does exactly what the "old" method did, so aren't there still security concerns? No, I guess not. Because reasons.

And shouldn't this be built into the plug-in anyway? You know, one field called "success page" that you just fill out with a URL and be done with it? But no, things have to be difficult. And stupid.

https://www.rocketclicks.com/client-education/contact-form-7-thank-page-redirects/

Thursday, June 6, 2019

Fake PC Repair Sites

Whenever I have a problem with my PC, which is often, I find it's awfully easy to stumble upon a fake PC repair site. That's a site that looks innocently like an real site with real repair advice but is actually just a front to sell you some specific PC "cleaning" or "repair" tool. Like this useless waste of space below.

http://windowsreport.com/fix-explorer-exe-error-system-call-failed/

My recommendation? Whenever checking out a site, scroll down a couple pages to whatever solution they're pushing near the bottom. If the name of the commercial program just happens to have the same name as the website, move right along. Whatever problem you're experiencing likely has a free solution that actually works.

Versa won't sync

My previously-mentioned Pebble finally bit the dust, first getting a crack and then getting exposed to water, which I believe shorted it out. Pebble was swallowed up and spit back out by FitBit anyway, so I figured it was time to move on to something new.

That turned out to be a Versa, which is a lovely smart watch that can't sync worth a crap. Go and Google "Versa won't sync" and you'll find a hundred thousands posts from people all experiencing the same problem: your smart watch ignores your phone, turning it into a fancy, overpriced pedometer. It's genuinely embarrassing that the FitBit app has two or three settings to be "always connected" when connecting even once seems to be absolutely impossible.

Now, if you've found your way to this pathetic site, you've probably already tried all the recommended solutions, all which are a variation of "turn it on and off again," and none of which work. Well, here's my advice: return your Versa to the place you bought it from and request a refund. Seriously, that's the only way FitBit will get the message that this problem needs to be solved.

If that isn't an option, however, you're welcome to screw with your watch any number of ways. I find it tends to connect every now and then, completely on a whim, which is almost often enough to be tolerable. Sometimes it's when I walk away from my phone and walk back again. Other times I screw with "optimization" for the FitBit app in my battery settings, and then it starts working (for a minute, anyway). It's no guarantee, but it's at least easier than a factory reset (which is always a joy and won't help anyway).

Let me know your thoughts in the comments below.

Tuesday, December 26, 2017

Bluetooth Bane

So my new Pebble 2 and Android smartphone (a G4 Moto Play) refused to talk to each other this morning. I wasted about an hour trying to pair, un-pair, and re-pair their Bluetooth relationship, but absolutely nothing worked. To add to the aggravation, every website that claims to have an answer to this seems to be blocked for some reason.

So the solution eventually came when I reset the Pebble to factory settings and completely uninstalled and reinstalled the Pebble app. Then it worked again, thank goodness, but seriously — how long has Bluetooth had this ridiculous issue? I remember a decade ago struggling to get a wireless mouse to work and then afterward simply using a corded one instead.

P.S. This happened a few more times, and each time the solution was something along the lines of un-pairing the phone and Pebble and repairing again, usually by "forgetting" the Pebble in my Android Bluetooth settings. A pain? Yes, but it usually worked (and isn't nearly as horrible as the FitBit Versa).

Monday, March 27, 2017

Unfortunately, process.my.sanity has stopped

So, I just bought a new (refurbished) Nexus 10 for the wife off of Groupon. And of course, it's completely unusable. After logging into Google and starting it up, it starts getting an endless stream of errors, always "unfortunately, google play services has stopped" or something. I went to Google to find an answer, and of course there are thousands of posts all over the place all with the exact same problem.

So what's the solution? There isn't one. Oh, there are lots of alleged solutions, but not a single one that works. If you hate yourself and want to feel the white hot pain or trying to make the piece of garbage you bought online work, you can try any one of the following:
  1. Delete the cache
  2. Reset app preferences
  3. Uninstall the Google Play Store
  4. Wipe the System Cache Partition
  5. Reset to factory settings
When none of those ideas work, you can muck around with the firmware, installing a custom ROM or any number of things that will void your warranty. Don't worry, it's EASY!

Or your could just send it back and hope the next one will work. Which it won't.

Thursday, March 16, 2017

Getting a PayPal API Username and Signature: an exercise in futility.

Every now and again and I need a reminder of how much I hate myself. That's when I decided to do something that should be brain-dead simple on WordPress using the pre-installed, already-configured WP eCommerce plug-ins — connecting to our business PayPal account for online payments.

Super easy, right? All I have to do is enter a few simple, little PayPal things into the settings boxes. Like these:


Why, an API Username, Password, Signature, and Merchant ID. I should be able just to click right over to my PayPal account and find those right under "My Selling Tools" on my PayPal profile, which is EXACTLY where PayPal's helpful help files says it should be. RIGHT?

WRONG! They're not there. They're not ANYWHERE.



So… what's the solution? Is there some magical account setting or special status that lets me have access to an API? After an hour of Googling, I can't find an answer. The WP eCommerce site says I just have to have a PayPal Express Checkout account, or a a Verified PayPal Business Account, or maybe I need to upgrade your account to a Business account. It doesn't matter, because no matter what I click, I just get bounced back to this page, which only lets me log back into my own account with no modifications no matter what I choose.

Of course, PayPal is also ridiculously impossible to get hold of, and I have to fight with their phone tree for hours just to get hung up on.

The Answer

Eventually I discovered one of the five different PayPal modules, "PayPal Payments Standard 2.0," did NOT require any API settings in order to work, so I wound up using that instead.