Wideband Transmission #8

Another 10 mW WSPR Beacon

I enjoy writing up my projects, but it's much better to get feedback to see that someone was actually able to take my writing and successfully duplicate my project. Via the Etherkit Twitter account, I received this from Tom Hall, AK2B regarding my last posted project:

Awesome work! Tom has been a great supporter of Etherkit from the beginning and I'd like to thank him for sharing his neat creations with the rest of us. It's wonderful to see such a minimalist design perform so well!

More Coding Resources for Fun

I haven't had a ton of free time here, but I do get snippets of time occasionally where I can sit with my notebook PC for a bit and mess around. As mentioned in some recent posts, I've been revisiting coding for fun, and I've stumbled upon quite a bit of new resources that are new to me and that I thought would be good to share.

The first one I'd like to mention is called Scratchapixel. I was curious about the mathematical methods behind 3D rendering, and some searching brought me to this exhaustive tutorial site. It's not 100% complete yet, but most of the fundamentals of 3D graphics are already well-explained there. A fantastic resource if you are curious about the first principles of 3D rendering like me.

A related site is called Shadertoy. Not by the same people, but also related to the topic of learning 3D programming. Shadertoy is a web application that lets you play with shaders in C++ inside a web IDE that can be updated on-the-fly. It takes a bit of CPU and graphics horsepower to run comfortably, but if you've got the capacity, it's worth browsing the demos on the site just to see the cool stuff you can create with it. This tool was created by Íñigo Quílez, who also has a really cool home page with lots of tutorials and whitepapers. If you like demoscene stuff, then definitely check it out.

Another neat find that I only recently discovered goes by the name of Rosetta Code. It bills itself as a programming chrestomathy site, which basically means that it's a way to learn how programming languages are related in a comparative way. There is a large directory of different programming tasks, and each task page lists ways to implement a solution in a wide variety of languages. It's a wiki, so not every page has every language implementation, but there's obviously a ton of work put into the site, and most tasks have implementation in the major languages. Really fascinating and useful at the same time.

Finally, there's The Nature of Code. This site hosts a free e-book download of the content, and provides a link to purchase a dead tree version if you wish. Here's how the website describes the book:

How can we capture the unpredictable evolutionary and emergent properties of nature in software? How can understanding the mathematical principles behind our physical world help us to create digital worlds? This book focuses on the programming strategies and techniques behind computer simulations of natural systems using Processing.

That sounds right up my alley. I haven't read the book yet, but I have skimmed it a bit, and it looks like the kind of things that I love: non-linear systems, physics simulations, fractals, and the like. When things settle down here a bit, I may tackle the book and re-write the sample code into Python. That would give me some more Python practice and force me to really think about the algorithms behind the text, not just blindly copying, pasting, and executing the scripts.

Let me know in the comments if you found any of these links useful or fascinating, or better yet if you know of other links in the same vein.

New Miles-Per-Watt Record Opportunity?

If you regularly follow science news, you may have heard of the Breakthrough Starshot initiative. In short, this is a study to create pathfinding technology that would allow the eventual launch of micro-lightsails with tiny mass to the Alpha Centauri system at a significant velocity (0.2c!) with a ground-based laser array. It's probably a serious effort, as it is being privately funded to the tune of a whopping $100,000,000. No doubt, an extremely audacious undertaking.

Sounds interesting, but what does this have to do with radio? Well, obviously there's the issue of how you can get a usable signal back to Earth across a distance of 4-and-a-half lightyears from a craft that masses in 10s of grams. I was wondering about that exact engineering challenge when I came across this article in my feed reader today. It turns out that someone has studied how one might use the Sun as a gravitational lens for lightwave communication across interstellar distances. Claudio Maccone, an Italian physicist, has run an analysis and has determined that putting a receiver at distance of at least 550 AU from Sol will give the desired lensing effect for optical communications.

Speaking before Maccone at the Breakthrough Discuss meeting, Slava Turyshev (Caltech) pointed out that the gain for optical radiation through a FOCAL mission is 1011, a gain that oscillates but increases as you go further from the lens. This gives us the opportunity to consider multi-pixel imaging of exoplanets before we ever send missions to them.

That's kind of amazing. Maccone calculates that the bit error rate of optical communication from at any significant distance from Sol quickly degrades to around 0.5. However, by using the Sun as a lens, the BER stays at 0 out to a distance of 9 LY. Here is a graph of the effect of standard comms and those enhanced by using the Sun as a gravitational lens, as calculated by Maccone:

