Tap Light Focus Timer System

I’ve been procrastineering on a “sticky note timer” which would incorporate an e-ink display, be portable, updatable via WiFi, show me what I should be working on, and flash lights at me to give me a sense of movement / time passing / and urgency.  Sometimes I use the word “procrastineering” to refer to when I start to spiral on a project and end up in analysis paralysis.  But, I think it is more appropriately used when I’m doing a deep dive on a project when I really have something much more important / urgent I should be working on.

A long time ago I added a few components to an off the shelf dollar store tap light and turned it into a game buzzer.  While the sticky note timer project was marinating  / incubating1 in the back of my brain, I realized that maybe I don’t need or even want something that high-tech.  Maybe what I need is something dead simple?  As cool as the sticky note timer project is – and it really is neat – there’s a lot of pieces to the puzzle and a fair bit of maintenance that goes along with it once its finished.  You have to connect to it, upload a list, set up timers, etc.

I finally decided on something not so easily adjustable, but still flexible in it’s simplicity.  Rather than making the setup (adding / updating / uploading lists to a timer) something I have to do in order to start the timer, what if I made it part of the timing?

First, let’s look at what the setup.  A dollar store tap light which includes a lot of handy parts – a battery holder, a push button switch, several springs, and a simple and at attractive enclosure.

This slideshow requires JavaScript.

On the far left is a basic off the shelf dollar store tap light.  Next to it are two others I had previously modified to work as game / timer buzzers2  The last picture is the wiring diagram, except that I wired the ATTiny chip to the positive wire coming from the button switch.  Whenever I hit the button, it will toggle the circuit on and off.

Using some parts from my electronics bin3, I cobbled together a prototype on a breadboard that would do the following when the button was hit:

  • Turn orange for 1 minute and beep 3 times in the last 3 seconds
  • Beep once more and turn green for 12 minutes, then fade from yellow through orange over the last 3 minutes
  • Flash red and beep three times after 15 minutes had lapsed (12 minutes of green and 3 minutes of color fading)
  • Turn off, go to a low power mode, and then wake up long enough to flash blue every 8 seconds
  • After 5 minutes, it would flash green and beep twice
  • Then keep doing this 8 second blue flash and green light plus beep every 5 minutes
Animation of LED timer button

You’re probably wondering – what’s with all these timers and lights and beeps?  Here’s how I use them:

  • Place and slap the button to get going
    • I put my phone on my desk and the timer right on top of my phone.  It’s a big 4″ diameter timer and covers the phone pretty well.  I can’t pick up my phone without seeing this timer ticking down.  This is a huge difference between a phone app and a physical thing standing between me and my phone.  There are some web browser based apps – but these don’t really work for me.  Either I have to keep that window open and on top or … I’ll forget it exists.  This timer is right there, front and center, on my desk and lit up no matter where my desktop might take me.
    • Plus, it’s actually a little therapeutic to slap the tap light.  Pushbutton switches like this are built to take a bit of abuse and the physical action of hitting the light is a lot of fun.
  • Orange for 1 minute
    • This is the replacement for the “maintain / update a list.”  Instead of having to fuss with a list, I’ve dumped myself directly into work.  I’m suddenly racing the clock for 60 seconds to write all the things I want to try and accomplish in the next 15 minutes.  Maybe it’s a few emails, make some phone calls, or write / edit a document.  After 57 seconds, the buzzer will beep three times to let me know that the 15 minute timer is about to start.
    • Or, if you already have a particular task to work on, you could use this time to follow a process like Steven Kotler’s suggestions on tactical transitions to a a flow state4.  His three step process is:
      • Anchor your body
        • Practice box breathing.5  You could box breathe 3 times in one minute and have a few second left over to psych yourself up.
      • Focus your mind
        • Write down one clear goal.
      • Trigger your ritual
        • Recite a mantra, perform a gesture, start a “work” playlist
  • Green for 15 minutes
    • It’s go time!  Whatever I wrote down, now I’m in a race to work on those things – and those things only.  I can’t let new emails, calls, etc, distract me – that buzzer is going off in 15 minutes.  As the timer closes in on 15 minutes, with just 3 minutes to go, it turns yellow and fades to orange.  If I look up / down and see this, I know I’m in the home stretch and I’ve got to start moving fast to wrap things up.
  • Red alert!
    • Once the 15 minutes is up the light flashes red and beeps to let me know I’m off the hook.  Now, if I’ve already hit peak productivity, I could keep going.  If I got sidetracked, it’s an alert for me to restart the timer and get back to it.
  • Blue flashes, 5 minute green flash and beeps
    • These blue flashes happen once every 8 seconds6 just to keep the timer present in my vision so it doesn’t just appear into the mess on my desk.
    • If I finished out the 15 minute block of work time and I don’t stop the timer, the 5 minute timer is my reminder to return to my desk, reset the timer, and get going again.
    • If I ended up working past my 15 minute block of work time, the 5 minute beeps still give me a sense of how much time has passed.7
    • Importantly – if I get distracted by a sidequest, one of the beeps every 5 minutes is bound to catch my attention and remind me I’m supposed to restart the timer and get back to work.

