Another 3D stamp: QR codes

November 20, 2024 | My Projects | By: Mark VandeWettering

After tinkering with making a 3D stamp yesterday, I thought that maybe I would tinker together a stamp for the QR code that would send you to my resume-ish site mvandewettering.com. I had used the qrcode library in python to generate them before, but it wasn’t clear to me how to use that to generate a vector format that would merge well with my 3d printing workflow. In the end, I decided to just generate the image using the qrcode library, and then construct a series of rectangular prisms for every location which was dark. I thought it would be rather simpler to just write out the individual polygons in ASCII STL format directly. STL can only directly handle triangles, so I output 2 triangles per face, resulting in 12 triangles for each rectangular prism. The main code looks pretty straightforward.

with open("qrcode.stl", "w") as f:
    print("solid qrcode", file=f)
    for y in range(img._img.height):
        s = None
        for x in range(img._img.width):
            p = img._img.getpixel((x, y))
            if p == 0:
                if s is None:
                    s = x
            elif p == 255:
                if not s is None:
                    output_rect(s, x, y, y+1, f)
                    s = None
        if not s is None:
            output_rect(s, x, y, y+1, f)
    output_rect(0., img._img.width, 0., img._img.height, f, minz=-1, maxz=0)
    print("endsolid qrcode", file=f)

The output_rect code is tedious, but not especially complicated.

def output_rect(minx, maxx, miny, maxy, f, minz=0, maxz=1):
    print("facet normal 0 0 1", file=f)
    print("outer loop", file=f)
    print(f"vertex {minx} {miny} {maxz}", file=f)
    print(f"vertex {maxx} {miny} {maxz}", file=f)
    print(f"vertex {maxx} {maxy} {maxz}", file=f)
    print("endloop", file=f)
    print("endfacet", file=f)

    print("facet normal 0 0 1", file=f)
    print("outer loop", file=f)
    print(f"vertex {minx} {miny} {maxz}", file=f)
    print(f"vertex {maxx} {maxy} {maxz}", file=f)
    print(f"vertex {minx} {maxy} {maxz}", file=f)
    print("endloop", file=f)
    print("endfacet", file=f)

    # ... five more similar copies of the code to handle the other five faces

It took me a few trials to get the triangle ordering consistent and the normals specified. It’s not clear to me from any documentation that I had what “proper” means, but I found that specifying vertices in counter-clockwise order as viewed from the outside seemed to work well. Early versions confused CURA substantially, even when it loaded it properly. But eventually I got the following image, colored yellow which is apparently what CURA uses to indicate the model is “good”. I made sure to flip the image left to right so that I could use it as a stamp.

I sized it to about 1.5 inches, and printed it again in PLA. I gave it a light sand with 220 sandpaper. I haven’t printed a proper handle for this so I plunked it down on an ink pad and just pressed it into place.

Yeah, it isn’t quite good enough to actually work. I think a little additional sanding might help, as well as just getting a better inkpad. I am also wondering whether giving a small cylindrical deformation would make it easier to ink, as the pressure would be concentrated. I’ll tinker with this some more when I’ve had coffee. I suspect that benefitting from some other people’s experience in doing this would be good, so some youtube viewing is probably in my future. I also want to try using TPU instead of PLA to see how that would work as well.

I also could try to use a qrcode mode which is larger/has higher amounts of error correction. But I kind of want to keep this reasonably small to make it convenient and easy to use.

Hope you all are having a good day!

3D printing an ink stamp, or “Welcome to Stampy Town, Population Five!”

November 19, 2024 | 3D printing | By: Mark VandeWettering

Apologies to Hermes Conrad.

Further apologies to those who won’t get this Futurama quote.

During COVID, I spent some time in my shop doing more woodworking. At the time I was trying to figure out how I could sign the work that I did, mostly for fun rather than ego (my woodworking skills remain modest at best.) I had read a number of articles online where people designed logos using 3D printing, and had them printed in metal, which I thought was pretty cool. At the time I used OpenSCAD to design a simple logo of my initials, and sent it off to China for 3D printing. Several weeks later I got it back. It was one inch in diameter, and had a very simple version of my initials.

I had originally cast it with a post on the back, with the idea that I would use a die to cut a screw thread on it, and then I would make a holder for it. I found that the sintered metal that I chose didn’t hold the thread very well, so to use it I actually just hold it in some pliers and heat it with a torch. It takes a bit of practice to get the heat just right, but it has worked pretty well. I did find that sanding the front surface helped a bit, but the sharpness is good and I was overall pleased with it. I have thought about submitting a revised version with the screw thread modeled directly into the metal, but haven’t gotten back to doing that, and it is a pretty low priority.

But in the mean time, I seem to have lost the original OpenSCAD file that I used to generate the model. Yesterday I thought I should try to recreate it. Rather than using OpenSCAD again, I thought it would be better to use OnShape, which has become my go-to for designing objects for 3D printing. I began by inking the original metal stamp using an ink pad, and stamping it onto some paper and scanning it. I then loaded that as a reference into SCAD and used it to take some measurements and reconstruct the outlines. It took me about twenty minutes to come up with the model for it.

The new model is pretty close to the original, but includes a number of chamfers and fillets that were not part of the original. I went ahead and 3D printed the disk in the PLA I had loaded, and was pretty happy with the quality, even though I used 0.2mm layer height (the “fast” presets in Cura).

I had originally thought that I should print this in TPU, which would have been a more flexible filament, and therefore which I thought would more closely match the hard rubber that is commonly used for stamps. A little bit of reading suggested that PLA might be a better choice, as it is easier to get detail without stringing.

I needed a handle to help hold this disk. Since I had OnShape fired up, I went ahead and made a quick little handle that I could use that would hold the disk centered. This was the first time I had used sketched curve profiles and the like, and rather than making it as a full surface of revolution, I chose to flatten both sides. This has two purposes: it makes it easier to print without any supports, and it allows you to align and orient the stamp better to make sure its at the angle you desire.

