Monthly Archives: December 2015

Learning To Cook: Is A Food Subscription Worth the Cost?

About two months ago I got sick of going grocery shopping, so I decided to try out a subscription food service. I noticed that when I went grocery shopping I would be spent for the rest of the day. I kept meaning to go after work, but by the time I finished work I was so drained I could not deal with getting dressed and organizing myself enough for a shopping excursion, so I would wind up going on a Saturday and then spend the rest of the day staring at a wall because I could not deal with anything.

Nice braised chicken with carrots, dates, and sweet potato.

Nice braised chicken with carrots, dates, and sweet potato.

I also noticed I would get overstimulated when I would go shopping. I would see a bunch of pork chops and butternut squash and fresh mozzarella and other stuff and I would wind up impulsively buying a bunch of stuff that would languish in my fridge. One bad impulse purchase was a bag of pears. Those sat in my fridge for two months because the stuff I would buy to cook with them would go bad and be thrown away.

I also really like having projects to work on. I figured out when I did cross stitch that it was worth the additional cost to buy preassembled kits. If I had to buy all the components and organize them on my own I was less likely to finish a project. Getting a project with all the component and all the thread colors cut to the same size and in the qualities I needed was the small push I needed to actually finish a project. It is stupid how easy it is to give up on something where there are too many small hurdles to get over.

I noticed with my food that I was doing the same thing over and over again because it was hard for me to get organized. I would go to the grocery store planning to buy stew meat to make beef stew, but then I would see the meat was as expensive as six meals worth of chicken thighs and I would not buy it even though I was tired of what I was working with. It was hard to push myself to try new things, even though I really wanted to do them and was excited about them.

Why I chose Plated

I looked at several subscription food services, and I chose to go with Plated. I read reviews of their boxes for a few months and it looked the most promising. Their meals were generally a little more complicated than some of the other boxes I saw. They seemed to have a lot of things I am excited about, namely Asian dishes and some more homey dishes like meatloaf.

Sophisticated recipe with good flavors and well composed.

Sophisticated recipe with good flavors and well composed.

Each week they have seven options for meals. Each meal is targeted for two people, so I would have a set leftover that I can eat the next day for lunch but not so many leftovers that I would have them for a week and get tired of them. You choose between one and seven meals each week, but it generally assumes you are going to order three. One thing I don’t like about this service is that if you want to change what you get for a week, you change your whole plan rather than picking and choosing how many you do each week.

They also have a few premium options where you can get more expensive ingredients like scallops and duck or add a dessert.

I get three sets of ingredients for three meals delivered each week. This costs $72 a week. This breaks down to $12 a meal with each recipe composing two meals.

Cons of Plated

So far there are a couple of things I really don’t like about my service.

Expensive

I will be up front that this is moderately expensive. I pay $24 for each recipe I make. When I go to Costco and buy chicken, I can get six meals worth of chicken for less than twenty bucks.

$24 for mushrooms and chicken? Not quite...

$24 for mushrooms and chicken? Not quite…

Some of their options for meals really don’t seem to be worth the cost. One option was grilled cheese sandwiches and tomato soup. Those ingredients are like five bucks.

I know that you are not just talking about the food cost when you are dealing with something like this. My cost includes shipping and packaging the ingredients. It also includes the cost of research and development by the people running Plated.

Generally speaking, getting this service is more expensive than eating out. It is also more work than eating out or buying some kind of prepared food. I am mentioning this because one thing people talk about with cooking for yourself is that it is supposed to be cheaper than eating out. It really isn’t. You can cook at home much cheaper than eating out if you do thinks like macaroni and cheese, but if you want to make adult food it is more expensive. There is also the cost of peripherals like pots and pans and other equipment.

I could feed myself more cheaply.

Repetitive

Plated’s menu is somewhat repetitive. Last week one meal was chicken meatballs with broccoli and peanut sauce. Next week one meal is the same thing with beef instead of chicken.

Being repetitive isn’t necessarily a con, per se. I have certain things I always like to make, like meatloaf. I missed the last meatloaf they sent out because it was the week before I began. I got a meatloaf this week and was happy to get to try it.

I am just at a point where I realize that I am going to get tired of things after a while because they are going to be somewhat repetitive.

Oversimplification and Missing Components

I don’t mean missing components like they forgot to send a vital ingredient in the box. They have been very good about that. I mean missing components in that they have oversimplified the dish.

The first week I had a ginger salmon in miso broth. Miso broth is supposed to have a base of dashi, which is a fish and seaweed based Japanese broth. It adds a depth of flavor and a richness that is necessary for a miso broth. The ingredients that were sent to make this dish were just miso paste and soy sauce.