So… does it work?  For me, yes!  Here’s why:

  • The hardest part of getting started is getting started.  My tendency is to want to collect all the stuff I’d need, get real comfy, make a list, look up some documents, etc.  This system short circuits all that.  I just need to be able to slap the big button sitting on top of my phone.  If I can manage that, I get 60 seconds to collect myself and then it’s time to rock and roll.  That’s enough time to take some deep breaths, start a playlist, or just sit quietly before I get started.
  • It covers up my biggest distraction.  Unlike an app on the phone or my desktop computer, I can literally cover up my phone with this big damn button.  I won’t see any notifications and if I want to pick up my phone, I have to actually look at and ouch the button – which is itself a reminder to get back to work.
  • It plays into a sense of play, urgency, and my own overdeveloped sense of competitiveness.  I enjoy hitting the timer to turn it on – and I want to beat that 15 minute timer.
  • The 5 minute timer acts like a built in break timer.  If I can get through 15 minutes of work, I can goof off, write a blog post, and without doing anything else that 5 minute timer can bring me back.
  • It includes a “failsafe” to bring me back to the timer if I get distracted by a sidequest.  If I miss the 15 minute timer, there’s another 5 minute timer around the corner.  Even between timers, there’s an intermittent flash of blue light to grab my attention.

The only meaningful “downside” to this timer button for me is there’s no pause button.  However, this isn’t exactly bad.  It helps me really hone in on what’s important and what’s interesting.  If a family member asks me for something or a call comes in, I just need to weigh the benefit of addressing the intrusion against having to restart the timer.  And realistically, if I pause the timer, I’m going to need some time to drop back into “flow” anyhow.

Sticky Note Timer
  1. Ah, just what I need! A new project!
  2. Sticky Note Timer, parts arrived!
  3. Seeed Studio XIAO ESP32C3 and a small sticky note display
  4. Brainstorming More E-Ink Stuff
  5. Smol Fonts for E-Ink Displays
  6. Tap Light Focus Timer System
  1. Fermenting?  Festering? []
  2. The older ones would flash orange a few times to alert you the game was going to start, turn green, fade from yellow to red, then flash red and buzz after 15 seconds. []
  3. I used an ATTiny45 because I had one, but it’s not much more expensive to use an Adafruit Trinket, a buzzer, a RGB/neopixel LED, and some wire.  In a subsequent version, I also used a small prototyping board like the Adafruit Perma Proto Boards []
  4. It’s the second slide []
  5. TLDR:  Breathe in slowly through the nose for 4 seconds, hold for 4 seconds, breathe out slowly through the mouth for 4 seconds, hold for 4 seconds, repeat []
  6. Because that’s the longest the little microchip can do between “deep sleep” to conserve battery life []
  7. I may adjust the program so the first five minutes is 1 beep, second five minutes is two beeps, etc []

Prusa Lack Stack, LED Lighting, CircuitPython Tweaks

Much like those recipes on the internet where the author tells you their life story or inspiration, I’ve got a lot to share before I get to the punchline of this blog post (a bunch of CircuitPython tweaks).  Edit:  On second thought:

  • Keep the lines of code <250
  • Try using mpy-cross.exe to compress the *.py to a *.mpy file

