Owning Your Stack

A few months back I wrote about reinventing wheels. Going down that course has been interesting and I hope to continue reinventing parts of the personal cloud stack. Personal cloud meaning taking all of the services you have hosted elsewhere and pulling them in. This feeds into the IndieWeb movement as well.

A couple years ago, I deployed my first collocated server with my friends. I got a pretty monstrous setup compared to my needs, but I figured it’d pay for itself over time and it has. One side effect of having all this space was that I could let my friends also have slices of my server. It was nice sharing those extra resources. Unfortunately, by hosting my friend’s slices of my server, it meant doing anything to the root system or how the system was organized was a bit tedious or even off limits.

In owning my own services, I want to restructure my server. Also I want to have interesting routing between containers and keep all the containers down to the single process ideal. In order to move to this world I’ve had to ask my friends to give up their spots on my server. Everyone was really great about this thanking me for hosting for this long and such. I was worried people would complain and I’d have to be more forceful, but instead things were wonderful.

The next step I want to take after deploying my personal cloud, will be to start one by one replacing pieces with my own custom code. The obvious first one will be the SMTP server since I’ve already started implementing one in rust. After that it may be something like my blog, or redis or a number of other parts of the cloud. The eventual goal being that I’ve implemented a fair portion of all cloud services and I can better understand them. I wont be restricting myself to any one language. I will be pushing for a container per process with linking between containers to share services.

Overall, I hope to learn a bunch and have some fun in the process. I recently picked up the domain http://ownstack.club and hope to have something up on it in the near future!

Beeminding ZenIRCBot 3.0

ZenIRCBot is a topic I’ve written on a few times. Once upon a time it was my primary project outside of work. These days it has mostly become an unmaintained heap of code. I’ve grown significantly as a developer since I wrote it. It’s time for a revival and a rewrite.

I have a project I started about 7-8 months ago called clean-zenircbot which is a reimplementation of the bot from scratch using a custom IRC library I hope to spin out as a separate project. The goals of the project are things like being able to test the bot itself as well as making it possible for service developers to reasonably test their services. As well as documenting the whole thing to make myself no longer ashamed when I suggest someone write a service for an instance of the bot.

Going along with having written about ZenIRCBot in the past, I’ve also promised 3.0 a few times. So what makes this time different? The primary change is that I’ve started using beeminder (click to see how I’m doing), a habit tracking app with some nice features. My goal will be to fix at least 2 issues a week, or more which grants me a bit of a buffer. This will keep me pushing forward on getting a new version out the door.

I’m not sure how many issues or how long it will take, but constant progress will be made. I currently have two issues open on the repo. First one is to assess the status of the code base. Second is to go through every issue on all of the ZenIRCBot repos and pull in all of them that make sense for the new bot. This includes going through closed issues to remind myself why the old bot had some interesting design decisions.

Below is a graph of this so far. I’m starting with a flat line for the first week to give myself time to build up a buffer and work out a way to fit it into my schedule. Hopefully if you are viewing this in February or March (or even later!) the data will be going up and to the right much like the yellow road I should be staying on.

Root Vegetable Stew with Lamb

