Archive for the ‘Living’ category

Mac ‘n Cheese

July 16, 2010

I’m a programmer, and I love to code. However I also love to cook. I did not have a good topic to talk about as far as development goes, but I still wanted to get a blog post out there. So today, I’m going to share the recipe and method that I use to make mac ‘n cheese. I’m always tweaking it, but here’s the basic idea.

Mac And Cheese – The Tasty

Things you will probably want:

1/4 cup flour
1/4 cup butter (half a stick)
1-2 cloves crushed/minced garlic
1/2 diced onion
1 tsp or so chopped cilantro (I use the frozen cubes from Trader Joe’s)
dash of salt
dash of pepper
2 cups milk (up to 1 cup can be replaced with cream for a tastier cheese sauce)
8 oz. cheese (I use random combinations of cheddar, gruyere, gouda… other hard cheeses)
8 oz of large elbow macaroni (or whatever noodle you prefer)
optionally: crumbled cooked bacon, diced cooked sausage, cooked peppers, diced chicken, or other things you like in/on mac n’ cheese.

Doubling it is pretty easy. In general I consider 4 oz of cheese to equal about a cup. There should be equal parts milk, cheese, and macaroni. Flour and butter should each be around 1/8th of the milk/cheese/macaroni. You can adjust the quantities though depending on how you like your roux.

Ok, now on to the steps.

You can boil the pasta as per whatever instructions you have with it before or during creating the sauce, just make sure it’s ready when the sauce is ready.

For the sauce, use some sort of sauce pan and melt the butter under medium heat. Add the flour and stir it with a rubber spatula. What we’re creating in the first step if you’ve never done it before is called a roux. Flour or other starches can be used as a thickener for sauces, however it often has the problem of the flour clumping together into floury lumps that aren’t that appealing if you just add flour to a hot liquid. So instead we mix it with a fat (the butter) to dissolve it first before adding the liquid. Also, uncooked flour will give a starchy flavor that we’re not really looking for, so we’re going to cook the roux.

Blonde Roux

A blonde roux as captured by someone on Flickr. This is about the color we're going for.

It’s going to bubble a lot, and you’re going to want to stir it a lot as well. The rubber spatula is to scrape the bottom of the pan constantly to make sure no part stays on the bottom for too long and burns the roux. If you start to see black specs in it, you’ve burned it and have to start over. I’ve never had that happen, but I’ve read it can do so if you don’t pay enough attention. Also if it starts to smoke, you’ve hit the smoking point of your butter and should lower the heat a bit. Once you have a blond roux, the floury taste should be removed.

An interesting note on roux is that the more that you cook it, the more flavor that the roux will impart on the final dish. However, it also means that the roux will act less as a thickening agent. If you want to get more of the flavor from the roux (by making it darker), but don’t want to lose the thickness of a creamy cheese sauce, increase the quantities of the flour and butter.

After cooking the roux for about 10-15 minutes and having it change color to a light yellow, add in the diced onion. You’ll want to cook the onion in the roux for another 5 minutes or so, until it has turned transulcentish.

Add the garlic and cilantro and cook for a few more minutes. You can also add some salt and pepper at this time if you like that sort of thing.

Next, add the 2 cups milk/cream hybrid. For better results, heat the milk first in either a pot or microwave. Having a hot liquid added to a hot roux will prevent the roux from clumping as it suddenly cools. Even if you use cold milk though, you can eventually break it down again as it heats back up, so don’t worry too much.

Once you add the milk/cream you might want to use a wire wisk to really disperse the roux in the liquid. Stir it for a few minutes, then leave it on medium heat, stirring occasionally until it starts to bubble (nearly boiling).

Once it hits the boiling point the roux’s effect will become noticeable and the sauce will thicken. You can cook it for another minute or so if you like to make sure it’s at its thickest state (don’t leave it too long though).

Lower the heat to low or medium low and start adding the cheese. The cheese should be grated to increase surface area and promote melting. If you add it in slices or cubes, you’ll have to stir like a crazy person and keep it on the heat for way too long to get the stuff to melt. Add the cheese in small batches at a time and let it completely melt between additions.