This is a bit of a winding road, so buckle up.

Admission time – I bought a Prusa1 about three years ago, but never powered it on until about a month ago.  It was just classic analysis paralysis / procrastineering.  I wanted to set up the Prusa Lack enclosure – but most of the parts couldn’t be printed on my MonoPrice Mini Delta, which meant I had to set up the Prusa first and find a place to set it up.  But, I also wanted to install the Pi Zero W upgrade so I could connect to it wirelessly – but there was a Pi shortage and it was hard to find the little headers too.  Plus, that also meant printing a new plate to go over where the Pi Zero was installed, a plate that I could only print on the Prusa, but I didn’t have a place to set it up…

ANYHOW, we’ve since moved, I set up the Prusa (without the Pi Zero installed yet), printed a Prusa Lack stack connector to house/organize my printers.  Unlike the official version, I didn’t have to drill any pilot holes or screw anything into the legs of the Lack tables.

Once the Lack tables were put together, I set about putting in some addressable LEDs off Amazon. I found a strip that had the voltage (5V for USB power), density (60 LED’s per meter), and the length (5 meters) I wanted at a pretty good price <$14, shipped.  I did find one LED with a badly soldered SMD component which caused a problem, but I cut the strip to either side of the it, then soldered it back together.  Faster and less wasteful than a return at the cost of a single pixel and bit of solder.

The Lack stack is three tables tall, keeps extra filament under the bottom of the first table, my trusty Brother laser printer on top of the first table, my trusty Monoprice Mini Delta (Roberto) on top of the second table, and the Prusa (as yet unnamed Futurama robot reference… Crushinator?) on top.  Since I don’t need to illuminate the laser printer, I didn’t run any LED’s above it.  I did run a bunch of LED’s around the bottom of the third printer…  this is difficult to explain, so I should just show a picture.

When Adafruit launched their QtPy board about four years ago, I picked up several of them.  I found CircuitPython was a million times easier for me to code than Adafruit, not least of which because it meant I didn’t have to compile, upload, then run – I could just hit “save” in Mu and see whether the code worked.  I also started buying their 2MB flash chips solder onto the backs of the QtPy’s to a ton of extra space.  Whenever I put a QtPy into a project, I would just buy another one (or two) to replace them.  There’s one in my Cloud-E robot and my wife’s octopus robot.  Now, there’s one powering the LED’s in my Lack Stack too.

I soldered headers and the 2MB chip into one of the QtPy’s, which now basically lives in a breadboard so I can experiment with it before I commit those changes to a final project.  After I got some decent code to animate the 300 or so pixels, I soldered an LED connector directly into a brand new QtPy and uploaded the code – and it worked!

Or, so I thought.  The code ran – which is good.  But, it ran slowly, really slowly – which was bad.  The extra flash memory shouldn’t have impacted the little MCU’s processor or the onboard RAM – just given it more space to store files.  The only other difference I could think of was that the QtPy + SOIC chip required a different bootloader from the stock QtPy bootloader to recognize the chip.  I tried flashing the alternate “Haxpress” bootloader to the new QtPy, but that didn’t help either.  Having exhausted my limited abilities, I turned to the Adafruit discord.

