Saturday, July 1, 2017

My Harvest Life - Episode 3: Half a garden of nutritious decay

Year 1 -  Summer Day 10

Unsurprisingly, because I'm still a Novice Farmer, about only half of the plants I planted are growing well.  Interestingly enough its all of the plants I planted in the first half of the garden.  I'm not sure if this is due to rabbits getting in and just eating what was closest when they hopped in or if the plants in front are getting too much sun.  Either way, I do have some plants which are growing well.

Five of the 16 tomato plants I planted are growing and about half of the carrots and a quarter of the onions are growing.  Interestingly enough all of the bean plants sprouted and grew, and all of the Lemon Cucumber plants grew pretty hardily.  Only two of my spinach plants are growing, out of around 8 or so, but they do appear to be doing well.

I ended up thinning a bunch of the plants a week or two ago, pulling out the tomato plants where 2 were growing in one spot, and thinning the cucumber hills to 3 plants each.  Today I did more thinning, reducing the clusters of basil plants, since the ones with less clustering were looking healthier and the onions were bunched in some areas, so I thinned out the weaker plants to allow the healthier ones to thrive.

The garlic seems to be doing okay, it doesn't seem like it's grown much in the past week, but the cucumber plants are getting large, as well as the bean bushes.  To increase the nutrition in the soil today I also did a pH Test to check the soil alkalinity of the garden as well as my compost, and once happy with the results added the compost to the garden.

pH Testing

A website I came across had a very simple way to test if your soil is very alkaline or acidic, and while not highly accurate, can give a good idea of the pH.  You can view the article here: PreparednessMama, but the gist of the instructions are:
  • Put soil in one cup, and soil mixed with water in another.
  • Add vinegar to the first cup and watch for a reaction, if there is fizzing and a reaction your soil is alkaline.
  • Add baking soda to the second cup and watch for a reaction, if there is fizzing and a reaction, your soil is acidic.
So I tested both the garden soil to see where it was at, and the compost I was going to be adding so that I could get an idea of where each was and if it needed to be adjusted or the compost needed certain things to adjust it one way or the other.

Garden Soil Results

The garden soil was almost entirely soil that was added from bags at Home Depot, so going in I expected the pH to be fairly neutral.  As you can see before and after, the first image is the raw soil, and the second is the soil with vinegar poured over it and water and baking soda added.  As you can see there is essentially no reaction to either so the soil's pH is neutral.  This is good, since having a neutral base will allow the compost to be more of one or the other.



Compost Results

The compost was a slightly different story.  We have quite a few pine needles in our yard due to large pine trees overhead, which cause the grass we put into the compost to be slightly acidic when it breaks down.  As you can see in the second picture there was a mild reaction to the baking soda, but not a large one, indicating the compost is slightly acidic.  Since it's only slightly acidic, that will be fine since the plants in the garden should do well with a lower pH soil.  At least from what I've read on that site, the garlic, onions and beans should do well with it.


Nutritious Decay

Finally today I added a bunch of the compost from our compost bin, which is really a giant brick square that I dump grass, dirt, sticks, and compostable food scraps into.  We started the compost bin last fall, so this is the first time using some of the broken down grass and leaves in it.  My back was dying from leaning over the bin and I had to shake out a lot of dirt and filter out the best dirt I could from the compost bin.  It also took quite a bit of flipping to get to the really good soil at the bottom of the bin.  I had made the mistake of putting a pallet at the bottom of the bin in order to hold it up to let water drain, but all that it ended up doing was making it extremely difficult to flip the compost.  Once we empty out the majority of the bin this fall when we till the garden with it, I'll pull the palette out and let the compost rest on the ground where it can just drain into the ground and create a nice place for creepy crawlies to break things down.

Finally I added the compost to the garden, nestling it around plants and pouring it into the rows between them to allow the nutrients to get into the dirt below.  Today I also did a deep watering with the hose instead of just the watering can.  This Article has some information about watering that has bene helpful, but I'm still learning.  I might be over  watering, as I do try to water with the can every morning, but it has also been rainy lately so it might be too much. 

