Where are the Java User Groups in Vietnam and in South-East Asia?

I’ve been wondering about this nearly three years ago already, looking for Java Communities in Ho Chi Minh City and Vietnam. Now I picked up an interest in this question again. While there has been tons of cool developments in other communities (Agile Vietnam, for example), there seems to be nothing new about good ol’ Java.

Especially looking at the Word Map of (registered) Java User Groups at http://www.java.net/jug-profile-map makes me wonder where all the JUG’s are in South-East Asia.

Even in more “mature” locations like Singapore, there doesn’t seem to be much around as I recently learned here.

Java, anyone? Watch out, I’m looking for you. And oh, if anybody is interesting in getting together and bringing Java forward in Vietnam, just drop a comment below or send me a message.

BarcampSaigon 2010

Yesterday I spent (half) a day at BarcampSaigon 2010 on the campus of RMIT in Ho Chi Minh City. I have never been to a Barcamp before and had high hopes for this event. In 2010 I had many opportunities to dive into tech communities in Saigon through similar events and I realized over and over again how much passion and determination there is around. Vietnam not only produces lots of tech talent, it also provides a fruitful ground for entrepreneurial minds. Barcamp seemed to be the ideal platform to meet, to share, to learn, and to boost the momentum that is already there.

I was more than impressed to see my expectations exceeded. Around 480 participants brought a lot of passion and participation, excellent speakers and presentations, and a noteworthy focus on entrepreneurship and startups. I’m happy to have participated, I’m sad that it’s over, and I’m looking forward to BarcampSaigon 2011.

The closing session at around 4PM

Check out more pictures of BarcampSaigon 2010 here on Facebook.

A brand-new Groovy / Grails user group Vietnam

In previous posts I’ve already been trying to explore software development communities in Vietnam. Since I am working with Grails in one of my current projects (very enjoyable!) I thought I’d start an experiment and found the “Groovy/Grails Usergroup Vietnam“.

After letting it sit for a couple of days I almost forgot about it until someone actually found the site, became a member and started a discussion! Admittedly, the discussion wasn’t about Groovy and Grails but rather why it’s so freakin empty on this page but still, it’s a member and a discussion.

So, Java people out there, let’s just continue with the experiment, invite more people and see where it goes. The actual community might really be very very small in Vietnam but maybe even more of a reason to get together here.

You’re not sure what Grails actually is? In very short I would describe it as “Ruby on Rails for Java” (is that ok to call it that?) and as a very entertaining and light-weight way of developing web applications based on Java. For more please check out the grails.org or the Wikipedia article or Google.

If you’re interested now, please join here: http://groups.google.com/group/groovy-grails-vietnam. And if you think the idea’s even more stupid than offering shoeshine for flip-flops, then join the comments below.

Coffee shops and other tools for small software startup teams

In all my years back home I haven’t really noticed something that is very apparent in Vietnam: people working in coffee shops. Sure, you see students in cafe’s, people with laptops or people reading documents but here it’s a very common thing to do actual work in a coffee shop. No upfront investement in real estate, no contracts and it scales well whenever you need more space, or less, or just want to go somewhere else. Sounds a little bit like cloud computing.

While a decent office has some advantages on its own, coffee shops are definitely a way to go for small startup-like teams, at least here in Vietnam. In case you’re developing software you’re probably going to need a little more than just a chair, a table, a laptop and a Ca Phe Sua Da. If you want to keep your flexibility and make sure, your whole team has access to all they need where ever they are, it’s often best to chose hosted solutions. Let’s have a look at what you might need:

Version control repository plus bug tracking

unfuddle.com: the free plan comes with SVN/GIT repositories as well as tools for milestone planning, bug tracking and a calendar. One project and two developers are included, that’s often enough to set up a project and get going. For 9 USD / month 10 developers can work on a project and for 24$ a month it comes with SSL (if that’s necessary). It’s rather slow here in Vietnam but I never had any problems connecting to my repository. Your source code is definitely something that needs to be on the web, it just gives you so much freedom to work outside and collaborate with your colleagues who just happen to prefer a different coffee shop.

Some other repository providers worth checking out: BeanStalk, Assembla, or ProjectLocker.

Some bug trackers worth checking out: well, you tell me, I’ve got no experience with a) free b) web-based c) hosted bug trackers somehow. Or maybe I never produced bugs and that’s why.

