Of Advertising and Scaling Up

applovin aerospike 150x150 Of Advertising and Scaling Up photo    technology news blogroll  youtube twitter tech stack Tech startups startup software engineering software architecture silicon valley scale warriors of silicon valley scalding scala ruby on rails RTsB RTB redis rabbitmq php online advertising nosql MongoDB mobile advertising mike nolet meetup john krystynak Java internet advertising datastore database C architecture appnexus applovin aerospike advertising ActiveMQ I have attended the other week a very interesting meetup – part of the “Scale Warriors of Silicon Valley” series (which by the way I highly recommend if you’re into that sort of “thing” – and chances are if you’re a developer in the Valley you are! icon wink Of Advertising and Scaling Up photo    technology news blogroll  youtube twitter tech stack Tech startups startup software engineering software architecture silicon valley scale warriors of silicon valley scalding scala ruby on rails RTsB RTB redis rabbitmq php online advertising nosql MongoDB mobile advertising mike nolet meetup john krystynak Java internet advertising datastore database C architecture appnexus applovin aerospike advertising ActiveMQ ) – and as with everything I see and listen to, it can’t go un-blogged! Even more so, this talk was not just about scale, but about scaling an online advertising architecture – and since I eat advertising and everything related for breakfast, I couldn’t miss it. This particular meetup saw John Krystynak, AppLovin  co-founder and VP of Engineering taking the stage and giving us an insight into how to scale up an advertising solution – with real-world examples from his company, AppLovin, which boasts nowadays about 15 billion ad impressions per day.

Just so my ramblings in this post make more sense, it is worth mentioning here that AppLovin came out of stealth mode rather recently with their mobile marketing platform that acquires and re-engages customers and they’re already boasting a huge amount of traffic through their platform (some 15 bilion ad impressions per day according to the talk). Also, the event was a joint-venture in between AppLovin and Aerospike who was kind enough to allow us to crowd up their (sweet!) office as well as provide the drinks and food – oh yes, and the bottles icon wink Of Advertising and Scaling Up photo    technology news blogroll  youtube twitter tech stack Tech startups startup software engineering software architecture silicon valley scale warriors of silicon valley scalding scala ruby on rails RTsB RTB redis rabbitmq php online advertising nosql MongoDB mobile advertising mike nolet meetup john krystynak Java internet advertising datastore database C architecture appnexus applovin aerospike advertising ActiveMQ The other interesting side of this joint-venture is that of course, as John revealed in his talk, they use Aerospike’s solution in AppLovin. Aerospike, for those of you unaware of this, provides an open-source NoSQL database combining both transactions and analytics with ACID principles.

Read the rest of Of Advertising and Scaling Up

Let’s All Go To Sleep

iStock 000021023080XSmall pencils crayons 150x150 Lets All Go To Sleep photo    toastmasters random thoughts blogroll  toastmasters speech sleep research REM Rapid Eye Movement public speaking medical margaret thatcher health competent communicator 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:

  • Collect information about your topic from numerous sources
  • Carefully support your points and opinions with specific facts, examples, and illustrations gathered through research

With that in mind, here is the speech I gave:

Read the rest of Let’s All Go To Sleep

Product Idea: AMEX Concierge by Text

amex Product Idea: AMEX Concierge by Text photo    random thoughts product ideas 2 blogroll  travel starwood spg product ideas product idea customer service credit card concierge amex platinum amex american express 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!”
“-DONE!”

“-Amex, can you sort out my flight to London in 2 weeks time?”
“-DONE!”

Read the rest of Product Idea: AMEX Concierge by Text

Wanted: Creative Software Engineer

iStock 000020658968XLarge paper pencils coffee thoughts journal write 150x150 Wanted: Creative Software Engineer photo    technology random thoughts news fun time blogroll  software engineering social media poetry poet linkedin post LinkedIn guest blog post creativity blog post blog A while back, LinkedIn included me in the exclusive group of people who are allowed to have their own blog hosted on LinkedIn icon smile Wanted: Creative Software Engineer photo    technology random thoughts news fun time blogroll  software engineering social media poetry poet linkedin post LinkedIn guest blog post creativity blog post blog As such, I got an invite from LinkedIn to start creating my first post. I stared at that email for ages I think (at least a couple of months) before I finally decided to bite the bullet and write my first post on LinkedIn. So having just done that about half an hour ago, I thought I’d take to my own blog now to … well… boast about it! icon smile Wanted: Creative Software Engineer photo    technology random thoughts news fun time blogroll  software engineering social media poetry poet linkedin post LinkedIn guest blog post creativity blog post blog

