Two kinds of heat in India

I’ve run into two kinds of heat.

Chennai, and Nellore specialize in the humid variety. Simply go outside and stand still; in less than 5 minutes you are drenched in sweat. The air is so thick, and oppressive, every move I make seems like it is happening in first gear. It is so exhausting, and relentless, that within a few minutes of waking up in the morning, I just want to curl up into a ball, and give up. 

Cudappah, on the other hand, was blazing hot, and gloriously dry. The heat is sharp, and bracing, exactly like a stiff cold winter wind. They said it gets so hot that steam rises up from the ground. I was impressed, momentarily, before I remembered that I saw something like that in Wichita once. You stand outside in sandals, and the feet burn. Is the heat coming up from the ground, through the footwear, or am I being roasted from the top? No matter, I found I liked this weather – it slapped me out of my lethargy; it made want to get up and fight back.

Which of these two is Kansas? I realize now I’ve never really had to deal with the elements in Kansas. Or perhaps I’ve just been escaping the summer months somehow.

I want to create software that is like Tom Binh bags

or  I want to create software like Tom Binh makes bags.

I am impressed by Tom Binh bags.

It makes me happy to carry around a Tom Binh bag.

I am so glad that it has been possible for someone to make a success out of working in just that manner.

Craftsman

Is Tom Binh a craftsman?  Is that what it is?   Do I want to be a software craftsman?  That is possible, isn’t it?  There are people out there that see value in that, don’t they?

I have been doing computer programming of some sort or the other for almost 17 years.   I don’t feel very accomplished.  I feel a distinct lack of skill.  There are so many questions, which I don’t know the answer to.  I am not sure I am an expert at anything.  I know a little bit of a lot of things.  I can be relied on to ask good questions, I think.  I have been known to work hard.  I play well with other people.

At best, I think I have the aptitude to be a craftsman.  I keep thinking that you are a craftsman when the skill that you ply is fairly complete, and second nature.  I am not that, yet.  I have promise.  That is the most I can say for myself.

How can I work at something for 17 years, and still not be very good at it?  Are you ready for this?   It turns out that I don’t have to be.  In software engineering, this strange slice of the working world, I can provide a lot of value, without being very skilled at software engineering.  Despite my shortcomings, if software engineering skills were graded on a curve, I am sure I would fall at a decent spot.  I am good enough for a lot of environments.

Quality

When I see a Tom Binh bag, I think, “That is quality“.

A Tom Binh bag is an inspiration.   No, it is more.  A Tom Binh bag is an aspiration – for me, carrying one is an act of prayer.

But what am I aspiring to?  What does “quality” mean to me?

I am not sure I can explain it.   I could resort to that old saw about pornography – we can’t define it, but we sure know it when we see it.

Tom Binh’s bags show attention to detail.  “God is in the details“; sign me up for that church.

Every little part of the bag has a well thought-out purpose.  Every little part of the bag fits, as intended, into its surroundings, and all the little parts work together, as intended, to serve a larger, well-defined, goal.  Unmistakably, the bags are a rigorous architecture, and design, made flesh.

I want to create software that exhibits the same characteristics.  Is that too much to ask?  The answer of course, is yes.

Why don’t more people carry Tom Binh bags?

Good, but not worth the money

The bags cost more money than some folks want to, or can spend, on luggage.  Regardless of the value the bags provide, the finances just don’t make sense to these folks.

Software engineering shares this issue.   Higher skilled engineers are expensive.   Business, often does not want to spend that money.  The work produced by inexpensive, but low skilled engineers, is deemed good enough.

There is a school of thought that holds that a higher skilled software engineer is worth several low-skilled engineers.  Alas, I don’t know how to make this case, even though I have seen anecdotal evidence to support this idea.

This is not an entirely lost cause, but close.

I am looking, and I am not liking

Some people simply are never going to like Tom Binh bags.   Even when money is no object, they see nothing there to their liking.

Have you ever had to deal with a business stakeholder who wants a completely inexplicable UI?   The customer is always right.  You can only walk away from this.

Craftsmanship dictates low volumes?

I might be wrong about this.  Very little of Tom Binh’s production process seems to be mechanized.  Tom Binh is not in the mass manufacturing business, I think.  He creates quality with meticulous, manual, effort, by a small number of highly skilled folks.   Naturally, this means they can produce only so many bags.

Software does not have this limitation.  Mass manufacturing is trivial.   It is the master copy, however, which is the challenge.  Craftsmanship can indeed be brought to bear in creating and maintaining that one master.  However, we all know that is easier said than done.  Some days I understand why.  Some days I do not.

