Thursday, May 31, 2018

Batch Extract Image Files from PowerPoint Presentations

After going through a lot of grief with alternate (and unsuccessful) methods to do this task, I ran across this incredibly simple solution for extracting image files from within PowerPoint presentations. (I'm repurposing decades-old PowerPoint presentations with hundreds of images on hundreds of pages, so hand-extracting the content image-by-image, page-by-page is tedious and even physically painful.)

The only minimum requirement is that the PowerPoint files be in .pptx file format (not just .ppt), or access to a version of PowerPoint from Office 2007 or later, which can write .pptx files.

This example is on a Mac, but the same principle works on Windows, all that is required for Windows is an un-ZIP utility.

The solution is SIMPLE. SIMPLE.

  • If the PowerPoint file has a .ppt extension, open it in PowerPoint 2007+ and save it again as .pptx.
    • PPTX files save presentation data as widely-supported XML data structures, compressed in a package using the venerable ZIP archive format.
  • On a Mac, rename the .pptx extension to .zip. The Finder will ask if you’re sure. Click “Use .zip.”
  • Double-click the resulting .zip file. The Finder will uncompress the file into a directory structure. Inside[folder with orig filename]:ppt:media are all the image files in their native formats.


Sunday, May 06, 2018

Quickly Rotate Google Photos with a Keyboard Shortcut

While it's possible to rotate an image in Google Photos by:

  • clicking on the photo's "Edit" icon
  • clicking the  "Crop & Rotate" icon
  • clicking the "Rotate" icon once for every 90 degrees clockwise
  • click "Done"
  • click "Done" (again)

That's an incredibly tedious process, especially if several images need to be rotated.

There is a much simpler procedure. Click on an image in Google Photos, and press [shift]+[R] on the keyboard. The image will rotate 90 degrees counter-clockwise. Repeat the shortcut to rotate another 90 degrees as necessary. The change is committed with no further actions.

Pressing the [left arrow] and [right arrow] keys on you keyboard, you can advance to the previous and next images, and repeat the rotate operation. Thus, you can quickly rotate a number of images.

Tuesday, February 13, 2018

SOLVED: Harmony Ultimate Home no longer responds to some Google Home commands


Beginning some time since February 10, 2018, we can no longer invoke many of the Activities our Harmony Ultimate Home via voice commands to our Google Home. When we say, “Me: “Hey Google, tell Harmony to turn on DVR3,” Harmony responds by voice that it does not know how to respond.

(Learn how to configure your Google Home and Harmony hub-based remote to control your Harmony by voice commands at this Logitech Support page: Harmony experience with the Google Assistant.)


I discovered through experimentation that for SOME Activities that I have created, Harmony no longer responds to the expression “tell Harmony.”

SOLUTION: Always say “ASK Harmony.” This has completely resolved my problem.

UPDATE 2/14/2018: My symptoms are entirely related to the presence of numerals in my Activity names. See more below.


Some time after 2/10/2018, some hub-based Harmony remote systems stopped responding to certain voice requests made through linked Google Home devices.

Experimentation reveals that Harmony responds with an error message if both of these conditions are true:
  • The voice command uses the phrase "tell Harmony,"
    • AND
  • The Harmony Activity name contains a numeral or a word representing a number
Substituting "ask Harmony" for "tell Harmony" results in normal execution of the requested Activity.

Renaming the Activity to omit any numerical references also results in normal execution.


Around two days ago, (February 11, 2018), I discovered that SOME of the Activity requests sent to the Harmony Home Ultimate via our Google Home were no longer understood by the Harmony.

Me: “Hey Google, tell Harmony to turn on DVR3.”

Harmony (via Google Home): “Sorry, I misunderstood your last statement.”

Other possible Harmony responses (which vary randomly):
  • “Sorry, I don’t understand.” Ask Harmony for help to ask what I can respond to.” 
  • “Sorry, I’m not totally sure about that.” 
  • “Sorry, I don’t understand. Visit to learn what I can respond to.” 
NOTE: This is the _Harmony_ voice responding, and NOT the Google Home voice.
Curiously, SOME of the Activities could still be invoked. Here is the list of failures and successes:
  • “Hey Google, tell Harmony to turn on DVR1.” FAIL
  • “Hey Google, tell Harmony to turn on DVR2.” FAIL
  • “Hey Google, tell Harmony to turn on DVR3.” FAIL
  • “Hey Google, tell Harmony to turn on Apple TV.” SUCCESS
  • “Hey Google, tell Harmony to turn on PS3.” FAIL
  • “Hey Google, tell Harmony to turn on Chromecast.” SUCCESS
  • “Hey Google, tell Harmony to turn off.” SUCCESS
Rebooting and power-cycling the Harmony hub and the Google Home had no effect on the symptoms.

I tried altering the name of the Activity in a minor way: I changed “DVR3” to “DVR 3” and “DVr3” (noting that all the problem Activities were all-caps), but the problem persisted.

However, completely changing the name from “DVR3” to “Elephant” allowed me to invoke that Activity by saying “Hey Google, tell Harmony to turn on Elephant.” Changing the activity name BACK to the original “DVR3” reintroduced the problem (which is a great diagnostic clue).

Eventually, I tried a different verbal command. Instead of saying, “Hey Google, _tell_ Harmony to turn on [activity name],” I said, “Hey Google, _ask_ Harmony to turn on [activity name].” Success! Without making any changes whatsoever, simply changing what we say - using the polite “ask” rather than the imperative “tell” ALWAYS WORKS.

So something has changed. I’m certain that we’ve always said “tell Harmony” because since November 2017, we’ve had a hand-written sign on our AV cabinet which I wrote for my wife the first day I set up Google Home to work with the Harmony. The sign reads, “Hey Google, tell Harmony to turn on DVR3.”
Even further and more absolute proof: Google Assistant keeps a log of all your activities:
The same command which worked on February 10, 2018 fails on February 13.

Unclear is whether the change that’s taken place was by Harmony (Logitech) or Google.

For now, I’m happy to be back in business.


Thanks to feedback from Logitech Harmony forum user "john_woo," I realized that I'd entirely missed a clue that I'd put in my list of SUCCESS/FAIL Activities above. All of the Activities that result in a Harmony error response when issuing the "tell Harmony to" command have a number in them. (And to reiterate, using "ask" instead of "tell" works even with a number in the Activity name.)

Interestingly, replacing the digit "3" with the word "three" doesn't help. The error persists. To test whether the prohibited terms were digits, I tried incorporating a "30" into an Activity name. So it appears that any use of a numerical reference in an Activity name will cause the request to fail if "tell Harmony to" is also in the voice command.

Something appears to have changed in either the Harmony (Logitech) or Google code which prohibits the use of a numerical value (whether expressed as numerals or written out as a word) in a Harmony Activity name, when used in conjunction with a "tell Harmony to" voice command.


In the course of trying to find any information about this problem online (and since I just found a post from someone else from February 10, 2018, I’m guessing that this problem is too new for there to be any online information), I discovered that by using Google Assistant Shortcuts, we can eliminate having to say the “ask Harmony to” part altogether. By following the instructions starting in Section 4 of this Logitech Harmony Support page, you can shorten these commands from:

“Hey Google, ask Harmony to turn on DVR3”

“Hey Google, watch TV”

...or whatever you’d like to say to start a Harmony Activity.

(If you really wanted to, you could use a Google Assistant Shortcut to still say “tell Harmony” and have Google pass along the more polite and functional “ask Harmony” instead.”)

Wednesday, January 31, 2018

Fixing Stuttering/Jumpy Cursor Problems on Mac Pro with Magic Mouse

I love the top tracking surface of my Apple Magic Mouse - to me, it's the best-ever solution for scrolling, even allowing simultaneous scrolling while moving the cursor.

However, on my Mac Pro 4,1 (2009), cursor control has been spastic, making use of the Magic Mouse frustrating. Concurrently connected Apple Bluetooth Trackpad and wired Mighty Mouse both work normally, thus suggesting that it wasn't either the cursor control subroutines or the Bluetooth system at fault. I've kept all of them connected for years, switching around for either better cursor control or better scrolling.

Periodically, I'd look for solutions to the oft-reported problem, but none of the fixes I attempted had any effect.

Then I found this blog entry: MAC PRO 2009 BLUETOOTH FIX

And was immediately convinced that this blog's author had identified the true culprit: that the Bluetooth antenna location inside the aluminum case of the Mac Pro made for very poor signal propagation (my mousing surface is 10" from the top-front corner of the Mac Pro, and perhaps 30" from the OEM Bluetooth antenna's location inside the case). I liked the sound of the author's "BLUETOOTH FIX USING ORIGINAL BLUETOOTH CARD" solution, which mounts an aftermarket antenna on the outside of the Mac Pro's case.

