Anna (Anna and Mark: Waldeneffect)
Why *not* to get goats
Goat in wheelbarrow
"I must say, you've made selling my girlfriend on the benefits of having a small farm both easier, and more difficult. She is obsessed with having goats, and when she found out that they're about the only thing that eats Japanese honeysuckle and kudzu, she seized on that as her justification for having a couple, 'since you wanted a farm anyway.' You've been absolutely no help at all in that battle, what with all the pictures of your ridiculously cute and well-behaved goats. Couldn't you vilify them just a *little*? I dunno, maybe make a post saying how they broke out and committed arson or something?

"Otherwise, I swear, I'm going to come home from work one of these days and there's going to be a goat in my apartment..."

--- Dave

Blue-eyed goatWell, Dave, let me tell you about how Artemesia broke out this week and committed arson....

Okay, maybe she really just jumped up into the wheelbarrow while I was cleaning out the coop and ensured that her picture would be found in the next edition of the dictionary under "adorable."

More seriously, I have to admit that after four months with goats, I wouldn't recommend them for 90% of homesteaders. Artemesia is like a delightful hybrid between a loyal dog and a rainbow, but I'd feel terribly guilty if I didn't give our goats at least half an hour of attention per day.

And boy do they eat! We're currently giving our duo lots of hay and are letting them graze down several decades' worth of honeysuckle, but we'll be scrambling pretty hard this summer to get enough pasture areas established to ensure that Gardening with a goatour goats don't eat us out of house and home. And I'll also be putting more effort into gardening so we can grow enough fodder crops to make up for the honeysuckle, which won't be here next year if our goats' current appetites are any indication.

Then there's the expense. We actually haven't had any real escapes, but that's because we're paying top dollar by fencing with cattle panels (and because we chose half-miniature goats and keep them quite happy). That makes goats a very pricey endeavor (although the fencing should last for a lifetime and can be used with any other livestock we end up acquiring). Yes, you can fence with cheaper materials...but I suspect I'd love Artemesia much less if she ended up gnawing on my dwarf apple trees.

Goat with pitchfork

I lobbied hard for goats nearly from the beginning, and even though I pouted at the time when Mark said no, I can see now that we weren't ready for goats until the last year or two. A new homestead is a huge time- and money-sink, and we just wouldn't have had the ability to truly enjoy goats at that time. So, I have to admit that I'm probably on Dave's side on this issue and would recommend that he and his girlfriend not get goats quite yet.

On the other hand, if you don't want any goats in your apartment, you might want to pry the computer out of your girlfriend's hands right now. Because once Abigail's kids show up, the goat pictures are going to get even cuter.... You've been warned!

Joey chatter

Had a real scare today about losing my gpg key.

It turned out I did have the 3 of 5 shares needed to get it back, but I only realized that after trying to undelete secring.gpg, and after successfully restoring the key from .gnupg/private-keys-v1.d/, where gpg2 had helpfully stashed a copy.

Whew! Need to add a printout in a safe somewhere.

Joey chatter

FOSDEM already? I've only looked at 3 LCA videos, and still have around a dozen CCC talks I want to catch.

WInter conference season is rough..

Joey chatter
long comment tail

I've had several recent blog posts on the front page of Hacker news. Generally the Sunday after I write them.

Often they get 30k page views and not a single comment (on the blog or HN), which is understandable since my blog has been somewhat esoteric lately. (My poor mum, trying to make sense of monads)

But then there's comments on 8 year old blog posts. Like

This is something that worries me about the pump network BTW, discoverability for old posts is not very good. Most posts don't seem to be getting into the Internet Archive; it visits my page only a few times a year, and Evan's only a little more often. I'll bet that google doesn't much notice when pump posts are shared and popular unless a traditional website links to them, either. This is likely not good for both long tail effects and network growth effects.

Anna (Anna and Mark: Waldeneffect)
Goat-milk soap and lip balm giveaway
Goat soap

People keep giving me soap. Do you think it's a hint?

Happy goatsMore seriously, Donna and Jessica from Happy Goats Soap Company recently sent us a sampler pack of their homemade products to try out. I'm a hard woman to please when it comes to beauty products since I don't like scented anything, but the duo came through with a special-order bar of unscented soap (which you can buy on their website by clicking the "Request Special Order" button). The soap does the trick, providing a good lather but washing off clean while also providing the gentle moisturizing action that goat-milk soap is known for.

Although mildly scented, I also immediately fell in love with their Minty Man No Shine Lip Salve. I once had an awesome tube of lip balm from Aveeno, but everything I've tried to replace it with (primarily Burt's Bees) has turned my lips white and my husband off. Happy Goats' lip balm is even better than I recall the Aveeno stick being, providing an invisible coating that helps dry winter lips return to a happy state in short order.

Do you want to try your own Happy Goats skin-care products? Donna and Jessica have a bar of rose soap and a tube of lip balm with one lucky reader's name on it. Enter the giveaway below to win!