These look beautiful, but the meat was rubbery. Buying a thermopen was the best thing I have ever done.

These look beautiful, but the meat was rubbery. Buying a thermopen was the best thing I have ever done.

I had dashi bullion crystals in my pantry that I used to doctor the dish. I find myself doctoring all of these dishes. They don’t include enough spices for most of the dishes and I wind up having to add things I have in my pantry to season the dishes properly.

They consistently tell you to make the oven too hot. I think they are targeting this at busy people who want a recipe that can be done in half an hour. They sent me a set of turkey thighs that should have been roasted for an hour on a lower temperature, but they were trying to get things done faster and they wound up being rubbery.

I have started to almost throw the recipes out and modify them to be more complicated. One thing they send a lot of are meals that are meant to be cooked on a sheet pan. I am searing my meat, then braising everything in the oven longer and slower than they say to. After I started doing that and I invested in a meat thermometer, I stopped having so many misses.

I have read some people complain that the meals are too complicated. It concerns me that this trend will continue with fewer components and more simplified directions that lead to not optimal results.

Food and Other Waste

One reason I wanted to do this service was because of food waste. I would make a large portion of food that I could not finish before it went bad. I wanted to make sure I had a limited amount of food that would be cooked so I would not throw half of it out.

This was a beautiful dish that I wound up throwing all the leftovers away on because I waited too long and the steak turned grey.

This was a beautiful dish that I wound up throwing all the leftovers away on because I waited too long and the steak turned grey.

I don’t throw half out, but I still throw a decent portion out.

Some of these meals give you way more food than I thought they would. Some of these provide enough food for four or more meals. I had a stuffed acorn squash meal that provided five large meals for me.

In addition to the food waste, there is the packaging waste. It’s nice having a lot of packaged ingredients, but it does contribute a bit of waste, specifically the ice packs. I can compost the insulation and I am reusing the boxes to pack up my books, but I will acknowledge I am not being environmentally minded here.

I have noticed that the food is starting to pile up. I had to throw one meal out because I left it in the fridge for too long before I even got a chance to cook it.

I am going to give this some more time. I had Thanksgiving, Christmas, and now New Year’s interfering with my ability to move food out of my fridge. I am giving it some time before cutting back or cancelling the service. I want to try and see how this works when winter finally hits and I don’t want to drive in the snow to feed myself.

Pros of Plated

I wanted to get the cons out of the way to try and put the pros in a better perspective.

Quality is Good

Even though I complained about the cost, the quality of food is good. The meats are antibiotic free. The produce is nice.

The meals are sophisticated. Even though I complained that they didn’t include dashi with the miso broth, they are one of the few services that would actually have a miso based dish.

I have not gotten a piece of meat or produce that I thought was just garbage. I have a few that I let get a little too old, but generally speaking the food quality is top notch.

The recipes have a lot of vegetables, which I appreciate. The nutritional content is well balanced. I could get take out cheaper, but it would be less healthy. It’s nice to have a well balanced meal with lean protein, veggies, and some starch that I don’t have to plan out that is good quality.

Stuff I Would Not Normally Try

I was excited to do the stuffed squash. It was one of those things that I always wanted to try but I was afraid to do on my own. I was afraid of cutting my finger off, so I was kind of happy to get some in my box so that I had a reason to figure out how to do that.

My first stir fry!

My first stir fry!

I have a wok in the basement that I have never used. Both my ex and my dad did stir fry but I was not trusted to use one because they thought I would hurt myself. Having a chance to pull it out and try it out was a good experience. I knew I might ruin my food, but this is a learning experience.

These dishes include weird mushrooms and other spice blends I might not try on my own. It’s cool to get a chance to work with things I would not be able to find on my own or I would not know what to do with if I did.

I Don’t Have to Leave My House

Mentioned earlier that I find going grocery shopping to be very draining. I have two jobs along with working on books and tech talks. Losing a day of productivity so that I can go out and buy milk and eggs vexes me to no end.

All the squash...

All the squash…

I feel helpless. I will be laying on my chair with my pugs staring at the wall cursing myself for being worthless because I can’t function after doing something that everyone in the world seems able to do. It fucking sucks.

I am trying to figure out the actual cost of this service. I look at the base cost of $72 a week, which I totally know I can do cheaper and causes me some feelings of discomfort. I feel like it’s wasteful to spend this much money on food for myself when I am one person.

One thing that causes a lot of ill will in my marriage was that I was angry at my ex-husband for doing stuff like this. He had a meat CSA where he would spend hundreds of dollars on organic special meat. He would go to the farmer’s market every week and buy a dozen eggs for five bucks. I felt like we were spending money we didn’t have on specialize food just to be snobby and feel like we were better than everyone else.

