ok lots of time has elapsed since my last post.  Now at the juncture of getting into C# , Azure, Angular2 etc.

Threading in C# is kinda different from Java.. Seems there are 7 ways of even creating a thread…so need to trap some sites as THE gotos and hence this post.  The link below will help to setup a callback after an async method call.


Ok to prevent deadlocks use this kinda calls.

Acquiring a value via an async method:

var result = Task.Run(() => asyncGetValue()).Result;
Syncronously calling an async method

Task.Run( () => asyncMethod()).Wait();
No deadlock issues will occur due to the use of Task.Run.

The above copied from this stackflow post: http://stackoverflow.com/questions/17248680/await-works-but-calling-task-result-hangs-deadlocks


2014 is dead and gone. I just noticed I had neglected blogging for more than an year. Attribute that to a rather busy year 🙂

One of the things I enjoyed most in 2014 was watching the World Cup down in Brazil with my son who is 11+ now and a fairly good player for his age. And like everybody else we were super shell-shocked by the 7-1 loss of Brazil to a well-oiled German team…almost could hear the Germans say “Brasilien ist nichts” 🙂 That was one fluke-ish day.. But Brazil did play real bad that day and deserved the huge loss. Hopefully Dunga brings back the magic. The WC finals was a real boring affair and was woken up when Goetze scored out of the blue.. Was real happy with the US’ performance..Costa Rica surprised all. The man of the 2014 World Cup was of course Mueller for me.. A remarkable young player who looks like a 40 year old 🙂 but who has great “vision”.