meet my new best friend, M

Meditating restructures you brain folks!

All in 40 breaths, trying to relax is a complicated equation. As a Quaker I used to think I had meditation down pat but I am like everybody else when not in a meeting. Until today, thank Joy! You introduced me to our friend meditation.
I've started thinking about dying alone, different versions of that story. The obvious sadness that when I am 100 and ready to kick it, my Mom will not be by my side and probably not my Dad either. I've been thinking my different ways are stinky enough to drive the crowd away.
But also, I started rejoicing that solitude. When I'm busy or in the sun or drinking hot tea, I start feeling about in another direction: loving myself for who I am and respecting the solitude.

Thank god I have some time to figure it out!

Spitting images



Impression of wing

left in mud. Worm lies under

bark, badger shifts eyes.


The robin will come,

high o're two field naturalists,

buds rich with sunlight.


Effervescent pond

bubbles break consumed

frog meditating.


Timid house finch, seed

beek looking warm, sun shining.

Tap dancing on roof.


Flicker gentler than

remembered. Then finding warm

wood, start hammering.


Drippy melting snow.

Why did you come for such a

short visit? Come back!


More sludge than mud, man

nearly slips on his way up

steep graded hillside.

Choose the Other Path

For Anna and Mark (just 'cause)


There will come a day when the

gravel will be tired of pretending.

You will choose the other path on the way up to the dog lot,

and instinctively go that way skirting yesterday's observations,

the impression of a wing you had found will return to you

nearly stumbling over the long gray white feathers of a dove.

Before you find the time to wonder, the old maple root

will blink up at you; the scratchy raspberry vine segmented off

on your glove will start crawling along and

gravel will glow like embers.


Dreams can be real, see. I don't want you to lose your hope for it.

But until then, I've been thinking of our hand in it.

What if the US military used all that might

and all that manpower and put it to cleaning our sickly ocean.

How many buff men and women on bikes would it take

to provide the power wars ask after?


Somewhere in dream or reality a rock dove

wants to make us a peaceable kingdom.

Joey git-annex devblog
day 248 workload tuning

Today I put together a lot of things I've been thinking about:

  • There's some evidence that git-annex needs tuning to handle some unusual repositories. In particular very big repositories might benefit from different object hashing.
  • It's really hard to handle upgrades that change the fundamentals of how git-annex repositories work. Such an upgrade would need every git-annex user to upgrade their repository, and would be very painful. It's hard to imagine a change that is worth that amount of pain.
  • There are other changes some would like to see (like lower-case object hash directory names) that are certianly not enough to warrant a flag day repo format upgrade.
  • It would be nice to let people who want to have some flexability to play around with changes, in their own repos, as long as they don't a) make git-annex a lot more complicated, or b) negatively impact others. (Without having to fork git-annex.)

This is discussed in more depth in v6.

The solution, which I've built today, is support for tuning settings, when a new repository is first created. The resulting repository will be different in some significant way from a default git-annex repository, but git-annex will support it just fine.

The main limitations are:

  • You can't change the tuning of an existing repository (unless a tool gets written to transition it).
  • You absolutely don't want to merge repo B, which has been tuned in nonstandard ways, into repo A which has not. Or A into B. (Unless you like watching slow motion car crashes.)

I built all the infrastructure for this today. Basically, the git-annex branch gets a record of all tunings that have been applied, and they're automatically propigated to new clones of a repository.

And I implemented the first tunable setting:

git -c annex.tune.objecthashlower=true annex init

This is definitely an experimental feature for now. git-annex merge and similar commands will detect attempts to merge between incompatably tuned repositories, and error out. But, there are a lot of ways to shoot yourself in the foot if you use this feature:

  • Nothing stops git merge from merging two incompatable repositories.
  • Nothing stops any version of git-annex older from today from merging either.

Now that the groundwork is laid, I can pretty easily, and inexpensively, add more tunable settings. The next two I plan to add are already documented, annex.tune.objecthashdirectories and annex.tune.branchhashdirectories. Most new tunables should take about 4 lines of code to add to git-annex.

Joey chatter
consumer electronics

10 tiny torx screws and masking tape. That's what I hate about taking a laptop apart. The fan yesterday developed a slight burr, almost unnoticable until you do and then annoying without end.

Had to work on it for 2 solid hours. My smallest torx bit didn't quite fit; lived in fear of stripping the screws. Rehearsed everything on my same-model parts laptop, and still hated every minute of it. Eventually I disconnected the fan, for now. Its cable was held down by a spot of masking tape. That's new; they must have changed cable lengths and this was some engineer's quick fix.

And that's what I hate about taking a laptop apart, I see the shortcuts, the screws that bite into plastic, the ribbon cables with their latches surely rated for < 100 cycles, the bits of tape. Once I've had a laptop apart I can never look at it quite the same way again, as a hunk of consumer electronics that is going to work for a while, until entropy eats it and it doesn't. I know , and somehow, when it comes to consumer hardware, I don't want to.

Software is so different for me, I had no problem PEEKing and POKEing away at the fan controller's bits last night, although I have not managed to adapt to work with this model so far, and only managed to get the fan stuck on high, rather than turned off.

I want a bunnie laptop. If it's designed to be taken apart, it wouldn't bother me.

Anna (Anna and Mark: Waldeneffect)
Farmstead Feast

Farmstead Feast: WinterOkay, so I could tease you with tantalizing tidbits from my newest ebook. I could tell you that it's got recipes that will help you tenderize the tougher cuts of pastured meat and to substitute wholesome vegetables for grains in delicious recipes.

Or I could just set the book free for one day only so you can pick up your own copy and give it a read. (And, maybe, if you want to make my day a little brighter, you'll leave a review on Amazon or Goodreads when you're done.)

Hmm, that second option sounds better for everybody involved. So, go download right now while it's free! Enjoy!

Buds Rich with Sunlight


Bare weed tree wrapped with

poison oak, mumified by

snow. Wren chipping bark.


Before mulberry

buds, five wrens rest high above.

Swaying prayer flag.


Farmer pauses back

pressed against one firm weed trunk.

Cello music drifting.


Day ahead, mud stained snow.

Long path lit up, as under

quilt. Secretly reading.


One tree falling. Hike

over drive, cutting sections.

Frosted afternoon.


Gliding over fields,

stream detour. Even heron

great blue sees her breath.


Two snowy goslings

wadling through thickly caked snow.

Fox nose twitching high.


Agenda of one

crow, interupted by squirrel.

Moment of chaos.


Florist's courier

biking through. One hothouse rose

rests on dusty snow.


Ice cycles mark stream

spring will bring. Underneath, spec

minnow waits to thaw.


Girl walking two dogs

watching their panting crystalize

Caught in bluebird swarm.


Blue green peacock fans

tail. Down feathers float beside

drops of snow, circling.


Warn poet under

fabric bundle. Smiling to

window muse. Grey sky.


Bark twists around trunk,

sycamore like tinsel,

boy in red hat pulls.


Defiant morning

sun knows no boundaries. Ginger

leaves lift their heads high.


Older lady steps

off bus. Shawl over her ears.

Oil paints in orphanage.


Trying art, snaggle

toothed girl rests hands warm. Slowly

painting dry canvass.


Looking out over

potted celery, wilting on

sill. Dark evening.


Infant neighbor calls

accross road to deaf couple.

Jay bird caws answer.


Mushrooms coat

log. Slugs sail on slime covered

fern fronds. Owl deep whoo.


Not hitting kittens

but thudding clay clods. But still

not hitting kittens.


When apples go down

empty hands wave. Shouting out

"corseys." Umbuntu.


Two rare quail back to

back. Another descending.

Pot, cup, same pattern.


Unusual noon heat

toes airing out, wriggling damp

sweat. Same way rain sprays.


Girls straw in teeth, crack

pecans clenching their fists, then

off to climb a tree.


Only some dogs come for

woman in green slicker. Rain

becomes sleet. Patter.


Vultures know circles

not showy. Rabbit droppings

fill puppy belly.


Poets also make

Candy. Froth egg whites, sugar.

Parchment paper reeled.


Lone eagle on craig

hikers hear talon scrape rocks.

Safe remote unseen.


Recess lone boy finds

robin, trash tangled claw. Works

free bird, lifted loose. Hope.


Listen. Dog exhaust,

car tires rolling in puddles.

Shiver, strain listen.

Haiku Challenge

17 syllables give or take, not to be confused with words, debatably easy to write.

Today in about 4 hours, with breaks, I produced 31 haiku for the month of January.

The immediate question: were they any good?

How many Haikus can you write in one day?

I am putting mine in a future post to substantiate my gloat.

mark (Anna and Mark: Waldeneffect)
Limping along
Jump starting

Our old farm truck is still limping along. Five months in the swamp and getting yanked out by a tractor necessitated repairing the gas tank and putting the universal joint back in after it fell out.

But we're still suffering from a short that drains the battery after a few days of disuse. That wouldn't be so bad if the hood latch didn't stick and require four hands every time we needed to open it.

Our mechanic repaired the sticking hood latch, but was left scratching his head over the short. I think I'll install a switch on the battery so I can turn it off when not in use.

Anna (Anna and Mark: Waldeneffect)
What to do with weedy manure

Grazing goatsWhat's the best use for seedy manure? As I drooled over the combination of straw, dropped weedy hay, and goat manure and urine in our goat coop, these are the options I came up with:

  • Try to get a compost pile hot enough to kill all of the seeds in the goats' dropped hay. Pro: Much-needed compost for the vegetable garden. Con: Loss of a lot of nitrogen due to the contents sitting out in our rainy climate, plus a relatively long wait and quite a bit of pile-turning. And, to be honest, I don't really believe I'd kill all the seeds despite all the effort.
  • Turn in the chickens and hope they scratch through and eat up all the seeds. Pro: Maybe the compost would be weed-free enough for the garden afterwards, and the chickens would enjoy the adventure. Con: I'd either have to move all of the bedding from the goat coop to the chicken coop (at opposite ends of our core homestead), or I'd have to move the chickens to the bedding and hope our birds get along well with the goats. And, once again, I don't really believe the result would be weed-free.
  • Mangel definitionPut the weedy compost under a kill mulch. Pro: A very easy solution, and I do want to kill mulch a few new areas this spring. Con: I won't be getting compost where it's needed most --- in the main garden.
  • Deposit the kill mulch as a thin layer in the tree alleys, then use chickens to scratch up any sprouting seeds so I can plant goat-fodder crops there in the summer. Pros: This solution is even easier than the last since the bedding would be used close to the source, and I wouldn't even need masses of cardboard to cover everything over. Con: The chickens might not kill all the weed seeds, meaning that the area would stay unplantable (but would get some much-needed nutrition).

At the moment, I'm leaning toward the last option, especially since the whole point of my new kill mulches this spring was going to be to make some spots for the mangels and field corn I want to plant for next winter's goat feed. But I'm open to suggestions. What would you do with a mixture of straw, dropped hay, and goat urine and manure? I feel so rich having another source of organic matter to deposit into our farm's ecosystem!

Joey chatter

To set books free into the wild with tracking. (look for book exchange)

To arrange for new homes.

Reminds me I never did check what happened to the Ted Nelson book that I registered with bookcrossing and shelved next to WWW for Dummies at the local library..

Joey chatter

fire: check
food: check
sunlight: check
interesting commentary on my code: check

If it's not broke...

Oh my goodness. Last night I wrote into convincing myself to not go off Abilify as a response to what someone in an online bipolar forum said. I then accidentally deleted the culmination of my decision!

But the person in the bipolar forum was right and I was right last night. By virtue of wanting to live a simple life, I didn't want to have to take an extremely expensive medicine, even if my copay is zero. I didn't want to take a medicine if there was a low likelihood I need it. And that is what the medical professionals were telling me.

But A. What about the antidepressant effects of Abilify? I need that. And B. What about putting mental wellbeing first? That has been the game plan that has kept me out of trouble. And C. What about if it's not broke don't fix it? The medicine is not causing new impending side effects, so why fix it.

The other day I went out to get a hair cut or trim. But when the hair dresser informed me my hair "is short already" I had no problem going home without a hair cut, and with a little more money in my pockets. Somehow that reminds me of the medicine. Hair and medicine stitched to the fabric of my being, might as well not change what is not broken!

Anna (Anna and Mark: Waldeneffect)
High-density sugar maples for syrup

While scanning the hillside for other sugar maples along my usual morning walk, Mark and I discussed the possibility of planting some new maples for tapping later in our lives. The hillside I walk past daily is a perfect location for sugar maples --- a damp, north-facing spot --- and I suspect the only reason sugar maples aren't currently in residence is because the area was logged too recently for this semi-old-growth species to thrive in the young woods.

But when I got home and did some research, I discovered that planted sugar maples won't be ready to tap for at least forty years. I consider myself a long-term thinker...but that's really long term (especially given current climate fluctuations and our location at the southern extreme of the sugar maple's range). Instead, I started wondering whether the intriguing experiments carried out at the Proctor Maple Research Center might not be a better avenue to explore. The scientists in charge have been experimenting with a high-density, pollarded maple operation and have found that you can harvest up to ten times as much sap per acre using high-density trees, with the initial harvest only seven years after planting. Now that sounds like something I'd like to try!

Collecting sap from a pollarded treeThe big negative about this high-density maple system from a backyard standpoint is that you have to use a vacuum system to get the sap out of the trees. Timothy Perkins of the Proctor Maple Research Center kindly wrote back to me within hours with answers to my numerous questions, and he noted: "Vacuum is REQUIRED. You will get almost no sap without it. In addition, the 'sap caps' are not commercially available. We are working with maple equipment manufacturers now, and expect there will be a product available for the 2017 sap season." I'm not too worried about the lack of commercial sap caps --- it looks like something we can easily cobble together --- and Mark suspects that we could also come up with a backyard-style vacuum system using a breast pump (like we'll be using on our goats) or a shop vac. Plus, I don't have to figure that out until 2022, so why not go ahead and plant now?

Unfortunately, the system is very new, so Perkins had less concrete answers for my other questions. When asked how close together the trees should be planted, Perkins said that his experiments utilized an already-existing nursery, and thus he doesn't have solid data on optimal spacing. However, one news article suggested a trees-per-acre density that would come down to one sugar maple every three feet, which seems like a good start. In terms of frequency of harvest, Perkins said that after the first seven years of growth "you can harvest for several years prior to letting the saplings 'rest.'" (And, keep in mind that like with other pollarding systems, you'd also get firewood for energy and leaves for mulch out of the planting.)