When he moved out I was planning to live off of beans and potatoes and live a lot cheaper. I feel like by doing this service I am a hypocrite because I am doing a thing that I judged him for when we were married.

I finally got to a point where I realized I have to do a lot of things for my own mental health. Losing a day of productivity to leave my house and buy food is not worth it.

I am looking at the cost as not just paying for the food, but paying to avoid having to do something I don’t enjoy doing. If I am too depressed to leave the house I don’t have to worry about not being able to feed myself. Having all of the ingredients and having a nice set of directions calms me down and lets me do something that makes me feel better.

I tend to get overwhelmed by choices. If I have a “babysitter” to tell me that I have one choice for what I have to cook and it’s something I picked out that I know I like, it’s easier for me to function.

It’s been a little bit of a running joke this year at my conferences that I need people to remind me to feed myself. I get hangry and overwhelmed by choices and then I can’t make any because I am too hungry to process what I want, so I wind up curling up in a ball losing my ability to function. Having meals automatically sent to me each week removes a lot of the anxiety I have about things and gives me an activity I can throughout the week that doesn’t require me to do things that cause me mental health issues.

So Is It Worth The Cost?

Overall, I am finding this experiment to be a success. I don’t know how long I will continue to do this. I am hoping to get comfortable enough with my cooking skills to be able to try things without a safety net.

I have had to do a lot of things for my own mental health recently. I went to my parent’s place for Christmas and even just going back home for a few days really threw me into a depression. I came home last night and was so happy to be able to have access to the things I need to take care of myself.

As god as my witness, I'll never be hangry again!

As god as my witness, I’ll never be hangry again!

I didn’t have my tea. I didn’t have a space that was mine where I could just focus and chill and be on my own. I didn’t control when I ate and what food I had.

I don’t like how necessary it is for me to control my environment right now. I know I used to be able to function without these things in the past. I hate how tenuous my grasp is on my ability to be functional. I am hoping this is just a rough patch in my life where I have to control everything.

If I can get some mental health from paying $72 a week for someone to box up a bunch of ingredients and send them to my house so that I don’t have to deal with a world that currently overwhelms me, then that’s worth it to me right now.

I don’t like admitting I need help. I don’t like admitting that doing every day thinks like grocery shopping or visiting my parents overnight throws me into chaos. It really sucks. I am deciding instead of being annoyed that I am paying too much money for ingredients to keep myself alive and functioning, I am going to be grateful that these services exist and I earn enough money to be able to afford to do this so I can keep my job and be productive. Saving twenty bucks a week by going and buying them myself but losing a whole day to the endeavor is penny wise and pound foolish.

Star Wars: The Force is Tired

I am on my company Slack channel seeing everyone get really excited about the new Star Wars movie that apparently is coming out soon but people have been talking about for at least a year.

I am probably not going to see it in a movie theater.

I went to see the prequel movies when they had their midnight showings. I dressed up to go to midnight showings of all the Lord of the Rings movies. I was tempted to buy tickets to the various Marvel movie marathons before the Avengers and the second Avengers movie came out.

The last time I remember doing something fun and being a fan girl for a movie was when The Avengers came out. A friend of mine had an all day marathon of the previous movie. We had themed shots. I got drunk with the best group of coworkers I ever had, who will probably never be in the same room together ever again. It was a really special experience.

I am not feeling it anymore.

I am finding it difficult to be excited by anything in pop culture anymore.

Reading all the insane stories about people getting in line to buy the first of the Star Wars merchandise makes me weary. I am bitter and cynical and feel like the movie is nothing more than a vehicle to sell toys like the wonderful cartoons of the 80’s such as He-Man and Teenaged Mutant Ninja Turtles.

I am a child of the eighties. I have a lot of toys that I wish I still had from various things I was obsessed with as a kid. But I feel like this whole thing is a giant sensory stimulus that is simply trying to get me to buy shit I don’t need.

I haven’t seen the movie, but I read enough spoilers to know that this movie is basically a retelling of the original trilogy. Killing the Emperor didn’t bring about a new Galactic republic. The war is still going on.

I enjoyed the Extended Universe more than I would like to admit because it at least moved the narrative forward. We had several years before the Rebels were able to expel the Empire from the capital planet. There was governmental stuff that people had to figure out. Luke started his Jedi academy and we had actual new Jedi characters. There were still wars and remnants of the Empire, but the battles were at least different and somewhat psychologically interesting.

