64 karma · joined September 16, 2011
The "single view of customer" use case, which is the one you mention in your post, is one of the oldest that this technology aimed to solve and it does solve it very well.
Disclaimer: I work for Denodo (http://denodo.com).
Here's a screenshot https://imgur.com/YHJOiEX
It fills my needs perfectly because I created it specifically for myself and I control it fully in all aspects.
It's been such a tremendous success for me and so fun to create that I am thinking about replacing other online services with custom-made versions, such as google calendar, google tasks, etc. Something to look forward to in 2016.
Great job, and keep at it!
I agree with grandparent that understanding what a pointer is and that almost everything in a Java program is a pointer it's critical for a Java programmer.
Windows host, running VirtualBox images with Linux Mint. I run several images, each major project in a separate VM.
Almost 100% Clojure development.
SVC: Git mainly.
Editor: Eclipse + Counterclockwise.
For services, I use mostly Heroku and Github.
The best improvement I had in the last years was to buy a corner desk (such as this http://www.ikea.com/us/en/catalog/products/60251335/ ) instead of a regular desk. It's miles ahead in comfort.
That said, in the example you posted I don't think you are using all the power of the multimethods, because you did not replace the case statement. You went from a case statement to a multimethod+a case statement. In this case, why not let the mutimethod dispatching to do all the routing/case functionality for you? Just use (.-keyCode e) as your dispatch function and use the different values of KeyCodes.XXX for each implementation of the multimethod. And you can even add a :default implementation that leaves the coords untouched.
In my experience the natural use of multimethods arise when you can choose the dispatch function for an element based on either some piece of data from the element or a computed value derived fron the element. But if you have to rely on case/cond/if statements the value of the multimetod is lessened, as you still have to touch your dispatch function when your hierarchy of values change.
edit:typos in the code