Thursday, January 3, 2013

Introduction to CloudBees, Developer's perspective

Thanks to my leftover PTOs (vacation days of my company), I got time to revive my personal projects. So far, my code is on my personal laptop and I have been spending time to research right SVN host, Amazon EC2 instances. And CI tools, Maven repos were kind of out of scope for now. Then I decided to try CloudBees tools.

So Why CloudBees?
Lets begin with situation of typical solo developer or solo start-up teams. Generally, you start with your favorite IDE and as soon as something is working, you start thinking about managing whole project life cycle.  You wish for these things.
For your day-to-day development
  • At least, you ( or your team) wants to commit changes to external source control. (svn, git etc.)
  • You should be able to preserve and release artifacts. (Our favourite tool is Maven.)
  • It would be nice, as soon as you commit (or regular intervals), some external CI tool, takes update from your SCM repo and do build. (And publish to private maven repository too). 
  • And don't we feel productive, if we have task management system to align with personal or team goals. (if agile tools available, even better.) 
For your testing and production servers. (application servers)
  • You may want one 24 x 7 running development integration server, who is always running HEAD (aka snapshot) of your code. 
  • Once you are ready to release your application to world, you should be able to deploy your code to load-balanced servers. 
That's where CloudBees comes into picture. CloudBees is trying these two categories of problems by offering two different suites of tools. 
  1. CloudBees DEV@cloud (or BUILD) provides tools for CI, SCM & Maven Repositories. 
  2. CloudBees RUN@cloud (or RUN) provides pre-installed java application servers, ready to run your JEE compliant code. 
How I use it?
I am sure, first thing you will do, go to cloudbees.com. Don't get temped with their sophisticated UI landing pages. Looks like lots of work and some complex process. (I wish, I could change their landing pages to be more KISS compliant, anyways). Main thing is, first you open an free account, with their FREE tier. (yes FREE option to try out every tool). As soon as you do that, you will have access to their tools which follows simple URLs. For example, if your account id is johndoe, then typical urls looks like
  • https://forge.cloudbees.com/a/johndoe/  - for SVN repos and Maven repos. You get 2GB free, combined for both. 
    • https://svn-johndoe.forge.cloudbees.com/project01
    • https://repository-johndoe.forge.cloudbees.com/snapshot/ (& release too.)
  • https://johndoe.ci.cloudbees.com/  - Jenkins landing page. Create jobs, configure it. Very much intuitive.
  • (Hopefully in future) https://johndoe.tasks.cloudbees.com/
For you run time needs
  • https://run.cloudbees.com/a/johndoe#db-manage  , yes you DB too. Free 5MB of MySQL, to get you started. If you already have big data set, I will recommend to keep Amazon RDS (or Xeround) in mind.  
  • https://run.cloudbees.com/a/johndoe#app-manage You can provision Tomcat or JBoss (and some other kinds too. Here is list
Apart from these in-house tools, CloudBees provide 3rd Party integrations. It's good to have integrations with other hosted solution providers, who are already market leaders. Here is complete list.

End Note:
We are living in age of cloud computing and there are lots of services are popping up. Also it has become important for us that we realize the real value & utilize cloud-based-services and more focused on actual productivity. In my case, I would have spent weeks in perfecting Jenkins (or Hudson), installing Subversion server, installing Maven repositories on Amazon EC2 infrastructure, but now, I have spent 2 days in navigating CloudBees and now I am thinking more of functional goals, not infrastructure tasks.

I have argued with myself, in self-hosting tools, I get much cheaper & unlimited CPU time. But I will be wasting my 80+ hours on perfecting it. Plus reliability of self-hosting service is definitely questionable.

Links to bookmark

Wednesday, March 7, 2012

Comparing iPads

Today Apple announced new iPad 3 with new features and upgraded path.
Below is sheet comparing Kindle Fire / iPad2 and iPad3.

Here is summary of missing information for iPad 3

  • Price for wi-fi (16GB/32GB/64GB) = $499 / $599 / $699
  • Price for 4G LTE (16GB/32GB/64GB) = $629 / $729 / $829


Networking:

  • New iPad 3 now has 21Mbps HSPA+ and DC-HSDPA at 42Mbps, with LTE taking the cake at 73Mbps.


New features:

  • No SIRI, but voice dictation instead of typing on keyboard.
  • 1080p video recording
  • 5-megapixel backside illuminated sensor on the back, 5-element lens, IR filter, and ISP built into ​the A5X chip.
  • iSight camera.


Monday, October 3, 2011

Why Certified and Why No Non-Certified?

This topic has come up many times. And even #MartinFowler wrote a blog about this. Recently I was doing code review, found a code snippet. Let me show you a simplified code snippet.

public boolean isEligible(List list) {
  boolean isEligible = false;
  for (int i = 0;i < list.size(); i++) {
if (list.get(i) == 1) {
     isEligible = true;
}
  }
  return isEligible;
}
Now, when I asked developer to put in break statement, he replied, it's small array. Though he was right, as there is not much performance penalty, but that code was wrong from "certified" developer point of view. And this pretty much sums up difference b/w certified & non-certified developer. 

I am a certified Java programmer (eleven years back) but whenever I do code reviews, looking at this kind of code, really makes me fire that developer. It's not that, if you are not certified, you are not good or you are not capable, but it makes difference, how you started programming.

From my point of view, mostly non-certified programmers come in two categories.
  1. Very experience programmer, who started programming in 80s something.
  2. Comparatively newer breed of programmers after IT boom in late 90s.

First category of programmers, most of them, never bothered to get certified, as they been programming enough long time, to optimize code at assembly level. I always end up learning something new from them. (In-fact, they would have optimized above mentioned code, to use iterator and stored list.size() in one local variable :) )
But after IT boom in late 90s, lots of college graduates jumped into programming (where is $$). Now, when they got jobs and did programming in languages like Java, no body really code reviewed their code and nobody did performance analysis at code loop level. And they were never penalized for that, they continued programming like this. If I interview them, they might know difference b/w stateless and stateful EJBs but no idea about IOC pattern. Are they programmers in true sense? Have they given serious enough preference to their skills set, to get certified in that.

You can say, certified programmers got certified only because, they can get better jobs. And you are right. But getting certifications, also made you complete programmer and make you think, before you commit your code. Hence if given choice of hiring someone for my team, I will go for certified programmer (unless he/she flunk my java/jee questions). 

To end my blog entry, here is another code example, from java developer, who has 8yrs of experience (and guess what? :)) . Same developer also wrote MyService class.
(see technical requirement as javadoc)
/** Finds service and invoke it.
      If service is not enabled, then don't invoke it.
**/
public void findAndInvoke() throws Exception{
  try {
         MyService service = serviceFinder.findService("MyService");
service.invoke();
  } catch (NullPointerException ex) {
      logger.log("Service is not enabled, hence ignoring");
  }
}