Completed

I got the right wife. I got the right country. I only really had one thing left to get.

Starting in January, all my freelance contracts dried up. Feast or famine, that stuff happens. I'd been keeping up with the rent, and a little more, but not exactly my entire share, at least as I felt it ought to be. My wife is an enormous help here.

Starting in March, now that I had the official right to employment, I went out job hunting for full time positions for the first time in 15 years. Two months and 6-8 good interviews later, I got nothin'.

Indeed? Dice? BCTechnology? Tech recruiting agencies? Fiddlesticks. Bullshit. Where did the work come from? Craiglist.

So I pick up this new client on Craigslist. He needs a reliable developer part time who can work from home. Gee, that's exactly my thing. His rates are below market, but I have never needed market rates, and if I can work at home and keep my existing commitments, that's worth a bit of a discount, anyway.

The work has been, and looks to be, steady enough for all my needs for the foreseeable future.

It's official: I now have it ALL.

It sunk in last week, the sense of security and safety, that feeling of flushness in the pocket. It happened while I spontaneously, shrewdly invested half an hour on a Friday mid-afternoon into plopping down on my lawn, watching traffic go by. It was definitely a beach day.

The closest thing to uncertainty I can feel is not knowing immediately what I'm going to spend my earnings on. It's tough when you're out of the habit. Money is useless: All you can do is spend it.

And I get to keep my freedom. Again.

Yeah; I'm good.

Wedding Bells

Jams and I will getting married here in Bellingham on Saturday, June 1st!

Save the Date. We'll be sending out invitations in the next few weeks, by email, and, for those for whom we have addresses, snail mail. If you'd like one, email nato (at) invitations.r30.net with your address.

Woohoo!

A Dynamic

Some say "change is the only constant." Except that change is not a constant at all; it's a variable.

Freed Will

Free will is not a property or quality.
Free will is not some philosophical binary emebedded in the species genome, all or none, zero or one.

Free will is a skill. A thing you earn, and you learn to do over time.
You start with your actions, then your reactions, then your feelings.
You get better with practice.

Responsibility is neither something you give, nor have. It's something you //take//.
And once taken, it can't be stripped from you by something so trivial as determinism,
Though you may choose to be afraid.

But why bother?

In Fact, Choice isn't a Substitute for Freedom at All

Labyrinths offer choices. And yet, they are still better known as prisons.

Mozilla Seems to be Losing its Grip on User Freedom

I've been studying Mozilla's Open Web Apps tech on MDN.