On the knowledge front, learned a lot about bigdata with Hadoop(self study plus outside enrollment at the free IBM site and at Dezyre up in Bangalore, India). Bigdata technologies are hyped big time and there is a new role out there called the ‘data scientist’ and is the sexiest title to have right now(but do brush up on them algorithms and Big-Oh and data structures before hitting the interviews(Skiana’s Algo design book is always a good read). Well even though hyped, there is a need to extract meaningful info from a lot of meaningless unstructured data(like this blog, for example 🙂 ).  My outside enrollment at Dezyre proved to be a good and a bad idea. I couldn’t understand what the instructor was saying half the time. But the enrollment is for a lifetime.. which means I can’t access it from my afterlife 🙂 . For 300 usd, the enrollment was kind of worth it, I should say, to gain enough insight into Hadoop to be dangerous.

Now, Bigdata with Hadoop is a moving target..Hadoop1 is different from Hadoop2 and MapReduce in Hadoop2 is just one of the ways of processing bigdata. Hadoop2 uses YARN(yet another resource negotiator) to plug n play other distributed computing paradigms for processing bigdata…noteably Spark and Tez.  YARN in Hadoop2 takes over resource management from MapReduce which had the dual duties of cluster management & data processing in Hadoop1.  This new architecture seems to have boosted efficiencies in data processing ~100-fold. As for me, I went thru Hive, Pig, HBase, Oozie, Mahout, Flume, Sqoop and Zookeeper at zillion miles per hour and did homework problems to gain more understanding about each of these components within the Hadoop ecosystem. Once I figured that Hadoop was still evolving(in other words, a moving target), I slowed down…because the mind can’t retain something long enough until one is into the technology in the real-world. So RIP “BigData with Hadoop” knowledge until I get to use it in the real world… 🙂

Professionally, I was a team lead for an aircraft maintenance software for most of the year…so went thru a project management mode for more than three-quarters the year…a mix of walking around with an xls, stealing good coding resources to do the needed work, attending scrums & meetings to tell bigwigs why the schedule was in shreds 🙂 , to actually doing some deep coding in Java myself. In the latter/later part of the year I (requested to be) moved to a research team headed by a super energetic guy who makes things fun and challenging. My main contribution in 2014 for the research team was to write a Java application in Swing and later in JavaFX 2.0 to marry the abilities of two products. The Swing one was 5K lines of code and found that Swing sucked in terms of placing an html link in a JTable row…I had to improvise(if you the reader, need the Swing solution to this, let me know..maybe will blog another day, how I did it)…basically used a dialog popup off of the JTable row and then provided the clickable link within that dialog popup. As soon as this Swing app was done I had to rewrite the whole in JavaFX2.0 which was another set of 5K lines of code(apparently after Java7, Swing will no longer be supported by Oracle and hence the move to JavaFX 2.0). The things I liked with JavaFX 2.0 was the ability to use a WYSIWYG interface to design the UIs- an awesome improvement in the Java desktop app dev world(a bit clunky…but still better than the coding-running-viewing -coding-running-viewing cycle to see how things jive in the UI when using Swing). I used (er..had to use) really complex components like TableView and TreeTableView.. both of which have a semi-huge learning curve. Being a seasoned developer I made the code very modular so that maintenance is now a breeze(well may hear a not so good comment if another being tried to maintain my code 🙂 . I also had the need while doing these Swing and FX apps to do serialization of objects using the Jackson API…How super simple is a two-liner…object.WriteValue() to write a Java object to file in the JSON format and object.ReadValue() to convert the JSON object back to the Java object…All APIs should be that simple:) and this worked like a charm all the time…Well in this case I could have done pure object deserialize and serialize…but if one wanted JSON to be manipulated in any fashion after conversion Jackson API is apt for a less-work-involved conversion to a human readable format(…compare that with JAXB …first you need to create an xsd from the POJO using schemagen and then compile that xsd to get the JAXB class(es), place those in yr classpath…too much insane work to convert a POJO into a human readable  “manipulatable” transport format)

The new year is upon us…hope I get to do more interesting stuff this year. My total software world experience has reached the 17 year mark in 2015. I could make a good top Engineering Manager at this point in time – and dabble in an eclectic mix of technology and management 🙂  Over and above the years of experience, I am academically qualified to be an engineering manager with both an MBA(with a concentration in proj mgmnt) and an MS in CS under my belt. And dear techies out there…the only way you can advance in your career is to move into management, unless you are at say Google, FB, MS etc where techies have a career path…or perhaps you have good “political” friends who can “pull” you up. The rest-of-the-world-techies in the end are misused by biz types and seen as just a mercenary to get a job done while the techie’s life passes him/her by. The company I work for doesn’t really have a career path per se for its techies…which is utterly disheartening :(. All the jobs I would love to do are at remote branches of the company and none allows virtual. Imo, most big companies waste a lot of resources/talent within by not marrying people with the right job at the right times and in the end the employees say adios and take all of their knowledge to a better place(well what is better today? Dunno..one could find only by trial an error 🙂 ). Raises the question why an employee at location X of the company can’t do a job he/she is qualified for at location Y of the same company. I think it is the HR dept personnel that have to be proactive in retaining talent by marrying people to new gigs at any location of a global company…iow, open virtual up big time…Why would a company waste its resources to recruit for a location from outside when they have the talent to do that same job at some other location of the same company? In my case the company touts …ooh security-issues and such hocus-pocus to not make jobs virtual..which is utter bs in this day and age when all locations are VPN-connected. Perhaps a generational change in upper management is needed to see the potential of the virtual world which could also help to reduce the need for mid-level-do-nothing-super-yakker-managers…hopefully the change happens before I retire and take up that hobby of fishing trouts 🙂 . Visit authenticjobs.com to see some real good tempting virtual jobs that could be done from anywhere in the US or the world…Now that is how real software work should be done…instead of being tied to a desk at some fixed location. If I log in from a beach in Hawaii my productivity would be awesomely up…then next day from a quiet coffee shop etc..A change in location, a few days off etc can improve productivity many-fold. Another lesson the HR of big corporations haven’t figured out…a huge motivation booster too(of course there may be irresponsible folks who could misuse all this, but most techies won’t misuse such motivation-boosting opportunities)

Now a bit of remorse…I have been postponing bringing out my dream app for years..the idea is super good. I may have already lost zillions, per my calculations, in not doing it. The app has been living in my head for almost 10 years and I had dabbled with various frameworks to get it done…wrote code now and then but technology has improved so much so that I have decided in the end(after 10 years 😦 ) to make a hybrid mobile app and sell for 99c a piece. My New Year’s resolution is/was to get this done in 6 months time and try my luck by publishing it to the appstore, appsmarket etc. It should sell good(that is, if people find out in the apps jungle 🙂 ). 401K and pension I can’t depend on(they are imo tricks to buy your time till you get old while the biz guy steals all yr money in the meantime 🙂 …maybe this app will be my salvation. If I am to fail in bringing this out this year, I shall outsource it next year and get it done(thought of outsourcing this many a time, but the idea is too good that I am afraid it will be stolen by the one to whom I outsource to). It is for me to try the market…let the market decide if the app is awesome or not(I might be a dreamer after all ..and c’est la vie 🙂 )

Have an awesome 2015!

There has been an explosion of JavaScript libraries in recent years. I feel old school at times- me with my hi funda Java, Spring and .NET knowledge- not so hi funda now :)And each library stays on for a bit of time and then becomes a mere mention.  Dojo has stood for sometime, but the new kids on the block like jQuery have almost usurped it to legacy status.   RIA is king and therefore JavaScript frameworks of various flavors have risen up to fill this necessity.  Who wants to go back to the server visibly… Sneak via Ajax is all that is needed.

Currently it is Angularjs’ time in the limelight.  Those nerds at google have not just presented us with an extremely useful javascript library – they have in fact given us an mvc implementation for the client side!  Well don’t get me wrong…they were not the first to do this with javascript.  There were others upon whose shoulders they stood, like Backbone js, to come with a more spiffier mvc framework. Angular makes code on the front end clean and tidy via separation of concerns.

The MEAN stack is all the rage today. Well it is not ‘acronymized’ correctly per the sequence of roles, but is a catchy name. M is for mongo db, E is for Express js and A is for Angular js and N is for node js.. A stack fully done with js.

Expressjs in the stack acts as a web server. It is a nodejs app basically and you could call it a server side mvc framework akin to struts or ror but for JavaScript.

Architecturally you would have angular model, view and controller on the browser side and REST calls from the view make it to Expressjs webserver via the angular controller. From there queries are made to the backend mongodb using mongoosejs.
Expressjs allows REST api exposure which are used via $http calls from angular controllers.
(The above pic is from phlox blog.in)

Now MEAN has been around for an year or so( and you can substitute different items in place of the acronym first letters.. For example backbonejs instead of angular or cloudant instead of mongo or flatiron for expressjs… What did I say in the beginning… JavaScript frameworks are dime a dozen :)) one sad news now… This MEAN stack is allegedly outdated :). Change is inevitable etc etc. On one of the posts about MEAN stack somebody asked, ‘why do I need this if I can use Meteor’. The real answer is you don’t.

