Sep 072011
 

It’s been an exciting evening at the Willow house. First of all, Mikie found a possum hanging out in a bird-house on the side yard.

Possum in the Bird House 1

Possum in the Bird House 2

Then, shortly after that, we lost all water pressure at the house. Went outside to investigate and saw some emergency vehicles down the block. Found out that the water main for the neighborhood ruptured and they are having to dig up the street to repair it. It’s a work in progress.

Water line break on Willow Street

Apr 212011
 

Rahab!

Had my first physical therapy session at N.E. Rahab in Humble. My therapist, Mary Jo, had me warm up for 10 minutes on an elliptical. The rest of the session was basically just supervised stretching and exercise. At the end of the session she showed me how to tape my left knee to help keep the kneecap in alignment while exercising. I’m not sure how much actual value there is to be had from these sessions. I think I would get as much value from just being given instructions and then turned loose at the gym.

Lunch

Got in a quick cardio workout at the LA Fitness by work. Did a bit of rowing followed by elliptical.

Rowing

Elliptical

Here are a few pics from the drive home

Harold & Woodhead

Harold and Woodhead

Coco’s Sushi Bar

Coco's Sushi Bar

Allen Parkway

Allen Parkway

Softlayer

Softlayer

Hanging with the birds

I spent some time relaxing with Dutch and Shadow

Dutch 1

Dutch 2

Shadow 1

Dutch 3

Shadow 2

Apr 142011
 

This is a simple but superbly delicious recipe from the Delicioso! cookbook. I want to point out that all of the pictures that follow can be clicked on to see larger versions for more detail.

Serving Size

Makes about 6 servings, give or take.

Ingredients

  • Olive oil or vegetable oil
  • 1 whole chicken, cut up
  • 1 3/4 cups uncooked rice
  • 1 large onion, cut up
  • 2 jalapenos, seeded and diced
  • 1 8-oz can tomato sauce
  • 2 tsp salt
  • 2 tsp garlic powder
  • 2 tsp cumin
  • 1 lemon (to put on served portions)

Here are all off the ingredients all laid out. I do recommend buying a whole chicken and cutting it up yourself. It is not hard to do. Just be careful. When cutting individual pieces apart you want the knife to cut between the moviing parts of the joints so you are not ever actually trying to cut through bone.

Arroz con Pollo - 01

Here is the chicken all cut up. I do remove the skin. Also I cut the breast meat off of the bone and cut it up onto smaller pieces. Basically each breast half is cut into two pieces. Also with the wings I cut the smallest segment of the wing off and discard it. Lastly I do not use any of the organ parts that are typically stored inside the body cavity.

Arroz con Pollo - 02

Here is the rice all measured out and the onions and jalapenos all cut up and ready to go.

Arroz con Pollo - 03

Procedure

Pour about 1/4 inch of oil into a stew pot. Heat it up and place the cut up chicken parts into the oil. Cook it, turning occasionally until it is nicely browned. Throughout this recipe I use a spatula to stir stuff up and to scrape the bottom of the post so things don’t stick.

This is the chicken browning in the oil. When you first add it in it may not all fit nice and flat on the bottom of the pot but as it cooks it will shrink up and you will have enough room.

Arroz con Pollo - 04

I use a fairly high heat while browning the chicken.

Arroz con Pollo - 05

When the chicken is nicely browned remove it from the oil and set it aside.

Arroz con Pollo - 06

Now put the rice, onions, and jalapenos into the hot oil and cook it until the rice is browned. Here is it after I first added it to the oil.

Arroz con Pollo - 07

While it is cooking you want to be sure and scrape the bottom of the pot frequently so that nothing sticks.

Arroz con Pollo - 08

When the rice is brown (not dark brown like chocolate, but lightly browned), you will add in the chicken, the tomato sauce, the spices, and 3 cups of water. Note: The empty tomato sauce can holds exactly one cup of water. How convenient!

Arroz con Pollo - 09

Turn the heat down a bit and let it simmer, covered, until the water is absorbed. The recipe says this will take from 35 to 45 minutes but it may take less time than that.

Arroz con Pollo - 10

Here is is, simmering.

Arroz con Pollo - 11

Very important! Be sure and scrape the bottom of the pot with the spatula frequently so that the rice does not stick. As more and more of the liquid is absorbed by the rice you will want to do this more often.

Arroz con Pollo - 12

This is done:

Arroz con Pollo - 13

Dish some of this up into a bowl and squeeze a little lemon juice on top and serve. This is a superb recipe. Enjoy!

Apr 022011
 

Scaling Out CouchDB with BigCouch

This is a really cool video presentation from Adam Kocoloski of https://cloudant.com/. The talk was given on October 28, 2010.

Notes from this video presentation.

These are my notes from Adam’s presentation. Some of the information in the presentation is probably a bit out of date with the current state of the product.