All that is gone now. The Rebels are still fighting the Rebellion. Luke is still the only Jedi. Nothing has progressed and everything our heroes did thirty years ago is essentially forgotten. We had progress! We had change! We had character development! Now we’re backtracking from all of that to say we’re basically back where we were thirty years ago?! What the fuck!

It’s like a god damned soap opera. All this has happened before. All this will happen again. There are so many stories that keep being drawn out longer and longer and I just want them to fucking end!

There is something to be said for ending a story. Having a satisfying ending to a story is like having dessert at the end of a good meal. You leave satisfied and remember it fondly. You don’t want a meal that will not fucking end where each course is worse than the one before it, but you can’t leave because they won’t bring you the bill.

I know that marketing and other bullshit exists to keep us in a state of perpetual need. We need more story. We need more books. We need more toys. We’re dangling this resolution just out of reach so you will keep buying our stuff.

I demand satisfaction! I am sick of being strung along for years and years on a meandering trip that goes fucking nowhere.

The Star Wars universe has enough compelling aspects to it that you don’t have to go and pretend like nothing happened for the last thirty years. As much as I hated the prequels, at least they did something different. They told a different set of stories than the original trilogy did.

I know that Disney wants to turn Star Wars into it’s own Marvel Extended Universe franchise. I know there is going to be a new Star Wars movie every year for the next like two decades.

I’m sorry, I just can’t muster up the enthusiasm for it anymore.

I am sure I will enjoy watching these at home like I do every other movie that’s come out over the last year that I simply couldn’t muster the ambition to put a bra on to go see in public. The idea of sitting in a dark movie theater for over two hours without being able to check my email without getting looks of disapproval by a hundred strangers has zero appeal to me at this point in my life. I am not going to complain about how shitty movies are now because even if they were good and targeted at me, I am too tired to go anyway.

For all of you who have been excited about this for a year, I hope you get what you wanted. If not, wait a few months and you’ll get another chance to be disappointed.

May the force be with you.

Getting Metal Up and Running: MTLDevice

I was really hoping last week to get a post out about creating a default Metal template, but I have been sick for a few weeks. Last weekend I sat in my chair staring at the TV because that was all I could deal with.

I am also recovering from a migraine that I have had for the past four days.

I was hoping to be able to go through my Metal template and remove all of the bells and whistles that were added by the Apple engineers to make the template do something and not just be a blank slate. I don’t feel comfortable enough to go through this and delete things yet, so I would like to talk about various Metal objects and components necessary to create a baseline Metal project and what purpose each of these serve.

I am posting this project on GitHub. I will be modifying it in the next few weeks to make this into a functional template anyone can grab if they want to start a Metal project but don’t want to deal with deleting boilerplate code. It’s not at that point yet, but hopefully before the end of the year!

The first, and most important, property I want to talk about is the MTLDevice. The documentation for MTLDevice is here.

Why Does Our Code Need an MTLDevice?

The MTLDevice is the software representation of the GPU. It is the way that you are able to interface with the hardware.

You might be wondering why this is something you would need. The iPhone is a cohesive unit that just kind of works when you program it. Why do you need to initialize a variable to represent part of your phone?

Whenever you create software that is going to interact with external hardware, you need to have a way to interface with it in your code.

When I was working at SonoPlot, we were writing control software for robots. We had classes for the robotics system and for the camera we were using.

The camera class had to have functions for every action we needed it to have. It also had a property for each thing that we needed to either get or set. One example is resolution. Some of our cameras had variable resolution and others were fixed. We had to have a property to either retrieve what that resolution was or that would set the resolution on the ones that can be set.

Even though we don’t necessarily think of the iPhone in terms of “external” hardware, it is. There are different parts of the iPhone that you can interface through the Cocoa frameworks. Speaking of cameras, the iPhone has a camera.

The AVCaptureDevice in AVFoundation is the interfacing class that Apple provides to allow you to talk to the camera. It fulfills the same function that our Camera and Robotics classes had in the robotics software.

Just as we needed to create a camera and robotics class to talk to our hardware, you also need to create an object that talks directly to your GPU.

One of the promises of the Metal framework is that you, as the developer, would have far more control over allocating and deploying resources in your code. This is reflected in the methods associated with the MTLDevice protocol.

Protocol, Not Object

The first thing to point out is that MTLDevice is not a class, it’s a protocol. At this point I am not entirely certain why it was designed this way.

The code to create the device is as follows:

let device: MTLDevice = MTLCreateSystemDefaultDevice()!

If you hold option and hover over the device variable, it indicates that it is a MTLDevice object. In order to be an object, it must be an instance of a class. My best guess is that this is an instance of NSObject that conforms to the MTLDevice protocol.