Once all of the cheese is melted, you can turn the heat off. Place the pasta in a large mixing bowl and add the cheese to it, mixing it together. You can add any of your optional meat/veggie items at this time.

Pour the mixture into one or more lightly greased casserole, or other oven safe dishes. Personally, I often use a 10″ cast iron skillet, but I also use a ceramic dish as well. You can sprinkle more cheese and/or bacon/sausage/whatever on top. Place it in a 375˚ oven for a half hour.

Eat… or whatever else it is you want to do with mac n’ cheese.

Tree

I originally had a picture of a finished Mac 'N Cheese that I cooked in my cast iron, but the picture isn't on this computer. Instead, here's a photo of a sequoia from Yosemite national park.

Advertisements

Interesting Work

July 8, 2010

One of my largest problems at my job is finding interesting work or making my work interesting. Without having the physical exertion associated with an outdoors job, having something that keeps you actively engaged not only increases productivity, but also personal enjoyment and quality of life. Basically, if you don’t find your work interesting, you’re not going to want to do it.

My Cat Mischief

My cat sometimes attacks the chair in her more crazy moments. She is always interesting, but I don't work with her.

Finding interesting work, or ways to make your work interesting, is not a very easy thing to do. But I find that sometimes those things that are boring are excellent opportunities to find ways to automate and therefor make a computer do instead. This serves two main purposes. The first is that you’re no longer doing boring work, a computer is. The second is that you just created some interesting work in creating a way to automate the boring stuff. Typically the stuff that’s boring is something that has no uniqueness to it and you have to repeat over and over again, which is the perfect target for automation anyway.

For example, testing is boring. Going through and finding all of the areas where your program can break and trying to make it happen can be a drag, especially when you have to do it for every release. However, creating automated tests is more interesting. This is especially true if you add extra flair such as making lava lamps turn on when a build breaks, or integrating it with an sms service that sends you texts every 5 minutes that the build is broken, causing you to drive back to work at 11pm to fix something wrong with the continuous integration system itself since the ops people decided to shut down one of your auxiliary systems. Ok, that’s less fun.

Having a passion for what you do and having your work be interesting is critical to your success in life. Hating what you do for a living and finding your work boring will just cause you to be bad at your job and unhappy in general. If you’re unable to discover a way to make your work more interesting for you, maybe you should consider changing career paths.

I don’t have any great suggestions for making any boring work fun. I know from experience that I personally enjoy taking any project and attempting to find the most elegant way to solve it with the best performance possible. Making sure that everything has documentation and that the unit tests cover over 90% of the code gives a wonderful sense of satisfaction. But any sort of goal that yields a high rate of satisfaction should be targeted as something to strive for in your day to day working life.

Resolutions

December 18, 2009

There’s only two more posts for me on here before 2010, and due to not being able to think of anything else to post about, I’m going to place my top development-ish related New Years resolutions that I’m going to make up on the spot.

  1. Finish an iPhone app – I’ve started a few small apps but I haven’t had one fully finished in a usable form. I want to create at least one app and release it for free on the app store, just for fun.
  2. Design an elegant Report system – Our current application has difficulties generating reports due to bad code and weird business rules. I want to rewrite the entire report system into something elegant and fast.
  3. Play more Go – I really like Go, and I haven’t played much in the last year or so. I’d like to start more games in person and maybe schedule regular times to play online games. I feel that Go helps me as a developer for both its analytical possibilities, along with the strategic maneuverings that are useful in any office place.
  4. Be more awesome – This one is sort of vague. By being more awesome I mean to increase my productivity, make myself someone reliable that people go to for help, push the boundaries on development and research for my team, and generally become more awesome at work.
  5. Work on more home projects – This goes a bit along with the first one. I do a lot of development at work, but it’s a very narrow area of development. In order to really expand my abilities as a software developer I have to free myself of the project restrictions placed on me by my current priorities at work and do more spare-time development. Maybe I’ll make a game or improve some process that I do by automating it. Maybe I’ll find an open source project to contribute to. Speaking of…
  6. Contribute to an Open Source project – It’s often quite a bit more difficult than people make it sound to contribute to an open source project and have your changes accepted. Just reading up on the code for some projects in order to understand it enough to make a change can take a lot of time and dedication. I’d like to pick a project to help out on and contribute to as I feel it will help me as a developer along with giving back to the community.
  7. Improve my average pomodoro count – Currently my average number of pomodoros is lower than I would like. I’d like to increase how many pomodoros I complete per day by an average of 3-4. Trying to remove procrastination activities and learning how to focus better is still an ongoing process.
  8. Continue to update this blog – I’d like to be able to do another post like this one in about a year. That means not giving up on the blog and making it part of my routine so that it doesn’t get abandoned.