One thing I need to find out is about how secure and how transactions friendly these new all JavaScript frameworks are. Can you for example write a bank app using these JavaScript frameworks. I doubt it can.. But then what do I know when you are looking at a moving target like web based technologies.

In 10 years time JavaScript will rule web technologies and there will be no need for sql dbas 🙂 Or maybe just like Javascript made it back after 10 years of the web, non JavaScript server side technologies might make a comeback….just like now people ditch sap apps and think about going back to mainframes whose batch execution speeds no modern technology can match. Who knows? Stick with needed logic. Languages and frameworks and stacks will evolve. Correct logic will remain constant. That is why systems engineers have the last laugh while software engineers fry their brain cells 🙂

Sikuli(meaning God’s eyes in american indian lang) is an impressive piece of software which could be used for  testing GUIs and many other good and perhaps even nefarious purposes…thinking perhaps our Nigerian millionaire could be using it 🙂

I was posed with a very menial manual job – copy something which is on one sys to another (precisely from VersionOne to Dimensions) -almost similar data.  So in my hunt to automate, stumbled upon Sikuli and decided to use it.  At this point in time am trying to get going…but have some birthing difficulties, one of which was making the Sikuli IDE within Sikuli-X-1.0rc3 (r905)-win32 work.

Since  my brain is shrinking fast in this info age…need to jot this down for posterity(posterity Disclaimer: ok dont refer to this after say 5 years and gripe…Sikuli might become something else then or totally disappear… :))
Sikuli IDE kept disappearing when I was trying to take screenshots and the anitdote (filtered from forums) was this:

First of all, use java se 6 update 30(I think any update for Java 6 would work..but should be Java 6)

Modify Sikuli-IDE-w.bat with the right path ..in my case had this in the bat file: set JAVA_EXE=”C:\Java\jdk1.6.0_30\bin\java.exe”

Set env var JAVA_HOME to point to the location where java 6u30 is…In my case set this env var: set JAVA_HOME=C:\Java\jdk1.6.0_30

Also have 6u30’s bin and  jre6/bin in  path…In my case I had these in %PATH%  env var –  %JAVA_HOME%\bin;%JAVA_HOME%\jre6\bin;

Now that I have the IDE working correctly…I have one more hoop(or perhaps more) to jump…making xlrd work.  Yes, was planning on creating an xls with stuff to port and looping thru that to port 100 or more defects from VersionOne to Dimensions.

As with any software pioneering…this could end up good or bad… in any case I will learn more…Wishing myself luck…


Noticed I haven’t written anything in an year. Bad me. What should I write about?  I did do some cool Spring Roo and deep Spring JPA stuff and found some nuances when using JSF and JPA. But don’t feel like sharing all those, because it is just too much work to explain all the tidbits of some short-lived technology. More than that, it is horribly boring .  I wish I were a J.K.Rowling with the capacity to create a mashup of all the stories from all the cultures of the world and call it by some very long name. Instead I find I am a J.K.Howling , with no such abilities 😦 But who knows! Perhaps I could make movies 🙂 Need to however drink the same coffee that JKR used to drink during her downtrodden days in dreary old England 🙂

Abraham Lincoln, Java programmer….well that is a movie I wanna make.
Well what will the plot be? Crazy EJB2 vampires lurking in the dark to annihilate my code? Probably. Welcome to maintaining legacy unmantainable code. Those have real zombies and vampires lurking in all places including happy-path unit tests 😦 Well the modern Lincoln-axe is the Spring framework. It is getting ground well over time. But people go overboard and have started producing code that is dependent on Spring…which was not the original idea…remember light coupling and lot of cohesion? Joking aside, Spring promotes best practices. However the axe is good at least till the next Rod Johnson steps in and says something very obvious and puts us all in shame 🙂

But software work in any company after a while gets boring. Dealing with the same unmaintainable code and following mundane processes that no one questions anymore is an f-ing waste of time. Everyday I think to myself…did I do something for the good of humanity? Always the answer is a ditto no. Of late such questions take up my right-before-sleep time..you know the time you get to think and your conscience talks to you? Which is kinda weird.  The only solace in all this is that I work with some intelligent, remarkable, diligent and honest people.  I am bored, but never unhappy :). Not many can brag about such a work environment.

I haven’t done anything of interest to me in the software arena since 2006. All were other people’s work, but did love the gig at a startup between 2003 and 2006.  Not motivated like that anymore. Corporations tend to waste software talent and money when the product being built is ultra complex.  It is the nature of the beast.  Small apps which get out the door and make people happy is what I like best.  There is a talent deficiency in the software development area…there are lots of good small mobile apps to be written for the good of humanity.  But day in day out, raw talent is being wasted for useless stuff not good for humanity as a whole.

So why am I rambling?  Rambling is good:) It is a soul-cleanser that gives you a holier-than-thou attitude 24×7.  Anyhow, I am doing something of interest, at last. A novel app that nobody has ever thought of, has crossed my mind. Lucky me! And I stand to make millions – didn’t the Facebook guy say the same? …and look at his stock now  🙂 Now I need to outsource the implementation to my wife -who is an excellent programmer, btw- and enjoy the returns 🙂 Now I plan to become the vampire I planned to slay -sucking off the work of others…well in this case my wife’s 🙂  Is this move good for humanity? The work might be, but my attitude is not. And that worries me 😦

Had the  chance on Sept 23, 2011 to attend the Space Coast Chapter of the PMI’s “Professional Development Day” at the Florida Tech campus in Melbourne. Was a memorable day.