As of January 2018, I found that Amazon stocks a 2-pack of both the appropriate antennas and the prescribed "pigtail" antenna cables for only $10US:

  • (2) 6dBi 2.4GHz/5GHz Dual-Band WiFi RP-SMA Antenna
  • (2) 35cm U.fl / IPEX to RP-SMA Antenna WiFi Wireless WAN Pigtail Cable
The brand name listed is "Highfine."

The fix is somewhat involved, requiring removal of the Mac Pro's CPU daughterboard and graphics PCI card. The solution also requires some real estate on a PCI mounting plate - the blog article specifies drilling a hole in a blanking plate, but all my PCI slots were populated. I chose to remove an infrequently-used adapter card for a video-acquisition box, but if I were to re-install that, I'd probably add the antenna to a USB 3 adapter PCI card. Fishing the pigtail cable through to the Bluetooth card, and actually working with the tiny U.fl connector can be challenging. 


Problem solved! The Magic Mouse now works like a . . . mouse! Performance is fluid and consistent. It was totally worth the effort.

Tuesday, June 13, 2017

Prevent Your Mouse from Scrolling Between Months in Google Calendar (when using Chrome)

It turns out that I wasn't the only one infuriated by the default behavior of Google Calendar to scroll between months with a mouse wheel. Especially with the Apple Magic Mouse (which controls 2-dimensional scrolling with the touch-sensing top surface of the mouse), unintended switching between months is frequent and aggravating.

