Joey git-annex devblog
day 154 catching up

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.

Anna (Anna and Mark: Waldeneffect)
Dogwood winter 2014
Frozen apple blossom

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.)

Freeze protection in the garden

Strawberry flowers at popcorn stageLow-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.

Protecting lettuce seedlings

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.

Joey chatter

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.

Joey chatter

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.

Anna (Anna and Mark: Waldeneffect)
Baiting hives for swarms

Swarm trap baitsLast 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!

mark (Anna and Mark: Waldeneffect)
Wardrobe malfunction
poking fun at fig protection

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.

Anna (Anna and Mark: Waldeneffect)
Small-scale chinampas
Small-scale chinampas

Baby snapping turtleAs 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.

Building a raised bed

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.

Raking a bed flat

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?

Joey git-annex devblog
day 153 remotedaemon has landed

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.

Joey chatter

And that's the first time I've bought glasses online. Was wanting some prescription sunglasses anyway..

Anna (Anna and Mark: Waldeneffect)
Turning spring around
Carolina wren

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.

Chicken tractor in the garden

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.

Four-leaf clover

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 one patch).

Roast rhubarb salad

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!

Joey chatter

ascii art that's also valid haskell code would be a funner constraint.. some day

Anna (Anna and Mark: Waldeneffect)
Waiting for the first fruits from grafted trees
Apple flower buds

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.

Cabbage transplant

That 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....

Joey git-annex devblog
day 152 more ssh connection caching

Made ssh connection caching be used in several more places. git annex sync will use it when pushing/pulling to a remote, as will the assistant. And 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 notifications.

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 parameters.

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
        (y,m,d) = toGregorian old

Today's work was sponsored by Asbjørn Sloth Tønnesen.

Joey chatter

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..

Joey chatter

is tidy closing tags client-side? I'd expect servers would need to be responsible for rejecting invalid html

(otherwise, there would be a security hole)

Anna (Anna and Mark: Waldeneffect)
Seasonal eating in mid April

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.

Joey git-annex devblog
day 151 birthday bug

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..)

Anna (Anna and Mark: Waldeneffect)
Sunbathing tomatoes

Hardening off tomatoesWe 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.

propellor introspection for DNS

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 ""
        & 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 ""
        & ipv4 ""

        & cname ""
        & Docker.docked hosts "openid-provider"

        & cname ""
        & Docker.docked hosts "ancient-kitenet"
    , host ""
        & Dns.primary "" hosts

Notice that hosts is passed into Dns.primary, inside the definition of 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']
Joey chatter

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...

Joey chatter
As long as we have to deal with licences in Debian, license compatability etc, it's a choir that has an interest in the subject.

Course you could speak on something completely different. Like the issue of how to keep free software relevant to coming generations, for instance.
Joey chatter
Why not go to DebConf instead? Same city, following month.

I guarantee your talk won't be rejected, because DebConf either accepts a talk or lets it be ad-hoc unconference scheduled. ;)
Kite: a server's tale

My server, Kite, is finishing its 20th year online.

It started as, a 486 under the desk in my dorm room. Early on, it bounced around the DNS --,, -- before landing on 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 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 wall and 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 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 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 on.)

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. ]

Anna (Anna and Mark: Waldeneffect)
Three ways to get more apples
New perennials

GraftingWhen 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?

Calloused scionwood

Calloused scionwood closeupOne 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.)

Apple seedling

Sprouting apple seedsOn 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!

Joey git-annex devblog
day 149 signal

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.

Anna (Anna and Mark: Waldeneffect)
Chicken coop door step
Door step

Month-old chicksAt 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.

Joey chatter
code reuse
Propellor consists of 5000 lines of code now. Fully half of that code was originally written for git-annex, a much different program.

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..)
Joey chatter

I dunno, it annoys me that it mentions Stable twice, but I can't see a good way to refactor that ..

Joey chatter

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..

Joey git-annex devblog
day 149 remote control working

git-remote-daemon is tied into the assistant, and working! Since it's not really ready yet, this is in the remotecontrol branch.

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.

Joey chatter

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"]

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: 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)