That said, the plants that are still alive seem to be doing well, so I'll continue my efforts.  All in all its exciting seeing the plants get larger and grow, and though I'm still learning, next year I think I can get more of the plants to grow and stay alive.  Certainly I will invest some time next year in a better fencing situation.  Perhaps including a top to the garden so that birds do not pick away the seeds.  That's another reason that perhaps some of the plants did not grow.  Either way, next year I'll be more careful about how I plant them and hopefully more than half the garden will actually sprout and grow!  Art imitates life, but it does feel like a game sometimes where my level just isn't high enough yet to achieve consistent results.  This is a fun experiment though, and I do look forward to the harvest season as well as building neat contraptions to help automate the work.  It's very enjoyable to see the little seeds I planted a month ago sprout and grow.

- Level 1 Gardener: Jace -
Next: Episode 4: Angry Plants

Monday, June 12, 2017

My Harvest Life - Episode 2: Sprouts and Bunnies

Year 1 - Spring Day 84

While adorable, these fuzzy little creatures are not your garden's friend.  They are it's deep, dark nemesis.  We have a ton of little cottontail rabbits in our back yard, and while we do have a cattle dog that loves to chase them out, they still come back often.  So in order to keep them away, I built a fence around the garden.  Problem is... the fence and garden walls are only 18 inches high... and cottontail bunnies can jump up to 24 inches high! These guys have ups!  So, the fence may or may not work, but so far none of the sprouts appear to have been nibbled.  I also made sure to get the garden fence as close to the yard fence as I possibly could and tried to eliminate any gaps between each that could be exploited.

But, the next exciting part is that despite the fence not QUITE being high enough, sprouts have emerged!  The basil, garlic, cucumber and bean plants are all showing their first leaves.  The garlic was the first to push through the ground followed by the cucumber plants and then the basil started pushing away the dirt around it.

When I first noticed the cucumber sprouts a few mornings ago, I walked outside and found three sprouts on one hill and one on the back one.  When I went later that night, there were 5 sprouts on the first hill, (which was all of the ones I planted) and three on the second hill.  Pretty soon I'll need to start thinning the garden and pick out the best plants to survive.  I'll need to do that pretty aggressively for the carrots and the basil since I dropped a ton of seeds in each location I planted them.  I could barely see the carrot seeds so I just poured them out in an indented line and then covered the up with a bit of dirt.

Garlic

Bean Bush

Lemon Cucumber



My next plans include devising a way to do drip irrigation.  I recently got a Raspberry Pi 3 for my 30th birthday and I have been meaning to use one of the ones I already had to do a project, so a drip irrigation system with moisture sensors would be pretty awesome to try out and post the information to a web server where I can track the moisture in the soil throughout the day and after watering.

Also I might need to built something to scare the bunnies away, maybe a robot owl?  We'll see about that.  But for now the things are all growing and its very exciting!

- Level 1 Gardener: Jace -
Next: Episode 3: Half a Garden of Nutritious Decay

Saturday, June 3, 2017

My Harvest Life - Episode 1: Spring Planting

Year 1 - Spring Day 75

Since I'm new to the life of farming, I'm a little late to the season during the first year of living the Harvest Life, but I have finally started out on the grand adventure of farming and gardening!  Today I finished filling my garden with soil and planted my first batch of crops!  The seeds shipped recently from a little local place I like to visit called the internet, from a shop called SeedsNow.  They've got very reasonable prices and great varieties of all sorts of plants.  I built my raised garden with a bunch of wood I had laying around in my garage from remodeling the house, and ripped up a bunch of the soil underneath so that the plants can grow down into the soil below as well.  The plot is 4 ft deep x 24 ft long x 6 in tall and took about 25 bags of soil at 1.5 cu ft per bag to get a good covering over the existing dirt.

Today after filling the garden, I planted the following:

And I still have a plot of potatoes to plant, which I need to pick up at a local store.  