This first post deals with something that is very close to my heart — and as such I get annoyed by it icon smile Wanted: Creative Software Engineer photo    technology random thoughts news fun time blogroll  software engineering social media poetry poet linkedin post LinkedIn guest blog post creativity blog post blog — which is the creative side of software development. A lot of people assume that us, software engineers are pretty boring, carrying on with jobs which have hardly anything glorious about it. Completely missing out the point that you need a lot of imagination and a creative process is employed by developers to solve the solution given to us.

Here are a couple of paragraphs from the original article:

Read the rest of Wanted: Creative Software Engineer

Java 8 Accumulators and Adders

iStock 000016987294XSmall 150x150 Java 8 Accumulators and Adders photo    technology random thoughts news blogroll  web server web threading thread simone tripodi open source multithreading multi threading jvm jdk8 JDK java5 java 8 Java http functor core java concurrency collections AtomicInteger AtomicBoolean atomic operation atomic apache functor apache contributor apache commons functor adder accumulator 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 (AtomicLong, 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.

Read the rest of Java 8 Accumulators and Adders

Parallel Sorting in Java 8

iStock 000002692558XSmall 150x150 Parallel Sorting in Java 8 photo    technology news blogroll  try with resources stats statistics sorting arrays sorting sort maths lambda expressions jvm jdk8 JDK java8 Java github fork join divide and conquer code optimization arrays apache commons apache common maths apache I started playing with Java 8 relatively recently (booo! icon smile Parallel Sorting in Java 8 photo    technology news blogroll  try with resources stats statistics sorting arrays sorting sort maths lambda expressions jvm jdk8 JDK java8 Java github fork join divide and conquer code optimization arrays apache commons apache common maths apache ) — 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 icon smile Parallel Sorting in Java 8 photo    technology news blogroll  try with resources stats statistics sorting arrays sorting sort maths lambda expressions jvm jdk8 JDK java8 Java github fork join divide and conquer code optimization arrays apache commons apache common maths apache

Read the rest of Parallel Sorting in Java 8

How Many Planets?

iStock tree field sun 150x150 How Many Planets? photo    toastmasters blogroll  toastmasters speech pluto planets Neptune eris competent communicator ceres asteroid 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:

  • Select the right words and sentence structure to communicate your ideals clearly, accurately, and vividly.
  • Use rhetorical devices to enhance and emphasize ideas
  • Eliminate jargon and unnecessary words.
  • Use correct grammar.

With that in mind, here’s the speech:

Read the rest of How Many Planets?

Small Java Utility to Generate Random int Files

DukeTubbingSmall 150x150 Small Java Utility to Generate Random int Files photo    technology random thoughts fun time blogroll  utility random numbers open source maven java io Java jar archive integer github files core java arrays 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.)

Read the rest of Small Java Utility to Generate Random int Files

Of TripIt And Their Business Model

logo tripit Of TripIt And Their Business Model photo    random thoughts product ideas 2 blogroll  website united airlines trips tripit app tripit Netflix mobile app google now google flying evernote business trip british airways app This is somewhere in between a question and an idea for TripIt — definitely not a moan! as I am rather enjoying the FREE service they are providing to me right now icon smile Of TripIt And Their Business Model photo    random thoughts product ideas 2 blogroll  website united airlines trips tripit app tripit Netflix mobile app google now google flying evernote business trip british airways app Truth being told, if they read this and they decide to go with my idea, I guess I’ll get a lot of cussing from everybody using it icon smile Of TripIt And Their Business Model photo    random thoughts product ideas 2 blogroll  website united airlines trips tripit app tripit Netflix mobile app google now google flying evernote business trip british airways app However, I am really puzzled by this so I had to get it off my chest!

First of all, as you gathered from the above, I DO use TripIt — and I find it a rather useful service for centralizing all of my travel plans. If you’re not familiar with it, they offer this convenient service where say you book a flight online and a hotel and a car rental; quite likely for each one of them you will receive a confirmation email with details about your booking. You simply forward that email to TripIt and they build an itinerary for you and store all details in one convenient place. They are even able to provide directions to airports, hotels and so on — that comes in quite handy: having all of your travel details in one place and simply using their up to route you to the airport, then to the car rental place, then to the hotel, then once at the hotel having your reservation details and so on handy. The service is free and it IS very useful.

Read the rest of Of TripIt And Their Business Model

Running Multiple JDK Versions on Mac OS X

DukeFriends 150x150 Running Multiple JDK Versions on Mac OS X photo    technology news blogroll  shell scripting maven mac os x Mac lambda expressions jvm jre jdk1.8 jdk1.7 jdk1.6 java 8 java 7 java 6 Java eclipse cognitive match bash 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” icon smile Running Multiple JDK Versions on Mac OS X photo    technology news blogroll  shell scripting maven mac os x Mac lambda expressions jvm jre jdk1.8 jdk1.7 jdk1.6 java 8 java 7 java 6 Java eclipse cognitive match bash ) 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.

Read the rest of Running Multiple JDK Versions on Mac OS X