Archive for November, 2011

Installing Heroku CLI and Git …in 10 minutes!

If you are planning on playing with heroku, this post will help you get started in setting up your local machine with heroku CLI (command line interface) and Git (open source cloud based version control system).

Note that this post is a simplified and more detailed version of heroku quickstart article available at :

Update — If you are using Mac OSX, you might want to just download the Heroku Toolbelt ( The toolbelt (heroku CLI & Git ) will provide you everything you need to get started using Heroku!


1. Download Git for your OS and sign up for free Git account

2. A Heroku user account. Signup is free and instant.

3. Since heroku CLI is a ruby gem, in order to install it, you will need to install ruby locally on your machine.Installing the latest Ruby version with RVM is simply done by typing :

rvm install 1.9.3.

Note that if you do not have rvm installed, you can install it on mac/linux by:

$ bash curl -s

You might need to prefix the    command using sudo ($ sudo curl -s

4. Ensure that you have ruby installed by typing ruby –version

5. Using command line install heroku by typing:

$gem install heroku

Note that this will prompt you for your heroku credentials (which you used at step 2). After this step is finished your email address and API token will be saved to ~/.heroku/credentials

Also note that you might want to prefix the command with sudo (sudo gem install heroku) to make the command write the gem to the destination directories. If this still fails, try running:

$sudo gem install addressable

and then execute $sudo gem install heroku

6. It’s generally a good idea to add your public key immediately after installing the heroku gem so that you can use git to push or clone Heroku app repositories:

$heroku keys:add

sample output:

Enter your heroku crendentials:



Uploading ssh public key /Users/ssharaf/.ssh/

7. At this point, you should be ready to start playing with the coolest PAAS (platform as a service) aka heroku!

Note that for application development you might want to install maven and OpenJDK v6 (for Java)

, , , , ,

Leave a comment

JavaScript – Using AJAX with JSON to retrieve weather information

JavaScript has been around for over a decade now. Recent years has seen a growth in its popularity especially with the introduction of AJAX, JSON and some other frameworks and libraries e.g. dojo.

In this post, we will create a simple web page which will display a simple form for a user to enter zip code. Based on the zip code entered, we will show how to make an AJAX call to retrieve weather information from Yahoo in JSON data format.

Step 1 –

If you are using Eclipse, create an empty web project. In case if you want to use maven, you can use the following command to create a simple java web project:

$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp -DartifactId=JSWebApp -DgroupId=com.ssharaf.webapp -Dversion=1.0-SNAPSHOT -Dpackage=com.ssharaf.webapp

The above command will create a web project with name JSWebApp (as specified in the maven command line parameter -DartifactId=JSWebApp).

Navigate to

Step 2 –

And open index.html in your favorite editor (mine is VI). Replace the existing content in the file by the one below:



<script src=”ajaxlab.js” type=”text/javascript”></script>



<h1>Weather Portlet</h1>

Enter zip code to find weather:<br/>

<input type=”text”></input>


<div id=”output”></div>



Now add the following javascript file to the location (JSWebApp/src/main/webapp).

====================begin javascript code======================

ajaxlab = {};

ajaxlab.query = “select * from weather.forecast where location=”;
//append zipcode to query to get proper YQL

ajaxlab.yahoourl = “;;

ajaxlab.getJSONP = function(url, params, callback) {
var scriptTag = document.createElement(“script”);
scriptTag.type = “text/javascript”;
var functionName = “x”+(new Date().getTime());
var firstParam = true;
for (var key in params) {
url += (firstParam ? ‘?’ : ‘&’) + key + ‘=’ + params[key];
firstParam = false;
scriptTag.src = url + “&callback=ajaxlab.” + functionName;
ajaxlab[functionName] = function(data) {
delete ajaxlab[functionName];

ajaxlab.start = function() {
document.getElementsByTagName(“button”)[0].addEventListener(“click”, function(e){
var zip = document.getElementsByTagName(“input”)[0].value;
ajaxlab.getJSONP(ajaxlab.yahoourl, { q : encodeURIComponent(ajaxlab.query + zip), format:”json” }, ajaxlab.render);

ajaxlab.render = function(result) {
document.getElementById(“output”).innerHTML =

” + + “


window.onload = ajaxlab.start;

====================end javascript code======================

Step 3 –

Add the following jetty plugin to your project’s pom.xml file:


Once the Jetty plugin has been set up in the project POM file, the jetty:run goal is available:

$ mvn jetty:run

When running the preceding command for the first time, Maven will automatically download all dependencies and start the Jetty plugin.

Code View: Scroll / Show All
[INFO] Starting jetty 6.1.26 ...
2010-11-16 07:37:00.135:INFO::jetty-6.1.26
2010-11-16 07:37:00.247:INFO::No Transaction manager found - if your webapp requires one, please configure one.
2010-11-16 07:37:00.484:INFO::Started SelectChannelConnector@
[INFO] Started Jetty Server

Now testWebApp is running on localhost:8080/JSWebApp!

, , ,

Leave a comment

Create a simple Java Web App using Maven and Deploy to Heroku

This blog post will feature on creating a simple web application with a Maven Archetype plugin. The web application will:

  • Run in an embedded web application server (Jetty Server)
  • Have some dependencies added
  • Contain a simple servlet
  •  Generate a WAR file for deploying on heroku

1. Using Maven archetype:generate to create a web app which has an embedded Jetty Server (jetty-archetype-assembler) and a java class which starts the Jetty Server.

mvn archetype:generate -DarchetypeGroupId=org.mortbay.jetty.archetype -DarchetypeArtifactId=jetty-archetype-assembler -DarchetypeVersion=7.5.1.v20110908 -DgroupId=com.heroku.webapp -DartifactId=heroku1
thanks to John Simone & heroku team for working with Jetty team in creating this jetty-archetype-assembler!

2. This will generate a Java web project with standard web application structure. Inspect the pom.xml file and note that it has a maven app assembler plugin which will generate a script that sets up the required class path and runs the web application.


Important —

Use your favorite editor and delete this line from the pom.xml file:


This is necessary because this archetype relies on the local maven repository being present at runtime, which is not the case once the app is deployed on heroku.

3. Compile the project using mvn compile.

mvn compile
[INFO] Scanning for projects…
[INFO] ————————————————————————
[INFO] Building heroku1 1.0-SNAPSHOT
[INFO] ————————————————————————
[INFO] — maven-resources-plugin:2.4.3:resources (default-resources) @ heroku1 —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] — maven-compiler-plugin:2.3.2:compile (default-compile) @ heroku1 —
[INFO] Compiling 1 source file to /Users/ssharaf/heroku/heroku1/target/classes
[INFO] ————————————————————————
[INFO] ————————————————————————
[INFO] Total time: 2.079s
[INFO] Finished at: Thu Nov 17 20:40:08 PST 2011
[INFO] Final Memory: 8M/81M
[INFO] ————————————————————————


4. Now we can package it using mvn package:

mvn package

Output —

[INFO] Scanning for projects…
[INFO] ————————————————————————
[INFO] Building heroku1 1.0-SNAPSHOT
[INFO] ————————————————————————
[INFO] — maven-resources-plugin:2.4.3:resources (default-resources) @ heroku1 —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] — maven-compiler-plugin:2.3.2:compile (default-compile) @ heroku1 —
[INFO] Nothing to compile – all classes are up to date
[INFO] — maven-resources-plugin:2.4.3:testResources (default-testResources) @ heroku1 —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/ssharaf/heroku/heroku1/src/test/resources
[INFO] — maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ heroku1 —
[INFO] Nothing to compile – all classes are up to date
[INFO] — maven-surefire-plugin:2.7.2:test (default-test) @ heroku1 —
[INFO] No tests to run.
[INFO] Surefire report directory: /Users/ssharaf/heroku/heroku1/target/surefire-reports

There are no tests to run.

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] — maven-jar-plugin:2.3.1:jar (default-jar) @ heroku1 —
[INFO] Building jar: /Users/ssharaf/heroku/heroku1/target/heroku1-1.0-SNAPSHOT.jar
[INFO] — appassembler-maven-plugin:1.1.1:assemble (default) @ heroku1 —
[INFO] ————————————————————————
[INFO] ————————————————————————
[INFO] Total time: 2.496s
[INFO] Finished at: Thu Nov 17 20:41:15 PST 2011
[INFO] Final Memory: 5M/81M
[INFO] ————————————————————————


5. Next we create a Procfile which will define the process we want to run i.e. our main web app

I use VI editor on MAC.

e.g. vi Procfile

web:sh target/bin/webapp


6. Initialize the Git Repository by typing:

git init

now add the files using:

git add .

now commit the files to the repository using:

git commit -m “added heroku1 to the heroku cloud”

7. Now we are ready to create the Cedar Stack on heroku

$heroku create -s cedar

this will provision an application with some random name like cold-summer-876. Also it will configure git repository on heroku.

You can rename this to your app by using the heroku rename command.

e.g. $heroku rename heroku1

8. Lastly push the local git repository to heroku.

git push heroku master

This will take the whole git repository and upload it to heroku. Heroku recognizes it as java application using POM file and will use the dependencies defined to download appropriate artifacts. It will create a slug, which is basically a run time application instance. This slug gets replicated to a new dyno when we scale the app.

9. Now we can visit the app by using the command:

$heroku open

10. Some simple management commands to manage the app:

a. $heroku ps (shows the running processes)

b. $heroku log -t (will tail the logs)

c. $heroku scale web=2 (scale the web processes to 2)

d. $heroku releases (will show the last 2 releases)

Rel Change By When
—- ———————- ———- ———-
v33 Deploy d075337 ssharaf@salesforce.. 12 minutes ago
v32 Deploy 973f6e4 ssharaf@salesforce.. 16 minutes ago

Note that the content in the blog post was inspired by the tutorials on github by James Ward.


, , ,

Leave a comment

Java on Heroku

I will be doing a 3 part series on Java on Heroku — using Heroku’s latest cedar platform.
Stay tuned…

Leave a comment