I’ll save you from my blind thrashing about and cut to the chase:

  • Two very kind people, Neradoc and anecdata, figured out the reason the unmodified QtPy was running slower was because the QtPy + 2MB chip running Haxpress “puts the CIRCUITPY drive onto the flash chip, freeing a lot of space in the internal flash to put more things.”
    • This bit of code shows how to test how quickly the QtPy was able to update the LED strip.
      • from supervisor import ticks_ms
      • t0 = ticks_ms()
      • pixels.fill(0xFF0000)
      • t1 = ticks_ms()
      • print(t1 – t0, “ms”)
    • It turns out the stock QtPy needed 192ms to update 300 LED’s.  This doesn’t seem like a lot, until you realize that’s 1/5th of a second, or 5 frames a second.  For animation to appear fluid, you need at least 24 frames per second.  If you watched a cartoon at 5 frames per second, it would look incredibly choppy.
    • The Haxpress QtPy with the 2MB chip could update 300 LED’s at just 2ms or 500 frames per second.  This was more than enough for an incredibly fluid looking animation.
    • Solution 1:  Just solder in my last 2MB chip.  Adafruit has been out of these chips for several months now.  My guess is they’re going to come out with a new version of the QtPy which has a lot more space on board.
      • Even so, I’ve got several QtPy’s and they could all use the speed/space boost.  I’m not great at reading/interpreting a component’s data sheet, but using the one on Adafruit, it looks like these on Digikey would be a good match.
  • The second item was a kept running into a “memory allocation” error while writing animations for these LED’s.  This seemed pretty strange since just adding a single very innocuous line of code could send the QtPy into “memory allocation” errors.
    • Then I remembered that there’s a limit of about 250 lines of code.  Just removing vestigial code and removing some comments helped tremendously.
    • The next thing that I could do would be to compress some of the animations from python (*.py) code into *.mpy files which use less memory.  I found a copy of the necessary compression/compiler program on my computer (mpy-cross.exe), but it appeared to be out of date.  I didn’t save the location where I found the file, so I had to search for it all over again.  Only after giving up and moving on to search for “how many lines of code for circuitpython on a microcontroller” did I find the location again by accident..  Adafruit, of course.  :)
    • I’m pretty confident I will need to find the link to the latest mpy-cross.exe again in the future.  On that day, when I google for a solution I’ve already solved, I hope this post is the first result.  :)

The animations for the Lack table are coming along.  I’ve got a nice “pulse” going, a rainbow pattern, color chases, color wipes, and a “matrix rain” / sparkle effect that mostly works.

Animated GIF

I started this blog post roughly 7 months ago2 by the time I finally hit publish.  After all that fuss, ended up switching from CircuitPython (which I find easy to read, write, maintain, update) to Arduino because it was able to hold more code and run more animations.  Besides the pulse animations, rainbow patterns, color chases, color wipes, and a matrix rain, it’s also got this halo animation, some Nyan cat inspired chases, and plays the animations at a lower brightness for 12 hours a day (which is intended to be less harsh at night).  I could probably add a light sensor, but I don’t really want to take everything apart to add one component.

  1. The i3 MK3S+! []
  2. January 7, 2025 []

Ah, just what I need! A new project!

A rough sketch
A rough sketch

If you’re anything like me, you’re familiar with the idea of Too-Many-Tabs™️.  I see a cool thing, I open it in a tab, I might organize tabs, I might bookmark them, and see them now and then.  The worst part about this for me is that as long as they’re not yet bookmarked and organized, I don’t want to close the tabs – so that I don’t “forget” about them.  But, as long as I’ve not bookmarked/organized/blogged about something, it will feel like it is still using some level of brain bandwidth, running as a “background process” using a small, but non-zero, amount of brain attention.  The only good ways I’ve found to excise these ideas/tabs/processes is for me to act on them (get started building and/or blog about them) or kill them (bookmark/organize).

I’ve seen several projects recently which are swirling around several similar concepts for me:

All of these projects do interestingly adjacent tasks – displaying relevant information, in an attractive way, serving as a reminder, good either on a desktop or perhaps a wearable.  I could see making a version of Tymer as a wearable watch.  The build seems fairly straightforward – buttons to input times, deep sleep functions which wake once a minute to determine if it needs to set off the vibration motor.  I would love a small simple e-display such as the ESticky – to sit on my desktop, perhaps on/near/in front of my monitor.  What’d I’d really like, of course, is something that’s kinda does some of each.

I ordered the parts for the ESticky, since the Tymer appears to basically require just a battery charging board (already integrated into the ESticky’s Seeed Studio XIAO ESP32C3) and a vibration motor (which I have a stack of already).  I’ve not used a Seeed Studio product before, but it appears to be similar in formfactor and function to the Adafruit QtPy’s I’ve been using in various recent projects.  Because I know I’m going to want to use one XIAO board as my dev board with headers and breadboard, one in the project itself, and one because…  they’re cheap ($5) and there’s even odds I’ll blow one up.