I printed this in the same PLA. I then took some cheap super glue and put the disk in place, trying to orient it the best I could. In version 2, I will probably print some registration bumps to align it even better, but this was a first test.

Initial attempts were pretty spotty, but I got some #220 sandpaper and gave it a bit of work to make it more level. I do wonder if maybe hitting it with some filler primer and then sanding it down might be a good approach, but a few minutes of work, and it improved to the point where I consider the effort a success.

It’s worth experimenting with, and (if you have a 3D printer) costs very nearly nothing. I’ve been thinking of experimenting more with using 3D printing to do other kinds of prints, but this is a good start.

Hope you all are having a good day!

Felines win in the battle between astrophotography and cats…

November 13, 2024 | My Projects | By: Mark VandeWettering

I posted this picture of my little friend Patchouli to the Facebook Seestar group, who decided to settle into the case for that smart telescope.

She got way more hearts and comments than any of the astrophotographs that I posted to the same group over the last few months. I guess I should not be surprised: she’s positively adorable with her little pink nose and pink paws. Perhaps I should abandon my nerdy and scientific endeavors if my goal is to “drive engagement” or “build a community.”

Okay, that’s not going to happen, but it does perhaps lend some perspective to the world. And frankly, it gives me a little bit of hope.

Strategies for coping with problems…

November 9, 2024 | My Projects | By: Mark VandeWettering

I’ve found that there are three basic strategies that have helped me in the past. They are probably not comprehensive, or even the best, but they are pretty simple to remember, and cover more situations than you might think.

I categorize them as Plan, Act, and Ignore.

Perhaps the most productive and generally the best is to plan. You see that in the future there is some issue that you will be facing, and you develop a plan so that when the anticipated outcome happens, you already know what you will do and what the likely outcome will be. This is good because it can help stifle the anxiety of uncertainty. If the hurricane strikes, you know you have food, a backup generator, and an evacuation plan. You put away savings for a rainy day. You perform maintenance on your house and your car. Then, when these things happen, you don’t need to develop a plan at the last minute. You know what you will do, and what the likely outcome will be. You’ve worked to minimize stress and danger to yourself.

The problem with planning as a strategy is that it is predicated on you actually understanding the problem and its likely probability. The world is very complicated, and it is difficult to balance all the possibilities, and develop plans to cover all contingency. You prepared for a hurricane. But a lot of the damage from the recent hurricane Milton was caused by the tornades that struck ahead of the actual hurricane. If you plan for something, you may be ignoring some other risk that turns out to be somewhat surprising. Planning is most effective for the predictable risks in life. Spending a lot of time planning for low-probability or unforeseen risks or events can be pointless and exhausting.

So, the second strategy: you act. In this case, something unforeseen or even unforeseeable has happened, and you need to do something. In cases like this, you may not have a plan, or at least not a complete plan. You need to rely on your resources (intellectual, financial and emotional) to find a course which minimizes damage to yourself and those who are important to you in light of new situations and information. Reusing the previous example: perhaps the hurricane course shifts in the last 24 hours, and your planned place of evacuation is no longer safe. If you are lucky, you may have foreseen this possibility and know several alternatives, or can quickly search for alternatives. When you act, you quickly draw on the best information you have, and chart the best course that you can see as quickly as you can.

I originally thought of this strategy as reaction. But in trying to clarify my own thinking about this, I found that the term implied the kind of thoughtlessness implied by the phrase “knee jerk reaction”. One of my personal mantras is “act, don’t react”. Reaction is the lizard brain attempt to cope with problems, with little analysis or conscious thought. Reaction is the “flight or flight” response that we have, which admittedly is often an effective survival strategy. I don’t mean to denigrate it, in fact, it often can save your life. But if you have a moment, it is usually good to ask “am I just reacting to new information, without actually understanding it or considering it, and do I have time (even limited time) to consider a different course of action?” If so, then action may be the strategy that makes sense.

Lastly, you could simple choose to ignore the problem. This sounds bad. Ignoring problems means they don’t get solved, and unsolved problems can pile up and cause you greater problems in the future. This doesn’t seem like a strategy at all.

But the thing is that the human mind (and certainly my own mind) has a near infinite capability for worry. Worry and stress can have significant negative effects on your body and well being. All this planning and action takes significant energy and resources, and can keep you from relaxing or enjoying what’s going on. Ignoring problems can be a valuable skill, particularly when the problem is not amenable to either planning or action.

As a for instance, years ago my mother was in failing health. I knew that she was going to die within months. I had long term plans for how I was going to cope with the financial practicalities of her care. I also took regular actions to call her daily and to fly up to visit her at regular intervals. But I had to cope with the fact that she’d have good days, and long days. There were times when I was called to act when she had a particularly bad turn.

But no amount of planning or action was going to prevent or even delay the course of her illness. I was concerned about her every day. If I had allowed myself, I could have been concerned every minute of every day. So I adopted a different strategy: I chose to ignore the problem.

That sounds bad, so let me explain my process. My internal monologue basically was “Mom is ill, and will probably die at some point. Is there any plan I could engage in that will stop or delay this negative outcome? (No.) Is there any action that I could take now that will help? (No.) Then I am going to choose to ignore this problem. I am going create a mental closet that holds this problem. I am going to take the worry and angst that I feel, and the ineffectiveness that I feel in not being able to fix things, and I am going to put that problem in the closet. Most importantly, I am going to reopen this mental closet at some specific time in the future (tomorrow, Monday, a week from now) and open that mental door, and relook at this problem, and decide whether there is some additional plan or action could be helpful. Perhaps I will choose to put the problem back in the closet again. Perhaps some new information or change in the situation will make a new plan or action beneficial, and will provide me with a new course of action.”

I don’t believe that you should ignore problems indefinitely. My internal conscience and basic decency would not have allowed me to abandon my mom and simply stop thinking about her. But the ability to carve out some space in my life when I am not pointlessly and unproductively worrying about her was essential to my mental health, if not my survival. One needs to have space to experience all emotions, not just the flight or flight responses that we’ve evolved.