So will we be planting high-density sugar maples this winter? I suspect Mark will talk me into setting aside at least one experimental row, but first I need to do some more research. "It would be best to plant high-sap sugar-content saplings," Perkins now I need to do a bit more research and track down a source.

Joey chatter
things I forgot to do today

stoke fire (brr!)
eat dinner (1 am cereal does not count)
see sunlight (charge controler indicates there was some)

Planning to do better tomorrow.

making propellor safer with GADTs and type families

Since July, I have been aware of an ugly problem with propellor. Certain propellor configurations could have a bug. I've tried to solve the problem at least a half-dozen times without success; it's eaten several weekends.

Today I finally managed to fix propellor so it's impossible to write code that has the bug, bending the Haskell type checker to my will with the power of GADTs and type-level functions.

the bug

Code with the bug looked innocuous enough. Something like this:

foo :: Property
foo = property "foo" $
    unlessM (liftIO $ doesFileExist "/etc/foo") $ do
        bar <- liftIO $ readFile "/etc/foo.template"
        ensureProperty $ setupFoo bar

The problem comes about because some properties in propellor have Info associated with them. This is used by propellor to introspect over the properties of a host, and do things like set up DNS, or decrypt private data used by the property.

At the same time, it's useful to let a Property internally decide to run some other Property. In the example above, that's the ensureProperty line, and the setupFoo Property is run only sometimes, and is passed data that is read from the filesystem.

