Archive for February, 2011

A letter from momtrepreneur

Hi, its me again ;-).

I was thinking about what you said about focusing on your stuff in the US. I was driving along the road to Supetar today, passing the olive orchards and thinking of you.

I was thinking about how one’s 20s are the time for learning and exploring, honing skills and interests, finding out what you like and don’t like, learning what gives you satisfaction and a sense of purpose – for your professional and personal life. One’s 30s are an important time to focus what you have learned and build the foundation for life. I think that means choosing how you want to work and what you want to do as well as building long lasting professional, personal and family relationships.

In my 20s I worked in a lot of areas and learned as much as I could technically as well as about business, constantly challenging myself to try new things until I found what I was best at and what gave me the most sense of satisfaction and purpose. It took a long time ;-). I must have taken every type of class offered at school, just for the enjoyment of it. Once I discovered the computer industry, there was an endless supply of things to learn, which I had never dreamed of. I hadn’t even seen a computer ever when I started my first computer business. I was stunned by the possibility of it when I went to my first computer club meetings where they were talking about the Apple I computer and Local Area Networks (ethernet to be specific).

I also learned after having you that I wanted to have as much control and flexibility over my time so I could focus on you children and the family. This is why I went into consulting. I felt I could have rewarding work, would learn a lot from working with many companies, but also not be overwhelmed by the demands of a job where someone else decided when and where. I think I built a very good foundation in my 30s for this and was able in my 40s to have even more flexibility and further develop my business capabilities. Of course, I would have liked to have spent even more time at home because once I focused on business, the demands from clients made it increasingly difficult to manage my time. The conundrum of balancing work, getting new business and family life was much harder than I thought it would be.

The first time I tried consulting on my own (right after I had Deirdre), I was unsuccessful. I didn’t want to go back to work with the two of you at home. I was 30. But it turned out I didn’t have the contacts or ability to get clients, so I didn’t have much work – we had invented email on the PC and Macintosh, but nobody really used it. And the web had not been commercialized, so the only people that used it were universities and research companies like SRI.

I was really lucky that a friend of mine who worked at Apple called me and asked if I wanted to work on a project for Apple because one of the consultants that was working on it quit right in the middle and had not done any of the work. It turns out he didn’t know what to do. So, I said yes and wound up starting a consulting firm with the 3 people who were working on the project together. . . so many serendipitous events, which really shaped my life. I think what I learned from it was that in order to get to a point where I could do what I wanted, I had to have some foundations put into place. About 5 years later, I was able to start my own firm, quite successfully – I had learned how to run a consulting business and I had the network to get work.

We haven’t spoken in a long time about what you want and what you are thinking about, I am very interested in your thoughts and feelings about what you are doing.

Lots of love,

Mom

Mixing it up

I have 6 books on my nightstand, each on a different topic:

Lean Thinking process engineering
Metaphors We Live By role of language in psychology
Just Enough Software Architecture software architecture
Drive psychology of motivation
Web Operations operations
Leading Geeks management
Programming Erlang programming

This gives me the opportunity to jump around to follow whatever impulse is fueling me at any given time. If I’m feeling burned after working around some bogus proprietary API, I will jump into a book on Software Architecture to remind me that there is still a path toward sanity. If I’ve been teching out for days and feel like I’ve lost the forest for trees, I’ll pick up a book on psychology to remind me that software does still have the potential to assist human beings in a large number of not-necessarily-obvious ways. If I’ve spent all day writing emails and haven’t had time to touch a piece of code, I’ll jump into a book on process or management to give me new ideas on how to talk less and do more. If I’m feeling adventurous, I’ll pick up a book on a new language and type along for a few hours to advance my understanding of the universe.

And I do the same thing with projects:

Teambo A generic ticket tracking application
ToroPHP A PHP Framework
ripple-php A Riak ODM for PHP (ported from Ruby)
riak-php-client Riak’s PHP client which I’m extending to include support for Protocol Buffers

If I’m burnt on churning out HTML and CSS for days, I’ll step back and jump into something esoteric like adding a new transport protocol to an open source database client. If I’ve been crunching on a hard CS problem and start lacking steam, I’ll jump over to an application I’ve got on the back burner and knock out a few quick features to get the gears turning again. If I’m losing sleep over a cool new use case I’ve been turning over, I’ll flip on the lights and crank out a few test cases to put my ideas on paper as fodder for tomorrow’s session.

