Worked through message backlog today. Got it down from around 70 to just 37. Was able to fix some bugs, including making the webapp start up more robustly in some misconfigurations.
Added a new
findref command which may be useful in a git
update hook to
deny pushes of refs if the annexed content has not been sent first.
BTW, I also added a new
reinit command a few days ago, which can be
useful if you're cloning back a deleted repository.
Also a few days ago, I made
uninit a lot faster.
We installed another chicken
door in the Star Plate coop today along with sealing up the front door
to keep any small chicks from squeezing through the crack.
Tomorrow is their move in date.
Forecast low: 26. Actual low: 23. Fruit damage: high.
I've tried protecting tree blooms in the past, but haven't had any luck with wrapping trees and don't want to try to run sprinklers all night. So we just roll with the weather, some years not getting any tree fruits at all.
I had hoped that this year's slow spring meant our trees would bloom late enough to miss the hard freezes, and the blooms were slow, but the freeze still came. The question is --- did it kill everything? It's hard to say how low the temperature actually got at various levels above the ground and in different parts of the yard. The apple blossom above was clearly nipped, but many of the dwarf apples closer to the hillside are running slower and are at first pink or even tight cluster stage --- some of them might have made it. (Here's a chart of critical temperatures in case you're dealing with a similar late freeze and want to guess which of your trees are in danger.)
Low-lying plants are much easier to protect. I pulled out all of my old pieces of row-cover fabric to shelter tender vegetable seedlings like lettuce, broccoli, and cabbages.
At this time of year, I often cover up strawberries too, but only a few had even opened as far as the flowers shown to the right --- "popcorn stage." The popcorn flowers will have gotten nipped, since they can be damaged when the temperature drops to 26.5, but tight flower buds are okay down to 22. I figured it was better to miss five or ten of the earliest strawberries than to lose whole beds of broccoli.
Under their covers, all
of the seedlings came through with flying colors, even though the freeze
was so hard that weeds in the yard like clover and dock were nipped
back. I usually don't cover peas, but I was a little concerned
about them and carefully laid a row cover over half of the beds.
Interestingly, of the uncovered beds, one (in front of the trailer) was
moderately nipped and one (in the mule garden beside quick hoops) looked
just fine. A few pea seedlings elsewhere in the mule garden came
out from under their cover and those were nipped, so it seems like
microclimate effects are hard at work in the garden.
The good news is that, even if we don't get any tree fruits this year, we should have plenty of berries to go around. Our blueberry flowers are in what's called a tight cluster, safe down to 20 to 23 degrees, so most should be okay. Blackberries and raspberries haven't enough thought about blooming, and their leaves came through the freeze just fine. Add in strawberries and figs and we'll definitely enjoy fruits this summer --- yet another reason to grow berries even though they take a bit more work day to day than fruit trees do.
The weird thing about this to me is that while telehash uses a DHT, it's only used for finding routes between peers, not longterm data storage as proposed here.
What do you do if your hitch
pin is lost somewhere
along a muddy driveway?
Poke around the barn till you find an old, rusty socket wrench.
Got my visa, going to Brazil!
I had been very doubtful it would arrive in time, since they're overloaded with World Cup. There may have been some strings pulled behind the scenes.. Anyway the turnaround time was under 1 week.. much much faster than anticipated.
Last year, I started researching swarm traps just as the garden was heating up, so we didn't really manage to get anything going in time to catch a swarm (although a swarm did end up in the barn anyway).
But now that we have all of our ducks in a row, it's simple to bait a
few hives with lemongrass oil and hope we'll catch free bees.
This is a bit early in the year to be setting up swarm traps, but Mark noticed some honeybees nosing around the porch over the weekend, and we wondered if they were looking for a new hive cavity. The colony in our Warre hive still hasn't started building comb in the empty third box, but bees don't always read books, so it's possible the bees figured it would be easier to swarm than to build down the way they're supposed to. I could know for sure what's going on if I opened up the hive and looked for developing queen cells, but I'd rather toe the Warre line and leave the hive closed, then hedge my bets with swarm traps.
I baited three different hives, and need to put in an hour to finish building last year's real swarm trap and install it as well. It will be interesting to see which of the following a swarm of honeybees prefers:
- A Langstroth hive made up of two shallows, one box with fully drawn comb and one box empty.
- A Warre hive made up of two boxes, both with fully drawn comb.
- A top bar hive with no comb and smelling of mouse. (Over the winter, a pesky rodent nested under the lid, and even though I brushed away the nest, the scent remains.)
While this experiment
is far from scientific, I'm always curious which of the main beekeeping
methods the bees themselves would prefer, and this should give me some
indication. Here's hoping we catch a swarm early enough that it
makes it through the winter!
We've been having a problem
with our young fig tree "accidentally" exposing herself.
I've tried to explain to her how "good" fig trees stay buttoned up, but the only response I get is the classic rolling of the eyes with some lame excuse about how other fig trees are dressed these days.
As one of our readers commented, my terraforming project created tiny chinampas. All winter, the rye
I sowed on the raised parts of the beds thrived despite the soggy
aisles, and come spring, wildlife moved into the little ponds between
the beds. I found two baby snapping turtles hanging out in the
shallow water this weekend, and plenty of tadpoles are escaping their
eggs to join in the fun.
As long-time readers will realize, we struggle to deal with the wet ground in certain parts of our garden, so seeing how well these little chinampas do has been an eye-opening experience. I decided to go ahead and dig the back garden into similar raised beds to ensure that this year's tomatoes don't suffer from wet feet.
You'll know if your soil
is wet enough to need small-scale chinampas because rushes and sedges
will be growing in the mown aisles along with grass. To confirm
that the groundwater is too high for the soil to be planted into as-is,
dig around a clump of earth, then grab the grass on top as if lifting
the clump up by its hair. If the soil is well-drained, the whole
clump will stay together since roots go straight down into the
subsoil. If the soil is waterlogged, the top will peel off since
the plant roots stayed in the inch or two of soil above the water.
I dug one long chinampa
Monday, which is about all my wrists can take before they start to
complain. I mostly tried to place the sod grass-side down so it
will rot quickly, but I wasn't all that particular about it, knowing
that I can always lay down some cardboard over top before transplanting
in my tomato sets.
Of course, the down-side of turning the garden into chinampas is that I may be walking through an inch or two of water in the aisles if the summer is wet. But better my feet get wet than my tomatoes complain! Plus, if the aisles turn into ponds, they won't have to be mowed, right?
After fixing a few bugs in the
remotecontrol branch, It's landed in
master. Try a daily build today, and see if the assistant can keep in
sync using nothing more than a remote ssh repository!
So, now all the groundwork for telehash is laid too. I only need a telehash library to start developing on top of. Development on telehash-c is continuing, but I'm more excited that htelehash has been revived and is being updated to the v2 protocol, seemingly quite quickly.
Today was the day I tested
out the repair
job on the ATV
I think it's going to hold together for many future trips.
It also comes in handy for hauling bags of leaves back to the garden.
And that's the first time I've bought glasses online. Was wanting some prescription sunglasses anyway..
.. I don't use vinegar when poaching them, personally.
All winter, our farm
grows toward the sun. I plant most of our fall and early spring
crops in the mule garden, the furthest away from the shade of the
hill. We bask in the warmth that comes in the south-facing bank of
windows in front of the trailer, and our tractored chickens do the same
with their open-fronted living quarters.
But as April brings a
spell of days in the low 80s, everything turns around. First comes
the chicken tractor, which I literally turn 180 degrees so the solid
back creates a shaded zone for hot afternoons. I start to close
the shades on the trailer's west windows to block out afternoon
heat. And soon we'll even switch our work schedule so we do
outside tasks in the morning instead of the afternoon.
This heat spell won't
last long, and by tomorrow I'll be scurrying around to cover up
seedlings, glad the strawberries haven't yet opened their blooms.
The hint of summer was fun, though, since it gave me the chance to
lounge in the yard and find the year's first four-leaf clovers (two in
As a completely unrelated side note, I really appreciated everyone's rhubarb suggestions! I merged several pieces of advice together by tossing about a cup of chopped stalks with about two tablespoons of strawberry freezer jam
and roasting them at 450 degrees for about ten minutes until they were
just becoming soft. Adding the strawberry-roasted rhubarb to a
spring salad of lettuce, baby kale, and arugula, topped with hard-boiled
eggs, a store-bought avocado, and a bit more strawberry jam drizzled on
top was delicious!
ascii art that's also valid haskell code would be a funner constraint.. some day
Not sure how this happened, but my propellor config file is now an entire ascii art landscape. Be sure to scroll to the end..
Ascii art that's also a valid haskell comment is an fun constraint!
We made this first Star Plate
chicken door out of 1/4 inch plywood.
Past experience tells me it's better to have the lock on the inside.
Mark and I only tasted our first homegrown apples
last year, and those trees were already two or three years old when we
put them in the ground four years ago. By that math, the little
trees I grafted this spring won't fruit until 2020 or 2021. It's hard to imagine waiting five to
eight years to taste the fruits from the trees we just grafted.
On the other hand, you can also look at those non-fruiting years as an opportunity to really get the orchard in stellar order so the eventual fruits are so chock-full of micronutrients they knock your socks off. To that end, I'll be growing cover crops in the tree alleys where this year's babies will be set out next year, and then I'll probably grow vegetables or raspberries in between the baby trees in later years until the trees begin to fill in their space. The bed I pulled blackberries out of last fall is proof that simply topdressing soil with manure and mulch every year will result in supremely dark and loose earth in no time, and I'm sure my apple trees would love some soil like that to grow into.
mental perambulation reminded me that I have some spare room in between
the new grape vines I installed this past fall. I mulched the
grape rows well to begin the battle against weeds, but the transplants
won't have spread their roots far yet. Why not sneak in an extra
two dozen cabbage transplants into that ground? In an effort to
hedge my bets against weird weather, I started about 200 more cabbage
seedlings under the quick hoops than I actually need, and they all came
up, thrived, and need homes. I know I have a plant-propagation
problem...but I can quit any time....
Made ssh connection caching be used in several more places.
sync will use it when pushing/pulling to a remote, as will the assistant.
git-annex remotedaemon also uses connection caching. So, when
a push lands on a ssh remote, the assistant will immediately notice it, and
pull down the change over the same TCP connection used for the
This was a bit of a pain to do. Had to set
GIT_SSH=git-annex and then
when git invokes git-annex as ssh, it runs ssh with the connection caching
Also, improved the network-manager and wicd code, so it detects when a connection has gone down. That propagates through to the remote-daemon, which closes all ssh connections. I need to also find out how to detect network connections/disconnections on OSX..
Otherwise, the remote-control branch seems ready to be merged. But I want to test it for a while first.
Followed up on yesterday's bug with writing some test cases for Utility.Scheduled, which led to some more bug fixes. Luckily nothing I need to rush out a release over. In the end, the code got a lot simpler and clearer.
-- Check if the new Day occurs one month or more past the old Day. oneMonthPast :: Day -> Day -> Bool new `oneMonthPast` old = fromGregorian y (m+1) d <= new where (y,m,d) = toGregorian old
Today's work was sponsored by Asbjørn Sloth Tønnesen.
I have sometimes considered renting a very-high-res video camera (Red or something) and bringing it to the back of conference auditoriums, then replaying each visible screen later.
for research purposes only of course..
is tidy closing tags client-side? I'd expect pump.io servers would need to be responsible for rejecting invalid html
(otherwise, there would be a security hole)
The garden bounty is
starting to come in, which is lucky since our freezer and larder are
nearly bare. We're eating leaf lettuce every day, kale nearly
daily, shiitake mushrooms from the old logs under the fruit trees
whenever they feel like popping up, lots of chives and Egyptian onions,
and masses of eggs. Working with what's in season, I made this recipe with shiitakes and dandelion greens in place of the sweet potatoes, and it was delectable!
The new crop coming in this week is rhubarb. I have two neglected plants...neglected because I rarely think of eating rhubarb. The trouble is that the sour stalks require so much sweetening, they don't push my good-for-you buttons. Does anyone have a recipe for rhubarb that doesn't rely on copious sweeteners? If all else fails, I'll do what I usually do --- give the stalks to my mother or brother to bake into a pie.
Pushed out a new release today, fixing two important bugs, followed by a second release which fixed the bugs harder.
Automatic upgrading was broken on OSX. The webapp will tell you upgrading failed, and you'll need to manually download the .dmg and install it.
With help from Maximiliano Curia, finally tracked down a bug I have been chasing for a while where the assistant would start using a lot of CPU while not seeming to be busy doing anything. Turned out to be triggered by a scheduled fsck that was configured to run once a month with no particular day specified.
That bug turned out to affect users who first scheduled such a fsck job after the 11th day of the month. So I expedited putting a release out to avoid anyone else running into it starting tomorrow.
(Oddly, the 11th day of this month also happens to be my birthday. I did not expect to have to cut 2 releases today..)
Bulk Containers have a 2.5 inch fitting that we needed reduced down
to a typical 3/4 inch hose hookup. The difficulty is guessing what kind
of threading it is.
These rubber connectors snug up to any threading and are easy to install.
We nearly always see frosts right up to our frost-free date
of May 15, but starting in mid-April, we also enjoy multiple-day
periods without freezing temperatures. It's worth taking the
seedlings outside for some of those warm days, especially as they get
bigger and more able to handle breezes and blazing sun.
Sunbathing-seedling afternoons also give me a chance to overwater pots so water runs out the bottom without making a mess inside. This type of watering helps prevent salt buildup in the growing zone of the pots, and while it's probably not necessary with short-term potted plants, flushing out the pots makes me happy.
If we lived in a normal, climate-controlled dwelling, I'd have to be more careful of my first stages of hardening off. But since our trailer often drops down into the mid-forties at night at this time of year, similar temperatures outside are no big deal for our seedlings. I do continue to take them inside at night, though, if the forecast low is below 45 --- our microclimate seldom matches the forecast, and it would be a shame to lose all of these little tomatoes and peppers to a freak frost.
In just released Propellor 0.3.0, I've improved improved Propellor's config file DSL significantly. Now properties can set attributes of a host, that can be looked up by its other properties, using a Reader monad.
This saves needing to repeat yourself:
hosts = [ host "orca.kitenet.net" & stdSourcesList Unstable & Hostname.sane -- uses hostname from above
And it simplifies docker setup, with no longer a need to differentiate between properties that configure docker vs properties of the container:
-- A generic webserver in a Docker container. , Docker.container "webserver" "joeyh/debian-unstable" & Docker.publish "80:80" & Docker.volume "/var/www:/var/www" & Apt.serviceInstalledRunning "apache2"
But the really useful thing is, it allows automating DNS zone file creation, using attributes of hosts that are set and used alongside their other properties:
hosts = [ host "clam.kitenet.net" & ipv4 "10.1.1.1" & cname "openid.kitenet.net" & Docker.docked hosts "openid-provider" & cname "ancient.kitenet.net" & Docker.docked hosts "ancient-kitenet" , host "diatom.kitenet.net" & Dns.primary "kitenet.net" hosts ]
hosts is passed into
Dns.primary, inside the definition
hosts! Tying the knot like this is a fun haskell laziness trick. :)
Now I just need to write a little function to look over the hosts and generate a zone file from their hostname, cname, and address attributes:
extractZoneFile :: Domain -> [Host] -> ZoneFile extractZoneFile = gen . map hostAttr where gen = -- TODO
The eventual plan is that the
cname property won't be defined as a
property of the host, but of the container running inside it.
Then I'll be able to cut-n-paste move docker containers between hosts,
or duplicate the same container onto several hosts to deal with load,
and propellor will provision them, and update the zone file appropriately.
Also, Chris Webber had suggested that Propellor be able to separate values from properties, so that eg, a web wizard could configure the values easily. I think this gets it much of the way there. All that's left to do is two easy functions:
overrideAttrsFromJSON :: Host -> JSON -> Host exportJSONAttrs :: Host -> JSON
With these, propellor's configuration could be adjusted at run time using JSON from a file or other source. For example, here's a containerized webserver that publishes a directory from the external host, as configured by JSON that it exports:
demo :: Host demo = Docker.container "webserver" "joeyh/debian-unstable" & Docker.publish "80:80" & dir_to_publish "/home/mywebsite" -- dummy default & Docker.volume (getAttr dir_to_publish ++":/var/www") & Apt.serviceInstalledRunning "apache2" main = do json <- readJSON "my.json" let demo' = overrideAttrsFromJSON demo writeJSON "my.json" (exportJSONAttrs demo') defaultMain [demo']
Just had the interesting experience of a trivial typo that the type checker couldn't catch de-provisioning a total of 7 containers spread across 3 hosts. Right down to scrubbing the images.
Oh well, I can re-provision automatically. Just a matter of fixing the typo..
- (as . getAttr p) + (getAttr p . as)
... and waiting for rather a lot of apt-getting.
It's time for either QuickCheck or a non-production branch, I think...
The sound our mower makes when it starts on the first pull is my favorite Spring sound next to toad songs and grouse thumping.
Course you could speak on something completely different. Like the issue of how to keep free software relevant to coming generations, for instance.
I guarantee your talk won't be rejected, because DebConf either accepts a talk or lets it be ad-hoc unconference scheduled.
My server, Kite, is finishing its 20th year online.
It started as kite.resnet.cornell.edu, a 486 under the desk in my dorm room. Early on, it bounced around the DNS -- kite.ithaca.ny.us, kite.ml.org, kite.preferred.com -- before landing on kite.kitenet.net. The hardware has changed too, from a succession of desktop machines, it eventually turned into a 2u rack-mount server in the CCCP co-op. And then it went virtual, and international, spending a brief time in Amsterdam, before relocating to England and the kvm-hosting co-op.
Through all this change, and no few reinstalls from scratch, it's had a single distinct personality. This is a multi-user unix system, of the old school, carefully (and not-so-carefully) configured and administered to perform a grab-bag of functions. Whatever the users need.
I read the olduse.net
hacknews newsgroup, and I
see, in their descriptions of their server in 1984, the prototype of Kite
and all its ilk.
It's consistently had a small group of users, a small subset of my family
and friends. Not quite big enough to really turn into a community, and we
talk less than we once did.
Exhibit: Kite as it appeared in the 90's
[Intentionally partially broken, being able to read the cgi source code is half the fun.]
Kite was an early server on the WWW, and garnered mention in books and print articles. Not because it did anything important, but because there were few enough interesting web sites that it slightly stood out.
Many times over these 20 years I've wondered what will be the end of Kite's story. It seemed like I would either keep running it indefinitely, or perhaps lose interest. (Or funding -- it's eaten a lot of cash over the years, especially before the current days of $5/month VPS hosting.) But I failed to anticipate what seems to really be happening to it. Just as I didn't fathom, when kite was perched under my desk, that it would one day be some virtual abstract machine in a unknown computer in anther country.
Now it seems that what will happen to Kite is that most of the important parts of it will split off into a constellation of specialized servers. The website, including the user sites, has mostly moved to branchable.com. The DNS server, git server and other crucial stuff is moving to various VPS instances and containers. (The exhibit above is just one more automatically deployed, soulless container..) A large part of Kite has always been about me playing with bleeding-edge stuff and installing random new toys; that has moved to a throwaway personal server at cloudatcost.com which might be gone tomorrow (or might keep running for free for years).
What it seems will be left is a shell box, with IMAP access to a mail
server, and a web server for legacy
/~user/ sites, and a few tools that
my users need (including that
pine program some of them are still stuck
Will it be worth calling that Kite?
[ Kite users: This transition needs to be done by December when the current host is scheduled to be retired. ]
When I placed my perennial order last fall, I hadn't planned on attending a grafting workshop.
So, in addition to a couple of second-generation hybrid hazels, another
hardy kiwi, and a blueberry gift for Kayla, I ordered five pear
rootstocks and eight apple rootstocks for the two of us to split.
You'd think those rootstocks would be going begging with ten newly grafted plants in a nursery bed, but I still had five pieces of carefully collected scionwood waiting to be put to the knife. I remind myself that these apples will be going onto M7 instead of MM111 rootstock, so they can be planted a few feet closer together --- surely I'll be able to find them a home at this time next year when they're ready to leave the nursery bed?
of the apple varieties I wanted to try this year is the chestnut crab,
which I think might make the sweet, tiny apples I used to pick from a
street tree when I was a kid. A reader sent me some extra
scionwood, and when I pulled the twigs out of their protective wrapping,
I discovered that the bases had callused.
This enlarged white area is what often happens when a cutting is
starting to root, so I figured I'd take the extra pieces and stick them
in a pot of soil in my propagation area to see what will happen.
My understanding is that most crabapples don't get much bigger than an
apple grafted onto semi-dwarf rootstock, and since crabapples can also
be used as rootstocks for other apples, if these two cuttings root, I'm
sure they'll have a use on the homestead. (Yes, I am incapable of
turning away from anything perennial that shows potential for rooting.)
On a final appley note, I pulled my Arkansas Black seeds
out of the fridge a week or so ago and noticed there was ice on the
damp rag I'd put in their container. So I let the whole thing sit
out for a few days and soon noticed little roots pushing their way out
of the dark seed coats! I carefully transplanted each sprouted
seed into a depression in a pot of stump dirt and now the baby apples
are opening up their leaves. Yet another fun fruiting experiment
in the making!
Today was the first day of our 2 new Hazelnut varieties. Jefferson and Eta.
Today was the first day of our 2 new Hazlenut varieties. Jefferson and Eta.
The git-remote-daemon now robustly handles loss of signal, with reconnection backoffs. And it detects if the remote ssh server has a too old version of git-annex-shell and the webapp will display a warning message.
Also, made the webapp show a network signal bars icon next to both ssh and xmpp remotes that it's currently connected with. And, updated the webapp's nudging to set up XMPP to now suggest either an XMPP or a ssh remote.
I think that the
remotecontrol branch is nearly ready for merging!
Today's work was sponsored by Paul Tagliamonte.
At one month old, our chicks still fit into their brooder,
but quarters are starting to get cramped. So we're beginning to
get more serious about putting the finishing touches on the starplate coop to ready it for move-in day.
While Mark worked on gutters and popholes Tuesday, I took over the door step in front of the coop. The deep bedding system is a great way to manage manure, but it does make doors difficult to close since bedding tends to push through the opening. For this coop, we opted to raise the doors up above the eventual height of the bedding, then to add a door step to hold the bedding in place (and to keep chicks from running under the door while the bedding is low). Sinking cinderblocks partway into the soil behind the door seemed to do the trick, but only time will tell how they'll hold up to daily traffic.
I figure we'll be 100% finished with the coop the first time a chick starts scratching where it shouldn't. Nothing like a living deadline to finish up a complicated project.
I just finished adding a `period` combinator. Now I can specify "Docker.garbageCollected `period` Daily", which is easy enough. But I can also specify "foo `period` Divisible 2 (Monthly (Just 15))" to only check a property on the 15th of every other month. Or if I want something more readable, I can replace the data structures with a string that it can parse: foo `periodParse` "on day 15 of months divisible by 2"
I was able to build that in 15 minutes(!) because months days ago, I spent two days building a scheduling library, which the git-annex assistant uses to schedule fscks.
I have never experienced this high a level of code reuse before. Around 1/3rd of my Haskell code seems to be reusable libraries, while less than 1% of my code in other languages is.
(Now I just need to some day split all those hundreds of libraries out onto Hackage..)
I dunno, it annoys me that it mentions Stable twice, but I can't see a good way to refactor that ..
But now I need to go up a layer and build something to keep my DNS zone files up-to-date for all these containers..
git-remote-daemon is tied into the assistant, and working!
Since it's not really ready yet, this is in the
My test case for this is two client repositories, both running the assistant. Both have a bare git repository, accessed over ssh, set up as their only remote, and no other way to keep in touch with one-another. When I change a file in one repository, the other one instantly notices the change and syncs.
This is gonna be awesome. Much less need for XMPP. Windows will be fully usable even without XMPP. Also, most of the work I did today will be fully reused when the telehash backend gets built. The telehash-c developer is making noises about it being almost ready for use, too!
Today's work was sponsored by Frédéric Schütz.
wrote 16 lines of haskell code, and the following config snippet and now Propellor automatically deploys and maintains my openid provider, inside a docker container (because php)
| name == "openid-provider" = Just $ Docker.containerFrom (image $ System (Debian Stable) "amd64") [ Docker.publish "8081:80" , Docker.inside $ props & Apt.stdSourcesList Stable & Apt.unattendedUpgrades & OpenId.providerFor ["joey", "liw"] ]
Hanging gutters is pretty easy once you figure out the front end goes first.
List of feeds:
- Anna: last checked (25 posts)
- Anna and Mark: Waldeneffect: last checked (1714 posts)
- Anna and Mark: Clinch Trails: last checked (10 posts)
- Joey: last checked (62 posts)
- Joey chatter: last checked (388 posts)
- Joey git-annex devblog: last checked (149 posts)
- Joey: olduse.net blog: last checked (11 posts)
- Jay: last checked (25 posts)
- Dani: last checked (21 posts)
- Errol: last checked (28 posts)
- Adrianne: feed not found (1 posts)
- Maggie: Not Found (715 posts)
- Maggie: What Wabi Sabi Isn't: last checked (4 posts)
- Tomoko: last checked (69 posts)
- Jerry: last checked (28 posts)