Codegiest III is complete!

I'm a little behind mentioning this, but Codegeist III is officially over!

There was a burst of activity this year, bringing in fifty-three entries from forty-three different authors. There are some very ambitious entries as well, and some that I hope we will all continue to build on in the months to come.

We received entries in every category, despite the fact that the plugin framework was brand new in a few of our products. I know that figuring out the new plugin systems without all the documentation was rough going, but I'm thrilled that some competitors pushed through. And we're going to learn from what you've done in order to smooth out the process of building plugins for our newer products. We'll be adding to the documentation, the examples, and the plugin points in the near future.

We're in the process of judging all of the entries, and hope to announce the winners in the next two weeks. After the judging, all of these plugins will be moved into the main Plugin Libraries for continued use and development. In the meantime, feel free to use them and send feedback to the developers — they'd love to hear how things go in the real world. And developers are also free to continue improving their plugins if they want. Thanks to the magic of subversion, we'll look at the plugin as it was on the day the contest closed.

Thanks again to everyone who entered! I'm amazed at all you were able to accomplish. After the judging is complete, I'll highlight some of my favorite plugins in a separate post. But in the meantime, everyone is free to use the plugins as they are now, so go take a look at the great new stuff.

  • Comments Off

Atlassian User Groups in Boston and Paris this June

We're holding Atlassian User Groups in Boston and Paris this June and we want to see you there! User groups provide a unique opportunity to meet with Atlassian staff and developers, hear customer presentations, have the chance to learn from your peers and get some of those burning questions answered.

Highlights include:

  • Presentations by Atlassian and members of the community
  • Birds of a Feather sessions
  • Time to socialize afterwards with free food and drinks!

Boston Atlassian User Group

Date June 12, 2008
Time 2:00 - 7:00pm
Location Westin Waltham-Boston
70 Third Avenue
Waltham, MA 02451-7523
Signup & Details Visit this page for more info

Paris Atlassian User Group

(to be held primarily in French)
Date June 19, 2008
Time 9:00am - 2:00pm
Location
Salon Eisenhower
133, avenue des Champs Elysées, Paris
Signup & Details Visit this page for more info


Thanks to GlobalLogic for helping us to sponsor the Boston UG and Publicis Consultants for their sponsorship of the Paris UG!

  • Comments Off

Announcing the Atlassian T-Shirt Competition Winner…

Congratulations to Sherif Mansour for submitting the winning t-shirt! As winner, Sherif will be receiving an iPhone or iPod Touch-- his choice.

http___confluence.atlassian.com - Slideshow - Confluence.jpg

Thanks to everyone who submitted! The finalists will all be receiving shwanky Atlassian t-shirts for being such good sports, submitting some rad designs and putting up with us taking our sweet time to decide on the winner :D

  • Comments Off

Crowd 1.4 Brings Power to the People

The Atlassian Crowd team is proud to release Crowd 1.4! Highlights of this release include nested groups, a self-service console, a plugin framework that allows developers to write their own plugins for Crowd and lots and lots of other goodies that help ease the administrators' role and bring back "power to the people" :D

New features found in Crowd 1.4 include:

Nested Groups

Crowd 1.4 supports nested groups in LDAP directories. This means a group can now be a member of another group, making management of permissions much easier. For example, a Crowd-integrated Confluence or JIRA site will see users in sub-groups as members of the parent group. This diagram gives a great example of how nested groups can work in Confluence:

NestedGroupsDiagram.jpg

Self-Service Console

The new Self-Service Console gives you the option to allow any authorised Crowd user to update their own user profile and password and to view their authorisation details.

UserChangePassword_narrow.jpg

Novell eDirectory Connector

There's a new directory connector for Novell eDirectory. Crowd also supports read-only connections to an LDAP directory using the Posix schema. This is useful if you have a Unix installation and want to integrate it with an LDAP directory.

Plugin Framework

For the development community, a new plugin framework supports customised event listeners and password encoders.

For more details or to try a free, fully-functional 30-day evaluation of Crowd, check out this page.

To read more about this release, check out the release notes or read our press release below:

  • Comments Off

Confluence has a Selenium Build!

Last week, Matt Ryall and I have been trying to get a Selenium build up to test Confluence's Javascript features, especially the new drop down menus and page ordering tree. It wasn't easy, but I personally think it is definitely worth having these tests.

Below is a summary of the steps and problems we encountered in setting up the build.

1. Writing a Selenium Test

A few weeks back, I did a Selenium spike to see how easy it was to write a test that logged into Confluence and opened a add drop down menu. Surprisingly, this was very simple to do. I had to add the selenium client dependency in my test module and then used the Selenium Maven Plugin to start the Selenium server.