That’s just a quick list that I came up with in 10 minutes or so. It’s not exhaustive and I’m not sure if I’ll actually meet all of the goals but I’d like to try.

Diversification

December 15, 2009

At times there seems to be too much stagnation in the world of software development. I don’t mean that progress in new technologies or techniques is slowing, in fact it is probably chugging away at its standard accelerated pace from the rest of the sciences, I mean that developers themselves tend to stagnate.

This is a dangerous thing for any developer and for our community as a whole. Many developers become stuck in a rut of working on the same programs, writing in the same language, fixing bugs or adding minor incremental changes. Maintenance mode: it dominates many software shops and can cause your career and your company to become outdated.

As an example, take a look at Internet Explorer. Microsoft practically stopped developing IE in the mid 2000’s because they had such a high market share they figured there wasn’t a need to do real work on a new version. Minor fixes was all that went into it. Meanwhile other browsers such as Firefox, Safari, and Opera were putting together new and exciting packages. Microsoft was at a loss and had to hurry up and create IE 7 and later 8 to try to catch up to the standards compliant and innovative new browsers that were on the market. If they had kept pushing even when they felt secure, they would have had a better product and probably a better market position.

I feel the same thing occurs not only in the products we make, but in ourselves with our skills. Once you become a Java developer, or a web developer, or a Java Web developer, you stay there. Maybe you’ve been using C, or Java, or PHP all of your career and you’ve never really expanded out of that. Perhaps you’ve written mostly web applications and never really touched desktop or mobile applications.  I feel that that is a significant loss to yourself and to your current position.

The thing is people, and especially developers, need to change from time to time. If you keep programming in the same language on the same types of projects or are just in maintenance mode of the same project constantly, you’ll begin to stagnate. Your skills might be quite good in your area of expertise, but if you’re ever forced to leave your comfort zone you will find you struggle. Perhaps you get laid off and need to get a new job, having some versatility will look good on your resumé. Even if you’re staying with your same position, having skills in additional technologies, different languages, and programming on different platforms will help you in your current task by forcing you to change your point of view.

Change inevitably happens. I remember working at a government job in NY where all of the older programmers who were masters in COBOL were forced to retrain in Java or retire. Many of them had problems with that transition as Java and COBOL are fairly different. The few who were keeping up on their game for the last few decades and learning new strategies and processes on the side were poised to take over top positions after the transition. They already had the knowledge that they taught themselves, while the ones who stagnated either had to struggle to adapt or look for a new job.

My ambition typically involves trying to keep as many new languages in circulation in my head as I can. I use Java primarily at work, but when I start doing my own projects I tend to lean towards Objective-C, C++, Ruby, and Groovy. I mainly write web applications at work, so my home projects tend to be closer to command-line scripts, desktop applications, or mobile apps (the iPhone is a nice platform to play in as a developer). I may not be able to use these projects or the skills that I learn on them directly at my job, but I do become more versatile from the experiences. That versatility allows me to answer questions or think of designs differently than I would if I just focused on web based Java applications.

In addition, try to make sure that you do have side projects. I know for a lot of people who work 8-14 hour days programming that the last thing they want to go home and do is more programming. A lot of the time I would agree with them, however keeping a few side projects that you work on several times a week in your spare time will keep you sharp and can be very rewarding as you make things that you wouldn’t have the opportunity to at work. I know that I’ve felt more accomplished by satisfying my own goals at home than I am at filling another bullet point on a feature list of a product that I have little passion for at work.

If you can’t think of a project, try to find an interesting open source one online to make contributions. It’s not always easy to get started, but those contributions will look great on a resume and can help a multitude of people along with yourself.