Programmer Ivan Morgillo created an extension for the Chrome browser which disables mouse scrolling in Google Calendar. The extension is open-source and free.

NOTE: After installing the extension, you'll need to quit and re-launch Chrome for the extension to disable mouse scrolling in Google Calendar.

Google Calendar Scroll Disabler at the Chrome Store

For nerds: google-calendar-scroll-disabler's GitHub page

HINT: If you want this behavior to be modified across all your Chrome-equipped computers, you can sync your extensions across Chrome installations.

Saturday, June 10, 2017

Google Assistant Shopping Lists moved from Google Keep to Google Home app

If you have been wondering why items added to your Google Assistant shopping list via Google Home weren't appearing in Google Keep, you (like me) missed this change by Google in April 2017.

Google Assistant's shopping lists are moving to the Home app today (The Verge)
While it's still great to be able to yell out additions to the shopping list from anywhere in the house (frankly, the single most promising task so far of being able to have speech-recognition in the home), I miss the organizational features of dedicated shopping list apps (my favorite being AnyList, which like Google Home's Shopping List, features the ability to collaboratively manage your list with other people). But for now, we'll keep working with Google Home, hoping for future improvements.

Friday, October 09, 2015

LED Torchiere Conversion

Twenty-three years ago, my wife and I moved into an apartment with very little built-in lighting, and purchased a couple of torchiere floor lamps to put in the living room and office. Their 300 watt quartz-halogen lamps provided a powerful, white light when turned up, and could be dimmed to a warm glow for quieter evening settings.

Twenty years ago, we moved into the house we now own, and placed the two torchieres in the living room, making for nice, soft indirect lighting on either side of our two chairs.