But the garden is started!  There will still be many things left to do, such as watering and weeding every morning, and making sure that pests don't eat away my crops.  I picked up a Tier 1 Watering Can as well.  A good old green plastic can works for now!  I had started a couple tomato plants a while back and just transitioned them to outside.  Once the plants sprout, I'll need to do something called thinning.  I've planted a TON of seeds, and once they sprout if I don't pick the best ones to survive and thin out the weak ones, they'll all fight too hard to survive and I won't get the best crops.

I'm still new to all this, but reading up on each crop has been helpful.  I'm trying to do my best to follow companion planting and pay attention to the state of my soil, so hopefully pests will stay away and the crops will help each other grow.  I found a couple decent guides on companion planting: What NOT to plant near each other, and one about What TO plant near each other to get the maximum benefits.

There are many other things to do around the yard as well.  I have a wood pile to chop, but I have a low level axe and my woodcutting skill is rather low, so its taking some time getting it all chopped.  I've already got a massive stack of fire wood, but there is still so much left!  Also the grass in the yard seems to keep growing week after week!  So I keep having to cut it.  We've lived in our new home for just over a year now, so we're finally getting to working on the yard since last year was all home remodeling and indoor work.

Feeling the cool black earth beneath your fingers is a phenomenal feeling.  Although trying to research on the computer with hands covered in mud between each seed type that was planted probably was not a great idea.

If you want to start a garden as well, there are a lot of resources out there and I hope to hear about your adventures as well!  Stay tuned for more updates of my first adventure living the Harvest Life!

- Lv 1 Gardener: Jace -
Next: Episode 2: Sprouts and Bunnies

Wednesday, May 10, 2017

BitBit - A little compression library

Ever needed to compress a bunch of settings in a JavaScript object down to fit in a couple of bytes worth of data?  No?  Well that's okay I didn't either until recently.  While working with some embedded systems I needed a way to take simple number and boolean settings in an object, where I could store them in a readable format, and pack those down into under 2 bytes to be sent to and stored on a memory limited device.

Now, bit masks are useful if you're only dealing with multiple boolean values, but I needed to support integers as well, so I needed an easy way to say:  "Ok, bit 0 will be setting A, bits 1-6 will be setting B and bits 7-16 will be setting C."  So I created a little library called BitBit.

BitBit works by letting you create a new BitBit object with a schema that defines how a JavaScript object maps to certain bits.  For example, if you had a thermostat object with settings about a thermostat that you wanted to pack down into under 2 bytes, you could set up a new BitBit object like so:


What this is doing is creating a new BitBit object with a valid schema.  A schema must be an object with string keys that map to an array of 1 or 2 numbers.  A single number means it's a boolean and uses a single field.  2 numbers mean that its mapped to a number that uses the bits spanning the numbers given in the array (inclusive).  If you wanted to return a number that was just 0 or 1, you could use an array with 2 numbers that were the same.

Once you have built the schema, you can pack the settings down into an integer for storage.


As you can see above, once you pack the object, it will ignore anything not specified in the schema, which means you lose that data once it's unpacked.  A good way to use the unpacked data is to merge it back over your original object with lodash.merge.  This works well if the device you're sending it to and from can modify it.

In addition, you can use lodash accessor keys to get nested objects, array indices, etc.  There is an example of that on the Github Readme.

Well, that's about it, it's a small library I created since I needed something like that and didn't see anything out there that existed yet that satisfied those requirements.

If you like it feel free to contribute!  That's all for now, hopefully I'll have more time for these little side projects.

Sunday, March 12, 2017

New Year, New Job!

It has been a while since I have posted, and a lot has changed!  Recently I got a new job at SimpliSafe as a Backend Software Engineer, continuing my work in NodeJS, which is really exciting.  Also, I now work at a place where there is no taboo on talking about where I work, like there was at Layer3 TV!  So lots of exciting things have been going on the past few months.

Other than the new career, I took part in the Global Game Jam in January and completed a fairly polished game within the 48 hours with my good friends Ben Taylor and Dawn Rivers.  The game is called BubbleDub and its a couch coop/competitive rhythmic puzzle game, where you must rapidly select the colors of orbs and complete chains to out score the competition.  It was a great time and it's always a good feeling getting to dive into game development for a bit and get a creative break from enterprise development.