BigCouch

  • Addresses shortcomings of CouchDB (COUCH originally meant Cluster Of Untrusted Commodity Hardware)
  • CouchDB does not support clustering for write scaling
  • Horizontal scaling, transparent to application, no single point of failure
  • BigCouch = Couch + scaling
  • clustering in a ring (like dynamo)
  • Quorum system (N/W/R)
  • any node can handle a request
  • O(1) lookup
  • Views distributed like documents
  • Masterless, built using distributed Erlang
  • BigCouch databases governed by 4 parameters (NOTE: also consider the number of nodes in the cluster)
    • Q: number of shards
    • N: number of redundant copies of each shard
    • R: read quorum constant
    • W: write quorum constant
  • Q – the number of shards (aka virtual nodes, partitions) over which a DB will be spread
    • consistent hashing space divided into Q pieces
    • specified at DB creation time. cannot be changed later (currently)
    • possible for more than 1 shard to live on a node
    • documents deterministically mapped to a shard
    • around 10 – 15 shards per node good
  • N – number of redundant copies of each document
    • choose N > 1 for fault-tolerant cluster
    • specified at DB creation
    • each shard is copied N times
    • recommended N > 2 (N == 3 is good)
  • W – the number of document copies that must be saved before a document is “written”
    • W must be <= N
    • W = 1 for max throughput
    • W = N for max consistency
    • Allow for “201″ creation response
    • Specified as a default but can be specified at write time
  • R – the number of identical document copies that must be read before request is OK
    • R must be <= N
    • R = 1 for minimal latency
    • R = N for max consistency
    • Specified as default but can be specified at read time
    • NOTE: Inconsistencies are automatically repaired
  • views are built locally on each node, for each DB shared
  • mergesort at query time using exactly one copy of each shard. done in memory in streaming fashion.
  • each shard handles map functions for its data AND reduce for its subset of data. rereduce done on node handling query. Note: to me this is huge advantage over Riak.
  • Can have pool of diskless machines that are not storing data but which are handling requests and doing reduce.
  • Does not do full-text indexing like Riak out of the box

Details

CHTTPD
Fabric
RexiMem3
Embedded CouchDB
  • Mem3
    • maintains shard mapping for each clustered database in a node-local CouchDB database
    • changes in the node registration and shard mapping databases are automatically replicated to all cluster nodes.
  • Rexi – addresses performance issues with Erlang RPC
    • BigCouch makes large number of parallel RPC’s to different nodes
    • Erlang RPC not designed for heavy parallelism (many processes spawned, responses directed back through single process, requests blocked until remote ‘rex’ process is monitored)
    • Rexi removes some of the safeguards in exchange for lower latencies (so must be careful) – no middleman on local node, remote procedure responds directly to client, remote process monitoring occurs out-of-band
  • Fabric
    • OTP library app (no processes) responsible for clustered versions of CouchDB core API calls
    • Quorum logic, view merging, etc.
    • Provides clean Erlang interface to BigCouch
    • No HTTP awareness
  • Chttpd
    • Replacement for ”couch_httpd”, but using fabric for all data access
  • BigCouch – based off apache couchdb 1.0.1

Misc

  • Apache2 license
  • Compaction – better not to run on all shards on all nodes simultaneously.
  • Adding new nodes is simple but do not automatically migrate data off full nodes. Can be scripted. (Note: Riak has big advantage here).
  • OSX / Debian flavored linux – best supported platforms
  • Filesystem suggestions – XFS seems to work well
  • ETA for tools for autosharding, etc, about 1 month away

CouchDB Highlights

  • schema-free document database management system (docs are JSON. can store binary attachments)
  • RESTful API
  • Views – custom, peristent representations of data implemented via incremental MR with results persisted to disk. Provides fast querying by primary key (views stored in B-Tree)
  • Bi-directional replication via master-slave and multi-master. Optional “filters” to replicate subset of data. Support for edge devices (mobile phones, etc).
  • Futon web interface

References

node.js + CouchDB

Racoons!

Here are 3 of the 4 raccoons that were having a cat food snack on our porch.

Young Raccoons

Mar 292011
 

Asia Market

I stopped by Asia Market on the way home from work tonight and picked up some Thai food for dinner. This is a really cool little place. They have a small menu but the food is consistently good. The market stocks an assortment of hard-to-find Thai food supplies and miscellaneous other stuff. It is located at 1010 W Cavalcade. Here is a Google map of the location.

This is what it looks like from the street:

Asia Market & Thai Food 1

Asia Market & Thai Food 2

Mikie and Dutch

After dinner, Mikie and Dutch played in the living room.

Dutch and Mikie - 1

Dutch and Mikie - 2

Dutch and Mikie - 3

Dutch and Mikie - 4

Dutch and Mikie - 5