My plan is to build a direct copy of the ESticky on a breadboard, add the vibration timer and buttons to manipulate it, see if I can do it in a more permanent format by soldering it together, then design / print a case.

I’ve never worked with a Seeed Studio product and not played with eink displays yet.  Hopefully this will be fun!

Bonus:  Now that I’ve purchased some of the parts, I can close dozens of tabs!

Sticky Note Timer
  1. Ah, just what I need! A new project!
  2. Sticky Note Timer, parts arrived!
  3. Seeed Studio XIAO ESP32C3 and a small sticky note display
  4. Brainstorming More E-Ink Stuff
  5. Smol Fonts for E-Ink Displays
  6. Tap Light Focus Timer System

One Simple Trick Can Save You 30 Minutes…

After mentioning long render times on my machine, @raster suggested switching to the manifold 3D rendering backend.  Depending on your OpenSCAD version, you might need to poke around to find how to enable this option.  It’s absolutely worth your time and should really be enabled by default.

If you dig into this option a little, and you’re a 3D printing old timer, you might recognize the creator of this library as none other than Emmett Lalish!!!  Emmett was an early 3D printing adopter, from back in the MakerBot Thing-O-Matic days, creator of the original heart gears, and just all around incredible engineer. 1 2

Emmett’s manifold library dropped the render time for one of my designs from 300 seconds to… under 8 seconds.  I literally used to avoid hitting F5 on more complex designs or avoid cranking up the facets so I didn’t have to wait for long renders.  A single comment from a friend, telling me about an option written by another friend, has completely and permanently changed how quickly I’m able to iterate and design objects forever.

Here’s how you can instantly save tons of time with your OpenSCAD designs:

"Manifold (new/fast)"
“Manifold (new/fast)”
#OpenSCADClub
  1. OpenSCAD 3D Printed Spring
  2. OpenSCADClub Week 2: Directional Pad
  3. OpenSCAD Render Times
  4. One Simple Trick Can Save You 30 Minutes…
  5. OpenSCAD Club Cookies
  1. Emmett even wrote a guest post on this very blog about… 14 years ago?!?!  Time flies, I guess? []
  2. Special thanks to my honorary editor Andrew for catching a typo… []

OpenSCAD Render Times

Thanks to @raster, I’m going to do a side-by-side taste test of several different flavors of OpenSCAD.1 To give each one a similar test, I’m trying out my D-Pad design from … uh, earlier this morning.2

Version Release F5 Preview F6 Render Notes
2021.01 Stable 09:50.220 2.302 Best place to start
2024.01.13 Current 04:37.763 0.948 I’ve been running this one for a while
2025.04.04 Latest 04:36.593 0.483 Latest snapshot

Obviously, the good folks working on OpenSCAD have dramatically improved preview/render times over the last four years.  The speed boost in using a later snapshot is pretty significant if you’re doing any kind of complex designs.  They must be using some kind of cache system to make the render times so fast.

The speed differential between 2024.01.13 and the latest snapshot is so slight, I’m not going to switch things up unless I bump into a design that struggles with rendering some complex feature.

#OpenSCADClub
  1. OpenSCAD 3D Printed Spring
  2. OpenSCADClub Week 2: Directional Pad
  3. OpenSCAD Render Times
  4. One Simple Trick Can Save You 30 Minutes…
  5. OpenSCAD Club Cookies

 

 

  1. *I’m not avoiding work!* YOU’RE avoiding work! []
  2. Like, way earlier…  midnight or so… []

OpenSCADClub Week 2: Directional Pad

This week’s topic related to @deshipu’s directional keypad designs.  The directional pad is clearly the most complicated part of the design.  The four buttons are basically just cylinders that can be created in several different ways.

@deshipu's D Pad Design
@deshipu’s D Pad Design

Brian published his designs to Github.

@beerriot's designs
@beerriot’s designs

After staring at the design a little longer, I changed from my original design idea to creating a 2D cross, extruding that, subtracting out the curved area described by a sphere (a homebrew hack I’ll describe below), using the minkowski function to surround the entire surface with a small sphere to give it a rounded look, then cutting the bottom off to ensure it is flat.  I didn’t include a flat cylinder as in the original design above, but that’s a trivial addition.  The downside?  This is a 5 minute render on my machine, largely due to the minkowski function.

