The Economies of Keeping Chickens

When I first decided to build a chicken coop, there were 2 reasons. The first was that my daughter wanted chickens. The second was that the idea of fresh eggs was appealing and I thought it would be economical.

A recent article at the Washington Post talks about the price of eggs going up 30% since last year. It got me to thinking how much does it cost me to keep my hens?

Now, I originally spent about $300 to put together my chicken coop, not including labor and I’ve probably spent another $30 on the roofing material and the safety hinges for the nesting box roof (don’t want that lid slamming down on any kiddie fingers), and figure around $10 per hen to get them and raise them to the point they are laying eggs. That means my first egg cost me a whopping $370. Figuring that they each eat about 1/4 lb of feed and free range (There is a great web page here about grass fed chickens), that’s about 30lbs of feed a month, so I spend about $6 on feed for the month. I estimated that I get around 5 eggs per week from each hen (Although in reality they’ve been laying every day like clockwork!), and there are 4 weeks in a month. So I should get around 80 eggs a month. That means if I had stopped after the first month, each dozen would have averaged about $56 (now that’s some expensive eggs!)

Breaking out the Excel spreadsheet, I can see that if the national average is $2.17 per dozen, it only takes me about 41 months before I reach the break even point of buying vs. raising my own. However, these eggs are much better than store bought. I’ve seen some of the specialty eggs from farms that boast free range and humane treatment going for around $6 a dozen. If I were to buy my eggs at that price, I reach the break even point a little after 10 months.

So what’s the message here? Prices will only keep going up. Granted, my feed bill might go up as well, but it’s costing me about 90 cents per dozen eggs in feed.

( (30 lbs of feed / 80 eggs) x ( $12 / 60 lbs of feed) ) = $.075 per egg

Even at double the feed price, it’s still less than buying a dozen factory raised eggs from the store.

Plus, they make great pets, my daughter loves to play with them, and they all get plenty of exercise running around the yard. It’s a win-win situation!

Switching to Raw Milk

A couple of month ago, I was over at a friend’s house and they had a container of “Raw Milk”. I thought this was an incredible novelty because I’d always thought that it was illegal for unpasteurized milk to be sold in America.

I did a little digging and found out that this is not true. Here is the law:

FDA law CFR 1240.61 states that it is illegal for anyone to transport raw dairy products across state lines “in final package form for direct human consumption unless that product has been pasteurized.”

It turns out that Organic Pastures up in Fresno, CA produces raw milk and it is available at our local Henry’s market.

Little did I know of the controversy surrounding the drinking of raw milk. The two sides can probably best be summarized with these two PowerPoint presentations:

The main arguments seem to be that because we put our cows in such crappy living conditions, they are sick all the time and pumped full of drugs to keep them “healthy”, so we must pasteurize their products so that the pathogens they are living in don’t get passed on to us.

I don’t see this argument being much different than last year when we had that big break out of E. Coli in all the bagged spinach, or the recent tainted beef recall, or today’s recall of cantaloupe grown in Honduras. If you treat your food sources well and it’s clean from the source – shouldn’t it arrive on your dinner table ready to eat? Based on the risks involved in eating foods, should we ban spinach and other leafy greens from our diet? Even pasteurized milk can have problems, such as the outbreak in Massachusetts of listeriosis – which was eventually traced back to the processing plant actually reintroducing the pathogen after the pasteurization process.

In a recent letter to the Colorado Department of Health, Mark McAfee makes a couple of good points:

To study this issue further, Organic Pastures contracted with BSK labs in Fresno to perform multiple challenge and recovery tests on our raw milk and raw colostrum. When 7 logs (10 million counts) of pathogens were added to one-milliliter samples of organic raw milk they would not grow. In fact they died off. The salmonella was so badly out-competed that it could not be found less than 24 hours later. The listeria drop was less dramatic and was similiar to the E. Coli O157:H7 samples that were studied, but they also did not grow and declined substantially over time.