At first, this “mental closet” seems really difficult. But I found that practice, and the assurance that I wasn’t just ignoring problems, that I was postponing worry to gather space and strength, and would address them more productively if my situation changed made it easier as time goes on. In fact, the ignore strategy is just a variation of the plan strategy.

A great number of my friends and family are experiencing angst as the result of the uncertain political climate, as well as numerous other more personal changes in their lives. I get it. I’m right there with you. I decided to write this post mostly to clarify my own thinking. I suspect I’ll be dusting off these strategies with greater frequency in the coming weeks, months, and years. But while I may have been motivated by my concern about the political situation here in the United States, they apply to many sorts of problems. I do not claim them to be particularly universal, but I offer them in the hopes that you might find some part of them useful or encouraging in your own lives.

And remember: when the ship is sinking, put on your life jacket first. If you don’t care for yourself, you won’t be able to care for others. Self care is part of caring for others.

Best wishes, and be kind to yourself and others.

Practical uses for 3D printers…

November 9, 2024 | 3D printing | By: Mark VandeWettering

I’ve been an on-and-off enthusiast for 3D printing for quite some time, but in the early days, it wasn’t what I would call “practical”. They used to be fairly unreliable. In particular, my aging Creality CR-10 had difficulties with bed leveling, and while I kept modifying it to add sensors like the BL-Touch to automate that process, at some point I simply got fed up with it and let it sit. But technology kept increasing, and there are some new consumer level printers made by companies like Bambu Labs which are faster and employ lidar and other fancy bits of tech to print faster than ever before.

As yet, I don’t have one of those. But rather than continue to tweak my CR10, I decided last year to buy a Elegoo Neptune Pro 3, which I got on a Black Friday sale for around $250. And it was much better than my Creality CR10. It’s bed leveling just works, and I’ve done dozens of prints with the only real failures being stupidities of my own. And the quality is quite good.

And, it’s reliable enough that I can design and print parts without taking an entire day. For instance this week I had an issue where I wanted to fix a window that the previous owner had literally screwed shut (presumably as a security measure). I needed to open that window today for maintenance, but he had driven these self tapping screws in very close to the edge, and I couldn’t get a wrench or even a nut driver in very easily to take them out. I didn’t want to replace them in the same way, so instead I designed and printed these little clips using OnShape, a free and web based parametric design software that I recommend to anyone. It may not be quite as capable as Fusion360, but the ability to design parts using any web browser (I use Chrome on both Windows and Linux machines) and have models always available is pretty handy.

Anyway, I designed this part with chamfers and better clearances after taking a few measurements, and printed them in some ASA filament I had lying around, which should be more UV resistant than others. These look tidier and were less annoying than just screwing through the window frame. And should I ever need to back them out, there is enough clearance to just use a nut driver to back them out. I printed four of them in just 25 minutes, taking almost no filament. Problem solved.

Another thing I like to use 3D printing for is to make things like lens caps. I have this old pair of German WWII aircraft spotting binoculars.

They are beasts, but very comfortable to use for astronomy, with large eye relief, adjustable inter-ocular distanc, and a sturdy tripod. I often use them to view lunar eclipses and the like. But what they lack is dust caps. So, the other day I dusted off my OnShape skills and took some measurements, and quickly generated this lens cap model:

I had some white TPU filament, which is quite flexible and which I have used to make a dustcap previously for my 6″ f/4 Newtonian that I made decades ago. The model is a very simple capped cylinder, with a chamfered rim around the edge to add some thickness for enhanced sturdiness. The chamfer also makes them slide on very easily, even though the fit is fairly tight. That means that they don’t fall off very easily either. The TPU is flexible, and even though the thickness is only 1mm, they are incredibly sturdy: I think I would actually have to work fairly hard to tear them apart. I should note that TPU was hard to print on my old CR10, but I’ve had literally no failed prints using TPU, despite it being a very soft and flexible filament.

I mentioned this model to a friend of mine who said that he had long ago lost the caps for his pair of Nikon binoculars. I told him to send me the dimensions and I’d print him some. He lives up on Oregon, so I mailed them up to him, and he mailed me back this photo:

They apparently work perfectly. I didn’t have TPU in black, which would have looked nicer, but hey, they work and will be good at protecting his optics.

3D printing can be really valuable in creating custom items, even if (or maybe especially if) they are low value objects. Think about it this way: how much would you pay to get a new set of lens caps for a set of binoculars? Even $5 seems excessive, but you might do it if you knew they would fit your very special binoculars. But such a thing may not even exist/be available if your particular set is old or rare. Being able to create a version which actually fits for just pennies seems really cool to me.

None of this is very exciting, but I do feel oddly happy having done this.

I still need to take some measurements to do caps for the German binocular’s eyepieces, which have a tapered shape which is a bit more complex. I’ll probably get to that today.

Hope you all are having a good weekend.

Astrophotography for those without huge budgets of time or money…

November 8, 2024 | Astronomy, My Projects, Telescopes | By: Mark VandeWettering

So, in an effort to get back to blogging about things that may not matter in the grand scheme of things, but which provide some measure of joy to me, I present something that I have not blogged about, but which might be of interest to others: my astrophotography tinking using a nifty gadget: the Seestar S50. This little gadget is a highly portable, fully contained robotic astronomy camera that you access and control via a smart phone app (I am using Android these days, using a Google Pixel 6). It has a 50mm aperture (which doesn’t sound like a lot to some like myself who has built telescopes with 12in aperture, and helped refurbish even larger ones) but it’s a very neatly implemented system, and can be used to take not only deep sky projects, but also the moon, the sun (with an included solar filter) and even terrestrial objects such as birds.