fig024

What's really crazy is this next paragraph:

But as Maccone told the crowd at Stanford, we do much better still if we set up a bridge with not one but two FOCAL missions. Put one at the gravitational lens of the Sun, the other at the lens of the other star. At this point, things get wild. The minimum transmitted power drops to less than 10-4 watts. You’re reading that right — one-tenth of a milliwatt is enough to create error-free communications between the Sun and Alpha Centauri through two FOCAL antennas. Maccone’s paper assumes two 12-meter FOCAL antennas. StarShot envisions using its somewhat smaller sail as the antenna, a goal given impetus by these numbers.

So that would have to rate as the ultimate QRP DX, eh? I'm not sure how realistic any of this is, but I'm pretty sure the physics are well-established by now. Kind of makes the Elser-Mathes Cup look like small potatoes.

 

SOTA After Action Report - Sheridan Peak

Thanks to the efforts of Etienne Scott, K7ATN, we who live in the Pacific Northwest have a couple of nice SOTA summit-to-summit activity days each year. One that happens in early spring and if I remember correctly the other which occurs later in the summer. I participated in the spring S2S Party two years ago, but haven't had a SOTA activation since.

As mentioned in a previous post, things have been kind of crazy here lately, and Jennifer has been encouraging me to get out to do something I enjoy, so I decided to take this Saturday to participate in the S2S Party. I was considering Bald Peak, which is just on the outskirts of the Beaverton-Hillsboro area, and makes for a quick and easy trip, but by the time that I went to Sotawatch to claim it, I noticed that K7ATN had already done so. Thanks to SOTA Maps, I was able to easily browse some other peaks relatively close, and settled on Sheridan Peak, especially since a previous trip report tagged it as a fairly easy drive and hike.

I needed a travelling companion, so I asked my 5-year-old son Noah if he wanted to go, and he eagerly agreed. I wasn't sure if that enthusiasm would hold up during the trip, but at least because of the short hike to the summit, it would be easy to bail out if necessary. So we departed the house at around 9 AM, stopped by McDonalds for a light breakfast and a large coffee for me, then took the backroads of Washington and Yamhill Counties out to Sheridan Peak.

IMG_20160423_084924

The drive was uneventful, other than my phone's GPS getting a bit lost at the very end of the trip. However, the driving directions from the two previous write-ups of this peak on pnwsota.org were great and got me right to the parking lot. Actually, the gate to the parking lot was closed, but that was OK because there is a nice big turnout on the road immediately below it, so we just parked there and walked around the closed gate.

IMG_20160423_105332

IMG_20160423_105406

The hike up to the summit was quite easy, and Noah did well for one of his first actual hikes. Unsurprisingly for a peak in the Oregon Coast Range, the weather was damp and showery. Although we didn't have much of a view from the top due to the forest, one big advantage of that was the canopy over our heads providing a bit of a break from the rain.

IMG_20160423_110015

Fortunately, I was prepared for the rain, and I quickly erected a tarp shelter for us to use to take cover from the elements. It was actually fairly cozy under the shelter, as another advantage of the tree cover was that it was acting as a nice wind break from the usual chilly blast you get on a peak.

IMG_20160423_114820

I don't currently own any HF portable gear, but thanks to the generosity of W8NF, I was able to borrow a Yaesu FT-817 and Elecraft T1 tuner. A few days prior to the activation, I cut a random wire and counterpoise that would at least work on 40 and 20 meters, and tested it in my backyard. That turned out to be a good thing, as I was able to get my wire in the tree and get the 817 QRV with no problems at all. I also brought along my Baofeng UV-5R with rubber duck/tiger tail combo for 2 meter FM ops, with the 817 as the designated backup if that didn't work.