Requirements management

pivotaltracker.com: requirements tool for agile projects, especially those closely following Scrum. Although everything could as well be packed into an Excel sheet, Pivotal Tracker comes with some nice features around iterations and velocity tracking that make it worth checking it out. It’s free to use and it there’s even an Android app so that you can access your user stories and product backlog wherever you are. Limited use cases for that one, I know, but I just loved to be able to add product ideas directly to my icebox whenever I happen to have those ideas.

Some others worth checking out: a Google Docs spreadsheet. It might sound like a joke, but hey, you’re just starting up, it takes 5 minutes to create the right document and then you get going and stop thinking about the right tool for the job, because you have it already.

Continuous integration

mikeci.com: An optional yet strongly recommended part in between developing something and running it in production is integration testing, or even better: continuous integration. There aren’t many providers out there who offer that as a service. One I’ve recently joined is MikeCI.com. If you use Maven, Ant or Rake (this one still in beta) and have it hosted in a SVN, GIT or a Mercurial repository, then setting up CI is as easy as pie. It also supports different polling cyles and email notification to make sure you don’t miss a failed build. MikeCI is not free but starts with a reasonable 10 USD / month. Two more plans with 49 and 99 USD / months make sure it scales with you. It’s very nice to have this service provided, although the power and extendability of Hudson make it a though choice whether you really outsource continuous integration. You might just end up doing CI on your laptop instead.

Some others worth checking out: as mentioned, do it on your laptop. Install a Tomcat, drop in Hudson, configure your project, activate polling to your repository and then let it run in the background. You will fall in love with it very soon.

Web hosting

Hosting. A lot is changing right for hosting of web applications, all towards something cloud-based. But hosting is still something worth to take the time and look into it. It might often not be the cheapest to go for a cloud provider and prices are probably something more important in early stages of startup projects. Or you choose to decide that your own time is more important than a few extra dollars a month and decide to go for a cloud provider to save time for administration, setup and operation of own servers. I am a big fan of CloudFoundry because it reduces all that to an absolute minimum. Java applications only here, but there might be others out there.

Google App Engine: Google’s platform-as-a-service offering comes with free setup and basically won’t cost any money until you’re really starting to get traffic to your website. This might sound tempting but App Engine’s absolute strengths are elsewhere, in creating web applications that will scale perfectly inside Google’s cloud infrastructure. But this requires some serious changes in the way we learned to develop web applications over the last years, so you should think about it twice. Especially if experience with app engine is limited and time-to-market is crucial, it’s probably a bad idea to go for it now.

Some others worth checking out: Amazon EC2 (plus 3rd-party tools on top, like CloudFoundry), all hosting provider with VPS offerings (no cloud, but often more power for a lot less money), vmforce.com (a promising choice for Java applications, coming in fall 2010)

Good old office documents, spreadsheets and presentations

Google Docs: Documents, spreadsheets and presentations are always needed, no matter what you’re about to create in particular. While MS Office is still the office suite of choice in business, Google Docs is perfect for distributed and collaborating teams. Shared document folders, concurrent editing of documents and nice little features like in-document chatting make it the perfect choice for your team. Another plus: Google is always fast, here in Vietnam and most likely everywhere else.

Alternatives: if you’re not into concurrent editing of documents and you don’t mind still sending documents around via email instead of just links to a common workspace, then you can as well stick to MS Office or Open Office.

Backups

dropbox.com: dropbox.com is popular, it’s easy to use and the usual freemium model offers a 2 GB plan for free. Millions of users somehow tell me they are reliable enough to use them (they use Amazon S3 as storage), only connection speed was rather slow from Vietnam.

While remote backups (both words are important) are something crucial, just take a look at what we talked about so far and think about how important it actually really is: your source code is by now in a safe remote repository, your documents are on Google, your requirements in Pivotal Tracker (or also on Google), what is really left on your laptop to back up and protect? Not much, isn’t it.

Communication and collaboration

Google Wave: Everyone knows Google Wave as one of Google Labs’ products that produced a lot of waves in the beginning and quickly ended up being forgotten. So, why the hell does it appear here? It’s a shame that it doesn’t work in practice as it has some nice approaches that might have just needed some fine-tuning here and there to make it really usable.