//  Settings
    fn = pow(2,5);
//  Measurements
    pad = [10,30,1,3];
    corner = 1;

dpad();

module dpad()
    {
    difference()
        {
        minkowski()
            {
            difference()
                {
                linear_extrude(height=pad[3], center=false)
                    offset(r=-corner/2, $fn=fn)
                    for (i=[0:1])
                        rotate([0,0,90*i])
                        square([pad[0],pad[1]], center=true);
                translate([0,0,pad[3]])
                    scale([pad[1]*1.03,pad[1]*1.03,pad[3]-pad[2]])
                        sphere(r=0.5, $fn=fn);
                }
            sphere(r=corner/2, $fn=pow(2,4));
            }
        mirror([0,0,1])
            cylinder(r=pad[1], h=pad[1], center=false);
        }
    }

Renders to:

MakerBlock's design
MakerBlock’s design

Hacks:

  1. You’ll notice I use “offset” to reduce the size of the directional pad, because I knew I was going to round it all with the minkowski function in a few lines.
  2. The directional pad is actually just a rectangle, run through a for loop once to rotated it by 90 degrees, before being extruded to the specified height.
  3. The last two lines of code are used to create a large cylinder, larger than what I knew the pad would be, then mirrored in the Z axis to cut everything below the XY plane.
  4. As in prior designs, I pre-define “fn” to be a “pow(2,5)” so that I can use a low exponent to iterate designs quickly, then crank it up for a detailed design.
  5. The hack I use the most often here, and the one I’m the most proud of, is where I make a sphere like “sphere(r=0.5)” and then scale it by whatever I need.  Since the sphere has a diameter of “0.5” mm, the actual sphere is 1mm in diameter – so when I scale it in the XY by 30 and in the Z by 2 (since the edges of the keypad are 3mm tall and the center is 1mm tall), the diameter is now 30mm and the height is 2mm.  This little trick, of being able to scale a sphere to the exact size I need has come in handy countless times.

I’m not the best programmer, not the best at OpenSCAD, but I’m kinda happy that I was able to build this in about 31 lines of code.  :)

#OpenSCADClub
  1. OpenSCAD 3D Printed Spring
  2. OpenSCADClub Week 2: Directional Pad
  3. OpenSCAD Render Times
  4. One Simple Trick Can Save You 30 Minutes…
  5. OpenSCAD Club Cookies

Goblin Hours, Enabled

Live Webcam Feed
Live Webcam Feed

I’ve often told my family that if it were not for them, I’d basically work all night, every night, on whatever latest project popped into my brain, and then fall asleep at the workbench/eating plank/soldering station every night/early morning.

The thing is, these tendencies just aren’t very conducive when it comes to trying to live with other people, especially those you’re semi-responsible for.1 It’s especially challenging to work in a professional environment at DayJob™️when I’m working crazy hours.  I don’t want my clients or the other people I work with realizing they’re communicating with the functional equivalent of three meth-addled racoons in a trench coat.23