This makes it very hard, indeed probably impossible for Propellor to look inside the monad, realize that setupFoo is being used, and add its Info to the host.

Probably, setupFoo doesn't have Info associated with it -- most properties do not. But, it's hard to tell, when writing such a Property if it's safe to use ensureProperty. And worse, setupFoo could later be changed to have Info.

Now, in most languages, once this problem was noticed, the solution would probably be to make ensureProperty notice when it's called on a Property that has Info, and print a warning message. That's Good Enough in a sense.

But it also really stinks as a solution. It means that building propellor isn't good enough to know you have a working system; you have to let it run on each host, and watch out for warnings. Ugh, no!

the solution

This screams for GADTs. (Well, it did once I learned how what GADTs are and what they can do.)

With GADTs, Property NoInfo and Property HasInfo can be separate data types. Most functions will work on either type (Property i) but ensureProperty can be limited to only accept a Property NoInfo.

data Property i where
    IProperty :: Desc -> ... -> Info -> Property HasInfo
    SProperty :: Desc -> ... -> Property NoInfo

data HasInfo
data NoInfo

ensureProperty :: Property NoInfo -> Propellor Result

Then the type checker can detect the bug, and refuse to compile it.


Except ...

Property combinators

There are a lot of Property combinators in propellor. These combine two or more properties in various ways. The most basic one is requires, which only runs the first Property after the second one has successfully been met.

