tag:blogger.com,1999:blog-170144962024-03-14T10:29:35.065+05:30Could we be looking at it all wrong?Someone once told me that Logic is conspicuous by its absence. Here's my take on stuff that people seem to approach in weird ways. Share a moment with me as I ponder the 'other' side.Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.comBlogger28125tag:blogger.com,1999:blog-17014496.post-73324769038545573402011-02-18T13:13:00.003+05:302011-02-18T13:19:35.887+05:30How touching!<blockquote>To Standard Chartered,<br /><br />Continuing on <a href="http://thinkaround.blogspot.com/2010/12/customer-care.html">my previous ran</a>t, while I appreciate the very heartfelt birthday wishes via SMS followed by a mail notification of the same, I think I'll settle for better service.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-hJDz5orORt0/TV4kNQoVbII/AAAAAAAAGnQ/sMVnyc-8qZQ/s1600/stan-bday.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 505px; height: 319px;" src="http://3.bp.blogspot.com/-hJDz5orORt0/TV4kNQoVbII/AAAAAAAAGnQ/sMVnyc-8qZQ/s400/stan-bday.JPG" alt="" id="BLOGGER_PHOTO_ID_5574933198952295554" border="0" /></a><br /><br />Sincerely,<br />A disgruntled customer<br /></blockquote>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-71421994520751657192011-01-20T15:07:00.008+05:302011-01-20T15:46:09.048+05:30Fishworks @ JoyentToday morning was an interesting detour from my recent routine of sleeping in late. I stayed up most of the night to catch <a href="http://www.ustream.tv/channel/cloud-analytics">Joyent's Cloud Analytics</a> talk titled <a href="http://www.ustream.tv/recorded/12123446">Solving Big Problems with Real-time Visibility into Cloud Performance</a>. Of course, I was interrupted by <a href="http://therealnews.com/t2/about-us/events">The Real News' panel discussion on WikiLeaks</a> after which I couldn't watch either stream to its conclusion, but it was a fun morning! :)<br /><br />Back to Joyent- now that almost the entire DTrace team from <a href="http://dtrace.org/blogs/bmc/2008/11/10/fishworks-now-it-can-be-told/">Sun's Fishworks group</a> has moved to Joyent, it was inevitable that they would retarget the real-time analysis technology they were building for Sun's storage line to <a href="http://www.joyentcloud.com/">Joyent's cloud offerings</a>.<br /><br />While the talk went on to describe the various statistics provided and how we could utilize them, most of the first half was a bunch of fun anecdotes from the Fishworks effort. It was nice to have Bryan himself tell us about the origins and need for DTrace and (more importantly) the serendipity that lead to Brendan's famous <a href="http://www.youtube.com/watch?v=tDacjrSCeq4">Shouting in the Data Center</a> video!<br /><br /><a href="http://dtrace.org/blogs/bmc/">Bryan</a> <a href="http://www.twitter.com/bcantrill">Cantrill</a> and <a href="http://dtrace.org/blogs/brendan/">Brenden</a> <a href="http://www.twitter.com/brendangregg">Gregg</a> have been busy modifying the Fishworks DTrace consumers to monitor SmartNodes and <a href="https://my.joyent.com/smartmachines">SmartMachines</a> instead of disks in JBODs. It seems Joyent will soon be making these monitoring services available to all cloud users to allow fine-grained analysis of their production deployments in real-time.<br /><br />The statistics seem to be presented primarily as a heat map of no. of ops at a given latency over time. The tool also provided for drilling down into specific programs/calls to refine the trends. The two of them also pointed out a number of commonly found patterns in such analysis and how they interpret them. It was a lot of fun to see these two ex-Sun h@k0rs bounce off each other as they presented their latest offering.<br /><br />Here's wishing Joyent luck on their new venture and many more!Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com1tag:blogger.com,1999:blog-17014496.post-18896950807367258342010-12-13T05:16:00.008+05:302010-12-15T16:56:29.261+05:30... beyond Programming (and Development)Quite some time ago, I'd written about the <a href="http://thinkaround.blogspot.com/2006/01/coding-vs-programming.html">difference between Coding and Programming</a>. That idea has been long over due for update, so here goes.<br /><blockquote>Coding is about how you should write,<br />Programming is about how you shouldn't;<br />Development is about bringing it all together,<br />Solving is about putting it out there!</blockquote><blockquote>Coding as about the Language and Syntax,<br />Programming is about the Paradigm, the Thought Process;<br />Development is about Dependencies and Integration,<br />Solving is about Understanding and Reacting.<br /></blockquote><blockquote>Coding is represented by the 'Writing' metaphor,<br />Programming is epitomized by the 'Construction' metaphor;<br />Development is idealized by the 'Evolution' metaphor,<br />Solving aims to bring 'Satisfaction' all over!<br /></blockquote><blockquote>Coding defines the Solution,<br />Programming defines the Problem too;<br />Development defines who will solve it,<br />Solving <span style="font-style: italic;">actually</span> does it!</blockquote><blockquote>Coding creates the Implementation,<br />Programming creates the Interface;<br />Development creates the Framework,<br />Solving creates the Application.<br /></blockquote><blockquote>Coding is about "Getting it in place",<br />Programming is about "Getting to know it!";<br />Developing is about "Getting it across",<br />Solving is about "Getting it done!"<br /></blockquote><blockquote>Coding gets you Paid,<br />Programming makes you Employed;<br />Development makes you Engaged,<br />Solving makes you Satisfied.</blockquote><blockquote>Coding is what we HAVE to do,<br />Programming is what we SHOULD be doing;<br />Development is what we LIKE to do,<br />Solving is what we MUST do!</blockquote>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com2tag:blogger.com,1999:blog-17014496.post-24077387300689529902010-12-13T05:10:00.009+05:302011-02-18T13:20:30.438+05:30Customer CareOtherwise entitled...<br /><blockquote>How big boutique shops get away with crappy products that their primary customers don't use anyway!</blockquote>Let's just get it out of the way, Standard Chartered Bank sucks! Leave aside the fact that they have a next to useless netbanking experience that starts off by making you set a password you'll probably NEVER remember because they have the most non-standard password requirements. Then, if you forget your password, you're only respite is to have a temporary password SMS'd to you once you've given them your ATM/Debit card number and... (wait for it) PIN! But it's not over yet, 'cause the temporary password just let's you create a new login. Yup, you read that right, not reset your password, but create an entirely NEW login; new username and password!<br /><br /><a href="http://1.bp.blogspot.com/_m4eJk4g2xv0/TVWKPO21MQI/AAAAAAAAGN8/rDuToPmCh2k/s1600/stanchart.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 612px; height: 325px;" src="http://1.bp.blogspot.com/_m4eJk4g2xv0/TVWKPO21MQI/AAAAAAAAGN8/rDuToPmCh2k/s400/stanchart.JPG" alt="" id="BLOGGER_PHOTO_ID_5572512108231602434" border="0" /></a><a href="http://4.bp.blogspot.com/_m4eJk4g2xv0/TVWKBsXedzI/AAAAAAAAGN0/OvoLZNWBq1E/s1600/stanchart.JPG"><br /></a>Oh, and did I mention that once you do manage to get in, you can only see transactions upto 3 months ago. Yes, your transactions... transactions you effected through your account beyond 90 days are only available to you on requesting a statement from a branch; and even they're not authorized to pull statements beyond 6 months! (insert face-slap here)<br /><br />But that's just the online experience. On the ground it gets even better. Did you know that <a href="http://bit.ly/efHt57">StanChart has less than 6 ATMs in all of Pune</a>? To top it off, almost all are in reasonably remote areas; and the cherry is that you can never find parking spaces near any of them! Even though 3 of them are in branch offices. I'm not kidding, the last time I went to the ATM in Kalyani Nagar, I was instructed by security to park in front of the <span style="font-weight: bold;">adjacent</span> building! Following which I had to sign in at security and (surprise, surprise) walk up the drive-in on ramp that led to their office, where lay an ATM so that I could change the PIN on my ATM card. Thank you StanChart for turning a 5 minute activity into a 15 minute ordeal, we feel so blessed to be banking with you.<br /><br />But here's where it gets really interesting. Because I ran up quite a bit of a balance in my account, they bumped me up to Preferred Customer. What that basically meant was that they assigned me a nanny to nag me every other day about 'investing' all that balance. And when I calmly informed her that I was looking at investing through other avenues, she actually got mad at me!<br /><br />So, here's the question, how is it possible that big banks (at least in India) can get away with really bad basic services? My guess is that because we're not really their target group. We're just the sideshow they run to absorb spare capacity. The people they're really looking for a large corporate accounts and big ticket investors who want babysitters at their beckon call to run the bank errands for them. Let's face it, that's where they're probably making most of their money.<br /><br />But then, that's just my opinion... who cares? I don't! I get much better service from my IDBI account; even if their netbanking site has horrible UX, at least you can do stuff on it!Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com2tag:blogger.com,1999:blog-17014496.post-30067637868211976782010-12-13T03:44:00.033+05:302010-12-31T00:47:28.632+05:30Gettin' Groovy at the IndicThreads Conference On JavaThis weekend I presented at the <a href="http://j10.indicthreads.com/">5th IndicThreads Conference On Java</a> here in Pune. This would be the second time I attended this conference and the first time I presented at it. I was pleasantly surprised that it turned out to be a whole lot more informative and entertaining than I expected.<br /><br />Harshad Oak kicked off with the keynote on recent changes in the Java ecosystem. It touched on topics such as Oracle's purchase of Sun, new language features, other languages on the JVM and potential avenues for the growth of Java (viz, cloud computing and mobile development). He concluded with the interesting viewpoint that Java devs would do well to wait, watch and ride the change.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh4.ggpht.com/_EU9rTBThNVU/TQG0RocYjzI/AAAAAAAABf0/1X7Xb2uQ2ek/s512/IMG_2015.JPG"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 121px; height: 159px;" src="http://lh4.ggpht.com/_EU9rTBThNVU/TQG0RocYjzI/AAAAAAAABf0/1X7Xb2uQ2ek/s512/IMG_2015.JPG" alt="" border="0" /></a>Having landed the first slot of the very first day of the conference, I was pretty nervous about setting the pace right for the event with my <span style="font-weight: bold;">DSLs in Groovy</span> talk. I think I did <a href="http://twitter.com/rohitghatol/status/13101322060435456">pretty</a> <a href="http://twitter.com/vinodkashyap/status/13106328423628800">well</a> , especially considering I hadn't gotten any time to practice the deck... at all!<br /><br />The presentation spun up quite a few interesting discussions such as:<span style="text-decoration: underline;"><br /></span><ul><li><a href="https://twitter.com/rohitghatol/status/13103884096503808">popular application of DSLs for testing</a></li><li>comparisons between <a href="http://twitter.com/rohitghatol/status/13094311302270976">Grails and Spring</a></li><li><a href="http://twitter.com/rohitghatol/status/13100599067287552">challenges in the adoption</a> of newer languages in the enterprise.</li></ul>A bunch of people asked me if there were any real world examples of Grails apps; I think the <a href="http://grails.org/Testimonials">Testimonials page</a> on grails.org should answer that sufficiently.<br /><br /><div align="center"><object id="__sse6090790" height="355" width="425"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dslsingroovy-101209091043-phpapp01&stripped_title=ds-ls-in-groovy&userName=indicthreads"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed name="__sse6090790" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dslsingroovy-101209091043-phpapp01&stripped_title=ds-ls-in-groovy&userName=indicthreads" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"></embed></object></div><br />It was also nice to be followed by another presentation relating to Groovy. Aniket Shaligram of Talentica demonstrated the benefits and caveats of the <a href="http://grails.org/plugin/flex-scaffold">flex-scaffold Grails plugin</a> by quickly building an app from scratch within a matter of minutes. And I must say, I was very impressed by the Flex view scaffolding, much as I always have been by the HTML scaffolding in Grails. The one concern that I did raise was around this technique landing the team with two MVC apps that need to keep their models in sync; while Aniket assured me that they faced no major hurdles there, experience forces me to maintain a healthy dose of skepticism.<br /><br />Another talk that was met with particular enthusiasm was <a href="http://twitter.com/shekhargulati">Shekhar Gulati</a>'s demonstration of <a href="http://www.springsource.org/roo">Spring Roo</a>. Shekhar also live-coded a Spring MVC app with various bells and whistles (persistence, relationships, security, deployment to GAE, et al). The productivity accelerating qualities of Roo were intriguing, but I've always been a little reserved about it and about Spring MVC in general. I'll leave that argument to a whole other post. :)<br /><br />The Unconference hour in the middle of day 2 was another highlight of the event. The group discussed various interesting issues such as:<br /><ul><li>technology conferences should present more code and less kool-aid</li><li>potential Spring Roo addons</li><li>application profiling tools (JProfiler, VisualVM, IBM Health Center) and their shortcomings<br /></li><li>with Spring gaining traction, would enterprises look to Java EE6?</li><li>should enterprises look at tools/frameworks beyond Spring MVC and Java EE?<br /></li></ul>In contrast to the rest of the event, the two presentations from event sponsor IBM were mostly J9 pitches- thoroughly passable.<br /><br />The Sun (ok, ok Oracle) presentation on new features in Java EE6 was a welcome refresher. Considering I've been out of touch with that community for quite some time, it served to reintroduce me to a lot of tech as well as bring me up to speed with what's hot there. CDI's cute use of annotation based qualified DI caught my eye in particular.<br /><br />The networking and open spaces weren't bad either. I got to catch up with a few old <a href="http://pages.citebite.com/e2n9l9v3anyc">acquaintances</a>, make some new introductions, add a few <a href="http://twitter.com/rohitghatol">twitter followers</a> and earn some cool <a href="http://hashable.com/dexterous">hashcred</a>! In hindsight, I actually regretted not getting business cards printed, but the second slide in my presentation pretty much made up for that.<br /><br />The ThoughtWorks brand carried me well throughout the event even though I did absolutely nothing to indicate I was a ThoughtWorker (big shout out to good ole' TW!) A lot of people wanted to know how ThoughtWorks operates, why I left and what I'm doing now, why others have left and what they end up doing after ThoughtWorks- a somewhat muted (from my end) set of discussions, but very interesting all the same. People were usually pretty surprised when I told that that I actually quit ThoughtWorks <span style="font-style: italic;">to</span> figure out what I want to do next and that I was currently <span style="font-style: italic;">voluntarily unemployed</span>! :)<br /><br />Well, since this is a fairly contrarian blog, here's what I wish would have gone better:<br /><ul><li>better gender distribution; we ended up with just 1 girl in the audience on day 2 :(</li><li>the turnout was pretty low at under 50; is Java as a technology really <span style="font-style: italic;">over</span> the bump?</li><li>demo'ing CRUD apps and then engaging in RDBMS-bashing in a NoSQL plug<br /></li><li>Enterprise still looking at dynamic languages with skepticism</li><li>Harshad calling Scala a scripting language :P<br /></li></ul>All in all, it was a weekend well spent. Kudos to Harshad, Sangeeta and the rest of the Rightrix team for another well organized event in the city. And thanks for keeping it eco-friendly!<br /><br />Oh, and before I forget IndicThread Java celebrated it's 5th consecutive year this time, so we got to have cake!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh3.ggpht.com/_EU9rTBThNVU/TQWucn43Y9I/AAAAAAAABlE/UXBw6m-vzTQ/s512/IMG_2073.JPG"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 383px; height: 345px;" src="http://lh3.ggpht.com/_EU9rTBThNVU/TQWucn43Y9I/AAAAAAAABlE/UXBw6m-vzTQ/s512/IMG_2073.JPG" alt="" border="0" /></a>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-33628949011581333922008-11-14T02:01:00.002+05:302008-11-14T02:04:52.917+05:30Fragments of a wanderer- Part IIEver so tired you couldn't stay awake, but then go to bed only to end up staring at the ceiling all night long? Have I just screwed up my biological clock... or am I really losing it?!?<br /><br />Ever wonder why we hear birds chirping at 2:30 n the morning? Have we messed up their biological clocks with all the artificial lighting?!?Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com3tag:blogger.com,1999:blog-17014496.post-19332409552246829082008-09-23T02:13:00.007+05:302009-01-28T22:56:39.819+05:30Taking the stack for grantedI recently started off on a .NET engagement (my first actually) and I'm already p!ss*d 0ff !!!<br /><br />It amazed me no end how much of the software on my computer .NET 3.0 and ASP.NET 2.0 simply assumed or installed without even checking too see if I really wanted to be tied in to it.<br /><br />For instance, ASP.NET automatically assumed that all my apps would be floated on IIS 5.0. Interestingly enough, Visual Studio.NET 2008 also made the same assumption and required me to have a well configured instance of IIS up and running every time I OPEN my project! So now, I just leave my IIS instance up and running all the time; in fact, just like almost every other ASP dev would have to, I have the IIS service set up to start automatically on boot. :(<br /><br />And when it came to security, every one just assumed that we were using Windows Domain User Authentication. ASP.NET even has its own sweet little group of users that run the sites and impersonate as users on them. You just grant them access and <span style="font-style: italic;">shazam!</span> you're good to go.<br />Except now you're stuck with that group and any fine grained access control is going to entail some serious Active Directory management... that I'm not at all keen on!<br /><br />What all this points at is how Microsoft seems to want to lock us into their stack. Given that there aren't really any other viable platforms to host .NET apps, we don't really have much of a choice in the components; but even when the options do come in, these assumed dependencies will raise the barrier to entry for those options to unsurmountable levels. So we're going to be stuck with M$, for ever!<br /><br />I guess some people are just never going to <a href="http://www.joelonsoftware.com/articles/fog0000000052.html">get it</a>.Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com2tag:blogger.com,1999:blog-17014496.post-18303710602624212342008-07-28T11:46:00.026+05:302008-10-11T18:49:54.284+05:30Putting REST to rest... or Why Implied Interfaces make for poor Implementations.<br /><blockquote><a href="http://en.wikipedia.org/w/index.php?title=Representational_State_Transfer">Representational state transfer</a> (REST) is a style of software architecture for distributed hypermedia systems such as the World Wide Web.</blockquote><div style="text-align: right;">- from <a href="http://wikipedia.org/">Wikipedia</a><br /></div><br />The term REST along with the <a href="http://en.wikipedia.org/w/index.php?title=Representational_State_Transfer#Principles">principles it implies</a> (or 'should' imply!) were put down in a <a href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm">doctoral disseration</a> by <a href="http://en.wikipedia.org/wiki/Roy_Fielding">Roy Fielding</a>.<br /><br />Actually IMHO, REST is just SOA and WS wrapped in a layer of OOP with just a generic Resource entity at the application layer. Even then, you kinda get to roll your own with everything- serialization, interaction, responses, validation...<br /><br />Well... OK, I may have over-genericised that. But, the funny thing is, that's the funny thing about REST! It is very generic.<br /><br />Even the primary 'Resource' definition is vague; the interface is almost completely implied-<br /><ul><li>POSTing to a URL creates a new resource (POSTing what?!)</li><li>I GET a resource referenceable at a given URL provided an id, otherwise... I get all resources at that URL (?); unless, of course, it is a singleton resource, in which case I get the singleton instance. :S</li><li>PUTting causes edits, although POSTs may behave in the same manner</li><li>HEADs can be used to detect the presence of a resource, while DELETEs... delete!<sup>[<a href="http://thinkaround.blogspot.com/2008/07/putting-rest-to-rest.html#note-1">1</a>]</sup></li><li>And I'm not even sure if OPTION and TRACE are relevant</li></ul>And that's just <span style="font-style: italic;">REST over HTTP</span>! <span style="font-weight: bold; font-style: italic;">Wait</span>!! Is there any <span style="font-style: italic;">other</span> REST?!? Well actually REST is a meta-architecture, it's protocol-agnostic. It's supposed to work for all hypermedia- so we should be able to do it over HTTP, FTP, SMTP, SNMP(?)...<br /><br />What is <span style="font-weight: bold;">hypermedia</span>? Media hopped up on too much sugar?!? Well, the Oxford Dictionary defines it as<br /><blockquote>an extension to hypertext providing multimedia facilities, such as sound and video.</blockquote>I don't know about you, but my brains just about ready to explode.<br /><br />But wait, it gets better. Some people liked the REST over HTTP idea so much that they forked their own flavour. So Fielding has Vanilla, while (these guys) have Extra Fudge! (all puns intended) It's called Web-Friendly services- services that behave reeeeally well with HTTP. Basically services that behave like web pages. Whoa! I'm getting asmx flashbacks!!! So I'm gonna shut up about that now.<br /><br />Then there's the <span style="font-weight: bold;">Hypermedia As The Engine Of State Transfer</span> <a href="http://www.pacificspirit.com/2006/03/31/hypermedia_as_the_engine_of_state_transfer">people</a><sup>[<a href="http://thinkaround.blogspot.com/2008/07/putting-rest-to-rest.html#note-2">2</a>]</sup>. These guys <span style="font-style: italic;">really </span>love the URL. To them the body is whatever it's gonna be! Now it's an XML document, now it could be a HTML FORM, then it could be a JSON object or, maybe, a <a href="http://en.wikipedia.org/wiki/HCard">hCard</a>. I'm sorry, but I can't comprehend this comically 'uniform' interface where your interaction modes are implied, reference end-points are overloaded and results are undefined, or implied, or... did you say they're documented somewhere?<br /><br />The question I arrive at, then, is- <span style="font-weight: bold;">why do we want to be RESTful or Web-Friendly?</span> The loudest argument I hear is that the infrastructure has has already been laid; web servers and proxies with caching, DNS servers, IP routers with path optimization algorithms, the whole kahuna! Think of all the automatic performance gains arising from all that caching! All the more reason to stick more stuff into the URL and fill up those HTTP parameters you never thought to use until now! You just ride the wave!<br /><br />Hmm... it would seem that REST intends to counter the end-to-end principle by allowing for intelligence (optimizations) at the nodes, but that's a little too debatable; so <sidestep />.<br /><br />But stepping back a bit, lem'me get this right. We're trying to fit an <span style="font-weight: bold;">application protocol</span> directly over a <span style="font-weight: bold;">document delivery infrastructure</span>? <a href="http://pages.citebite.com/f6f9x0b6mrmy">You've gotta be kiddin' me!</a> I'm not saying this can't be done, just not without a cost- <a href="http://en.wikipedia.org/wiki/Tanstaafl">TANSTAFL</a>. Just think about all the time you're going to spend on deciding and negotiating a wire format, and corresponding responses. And that's just one wire format. REST talks of 'representations', a resource could have more than one wire format! I don't know about you, but I've had trouble getting people to understand one wire format right, and now you're telling me they're gonna want to send 'resources' in XML, JSON, YAML, HTML, delimited strings, multi-fixed and EBCIDIC? Over my dead body!!!<br /><br />Plus, the wireformats are completely arbitrary. Every resource implementer gets to pich their own. So you end up having to 'understand' the specific wire format of every resource you interact with. And by 'understand' they mean RTFM. So much for convention over configuration. Just too much Knowledge in head vs Knowledge in world.<br /><br />Actually, the wire format is where it gets really funny. XML just had the attribute-element dilemma, REST elevates it to the payload-parameter dilemma! Most Web-Friendly service makers get away without a body to the requests, they just stick a bunch of 'required' HTTP parameters on to the resource URL. So much for 'representation' of 'state', we're back to representation of output. Why does this remind me so much of WS?<br /><br />I think REST could find application in internal applications where the domain model is well defined, where resources and their interactions are well defined. But I'd still be skeptical because I tried that once at work and we kinda crashed and burned. The biggest brick wall we hit was latency. Given the 'resource' unicycle that REST provided and the specific verbs HTTP provided made our resource interactions multi-stage, especially since REST is stateless. When updating a resource, I wanted to <span style="font-weight: bold;">GET</span> a representation of the current state of the resource, modify it and <span style="font-weight: bold;">PUT</span> the modified state representation back into its place. But others on the team felt that adhering to those principles added unnecessary communication overheads and chose to add interaction verbs, which was conveniently <a href="http://pages.citebite.com/v6i9h1r3cbrn">provided for by ActiveResource</a>. Oh, and that's just when we were not arguing about the wore formats.<br /><br />Honestly, if you ask me, the only reason REST wont go down the tube like <a href="http://en.wikipedia.org/wiki/List_of_Microsoft_codenames#.NET">Hailstorm</a> is because it's community driven, not governed and controlled by a megalomaniac. Everyone gets to roll their own and even fork while still calling it RESTful. But even if it does last, I think it's only going to be a buzzword that we'll all have a good laugh about in a few years-<br /><br />Raj: Hey Saager, we're building this new service for so-and-so and it's accessible via, get this... RESTful resources! :D<br />Me : Wait, are you sure they're not Web-UNfriendly?!? =D<br /><br /><a style="font-weight: bold;" name="note-1">1</a> the DELETE's about the most logical thing I got so far! :P<br /><a style="font-weight: bold;" name="note-2">2</a> sorry Dave, your post is the only one I could directly reference to HATEOSSaager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com4tag:blogger.com,1999:blog-17014496.post-10820585261817956662007-11-27T15:12:00.000+05:302007-12-24T14:01:09.933+05:30Here's a thought... ActiveRecord in PL/SQL<div>With all the talk about <a href="http://blogs.ittoolbox.com/bi/confessions/archives/chet-justices-manifesto-of-sorts-18192">putting logic in the DB</a> and hiding SQL behind stored procedures, wouldn't it be really intuitive if <span style="font-weight: bold;">Oracle simply provided a default <a href="http://en.wikipedia.org/wiki/ActiveRecord">ActiveRecord</a> implementation for every table</span> in the DB? So, instead of returning a vanilla record type, <span style="font-weight: bold;">FOO%ROWTYPE</span> would return an <span style="font-style: italic;">Oracle-generated Object type</span> that had accessors/mutators (getters/setters) for all the columns in table <span style="font-weight: bold;">FOO</span> and methods to <span style="font-style: italic;">UpdateRecord</span> and <span style="font-style: italic;">DeleteRecord</span> along with a static method to <span style="font-style: italic;">AddRecord</span>. If you want to avoid any collisions with existing syntax, we could simply have a new attribute- something like <span style="font-weight: bold;">FOO%OBJECTTYPE</span>.</div><div></div><br /><div>My experience shows that most reluctance to encapsulate SQL behind PL/SQL programs stems from the fact that people actually have to write (and subsequently maintain!) that wrapper code. People just <span style="font-style: italic;">don't want to do</span> the donkey work (write the same boilerplate code over-and-over agian for each Table). And personally, I don't think a code generator is very good in this case either. The generated code simply breaks down under maintenance (add/modify/drop column from table).<br /><br />But, what if all that was done by the database?– <span style="font-weight: bold;">CREATE</span> the Object Type when a Table is <span style="font-weight: bold;">CREATE</span>d and propagate changes whenever the table is <span style="font-weight: bold;">ALTER</span>ed; plus maintain the accessors (which could very well enforce the integrity constraints declared on the Table)!</div><br />It'd be a great way for the Oracle community to show some benevolence towards (lowly! :P) application developers who can't write PL/SQL even if their life depended on it, let alone SQL!<br /><br />Also, if you left the <Table>%OBJECTTYPE as NOT FINAL, those who can write PL/SQL could extend it to add even more (business) logic in the database! Whopee and horaay!!!Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com2tag:blogger.com,1999:blog-17014496.post-61887808274714349082007-10-12T11:59:00.000+05:302007-12-29T01:30:37.117+05:30Easy ain't Good!Just last week, I managed to finally put down <a href="http://en.wikipedia.org/wiki/Donald_Norman">Donald A Norman</a>'s <a href="http://www.amazon.com/Design-Everyday-Things-Donald-Norman/dp/0465067107/ref=pd_bbs_sr_1/105-2080165-9385229?ie=UTF8&s=books&qid=1192184982&sr=8-1">Design of Everyday Things</a> (DOET)- a fascinating read about the little frustrations of everyday life inflicted on us by impatient capitalists and disconnected designers (or any combination thereof!). However, as I was reading the last chapter, the case study entitled <strong>How Writing Method affects Style</strong> got me thinking <about>about how we tend to ignore the flip side to advances in technology in favour of immediate benefits.<br /><br />A little background- Donald Norman's case study describes an accelerated timeline of writing techniques from the quill-and-ink up to voice-recognition. He observes that with advances in technology making it easy to...<br /></about><ul><li>write almost as fast as you think; and<br /></li><li>correct mistakes</li></ul>... our writing has become more colloquial and unstructured. <span style="font-size:85%;"><em>[However, he does go on to say that newer tools such as voice-based word processors help maintain structure; but the colloquial nature still remains]</em></span><br /><br />To study a more concrete subset, parallel observations can be drawn from the advances in written <span style="font-style: italic;">communication</span>, as opposed to just writing techniques.<br /><br />We have come a long way from traditional letter writing to recent voice-based solutions. The pen-and-paper letters were well structured. They would be drafted and then... <em>re</em>-drafted! Sentences would be rephrased and reworded to present the most content using the least amount of text. A lot of thought went into such communication, because you knew this wasn't a dialogue and you wouldn't have a chance to explain any misunderstandings, atleast not very soon.<br /><br />Then, somewhere along the way, we invented the Memo. In our effort to be short & pithy we (mostly) ended up vague & ambiguous. Soon, computers brought us email, letters in binary; and it was good for some time. That is, till IRC invaded the web. Slowly email turned into a sort of <em>e</em>-Memo and chat took communication by storm. Now people consider it normal to be bombarded with a string of '<em>electronic communique</em>'s. The fact that the line between chat and email is growing thin is proven by people who choose to carry on lengthy one-line-conversation chains over email.<br /><br /><br />To consider similar progression in an alternative technology, how about <u>publishing and retrieval of online content</u>? Online search and indexing services such as <a href="http://www.yahoo.com/">Yahoo</a> and <a href="http://www.google.com/">Google</a> proved to be a boon. They helped us sift through the glut of information dumped onto the web as a result of years of indiscriminate publishing by people who finally found a medium to vent their 'creative' outbursts! Somehow, I always thought that search engines were invented out of the necessity to find signal in existing noise. However, they ended up becoming invitations to generate <span style="font-weight: bold; font-style: italic;">EVEN MORE </span>noise. Armed with the knowledge that some web crawler will eventually index their site/blog/micro-app, the Web 2.0 community got busy building more-and-more 'information' into the web in the form of opinions, reviews, cross-blogs and flame wars!<br /><br />As if that wasn't enough, Google gave us GMail! A direct invitation to actually <strong><em>CREATE</em></strong> a greater waste of resources. Just think of the volume of useless email still sitting around in your GMail account, just because Google gives you 2 GB of storage space. In this day and age of environmental preservation, I shudder as the sheer waste of resources- mail storage space, connected storage media, CPU cycles, electrical power, heat emanated by these devices, energy wasted on resulting cooling... and Google itself isn't far behind in the waste with it's ultimate redundancy matrix!<br /><br />The following line pretty much sums it up.<br /><blockquote>Ease can also lead to callousness.<br /><div style="text-align: right;"><a href="http://www.blogger.com/profile/14714797381673153973">Harmanjit Singh</a> @ <a href="http://harmanjit.blogspot.com/2007/10/facets-of-depersonalization.html">Remains of the day</a></div></blockquote><p>Seems like every day we're making it easier to waste some more. </p><p><strong>Update 24-October-2007:</strong> Great! <a href="http://www.xobni.com/blog/2007/10/23/heaven-of-the-email-world/">Another invitation</a> to create <strong>greater</strong> waste!</p>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com4tag:blogger.com,1999:blog-17014496.post-55258677136685901592007-09-12T16:17:00.000+05:302007-10-23T13:36:56.784+05:30The Purpose of SoftwareI've been meaning to write about this for quite some time and now I've finally found a forum.<br /><br />This post on <a href="http://blogs.ittoolbox.com/bi/confessions">Dratz's Confessions of an IT Hitman</a> isn't the first place where I've heard <a href="http://pages.citebite.com/g2y1w0l7y4abr">this</a> said. Although I wouldn't go so far as to say that Chet is completely biased towards data-centric-thought-process and Databases, his letter to the CIO was a little one-sided; probably because he was trying to drive his point home. I am more inclined to lean towards <a href="http://www.ittoolbox.com/profiles//RDWilson2">Ralph Wilson</a> when he reiterates the old addage that <a href="http://blogs.ittoolbox.com/bi/confessions/archives/chet-justices-manifesto-of-sorts-18192#1562566">if a hammer is your only tool, every problem is a nail</a>.<br /><p>I'll admit- Data is the most important <em>artifact that <strong>business</strong> generates</em>. But, IMHO, the <em>most important output of the <strong>software development activity</strong></em> is, by far, <strong>the simulation of a business process</strong>. <p>This follows the analogy that every program is a <a href="http://dictionary.reference.com/browse/process">process</a>- <blockquote><p>a systematic series of actions directed to some end.</p></blockquote><p>A program/system 'does' things; most evidently <a href="http://thinkaround.blogspot.com/2006/01/who-da-man.html">facilitates, automates or accelerates</a> a given business function. Well, atleast good <em>software</em>. <p>Data generated by a system changes as much as the business processes that generate it; in fact data goes out of date faster. Today's data will be archived and stored for 'future reference', but will rarely be in 'active duty' as long as the processes that manipulate it. For all Thomases doubting my experience in this matter, I work in a team that maintains a Mortgage Origination System used in North America by a MNC bank. We recently wrote a job that archives data pertaining to about 8,000 mortgages every month; and they just archive unprocessed loans, add closed loans to that and the monthly figure would sky rocket.</p><p>Anyway, getting back to the point. I believe there is some merit to Chet's point of putting logic in the database, but...</p><blockquote><p>you should put as much of the logic in the database as humanly possible</p></blockquote><p>is a little extreme! I mean I don't want to run an INSERT and have an <strong>ORA-06502: PL/SQL: numeric or value error</strong> thrown to know that I entered one-too-many-zeros or entered a date in the wrong format! Trust me, there's dudes who stretch the idea this far.</p><p><strong><u>Sidenote</u>:</strong> Several situations warrant the temporary storage of data that doesn't meet all the integrity constraints. Well designed UI's would allow users to set arbitrary savepoints- even when ALL required data has not been entered. Think of all the times you were filling up a 53 field web form; and realized at field 24; that you need to run down to the drawing room to pull out the referral code for a vendor discount printed on a coupon that you got in the mail 3 months ago; but you don't want the form to timeout while you go fish the coupon out of the bowl in which you keep all of your discount coupons. So, you're sitting there gritting you teeth, seething away, wondering why the fr*cking developer didn't think of putting a SAVE button there! And when you do put one in, if the application is tied in to the database- you have data in inconsistent state; or you end up designing a schema that doesn't enforce all the integrity constraints declaratively. That's where a <a href="http://martinfowler.com/eaaCatalog/domainModel.html">Domain model</a> (sprinkled with a healthy dose of the <a href="http://www.refactoring.com/catalog/introduceNullObject.html">NullObject pattern</a>) comes into picture.</p><p>Good design is about tradeoffs. I'm not promoting '<a href="http://www.rubyonrails.com/">Rail</a>'ed webbers who think <a href="http://martinfowler.com/eaaCatalog/activeRecord.html">ActiveRecord</a> is a Silver Bullet, but I'm also not saying that the ActiveRecord Pattern doesn't have any merit. IMHO, it can be implemented as well in PL/SQL as it can be in Ruby/Java/C#. The point is- where does it make the most sense <strong>given the constraints (environment) you are working with?</strong></p><p>The notion that data is the <strong>MOST</strong> important thing in an application leads to the development of webapps that babysit single dimensional databases. <p>That's just saaad! <a href="http://pages.citebite.com/q2d1l3j1e2gmy">Where is the CREATIVITY?</a></p><p><strong><u>Update (04-Oct-2004)</u>:</strong> This just hit me, given that replacing an application (medium-to-large-scale purpose built, not some COTS) almost always involves <strong>data migration</strong> effort, <em>representation</em> of data (database) is as transient as the process (application)!</p>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com1tag:blogger.com,1999:blog-17014496.post-70049015194254060172007-09-03T12:08:00.000+05:302007-10-16T12:29:17.826+05:30Fragments of a wandererIt's been too long since my last post. In my meanderings through the lonely forest, I stumbled upon a familiar voice, <a href="http://petrichor.rediffiland.com//scripts/xanadu_diary_view.php?postId=1180698490">words from an old friend</a>.<br /><br />My mind wanders past the signs in my subconscious–<br /><br /><blockquote>The world is an alien place; ideas I don't need, much less want, are forced onto me; my dreams come not to me anymore; tranquil sleep is but a distant memory.</blockquote><br />Everytime I think about that, I wonder if this is the world we leave for the generations to come; will this be our legacy? Have we failed our unborn children, just as we accuse those before us?<br /><br /><blockquote>Or... could <em>I</em> just be looking at it all wrong?</blockquote><br />I think it's going to be a while before I can write straight again.Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-44580382473413721142006-10-04T16:53:00.000+05:302007-10-29T16:21:58.456+05:30Do Developers make good Managers?Well, turns out someone took note of my <a href="http://thinkaround.blogspot.com/2006/09/defining-leadership.html">last post</a>. (They did, however, refrain from posting a comment : ) One of my colleagues hinted that my definition of Leadership was... incomplete.<br /><br />Here's the deal, I wanted to illuminate some very specific issues arising out of the concept of <strong>Leadership</strong> (with capital <em>el</em>) in <strong>Software Development Teams</strong>. As TDM & TRL indicated– in small groups of skilled professionals, it's hard to put one person in complete control without creating sociological issues. Added to all the other <a href="http://joelonsoftware.com/uibook/chapters/fog0000000057.html">little frustrations</a> of corporate life, these can very easily take you over the edge. Especially these, as team sociology tends to get <strong>VERY</strong> personal.<br /><br />I'm guessing that adding the Leader role to teams is a direct consequence of Management's excessive need to delegate out the Manager role, aka <a href="http://beta.blogger.com/Turning%20Developers%20into%20Baby-sitters">Turning Developers into Baby-sitters</a>. Management just seems to want a '<strong>guy on the inside</strong>'! But, how wise is it to pick an insider (someone who's already inside the team) and switch roles?<br /><br />What I'm really trying to get at is that (IMHO) Developers (REAL, HARDCORE developers) don't make good Managers... or Leaders... or... whatever you want to call that <em>abomination of delegation</em>! I prefer Field Manager in specific and Manager in general.<br /><br />In creative collaborations, leadership is always situational. Each aspect of the problem invites the creative excellence of one or more team members. I don't believe any one person can 'drive' a sizeable effort from inception to conclusion alone. The Skill Sets (sociological as well as operational) required for these two roles are just too diverse for one person to cover! They have different Objectives; Their Interests and Incentives are usually in conflict... I mean how can you<br />put an individual in this situation? It's almost HARASSMENT!!!<br /><p><u>Parting thoughts: </u></p><blockquote><strong>Managers</strong> give you a goal and let you figure out how to achieve it, monitoring along the way.</blockquote><blockquote><p><strong>Leaders</strong> give you a direction to achieve your goals, walking along the way.</p></blockquote>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1158315395208816612006-09-15T15:41:00.000+05:302007-10-23T17:11:47.377+05:30Definitions so farJust a list of concept posts I have written so far, will try and keep it updated.<br /><ul><li><a href="http://thinkaround.blogspot.com/2005/09/how-do-you-measure-quality.html">Quality</a></li><li><a href="http://thinkaround.blogspot.com/2005/12/benchmarking-expertise.html">Expertise</a></li><li><a href="http://thinkaround.blogspot.com/2006/01/coding-vs-programming.html">Coding</a></li><li><a href="http://thinkaround.blogspot.com/2006/01/coding-vs-programming.html">Programming</a></li><li><a href="http://thinkaround.blogspot.com/2006/09/defining-leadership.html">Leadership</a></li></ul><span style="FONT-WEIGHT: bold">Endnote:</span> <a href="http://thinkaround.blogspot.com/2005/11/return-to-innocence.html">Why</a> definitions are important.Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1158241421230190202006-09-14T18:47:00.000+05:302007-10-23T17:18:55.117+05:30Defining LeadershipFrom the Oxford English Dictionary–<br /><br /><blockquote>[to] lead (v): conduct, guide, esp by going in front; direct movements, actions or opinions of</blockquote><blockquote>leader (n): person followed by others</blockquote><p></p><p>So, let's go over that one more time. </p><blockquote>person followed by others... directing their movements, actions or opinions</blockquote><br />The whole thing instantly conjures up images of a Seargent carrying his platoon through the tall grass or a Captain marching his company into battle. Respect, Trust,... <strong><em>Glory</em>!!!</strong><br />So what's wrong with that? Nothing, except that contemporary corporate culture seems to be the only place where the word <strong>Leader</strong> immediately follows the word <strong>Team</strong>. "So,” you ask, "what's wrong with a team having a leader? Most normal thing in the world!" Or so you think...<strong><em>!</em></strong><br />If you look at the above analogies colsely, you will notice that <em>neither</em> a platoon, <em>nor</em> a company is a team. They are hierarchical structures built into the military chain of command!<br />A Team is...<br /><blockquote><p>... made up of peers, equals that function as equals.</p><p align="right"><a href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-2nd/dp/0932633439/sr=1-1/qid=1158291384/ref=pd_bbs_1/104-6860072-8486329?ie=UTF8&s=books">Peopleware</a><br />By Tom DeMarco & Timothy Lister</p></blockquote><br />Even the military accepted this when they came up with the idea of special-purpose (ops) teams. Such teams comprise specialists who set aside their ranks to funnel their respective skills into attaining a single, common goal. Teams in our industry have no reason to be an exception.<br /><blockquote><p>For all the deference paid to the concept of leadership (a cult word in our [software] industry), it just doesn't have much place here. </p><p align="right"><a href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-2nd/dp/0932633439/sr=1-1/qid=1158291384/ref=pd_bbs_1/104-6860072-8486329?ie=UTF8&s=books">Peopleware</a><br />By Tom DeMarco & Timothy Lister</p></blockquote><br />Managers/Leaders are never part of the team for the simple reason that they can never be peers; another point sufficiently emphasized by TDM & TRL.<br />Besides, we're talking creative people here. Creative people are inherently <em>Intelligent</em>! They don't need to be led around like some pack, and they sure as hell don't <em>want</em> to be!<br />What's even more amazing is the kind of stuff that gets passed off as Leadership qualities, things like:<br /><ul><li>Charm (:P)</li><li>Persuasiveness (:S)</li><li>Getting things done (!)</li><li>Maintaining the status quo (:o)</li><li>Assuming authority (out of the blue!)</li></ul><strong>Parting thought:</strong> With all the talk of <strong>situational leadership</strong>, we seem to want the same people to pick up the flag in all the <em>situations</em>!Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1153946482638790972006-07-27T01:41:00.000+05:302007-10-23T17:07:34.946+05:30When do YOU look at the user?Think about it. You're putting in this cool new feature, it's going to save the users a lot of time, give them a ton of functionality and, hence, save them a truckload of money. AWESOME!<br /><br />So, first we nail down the functionality... right? <strong>WRONG!!!</strong> First you figure out how the users will exercise the new functionality, because that's what you're ultimately giving them- a new user experience. a new interaction mode.<br /><br />Unless you make sure the user is going to find the new interaction intuitive, any new functionality, however efficient, is a burden. If you make the user jump through a lot of hoops just to do his everyday job, your new feature <strong>SUCKS</strong>!!!<br /><br />I actually experienced this first hand recently. We enhanced the TIL Regulation dashboard in an LOS to allow the users to monitor loans as they get dangerously close to the limits and notify them once they fall over. I actually reordered all the controls on the screen just to keep logically related data together. The new design was so intuitive that the Business Analyst approved it in a heartbeat and sent out an appreciation note! (Pat myself on the back)<br /><br />At the same time, another team member was working on the screen used to configure the regulation limits. Man did they miss the bus! They wrote up the whole screen, new popups et al, and then sat around thinking, 'What if the user checks this but doesn't fill in that...?' <strong>WHOA!</strong> When he asked me for an opinion, I said that the new validations he was thinking of were cool, but, '...wouldn't it have been much more logical to have thought about this <strong>BEFORE</strong> you built the whole thing?' Nevertheless, he ended up putting in the validations (in this screen and a few others!). Rework can be such a productivity killer!<br /><br />The user always comes first. Kathy Sierra agrees in her blog post captioned <a href="http://headrush.typepad.com/creating_passionate_users/2006/07/avoiding_the_fe.html">Ignore the competition</a>.Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1153140023832154982006-07-17T16:16:00.000+05:302007-10-23T17:06:16.857+05:30Turning Developers into Baby-sitters!!!<div style="TEXT-ALIGN: justify">That's it! I've had it with management covering up their incompetence by 'delegating' work to developers. Enough is enough of this garbage. Ju-JUST BACK OFF... Immediately!!! And do your own work, YOURSELF!!!<br />Isn't it really annoying when you have to fill up the same data into five different systems (each designed for a specific objective), then wonder if you filled it right everywhere, then draw up a reconciliation sheet because SQA doesn't see the same data as Finance as HR as ...!!! AAARGH!!!<br />God! Why can't these managers just figure out exactly what data they need and figure out a single source that they can all extract it from. Then we wouldn't have to wast our time filling five different datastores, and reconciling the differences!<br />Joel Spolsky got it right when he said<br /></div><blockquote>...the MBA-types in charge think that coding is a support function, basically a fancy form of typing.</blockquote><div style="TEXT-ALIGN: right"><a href="http://www.fogcreek.com/About.html">http://www.fogcreek.com/About.html</a><br /></div><blockquote>I'm convinced that most people think about software companies in an upside-down way.</blockquote><div style="TEXT-ALIGN: right"><a href="http://www.joelonsoftware.com/articles/fog0000000074.html">Converting Capital Into Software That Works</a><br />By Joel Spolsky </div>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1150821705840391222006-06-20T22:04:00.000+05:302007-10-23T17:02:10.193+05:30Lessons LearntI haven't exactly been soul searching, but here's my list...<br /><blockquote><p>This entry is waaaay overdue! 5 months SUCKS!!! I definitely need to post more often.</p><p>Fight the PROBLEM, not the PROJECT</p><p>Never compromise</p><p>Always understand what you're getting into</p><p>Don't hold on too hard</p><p>Assumption is the Mother of all F**k-ups</p><p>I am a Maven looking for a Connector</p><p>Don't bite more than you can chew</p></blockquote>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1137756456977928832006-01-20T16:42:00.000+05:302007-10-15T17:22:37.762+05:30Who da Man ?!?<div style="TEXT-ALIGN: justify">I read a blog comment on our corporate intranet recently that said,<br /><br /><span class="comment-text"></span><blockquote><span class="comment-text">Modern banking isn't dependent upon IT, modern banking is IT</span>.</blockquote>Now there's a repulsive thought! How does anyone get off suggesting that IT could, or already has, taken over or replaced the Business it services? A specific business process implementation does not subsume the business function that it defines. Business Funtions (such as purchase, sale, accept deposit or lend) are independent of and supercede the means applied to realize them.<br /><br />IT is not Business! IT doesn't run Business; People run Business. People are defined by their Actions; and Actions are channelized and automated using IT.<br /><br />IT is merely a business facilitator/accelerator. What we really need to be focussing on is figuring out ways to shift from the Facilitator role to that of an Accelerator. That's where the real business propositions lie.<br /><br />Basically, we ain't NEVER da Man!<br />We ain't NEVER GONNA BE da Man!!<br /><br />So let's just get used to playing second fiddle to Business. Besides, why should IT be anything but IT?<br /><div style="TEXT-ALIGN: center">We are Who We are. </div></div>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1136137936472706712006-01-01T23:13:00.000+05:302007-10-23T17:01:11.885+05:30Coding vs Programming<blockquote>Coding is about how you should write,<br />Programming is about how you SHOULDN'T!</blockquote><blockquote>Coding as about the Language and Syntax,<br />Programming is about the Paradigm, the Thought Process</blockquote><blockquote>Coding is represented by the 'Writing' Metaphor,<br />Programming is epitomized by the 'Construction' metaphor</blockquote><blockquote>Coding defines the Solution,<br />Programming defines the Problem too!</blockquote><blockquote>Coding creates the Implementation,<br />Programming creates the Interface</blockquote><blockquote>Coding is about "Getting it done...",<br />Programming is about "Getting to know it!"</blockquote><blockquote>Coding gets you Paid,<br />Programming makes you Satisfied.</blockquote><blockquote>Coding is what we HAVE to do,<br />Programming is what we SHOULD be doing!</blockquote>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1135610872476215062005-12-26T20:35:00.002+05:302010-12-13T05:32:48.039+05:30Benchmarking Expertise<a href="http://en.wikipedia.org/">Wikipedia</a> defines as Expert as...<br /><blockquote><p align="justify">An <a href="http://en.wikipedia.org/wiki/Expert">expert</a> is someone widely recognized as a reliable source of knowledge, technique, or skill whose judgment is accorded authority and status by the public or their peers.</p></blockquote>Some pretty big phrases there! Let's just list them down for now.<br /><ul><li>widely recognized</li><li>reliable source</li><li>judgement is accorded authority</li><li>peers</li></ul>Alright, on to the issue. I guess the debate of whether an expert is deemed an EXPERT by Qualification or Acceptance has been sufficiently settled. Refer the following for details:<br /><ul><li><a href="http://www.catb.org/%7Eesr/faqs/hacker-howto.html">How To Become A Hacker- Eric Steven Raymond</a></li><li><a href="http://blogs.sun.com/roller/page/oldmanmanager?entry=what_makes_good_engineer">What makes good engineer?</a></li></ul>What really remains to be settled is how we can benchmark a person's 'expertness'. I figure the four traits listed above could be a start, but most of them tend to raise questions. How 'widely' is enough 'widely recognized'? Just who are your 'peers'; people you work with, people of like mind?<br />I guess this is more of a controversy than a debate, but what the heck! :)Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1132496541980655372005-11-20T19:48:00.000+05:302007-10-23T17:16:41.232+05:30Return to innocence<div align="justify">Remember when you were a child, trying to reach out to the world; every new sound was an experience, every word a question!<br /><br />In trying to grasp the fundamentals of <strong>communication</strong> we realized that every word was merely a representation of some real world phenomenon; and <strong>meaning</strong> provided the necessary relation to attain understanding. Some words tend to have more meaning than others. For example, an apple can be sufficiently defined as ...<br /></div><blockquote><p align="justify">"a white fruit with 5-7 seeds at the core and a moderately thick skin which may be red, yellow or green in color"</p></blockquote><div align="justify"><br />...but inertia would require something to the effect of ...<br /><br /></div><blockquote><p align="justify">"the tendency of a body to remain at its state of rest or of uniform linear motion until an external unbalanced force acts upon it."</p></blockquote><div align="justify">In other words, some 'words' warrant more than meaning, they need a definition. A collection of definitions of related words more or less defines the linguistic scope (<strong>vocabulary</strong>) of that field.</div><div align="justify"> </div><div align="justify">The IT industry, much like the rest of the engineering field, has always been riddled with a gargantuan vocabulary. In their need for precision (and sometimes exclusivity), engineers tend to name and define every little concept and action encountered. In an environment like this it is essential that the fundamentals are not lost. <strong>Fundamentals</strong> truly are the building blocks of a strong understanding. A quick observation reveals that most complex concepts either build on or combine smaller more fundamental concepts to enhance a set of relationships between them. As a logical conclusion, if your fundamentals aren't strong, your understanding rests on shaky foundations!</div><div align="justify"> </div><div align="justify">By now you're probably asking yourself, "So what are we looking at wrong?" </div><div align="justify"><br /></div><div align="justify">Sad to say, but it is our outlook to the vocabulary itself. The inhumanly fast pace of the IT industry leaves little time for the crystallization of foundations. Over simplification of concepts through vague metaphors and analogies is just one of the corners often cut in this race. This often leads to over generalization of terminology by trivializing their meaning. Subsequently, learners tend to stretch terms too far without defining or (worse) understanding the context. [Refer my previous post on <a href="http://thinkaround.blogspot.com/2005/10/continuous-care-vs-initial-design.html">Continuous Care vs Initial Design</a>] </div><div align="justify"><br /></div><div align="justify">Building a vocabulary isn't just knowing the words, it involves learning the words, meaning and all.</div><div align="justify"><br />Let us return to innocence, to a time when we weren't ashamed of asking what words meant and why; and taking our time to understand them.</div>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1130133243055961962005-10-30T21:15:00.000+05:302007-10-12T12:16:59.668+05:30Subtext means no text! ...uuunh<p>I've finally gotten around to reading Jonathan Edwards' paper titled Subtext:Uncovering the Simplicity of Programming he presented at OOPSLA 2005, and I gotta say... it was an experience! I just don't know where to start, so I'll just start at the beginning.<br /><br />Programming is HARD??!!?? I mean, COME ON!! Yeah, even I thought programming was hard, when I had just started off! Getting my fundamentals straight was the hardest thing, but that was my biggest hurdle. Programming isn't hard; visualizing relationships between loose-coupled abstract concepts, now that's hard. Saying programming is hard is like saying it's hard to put one foot in front of the other because you can't run the Olympic 600M! But the reasoning takes the cherry; Programming is hard because source code is removed from a programs behavior, because we're not compilers. Damn right we're not compilers, we're BETTER; that's why WE built compilers. Compiler were built to spare us from the 'inhuman' patience required to monotonously apply a 250 page language specification to any program from 2,500,000 to 25 lines of code, not because we couldn't do it. As for source code not presenting the behavioral view of the system, well, uhh, NEWSFLASH... I don't believe it was ever intended for that purpose! Source code presents a structural view of the system. We use collaboration diagrams and statecharts for that, but admittedly not all people and platforms provide for that, so I'll admit that there's no common ground here. Nevertheless, you can't blame that on source code.<br /><br />Personally, I believe it's the lack of 'technology soft skills' like visualization and programming in the large that screw up most development, not that it's hard to represent ideas in a given syntax. Maybe we need to revisit CS courses to include these.<br /><br />As for Usability, usability is about making a users experience with a system easier. Norman's Gulfs were developed as part of a user interaction study. Applying UEX concepts to source code and other programming media seems a little extreme.<br /><br />The argument is text centric is a little ridiculous. Paper or for that matter any persistence medium is just that, a medium to store. Rich UI tools are just that, tools to program. WYSIYWG programming environments are at best visual/graphical representations or views of programs. How does WYSIWYG help if visualization is the inherent problem?<br /><br />Coming to Subtext (finally!), Subtext is definitely not a language. Subtext is, as Edwards himself mentions somewhere in the paper, a programming ENVIRONMENT. It allows you to manipulate the structural components of the program directly. Kinda like playing with the AST.<br /><br />Here's my gripe list on Subtext.<br /><br />- Languages interface programmers to compiler/interpreter. Subtext opens up the gamut of program flow components to the programmers, something people have been trying to abstract/encapsulate from programmers in every paradigm shift. In my opinion working with actual program components is a huge step backwards, maybe we should just go back to Assembly or Machine language.<br /><br />- The nomenclature used to describe program structure is ambiguous. Program nodes are divided into Structures and References, where structures could be Composites or Empty aka Atoms. Only Atoms can be leaves of the program tree, and References... so are References Atoms? But References could be linked to Composites, and expanded, with Reference Envelopes... you get where this is heading?<br /><br />- No types. How do you work a mature, dynamic, 'reactive' language without... Oh wait...<br /><br />- Subtext is STATIC!<br /><br />- Labels are text comments. So I could just copy the Difference function into a structure and re-label it Add. I mean, we don't have just enough means of amplifying ambiguity already (!). Why is it so hard to admit that names are an identity mechanism? When I say Jonathan Edwards, we can IDENTIFY that the subject is a fellow at MIT who developed Subtext.<br /><br />- Copy calling: This one is really weird. Structural changes are propagated both ways through copies, except divergences in variants are not propagated upwards. But a variant may not even have divergences. And divergences may exist outside variants as inputs. Man! I thought Polymorphism was hard, but this takes the cake, cherry and all!<br /><br />- Subtext has no scopes! I can capture state from anywhere in the program flow, even in the middle of a function execution (multiple returns!). Encapsulation is simply absent. This looks like another one of those object based programming nightmares. JavaScript for the enterprise anyone?<br /><br />- Subtext does away with variables by exposing (making reference-capable) entire program flow! Every line is as good as a global.<br /><br />- Somehow, the data structure of a tree or even a graph falls short when projecting various aspects/views of a system. UI embellishments (compass, reference envelope, adaptive conditional table, etc) only complicate matters.<br /><br />- Preliminary observation shows that programming in Subtext involves hard coding each and every flow of the program. So much for flexibility!<br /><br />- Subtext suffers from IDE lock in. You can only work in a very specialized environment. I've seen other IDE specific platforms like PowerBuilder and Centura Team Developer (SQL Windows) hit the wall when programmers tend to get too deeply rooted in IDE specifics or when a requirement transcends the intent of the IDE.<br /><br />- Then there's the question of programming in the large. It's not just scalability, but the idea of programming multiple disconnected, black box components in multiple source codes. Being in invalid states for short periods is, to me, a viable tradeoff for flexibility.<br /><br />- Interestingly, the entire paper seems to sidestep the simple idea of persisting programs. How do you intend to store Subtext program trees? Text maybe!<br /><br />Ever since I started reading about Subtext, I was intrigued by the idea of Reactive Computation. Seeing your program execute as you write caught my attention. But then I realized that I was so fascinated only because I had spent so much time explaining to people how programs work. That's when it hit me! Subtext is actually a great LEARNING tool. Rookies can use Subtext (minus the Theory of Copying) to learn complex program flows by direct state visualization. This could actually go along way in developing the soft skills I mentioned in the beginning.<br /><br />My opinions apart, I don't want to discourage anyone's inquisition, so, I wish Jonathan Edwards the best of luck in his endeavors. </p><p>PS: My initial opinions were put up on JE's blog <a href="http://alarmingdevelopment.org/?p=5#comment-151">here</a>.</p>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1128334308129020832005-10-28T11:58:00.000+05:302007-10-12T12:13:21.171+05:30Continuous Care Vs Initial DesignIn his paper titled <a href="http://www.objectmentor.com/resources/articles/Continuous_Care.pdf">Continuous Care Vs. Initial Design</a>, Robert Martin expresses his growing concern regarding the lack of awareness about creating maintainable systems. Quite like I mentioned in my first blog entry '<a href="http://thinkaround.blogspot.com/2005/09/how-do-you-measure-quality.html">How do you measure Quality?</a>', he points out that we must strive to finish a task right (for everyone) as opposed to just finishing it. The article goes on to describe why systems, no matter how well designed, can be reduced to a rotting carcass simply due to negligence. Every time a design is changed as a result of requirements changing in ways that the initial design did not anticipate, new and unplanned dependencies can be introduced between the modules if the changes are made without carefully considering the system's existing state. The latter half of the paper suggests the application of Agile Methodologies to counter such 'rotting'.<br /><br />Hmm... we all seem to agree to that. So, what could we be looking at wrong this time? :)<br />Good old CONTEXT! ;)<br /><br />You see, Martin talks of <strong>designing</strong> in the small (Agile). It's about how <strong>initial</strong> designs can never keep up with changing requirements. What I'm hinting at is that all the talk of Continuous Care is applicable to <strong>new development</strong>. Projects being planned now, to be developed tomorrow!<br /><br />The whole thrust of the paper is towards changing engineering attitudes, about <strong>changing Methodologies</strong>. You can't change your methodology once the plane's taken off! Besides, no volume of care could ever fix a screwed up initial design. Martin says that , according to the Agile methodology, designs must be built to change and new requirements can change the design fundamentally too. But, how much 'care' do you put in before it's officially called a redesign!<br /><br />With regards to <a href="http://en.wikipedia.org/wiki/Agile_Software_Development">Agile development</a>, well I'm not a really big fan of it but I don't particularly think it's evil. The thing about the Agile methodology is that it's just plain simple misunderstood. Most uninformed people think being Agile is about getting it done in the simplest possible way in the shortest possible time. Well, I suggest they either read up on Agile development or com up with their own independent manifesto!<br /><br />Personally, I'm a big upfront design guy. I find safety in sitting calmly and applying 'care'ful foresight to come up with a flexible, extensible design (I know, I know... how does the customer care! Customer's suck!!). That's why I think being open minded is more important than being Agile.<br /><br />Sidenote: <a href="http://en.wikipedia.org/wiki/Category:Software_development">Here</a>'s a few more options, take your pick...Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0tag:blogger.com,1999:blog-17014496.post-1128573860977589422005-10-28T00:48:00.001+05:302010-12-14T16:03:50.905+05:30Java is the new COBOLAlright, now I know for <em>sure</em> that Java is seriously misunderstood! Don't get me wrong, I agree with the title, it's just the freaking reasons people give you for this!! Here's what I think.<br /><br />Java is the new COBOL beacuse both are...<br /><ul><li>Standardized through a detailed, documented Specification -> <a href="http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html">Java Language Specification</a></li><li>Platform independent; as a direct consequence of the above</li><li>Significantly readable. Infact, both were designed with readability in mind (COBOL was kinda <strong>Programming for Managers</strong>!)</li><li>Built with the intent of seperating concerns. Used effectively, they let you manage the business and not the systems.</li><li>Expansive in their enterprise penetration. Ubiquitous.</li><li>Always in the backgoround, the unsung heros!</li></ul><p>... not because...</p><ul><li>Java has turned legacy. What idioit came up with that one?</li><li>Java is too verbose. OK, Java is verbose; but not TOO, THREE, FOUR...</li><li>Java makes programming simple. Programming <strong><em>IS</em></strong> hard. Java doesn't make it simple, it just makes it easier to write and read code!</li></ul><p>... and Java also has to it's avantage that it is...</p><ul><li>General purpose; Desktop, Enterprise, Mobile, Embedded, Realtime, ... did we miss anything??!</li><li>Deployable in a variety of ways; Application, Applets, Java WebStart, J2EE</li><li>Easily interfaced to most other systems</li><li>Correctly Open source; have you seen the number of Java projects running on the Internet!!!!</li></ul>Saager Mhatrehttp://www.blogger.com/profile/03869587109666583246noreply@blogger.com0