Another reason why it appears here is because I want you to complain and tell me what you’re using to collaborate. Of course there are the usual suspects that might not be worth mentioning anymore, such as Yahoo, Skype, emails and, wait for it, meeting in person (like for example working in the same coffee shop).

I’d be interested to hear who else is working in coffee shops and how your infrastructure looks like.

MobileDevCamp Saigon and a Foursquare rival “Made in Vietnam”

Yesterday I had the chance to attend MobileDevCamp Saigon for some hours in the morning. It was organized by Orance France Telecom, TechPropulsionLabs, and FaberNovel, and was held on Saturday and Sunday at the University of Technology on Ly Tryong Kiet street in Ho Chi Minh City. The 2-day event revolved around mobile applications, largest audience group were developers of mobile applications and those interested in it. From 80 participants in the last year the event jumped up to more than 230 pre-registrations in this year. Although the number of actual participants might be a little lower it shows the increasing interest in mobile applications and the eagerness of young Vietnamese developers to get things started in this booming field.

Saturday morning was organized in the style of a conference. On four concurrent tracks local developers, marketing specialists and foreign experts held 30-minutes presentations. Technical topics were covered (of course), as well as marketing of mobile applications or introductory talks about different areas. Main language was Vietnamese while slides and presentations given by foreigners were in English. In part two of the event, a 24-hours development contest started on Saturday afternoon that allowed groups of up to 4 developers to compete against each other.

One of the highlights of MobileDevCamp 2010 was the announcement of a new location-based service “Made in Vietnam”. The new start-up company “Skunkworks”, based in Ho Chi Minh City, has spent the last months developing a mobile service whose long-term vision is to compete on the international market, then most likely with Foursquare and GoWalla. Its main feature is the well-known “check in”. Many other features will complement this, e.g. inviting friends to locations, sharing opinions and tips around locations, and discover new locations nearby. Vietnam will be the first market Skunkworks concentrates on, but expansion will start soon, probably first into other Asian countries. Although announced on MobileDevCamp, the service is still under development. It is planned to launch a “beta” phase in around one month from now (let’s say the beginning of September, just to know when it’s time to get impatient). By then, at least the app for Android phones will be available for download, the iPhone version is also under development. A name for the service has not been revealed yet, nor more concrete information about the business model and long-term strategies. I am definitely curious to see where it goes.

Scrum Introduction Session with Daniel Shupp

Today I’ve joined a Scrum introduction session held by Daniel Shupp, CTO of TechPropulsionLabs, at Highlands Coffee on Nugyen Du in Ho Chi Minh City. In a friendly an open atmosphere Daniel walked us through the basic elements of Scrum and its application in agile software development projects. Besides pure knowledge enriched by helpful real-world examples from Daniel’s extensive software development experience, it also offered plenty of opportunities to ask questions, to right wrong assumptions about what Scrum is and how it works and to get a feeling how an adoption of Scrum in own development processes would be like. Daniel described it as part of what his company wants to give back to the local development community, with more similar events hopefully to come.

TechPropulsionLabs (www.techpropulsionlabs.com) develops software for seed and early-stage startups around the world and is a keen advocate of agile software development and Scrum.

Hopefully this helps to spread the word and raise awareness for the advantages Scrum has to offer. If you’re interested to follow this development in Vietnam, TechPropulsionLabs certainly is a company to keep in mind. Incidentally, my friend Nhan, working as a Scrum Master at Swiss IT Bridge, recently posted his opinion on Scrum in Vietnam on his blog. For a short introduction about Scrum just start with Wikipedia article and go from there.

Thank you again, Daniel, for the insightful and enjoyable session.

Java Communities in Ho Chi Minh City and Vietnam

Coming from one of the leading IT countries in the world, I was used to being surrounded by lots of resources about whatever I needed in order learn and to grow and develop in my profession, software engineering with focus on custom software development in Java. There are tens of thousands of books in my own language, more software development companies that I could ever apply for, conferences specialising in everything that was, is, or will soon be mainstream, and well, more communities that I could ever participate in and contribute to. Coming to Vietnam I found myself  in an environment that doesn’t offer most of what I just mentioned. On one hand that’s because there’s probably not as much going on as in my country yet and I’m thrilled to see what this dynamic country will have to offer tomorrow and the day after. On the other hand I guess there’s a lot hidden from me and waiting to be discovered.