I'm also trying to figure out what side projects I want to continue to work on and take to being a fully fleshed out product.  Lots of things I could work on from Stock Market analysis and learning about neural nets and machine learning to other games and the like.  Still trying to figure out what I want to invest a bunch of time and energy into, but still have a lot of projects around the house to do as well.

So... quick post after a few months of neglect, once I get into the groove of things at the new job I should have some mental energy to work on side projects and post about them.

Wednesday, December 14, 2016

Heart of Winter - Poem

I wrote a poem for our work poetry contest for our holiday party, so here it is.



Heart of Winter

Angel feathers fall from a cotton sky
As the arctic wind pinches my strawberry nose.
I pull the wool scarf my mother knit, up around my face,
Blinking with frost laden lashes.
Cinnamon steam swirls from my mug,
Lifting with it the scent of apple, orange and brandy.
One sip extinguishes the chill, a warm hug from the inside out.

Inside children sit near a playful fire,
Bathed in its flickering warmth,
Reading stories of pirates and books of adventures in the clouds,
Hours slipping by without a care.

The tree in the corner nestles down on kaleidoscope boxes,
Her bows protecting them like a mother hen,
Dressed in a sparkling cacophony of color.

Night emerges and peaceful silence settles in,
Crackles and pops from a dying fire sparsely interrupting.
Back and forth the chair rocks, as eyelids droop and conscious wanes.

Sleep encroaches quietly and a carefully placed blanket becomes a warm embrace
In the heart of winter.

Tuesday, August 30, 2016

Schema Check

It has been a while since I've done a post about side projects, but lately I've been working on a little NPM Module called Schema Check, available on NPM and Github and wanted to share it.  Schema Check is a light JavaScript object type enforcer which uses private properties and Object.defineProperty to create getters and setters for various fields on a JavaScript object.

Schema Check uses schema objects to describe the fields on the object and the types they should accept.  It then modifies the getters and setters of that object to only allow values of that type to be set.  This came out of a desire to have something that could be used to enforce some types in JS without resorting to something like TypeScript entirely.  It's also just a fun side project I can work on here and there in my spare time.

How it works

Schema Check at it's core is built on Object.defineProperty.  By using defineProperty, schema check allows you to apply a schema to an existing object - which will force the fields of that object to conform to certain restraints.

Take for example, the following object:

  var dude = {
    name: "Chad",
    is_single: true,
    cash: 100  
  };

Our dude, Chad, has three properties: name (a string), is_single (a boolean) and cash (a number).  If we're manipulating data and working with the dude object in JavaScript, it'd be really nice to limit what we can set to those fields.  There are many solutions for this, such as the rise of TypeScript, but Schema Check is a lightweight way to enforce these values with a simple schema.

By importing schema check like so and setting a schema for the dude object, we can force the object to throw an error (or fail silently) when an invalid value is set to that property.

  var SchemaCheck = require('schema-check');

  var schema = {
    name: {
      type: 'string',
      regex: /^[a-z]+$/i  //Used by Regex.test() to check validity
    },
    is_single: {
      type: 'boolean',
      is_editable: false //Poor chad - this status isn't changing any time soon
    },
    cash: {
      type: 'number',
      allow_nulls: false //This can be true too if you want to 
                         //allow null to be a valid entry
    }
  };

  var options = {
    throw_error: false 
      //This will determine whether or not trying to set 
      //an invalid property type throws an error or fails silently
  };

  SchemaCheck(dude, schema, options);

  dude.name = 5;           //Fails - name is still Chad
  dude.name = '123';       //Also Fails - because it doesn't match the regex.test
  dude.is_single = false;  //Fails - Chad is still single
  dude.cash = 110;         //Succeeds, Chad is a bit richer now!

I have a lot more I want to do with the library.  At the moment it doesn't really support Arrays and there are extra restrictions I want to add as well (like Min/Max for numbers)

It's a work in progress, feel free to contribute to the GitHub repo and create PRs and Issues if you think of anything that should be added.