Skip to main content

Mini E-mail Campaign With Node.js

· 3 min read

Over the weekend I had what at first appeared to be a small challenge: send out a few hundreds e-mails for a non-profit's outreach campaign. MailChimp and other mailings lists were not a good fit, as these messages were of the cold-call variety, and a formal mailing list felt too spammy. Initially I wrote a utility in .NET, but ended up solving with Node.js instead due to timeouts experienced with SmtpClient.

Eco-spiritual Integration: Three Texts

· 4 min read

photo of a stream

Stream at the restored Ridván Garden near Acre, Israel

"Fragmentation" often describes our personal lives. Through accident or design, we carve out separate spheres of being: family, work, school, sport, public policy, and so on. When we are healthy, we work toward unifying these through consistent expression of our values. The other extreme becomes hypocrisy.

The long-term tension between science and religion often reinforces that tendency toward fragmentation. Practicing and acting on a traditional Western mechanistic worldview while espousing divinely-grounded spiritual values is not intrinsically hypocritical. But, for me, it is a very limiting experience. In the integration of these two worldviews we find them strengthening each other. Spiritual principles can shape our research methods (viz animal experimentation), and scientific research can shape our application of justice and equality (seeking climate justice, for example).

Refactoring Legacy Web Forms for Test Automation

· One min read

The Challenge:

Given you understand the value of test automation. Given you are handed a legacy application to maintain and enhance. Given the application is in ASP.Net Web Forms. When you try to add tests. Then you find that test-driven development is literally impossible.

Here's one solution, in long slide-style presentation:

Birdsong and Rustling Leaves

· 3 min read

Birds were not my friends as a child. For some reason birdsong in my backyard was an annoyance. I knew how to distinguish a handful of birds from one another, but they simply held no fascination. Reptiles were much more interesting. In hindsight, I think it was the call of the Northern Cardinal — possibly awakening me in the early hours — that caused my mild disdain. So how did I arrive at this point where birding brings me such joy?

photo of birds

American White Pelicans, Double Crested Cormorants, and domestic goose. White Rock Lake, Dallas, TX. January 2014.

safnet Directory: A Partnership Between Angular.Js and ASP.Net MVC

· 3 min read

Back in October I started playing around with a few technologies, resulting in my first code posted to GitHub: safnetDirectory. I must say that it is not the most impressive bit of coding that I've ever done. However, the urge to learn sometimes needs an unencumbered, no-strings-attached, digital canvas on which to exercise. That urge is requited through the experimentation and the lessons learned, rather than the completion of an opus.

The end result: I have a prototype of a mixed Angular.Js / ASP.Net MVC application that provides a simple directory and simple administrative functionality. And it is Hosted on Azure.

safnetDirectory screenshot

Transcendent Moments

· 4 min read

Nature-lovers often speak about transcendent moments, occasions where some experience moved them to a profound awareness of life, the universe, and everything in it. For some, these are timeless minutes, forever memorable, forever inspiring. All of the senses align in memory, and perhaps a bit of wisdom descends in epiphany.

My transcendent moments are not so strong; perhaps that is from a weak sense of smell. Or perhaps because I seek out a low level extraordinary at every turn: the senses are not so overwhelmed in these daily moments, as the ordinary passes beyond rationality. These peek experiences do exist however, and as I sift through the shoebox of memory, two stand out at very different scales.

Colorado river in Arizona

Page, Arizona, along the Colorado River. Courtesy of Nasa.

Nature Observation and Joy

· 3 min read

Beware, o ye who walks in the woods with me. For I cannot help myself: I must share. Look at this little fern over here. This is a nice soapberry tree. So many ant lion nests here! Did you hear the tsip sound? Do you think it's a Dark-eyed Junco or a Yellow-rumped Warbler?

I pray that it is not a subconscious showing-off, know-it-all thing. That accusation has stung me before, in the middle-school classroom. Consciously, I simply love drawing people's attention to that which fascinates me (and yes, please do return the favor). There is a wonder about the natural world, a wonder and a joy that is so great that it often cannot be contained. This joy is reason enough to share with friends and family.

photo of bluebonnets and mesquite tree

The Ranch

· 4 min read

Some folks grow up in households of privilege where trips to the family cabin / ranch / lake-house are common. We had the next best thing: a family friend generous enough to invite us along to The Ranch. Now, The Ranch has a more formal name, but its legend and personal history are best distinguished by turning the general, specific.

scanned photo of the ranch

The Yard and the Ditch

· 4 min read

My earliest experiences of nature were of playing in the yard — and out back — as a child in a Houston suburb. As I recall it, our backyard had a pecan and some young oaks, along with multiple gardens. There was a red oak — or perhaps a maple? — planted out front, and a sweet gum tree whose seed casings would bring forth caution in even the most carefree of barefoot children. And of course there was the St. Augustine grass. This was all conducive to much play outside. But the best part was behind the fence: The Ditch.

satellite view

Node.js, Web API, and RabbitMQ. Part 4

· 4 min read

a passing test

Desiring to learn about both Node.js (particularly as an API server) and ASP.Net Web API, I decided to throw one more technology in the mix and see which one is faster at relaying messages to a service bus, namely, RabbitMQ.

Time to turn that Node.js test green. In Part 2, I succeeded in publishing a message to RabbitMQ using Node.js. However, my automated test failed: the .Net test runner could not handle the generated message. Three key elements were missing, which are required for the MassTransit .Net library to interpret the message correctly:

safnet logo