The other day I was at the store and found that lamb stew meat was on sale. I decided to pick up some, take it home and make the first stew of the new year. I’d recently heard that parsnips were pretty good and never really had those before so I got some of those. Picking up some other veggies and a bottle of syrah I made my way home and got excited to eat delicious lamb and veggies.

  • 1.25 lbs Lamb (most any cut) cubed
  • 0.5 cup Flour
  • 0.25 cup Olive Oil
  • 2 cups Dry Red Wine
  • 1.5 tablespoons Sherry Vinegar
  • 3 cups Chicken Stock or Low Sodium Chicken Broth
  • 1 tablespoon chopped Fresh Tarragon
  • 1 lbs Small Red Potatoes
  • 0.5 lbs Small Yellow Potatoes
  • Parsnip
  • 3 good sized Carrots
  • Fennel Bulb
  • 3 cloves Garlic
  1. Preheat oven to 350°. Toss your enameled cast iron dutch oven on a burner on medium low (pan should be ~340F), don’t put any oil in it yet, the pan can stay at high temps no problem all alone.
  2. Put your flour in a big bowl with a generous amount of salt and pepper.
  3. Toss the lamb in the flour until coated. I had to do it in two batches, but I used a medium sized bowl.
  4. Put 2 tablespoons of oil into the pan (coat the bottom) and give a few seconds to fully come to temp. If you happen to have a pretty impurity heavy olive oil it may smoke at this point, drop the pan down to 325 and it should stop.
  5. I had to do this part in batches as well, brown the lamb on a couple sides, setting it aside as you work through your batches.
  6. Dump the wine and sherry vinegar into the pan. Use a piece of lamb to lightly scrub the bottom to get the good stuff, then put the rest in and bring to a boil.
  7. Add chicken stock and tarragon and stir it about a bit and bring it back to a boil.
  8. Once boiling, put in oven with lid for about 25 minutes.
  9. During those 25 minutes chop up the potatoes, parsnips, carrots and fennel bulb. The parsnips core seemed a bit tough closer to top so I cut it into coins for the skinny half, then I sliced down the sides to get all the delicious meat off of the core of the bigger half the roughly chopped that up. Fennel bulb I cut the stalks off and about a half inch of the bulb from the bottom. Then I sliced it in quarters with the grain. Then I cut it into strips against the grain.
  10. Once the 25 minutes has passed toss all of that into the pan and stir it up. I like my stews to have a bit of juice, so if you can see more than a quarter of an inch of the veggies and meat sticking out, pour some more wine and broth in (1 part wine to 4 parts broth).
  11. Put back in oven for about an hour or until the veggies are to your liking in softness.
  12. Bowl it up and devour it. If you like dry red wines, a glass goes nicely with it, otherwise put it in the fridge for deglazing any pan with red meat in it.

This is slightly modified from the exact stew I made to cut back the initial braise of the meat since mine turned out a little tough. I might also try braising at a lower temperature, but the problem is cooking the veggies through. They need quite a bit of heat to break down and become more tender.

Thanks to Nick Niemeir for asking me about the recipe today at work. Otherwise I probably wouldn’t have gotten around to writing it down.

If you have any tips or tricks for lamb stew, I’d love to hear them. But I’m pretty proud of how good this one turned out.

Time To Reinvent More Wheels

At CascadiaJS my friend Nick Niemeir gave a talk about how he ended up reinventing some wheels for a project a work. He went further to say that everyone should feel encouraged to go forth and reinvent. It is more than just learning. Sometimes you build something better, whether that is better for you or better for the more general case.

I’ve recently started picking up Rust. It is an interesting programming language with concurrency as first a first class citizen. It has borrowed from several languages to make that happen and it is quite enjoyable. If something I’m building is just for myself, I will likely write it in rust.

So, lets combine the first and second paragraphs. I’m finding that there is a fair amount of technology that is interesting to me, that I have never written one of. Last weekend I started in on an SMTP server in rust. I already have plans for an AMQP server and as well as a Pub/Sub server. The intent isn’t to come up with something that is better than existing tools. But more understand the problems involved and work through them.

I start out with grand plans, then I don’t always follow through. With that in mind, I’m going to set a goal to reinvent at least 6 services in the next year. All using rust as their primary language so I can feel it out in various environments. SMTP, AMQP, and Pub/Sub are definite. Other ideas I have, but aren’t solid yet, are an IRC server, monitoring server, DNS server, or maybe a key/value store of some sort.

I’m not the only one venturing into this territory, most inspiring to me is the #infoforcefeed and #stackvm crews on freenode. Between them there is are a lot of folks who’ve already reinventing all sorts of wheels together. I look forward to being more active in my participation in these communities.

 

Negativity in Talks

I was at a meetup recently, and one of the organizers was giving a talk. They come across some PHP in the demo they are doing, and crack a joke about how bad PHP is. The crowd laughs and cheers along with the joke. This isn’t an isolated incident, it happens during talks or discussions all the time. That doesn’t mean it is acceptable.