The Seestar is a sophisticated (but simple to use) device which works by automatically aiming the telescope at the object of interest and taking multiple short images (10s by default) and then aligning and then adding them up. In 10s, the number of photons collected may be quite small, but over time they add up, and you get clearer and clearer images of the dim deep sky objects. It’s really quite remarkable how well this works. And yet it’s quite easy to use: I took more astrophotos in the first day I had it than I had done in my entire life (admittedly, that’s not a lot, but it’s not zero either) and with better results.

I have posted a few of these pictures on my Mastodon or Facebook feeds, but haven’t posted any here before. I’ll probably pick out some of the backlog shortly and rehost them here, but instead I’ll show you one of the new features that was enabled in a recent app update: Mosaic Mode.

People don’t realize that some objects in the night sky are actually quite large because they are dim, often below what you can see with the naked eye from most locations. The most obvious example is the Andromeda Galaxy, whose apparent angular size is about three degrees, which is about six times the diameter of the full moon. The Seestar’s field of view is about one degree, which means that you can’t get a single picture. But in a recent software update, they added “mosaic mode” which allows you to frame an object that is too large to fit in a single image, and automatically scan over it to assemble an image with a much wider field of view. Last night I tried this for the first time from my home location, a largely suburban location with “Bortle 5” skies. Andromeda isn’t even faintly visible to the naked eye from this location. But the Seestar had no problems locating the object, and once I configured it with the framing that I liked, I set it to go.

After 88 minutes of exposing, this is the image as it appeared from my cell phone. No processing has been done by me, except to rate it into landscape mode.

M 31

The Seestar will also store a FITS format image, along with the JPG image. The FITS image has greater bitdepth, and allows for more aggressive processing. I use the free software Siril to process astronomy images, and with a little bit of pushing and some additional cropping, I turned the above into this:

Above and to the left of the main galactic core you can see M32, and below it the small elliptical galaxy M110. Both are satellite galaxies of M31. To the left of the core of the galaxy is a faint brightining in one of the spiral arms of M31. This is a star forming region designated NGC 205.

It’s astonishing how easy this is, and how (relatively) inexpensive. The Seestar S50 has a list price of around $500, and this required no manual tracking, no staring through an eyepiece, literally just selecting the object using an app, and the gadget does all the hard work.

I’ve used it to image the sun, moon, and numerous deep sky objects. It can image planets like Jupiter and Saturn, but it actually isn’t the best for those (it lacks sufficient focal length to get good detail). But I’ve used it to take pictures of comets, minor planets and even a supernova in a distant spiral galaxy. It’s tons of fun.

Expect more about it in the future. Feel free to add questions or even make requests of things to image.

Hope you all are having a good day.

The arc of the moral universe is long, but it bends towards justice…

November 6, 2024 | My Projects | By: Mark VandeWettering

Or does it?

It’s not like gravity attracting bodies together. It’s not a force of nature. It’s something that we all have to work toward together, because the moral universe is something we can only create collectively. Prosperity does not come at the expense of others. Freedom does not come when we deny it to others.

Life need not be a zero sum game.

I turned sixty this year. The Social Security longevity tables predicts that I’ll live to eighty two. I keep hoping that I’ll see some sign of that arc to trend toward justice, and while I think there have been some positives, I can’t help but feel like there have been at least as many downturns.

I don’t want to be the negative guy. But I also want to be the guy who looks at a world where prejudice, racism and sexism are fading anachronisms, not tools for political success. I would like to see people receive the health care they need, and kids receive food and education. I’d like to see people marry who they love, be recognized for who they are, and where they can make decisions about their own bodies.

The great tragedy of all this is that the path that the American electorate has put all of us on will not make groceries more affordable, or ensure prosperity or health. It will do the opposite. The notion that government is the enemy will become a self-fulfilling prophecy, and will be devilishly hard to reverse.

I don’t think that I will live to see it.

I’m exhausted by hoping for it. I’m exhausted by disappointment.

I do not want to write with skepticism or depression. But that is where i am at today, and where I have been for the better part of the last decade. Just a long, straight road, leading toward darkness, with no way to turn around, and no exits.

I hope tomorrow I feel better. After getting laid off from the job I’ve proudly and happily done for over three decades, I’m trying to figure out what my third act will be. I would like to think that there is something that will grant me some relief from the malaise that has been the dominant theme of this year.

Even as I write this, I can’t help but feel that it is overly self indulgent. There have been many things this year that were awesome. My sixthieth birthday aboard a cruise with my wife, my sister, sister-in-law, and best friend was great. I traveled to Mexico to see a total eclipse, a sight which was so moving it left me speechless. I’ll soon be travelling to see my son and his family for Thanksgiving. Both Carmen and I are pretty healthy (if somewhat prone to anxiety eating).

If someone has some optimism they’d like to share (or a job or project that you think I might find fulfilling) feel free to reach out to me at mvandewettering at gmail.com or via Facebook or Mastodon. And frankly, if there is something that you think I can do for you, either encouragement, knowledge or what little wisdom I possess, also feel free to reach out.

I’ve got a fair amount of free time at the moment.

Mom’s Pickled Salmon Recipe

June 5, 2024 | My Projects | By: Mark VandeWettering

When I was a young, one of the things that frequently had was pickled salmon. Sadly, it was also a recipe that I never bothered to learn, and which my sister and I had thought was lost to time in forgetfulness when she found this recipe hand written in one of her inherited canning books.

Transcribed here:

Pack filleted salmon in plain salt, and wait about 2 weeks, salmon should be stiff. Peel the skin from salmon bottom to top. Slice in 1/4 inch strips. Rinse off excess salt @ 30 minutes. 4 big bay leaf, sliced onion @ 8 allspace, fish layered till jar is full except bay leaf, end w/onion layer. Cover w/ cider vingegar with 1 tbsp sugar per quart. Let it sit fridge as long as you can stand (about 1 day at least).