So I started to look around and try to discover what’s going on out there. I wanted to stick to Java developers and Java communities first. It is what seemed to make the most sense to me although I had a feeling already that I shouldn’t be too picky. Here’s a brief summary of what I found so far:

  • First checks for Java User Groups (JUG) and Java meetups on meetup.com without success.
  • One website that’s really worth mentioning is javavietnam.org. Basically a forum for Java developers, it has an incredible number of registered users and quite some activity. Unfortunately for me, it’s mostly in Vietnamese. Incredible job though! I talked to one of the founders and heard that there also used to be real meetups in town and there are plans to revive them. Would love to see that and participate.
  • There’s also some activity in groups on LinkedIn, e.g. in Vietnam IT Community, in Vietnam Digital or in the IT subgroup of Linkin Vietnam. Not at all focused on Java or even software development but developers are hanging out there and if you’re looking to connect with some of them, you might be right.
  • Twitter is always a good source of information and so I’m also trying to expand my Twitter network of English-speaking and Vietnamese-speaking software developers. Java is also limited here, but I’m making progress. I started a list of the developers Vietnam I found on Twitter and hope it will grow over time. You’re invited to follow.
  • There has been a spin-off of the famous German JAX (originally for “Java, Apache, XML”, but by now covering the entire spectrum of enterprise software development) conferences, the “JAX Asia 2008″ in Singapore. Not exactly Vietnam, but close enough to make a trip for a conference that’s really worth it. Unfortunately it remained to be a one-time experiment that apparently just failed. I hope someone will try it again soon.
  • One more question I am asking myself is how popular Java really is in Vietnam. I am still trying to get reliable statistics and/or just a big number of personal opinions on that. Feel free to comment…

For the moment that’s about it, my current state of research. I found a lot more activity once I widened my search parameters (so to speak), e.g.  for “software development” (then including .NET development and others), “software” in general (including especially the whole field of ERP and CRM) or just plain “IT” (including Web 2.0, social media, digital marketing and such). More about that in one of the next posts. For now I just stick to what the title of this post promised, Java.

Deploy web apps in Tomcat with Ant and Cargo

In one of my current projects I am working on increasing the quality of a large software development team. Besides a long list of measures this also includes establishing an automated build and integration test cycle. For web applications this also means an automated deployment into a container of choice. The existing project environment gave me the following constraints:

  • Ant as build tool (I’d rather use Maven, but that’s how it is)
  • Tomcat 5.x as container (this rules out e.g. Jetty, which might be from some points of view easier to handle for automated tasks)
  • Should run on Windows and Linux (which kind of rules out running Tomcat executables)
  • Should be able to perform different builds and Tomcat deployments in parallel (which rules out having one pre-installed Tomcat instance on the server which is used for deployments and tests)