What is it that causes raw milk to kill pathogens? Just in the last 24 months, the FDA has approved lactoferrin as an approved method of treatment for pathogen reduction in beef slaughter plants. Raw milk naturally has levels of this enzyme-based pathogen killer. Pasteurization inactivates this and other enzymes that kill pathogens. These enzymes include lactoferrin, xanthine oxidase, lactoperoxidase, lysozyme and nisin. There are other interrelated enzymes and beneficial bacteria that also act on the pathogens to inhibit their growth. All of these systems are destroyed by pasteurization. It is no wonder that dairy plants that pasteurize must be kept absolutely spotless. There are no remaining safety systems in the processed milk.

The dairy industry does not understand what I have explained here in detail. What the dairy industry believes is that raw milk contaminates pasteurized milk. This is not the case. Pasteurized milk kills the safety systems that control pathogens in raw milk and therefore permit unlimited growth of dangerous bacteria if present.

It’s a pretty good argument and makes some good sense. I don’t know if some of the “miracle cures” they ascribe to raw milk are true (cures cataracts, arthritis, asthma, etc.), but it would make sense that healthy cows can produce healthy milk for their offspring.

Being the techno-geek that I am, and locked away in a cubicle, even though I could not go out and visit the free range farm, I did manage to find it on google maps. And yes, those do look like happy cows on a free range of grass. It’s also interesting to note that they:

tested our milk cow’s fresh manure and did not find any human pathogens. That’s right. . . no Salmonella. She was able to show that when antibiotics are not ever used on the herd (as stipulated in the organic standards) and when cows are not stressed (grass-fed and kept healthy) they simply do not slough off pathogens in their manure.

Which not only is down right responsible of them, but if other dairies followed their practice of keeping happy, healthy, organic cows, a lot of the other outbreaks to our other food sources may not have ever occurred. Several cases of E. Coli in spinach have been traced back to fields to close to the manure dumps of large dairy processing farms.

One of the “miracle cures” of raw milk is the reduction of eczema – Something my wife has in a very mild form on her hands and uses Eucerin for. I’m wondering if switching to raw milk wouldn’t actually save us money in the long run if it means we can stop buying all those tubs of lotion? I wonder if she’ll consent to trying it out for a month?

Useless Gadgets I’ve Seen On Amazon.com

image

This may become a regular feature. I’m all about simple living. Or, as my wife has put it, she’s got me on the “crap-reduction plan.”

So a friend of mine told me about this, and I couldn’t believe that there was an actual device (and apparent patent) for cracking an egg.

Seriously, can there be a more useless item to spend $6.98 on?

Sadly, the item is offered by Amazon seller “Get Organized

Shouldn’t one of the first rules of being organized be “Don’t buy crap you don’t need, are never going to use, are uni-taskers and will just sit there collecting dust”?

Taking The Train

I ride MetroLink. The trains aren’t exactly something you set your watch by. I have a lot of fun reading the site at www.metrolinktrainriders.com which reports the delays and other information that www.metrolinktrains.com doesn’t seem to have readily available to us commuters.

Now, at my company, I’m a big fan of the phrase “No Surprises”. I tell my direct reports that I don’t care how bad the news is, the worst thing in the world that can happen is that I’m in a meeting with my boss and he asks me about some issue or other that I haven’t been told about – wether it’s a project running late, a production support issue, or buggy software. I extend the same courtesy to my bosses – after all I don’t want them caught out in the cold either.

So it really surprises me when a large company like Metrolink that runs our trains into downtown LA seems to do it’s best to keep it’s riders in the dark about delays. Everyone knows delays happen, but when the causes keep getting swept under the rug – I have to wonder why they even bother to hide it? It’s not like we can do much about it – it would be nice to have a website i can check in the morning or even an email subscription alert go out when trains I take are being delayed so I can make alternate plans or drive to a different station based on the delays.

I can’t tell you how valuable it would be to me to know my morning train was delayed by 30 minutes and be able to spend a few more minutes with my daughter before heading off to work rather than sitting on a train platform waiting for a late train. After all, if Domino’s can track my pizza, how hard can it be to track a train?