Some recollections/clarifications of my own. Obviously the initial 2 week salting should be done in the fridge. I was somewhat surprised to find the brine is really just cider vinegar with bay leaf and allspice, I always figured it was more complex. It doesn’t say how much fish to start with, or how much you can expect to use per quart. My recollection is that the amount of onions and salmon are roughly equal. My recollections is to use white onions, although I suspect that yellow sweet onions would also be fine, sliced lengthwise into strips. The way that we used to eat this was basically in a simple sandwich, where you took a single slice of white sandwich bread, then fish out some slices of onion and salmon, fold the bread like a taco and munch.

It’s probably not for everyone, but it will forever remind me of mom and grandma.

April 8, 2024 Total Solar Eclipse From Mazatlan

April 21, 2024 | My Projects | By: Mark VandeWettering

Annoying: the videos which I inserted in here late last night seemed to not be working this morning. Granted it was late and my COVID soaked brain may not be working at full efficiency and I haven’t done this in a while but… I’ll get it sorted out later today.

It’s been sometime since I made any update to my blog. I keep thinking I’m going to restart, but then it delays. Sigh. But some events do occur which make me think that at the very least I should write up some notes, and the April 8th total solar eclipse was one of them.

An old and dear friend of mine, Jeff and I started planning this trip back in August of last year. Originally we had conceived of traveling to Texas, but research indicated that if we tried wanted the absolute best chance of seeing the eclipse, historically Mazatlan, in Sinaloa Mexico was going to be the better choice. It was, however, neither cheap nor convenient. We could not find a reasonably (sub $3K) that would fly us directly to Mazatlan from anywhere reasonable, so we did a crazy flight which involved Jeff driving to meet up with me at my home, then flying OAK->LAX. We ended up spending the night in LAX, then flying learly from LAX to Mexico City, an 8 hour lay over then flying from Mexico City to Durango, where we got in late at night and ended up renting another hotel. In the morning, we drove from Durango to Mazatlan. We had originally reserved two rooms for four nights, but as it happened our return flight (which was our departure just in reverse, Durango->Mexico City->LAX->Oakland, but all in one day) was leaving at 6:00AM, so we had to leave a night early. We ended up convincing our hotel not to charge us for the extra night, and got a separate hotel in Durango. We thought that our hotel in Mazatlan was going to be a single kingsize bed, so we each got a room, but as it happens, our suites were a king+double and we could have easily just used one room. Oh well. It wasn’t cheap, but we did all the traveling outbound without significant problem. Our 3.5 hour drive from Durango to Mazatlan was via a toll road, and was both fast and efficient. The only true excitement was our spotting of a cluster of small puppies (“wild chihuahuas!) that came across the road. They were cute, but I was busy driving and didn’t get any pictures.

Jeff and I each brought an SLR with appropriate filtration. Mine was a Canon T5i that I had purchased used, a snazzy solar filter that clipped on magnetically, and a “Heliofind” automatic solar tracker. The notion of the tracker was that I wanted it to automatically track the sun, and therefore would free me from the problem of actually watching the camera and adjusting it. My idea was to automate all the exposures using a program called “BackyardEOS” because Jeff had previously used the Nikon version during the 2017 eclipse that he viewed from Madras, Oregon. I had purchased an appropriate 15ft Mini-USB cable, and had done some previous experiments. As a backup plan, I had experimented with adjusting exposures manually, and tripping it with an inexpensive intervalometer. I had done tried this before during the October 2023 annular eclipse that we did as a dry run/practice. (I should really get those pictures here too).

But during our couple of days in the windup to the eclipse, I did some additional testing in our hotel room, and one thing became obvious: that BackyardEOS wasn’t really designed for eclipse photography. In particular, it had no idea what time the eclipse was, or even what time it was. If I wanted to preprogram a “plan” for the eclipse, I’d have to set it up, and test it manually/repeatedly. We experienced some situations where the software got ahead of the cameras ability to keep up, and then would lock up, which I thought would be stressful at minimum and disasterous at worst. So, I sought another situation.

I decided to use the program SETnC for my windows laptop. https://robertnufer.ch/06_computing/setnc/setnc_page.htm

It had a number of advantages and gave me some confidence that it might work better. It was designed specifically for eclipses, and had the data from the April 8th eclipse. Once I entered our latitude and longitude, it determined the exact time for our local circumstances. I then set it up to take a set of three exposures every five minutes during the partial phase, then about eight seconds ahead of second contact, to eight seconds after, it would snap a picture every second to catch “Baily’s Beads” and “the diamond ring”, and during the 4 minutes of totality, it would cycle with images from 1/1000 to 4 seconds. We bracket these exposures so long in an attempt to catch both details of the prominences, as well as details of the corona, and even (potentially) earth shine. I had originally intended to shoot these in RAW+JPG mode, but it was clear that my aging camera couldn’t keep up with my desired pace. With some reluctance, I set the camera to capture merely JPG pictures. In retrospect, I wonder if part of my poor performance is really due to the relatively pedestrian write speed of my budget SD cards.

Note to self: before next eclipse, do more extensive testing of write speeds of better cards, to see if I can do raw mode with a better card.

All photos were shot with a basic 75-300mm telephoto (about $150 new) at f/8 and ISO 100.

Or, at least that was my intention. I had two small problems:

Note to self: setting the ISO mode was tricky. On the day of, the first few minutes during partial eclipse set ISO to AUTO instead of 100. This was probably undesirable, and made the exposures rather hard to predict, and many of those photos seemed to be overexposed. It’s better to leave fewer decisions to the automatic camera settings. Make sure that ISO is set properly.

Additional note to self: I didn’t actually set the zoom to the full 300mm of the camera, despite that being my attention. I suspect that this was because I shot some quick test shots of the beach at a more modest zoom setting (230mm) and then never reset the camera. The extra 25% image scale would have been good to have.

Another note which I thought was odd: the SETnC program doesn’t understand local time zones. You have to set your laptop to be in UTC or it won’t do the right thing. This was less than entirely convenient, but once I realized that, it wasn’t hard to get it to do do what I wanted.

I did some test runs the day before, and had increasing confidence that it might do something good. It was exciting.