When I broke into the industry, my first gig was writing Perl, Java, and PHP. All of these languages have stigmas around them these days. Perl has its magic and the fact that only neckbeard sysadmins write it. Java is the ‘I just hit tab in my IDE and the code writes itself!’ and other comments on how ugly it is. PHP, possibly the most made fun of language, doesn’t even get a reason most of the time. It is just ‘lulz php is bad, right gaise?’

Imagine a developer who is just getting started. They are ultra proud of their first gig, which happens to be working on a Drupal site in PHP. They come to a user group for a different language they’ve read about and think sounds neat. They then hear speakers that people appear to respect making jokes about the job they are proud of, the crowd joining in on this negativity. This is not inspiring to them, it just reinforces the impostor syndrome most of us felt as we started into tech.

So what do we do about this? If you are a group organizer, you already have all the power you need to make the changes. Talk with your speakers when they volunteer or are asked to speak. Let them know you want to promote a positive environment regardless of background. Consider writing up guidelines for your speakers to agree to.

How about as just an attendee? The best bet is probably speaking to one of the organizers. Bring it to their attention that their speakers are alienating a portion of their audience with the language trash talking. Approach it as a problem to be fixed in the future, not as if they intended to insult.

Keep in mind I’m not opposed to direct comparison between languages. “I enjoy the lack of type inference because it makes the truth table much easier to understand than, for instance, PHP’s.” This isn’t insulting the whole language, it isn’t turning it into a joke. It is just illustrating a difference that the speaker values.

Much like other negativity in our community, this will be something that will take some time to fix. Keep in mind this isn’t just having to do with user group or conference talks. Discussions around a table suffer from this as well. The first place one should address this problem is within themselves. We are all better than this pandering, we can build ourselves up without having to push others down. Let’s go out and make our community much more positive.

Roasting Broccoli

While trying to eat better, I’ve found a method of cooking broccoli that is delicious. Cooking is something I enjoy quite a bit. These days I’ve been focusing on simple dishes to improve the basics of my cooking.

This broccoli is some of the best I’ve had in my life. Only method I have found that can compete is stir fry. But, I don’t always want to slice up a bunch of veggies and put sauce on it all.

Ingredients:

  • 1 head of broccoli per person
  • 1.5 cloves of garlic per head of broccoli
  • olive oil
  • lemon juice (fresh or bottled)
  • salt and pepper

Start by preheating your oven to 425F (220C). Slice the florets off the head of broccoli, leaving them on the larger side. Place into a large bowl, it needs to big enough to toss the broccoli in. Slice the garlic up and toss it into the bowl as well. Drizzle some olive oil on it, as well as some salt and pepper. Toss until lightly covered in oil.

Spread the broccoli out on a cookie sheet, don’t wash the bowl yet. I try to make sure they are all on their sides. Place in oven for about 15-20 minutes, or until the broccoli flowers start to brown a little. This step may be extraneous, but I shake it up half way through.

Once the little flowers have started to brown, take the broccoli out and put it back in the same bowl you used earlier. This is so you get some fresh olive oil to go with the cooked stuff. Add the lemon juice, toss again, then serve.

The lemon juice at the end is what makes this dish. It makes the broccoli taste sunny, and the browned flowers add some texture and a unique flavor.

PDX Games.js

Dave Justice suggested that we have a three.js hack day. I decided to one up him and go for a generic games written in JS hack day, thus PDX Games.js was born!

Currently all the details are tentative. I need to clear it with our office manager as well as work out food/drink sponsorship.

The reason this is exciting to me, is that I have been intending to get back into game development for years. If PDX NodeBots Day is any indicator, a hack day inspires me greatly to get into something.

My project idea: I have attempted a few times (back when I was a very young developer) to build a clone of Final Fantasy Tactics. I’ll be setting out to do this, on the day of I’ll be spending most of my time building the graphics engine for the combat board. If I have spare time, perhaps I’ll spend time on menuing and other things like that. My end goal is less a full clone of FFT but a FFT-like game that I’ve built myself and have running with modern graphics and such.

The hack day, regardless of the specific details, should be a ton of fun.