Colors

Oh man, do I love those colors!

tombinh-colors

I wonder, what color is the code I write?

What color is your code?

How to avoid sending null/empty fields between a RESTful service, and a client?

By it strictest definition, a RESTful service sends and receives ‘resources‘, which when seen from an object-oriented perspective, are largely the objects of your domain model.  An insurance policy, a bill, a payment, a car, a truck, a driver, a patient, a nurse, a clinic, etc.

Often, an instance of the object that you are putting on the wire has null fields.   Here is a patient at a clinic, whose middle name and date of birth, we don’t have.

{
       "patientId": "THX1138",
       "firstName": "John",
       "middleName": null,
       "lastName": Patient,
       "dateOfBirth": null,
       "address": "1,  Illness From,  Bankruptcy, HA-00000, USA"
}

In the mobile world, where we now pay for data usage, and where connections can be slow, it might be useful to minimize the amount of data we throw on the wire.   When the mobile app retrieves the above person, John Patient, I want to drop the fields (middle name, and date of birth) that are null, and send just this.

{
       "patientId": "THX113",
       "firstName": "John",
       "lastName": Patient,
       "address": "1,  Way Ticket To,  Bankruptcy, HA-00000, USA"
}

Further, I want the mobile app to be similarly discriminating when it sends data back to the RESTful service at the server.

In effect, the marshalling mechanism at both ends should be able to create the patient object with just the data that is available, and leave the rest of the fields null.

Javascript works that way natively.   If I was running Javascript at both endpoints, the core language itself would pretty much give us this behavior (Ah, node.js!).

I expect this is possible in other environments too.   In particular, I will need to look into this for the following.

  • RESTful service in Java, talking to 
    • Android App in Java
    • iOS App in Objective-C
    • Javascript MVC

68 dollar question

Is this really worth the trouble?   Will this really produce a lot of efficiency?

Is it even worth pursuing this question?

When data usage costs money, and connections can be slow, and intermittent, why would you want to carry unnecessary baggage?  Even in the best of circumstances, why would you want to?  This sounds like it ought to be a first principle for any mobile app.

But, we do want to watch out for ‘premature optimization’ – getting clever too soon, or even unnecessarily.

Hence, we will need to know how to test for this?  How do you simulate, and test spotty mobile connections?

Related questions

  • What other techniques exist for dealing minimizing the data usage of your mobile app?
  • What other techniques exist for dealing with intermittent, or slow connections?

These just seem a more severe variation of a problem that has been around for longer than the mobile world – how to build a UI around large-grained, stateless APIs.   So there are answers out there …..

Cracked Wheat Upma – First attempt

Starting out

Using the recipe at Mahanandi as a guide.

Nothing different from what we usually do for upma.  Nothing different to account for the cracked wheat – heavier, larger, less processed grains.  4 cups of water though, for a cup of cracked wheat.  Regular Rava does not need this much.

I will fry the cracked wheat a bit ….  Also will add roasted peanuts ….

Here goes nothing.

The proof of the pudding

Just finished the making, and the eating.   Very promising.  Passed the smoke test – I could eat it without any accompaniments.

Ingredients

  • I used the cracked wheat from the Indian store – Swad brand.
  • One medium-sized yellow onion.
  • One Roma tomato
  • All of one green pepper (only it was red)
  • 3/4 inch diameter, and length, ginger, chopped into thin strips
  • a handful of peanuts, which I roasted.
  • Salt, and Olive oil
  • I did not have any of the dhals for seasoning, nor even cumin.  Only had mustard seeds.

Method

I followed the Mahanandi recipe pretty closely.  I did not roast the cracked wheat. And I was not my usual timid self with the salt.

Aftermath

One cup of uncooked cracked wheat, produced an astounding amount of upma – enough for a light breakfast for 4 to 6 people.  How economical!  Perfect for people that have to watch the budget – cheap, voluminous, and healthy.

For one person, I would just use half a cup.  Throw vegetables in, and even this will make enough for a 3 light meals, I think.

What will this taste like cold?  How to best heat it?  Don’t know.

The grains, when cooked, were huge.  Very rice like.  I think this is a viable substitute for rice.  I am thinking we could even serve it at dinner, like they do jeera rice.  How to make jeera cracked wheat?

Next time, I will try adding garlic, and maybe spinach or methi.  This will make it more palau like, and perhaps more appropriate for lunch, or dinner.