So, what's it's type when used with GADT Property?

requires :: Property i1 -> Property i2 -> Property ???

It seemed I needed some kind of type class, to vary the return type.

class Combine x y r where
    requires :: x -> y -> r

Now I was able to write 4 instances of Combines, for each combination of 2 Properties with HasInfo or NoInfo.

It type checked. But, type inference was busted. A simple expression like

foo `requires` bar

blew up:

   No instance for (Requires (Property HasInfo) (Property HasInfo) r0)
      arising from a use of `requires'
    The type variable `r0' is ambiguous
    Possible fix: add a type signature that fixes these type variable(s)
    Note: there is a potential instance available:
      instance Requires
                 (Property HasInfo) (Property HasInfo) (Property HasInfo)
        -- Defined at Propellor/Types.hs:167:10

To avoid that, it needed ":: Property HasInfo" appended -- I didn't want the user to need to write that.

I got stuck here for an long time, well over a month.

type level programming

Finally today I realized that I could fix this with a little type-level programming.

class Combine x y where
    requires :: x -> y -> CombinedType x y

Here CombinedType is a type-level function, that calculates the type that should be used for a combination of types x and y. This turns out to be really easy to do, once you get your head around type level functions.

type family CInfo x y
type instance CInfo HasInfo HasInfo = HasInfo
type instance CInfo HasInfo NoInfo = HasInfo
type instance CInfo NoInfo HasInfo = HasInfo
type instance CInfo NoInfo NoInfo = NoInfo
type family CombinedType x y
type instance CombinedType (Property x) (Property y) = Property (CInfo x y)

And, with that change, type inference worked again! \o/