Extracting User List from AD Groups in SharePoint Sites For All Site Users

There is a nice web part called “Site Users” that will display SharePoint users and SharePoint Groups that have access to the site on the webpage.  This is an out of the box (OOTB) webpart, but will only display the name of the AD group and not the members within it.

In order to display all the user names for the site, we need to create a custom webpart to handle this additional expansion that will query the Active Directory LDAP store.  Time to fire up Visual Studio…I won’t go into all the details for solution set up, but here’s the basic functionality…

First we create a function where we pass in an AD group and get back a StringCollection of the users’ names:

//Query Active Directory to get users from Active Directory Groups 
public StringCollection GetGroupMembers(stringstrGroup)
{
    StringCollection groupMemebers = new StringCollection(); 
    try
    {
        DirectoryEntry ent = new DirectoryEntry(LDAP://OU=yourCompanyOU,DC=yourCompanyDC);
        DirectorySearcher srch = new DirectorySearcher(“(CN=” + strGroup + “)”);
        SearchResultCollection coll = srch.FindAll(); 
        foreach (SearchResult rs in coll)
        {
            ResultPropertyCollection resultPropColl = rs.Properties;
            foreach (Object memberColl in resultPropColl["member"])
            {
                DirectoryEntry gpMemberEntry = new DirectoryEntry(“LDAP://”+ memberColl);
                System.DirectoryServices.PropertyCollection userProps = gpMemberEntry.Properties;
                //getting user properties from AD
                object obVal = userProps["displayName"].Value;
                object obAcc = userProps["sAMAccountName"].Value;
                if (null != obVal) 
                {
                    groupMemebers.Add( “User Name:” +obAcc.ToString() + “, User login name:” + obVal.ToString() + “<br>”);
                }
            }
        }
    }
    catch (Exception ex)
    {//writer.Write(ex.Message);}
    Return groupMemebers;
}

We also need to get the names of the site users from the SharePoint security groups:

ArrayList belongToDomain = new ArrayList(); 
ArrayList names = new ArrayList();
using(SPSite collSite = new SPSite(SPContext.Current.Site.ID))
{
    using (SPWeb elevatedWeb = collSite.OpenWeb(SPContext.Current.Web.ID))
    {//All users in the site
        SPUserCollection collUser = SPContext.Current.Web.AllUsers;
        SPGroupCollection collgroup = SPContext.Current.Web.Groups;
        //for each item in the collection of groups
        foreach (object group in collgroup)
        {
            //We don’t care about displaying the visitors
            if (group.ToString() != “Visitors”)
            {
                //check that the users in the site collection belong to current site group
                foreach (SPUser singleuser in collUser)
                {//get the list of groups that the user belongs to
                    foreach (SPGroup userGroup in singleuser.Groups)
                    {//check if it matches any of the current site groups
                        if (group.ToString() == userGroup.ToString())
                        {//check if the user from the sharepoint group is a AD group
                            if (singleuser.IsDomainGroup)
                            {//pass the name into Array that query the AD
                                belongToDomain.Add(singleuser.ToString());
                            }
                            else
                            {//otherwise add into the Array that stores list of names, in case the user name is not from an AD group.
                                names.Add(singleuser.LoginName);
                            }
                        }
                    }
                }
            }
        }
    }
}

Now that we have this big array of user names, we need to make sure that there are no duplicate names, as a user can possibly be in multiple groups. So call the function below and pass in the names array so we have a distinct list:

//remove duplicate users name Function 
public ArrayList RemoveDups(ArrayList items)
{
    ArrayList noDups = new ArrayList();
    foreach (string strItem in items)
    {
        if (!noDups.Contains(strItem.Trim()))
        {
            noDups.Add(strItem.Trim());
        }
    }
    noDups.Sort();
    return noDups;
}

 

And there you go, full expansion of an AD group to return a distinct ArrayList of users who have access to the site.