I have a few ways of passing for a socially normative respectable professional.  Here are some of my coping mechanisms:

  • I’ve put several buttons into Outlook’s quick access toolbar.  The most important are:
    • “Delay Delivery” so that I can draft and hit “send” on an email, but not have it go out until a socially acceptable time
    • “Signature” so that I can easily send an email with my “mobile” email signature or my full fledged obnoxiously enormous “professional” email signature.  Why would I do this, you ask?  Well, if I want to get away with a quick reply and not really do a deep dive, I’ll fire off an email as if I were typing from my phone.  I’ll even introduce “strategic typos” to really sell the impression.  Then again, if I’m typing a really long email into my phone and want to have it appear more impressive, I’ll use the “professional” signature.
    • “Work Offline” so that I can work uninterrupted for even a little while.  Being able to shut off the firehose that is my daily work email inbox is incredibly helpful.
  • I addressed strategic typos earlier, but it’s really genuinely a real coping mechanism aside from just an email signature.  Adding typos makes it more likely someone will focus on appreciating your responsiveness and less likely they’ll get nitpicky about the content.
  • My old cell phone using Google Voice as my “personal cell phone” number.  I don’t want to talk to people, but it’s basically unavoidable.  Then again, a quick text from the phone can handle many situations.  Even better, clients feel like they really have access to me.  It’s also nice that I can keep Google Voice open on my desktop and be able to “text” from my computer and using my keyboard.  In reality, I just leave this secondary phone and just … walk away from it.  No one outside my family needs that much access to my life.
  • I’ve spent a lot of time tracking my productivity and know what days I’m the least productive.  Unsurprisingly, it’s Mondays and very especially Fridays.  This means I try to avoid meetings on these days as much as possible so that I can lean into unproductivity if I need to.  Why flog myself into working ever harder when I already know that however hard I push myself, it’s just not gonna be a productive day?
  • I really try to avoid all meetings.  Mercifully in person meetings are all but extinct.  Video meetings are nearly as bad, but at least I don’t have to wear pants.  Whenever I have a video meeting (or phone conference), I will make a special effort to ask for an “agenda.”  If you don’t have an agenda, or at least some kind of idea about what you want to accomplish at a meeting you’ll never know if you’ve succeeded at the meeting … or when it should end.  And, once I have the agenda, I will send an email with as much detail and cover as many points as possible.  Sure, no one will read it… but its’ my way of preparing for the meeting and I can keep referring back to it as necessary. I’d say in roughly 40% of situations that email is enough to torpedo the entire meeting.
  • Recently I created, with the help of ChatGPT4 I wrote an Outlook macro which will help me automate when I send emails.  Whenever the “Work Offline” button is toggled and I hit “send” on an email, it picks a random time between 7:15 AM and 7:59 AM and schedules the email to go out on the next business day.  Sure, this means people will get a flood of emails from me first thing on Monday morning.  But, it’s that a lot better than getting a stream of emails from me all weekend?
  • I hate phone calls, so I will dodge as many as I can get away with.  And, when I’m on a long phone call, I will play a recording of someone knocking on my door and asking for my attention in increasingly urgent tones, until I can get off the line.

I don’t know – maybe this all adds up to some kind of antisocial behavior or DSM IV diagnosis?  What I do know is that with these various tools I’m able to better work with others in a professional setting.

It’s a little after 4AM right now.  I’m not sure how to end this post so I’m just going to publish it.  :)

  1. In so far as I can be responsible for other humans []
  2. God, wouldn’t that be an amazing Halloween costume?!  Me dressed as three racoons dressed as me?!!? []
  3. Where was I? []
  4. Don’t @ me.  I don’t care. []

Combining Multiple Video Files

Rather than send me a single set of video files, my client’s vendor sent me… 149 separate MP4 files, ranging from a few seconds to about 11 minutes long.  I have no interest in sorting through dozens of video files, cataloging them individually, and then trying to review them in order.

While I would have thought VLC would have been a good drag-n’-drop way to stitch them all together, the version I had and the newest version available both weren’t letting me save multiple files into a single file.

A bit of googling and I stumbled across an old friend – ffmpeg!  I hadn’t used this program to transcode video since the early days of DIVX, backing up DVD’s back in the late 1990’s / early aughts.

Here’s the process I settled on for my Windows machine:

  • Created a batch file to create a list of the video files (which included spaces, commas, and all kinds of nonsense command line tools hate).  The entire contents of the batch file was:
    • dir *.mp4 /b > list.txt
  • Since I’m using Notepad++, I used the find/replace function to search / replace on “list.txt”:
    • /r/n
    • ‘/r/nfile ‘
  • Even using some find/replace magic, I still needed to adjust the first and last lines, but that wasn’t so bad.
  • Then, the videos which had been named in semi-logical pattern, were not in strictly alphanumeric order.  I re-ordered them in the text list to the order I’d wanted to view them in.
  • I dropped the FFMPEG executable, downloaded from this mirror, into the folder with the video files and list.txt, then made a new batchfile which contained the following:
    • ffmpeg -f concat -safe 0 -i list.txt -c copy combinedfilename.mp4
  • Now, I could have typed this into the command line, but since I wanted to batch certain files together, it was just easier for my purposes to have the batch file.  Plus, now I have the executable and the batch file for future use.