All the speakers had something novel to present and that kept it very interesting. Had the privilege of listening to the following speakers:

Dr.Robert.E.Niebuhr: I was able to catch only the last part of what he presented. But I did hear him mention about the fact that Florida Tech was one of the 30 schools to have achieved accreditation from PMI for its MBA PM program – so that is a good thing for all of us.

Dr.Harold Kerzner:
Dr.Harold kind of said that the stuff in the PMBOK is kind of getting stale. Some of the things he said:
-The term project needs to be redefined as an endeavor that adds value.
-Measuring projects by just using the triple constraints is not the way now. Value,quality and Reputation are also to be factored in. Disney has more-safety and aesthetics too.

-Multiple criteria(like above) are applied to figure out if a project is a failure or success(not just the triple constraints, iow)
-Capturing the best practices is a strategic weapon.
(e.g:Feds used to contract out 90% of their work; hence lost all best practices to the contractors;now want it all back and want to build a library of best practices and hence the Feds are into creating PMOs to accomplish this-hey there is a job opp there for PMPs and such. IBM has been doing that for long and has a library of best practices and 25000 PMPs!)
-The management PhD candidates target writing about “best practices”

-There is a push to see the needed data/criteria on a dashboard interface. The data seen are not just the time, cost and scope variances. It can be value, quality, reputation. And weightage is given to each of these multiple criteria and that weightage can differ from org to org.
-EVM is dead. VMM(value measurement methodology) is the new kid on the block
-The “measurement technique” of any of the criteria used in the dashboard is also to be shown on the dashboard.
-Today’s PM is also a Biz mgr.

Dr.Tom Sheives:
Tom presented his experiences with 711. Seems 711 is not just a coffee shop- it does many kinds of projects including IT. 711 used proper processes for managing projects and hence were highly successful. PMs exhibited consistency and transparency at 711. Kept very close tabs on the projects on a daily and weekly basis for success. Tom also added that scrum is used in the development phase only and in all other phases the old traditional PM processes are still in vogue.

Nani Sadowski:
Nani presented about the role of the PM in the healthcare arena with her experience in setting up PMOs in the healthcare arena. Seems there is a shortage of PMPs in that arena. Most of the nurses and clinicians are moving on to being PMs(which further increases the shortage of nurses and clinicians). The push towards EMR is one of the factors fueling the need for PMPs. If you get into this area, doctors will fight you tooth and nail with the it seems that the doctors will fight tooth and nail in resisting the new processes you propose or impose.
Chuck Millholan:
Chuck was an extremely interesting speaker after lunch. Chuck works at Churchill Downs(home of the Kentucky Derby) and talked about how requirements were elicited from rich owners for moving from the legacy ticketing system to a new enterprise ticketing system. To not let egos get in the way he had to use the Delphi method -secret ,requirements gathering and then weighting and ranking them. Once ranked everyone got together and re-prioritized the requirements.

Frank Saladis:
Frank talked about “Architechting the Future through PM”
He stressed the fact that you have to be a leader to get the vision done. Iow, PMs should have or develop leadership qualities. PM is still not considered to be a core competency by many organizations. So we as PMs should strive to help organizations make it a core competency. Frank wanted us as a homework to listen to the Project Manager Blues(http://www.youtube.com/watch?v=Ej66TiINaRc). Frank had many sayings…notably “Begin with the end in mind”. PM is evolving and hence “What got you here, may not get you there”.

Rick Morris:
Rick talked about the various games that a PM has to play to get upper management to think about the various facets of a project-time, cost and scope for example. Rick’s talk was extremely humorous. For example Rick said that while walking in the hallway once, he was asked for an estimate and Rick replied, “less than 5 million dollars” And the C-suite said “I was thinking like somewhere in the 200,000s” for which Rick replied “I am still correct”:). In essence don’t just be pressured to give a number-question and understand what is behind the numbers. Rick had another example for how to survive the “when will it get finished” qn. He said that he always relies on the PERT equation which gives a best, possible and worst case dates. “Force the decision without confrontation!”, was his message. Also don’t get pressured to move on without a plan, invest money in learning MS Project well -as it can do funky things unbeknownst to you -never ever be pre-judgemental about a previous PM and be a constant learner of new ways of doing things(take minor risks to improve processes)