I am fascinated as to why this was implemented in this manner. I plan to look into this further, but this is one of those things that having an understanding of why it was done this way doesn’t necessarily help me get things done, so I am going to try and leave it alone for now.

Functionality

The functionality that the MTLDevice needs to be able to do for you are the following:

Identifying Properties

There are many more Apple devices and chip types that support Metal programming now than there were when it was initially announced. Back when it came out in iOS 8, we just had the iPhone 5S and one of the iPad models with an A7 chip.

Now, we have a lot of devices with a lot of different chip sets that all support Metal programming, including the Mac.

We’re in a similar situation with these chips that I was in with supporting the legacy robotics software at SonoPlot. We had three different types of cameras that all had different properties. You can’t assume that all the GPUs in each device are the same.

So, just as we did with the robotics software, there are several properties that are retrievable from the GPU.

The properties you can access on each GPU are:

  • Maximum number of threads per thread group
  • Device Name
  • Whether this GPU supports a specific feature set
  • Whether this GPU supports a specific texture sample count

Looking over this list of properties, it looks like as the chips have progressed, they have more and better capabilities. The A7 chip in my iPhone 5S is not as powerful as the A9X chip in my iPad Pro.

If you want to target less powerful devices, it might be useful to get familiar with the idiosyncrasies of the chips in these devices.

Creating Metal Shader Libraries

As a protege of Brad Larson, I am very interested in exploring shaders in Metal.

One of the big, stupid questions I have with Metal is how the shaders are set up. Every project I have seen (including the template) has had one shader file named “Shaders.metal.” Does that mean that all shaders go into one file? Are these just projects that use one shader? Is this basically set up the same way that OpenGL ES 2.0 is set up?

This says that all of the “.metal” files are compiled into a single default library, so that tells me that I can have more than one shader file in a project.

I am looking forward to exploring the shader libraries in the future, but right now just making a note that this is a responsibility of the MTLDevice.

Creating Command Queues

This is interesting to see that Metal has built in command queues.

I know that Brad utilizes Grand Central Dispatch in GPUImage to make it work as efficiently as possible. OpenGL ES doesn’t have a built-in command queue structure to the best of my knowledge. I know that OpenGL ES can only exist on one thread at any given time and that one of the promises of Metal was multithreading. If you’re going to multithread something you need some way of keeping your threads straight.

Looking forward to exploring the Metal Command Queues further.

Creating Resources

The resources you are creating with the Metal device are buffers, textures, and sampler states.

Buffers should be familiar to anyone who works with graphics or audio. To the best of my memory, in OpenGL ES you have three buffers: One for the frame that is currently being displayed, one for the next frame to be displayed, and one in the wings waiting to be deployed when the top buffer gets popped off the stack.

Textures are also a familiar concept. In GPUImage the photo or video you are filtering is your texture, so this is fairly straightforward.

I have never heard of a sampler state, so I am interested to find out what this does.

Not a lot new or exciting here if you have any familiarity with OpenGL ES.

Creating Command Objects to Render Graphics

This is where you set up your pipeline to render your graphics. In OpenGL ES 1.0 this was a fixed function pipeline without shaders. In OpenGL ES 2.0, the programmable pipeline was introduced along with the ability to use shaders. Shaders gave the ability to really generate shadows and ambient occlusion in graphics on an iOS device. Since we’re not taking a step backwards, there are commands here to set up your programmable pipeline.

Creating Command Objects to Perform Computational Tasks

One of the things that really excited me about Metal was the ability to do general purpose GPU programming (GPGPU) in iOS. I had hoped in iOS 8 to hear that OpenCL would be made available on iOS, so I was rather pleased to hear that this functionality was made available.

Jeff Biggus has been speaking about OpenCL for a few years and using the GPU for something other than just graphics processing. It is one of those things on my giant list of things I am interested in but haven’t had a chance to explore yet. This excites me and I am looking forward to writing a Metal project that utilizes this extra functionality.

Thoughts

I am really excited about all of the functionality I see exposed to me in this protocol.

I know I basically just went through the documentation and didn’t necessarily tell you anything you couldn’t look up on your own, but I do think it helps to have some context about WHY this stuff is in here, not just that it exists.

I will be getting into the command queues and buffers in more depth in my next post because those are absolutely necessary for a minimum viable application. It’s helpful to know that these things are created and controlled by this master object.

I hope that this was interesting and useful. I know in most of the documentation I am reading it just mentions you need to create a MTLDevice without exploring what it’s role is in the application. It’s a really vital part of the application and I hope that you have a better understanding and appreciation of what it does within a Metal program.