Anyhow, I hope this helps save someone, perhaps even myself, a few minutes of hair pulling and searching.  :)

Adventures with a (Cheap) Vinyl Cutter

I don’t have any affiliate links to shill, but I really like Monoprice.  They sold cheap re-branded 3D printers, decent office equipment, and sometimes they will have an absolutely ridiculous deal on one of their products.  I’d say, overall, the quality is “pretty good” across the board and when you can find a deal on something, it’s an easy decision.  I picked up an extra Monoprice Mini Delta 3D printer because it was so cheap, I could use it for parts and not feel bad.1  I’ve been happy with their egg cooker, USB hubs, HDMI cables, various random testers.  The other day I saw they had a sale on their “MakerCraft Mini Craft Cutter” for $80, when it’s normally $230, with free shipping and had to buy it.  If you missed out, I’d highly recommend signing up for their newsletter.  About twice a year they have some deal that’s just bananas.

It’s been sitting off in a corner for nearly two months while I’ve been distracted by Maker Faire preparations and work, but tonight I gave it a shot.  I’d say, like most other MonoPrice things, it’s “pretty good.”  The included software “Sure Cuts A Lot Pro 5” is not very intuitive, the documentation on the machine and software is pretty lacking, and the tutorials aren’t very helpful either.

Even so, with some futzing around I was able to run a test cut and mostly get another design cut out.  Pictures later.

Here are some of the things I learned:

  • After you drop the blade into the machine, be sure the carriage and move all the way back and forth.  It’s very easy to have it protrude upwards very slightly, causing a horrible clacking / grinding noise.
  • I’m not sure if it’s me, the way I loaded the sticky back cutting mat, or some combination, but the large design I cut out was  off the piece of vinyl by about 1″.  I would recommend making sure your piece of vinyl is about as big as the 8×10 cutting mat.  I am not sure, but I suspect the “vertical” direction has a lot more variability than the “horizontal” direction.

I tried to cut things several times without success.  I tried a lot of different ways to get it going, so I don’t know what got me cutting.  At first the machine would beep at be intermittently, and then regularly.  I have no idea what caused that to happen – or why it stopped.

After the machine registration / cutting mat homing procedure, which sounded about as much as you would expect a small plotter to sound, it was surprisingly quiet.  I’ve never used a craft or vinyl cutter before, so I guess I had just built it up in my head.

I’m going to try cutting some more things tomorrow and look forward to posting some more progress.

I’ve cut several medium complexity designs out of HTV and it was incredibly tedious.  I tossed a very complicated design into this craft cutter and it quietly ripped it out like a champ.  For $80 shipped, I would easily recommend this device to anyone who wanted to experiment with a craft cutter and wasn’t afraid to spend some time tinkering with software and settings.

  1. And, later, I had to! []

How to Uninstall McAfee AntiVirus

I got to my computer this morning and discovered a pop-up from McAfee AntiVirus altering me to some nonsense or other.  Without going into all the reasons, I don’t like or want McAfee on any of my computers.  Given when it was installed, I believe it was quietly bundled with the Adobe Reader I installed yesterday (and now uninstalled as well).

I went through the normal process of trying to uninstall a program:

  • Settings
  • Add / Remove Programs
  • Find “McAfee” and click “Uninstall”
  • When you do, you’ll see a small window pop up offering you some promotion.  However, this is where the uninstallation process stopped for me!  The window appeared too small and the text too large and the only options available to me were to close the window (in which case McAfee stays) or click on their offer (which didn’t tantalize me either).  There was no way to scroll the contents of the window to see what else was below their text and offer.
  • I realized there might be more below their offer, so I hit the “Tab” button a few times.  This caused the window to focus on the next button “Uninstall” (in white) on the bottom left and to see the “Go to Offer” (or somesuch, I wasn’t paying attention to it) button on the bottom right.
  • I clicked Uninstall and it hasn’t been back since…

Hope that helps!