protected void setUp() throws Exception
{
  super.setUp();

  String serverLocation = "localhost";
  int serverPort = 4444;
  String browserStartString = "*firefox";
  baseUrl = "http://localhost:8080/confluence";

  sel = new DefaultSelenium(serverLocation, serverPort, browserStartString, baseUrl);
  sel.start();
}

public void testNewAddMenu() throws Throwable
{
  logInAsAdmin();
  assertEquals("Dashboard - Confluence", sel.getTitle());
  gotoPage("/display/" + TESTSPACE_KEY + "/Home");
  asserter.assertElementPresent("add-menu-link");
  sel.mouseMove("add-menu-link");
  assertTrue(sel.isVisible("createPageLink"));
  assertTrue(sel.isVisible("createNewsLink"));
}

2. Running the Selenium Test in Maven

During my spike, I also tried adding the selenium test I wrote above to the integration-test phase in maven. I had to add some config to start and stop the selenium server before running the tests.

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>selenium-maven-plugin</artifactId>

  <version>1.0-beta-2</version>

  <executions>
    <execution>
      <id>start-selenium</id>

      <phase>pre-integration-test</phase>
      <goals>
        <goal>start-server</goal>
      </goals>
      <configuration>

        <background>true</background>
        <port>${selenium.server.port}</port>
      </configuration>
    </execution>
    <execution>

      <id>stop-selenium</id>
      <phase>post-integration-test</phase>
      <goals>
         <goal>stop-server</goal>

      </goals>
    </execution>
  </executions>
</plugin>

3. Selenium Test Infrastructure

Currently our acceptance tests do not have the best code infrastructure. For example, we have a huge AbstractConfluenceAcceptanceTest class that all the acceptance tests extend and it basically has everything in there. So it was nice to be able to start from scratch and split things out into separate classes. As we wrote more tests, we saw a lot of code duplication and realised how silly the DefaultSelenium client was. We ended up extending the default one to override methods with some sensible implementations. One example is the the client.open(url) method that opens the browser up in the provided url. In a test, you will always need to wait for the page to load before making assertions or clicking/typing on the page.

SeleniumClient
/**
     * Unlike {@link DefaultSelenium#open}, this opens the provided URL relative to the application context path.
     * It also waits for the page to load -- a maximum of five seconds before returning.
     */
    @Override
    public void open(String url)
    {
        super.open(contextPath + url);
        super.waitForPageToLoad(MAX_WAIT_TIME);
    }

The Selenium client also doesn't provide any convenient assertion methods. The Jira guys seemed to have a nice assertions class, so we just 'borrowed' it :) Ideally, we will have common code like this in a separate project.

4. Setting up the Bamboo build

To run the Selenium tests in a separate build, we wrote a new pom that only ran Selenium tests after Confluence setup. This was fairly trivial and passed on our local machine.

Up until this point, everything seemed surprisingly easy. Matt & I were starting to really like the Selenium tests... (You can actually see Firefox launched and it flickering through the tests!) However, it was when we actually setup and the build in bamboo that we started to hit a few problems.

Firefox wouldn't start in Bamboo

Since we got the tests running locally, we thought it wouldn't be much more difficult to run on Bamboo. The first problem we encountered when we kicked off the build was that firefox wouldn't launch and therefore not even run the tests. The first error message we got was something about the Selenium server being started on a headless system and was smart enough to suggest using the selenium:xvfb goal (also provided by the Selenium Maven Plugin). So we did as it said and modified the pom to started the Xvfb instance before starting the Selenium server.

After that, we got no other error message, but Firefox still wouldn't start. It would simply fail and eventually timeout. We got to a point where we could ssh into the bamboo box and manually run the maven command to run the tests on the bamboo boxes. Strangely this worked?! We decided to take a look at Jira's build and see what the difference was. This is when we realised that they were running a vncserver before the running the tests! It seems like bamboo doesn't have access to a console and this causing problems when Selenium tries to launch Firefox. As soon as we ran the build with a vncserver, we actually got the tests running - but not quite all passing...

Intermittent Test Failures

The annoying thing about Selenium is trying to guess how much you want to wait for things to load and appear before making assertions and continue on with the test. For example, when you click the 'Edit Labels' link on a Confluence page, the edit labels input div becomes visible. So how long do I need to wait in the test for it to become visible before actually testing? The wait time you specify to the Selenium client is a maximum wait time, however you still don't want to be waiting too long for a genuine failure. The problem is when you run the tests locally, you usually don't have to make the wait for very long (1~2 seconds). However, this is a different story on Bamboo. We decided to bump the default wait to 5 seconds and for extra slow pages (like the edit page) to 10 seconds.

