Wombat Pine Pro
An Unfamiliar Name Proves Intriguing
Continuing the fall keyboard review season with the interesting Wombat Pine Pro:
Mechanical keyboard makers generally fall into two broad categories: established gaming peripheral companies and a series of upstarts, like Keychron and Epomaker, focused purely on mechanical boards. Wombat Keyboards is neither and, like the company, its Pine Pro keyboard feels like a unique entry into a market flooded with very similar offerings.
Das Keyboard MacTigr
Metadot Exquisitely Crafts a Mac-focused Keyboard
I’ve been reviewing keyboards once again on OFB, this week a new Mac-focused keyboard from one of my favorite keyboard makers, Metadot:
At the height of the rage around the first consumer marketed Hummer, later rechristened the H1, I remember getting the chance to climb into one at the nation’s leading dealer of that incredibly robust SUV. The vehicle was capable of tackling terrain no car I’ve ever owned could, but also was incredibly basic on certain creature comforts. This is a professional tool. That analogy aptly fits the Das Keyboard MacTigr, the curiously spelled, newly released keyboard from Metadot.
NDI Support for Apple Silicon in OBS 28. Finally.
So, it has been about two years since Apple introduced the M1 processor, which remains a truly impressive feat of engineering — I love how well things can run on even a low-end M1 computer. Since then, the M1 Pro/Max/Ultra and M2 have come out, but OBS — the standard bearer for live-streaming software — only finally added native Apple Silicon support in late August. That delay wasn’t a huge problem since Apple Rosetta runs Intel native apps incredibly well in translation. OBS is an intensive application, but runs at least as well on an M1 Mac through Rosetta as it does on a high-end Intel Mac.
The late but finally here native release should prove even better, but for one problem when using it in a setting like I do (and like many church users do) where you want to bring in graphics and video conveyed using NewTek’s NDI protocol. About two months after OBS finally went Apple Silicon native, obs-ndi
is still not ready for the new version. Thankfully, DDRBoxman has done the work to make the old version of that plugin work on OBS 28 on all the major platforms.
Two caveats to getting it up and running; the installer installed the plugin to /library/Application Support/obs-studio/plugins/obs-ndi.plugin
, but OBS does not seem to find it there. I moved it to ~/Library/Application Support/obs-studio/plugins
to resolve that.
Also, you need an Apple Silicon native copy of the NDI Runtime, which is not included. A forum post on the obs-ndi
GitHub tracker clued me in. I downloaded the latest, Apple Silicon native version of NDI Tools for free and the found the NDI Video Monitor
app in the Applications folder. I right clicked it, clicked “Show Package Contents,” and then went into the Contents/Frameworks
folder. The library located there needed to be copied to /usr/local/lib/
and renamed to libndi.4.dylib
in order for the plugin to detect it.
Messy, but worth it: I now have native OBS with NDI support running on Apple Silicon.
Buying an iPad in Fall 2022
The Choices are Great -- and Clearer than Before
I know a lot of people get confused about which iPad they need to buy for what they want to do. This guide is my stab at helping to sort out the options and what might be right for you.
Getting Midnight in the UNIX Epoch from Perl
Many computer functions dealing with time are calculated in the number of seconds since the UNIX Epoch. I wanted to get midnight tomorrow in those Epoch seconds so that my Bible word Wordle clone Biblicle could say when the next word would be available. I couldn’t easily do the entire calculation on the client side in JavaScript, because when the next word is served varies: if the user is logged in, it is at midnight for the user’s specified time zone on FaithTree (which may or may not match their computer’s time zone), but if the user is not logged in, it will be at midnight Central Time (“US/Chicago”).
The calculation needed to be done on the backend on the server, which is written in Perl. This page had a suggestion how to get the number of seconds so far elapsed in the day, which could easily be modified to instead give me the number of seconds remaining. Problem: I want to calculate on the basis of the local time zone not UTC/GMT. Thankfully, using Perl’s DateTime
object, that isn’t difficult:
use DateTime;
my $tomorrow = DateTime->now(time_zone => $timeZone);
my $secs = ((23 - $tomorrow->hour) * 3600) + ((59 - $tomorrow->min) * 60) + (59 - $tomorrow->sec);
$tomorrow->add( seconds => ($secs + 1) );
my $tomorrowStarts = $tomorrow->epoch;
With that little code snippet, $tomorrowStarts
will return the first second of tomorrow located to $timeZone
and relative to the Epoch.
Procrastinator's Gift Guide
Still Christmas shopping and getting nervous? In the second OFB YouTube channel video, I look at four items still able to arrive before Christmas that make thoughtful and fun gifts for just about anyone.
Das Keyboard 4 Professional for Mac
A Premium Board Squarely Aimed at Typists
Nearly twenty years ago, the great mechanical keyboards of early computing were largely forgotten, spoken of in reverent tones by the faithful few who clung to them in a sea of mushy, but cheap successors. Das Keyboard stood out as a counterpoint, an attempt to offer a modern, mainstream-friendly board with mechanical switches years before the current resurgence took hold. Do its boards still hold up in a more competitive landscape? And, given that it is Christmastime, would a Das Keyboard make a nice gift?
Mevo Start Live Streaming Camera
A Live Streaming Exploration of Simple Made Simple, Complex Made Possible
I’ve talked about the Mevo live streaming cameras several times here on asisaid. They’re great for church and ministry functions and Logitech was kind enough to send a couple of their newest model units out to OFB so I could review them:
Live streaming continues to grow in influence while remaining complicated to do well. Mevo pioneered an easier path to quality live streaming a half decade ago with its original live streaming camera and the Mevo Start is the company’s latest entry into that line.
The Year When the Cheapest Mac was the Best
Apple's M1 Ushered in High End Performance for Average Users
My take on the Apple M1 line of systems as the sibling M1 Pro/Max systems emerge:
Since its introduction, no one has ever mistaken the Macintosh as the cheap option for computers. Nor would anyone who watched Apple’s launch of its insanely fast M1 Pro and Max chips on Monday argue that the new MacBook Pros are cheap. However, when the dust settles, the previous reigning top Apple Chip — the M1 — will still be the one that created a year when the cheapest Mac was the best Mac and one of the best computers, period.
Optimizing Little Hills, FaithTree and Open for Business
I’ve been deploying a lot of server optimization tricks to improve the performance of Little Hills, FaithTree and Open for Business these past months. They had all grown slow with the kludge of adding additional features and my once snappy homegrown content management system (also used here), SAFARI, was no longer snappy. That all threatened user frustration and, for that matter, lower rankings on Google, which pays attention to the performance of sites it refers people to.
I’ll blog about some of the other optimizations a different day, but one I’m rather pleased with is support for WebP. I’ll admit to ignoring it in no small part because Apple didn’t support it. I use primarily Apple Safari to browse the web, including pages served by my SAFARI (which I called that before Apple’s Safari was launched, so I’m being stubborn and keeping the name). However, WebP arrived on Safari with iOS 14 and MacOS Big Sur, so I revisited the format and found it could offer substantial savings in download size on many images. With support in every modern browser, I figured I’d implement support in SAFARI.
By support, I mean my goal was to be able to upload an image to the site and the software takes care of turning it into a WebP. SAFARI now does that, taking images of known types and running several layers of optimization. First, it tries to make a more efficient JPEG using ImageMagick’s PerlMagick module; once that is complete, it attempts to make a WebP version. It only keeps the optimized JPEG version if it is at least 20% smaller than the original. Likewise, it only keeps the WebP if it is that much smaller than the optimized JPEG. Since not everything older supports WebP, there’s no reason to mess with it, if a JPEG will do.
This is similar to what I later read described here. I want to implement more of Bernat’s optimizations in the future.
That’s great, I thought, but then I realized the next issue (which is described with a solution in Bernat’s piece, but I hadn’t found it yet at the time): if not every browser supports WebP, I have to be prepared to serve the JPEG still. The HTML5 <picture>
element supports giving different image options and letting the browser installed, but my goal was not to require me (or anyone else someday posting to Little Hills’ site) to manually think through the process of describing alternatives. It also does nothing to take advantage of the automatically generated alternatives I previously created when it comes to existing pages.
The solution was complicated by another optimization I made. My long worn solution would be to come up with a series of mod_rewrite
rules for my Apache server to analyze if the browser could handle WebP and then replaced the JPEG with a WebP if possible. However, I recently implemented an NGINX caching server to get its advantages over Apache, so I needed to figure out the NGINX way to do it. That turned out to be a bit confusing to me at first, but simple in practice.
Here’s the final bit of NGINX configuration magic used to reroute requests to WebP (or the optimized JPEG), as best suited. It finds any folder location under an images
directory and then looks for an .optimized
subdirectory. If it finds one, It looks for the WebP version if applicable and the optimized JPEG if the WebP version is unavailable or the browser does not support it.
location ~ ^(?<extra>.*?)(?<prefix>/images/(?:.*/)?)(?<rxfilename>.*)$ {
expires 365d;
add_header Pragma "public";
add_header Cache-Control "public, no-transform";
add_header Vary Accept;
try_files $extra$prefix.optimized/$rxfilename.$webp_suffix $extra$prefix.optimized/$rxfilename.jpg $uri =404;
}
This has been working great for a couple of months now — I started writing this post back on July 7 and then got sidetracked — so if you’re looking to optimize your NGINX configuration, I definitely commend it to you.