At the designated time of noon local, I heard K7ATN full quieting on 2 meters (which wasn't a huge shock, as his peak was only about 20 miles away from mine). There wasn't a huge turnout for this activity day like there was a few years ago when I did it on Cooper Mountain, but I did manage to make four S2S QSOs on 2 meter FM with the UV-5R in order to officially activate the peak. Woo! After that, I switched to 40 meters LSB on the 817 and made a couple of S2S QSOs with stations that I had already talked to on 2 meters and one with a local chaser. Finally, I had K7ATN spot me on 20 meters and managed to squeak out a couple more SSB QRP QSOs, both with stations in Arizona. By then, Noah was getting a bit cold and wanted to get going, but I was pretty happy with the results. From the sounds of things on 2 meters, a few of the other activators had some pretty crummy weather conditions to deal with, especially NS7P on Mary's Peak.

IMG_20160423_130340

So after about an hour on the peak, Noah and I packed everything up and headed back down the half mile or so to the pickup. I was very proud of Noah, as he did great for a 5-year-old; never really complaining and obviously really enjoying being out in nature, plus I think he liked the radio activity as well.

I'm really happy to have made this activation, especially since I was able to get Noah involved in both an activity out in nature plus radio fun! Thanks again to K7ATN for all of the hard work that you put into the PNW SOTA community and the rest of the activators for getting out there in this wet spring Oregon day. Stay tuned for hopefully one or two more SOTA activations this year, hopefully with more family members coming along on future trips.

Edit: Here's a recap of the event from K7ATN.

200,000 Miles Per Watt

If you wouldn't mind, I would like to draw your attention to my latest post on the Etherkit App Notes blog. In it, I detail how to create a 10 milliwatt WSPR beacon using nothing more than the Etherkit Si5351A Breakout Board, an Internet-connected PC, and a low-pass filter. A simple project, but one that gives quite a bit of fun testing the ionosphere given the cost and complexity.

Selection_104

I don't want to take away from the post, so I will advise you to go there to read it, but the bottom line is that with about 10 mW, I was able to get a signal decoded over 2000 miles away. I remember reading the old exploits of the QRPp gang in books like QRP Power, where you had to be really dedicated, organized, and good at decoding CW in the worst conditions. Now, we have the luxury of a mode like WSPR, which lets us do milliwatt propagation experiments without breaking a sweat.

One idle thought I had about this is whether it would be feasible to put this transmitter on the 13 MHz HiFER band (check out Dave AA7EE's excellent treatment on the matter) and whether that would be something that would be fun and useful for schoolkids to experiment with. Of course, it's technically feasible, but I would want to be sure that 1) it's legal and 2) there would be interest in doing it. A single PCB could be made with one Si5351A output attenuated to around 4.6 mW and low-pass filtered for transmit, while another output could be used to drive a simple fixed-frequency receiver based on the SA612. Let me know what you think about this in the comments.

Si5351A Breakout Board TCXO Upgrade

I'm pleased to announce an upgrade to the Etherkit Si5351A Breakout Board with TCXO reference oscillator. In boards manufactured previous to today (and the ones kitted in the initial crowdfunded initiative), the TCXO used was a Fox FOX924B-25.000. It worked well and did the job it was supposed to, but has one flaw in certain situations. The compensation loop in this particular TCXO has relatively wide frequency adjustment steps that can become obvious when using the Si5351A Breakout Board in a very narrow band mode such as QRSS. Here is a screen capture from Argo showing the behavior of the Si5351A Breakout Board with the Fox TCXO when outputting a carrier on 28 MHz, from a cold start.

Fox FOX925B-25.000
Fox FOX925B-25.000

As you can see, as the TCXO is stabilizing to operating temperature, the compensation circuit adjusts the frequency in relative course steps of around 3 Hz or so. Once the TCXO is warmed up, it jumps around less often, but still does occasionally have to frequency correct, and does so in a jump of similar size. This TCXO is still fine for most other uses, such as a VFO for a SSB/CW radio, but doesn't work so great for the MEPT modes, especially on the upper frequency range of the Si5351.

In the course of developing OpenBeacon 2, I determined that I would need to find a more suitable TCXO to use with the Si5351. After trying about five different oscillators, I finally found a fantastic substitute, and it only costs a bit more than the Fox TCXO. The Abracon ASTX-H11-25.000MHZ-T comes in a smaller package than the Fox FOX924B-25.000, but it will still fit on the footprint for X1 on the Si5351A Breakout Board. Here you can see the same test as above run for the Abracon TCXO.

Abracon ASTX-H11-25.000M
Abracon ASTX-H11-25.000M

It seems to find a stable frequency very quickly, and more importantly you can see that the compensation loop seems much tighter, with frequency corrections coming much faster and in smaller increments. You can only barely see a bit of fuzz from the frequency corrections on this low-bandwidth plot. This is much, much better for the MEPT modes.

As of today, all of the Si5351A Breakout Boards with TCXO option sold in the Etherkit store will have the Abracon TCXO, and the price will stay the same at $15.

Wideband Transmission #7

More Musings about Etherkit's Future

As I mentioned in my previous post, we are still undergoing a stage of tremendous upheaval in our household. I won't really know how our new life will shake out quite yet, but I am certain that my time will be more restricted. I think I'll have a good grasp on the extent of this within a month or so. In the mean time, I've been thinking about Etherkit. It's a bit weird to air this out on the blog, but I think it would be good for others to hear my thoughts about this and have the chance to offer feedback.

The assumption is that I'm going to have less time to work on Etherkit (the only real question being how much less time), which means that if I do have enough time left to continue with the business I will need help by either outsourcing manufacturing or finding someone to bring on as a partner. If possible, I'd like to go that route, as I'm not really ready to see Etherkit fold up yet. This would also require more funding, so I would probably have to find a way to raise capital via the sale of equity, or perhaps I could crowdfund enough on a future product to keep things afloat.

Right now I have in the product pipeline OpenBeacon 2, which is perhaps 80% finished (most of the remaining work is in firmware), and a handful of small useful RF modules. On the drawing board I have a couple of QRP transceiver designs utilizing the Si5351 that would definitely fall into the category of cheap and cheerful, and would probably be a lot of fun to bring to market. Also, since OpenBeacon 2 is based on the Arduino Zero, I've been discovering the power of the Atmel SAMD series of ARM Cortex-M0+ microcontrollers. I'd love to develop a dev board derivative of the Arduino Zero using some of the SAMD line that have a bit less flash storage and consequently are a bit less expensive. I think hams (and other hackers) would really like such a device.

The other option is that due to time constraints I just cannot realistically continue Etherkit as an active business (at least regarding retail sales of physical stuff). If that happens, then I would still like to stay active in some way, under the restrictions in my available time. Perhaps writing may be a good choice, since that is quite portable and can be picked up and set aside a lot easier than designing electronics. Writing technical books, for a new blog that earns money somehow, or as a contract writer for an existing website are all possibilities. I've thought it might be nice to write about test and measurement for the ham's home lab.

Either way, I'm not done with the ham homebrew community. The open question is merely how much time I can still give. Let me know what you think about the above in the comments.

Back to the Shack

It's been a while since I've transmitted any RF on the amateur bands other than the testing that I've been conducting for OpenBeacon 2. Between how much time I've been putting into OpenBeacon 2 (and refining the Si5351 library), it's been very difficult to find the time to sit down to operate. On top of that, I honestly just haven't felt much of the operating mojo, so unsurprisingly I haven't even tried to make it a priority.

Generally, it's not great to force these things, but I'm getting to the point where I'm feeling a bit disconnected from amateur radio and that I really need to be QRV again in order to rebuild that connection. The ARRL Centennial in 2014 was a great operating year for me because it gave me a concrete and interesting goal to pursue.

W1AW WAS

So I figure that I need something similar to get me motivated again. A good goal perhaps would be to finally finish up basic DXCC from this QTH. As of right now, I stand at 75 confirmed entities in LoTW. It shouldn't be that difficult to get 25 more confirmations in LoTW by the end of the year, especially if I carve out a couple of weekends for contesting. I used to chase a lot of the big DXepditions as well, and that might be another good source to pick up a handful of ATNOs (assuming I pay whatever fee they charge for a prompt LoTW upload). I'd also like to actually get a successful HF SOTA activation or two under my belt, and this would be a good summer to do that.

The League

Speaking of the venerable institution, I let my membership lapse recently. Not really with the mind to do so, but given the rather significant dues increase, it was becoming a bit more difficult to justify the expense. Yeah, they are only asking $10 more per year, but I have to ask myself if I'm getting $50 of value every year.

I was honestly barely reading the QSTs that were arriving in the mail. However, the archives always have been one of the best features of the membership. I'm glad they do work with the FCC to represent our interests. Their lab does a good job of evaluating products. It feels that their organizational structure is a bit too ossified; a bit too hierarchical for my tastes. Getting feedback to the leadership seems difficult if you aren't already connected to leadership.

On the balance, I'm generally pro-ARRL, but I still don't know that I see the value of just forking over $50 annually. I understand why they needed to do a rate increase (although it probably would have been better to phase it in more gradually rather than a 20% hit all at once). I also understand the economics of why it would be difficult to offer a membership without QST, unless a paper QST was scrapped entirely. I would be curious to see how the rate increase ends up affecting their member numbers and their bottom line.

Homefront

This is not going to be a particularly pleasant post to compose, but I feel that I owe it to those of you who I interact with regularly to give you some kind of status update. Pardon the light use of uncouth colloquialisms.

As of right now, I am not able to publicly be specific about certain aspects of this situation, as it involves someone other than myself. There may be a time when I am able to share more of the story. Maybe not. I'm not trying to be coy in order to build mystery for sympathy points. There are plenty of terrible people on the Internet, and I want to have a firm grasp on the situation and have my emotions in check before I decide when or if to give specifics on a public blog.

Our household has been hit with some really big, life-altering news. Our family is still intact, no one has passed away, but things are going to be different from now on. It's not catastrophic, but it does alter our course going forward fairly dramatically. No one has wronged us; it's just one of those things that the universe dumps in your lap.

Allow me to rewind a bit. Things were already on shaky ground here over the last month or so between a combination of being a lousy friend to people who I care about and having what felt like a lot of my support system outside of my family seemingly blow up. Momentum on the OpenBeacon 2 project was building up to a good tempo, and then hit the brick wall.

On top of that, I was getting to the point where I could not countenance the absolute torrent of bullshit on what used to be one of my favorite hangouts on the 'net: Twitter. The SNR in my timeline had taken a huge plunge over the last few months, and I had noticed that many of my favorite accounts had gone fully or mostly quiescent. It was getting to the point where I was getting outraged nearly daily it seemed, yet I kept coming back for more hateclicks. It dawned on me that this is not a healthy behavior. (Now I really understand why online journalism is in a race to the bottom with their constant shitposting.) As I've said before, my emotional intelligence may not be great, but even this fool got it after being bludgeoned enough times.

I removed all of my Twitter apps, closed all pages, and disabled all notifications. Done. Haven't looked at it for weeks now. There's a good chance that some of you have tried to contact me there and have heard no reply. I apologize for that. I just can't let myself get sucked back into that miasma right now. If I haven't already alienated most or all of my online friends, I can still be reached via the usual email.

Allow me to say that it has been pleasant to claw-back all of that wasted time from the social media timesuck. I've been able to spend more time reading novels, working, and pursuing educational goals. I'm not going to delete my Twitter account as I want to keep it as an archive, but between my feelings about the medium and the above-mentioned situation, I don't foresee myself actively participating in it any time soon.

To bring it back to where things currently stand, priorities by necessity are going to undergo a large reshuffling. I don't know exactly what the extent will be yet, but I should have a handle on things in a month or two. This includes Etherkit. I'm not sure what form the business will take in the near future, but it will have to change or die. I've got some decent work for Etherkit in the pipeline mostly done; it would be a shame to have to put things to bed before it fully came to fruition. I'll be putting out feelers for assistance and guidance. For now, I'll still continue to sell the Si5351A Breakout Board.

It's one of those times when you have to reassess a hell of a lot of things in your life. I'm laying low because I don't want to make further missteps. I hope that those who know me forgive me for going radio silent lately. I'm having one of those uber-introvert moments where I really need some time to gather my energy before reengaging. I imagine I'll ease myself back into some more blogging on the nominal topic soon enough; the volume of output depending on how things shake out in the priorities department.

Be excellent to each other.

Low Carb Cream Cheese Pancakes

I know this departs from the usual fare, and I have no idea if this will interest any of my readers, but I figure at the very least it will be a good reference for me in the future. I'm living the low carbohydrate lifestyle and while I get along pretty well without having to resort to some of the bizarre low carb versions of normally carb-laden recipes, sometimes I still get the occasional craving for old comfort foods.

Frankly, quite a few of the low carb copycat recipes just aren't that good, and I don't usually make them a second time after my first try. However, I tried this low carb cream cheese pancake recipe and it was one of the few that I liked at least as much as the original, if not better (by the way, that linked site has lots of good low carb recipes). The taste was great; more egg-like than a typical pancake (it's probably more akin to a crepe to be honest). There were, however, a few issues with the recipe. The pancakes were extremely thin and flimsy, and hard to keep intact while cooking. Also, even though the pancakes were quite filling, I wished they had a bit more volume, perhaps just for the psychological effect.

After a bit of experimentation, I believe I have stumbled upon a nice variation of the above recipe. The addition of a bit of baking powder fluffs up the pancakes a bit to add that volume. I also tried a bit of xanthan gum powder (not something many people have sitting in their kitchen cabinet, but useful) to help thicken the batter for cooking, and it seems to have helped a fair bit in that regard. When I cook a batch, I get many fewer torn pancakes than I did with the original recipe. They are still a bit fragile, but not nearly as much as the unmodified version.

So here's my version of low carb cream cheese pancakes:

6 large eggs
6 oz cream cheese (room temperature)
4 packets stevia
1/4 tsp cinnamon
1/4 tsp baking powder
1/8 tsp xanthan gum (optional)

Set the cream cheese out at room temperature a few hours before cooking so that it is soft at the time of preparation.

Place all of the ingredients into a blender and blend on the highest speed for 2 minutes. Let the batter rest for at least 5 minutes before cooking.

Cook in an oiled skillet or griddle at medium-low heat. Pour enough batter to make 6 inch to 8 inch diameter pancakes. Flip carefully when the first side is cooked.

Serve with butter and sugar-free syrup.

Approx. 6 grams of carbohydrates for the entire batch.

Here are a few tips for cooking these pancakes. It's important to use a nicely prepared non-stick cooking surface, as these pancakes are a bit fragile. I use a well-seasoned cast iron skillet, although I imagine other types of non-stick pans would work as well. I prefer cast iron, for its heat storage properties and because I can use my favorite weapon of choice, instead of a plastic spatula.

The key is to keep the heat nice and low so that the pancakes can cook slowly. Let most of the cooking be done on the first side so that the pancake will stay intact when you flip it. It will probably take a few tries to get it right, so don't be surprised if your first few pancakes get mangled.

IMG_20160312_190547

 

Even if you aren't eating low carb, if you would like a more savory breakfast pancake, give this one a try. It's a hell of a lot healthier than pancakes composed of white flour and sugary syrup!

More Strange Attractors

As I mentioned toward the end of my post on the Python/GTK+ implementation of the Lorenz attractor, I ultimately wanted to add some of the other strange attractors to my program in order to make it a bit more interesting. So I did just that. It also gave me a good excuse to learn a bit more about how to use and layout widgets in a GTK+ application.

In addition to the Lorenz attractor, the program now will generate the Rössler Attractor and a plot of the behavior of Chua's Circuit. The Rössler Attractor is another well-known system in the world of chaos theory, which you can learn more about by following the above link. Since I'm only plotting a 2D section of each attractor, I have to decide which view to display. In the case of the Rössler, I thought that the X-Y view was better than the X-Z view.

More interesting to me is the simulation of Chua's Circuit, as this is based on an actual analog circuit you can build. The circuit is a chaotic oscillator that consists of the usual L-C elements (and a resistor plus limiting diodes) along with a nonlinear negative resistance circuit element. The negative resistance element is usually implemented with an active device such as an op-amp, although it has been reported that a memristor can also serve this function. The simulation is a system of three ordinary differential equations, much like the Lorenz or Rössler systems, but with a function in the first ODE to represent the behavior of the nonlinear negative resistance element. You can see in the code listing below that this was easy to implement in Python with a lambda function. It's cool to see the pattern drawn on a display, but I think it would be much better to have an actual circuit render it on an analog oscilloscope. One day, I hope to do that, but in the mean time, enjoy these videos of the behavior of such a circuit.

As far as my additions to the Python code, I created a GTK DrawingArea for each attractor, then added them to a Stack, which allows them to be switched with the StackSwitcher widget at the bottom of the screen. For clarity, I also added a legend to each DrawingArea to display which axes are being rendered for each attractor, as the Rössler has a different view from the other two. This code is a bit longer than the initial iteration, but much of it is similar, since the calculation and plotting of each system is nearly the same (yes, I could have factored the code quite a bit, but this is just for fun). Another fun time with code was had!

New Monday

It's hard for me to believe, but it has been more than 30 years since the release of Blue Monday by New Order. I always loved that song as a kid, and it still holds up quite well in my opinion. (In related news, holy crap, I'm getting old). Here, from the mysterious Orkestra Obsolete, via BBC is a retro-future rendition of the electropop classic, featuring all manner of unique instruments available from the 1930s, including the theremin. Some boatanchor electronics goodness in this video, and the music is entertaining as well. I quite enjoyed it.

Lorenz Attractor in Python

Back in the day, when I was a budding nerd in the late 80s/early 90s, I spent a lot of my free time down at the local public library looking for any books I could find regarding certain topics which captured my interest: programming, astronomy, electronics, radio, mathematics (especially the recreational mathematics books), and other topics in the realm of science.

One of my fondest recollections of that time was how accessible that home investigations into some of these topics became due to the advent of the personal computer. Of course, in those times, not every household had some kind of computing device like they do today, but PCs were affordable enough that even a lower middle class house like ours could scrape together enough for a computer with a bit of work.

We also didn't have widespread household Internet, so your options for getting new programs to play with were limited to the relatively expensive services like Compuserve, trying to find warez on bulletin board systems, checking out books and magazines with program listings from the public library, or perhaps if you were lucky, being able to check out a stack of 3.5 in floppies from the library (how were they able to do that with commercial software?). Of course, given the previously mentioned socio-economic status, I was mostly limited to the public library option. Although perhaps some day I'll tell the tale of how I talked my parents into letting me get Compuserve, and then proceeding to rack up a huge access bill on my parents' credit. Oops.

JuliaSet 032 0043i.jpg

Of particular interest to me was the relatively new field of chaos theory and fractals. These studies were conceived a bit earlier than this time period, but were popularized in the public eye during this time. I got hooked in by the photos published in the groundbreaking books The Fractal Geometry of NatureChaos: Making a New Science, and The Beauty of Fractals. There were also plenty of articles in publications like Scientific American and the books of authors like Clifford Pickover. The wonderful thing about these resources is that many of them not only showed you the pretty photos of fractals and chaotic systems, but actually described and illustrated the algorithms behind them, which allowed you to code your own implementations at home.

Tandy 1000 rl 1.jpg

During my early work in trying to recreate these forms in my own computer, I had an Atari 800XL with a dodgy floppy disk drive, which made any kind of coding a bit of an adventure as it seemed like my mass storage old successfully worked about half of the time (on a side note, who remembers the even earlier days, where you would type in a machine language monitor program in BASIC, and then transcribe strings of ML from a listing in a magazine in order to get a new program...good times). Things really got serious when we ended up acquiring a Tandy 1000 (I believe the RL version, but I'm not 100% certain about that). Once we had that in the house, I spent many late weekend nights trying to write code to reproduce the fascinating patterns found in the pages of those books. You know you're a true nerd when you get such an electric thrill from finally mastering the code to generate a Sierpinski triangle or Barnsley fern in glorious CGA on your own monitor.

Barnsley fern plotted with VisSim.PNG

So what's the point of this overwrought bout of nostalgia? Well, I was recently pining for the old days when you could just sit down at the PC and implement a chaos system in one quick setting with minimal fuss. Compiled languages with arcane GUI frameworks were right out. Fortunately, we are blessed with quite a few good replacements for the old BASIC environment. My favorite is Python, and since I use Linux Mint as my primary desktop OS, the GTK+ 3 libraries for Python are already included by default, so it's quite easy to get a rudimentary 2D graphics system up and running quickly.

For my first chaos system coding challenge, I decided to go with the great-granddaddy of chaos: the Lorenz attractor. It's an easy system to compute, and it's quite obvious if you get the implementation right or wrong. Once I got the hang of the GTK+ 3 library interface, it didn't take that long to bang out an implementation of the Lorenz attractor in relatively few lines of Python. The simplicity is satisfying, and reminds me of the fabled old days of coding.

There's the code if any of you would like to play around with it. It should be fairly easy to replicate if you are using any of the Debian-derived Linux distributions, and probably only marginally more difficult with other Linux distros. I have no idea what it would take to get running on Windows, so good luck if that's your OS of choice.

Now I have a framework to build off if I get a further itch for similar experiments. I'm already working on an extension to this code that will render other attractors. It would be fun to find a 3D rendering library that would be easy to use so that I could plot in three dimensions, but that's not hugely critical to me. This is just an exercise to have some fun, capture a bit of that nostalgia, and distract myself a bit during downtime. Hopefully a few of you kindred souls will have derived some enjoyment from this trip down memory lane.