Furthermore everything should be triggered from Hudson, which isn’t that difficult anymore once it runs in Ant. After doing some research and in a first attempt trying to implement start and stop routines myself in Ant  I finally decided to drop that and give Cargo (http://cargo.codehaus.org) a shot. And frankly, I was exciting getting it to run. After all it was much less tedious than doing everything myself (well, that’s how it should be). I was a little disappointed about missing end-to-end examples which caused me to go the walk of trial and error until I have figured out what I wanted. That’s why I’d like to summarize what I did.

Cargo Ant Tasks

First of all download the two Cargo jar files and add the Ant tasks definition.

<taskdef resource="cargo.tasks">
	<classpath>
		<pathelement path="lib/cargo-ant-1.0.jar" />
		<pathelement path="lib/cargo-core-uberjar-1.0.jar" />
		<pathelement path="lib/commons-discovery-0.4.jar" />
		<pathelement path="lib/commons-logging-1.1.1.jar" />
		<pathelement path="lib/xercesImpl-2.4.0.jar" />
		<pathelement path="lib/dom4j-1.6.1.jar" />
		<pathelement path="lib/jaxen-1.1.2.jar" />
	</classpath>
</taskdef>

Remarks:

  1. I didn’t get Tomcat 5.5.29 to work with the most recent version 1.0.1. After a little while I tried 1.0 and it worked fine for me. So for now I’ll just stick to that. I might look into this again later.
  2. Besides the two cargo JAR files I also had to include some dependencies. As I didn’t want to put them into the Ant classpath or give them as additional dependencies on command line I decided to include them here.

Starting up Tomcat via Cargo in Ant

The main piece of Ant code is about executing the Cargo task which looks in my case like this:

<cargo containerId="tomcat5x" home="tomcat-template" output="build/tomcat-output.log" log="build/cargo.log" action="start" wait="false">
	<configuration type="standalone" home="build/tomcat-conf">
		<property name="cargo.servlet.port" value="${tomcat.port}" />
		<property name="cargo.logging" value="high" />
		<property name="cargo.jvmargs" value="-Xms1024m -Xmx1024m" />
		<deployable type="war" file="prepare/webapp1.war" />
		<deployable type="war" file="prepare/webapp2.war" />
	</configuration>
</cargo>

Remarks:

  1. I need to use Tomcat 5.5.29 so the Cargo containerId is set to tomcat5x. See also: List of available containers.
  2. The container “home” attribute is where Cargo is looking for a template Tomcat installation. In my case there is a full Tomcat as downloaded from the website but everything not necessary was removed (esp. all sorts of docs). The configuration attribute “home” is the directory where Cargo copies and configures the Tomcat instance that will be started up. In my case this is happening under a “build” directory. I also delete this directory at the beginning of every Ant build to have a 100% clean environment on every run.
  3. The action start tells Cargo to start up the container.
  4. The “wait” attribute is set to false, otherwise Cargo blocks Ant after the server is started. As I wanted to perform integration tests afterwards I needed a non-blocking startup. A nice debugging method is to set this attribute temporarily to true, run the Ant script, access your web app manually (e.g. with a browser) and then kill Tomcat again by cancelling your Ant execution with Ctrl+C.
  5. Since I am aiming at starting up multiple Tomcats at the same time I am assigning the “cargo.servlet.port” (which effectively sets the HTTP connector port in Tomcat’s servlet.xml) dynamically, i.e. with an Ant property.
  6. JVM args can also be passed to the container startup. For also: List of available properties.
  7. I have two wars that I want to deploy into this container so I also have two deployable tags. I put my wars into a prepare folder because I needed to manipulate them before running my tests. At this point Ant could pull the wars as well from build folders of other projects, from a repository or from whereever.

This launched my Tomcat successfully and without problems with Ant. Log output from Cargo as well as from Tomcat (the catalina.out) will be written into the specified logfiles.

Checking availability of your web app

At this point you can start to test your web application. You might want to add another little test before that in order to find out if everything went fine and your application is really actually available. One way of doing so works directly in Ant and looks like that:

<echo message="Ping web app..." />
<waitfor maxwait="10" maxwaitunit="second" timeoutproperty="webapp-not-available">
	<and>
		<socket server="localhost" port="${tomcat.port}" />
		<http url="http://localhost:${tomcat.port}/myWebApp/testPath123" errorsBeginAt="201" />
	</and>
</waitfor>
<fail if="webapp-not-available" message="Web app is not available." />
<echo message="Web app is available." />

Remarks:

  1. Note the Tomcat port, which is of course set to the same as above, as this will be set dynamically in my case.
  2. ErrorsBeginAt is set to 201, as this page should usually return a 200 OK and everything “above” should indicate an error to Ant.

That’s it

That was about everything it took to get Tomcat running under Windows and Linux and so far without problems. There aren’t any more problems also when the whole thing is started from Hudson, it just works well for me. Right now this configuration helps us to build up a pool of regression tests into our CI environment containing e.g. JMeter and Selenium tests.

Hello World!

Welcome to my new blog!

I am a software engineer currently located in Ho Chi Minh City, Vietnam, in the heart of South East Asia. I have done technical work (software development in particular) for a long time now, starting before I even started my undergraduate program until now, having obtained a BSc. and a MSc., founded and left an IT consulting company, and gathered more than one and a half years of working experience in Vietnam, on the way. It’s not a straight path that led me here but I’d take it again. Although I am still doing technical work (currently challenging myself with being a team lead for Java developers, employed by US company who has its development unit in Vietnam), I am finding it more and more interesting to combine software development with softer topics like e (international) project management, organizational behavior and the ever-interesting studies of cultural differences and commonalities.

What does that mean for you and me now? Well, I’m gonna check out if there’s enough in it to blog about and hope something interesting will come up eventually… Hope to see you again here!