(Bonus: I added some more intances of CombinedType for combining things like RevertableProperties, so propellor's property combinators got more powerful too.)

Then I just had to make a massive pass over all of Propellor, fixing the types of each Property to be Property NoInfo or Property HasInfo. I frequently picked the wrong one, but the type checker was able to detect and tell me when I did.

A few of the type signatures got slightly complicated, to provide the type checker with sufficient proof to do its thing...

before :: (IsProp x, Combines y x, IsProp (CombinedType y x)) => x -> y -> CombinedType y x
before x y = (y `requires` x) `describe` (propertyDesc x)

    :: (Combines (Property x) (Property y))
    => Property x
    => Property y
    => CombinedType (Property x) (Property y)
onChange = -- 6 lines of code omitted

fallback :: (Combines (Property p1) (Property p2)) => Property p1 -> Property p2 -> Property (CInfo p1 p2)
fallback = -- 4 lines of code omitted

.. This mostly happened in property combinators, which is an acceptable tradeoff, when you consider that the type checker is now being used to prove that propellor can't have this bug.

Mostly, things went just fine. The only other annoying thing was that some things use a [Property], and since a haskell list can only contain a single type, while Property Info and Property NoInfo are two different types, that needed to be dealt with. Happily, I was able to extend propellor's existing (&) and (!) operators to work in this situation, so a list can be constructed of properties of several different types:

propertyList "foos" $ props
    & foo
    & foobar
    ! oldfoo    


The resulting 4000 lines of changes will be in the next release of propellor. Just as soon as I test that it always generates the same Info as before, and perhaps works when I run it. (eep)

These uses of GADTs and type families are not new; this is merely the first time I used them. It's another Haskell leveling up for me.

Anytime you can identify a class of bugs that can impact a complicated code base, and rework the code base to completely avoid that class of bugs, is a time to celebrate!

Anna (Anna and Mark: Waldeneffect)
When is the best time to tap sugar maples?
Sapsucker holes

Large-scale maple-syrup operations in New England like to have all their taps in place around the first of March. But we southerners can get a head start on the season and tap earlier. As you can see, sapsucker holes in our favorite sugar maple are already bleeding sap, so why let the tree's sweet juices go to waste?

Drilling a hole for a spile

Interestingly, while I was researching the timing of maple tapping, I stumbled across a study in which researchers tapped some trees early (in late January or early February), some at the March 1 time most traditional farmers aim for, and some late. While late-tapped trees did produce lower yields, both early and midseason taps netted the same amount of liquid. Why? Early taps catch sap that midseason taps miss, but those early holes tend to close up before the flow is finished and thus miss the latest sap. So, it's really up to you when you want to tap, and for us, earlier is better --- there's much less to do on our farm in January and February than in March.

Maple spile

Mark and I had a lot of fun tapping our sugar maple last year, and we considered expanding beyond one measly spile in 2015. However, my usual morning walk goes past only this one sugar maple, and I'm not sure if I have the gumption to check on trees daily if they aren't on my normal route. Maybe if I get antsy waiting for Abigail to pop out some kids, though, I might expand my walks and our maple syruping operation.

Anna (Anna and Mark: Waldeneffect)
Signs that a goat is nearing birth
Grazing goats

At first, my primary question with our new goats was: is Abigail pregnant? More recently, since Abigail's previous owner didn't know her exact breeding date, the question has morphed into: when is our goat due? I'm thinking the answer to that second question is: soon.

Signs of goat pregnancy

Goat butt near birthWithin the last week, Abigail has started showing lots of signs of impending birth. I've been keeping an eye on her butt for the primary purpose of seeking out mucous (a sure sign that delivery of kids is imminent), but less obvious changes arise a bit sooner. When you look at these three months of goat-butt photos, can you tell how the most recent butt shows very little wrinkling? In order to prepare for pushing a whole 'nother creature out of her body, Abigail is loosening up tendons and relaxing this area, and the change is quite obvious once you take a look at time-lapse photos.

Experienced goatkeepers also feel for the tendons above where the tail attaches to the rest of the body, expecting those tendons to nearly disappear as birth approaches. Unfortunately, I didn't feel Abigail up in advance, so I can't make that comparison now.

Dry udder

Other more subtle changes are also taking place in Abigail's body. Beginners always want to look to the udder to see if a goat is going to give birth soon, but the enlargement of the bag might not occur until right before birth in does (like ours) who have kidded previously. Mark and Goat belly drops near deliveryI both feel like Abigail's teats have become a bit more obvious, but I didn't take any before photos, so am not positive about the change.

On the other hand, I feel like the little baby bump on Abigail's right side (the left side of this photo) has changed considerably in shape over the last week. The bulge seems to have dropped down and become pointier, and if Abigail were a more patient mother-to-be, I probably could even feel for hooves right in front of her udder on the underside of her belly. However, our goat seemed less than excited about being fondled there, so I let that non-essential test slide.

Mind the gap

The final change I've noticed is behavioral. Abigail has always been a more greedy eater than Artemesia, whose little belly fills up in short order, allowing our doeling to get into mischief while our older goat keeps chowing down. But lately, Abigail has been even more adamant about rushing through her own breakfast in time to snatch part of Artemesia's much smaller portion, so I've increased our pregnant goat's ration to include an extra carrot and more sunflower seeds in the morning, and I'm also allowing her a full forty-five minutes of honeysuckle-or-oat grazing in the afternoon. From what I've read, the last few weeks of pregnancy require a lot of extra nutrients, so I suspect Abigail is just hungrier than she used to be, and I'm more than willing to indulge her expanding appetite.

As each of these signs appear, I turn into more and more of a nervous goat doula, and I have to keep reminding myself that, by all reports, most does kid easily with no help from their human lackeys. Since I don't know much about milking either, though, the unknown has left me feeling a bit jittery. But I'm also excited at the thought of tasting our farm's first homegrown milk and enjoying the antics of baby goats, so I'm continuing to watch Abigail with an eagle eye.

Anna (Anna and Mark: Waldeneffect)
Water tower strength for an IBC tank
Drilling a hole for a carriage bolt

I suspect this is a simple math problem for an engineer, but I don't know where to begin to determine whether our water tower is going to collapse under the weight of approximately 2,294 pounds of water. Roland, do you have some handy load-bearing tables at your beck and call?

Screwing in a carriage bolt

I figure each four-by-four post has to support 574 pounds when the tank is full, and that probably won't be a problem since we've got cross-supports in place so the legs can't twist. Meanwhile (and potentially more problematically), the eight-foot-long two-by-six crosspieces have to support about 765 and 1,529 pounds apiece (since the tank isn't centered due to the tower's proximity to the trailer), and I think maybe this is too much --- one table (if I read it right) said that an 8-foot 2-by-6 can only support 567 pounds. Finally, the 5/8-inch carriage bolts are each holding about 574 pounds, which I think is safely below the 1,210-pound load limit on this chart.

IBC tower

Anti-tip boardIn the meantime, there's always the scary proposition that the unbalanced tank might tip all the way over. I'm still not 100% sure we don't need some additional support for the front edge, but so far I'm pretty happy with Mark's solution of adding two boards across the top so the tank physically can't tip forward. (Only one board is in place so far. The other will go at the same elevation near the front of the tank.)

So, engineers out there, what do you think? If we put water in the tank, will our tower crumble, or is it safely built? If you cringe as you look at our photos, what would you add to the structure to beef it up and keep our water tank elevated?

On a less geeky note, adding a huge rain barrel to the back of the trailer suddenly changed it from a blah space to an intriguing area full of possibilities. I can hardly wait until I've added some plant life to give the region even wider appeal.

Joey chatter

Disable password logins and it's like you're using your keys to sneak by the mob that are pointlessly shouting nonsense into the door's intercom.

Joey chatter
winter in the South

On the porch swing in the sun, in bare feet and a t-shirt. Almost like it's not January. In 2 days, it might well be snowing.

Anna (Anna and Mark: Waldeneffect)
Sprouting old garden seeds for animals
Sprouting seeds

While cleaning up my unruly bookshelf, I discovered several large containers of homegrown vegetable seeds from 2012. I planted some in 2013, kept the containers as backup for 2014 just in case my next round of seeds didn't work...but here it is 2015 and the seeds are still there. So I decided to sprout them as a special treat for the goats and chickens.

With large seeds like this, my current favorite method for mass-sprouting is to soak the seeds in water for 12 to 24 hours, then pour them out in a colander and leave them in the sink. Whenever I think about it (usually two or three times a day), I splash on some fresh water and shake the colander around a bit. In our cool kitchen, mung beans sprout fully in about a week using this method, and hopefully my current combination of green beans, peas, swiss chard, summer squash, and okra will do the same. I'll keep you posted once I find out if our livestock appreciate the extra attention.

As a side note, I did a little research to determine whether any vegetable seeds are poisonous, and found very little data. I'm operating under the assumption that seeds we consume as part of the vegetable (beans, summer squash, peas) are edible even when mature and dried, while plants that we eat as greens (swiss chard) are also edible in the sprout stage. I might steer clear of feeding livestock tomato sprouts since their foliage is semi-poisonous and I definitely wouldn't sprout apple or peach seeds for animals, but otherwise, my guess is that most vegetable seeds are safe. I'd be curious to hear from anyone who has further data, though!

Joey chatter
oh teh irony

I'm watching as a slightly interesting sociological experiment. (Not the one they think they're performing though..)