For many years, everybody has been excited about the potential for the World Wide Web to replace the desktop model of software. With the so-called "HTML5" suite of techniques (I guess "Web 3.0" didn't have the same cachet), browser makers and other web geeks have been adding capabilities for web sites to use safely that were previously the exclusive domain of installed applications (You know, the ones with more than three letters). Local storage, geolocation, native audio and video, etc.

Most recently, Mozilla's been hard work trying to promote websites as a kind of first-class citizen on the desktop. The idea is that you "install" a web app, which then gets tucked in as an icon on your desktop, or your programs menu, or wherever your application launcher icons live on your particular device.

This stuff is cool, as far as it goes, but I have concerns, naturally, about a user's autonomy in this new architecture. If all my web apps are websites, what control does a user have over the code that runs on their device? Can I or someone I trust review the source code? Can I modify the application to fit my needs?

Little of this is possible with conventional web sites, in the way that it is with installed applications. Even when the code is executed in the browser and not on the server, the browser is designed to be scrupulous about keeping the code up-to-date, and failing to execute if the web site can't be reached.

The most interesting way I've seen browsers address this is with the offline application cache, which allows browsers to cache old copies of applications, documents, code, and any other web resource for use when the user is not even connected to the Internet. This is a very cool idea, as it allows users to preserve for themselves the offline functionality that installed applications have always given them.

But the problem is that, as far as I can tell, it entirely lacks the accountability and auditability that installed software offers.

Suppose you install a conventional application. The vendor decides to release a free update that changes or introduces a bug into a feature you depend on. You're under no obligation to install the new release, so you happily continue using with your current version until someone forks the code base or otherwise resolves the issue.

With the browser's web application cache, however, things are different. Sure, you can keep the old version of the application - as long as you stay offline. The next time you use the application while you're online, the browser will automatically attempt to refresh the application's cache; and you have no control over this.

Mozilla is designing things this way. And it sucks.

An Admonition

Never give out of fear.

Shade Structure Test

Saturday, my compatriots in Ninjarts (the camp of Portlanders I Burn with) fiddled and assembled the shade structure I designed. It works!

Super Earache can hold up an entire shade structure with just one hand!

The original design was for a 24'x16' surface made with PVC, but the difficulty of sourcing the PVC of a preferred size, and the temptation of burning a wooden structure lead me to use ordinary wood 2x4's instead. The wood is considerably heavier, of course, so much so that the the 24' struts were a bit too flexible for comfort. So we reduced the surface size to a 16'x16' square, and this is the result.

The photo may not show it well (it's getting cramped in Rob's yard), but what my buddy Eric is holding down/up is a basic tetrahedral frame. The four legs form two triangles that meet on the ground; one is leaning toward the camera, and one is leaning toward Eric. There's a rope running between the two corners in the air, so the weight of each triangle creates a balance that is so easy to manipulate that you can adjust its position with one hand. It's easy, with this done, to just throw a tarp or canvas over the top of the rope, and attach it to the struts with bungee ties. With this tetrahedral structure, the overall surface will maintain a roughly square shape no matter how you fold or adjust it. Secure it with two guylines from the upper corners, and you have a simple "Tensegrity" structure.

A medium-sized tent (mine's 8') fits under it nicely. I'm looking forward to deploying it at events!

Let's Face It

I think it's time I gave the old blog a new look. Special thanks to Anne Franklin, for the banner photos. They rotate - if you refresh the page, you'll get a brand new thing of beauty!

Overlords

We are most certainly alone in the universe.

Because if I were an alien civilization bent on conquering the Earth, I wouldn't bring a fleet of interstellar warships. Have you seen the price of gas lately?

First, I'd plant archaeological remains of my advanced technology on Earth. Then, as humans began to discover, adopt, and deploy my technology, I'd send but a single vessel.

It would contain a patent law firm.

Given that the wealth of human civilization is clearly in decline, due in no small part to patents, I think we can safely assume that our new alien overlords are not interstellar patent trolls. Otherwise, SETI would have decoded their Ceast and Desist letters years ago.

Homed

I have been approved for my new place in Bellingham, starting after Burning Man. Woot.

Northward

I have put down a deposit on a place I like in Bellingham for September. It's small, cheap, and yet has a bathtub, a balcony, and an excellent location within walking distance of downtown, the freeway, and many grocery stores. I may hang out in Portland through July, though. I still haven't heard about my Burning Man ticket, though.

We're in the xmas tree business again, I hear, as this year's inventory is starting to shape up.

Directions

What I want to learn more of is python.
What I need to learn more of is javascript.
What I've been learning more of is CSS.

It's kind of frustrating.

Meanwhile, the next version of HTDB, my web applications framework, is getting a lot of attention. Even design.

Farewell Facehook

I just deleted my Facehook account. Aaaahhhhhh....

Onward

In the interest of living closer to my dear Jams, I have decided that I'm going to move to Bellingham, WA, at the end of June.

Know What I Mean

The universe is not meaningless. It appears lifeless, but that overlooks the fact that we are life, and we are in it.

We constantly concern ourselves, in English, with finding meaning. But what we have to understand is that meaning isn't just something we find. It's something we DO. And only living things mean things. Only people communicate.

So if your life feels meaningless, it's not because the universe has no meaning to offer you. It's not even that you're looking in the wrong place.

It's because you're //looking//.

To find meaning: //speak//.

Are You Sure?

Uncertainty is the first sign of competence.

We'll Make Great Pets

Factory farming is horrifyingly cruel. It's suffering for the animals to live that way, never mind how they are slaughtered. It's even suffering for us to //watch//.

Traditional organic farming (or, as your great grandparents would say, "farming") is certainly kinder than this. But you still have to confront the fact that not only are you slaughtering animals to consume, but that's the only reason you raise them in the first place. Dying for you is the only reason they live. Otherwise, they'd just go extinct in the wild.

But there's a difference, here, between organic and industrial farming. The animals don't know this. They haven't quite put those two and two together. So long as they are free from the immediate suffering of factory farming, the stress of slaughter at the end of organic production cycles is minimal.

I'm not saying this as if to justify our behavior. I'm making another point entirely.

How would we feel if this were done to us?

I've always grappled with some trouble in confronting the answer to this question. in order for the comparison to stick, the conditions have to be the same. And in order for the conditions to be similar, they have to be similar //relative// the object entities under consideration.

If we were being factory farmed, shoved into concentration camps, and treated //literally// like livestock, we'd be horrified - EVEN IF we were "farmed" "organically". For us, "organic" farming might not really be that much less horrific than being factory farmed.

Why? Because we know what's going on. We have significantly greater cognitive, cooperative, and communicative capacities than livestock. You could even say we bred livestock specifically to be stupid - the better to control them.

So given this significant difference in intellect, what would our farmers have to do to keep us calm and bewildered?

Ever seen your dog tilt its head sideways, confused? Have you ever watched your cat glower at your antics, seemingly as contemptuous as they are confused as to //what in the world// you are doing? They don't get it. They probably don't even know that they don't get it.

Now put yourself in that position; not so much imagining yourself as a cat, dog, pig, chicken, or cow, but as a human. Our owners, to be in such a dominant position, would have to do vast amounts of things we really have no clue about, even though we can get advanced degrees in engineering, or humanities.

To compare ourselves to being organically farmed, we'd have to be blissfully unaware of what what we're being farmed for, at the same time our basics needs are being provided for us.

It might not be too much different from how we live right now.

But are we being organically, or factory farmed?

I'm a Zombie

http://en.wikipedia.org/wiki/Philosophical_zombie

A p-zombie is a person who is traditionally defined as being indistinguishable from a human being in physiology and behavior (including the claim of possessing consciousness), but lacks "consciousness". In the conventional conception, all human beings are conscious, of course (of course!), although we lack the capability to determine whether or not another (or any) person possesses consciousness. The assumption is that humans are all conscious by categorical inference. In other words, this is a thought experiment; P-zombies don't actually exist, of course (of course!).

Over the years, I've played, in an amused fashion, with the idea that, since there's (by definition) no way to tell a P-zombie apart from a conscious human, they might very well exist after all. More amusingly, even *I* might, in fact, be one. How would I know? How would anyone know? How droll.

And it's this reaction of amusement, rather than horror, that's telling.

And then I ran across a video of philosopher Julian Baggini, which matched my own suspicions of the truth more than anyone since Daniel Dennet. In it, he quotes neuropsychologist Paul Broks, who said, "We have this deep intuition that there is a core, an essence there, and it's hard to shake off – probably impossible to shake off, I suspect.

This claim came as a bit of a lark to me - because I don't think the idea of not actually existing, not possessing "free will", agency, or "consciousness" bothers me one bit. Why? Because //it makes no discernible difference// - by definition. I "shake it off" trivially, easily, with a bit of a giggle. What Broks is thinking, I have no idea. But for some reason, people like him are deeply disturbed by the prospect of lacking consciousness.

And that's when it hit me: perhaps that's it. Maybe you can tell the difference between a P-zombie and a conscious human being. A conscious person is one who can't tell you what consciousness is, but is familiar enough with it to be horrified about //losing// it. Whereas a P-zombie lacks consciousness, and, being unable to understand what it is (by virtue of conscious beings being unable to describe it), shrug it off as mere bullshit, because they literally don't know what they're missing.

So that's it: I'm a P-zombie. How amusing.

SOAK 2012: Time Travel Field Trip

A proposed art theme for SOAK 2012, the Portland/Oregon summer regional Burning Man event:

Time Travel Field Trip

Our scientists have reported the discovery of several chronocosmic time waves of unprecedented size converging on [venue] on [dates]. The sheer magnitude of these waves practically guarantees the opening of several large cross-time rifts connecting the Jurassic period, Steampunk Europe, California 1987, and twenty-third century China, all in the space of a weekend in the Oregon forest! Your mission is to use your timeship to participate in this unprecedented creative clash of cultures, bring back evidence of your discoveries, and, of course, leave no trace...

Effigy: why, a dinosaur, of course!

Suggestions for polishing this pitch welcome.

Old Years' Resolutions

If my New Year's Resolutions were so important, I would have resolved to pursue them before now. And, what do you know - I have! But somehow, someone got the idea that what we needed most in order to chase our dreams was the time, institutionalized in a holiday, to get away from the habitual slavery of our everyday lives, the better to actually think about what it was we actually want with our lives.

But long ago, I resolved not to live in such a dreary, habitual fashion. I don't need a holiday as an excuse to celebrate, though I always welcome those who could use one to join me. Long ago, I resolved that holy days would be so out of virtue of having opened my eyes in it, rather than not having happened in a while. Every day is worthy of living in celebration, and every day is a good day to recognize what you want out of life. And ever since then, my New Year's Resolutions have never come at New Year's.

Rediscovering Old Habits

Heavens help me, I think I might be getting back into reading syndication feeds again.

Years ago, I used to use an application called Rss2Email to read RSS and Atom feeds during the Web 2.0 blogging explosion. I wrote a little scripting glue to pull syndication feeds from Firefox's live bookmarks, and had r2e periodically email updated items to my inbox. I have collected dozens of feeds over the years, but I reached a point where I became so overloaded that I just stopped using it.

That was about the time that I started social networking in earnest. That is to say, Facehook, where syndication feeds are forbidden. Facehook shuts down applications that make user's activity streams available for syndication - not because they're really concerned about privacy (which is a solvable problem), but because it breaks their business model.

But my livemarks have been sitting in Firefox, dormant, patiently keeping themselves up to date. Many times over the years, I checked out numerous feed reading extensions, but the lack one feature kept me from using them. What I really wanted was to aggregate all feed items together chronologically in one feed. You know, "aggregating". You might call it "Planet" style.

Then I found Brief. Just the features I want, and not much else. Clean design, intuitive interface, and comprehensible options.

No one knows how much time this application will now devour in my life.

Xubuntu Oneiric It Is

I've been sticking to Ubuntu 10.10 Maverick Meerkat since I built my latest PC last winter. I keep hearing how aggravating the changes in Unity and GNOME3 are, and I have just decided to ride out the last days of the release (software updates for it end in April, and certain packages have slacked off and out entirely) until I can figure out what to do about these jerks who keep breaking established desktop environments.

So I took a cue from Linus Torvalds and moved back to XFCE4. Hell, I've been using the XFCE4 Panel even when I was using GNOME2 anyway. That was a few months ago.

Last night, I created an installer USB stick (I can't remember the last time I used an optical drive) for Xubuntu's latest 11.10, Oneiric Ocelot, the XFCE4 version of Ubuntu. It went fairly smoothly. In the past, I set aside two 16GB OS partitions separate from my HUGE data partition for /home , so that I could easily fall back on the old OS partition if things ended up sucking.

I have been pleasantly surprised by a number of things that have changed after a year of releases. I've been running this hybrid XFCE4/GNOME2 environment for a while, wherein I use both XFCE4 and GNOME2 panels, and a number of XFapplets that let you run GNOME2 panel applets in the XFCE4 panel. But many of the XFCE4 native panel applets have improved and matured to the point where I can ditch GNOME2 entirely.

For example: XFCE4's clipboard manager now supports actions. I've been using GNOME2's Glipper stuffed into an XFapplet for a long time, and it sometimes fails to start with my desktop session for some reason. Actions are a way you can define commands to be run instantly when a certain pattern of data is copied to the clipboard. When you copy a URL, for example, a menu instantly pops up below your mouse giving you the option to open it in Firefox, or Chromium, or do something else. This feature has added a LOT to my agility on my desktop. I can do things like recognize transaction ID numbers or emails, and pop up an option to search the backend of my ecommerce web sites. It's a BIG time saver.

Unfortunately, I actually had to apply some bugfixes to Glipper to get it to work the way that I wanted, which meant maintaining the thing myself every time it updated (my use case was weird, so I never got around to submitting a patch). Luckily, it's written in python, so the patch was trivial.

But now, XFCE4's clipboard manager does what I want by design, and with a better management interface. Nice.

Then there's the Directory Menu plugin. I've always wanted a customizable menu that could based on arranging files and folders in the filesystem. This is one reason why I've always hated iTunes and all the wannabe music library apps that imitate it - I've ALREADY organized my music into a categorical hierarchy in the file system; I don't need YOU telling me I have to do it all over again every time I migrate to a new music "player" just because OMG your db schemata are SO much easier to use. And then, we have the Freedesktop application menu specs, which, after much study and struggle, are just plain incomprehensible.

So for a while, I made do with faking a menu by using GNOME2's file browser menu applet, anchored to a custom directory where I toss symlinks and scripts. That's OK, but tied to GNOME2, and a bit inflexible in terms of sorting your menu items.

Enter the Directory Menu plugin, which ties into the faster, leaner XFCE4 environment, and interprets .desktop files in such a way that you can sort by the file name, but the menu item's displayed name can be customized. You can also set a filename pattern to filter out files that you don't want showing up in the menu at all.

I am happy to be delighted by small, incremental changes in desktop environments, as opposed to Unity and GNOME3's wholesale pulling of the desktop rug out from established user bases with inadequate thought for forced upgrades. If we ever see an XFCE5, I hope they design it so that it can live peacefully alongside installations of XFCE4, so that people can manage their migrations a little more gracefully than these projects have.

Google's Complicity in Censorship of Legal Speech

The DMCA includes penalties against companies that file DMCA takedown requests with content publishers against content that they don't actually hold the copyrights to. Fair enough.

So in the case of Universal Music Group's censorship of the MegaUpload song posted on YouTube you would think that MegaUpload's lawsuit would warrant just such a hand-slapping. But it doesn't.

The reason is that the interface YouTube exposes to major labels is //not// for filing DMCA-compliant takedown requests. It's just part of a private contractual agreement between YouTube and UMG. Pretty slick, hey?

Private contract law, ladies and gentleman, trampling free speech right before your eyes. Why obey the law when you can just collude with the Internet Oligarchy and create your own?

Google should think about requiring rightsholders to accept liability under the DMCA for bad faith takedown requests. Otherwise this kind of abuse will continue, not as a response to copyright infringment, but as //competitive censorship//.

Underground

I am well. I have a girlfriend. I have a plan. A private plan. I am executing.

Trees are doing well this year. I'm about to inflate my rent buffer to six months.

Fuck Yeah.

Citizen-Occupied America

There's a certain interesting irony in the way the Occupy Wall Street protests have prompted the use of language as they have spread throughout the world. While New York's original protest calls for the occupation of Wall Street, and is called exactly that, cities where sibling protests have been inspired call for the occupation of exactly the city they take place in: "Occupy Portland", "Occupy LA", "Occupy Vancouver", etc.

The irony, to me, rests in the language of suggesting that the protesters must conduct a military occupation, as if they don't even live in their hometowns. As if the plutocrats and industrial behemoths they are criticizing are the native rulers of the landscape, forcing them to conduct an invasion and foreign occupation of their territories in order to assert that they, in fact, should take priority over those of a minority of fictitious person.

Shade Structure

I have a new design for a shade structure for Burning Man. This is purely theoretical, at this point. I will be attempting to build this one, unless I am ambushed by yet another different idea.

Originally, I was inspired by Rob's PVC "dinosaur bones" structure, which he used in camp at the burn this year, and re-used for our Ninja Star Throwing Gallery at BurnOut. But, in designing something similar, I kept being stymied by trying to make the cover/tarp material conform to the curves of the pvc. It would be easier to just keep the angles straight, so that things don't sag. This design attempts to achieve this balance. In the bargain, it seems to be simpler, and lighter on materials.

-

Ingredients:

* select a strong tarp. almost any size is usable, but keep it as square as possible. Rectangular tarps are perfectly usable.

* acquire enough PVC pipe to go around the edges of the tarp. if you can't get it in lengths long enough to cover a side, make sure all the poles assigned to a given tarp side are be in //pairs of the same length// (??). eg, if you have a 20' tarp side, get 2 lengths of 10' ppvc, if you have a 16' tarp side, get two 8' pvc pipes (cut them if necessary).

* if you need two pipes to cover a side, get a pipe knuckle to join them straight. Do not get pipe knuckles to join the pieces at the corners of the tarp; these joints will need to remain flexible.

* Get about twice as much length of rope as length PVC pipe.

* get a dozen or two bungie balls to attach the tarp to the structure.

* get four thick 2" metal rings.

* four rebar stakes, 1.5' to 2' long. 1/4 inch to 3/8 inch thick.

-

Construction:

Lay out your tarp flat on the ground, and lay out the other materials around the tarp:
- the pvc pipe and any pipe knuckles, as if you were going to attach them to the edges of the tarp.
- the metal rings, one on each corner.

Cut a length of rope a bit longer than the total length of the PVC pipe acquired. thread this rope through the pvc pipe, pipe knuckles (without joining them to the pipes), and metal rings. once you've threaded all the pieces, tie one end fo the threaded rope to the other, leaving about a foot of slack you can tighten up later. A square knot should work fine.

Presuming that you cut any pipes the same length where more than one was needed for any tarp side, and that the pipe knuckles are not attached, you should now be able to fold the entire collection of pipes together into one pile, with the rope threaded through it. This keeps all the parts together, and in order, so you don't have to re-thread it together in the right order on site.

Now you just have this to transport to the site.

You will probably also want to bend a few inches on the ends of your rebar back to make hooks. A length 2'-3' length of hollow metal pipe makes an excellent lever for this task. Don't bend back too long a length, however - this thing is going to have to go all the way into the ground.

-

Assembly:

On site, most smaller structures of this kind can probably be assembled by just one person.

Unfold and spread out the the pipe assembly. Attach any and all the pipe knuckles to the pipes they're adjacent to. You should now have a parallelogram (and maybe a rhombus) of pipe, with a metal ring at each corner.

Rotate the structure to optimize your shade angle. Generally, two corners - known as the high corners - should be pointed north and south. The other two corners will be known as the ground corners.

Select one of the ground corners and pound it into the ground with rebar stake. Pound the rebar through the center of the ring, hooking the rebar hook over the outside of the ring.

Cut a new length of rope that is a little longer than the diagonal length of the tarp. Then tie this length of rope to the rings on each of the high corners (you probably need to pull the remaining free ground corner out to get them close enough). Once tied, pull them as far apart as possible while still keeping them on the ground. You should now have a rectangle (or a square) that matches the shape of of your tarp on the ground.

Now, you need to tie guy lines to the high corners. The lengths will vary depending on the angle you want to tilt the structure at once it's in the air, so once one end is attached, don't cut the other end to length just yet; give yourself plenty of slack.

Next, spread the tarp out on top of the structure and attach it to the metal corner rings and (optionally) the pipes with bungie balls.

Now, grab hold of one the pipes farthest from the anchored ground corner, and lift the high corner of it into the air. As you do, pull the end with the free ground corner in while keeping it on the ground, along with the opposite high corner. you will be lifting the pipe on the other side of the high corner you're lifting in the process. continue lifting until you get about the angle you want for the structure - any angle that works for you, works. You'll want to keep playing with it (optionally with friends) until you find something you like. Then, pound a rebar stake through the ring in the remaingin free ground corner to secure it. You should have one high corner in the air, and one on the ground.

Now you'll need to grab the guy line rope attached to the high corner that's in the air, and pull it down. The tension built into the structure will lift the opposite high corner up into the air. From here, it's necessary to secure the guy lines to the other two rebar stakes, at whatever angle you want the structure to remain at, so that they maintain the tension. Once the guy lines are staked in, your structure is complete!

-

Optionally, you can use zap straps instead of rope for the guy lines. This will allow you to adjust the angle of the structure easily on the fly, by releasing tension on one, and taking it up with the other.

Dedication to the Cause

Desire dictates belief. It's not the other way around.

The Dreamlight

Here is "the Dreamlight", the lighting project I made for our ninja star throwing range installation at BurnOut. Thanks to Earache and Rob for materials, tools, parts, and advice.

Shifting Modes, but not Gears

The site I've been contracted to work on launched today. There's still more to do, but the time pressure is off, just in time for...

My other thing that overcommits me: Art! This time for Burnout, Portland's post-playa burner event. I have been working on a lighting gadget for a throwing gallery project a few buddies have been working on. Now that work has relented, I should be able to finish it tonight and tomorrow in time for the show tomorrow.

And, then, there's Jams. in between stress, and distraction, there's the new girl. She came down from Vancouver earlier this week for a few nights, and, well, changed my life. Or, rather, my plans for it.

Love is, as one is told, a powerful and motivating thing. It is both experience and activity. Funny things happen when you leave the door open: people walk through them.

I know a lot of you are looking out for us, and we know we shouldn't go as fast as we feel justified to at this moment. But those of you in Portland should know that we have many mutual friends from Vancouver that are doing the same thing, and generally giving us grins and big thumbs up. I also think that's why it's actually a good thing that it's a long-distance relationship - it forces us to pace ourselves. Regardless, thanks for looking out for us.

Onward!

Banner images
© Anne Franklin

Navigation

Syndicate

Syndicate content