Perhaps 15 years ago, we picked up a couple of wall-mounted Quartz-halogen projector lamps in the "as-is" section of the Burbank IKEA. I mounted these as reading lights on the shaft of the torchieres (one for each of us), removing the torchieres' failing internal dimmers and routing the reading lights' wires through the now-available dimmer control opening and down through the core of the torchieres' poles to their DC power "bricks." I added external, remote-controlled AC dimmers for the torchieres.

Some years after that, I mounted rear satellite speakers for a surround-sound audio system high on the poles of each of the torchieres flanking our seats, firing rearward and slightly inward to reflect off the wall behind. The speaker wires joined the AC wires feeding the torchiere lamps, and DC wires powering the reading lights.

I've been slowly converting our home lighting from incandescent to LED (and very thankful never to have been faced with the ugly colors of fluorescent lighting). I'd noodled solutions for replacing the two 300 watt torchiere bulbs with lower-power LEDs for more than a year, researching available LEDs and power supplies (I still wanted dimmable lighting, which is a bit more exotic for LED driving circuits). Of late, there have been an increasing number of BIG, postage stamp-sized LEDs which produce light output adequate to replace any household application. I'd almost committed to buying separate components and fabricating a heat-sink/cooling system, when I stopped to look more closely at a LED ceiling down-light conversion kit at Costco. After some thought, I bought the $27 kit, containing two fixtures promising "same output as 120 watt" incandescent reflector flood lights, and 1,250 lumens of light output from only 21.5 watts. Manufacturer quotes of output of the 300 watt Quartz lamps in our torchieres quote nearly 5,000 lumen output, however, that's omnidirectional - light radiates in all directions from the glowing filament. LEDs output most of their light perpendicular to a plane, which is exactly where I want the light going - up into the ceiling. So I thought I might get away with a lower rating to achieve similar light levels.

Once home, I removed the diffusing lens (just breaking it off, then discovering that I missed two screws to remove it reversibly, which turned out to be moot) screwed the medium-base bulb adapter (the familiar threaded light bulb mount for the U. S.) into a work light socket and fired one of the fixtures into the ceiling at the same height as the torchiere lamps. It wasn't bad - about the same output as one of our torchieres which has an old, darkened lamp which was probably putting out half as much light as it could. But it was disappointing next to a freshly-relamped instrument.

I considered just going with the reduced light level, but then decided that I might be able to Siamese the two LED fixtures by sawing about 1/4 of each of their housings off. They would both then fit (sort of) within the upturned shade of the torchiere after I surgically removed all the original socket and reflector parts.

Further exploration and experimentation revealed that I could free the array of 18 LEDs and the steel disk to which they are bonded - I realized it wasn't glued as I first suspected, but merely stuck by silicone heat sink grease. The hockey puck-sized dimmable power supply was easily separated, though I had only about 1/3" of wire with which to solder on four connections between the power supplies and LEDs.

A couple of hours wandering around Home Depot yielded some galvanized steel plates (made for joining construction lumber), pop rivets, some threaded rod and a Plan.

I riveted the LED arrays from both of the fixtures on my fabricated mounting plates/heat sinks (with yet more heat sink grease), and tucked the power supplies underneath. The whole assembly floats above the torchieres' shallow, upturned bowl-shaped shades on two threaded rods.

Before (dimmed very low for photo)

After (also dimmed low)

When I fired it up, I was thrilled to find that the combined output of the 43 watts of LEDs equals or exceeds that of the brand new 300 watt quartz-halogen bulb, and the pattern on the ceiling and walls is perfect. The lights dim as hoped, though there is little to no color change (having warm colored lighting at night may be a better idea to prevent unwanted wakefulness), and the light levels abruptly change at some points - which matters not. Power consumption will drop to 1/7th of the original, and in the summer, the air conditioner will have to contend with over 500 fewer watts of heat in the living room at night.

The original halogen light on the left, and the LED on the right - the dimmers are set at only about 30 per cent, but the LED exhibits none of the reddish color change of a filament bulb.

Success! Our 20th-Century lamps are now 21st, and will continue to serve as reading lights and Surround Sound satellites for years to come.