The winner was just announced. I found this month-old gem in their comment history:

> If you could solve any current world issue, which one would it be?

Probably income inequality, many of the major issues seem to stem from it, especially on a global level.

Joey git-annex devblog
day 247 hooks and large files on windows

Today I got The pre-commit-annex hook working on Windows. It turns out that msysgit runs hook scripts even when they're not executable, and it parses the #! line itself. Now git-annex does too, on Windows.

Also, added a new chapter to the walkthrough, using special remotes. They clearly needed to be mentioned, especially to show the workflow of running initremote in one repository, then syncing another repository and running enableremote to enable the same special remote there.

Then more fun Windows porting! Turns out git-annex on Windows didn't handle files > 2 gb correctly; the way it was getting file size uses a too small data type on Windows. Luckily git-annex itself treats all file sizes as unbounded Integers, so I was easily able to swap in a getFileSize that returns correct values for large files.

While I haven't blogged since the 13th and have not been too active until today, there are still a number of little improvements that have been done here and there.

Including a fix for an interesting bug where the assistant would tell the remotedaemon that the network connection has been lost, twice in a row, and this would make the remotedeamon fail to reconnect to the remote when the network came up. I'm not sure what situation triggers this bug (Maybe machines with 2 interfaces? Or maybe a double disconnection event for 1 interface?), but I was able to reproduce it by sending messages to the remotedaemon, and so fixed it.

