When the app is told to make it snow it adds full-screen non-interactive windows on each display and inside those windows adds a SpriteKit view with a scene inside that contains emitters.
This weekend the NeoPixel tree got many much-needed updates!
Though I have more ideas to implement, the basics of what I wanted to do are complete, like sending commands remotely.
What we can currently do:
Set the brightness
Change the color
Turn the pixels off
Run some built-in sequences, like a nice rainbow
Set repeating color patterns
Set individual pixels
I also threw together a really quick iOS app to set the color with SwiftUI’s built-in ColorPicker view. Thanks to the Rover project (another one that’s been neglected), I had some UDP client code I could borrow to speed up development.
Changing the color of the tree with a SwiftUI ColorPicker view.
I have lots to post about related to my recent vintage / retro computing adventures, but in the meantime here’s iPadOS on a CRT.
It’s actually kind of nice! The biggest downside, however, is that the CRT only ran at 1280×1024@60Hz. The resolution is fine, but the refresh rate is quite low for a CRT – my eyes wouldn’t be able to handle it very long. I’ve always been sensitive to rates lower than 85Hz on CRTs.
The hardware to make it work:
A CRT.
An iPad.
An Apple Digital AV adapter which has HDMI output, such as this USB-C one.
An active HDMI -> VGA adapter such as this one (it has to have external power).
A USB hub is nice for wired peripherals, but optional. I have a wired Microsoft Optical mouse with a Keychron C1 (reds) connected in this video.
For this week’s “Nerd Snipe”, I spent way too much time at work trying to track down a pesky bug related to our editor. Long story short, we send some custom NSAttributedString.Keys to signify differences in rich text. For instance, a heading attribute with an integer value may tell a parser to wrap text in an <h2> when converting the string to HTML.
Oddly, sometimes that special attribute wouldn’t be included when text was autocorrected, so the generated HTML wasn’t always what we expected. After a lot of digging I believe this could be a bug in UITextView (or maybe NSTextStorage).
Inspecting the value of attrString in the NSTextStorage function func replaceCharacters(in range: NSRange, with attrString: NSAttributedString) after autocorrecting some text shows that it only seems to include attributes that were defined in Foundation (e.g. NSFont, etc.), but not our custom ones.
Regular typing works fine – you see all the expected attributes set in textView.typingAttributes.
In scenarios like these I like to make the simplest example to help confirm I understand it, so I’ve made a repo demonstrating the issue in case it’s helpful for anyone.
I gotta get to blogging this year. Just one of my many projects from the holiday break – this obviously isn’t done but it’s a pretty neat stack using Protobuf, RF24 (Arduino to Arduino) to serial on macOS with SwiftUI+SceneKit. pic.twitter.com/P62KpM69Z2
I saw flip dots (also called flip discs) last year for the first time and instantly knew I needed some in my life. If you’re not familiar with them, check out how they work!
The particular model I have is the ALFAZETA XY5, which may be the easiest way to get up and running, but certainly not the least expensive.
After getting the board, all you need is:
24V power supply
Something that talks over RS485 (in my case I used an ESP8266 connected to a MAX3485 board)
Their documentation that defines the controller data protocol
I plan to write in more detail how it all works, but for this demo the stack is:
At work we’re primarily using Zoom for meetings while we’re in remote mode. Due to the recent problems found in their desktop software, I run it only on my iPad to provide a little more security (thanks to iPadOS’ sandboxed environment), plus the front facing camera on my iPad Pro is superior to my iMac and MacBook Pro’s.
The first issue I found with this setup was that I wanted to get the iPad into a position more perpendicular like a web cam, rather than the angled up shot below my face. I don’t think anyone wants to look up my nose unless I’m on a telehealth call, so I ordered this flexible stand for about $25 from Amazon and got it mounted:
Trying to bend this thing will give you a workout.
So far so good, until my first meeting. I wanted to follow conference call etiquette by muting myself when I wasn’t speaking, but it was a pain to reach and manually tap the mute button every time. Plus, although the flexible arm is super strong, it’s still going to wobble wildly if you touch the iPad and your video is going to show that.
Was there a way I could toggle muting myself without touching the iPad? After a quick Google search, the answer was YES!
The attached keyboard (Smart Keyboard Folio, Magic Keyboard) didn’t make any sense in this case, but a Bluetooth keyboard would be perfect!
Logical answer
The logical answer is to connect up a Bluetooth keyboard and hit Command + Shift + A when you want to toggle muting your mic, and you’re done. That’s it.
I’m not totally logical
Of course, the route I chose was different. I have enough keyboards on my desk, I really just want one button to do one thing.
This is as if the user pressed “shift + caps lock”, and then “shift + a” at the same time, then released. Now the Zoom app was getting the proper command from a Bluetooth “keyboard”.
Hardware
This setup is virtually identical to what I have here, it’s just a different button.
The USB cable coming in is only for power, and if I had the Adafruit Feather version on hand I would’ve used that with a battery so the box would be totally wireless.