The confluence.editor.ajax.disable Property

There was one other problem that I encountered, but is purely specific to Confluence. There was this one particular test that continuously failed when running the tests in maven but not in Idea. WHY? The only difference was that Confluence was started up by cargo through maven.... It took me a very long and frustrating few hours to figure out why...

Up until now, we haven't been able to test the ajax requests (known as 'heartbeats') that Confluence sends for concurrent edits to the same page. During our other test builds, apparently this continuous heartbeat being sent during tests were causing problems. So they decided to add a nice system property to disable this for our tests and was included in the parent pom of our test runner module. And guess what my failing tests was actually testing? It was testing for concurrent edits on the same page and thus relied on the heartbeats being sent... I have learnt my lesson and will always make sure to check the parent pom before using it blindly!

5. Watch the Build go Green

Despite all the problems we had, the 9 tests we wrote are passing right now :) The next step would probably be to setup a Selenium build with IE.... which should also be quite interesting...

seleniumbuild.png
  • Comments Off

Codegeist III closes Friday!

UPDATE: corrected the closing time. It's 1pm PST, not 11am PST.

Just a quick note to remind everyone that Codegeist III closes this Friday, May 9th at 1pm PST. We've had a tremendous response so far: forty-one plugins! Go check out all the terrific entries. And if you're a user -- there's no reason that you can't start using these plugins yourselves right now! Developers, there are still a few days to get your entries posted and get feedback on your plugin. As many of the people who posted early have found, a few beta testers can be very valuable!

If you've already posted your entry, you might use these final days to polish your plugin homepage, your documentation and your tests. We'll use the homepages to understand what your plugin does -- so it's in your interest to make it as attractive and enticing as possible. Tell us why your plugin is great, and why we should find it useful. And be sure to add lots of screenshots! (Don't forget Skitch!).

As always, if you have questions or if I can help out with anything, please get in touch. I can't wait to see all of the Codegeist entries on Friday!

  • Comments Off

World, meet JIRA Studio. JIRA Studio, the world.

carnation_white.jpg

About a month ago, we quietly launched JIRA Studio. Now JavaOne is here, the official launching platform for JIRA Studio, and the time to be quiet has come to an end! We started briefing the press, bloggers and analysts last week and earlier today we sent out a press release (which you can find below). We've updated the JIRA Studio home page on our website with a bunch of new content, including a cool video and a revised feature tour. Best of all, we're featuring JIRA Studio at our booth at JavaOne, so stop on by and say hello!

But most importantly, we've been listening to your feedback, and have updated JIRA Studio itself with new features, new pricing, and a special promotion:

Data Imports

We now offer a data importing service when you begin your use of JIRA Studio. At no additional cost, we'll import your Subversion or JIRA Repository into your JIRA Studio instance.

Web-based Subversion Manager

The new Subversion Repository Manager allows you to manage the permissions for your project's Subversion repository.

New Volume Pricing

In March, many of you let us know that you wanted volume discounts on JIRA Studio purchases. We listened, and are now offering several tiers of pricing. Full details are on the JIRA Studio pricing page.

Special offer for existing customers

If you currently use one or more of our tools, and want to switch over to JIRA Studio, we're offering a 25% discount on your first monthly or yearly purchase. Details are, again, on the JIRA Studio pricing page.


And finally, here is the full text of the Press Release we sent out earlier today:

Announcing Atlassian JIRA Studio: What SaaS for Developers Is Meant to Be

Newest product gives developers an on-demand environment based on Atlassian's best selling tools


May 6, 2008 (Business Wire), JavaOne Conference, San Francisco, CA - Atlassian today announced the release of JIRA Studio, the all-in-one, on-demand development suite. JIRA Studio is a hosted development environment that solves one of the biggest headaches for developers: the deployment and maintenance of their tools. JIRA Studio includes many of Atlassian's award-winning products and provides a world-class issue tracker, an enterprise wiki for collaboration, as well as the ability to manage the code repository and manage code reviews.

A recent McKinsey report (May 2007) highlights the growth of software as a service (SaaS) because SaaS provides, "more frequent upgrades, a lower cost of ownership and a higher level of service". McKinsey expects that development tools will migrate to SaaS by 2010-- however, Atlassian is bringing SaaS to developers today. JIRA Studio fills that niche, integrating Atlassian's award-winning tools, together in a single secure hosted development environment, hosted by Contegix.