But the weather forecasts were… not promising. The weather maps indicated a band of clouds very closely followed the track of totality. We decided that on the morning of the 8th, we’d get up early and decide if we wanted to drive out of town, or risk it out near the beach. I was up at around 4:00am, couldn’t get back to sleep. We had arranged to meet with Jonathan (a geocaching acquaintance of Jeff’s) at 7:00 to make the final determination.

We had some high clouds that ranged from “very thin” to “troublingly dense”. We weren’t sure what was going to happen, but decided that it was probably no more likely to get better circumstances within an hour of driving, and there would be additional risks. We decided to setup at our hotel. About 9:00am, I headed down to scout.

Our hotel (the Palms Resort of Mazatlan) had been a pretty lively “party hotel” for saturday and sunday, but this was Monday, and seemed to be a bit more calm. We had a couple of places on the pool deck that looked like it could have been okay, but we instead decided to shift to the adjacent hotel’s pool deck, and set up.

I began to get hopeful. While there were still high clouds, they didn’t appear to be too dense. When partiality began, I had my laptop ready, my mount was tracking, and I had focused the best I could. (I did manual focusing, as I was not sure the autofocus would actually do better). I had the computer setup, but also rigged up the intervalometer/remote camera release. I was pleased to find that even while the computer was in control of exposures, I could also trigger the shutter by hand. I wasn’t certain that would work.

Here I am with 15 minutes to go:

Once the partial phase had begun, i had three issues:

First, the Auto ISO issue I mentioned above. I had temporarily paused the automatic mode of SETnC, did a tweak, and then set it running again. Oddly, it then reran all the events which had occurred up to the current time, but then seemed to be acquiring the new photos in the right node. No harm, no foul.

Secondly, I did manage to get the software into its “test” mode. In test mode, it advances the clock to the time just five seconds before the next “event”. This is helpful when you are testing the day before, but it was somehow triggered accidently, probably because it was hard to read the screen of my laptop in the son.

Lastly, when I took it back out of “test” mode, for some reason it informed me that it wouldn’t do any additional partial phase photos for 8 minutes. This was because in test mode it had thought it was 8 minutes later, and so those things were “done”. This is where my intervalometer/camera release came in handy. I just snapped individual photos at more or less random intervals until the software plan caught up to “real” time.

There continued to be high clouds, but through our mylar glasses, would continued to be able to see the clear partial phases. Here is a (lightly) post-processed image of the partial phase, showing the most prominent sunspot.

Jeff had setup his Gopro beneath his camera tripod, aimed out at the ocean and later uploaded this footage of the entirety of totality (or is that the totality of entirety?) In real time, it’s hard to see the upcoming lunar shadow (approaching at something like 1500mph) but if you scrub through it you can see it pretty clearly.

https://youtu.be/_uvY844okfc?si=xZSppEzsWDOzz2k4

As the countdown got closer, the quality of the light got strange, and then dimmer. At about 12m45s into the video, you can hear me call out that “it’s going!” and then around 13m10s, totality begins.

My camera setup worked really well. I shot 410 photos overall. Here is the best of the best, cropped from their originals, but processed only very minimally.

I had time to record some video of myself. Pardon my language in the first little bit. I didn’t think my Google Pro 6 would do a good job of recording the eclipse, so instead I just recorded a selfie of myself, talking about what I was seeing. I must admit: I was oddly emotional. I’m not the kind of guy who never cries, but neither is it a common occurrence. In the background you can hear the voice of an opera singer, who was standing near by and decided to sing. It was amazing. It’s hard to describe the actual appearance of totality. The combination of the super-bright “bailies beads”, with the halo of the corona against the dark sky, the appearance of Venus and Jupiter. It was indescribable.

And then, four minutes later, it was over. I was enormously excited to get back to the hotel room to see how the pictures turned out. I was enormously pleased. WIthin an hour I had my first photo up on Facebook, and it appeared that I may have had one of the earliest photos, and while the pictures weren’t the most astounding technically, I was pretty damned happy and proud that they had worked out. Pretty awesome for a first time eclipse photographer.

We had a blast. It was great to spend time with my friend Jeff, and my new friend Jonathan. We ate a lot of Mexican food, and enjoyed ourselves throroughly. We both caught COVID on the way back, which accounts for some of why this account is a bit late, but it was totally something that ticks my bucket list. Thanks to Jeff for being my stalwart friend and traveling companion, and I urge anyone who can get in the path of totality to try to do it.

Truly fucking amazing.

Restarting the brainwagon blog?

July 18, 2023 | My Projects | By: Mark VandeWettering

I wonder if i trained a large language model on the contents of this blog and used it to generate new posts, whether it would generate interesting enough stuff to at least shame me into creating new posts?

This would require that I actually learn something about this topic at least. Although it probably would also require some hardware that I currently don’t possess.

brainwagon is 20 years old today!

July 21, 2022 | My Projects | By: Mark VandeWettering

It was twenty years ago today that I first posted something to my brainwagon blog. While I have sort of fallen out of the habit of posting to this site, it still remains as an testament to my inability to concentrate on a single topic for more than a couple of days. I keep thinking that I should stop posting to Quora, and should instead refocus my efforts to the sorts of things that I used to routinely blog about, but I haven’t quite gotten back into it. It’s not that I have stopped doing nerdy things. I still am doing woodworking. I want to get back to rebuilding my first telescope. And I’ve spent more than a little time building a “homelab” computing setup. But I haven’t mustered the degree of concentration and the sense of community that used to drive me to blather on inside these pages.

Oh, and I have been caring for stray cats too.

I hope all of you are well.

Experimenting with ESP8266/Tasmota Firmware…

January 23, 2022 | My Projects | By: Mark VandeWettering

Hey gang, I know it’s been quite some time (since last May apparently) since I posted anything new on the blog. It is not that I haven’t been doing projects. The continuation of the COVID-19 pandemic generally means that I’ve had a lot of extra time, and have been tinkering with a bunch of different projects and learning new skills. I just haven’t felt much like writing them up.