The main takeaways:
a)Passing the PMP is key to advancing in this field.
b)The demand for PMPs is high, even in this economy.
c)There is a need specifically for “Global Project Managers” (as in when monitoring outsourced projects; Have to “get with the program” of learning the other culture to deal effectively with the person at the other end of a phone or face-to-face)

Most webapps aim at slapping an UI to a back-end relational db.  A well-designed and normalized relational db (and YES, with surrogate keys!) is therefore extremely important and will void 99.9% of the problems at start and in the long-term/life maintenance of a web application.  ORM using JPA is the way Java developers create objects(POJOs)  for use in all the 3 layers of a webapp(of course!, I am assuming the app would have a presentation, service and a dao layer – after all, if you have the 3 layers to start with, slapping different UIs, be it for mobile or for the web or for the desktop,  would be very easy.  And if you expose  the needed services in the service layer as web services,  you get the most bang for the buck…any language front-end is possible)

ORM with JPA is all good, but sometimes the ORM tools generate odd code and as a Java developer you should have the knowledge to correct if there are any anomalies with the relations within auto-generated code. Hope this post helps you understand the innards of  relations within the ORM-generated JPA code.

For this post let me define the CROW (Course Registration Over the Web) db: It has five main tables: Course, Department, Professor,  Student, PC with relations like so: a 1-to-1  relation between Student and PC,  a 1-to-many relation between Department and Professor,  a many-to-1 relation between Professor and Department,  a many-to-many relation between Student and Course.

Relationships can be further classified into Single-Valued associations and Collection-valued associations.

Single-valued associations would be 1-to-1 and many-to-1:  Here the most important JPA annotation you will see is the @JoinColumn, which would refer to the relevant foreign key for the table mapped.  So, for example “PC_ID” is the foreign key in Student table and it would be referred within the @JoinColumn annotation placed over the “pc” field. PC_ID will be the PK for PC table.  The owning side of a relationship is the one that has the @JoinColumn annotation(also simply, the side that contains the FK in the relationship). The inverse side is the other side of the relation(the one without the FK)

1-to-1 :


public class Student {
private int id;
private String firstName;
private PC pc;
// …

Bi-directional: note the “mappedBy” in code snippet. “mappedBy” is always used on the inverse side (or the side without the FK in the relationship) and tells us what the name of the field is called in the owning side of the relationship.

public class PC {
private int id;
private String brandName;
private Student student;
// …

Many-to-1 :

public class Professor {
private int id;
private Department department;
// …

Collection-valued associations would be 1-to-many and many-to-many


If Department referred back to Professor, it would be a bi-directional relationship. One department would thus have a collection of professors. So 1-to-Many in effect would be a Many-to-1 bidirectional relationship from Professor to Department with the owning side being the Professor and the inverse being the Department.  So the Professor mapping would be as before like in Many-to-1, but the Department mapping would change like so.  Department is the inverse side of the relation as it does not refer to a FK and would contain the “mappedBy”.

public class Department {
@Id private int id;
private String name;
private Collection<Professor> professors;
// …

Many-to-Many :

There is always a join table connecting the two tables. Here I have picked Student as the owning side of the relationship(it is up to you). There is no one join column and hence. But it is a must to pick one as the owner and the other as the inverse. Also the owning side(again your choice) would have the@JoinTable annotation.

public class Student {
private int id;
private String firstName;
joinColumns=@JoinColumn(name=”STUDENT_ID”),          inverseJoinColumns=@JoinColumn(name=”COURSE_ID”))
private Collection<Course> courses;
// …

public class Course{
@Id private int id;
private String courseName;
private Collection<Student> students;
// …

[Note: the above only works if you don’t have  fields other than STUDENT_ID and COURSE_ID  in the join table STUDENT_COURSE.  Means, if you have other fields within the tables, then you would be forced to map STUDENT_COURSE also into an entity with STUDENT and COURSE each having a 1-to-Many relationship with the STUDENT_COURSE table.]