"Whether you're a development shop, a professional services team or an IT group, JIRA Studio gets your team up and running in as little as an hour and no more than a day" said Mike Cannon-Brookes, CEO and co-founder of Atlassian. "Since we're maintaining the applications, our customers can focus on writing brilliant code and project management."

Highlights of JIRA Studio include:

Activity Stream: Inspired by Facebook, the Activity Stream displays real-time updates and activity from the wiki, tasks, bugs, source commits and code reviews
Project Toolbar: JIRA Studio is comprised of many tools which seamlessly work together. The Project Toolbar, available on every JIRA Studio page, lets you switch between your projects with only a couple of clicks
Product Integrations: easily cross-link issues and bugs to the wiki as well as source code and code reviews
Importing: import existing JIRA and Subversion databases into JIRA Studio

Pricing for JIRA Studio is $50 per user per month. Volume discounts for large deployments are available. Pricing is online at http://www.atlassian.com/hosted/studio

Users can log on to a demo of JIRA Studio at http://demo.jira.com.

About Atlassian

Atlassian develops affordable, lightweight software that helps enterprises collaborate better. Its products include Confluence, widely recognized as the most advanced enterprise wiki, and JIRA, one of the world's most popular issue trackers for IT project management. The company has more than 11,000 customers worldwide, including 30 of the world's top 50 corporations. For more information, visit: www.atlassian.com/

About Contegix

Contegix provides high-level managed hosting solutions for enterprise applications. We deliver proactive, passionate support that is unparalleled in the industry. We were our first client, building a reliable infrastructure for the hosting of our software development customers. That success led us to offer hosting services to other companies, ultimately matching our expertise in system administration and software development with a superior level of support that matched our original internal needs. Contegix is a national company with a hard-won reputation for reliable hosting, reasonable pricing and expert support that goes beyond managed hosting. With a focus on the Linux, OSX, and JEE markets, Contegix continues to provide advanced connectivity solutions, such as our trademark Beyond Managed Hosting® service, colocation, and managed application delivery. We have not lost sight of our founding mission - to deliver high level hosting, support, and connectivity for enterprise applications. Contegix is based in St. Louis, MO, with a seasoned leadership that has been answering the hosting needs of businesses for over 10 years. Interested in learning more please visit: http://www.contegix.com

  • Comments Off

For Mother’s Day: Bamboo CI Server!

carnation_white.jpg

Mother's Day is just one week away, and what better time to take advantage of our Bamboo 2.0 sale*! You got her flowers and chocolate last year, a new scarf the year before that, and the year before that you took her out for Champagne brunch. Why not this year getting her something unique, something she'll never forget!

One thing is for certain: Moms love Bamboo's Build Telemetry and new distributed build capabilities.

But why stop there? There's an entire set of tools you can get her:


  • JIRA - great for managing the bugs, issues, and tasks in her life
  • Confluence - for collaboration and knowledge sharing with the whole family
  • Crucible - your colleagues may criticize your coding skills, but Mom will certainly comment that you write better code than everyone else (except for your Uncle Ed)

Take advantage of our volume licensing and get yourself some licenses** while you're at it.

And thanks, Mom!


* Bamboo Offer ends May 31st. All other software regularly priced.
** Is Mom tired of licensed software? And you don't have time to install it for her? No worries! JIRA Studio is a complete hosted development environment that includes many great Atlassian products and Subversion!

  • Comments Off

Software and beer at JavaOne, booth #930

If you're attending JavaOne, please visit us at booth #930 next week. We'll be demoing the latest and greatest products:

Also...
Matt Quail and Pete Moore will be speaking at the CommunityOne Lightning Talks track on "Which web framework?" and Conor MacNeill and Matt Quail are speaking at JavaOne on Thursday, their session is entitled "Pimp My Build: 10 Ways to Make Your Build Rock."

If you're in town on Monday 5th, please drop by Thirsty Bear at 7:30pm for our Javabloggers meetup. The beers are on us!

We look forward to seeing you there!

  • Comments Off

Bamboo Plugin for Confluence

The beta version of the Bamboo Plugin for Confluence is out. The plugin provides several macros that allow Confluence users to easily display data from Bamboo, such as the status of a particular plan's latest build.

Examples

For example, including {current-build:CONFSTABFUNC-LDAP|mode=full} in your Confluence page would result in something like this:
current-build_full_medium.png


And using the macro {bamboo-project:CONFSTABFUNC} would display:
bamboo-project_medium.png


More examples can be found on the Bamboo Plugin homepage.

Try it, it's fun!

Try it out and let us know what you think.

  • Comments Off