But I realize that I miss some of the interactions that writing a blog brought about, so maybe it would be good to write up a detail or two of some of the projects. We’ll see how successful I am.

Today’s projects will center around microcontrollers based around the ESP8266 (notably the WEMOS D1 Mini are some of my favorites) and the Tasmota firmware.

The WEMOS D1 Mini

If you haven’t encountered the ESP8266 microprocessor before, you can use google, but the basic idea is that it’s a small controller which is both very cheap and allows access to WiFi. They come on various boards, but one of the most popular is a small board which is called the Wemos D1 Mini. I’ve used them in a few of my own projects before, including an internet enabled clock and my old half life clock that I built a while ago. Did I mention they were cheap? You can get five of them for $17 or so from Amazon. That’s even cheaper than clone Arduino Nanos, and did I mention they have Wifi? They have Wifi.

Programming with platformio

The Arduino has been popular in part because it has a friendly set of libraries and an IDE that can be used to program them. It turns out that with a little work, you can pretend that the ESP8266 is just a different type of Arduino, and all your skills could transfer into programming these things.

But I prefer to http://platformio.org which is a more command line driven approach. You still program the same way, but you can use your favorite editor (vi for me) to create the source code, and can compile and install using simple command line tools. It also provides convenient access to a lot of different libraries.

Using platformio I had created a bunch of different projects over the years. For instance, I created this clock to download ISS data from the Internet and provide a small display with the location of the ISS.

I’d also made clocks, and a variety of adhoc sensors like https://brainwagon.org/2018/12/09/how-not-to-code-an-simple-iot-sensor-and-a-new-task-list/comment-page-1/. But each time I wanted to do a fairly simple sensor project, it kind of meant an afternoon of programming. Granted, not particularly difficult programming, but neither was it trivial. I kind of wish there would be a simpler way I could attach a simple sensor to the esp8266, and get it routed to a server for logging, graphing or data analysis.

Tasmota Firmware

A couple of weeks ago, I was doing my usual browsing/tinkering, and encountered something which I hadn’t considered before. https://github.com/arendst/Tasmota is a firmware that can be downloaded to ESP8266 (and more modern ESP32 boards) that are often used for IOT peripherals. I had used it before when I experimented with SONOFF switches. Here’s the product page. These are cool because using them you can create a switch which doesn’t rely on any cloud architecture to run: you can control it with simple MQTT or HTTP messages. But I had missed a couple of things that I hadn’t realized before.

First of all, you can install the Tasmota firmware very easily on the WEMOS D1 Mini. The easiest way is to bring up the Tasmota Web Installer on chrome, and select any one of a bunch of precompiled versions of the Tasmota firmware, each with different sets of potential sensors or capabilities. You then simply add your sensors to the board, fire it up and configure it’s wifi and MQTT settings, and you have a capable little sensor.

The first of the many applications that I saw was actually something I was interested in. Ikea sells an air particle sensor box which costs just $13.00. This is considerably cheaper than some of the other sensors I’d experimented with before. But out of the box, it just lights an LED bar to indicate the air quality (green for low, yellow and red for higher levels). By itself, that sensor is not particularly useful. I want to have quantitative data, and to be able to log the data to an MQTT server.

Luckily, someone had done the heavy lifting before me.

A quick trip to Ikea purchased a pair of these little guys. This afternoon, I opened one of them up and did the necessary modifications to add a WEMOS D1 Mini with the appropriate firmware.

I could have added another sensor directly in case (there is plenty of space) but I chose to simply create a second WEMOS that used a SHT30 temperature/humidity sensor that I had a little carrier board for. Both send their data to an MQTT server.

Node Red front end

I could have written a little Python script to slurp up data from the MQTT server and produce graphs and the like, but there is an interesting alternative: Node Red. It’s a sort of graphical programming system that allows you to wire up data sources (like MQTT inputs), process them in various ways, and send them to various other outputs. It is also a convenient front end for creating UI elements that respond. After an hour or so of tinkering, I had the following:

Node Red UI elements

Not too shabby. I experimented with similar things before, and also had the data injected into an InfluxDB database, which provides for linger term storage. I’ll probably work that up again.

A couple of years ago, I also did similar data logging using the INA219 voltage/current sensors on a small solar power setup that I created. At that time, I used custom firmware but I now believe that I could do the entire project without any of that programming. I could simply make a couple of small modules that run Tasmota, and do all the data logging with MQTT and Node Red.

I also discovered that the Tasmota firmware also can serve as a controller for a display device. I had an 8 digit 7 segment display controlled by a MAX7219 chip, which is one of the potential displays that the Tasmota firmware knows about (it also nows about a variety of E-ink and TFT displays). You can send commands to the board using HTTP or MQTT to tell it to send information to the display. In a few minutes, I had it displaying the time, essentially making a small internet clock. That seems pretty cool. I ordered some small OLED displays that I can do more experiments with. I’ll probably need to compile a custom version of firmware to use both the sensors I want and the displays, but it seems like an interesting thing to play around with.

Future tinkering

It’s a fun thing to play with. Inexpensive sensors and displays, wired into your own servers, with little-to-no programming. I like it, and will be looking for other possible projects to make use of my new knowledge.

Hope some of you found this interesting.

A cornucopia of updates…

May 19, 2021 | My Projects | By: Mark VandeWettering

Sigh. The new version of WordPress is doing stupid things with images. I’ll fix them later.

Okay, so roughly a month ago, I said that I was interested in rebooting this blog, and then once again I lapsed into silence. It’s tough to make something a new habit, even if it is something that you wish to do. But it’s not because I’ve had a lack of new things that I’ve been working on: it’s simply that I’m out of practice in terms off writing about them. Rather than try to frame each of these different things into a consistent, well framed narrative, I am simply going to dump out some of the things that I’ve been working on.