This sort of autonomy is crucial to remaining happy and productive.

Plant a thousand projects and let them flourish as they may.

Pretty JSON : Pipe to pj



    google image search for
    pipe and pjs

If you wind up doing a lot of curl from the command line (like you will using Riak), add this line to the bottom of ~/.bashrc

# ...
alias pj='python -mjson.tool'

Now when you’re curling, you can just pipe curl output to pj:

$ curl -s http://localhost:8098/riak/stats | pj

And this …

{"props":{"name":"stats","n_val":3,"allow_mult":false,
"last_write_wins":false,"precommit":[],"postcommit":[]
,"chash_keyfun":{"mod":"riak_core_util","fun":"chash_s
td_keyfun"},"linkfun":{"mod":"riak_kv_wm_link_walker",
"fun":"mapreduce_linkfun"},"old_vclock":86400,"young_v
clock":20,"big_vclock":50,"small_vclock":10,"r":"quoru
m","w":"quorum","dw":"quorum","rw":"quorum"}}

Becomes this …

{
    "props": {
        "allow_mult": false,
        "big_vclock": 50,
        "chash_keyfun": {
            "fun": "chash_std_keyfun",
            "mod": "riak_core_util"
        },
        "dw": "quorum",
        "last_write_wins": false,
        "linkfun": {
            "fun": "mapreduce_linkfun",
            "mod": "riak_kv_wm_link_walker"
        },
        "n_val": 3,
        "name": "stats",
        "old_vclock": 86400,
        "postcommit": [],
        "precommit": [],
        "r": "quorum",
        "rw": "quorum",
        "small_vclock": 10,
        "w": "quorum",
        "young_vclock": 20
    }
}

Self-descriptive hypermedia in Riak

So… tell me about yourself.

GET /riak/people/old-macdonald
Accept: application/json

Not much to say, really. My name is Old MacDonald. I have a farm.

HTTP/1.1 200 Okay
Content-Type: application/json
Link:  </riak/people>; rel="up", \
    </riak/schema/person>; riaktag="describedby", \
    </riak/animals/trixie>; riaktag="pet", \
    </riak/locations/macdonalds-farm>; riaktag="farm"

{
    "name": "Old MacDonald"
}

Ya, I’ve heard the song. But lets pretend like I’m an alien.


WHAT IS A PERSON? BEEP BOOP

GET /riak/schema/person
Accept: application/json

A person is an animal of the species Homo Sapien.

HTTP/1.1 200 Okay
Content-Type: application/schema+json
Link:  </riak/schema>; rel="up"

{
    "id": "/riak/schema/person",
    "extends": "/riak/schema/animal",
    "type": "Person",
    "description": "A Homo Sapien",
    "properties": {
        "species": "homo sapien",
        "arms": { "type": "number", "default": 2 },
        "legs": { "type": "number", "default": 2 }
    }
}

What is an animal?

GET /riak/schema/animal
Accept: application/json

An animal is a member of the animal kingdom.

HTTP/1.1 200 Okay
Content-Type: application/schema+json
Link:  </riak/schema>; rel="up"

{
    "id": "/riak/schema/animal",
    "type": "Animal",
    "description": "A member of the animal kingdom.",
    "properties": {
        "species": { "type": "string" },
        "name": { "type": "string" }
    }
}

Okay, I get it. So tell me more about that `farm` you mentioned.

GET /riak/locations/macdonalds-farm
Accept: application/json

Dude. My farm is insane. You would not believe how many animals I have.

HTTP/1.1 200 Okay
Content-Type: application/json
Link:  </riak/people>; rel="up", \
    </riak/schema/location>; riaktag="describedby", \
    </riak/animals/wilbur>; riaktag="animal", \
    </riak/animals/bessy>; riaktag="animal", \
    </riak/animals/mr-ed>; riaktag="animal", \
    </riak/animals/donald>; riaktag="animal", \
    </riak/mortgages/macdonalds-farm>; riaktag="mortgage", \
    </riak/mortgages/macdonalds-farm-2>; riaktag="mortgage"

{
    "name": "Old MacDonalds Farm",
    "geo": { "lat": "30.000635", "lng": "-95.225313" }
}

What is a location?

GET /riak/schema/location
Accept: application/json

LOL wut? A location is a location. Are you high right now?

HTTP/1.1 200 Okay
Content-Type: application/schema+json
Link:  </riak/schema>; rel="up"

{
    "id": "/riak/schema/location",
    "type": "Location",
    "description": "A location",
    "properties": {
        "name": { "type": "string" },
        "geo": {
            "type": "object",
            "properties": {
                "lat": { "type": "number" },
                "lng": { "type": "number" }
            }
        }
    },
    "links": [
        {"map": "http://maps.google.com/maps?ll={geo.lat},{geo.lng}&z=18"}
    ]
}

No dude, I’m an alien. Remember? BEEP BOOP BEEP

Tell me about this animal on your farm.

GET /riak/animals/bessy
Accept: application/json

Bessy is a dairy cow. She goes `moo`.

HTTP/1.1 200 Okay
Content-Type: application/json
Link:  </riak/people>; rel="up", \
    </riak/schema/cow>; riaktag="describedby"

{
    "name": "Bessy the bovine",
    "type": "dairy"
}

What is a `cow`?

GET /riak/schema/cow
Accept: application/json

A cow is a producer of butter or a precursor to steak or an object of worship.

HTTP/1.1 200 Okay
Content-Type: application/schema+json
Link:  </riak/schema>; rel="up"

{
    "id": "/riak/schema/cow",
    "extends": "/riak/schema/animal",
    "type": "Cow",
    "description": "A Cow is a bovine animal.",
    "properties": {
        "type": { "type": "string", "enum": [
            "steer",
            "dairy",
            "sacred"
        ]},
        "legs": { "type": "number", "default": 4 }
    }
}

Tell me about your pet.


I still don’t know that she’s a dog. Or an animal for that matter.

I am programmed to treat URLs as opaque.

GET /riak/animals/trixie
Accept: application/json

Trixie’s a 3-legged Australian Shepherd. She got hit by a car when she was
young and lost the use of her front left leg.


Wait, how did you know she is a dog if you didn’t know she is a dog?

HTTP/1.1 200 Okay
Content-Type: application/json
Link:  </riak/people>; rel="up", \
    </riak/schema/dog>; riaktag="describedby"

{
    "name": "Trixie",
    "breed": "Australian Shepherd",
    "legs": 3
}

What are you talking about? I don’t even know what a dog is.

I’m an alien, remember? BEEP BOOP BOP BEEP

GET /riak/schema/dog
Accept: application/json

Whatever, dude. This whole routine is gettin’ kinda played out.

HTTP/1.1 200 Okay
Content-Type: application/schema+json
Link:  </riak/schema>; rel="up"

{
    "id": "/riak/schema/dog",
    "extends": "/riak/schema/animal",
    "type": "Dog",
    "description": "A Dog is a Canis lupus familiaris.",
    "properties": {
        "species": "Canis lupus familiaris",
        "breed": { "type": "string" },
        "legs": { "type": "number", "default": 4 }
    }
}

Ya, you’re right. Lemme just try 1 more thing.

DELETE /riak/animals/bessy

Dude.

HTTP/1.1 204 No Content

Hi, I’m a PHP Developer.

This year in #rest on Freenode



Full Size (1920×1100)
pdf also available

The more treacherous paths are yet unsolved

PBF Cube

Illustration used without permission from
The Perry Bible Fellowship Almanack
http://www.pbfcomics.com

We tend to see success as a constant. As though the puzzle of our existence were a common mystery. In our understanding we misunderstand that a success for some may easily be viewed as a failure by others who see the world in different terms. Living in a world such as ours in the top 1% of the planet’s wealthiest, it is difficult for us not to lead a life which has a carbon footprint one thousand times the average.

The chaos of a disenchanted existence while inglorious holds at least a candle to the dark reality fueling our unsustainable existence. This is an illustration of the indetermination expressed by those who accept their block with two yellows as an absolution of the responsibility they have to their contribution to this world. We all have double yellows at some places and levels of our being. So this is also an illustration of the ignorance expressed by those who feel shame in seeing that which makes them unique. Hoping nobody will see that their whites are touching their yellows.

A dark portrait of what our society has become.