This is another speech I’ve given in Toastmasters, and it’s part of Competent Communicator manual, Project #7: “Research Your Topic“.
As a reminder, the objectives of the project are:
With that in mind, here is the speech I gave:
I have been a big fan of American Express for years, both in the UK and USA — without singing their praises too much, I love the customer service they provide and I love the facilities that they offer if you are an Amex Platinum cardholder.
I love all the customer rewards points (yup, you can redeem these into things like airmiles, or SPG points or simply vouchers at some high-end shops!), access to things like airport lounges and all sorts of other travel-related facilities an Amex Platinum card offers. I love that they cover all of my health insurance when I travel abroad. I love the car rental insurance they offer too — that in itself makes it so much easier and cheaper to rent a car when traveling!
And more than anything else I love their 24/7 concierge service! Maybe I am just a sucker for good service, but as I find myself most of the times making plans late at night. And it’s so good being able to call someone late at night to confirm services or make reservations and plans!
“-Amex, I want two tickets to Iron Maiden next month!”
“-Amex, can you sort out my flight to London in 2 weeks time?”
If you’ve been using Java for a while now, then like me, you must have saluted the move quite a while back in JDK 1.5 to introduce the atomic classes (
AtomicBoolean and so on). They were a big step forward, away from the clunkyness of having to create ridiculous bottlenecks in the code for the simple purpose of keeping a running total or some other simple accumulation operation.
They not only allowed you to have an out-of-the-box thread-safe class to use for keeping things like running totals but also they provided atomic operations such as “get and set” , “add and get”, “get and increment” and so on. And also, on top of that, the implementation provided was (is!) lock-free — one important aspect which any Java developer worth his money will be pleased of.
The problem with the atomic classes though was that it wasn’t really eliminating the bottleneck — it was just making the bottleneck smaller.
I started playing with Java 8 relatively recently (booo! ) — and going through the new features this JDK brought, I keep discovering things which I feel deserve more attention than they have been given. Sure, everyone is raving about the lambda expressions, try-with-resources and so on, but occasionally there are small additions that actually prove to be hidden gems and are an easy win for developers out there.
One such hidden gem I feel is the new
parallelSort method — which as per the JavaDoc “breaks the array into sub-arrays that are themselves sorted then merged. [...] The ForkJoin common pool is used to execute any parallel tasks.” Great! So we apply a divide-and-conquer and performing multiple sorts in parallel — that to me reads like an immediate speed improvement. So I put it to the test
This is the 4th speech I delivered to Toastmasters and it’s part of Competent Communicator manual #4: “How to Say It“.
As a reminder, the objectives of the project are:
With that in mind, here’s the speech:
This is not ground-breaking, folks and in fact it’s not even anything sexy, but it’s just something that’s been bugging me for a while when I play with some Java tools and code on my side: I need (very) often a way to quickly generate a text file with random integers as well as a quick way to read all of those integers into an array. There are all sorts of projects out there but either I’m looking in the wrong place or most of these projects are either too complicated for what they’re worth or they only do a small bit of what I need. So I set off to write this un-sexy, nothing-special piece of code to allow me to quickly generate these files so I can carry on with my work and experimenting in Java.
The idea behind it as I said is very simple: I want to be able to specify a file, a number of random integers to be generated and optionally a min/max interval. And I need a client to quickly read all of those numbers in memory in an array. (Yes, I know for some large files I shouldn’t look at doing this, but remember this utility is only to allow me to play with “stuff” and as such I won’t be operating on large data sets, so assuming that I can load all the numbers in memory is actually good enough.)
If you’re a Java developer like me, working on a bunch of different projects at the same time, then you quite likely find yourself in the situation where you need to switch in between different JDK versions every time you switch context/project. In my case, I am working on the (good) stuff we got going in Cognitive Match which is mainly JDK 1.6 (yes, yes, I know, I know, don’t worry, we’re upgrading that soon). Then I also have a bunch of open source projects I work on (read “I stare at the code in github and don’t understand much” ) which are using JDK 1.7. And also I’ve been playing with the new and shiny Java 8 too (loving the lambda expressions!).
Of course, I could take the approach of using just Java 8 and set compatibility mode (in maven or whatever) for the correct JDK version needed, however, this often highlights or hides problems specific with the JDK version used (when dealing with production projects especially I think it’s essential that developers mimic the production environment to the detail). As such, I prefer instead to have all the 3 versions installed on my Mac and switch in between them as and when I need it.
It turns out though that doing this can be a bit of a pain in the neck and requires a bit of a setup. So to save all of you in the same situation some time, I decided to post my solution for doing so online.
TechCrunch has already covered this and you can read the full story here: http://techcrunch.com/2014/05/28/retargetting-startup-cognitive-match-acquired-by-magnetic/ .
There is also a video/interview with Alex Kelleher of (former) Cognitive Match and James Green of Magnetic on the details of the acquisition and you can watch it here : http://www.adotas.com/2014/05/watch-magnetic-acquires-cognitive-match/.
And of course, we captured the details ourselves on our website: http://www.magnetic.com/magnetic-culture/magnetic-acquires-cognitive-match/ .
There’s a lot of work ahead of us for integrating the 2 (great, dare I say) platforms so stay tuned for details!
Update May/29/2014: This seems to have got quite a lot of media traction (who would have known that we are SO famous ) — so here’s more coverage about the acquisition below:
I’ll update with more links as I find them.