Backlog is down to 118 messages.

Joey chatter

Things I didn't want to learn today: How msysgit manages to run non-executable git hooks on windows.

Anna (Anna and Mark: Waldeneffect)
A curing rack becomes a mushroom station
Jar of screws

If you're like me, you should be building with screws. Sure, they're easy to install, but more importantly, they're also easy to uninstall. Perhaps you're able to guess exactly how each piece of homesteading paraphernalia should be constructed the first time around, but most of us make mistakes and have to take our projects apart, then we put the materials back together in a slightly different configuration. Using screws, Mark and I easily saved 99.5% of our fasteners from our current project to reuse, and we also saved quite a bit of swearing and hassle.

Garlic curing racksSo what are we taking apart and what are we rebuilding? The garlic curing racks a friend built for us 2.5 years ago served us well for a season, but once we had porches and Mark's mom gave us our current drying racks, there was no going back. Curing rack version 2.0 stays drier during heavy rains, and the vegetables are also much easier to access. As always, the gardener's attention is the best fertilizer (or, in this case, drying agent).

So the racks are coming down, and the lumber and location will become our new-and-improved mushroom station instead. As with our curing racks, our mushroom operation needed a face lift, and Mark and I think we've figured out exactly how to make our mushroom station more dependable for version 5.0.

We've tried various mushroom permutations in the past, but none has fit into my busy summer schedule. Sticking logs under fruit trees does produce some mushrooms, but I often miss the fruits because who crawls under their peach canopy on a regular basis? Rafts didn't work at all for me, while totems do so-so, but the top of each log tends to dry out and die while mushrooms pop up just above the soil line and get dirty. The more mainstream Demolitionmethod of stacking the logs in a shady spot and then soaking them in a kiddie pool to prompt fruiting also fell through because I get too busy in the summer to reliably soak my logs (or I leave them in too long and the fungi drown). Plus, soaked logs are heavy and unpleasant to manhandle. That version also suffered from two other problems --- the logs were too close to the ground and thus accumulated weed fungi, and they were also hard to access and thus tended to be overlooked.

So, version 5.0 is in the works, and Mark and I want all of our infrastructure in place before we inoculate new logs this spring. The shady north face of the trailer is now relatively weed-free (due to years of Mark's weed-eating efforts), so building elevated racks for the logs will provide them with a good permanent home. Meanwhile, the skeleton of the previous vegetable-curing-rack setup can be tweaked to support an IBC tank, which we'll hook into the gutters and turn into an elevated rain barrel for summer watering. Add in some low-pressure sprinklers (and maybe even a valve on a timer to automate the process), and we should be able to provide our mushrooms with the inch of rain per week they need to fully colonize their logs, then extra water as needed to promote fruiting.

But it all starts with a ladder and a screw gun. There are few things more fun than helping my husband tear things apart on a rare, sunny January day when you can work outside in shirt sleeves and I can hardly wait for part two this afternoon!

Anna (Anna and Mark: Waldeneffect)
Old paper becomes mulch

Shredded-paper mulchThe shelves behind my desk saw a major overhaul this past weekend. The area probably still looks cluttered and messy to you, but believe me, if I'd taken a before photo, you would be able to tell the difference!

As a bonus, I scored three shredder-runs worth of old phone books, junk mail, and no-longer-needed-written-in notebooks to turn into garden mulch. This time around, the blueberries were the lucky recipients --- three plants are now all mulched and ready to repel the weeds of spring.


List of feeds:

  • Anna: last checked (25 posts)
  • Anna and Mark: Waldeneffect: last checked (2300 posts)
  • Anna and Mark: Clinch Trails: last checked (10 posts)
  • Joey: last checked (84 posts)
  • Joey chatter: last checked (1007 posts)
  • Joey git-annex devblog: last checked (232 posts)
  • Joey: blog: last checked (15 posts)
  • Jay: last checked (25 posts)
  • Dani: last checked (21 posts)
  • Errol: last checked (28 posts)
  • Maggie: last checked (891 posts)
  • Tomoko: last checked (69 posts)
  • Jerry: last checked (28 posts)