I’ve been interested in writing emulators for old computers for quite some time. In the past I’ve written an emulator for the DEC PDP-1 so I could run SpaceWar!, one of the very first video games. A couple of years ago I wrote an emulator for the 8080 microprocessor so I could make an emulator for the original Space Invaders games. It worked rather well. While goofing around a few weeks ago, I tried to recompile it, but had some difficulties which I eventually ironed out. I also relearned a small amount of the subtleties of that hardware which I had forgotten. Nifty. But it also got me back into being interested in writing another emulator.

I had already been doing some research into the old Atari arcade game Battlezone. I had long wished to actually understand more about how this game managed to achieve the 3D graphics which were quite revolutionary for its time. I had also considered trying to figure out how to extract the vectors that it draws, perhaps with an eye to creating a bit o hanging wall art using EL wire and the vector shapes. Luckily, a bit o work on the internet lead me to the vector ROMs and how the backdrops were encoded. This, combined with some very simple (and very slow) vector rasterization code I wrote lead to me extracting some very cool outlines directly from the arcade roms.

That was fun. I briefly considered writing a full emulator for BattleZone, but it seemed difficult because while the main processor for the machine was my old familiar pal, the 6502, it also included a custom processor that was designed to handle the math necessary to render the tanks in 3D.

So instead I embarked upon creating an emulator for the Atari game Asteroids. It too had a 6502. I started trying to write my own emulator. It’s pretty straightforward to do a half-assed job of this, and I got about 60% of the opcodes implemented before I got grumpy, and decided to cheat by using http://a rather nice little 6502 emulator core which was placed in the public domain. Over the next several days, I managed to get most of the emulator cobbled together while watching Psych reruns. It started out pretty rough. In particular, deciphering the abstract functioning of the vector generator took me a while to sort out.

But I eventually got it sorted out. Note: the 6502 emulator above doesn’t have a proper implementation of BCD mode in the 6502, which makes the scoring incorrect until you sort it out. In the end though, I got it working.

In other news, I went to an estate sale and got a couple of other goodies, including an antique PS&W draw knife, an old Vlchek auto wrench, and a very large (75 pound) Rock Island No, 574 vice.

I cleaned up the draw knife with some 320 sandpaper and WD-40, and it turned out pretty nice. I soaked the wrench in some vinegar for 18 hours, and then hit it with a wire brush and it turned out well. The vice is a work in progress. I disassembled it all to base components, and in the process got tons of old grease all over my workbench. What a mess. I applied some Citristrip to bring the entire thing down to bare metal, and now the project is stalled while I consider how I’m going to finish the vise. Here is the new one with a smaller Babco vise for size comparison.

In other news, we’ve been taking care of a couple of feral cats whom we’ve named Whittaker and Patches. Whittaker is a 10 year old male. He got into a fight with something six or eight weeks ago, and we ended up trapping him and taking him to the vet, where he got some antibiotics and was neutered and microchipped. He tested positive for FIV, which makes him not a good candidate for adoption given that I have two indoor cats already, so he’s back out roaming. Patches is a female who was obviously pregnant around the same time. We’ve suspected that Whittaker is the daddy for a long time, given that they occasionally show up together. She was obviously nursing for some time, but we hadn’t seen the babies. Until yesterday.

Patches and Whittaker showed up with five kittens, three of them sort of patchy (although with little orange that we see in mom) and the other two inky black solid color. My guess is that they are 8-10 weeks old. We are trying to see if we can lure them all down again at once so we can have them trapped, get mom fixed and maybe see if we can get the babies rehomed before they go full feral.

I’m running out of energy, but a couple of weeks ago, I was experimenting with creating anthotypes. They are a photographic process that uses non-color dyes, usually derived from plants. Of particular interest to me was using the spice turmeric. You can create a solution of a non-color fast yellow dye by dissolving some in alcohol and painting it onto paper. You then can sandwich a “negative” (which is actually a positive) which I created by printing a black and white image onto some clear transparency, and then exposing it in the sun for around 40 minutes. The yellow bleaches out and yields a yellow print which has very low contrast. But you can “develop” this print in a solution of borax and the yellow will turn a darkish brown. The print is still low contrast, and has questionable longevity, but it was a fun afternoon to give this a whirl.

Anyway, Patches is now out back and looking for some food, so I think I’ll give her some and prep for work. I hope you all are having a good week.

Welcome back…

April 21, 2021 | My Projects | By: Mark VandeWettering

Okay all, it’s been a while. If anyone is reading this, then welcome back to the brainwagon blog.

I’ve been blogging off and on for about fifteen years, but in the last year have found that it’s basically been hard to do anything meaningful here. Between the COVID-19 pandemic and the unfortunate illness and passing of my brother, I just haven’t had the mental energy to write about the kinds of things that I enjoy.

But I’m trying to regroup, and you might begin to see new content here. I’ve decided to abandon my pointless endeavors on Quora which have taken a bunch of what little time I had, and have decided to try to refocus that energy (which has become more about repelling bile and rancor than doing anything fun) and to find a new way to express myself in positive ways.

At the moment, I’m reconsidering everything. This blog may actually change form into something else, using some technology other than WordPress. Or, maybe it just be restructured and restyled to inspire me more. I haven’t decided.

If you are someone who has read my stuff in the past, and has suggestions of technology or techniques to stimulate your creative muse and/or organize your creative output and get yourself in the habit of creation, then feel free to mailto:mvandewettering@gmail.com and let me know. Or just to say hi.

Try not to sign me up for spam though.

I feel like I need a fresh start. I hope to find one.

Updating themes…

July 31, 2020 | Blogging, WordPress | By: Mark VandeWettering

I am a fairly basic guy, with fairly basic graphic design tastes. I haven’t done a great deal to customize the appearance of my blog over the years, but recently I’ve been revisiting what is possible in newer versions of WordPress. This means that I’m tinkering with both the look and the functionality that are available on the blog. I may return to the “brainwagon classic” theming, or I may embark on a process of moving the furniture around in ways that you think is pointless. You are almost certainly right. Complain bitterly in the comments if you think I should have left well enough alone.