January 29, 2012

Sarah Maddox

Writing a book with DocBook and a Confluence wiki

We’re in the final stages before sending my book off to the printers. Exciting! While we wait, let me tell you a bit about how the publishing team and I have produced the book. We’re using a Confluence wiki and DocBook XML.

Cover of "Confluence, Tech Comm, Chocolate"Here’s our process in brief:

  • Plan, write and review the book on a Confluence site.
  • Use the Scroll Wiki DocBook Exporter to convert the content to DocBook XML.
  • Use DocBook XSL-FO style sheets to create a PDF file for sending to the printers.
  • Use XSL to generate ebook formats too.

This post is about writing and reviewing the book on the wiki, and converting the Confluence content to DocBook XML – the first two points in the list above. Richard Hamilton, at XML Press, is the expert on the further DocBook processing.

A bit about the book

The book is called Confluence, Tech Comm, Chocolate: A wiki as platform extraordinaire for technical communication. Details are at XML Press. It is all about developing technical documentation on a wiki, with a focus on Confluence wiki. And just to be ultra meta, I’ve written the book on a Confluence site. Dogfooding FTW!

Writing, planning and technical review on the wiki

Richard Hamilton and I have spent the last nine months on a Confluence wiki site. We kicked off our planning there in May 2011. Since then, I’ve spent around 400 hours writing the content on the wiki. Ryan Maddox, our illustrator, has uploaded his images onto the wiki. For two weeks in early December, the technical reviewers joined us there too – six knowledgeable and enthusiastic people:

The wiki was abuzz with review comments, opinions and counter-opinions, laughter and chat.

Now it’s gone a bit quiet while Richard and I work on the last stages of book production. When we launch the book, we’ll open up the wiki site too. You’ll be able to join us there and make it buzz again. :)

DocBook for the publication processes

DocBook is an XML standard for documents, developed by O’Reilly as a means of making their publishing process more efficient. It is now an open standard maintained by OASIS.  Richard Hamilton, at XML Press, uses DocBook XML to publish a range of books on the subject of technical communication. Using a customised set of the open source XSL style sheets for DocBook,  Richard can create HTML, PDF (through XSL-FO), EPUB and other epublishing formats from the DocBook source.

Converting content from Confluence wiki to DocBook XML

So, I’ve finished writing the book and the reviewers have worked their magic too. It’s all on a Confluence wiki. The content is stored in the Confluence database in wiki format. How do we get it to DocBook so that Richard can create the print and ebook formats?

Enter the Scroll Wiki DocBook Exporter.

Scroll Wiki DocBook Exporter is a plugin for Confluence, developed by K15t Software. (A plugin is a small piece of software that extends the functionality of the wiki. It is similar to an add-on for a web browser.) Once you have installed the Scroll Wiki DocBook Exporter on your Confluence site, you can export a page, a set of pages or an entire space, to DocBook XML.

How to use the Scroll Wiki DocBook Exporter

The first thing is to add the plugin to your Confluence site. You need to be a Confluence system administrator, then you can install the plugin in the usual way:

  1. Log in as a Confluence system administrator.
  2. Choose “Browse” > “Confluence Admin” > “Plugins” > “Install”.
  3. Type “scroll wiki docbook exporter” into the search box and click “Search”.
  4. Click the name of the plugin in the list of search results, to open the panel showing the plugin details.
  5. Click “Install Now”.

See the Confluence documentation on installing plugins.

You will need a license key from K15t Software. They provide a free evaluation license that gives you full functionality for 30 days.

Once the plugin is installed, a new option appears in the Confluence “Tools” menu, allowing you to export the content to DocBook format.

  1. Go to the page that you want to export. If you want to export a set of pages, go to the parent page of the set.
  2. Click “Tools” > “Export to DocBook”.
  3. Adjust the options in the dialog that pops up:
DocBook Exporter dialog

Scroll Wiki DocBook Exporter

When you are ready, click “Start Export”. The plugin will create a zipped file containing the DocBook XML and attachments, and will offer the file to you for downloading.

A sample of the output

Here is one of the book’s pages on the wiki:

Book's front page on the wiki

Front page of the book on the wiki

And here is an extract of the DocBook XML:

<?xml version=”1.0″ encoding=”UTF-8″?>
<book xmlns=”http://docbook.org/ns/docbook” xmlns:xlink=”http://www.w3.org/1999/xlink” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd” version=”5.0″ xml:id=”scroll-bookmark-1″>
<info>
<title>Confluence, Tech Comm, Chocolate</title>
</info>
<part xml:id=”scroll-bookmark-2″>
<title>Confluence, Tech Comm, Chocolate</title>
<chapter xml:id=”scroll-bookmark-3″>
<title>A wiki as platform extraordinaire for technical communication</title>
<para>By Sarah Maddox</para>
</chapter>
</part>

[SNIP]

<index />
</book>

Index, footnotes and figure captions

The Scroll Wiki DocBook Exporter supports these too. The plugin adds a number of macros to Confluence, which you can use to mark up the index entries, footnotes and figure captions. I’ll write another post with the details. I’m sure many people are agog to know how this works. ;)

Working with K15t Software and XML Press

Richard and I have worked on this project with Tobias Anstett and the rest of the team K15t Software.  They are great people to work with: knowledgeable, enthusiastic and energetic. As far as I know, this is the first time anyone has written a book on Confluence for publication via DocBook XML. We have added new functionality to the plugin, especially for the index and footnotes, adapting and tuning as we go.

Thank you all. It’s exciting to help perfect a plugin that many other authors and technical writers will be able to use.

And I can’t wait to get my hands on a copy of the book!


by ffeathers at January 29, 2012 03:33 AM

January 27, 2012

Confluence Product Blog

The Fastest Way to Create Rich Content Online

Raise your hand if you like magic? I don’t mean pulling rabbits out of hats or illusions that make coins disappear from behind ears. I’m talking about the the real stuff. How cool would it be to have the power of your imagination’s greatest sorcerer?

The latest release of Confluence 4.1 brings that dream just a little bit closer with Autoconvert, transforming the links you paste into the editor, such as, Confluence pages, JIRA issues, YouTube videos, Skitch images, Flickr photo streams, Vimeo videos, and Google maps, into the rich content you were linking to. Autoconvert is the fastest way to create rich content online, so magical, you need to see it to believe it.

Try it Now

Still don’t believe us? Give Confluence 4.1 a try now now and experience the magic for yourself!

 

by Ryan Anderson at January 27, 2012 02:00 PM

Joshua Graham's Virtual Surreality

Viewing full Facebook site on mobile device

A plethora of useless answers out there. Here it is:

On an iOS device

  1. Scroll page so you go past the top of the Facebook page and can see the browser address bar
  2. Change the m to www
  3. Remove the ?_rdr#~!/
  4. Press Go
  5. You may have some fiddling to get the auto-appearing drop down tools on posts but they will come.

    Enjoy.

by Josh Graham at January 27, 2012 04:50 AM

January 26, 2012

JIRA Product Blog

Live Webinar: Leading E-Commerce Provider Showcases JIRA and Zephyr

What: Live Webinar

When: Tuesday, January 31, 2012 at 10am PST

Register Here: https://www3.gotomeeting.com/register/792001950

Are you in one of these situations? I have JIRA…

  • and I’m thinking about test management
  • but my test management solution is not integrated
  • and I’m dissatisfied with my test management’s poor integration

Then, you will want to attend this webinar featuring John Majcher, Test Architect from GSI Commerce, Kyle Miller, Product Marketing Specialist from Atlassian and Sanjay Zalavadia, Director of Professional Services from Zephyr. They will discuss how John successfully manages testing over 30 projects, 90+ releases, 12,000 testcases spread across a team of 280 people in three global locations using JIRA and Zephyr.

John will share how the integration offers:

  • Access and reusability of testing assets across multi-location and globally distributed teams
  • Elasticity of the data from both systems and freedom to create custom reports
  • Ease of customizing workflows in one system without losing the customization in the other
  • Flexibility of deployment; SaaS or On-Premise without having to duplicate the data

Speakers:

John Majcher, Test Architect, GSI Commerce
John brings over 10 years of testing experience in his role as Test Architect at GSI Commerce. He is responsible for designing and implementing test automation frameworks utilizing multiple tools sets such as Selenium and TestNG. He works with Development Technical Leads and Architects to determine testing requirements and test approaches as the primary architect responsible for Webstore testing. John incorporated automated builds utilizing code libraries and plug-ins such as cargo and maven-tomcat to allow stand alone automation testing of service applications. He also aligned test developers with development CI builds utilizing Atlassian Bamboo for automation execution controlled via maven profiles. 

Kyle Miller, Product Marketing Specialist, Atlassian
Kyle brings over 5 years marketing and social media experience in his role as Product Marketing Manager for Integrations at Atlassian. He is responsible for selecting and on-boarding new partners, highlighting and promoting valuable integrations from across the Atlassian product suite, and defining performance metrics to monitor adoption. He works with Product Management, Sales Engineering, and Business Development teams to deliver quality integrations to Atlassian’s core customers.

Sanjay Zalavadia, Director Professional Services, Zephyr
Sanjay brings over 15 years of leadership experience in IT and Technical Support Services in his role at Zephyr. As the voice of the customer, his team is responsible for pre-sales, on-boarding, training, customer service, consulting and continued professional services. Sanjay also plays a key role in Zephyr’s partnership with Atlassian, ensuring that their customers in common are aware of new updates to products, features and functionality.

About GSI Commerce
GSI Commerce is a leading provider of ecommerce and interactive marketing services for the world’s premier brands and retailers. We offer a broad solutions suite designed to power each aspect of your online business and effectively integrate with your other channels. Our advanced technology, fulfillment, customer care and interactive marketing services enable our clients to elevate the consumer experience and cost-effectively sustain it over time. GSI is an eBay Inc. (Nasdaq:EBAY) company.

About Atlassian
Atlassian products help innovators everywhere plan, build and launch great software. More than 17,000 large and small organizations – including Citigroup, eBay, Netflix and Nike – use Atlassian’s issue tracking, collaboration and software-development products to work smarter and deliver quality results on time. Learn more at http://atlassian.com.

About Zephyr
Zephyr is a leading provider of on-demand, real-time enterprise test management solutions, offering innovative applications and unparalleled, metrics based visibility via real time dashboards into the quality and status of software projects. The feature rich solution addresses today’s dynamic and global needs across a variety of industries including finance, healthcare, mobile, IT services, and enterprise software. Zephyr’s global customers experience improved productivity, faster time to market and dramatic cost savings. For more information, please visit www.getzephyr.com

by Kyle Miller at January 26, 2012 09:02 PM

Atlassian Developer Blog

(Guest blog) On the Redistribution of Testing – Part I


This is a guest blog post by Paul Gerrard, a Principal of Gerrard Consulting Limited and is the host of the UK Test Management Forum. It is Part 1 of a two-part blog series on the future of QA testing.

Recently, there has been a spate of predictions of doom and gloom in our business.  Conference talks have had titles such as ‘Test is Dead’ and ‘Death to the Testing Phase’. ‘Testing has contributed little to quality improvement in the last ten years’, and even being a tester is a ‘bad thing’ – are all keynote themes that circulated at conferences, blogs and YouTube in late 2011.

My own company has been predicting the demise of the ‘plain old functional tester’ for years and we’ve predicted both good and bad outcomes of the technology and economic change that is going on right now. In July, I posted a blog, ‘Testing is in a Mess’, where I suggested that there’s complacency, self-delusion and over capacity in the testing business; there is too little agreement about what testing is, what it’s for or how it should be done.

There are some significant forces at play in the IT industry and I think the testing community, at least the testers in what might be called the more developed ‘testing nations’ will be coming under extreme pressure.

The Forces and Factors that will Squeeze Testers

The growth of testing as a career

Over the last twenty years or so there has been a dramatic growth in the number of people who test and call themselves testers and test managers. When I started in the testing business in 1992 in the UK, few people called themselves a tester, let alone thought of themselves as having a career in testing. Now, there are tens of thousands in the UK alone. Twenty years ago, there were perhaps five companies offering testing services. There must be ten times that number now and there are hundreds, perhaps thousands of freelancers who specialise and make a living in testing. Beyond this of course, the large system integration and outsourcing firms have significant testing practices with hundreds or even thousands of staff, many offshored of course.

It’s not that more testing happens. I think it’s because the people who do it are now recruited into teams, having managers who plan, resource and control sizable budgets in software projects to perform project test stages. Many ‘career testers’ have never done anything else.

Lack of advance in the discipline

The sources and sheer volume of testing knowledge have exploded. There are countless papers, articles, blogs and books available now, and there are many conferences, forums, meet-ups and training courses available too. But, even though the volume of information is huge, most of it is not new. As a frequent conference goer over 20 years, it depresses me that the innovation one sees in conferences, for example,  tends to be focused on the testers’ struggle to keep pace with and test new technologies rather than insights and inventions that move the tester’s discipline forward.

Nowadays, much more attention is paid to the management of testing, testers and stakeholders expectations and decision-making. But if you consider the argument that perhaps test management is a non-discipline, that is  there is no such thing as test management, there’s just management, and you take the management away – what’s left? Mostly challenges in test logistics – or just logistics – another management discipline?

Advances(?) in Automation

What about the fantastic advances in automation? Let’s look at the two biggest types ot test automation.

Test execution robots are still, well, just robots. The advances in these have traced the increased complexity of the products used to build and deliver functionality. From green-screen to client/server to GUI to Web, to SOA, the test automation engineer of 1970 (once they got over the shock of reincarnation) would quickly recognise the patterns of test automation used today. Of course, the automation frameworks are helping to make test automation somewhat more productive, but one could argue that people have been building their own custom frameworks for years and years and they should have been mainstream many years ago.

The test management tools that are out there are fantastic. Integrated test case management, scheduling, logging and incident management and reporting. Except that the fundamental purpose of these tools is basic record-keeping and collaboration. Big deal. The number of companies who continue to use Excel as their prime test management tools shows just how limited the test management tools are in what they do. Most organisations get away without test management products altogether because these products support the clerical test activities and logistics, but do little or nothing to support the intellectual effort of testers.

The Emergence/Dominance of Certification

The test certification schemes have gone global it seems. Dorothy Graham and I had an idea for a ‘Foundation’ certification in 1997 and we presented a one page syllabus proposal to an ad-hoc meeting at the Star WEST conference in San Jose to gauge interest. There wasn’t much. So we came back to the UK, engaged with ISEB (not part of BCS in those days) and I became the founding Chair of the initial ISEB Testing Board. About ten or so UK folk kicked off the development of the Foundation scheme which had its first outing in late 1998.

As Dorothy says on her blog, the Foundation met its main objective of “removing the bottom layer of ignorance” about software testing. Fourteen years and 150,000 certificate awards later, it does the same. Except that for many people it’s all they need (and may ever need) to get a job in the industry.

The Agile Juggernaut

Agile is here to stay. Increasingly, developers seem to take test, Test-Driven and Behaviour-Driven Development and Specification by Example more seriously. Continuous Integration and Delivery is the heartbeat, test, life-support and early warning system. The demands for better testing in development are being met. A growing number of developers have known no other way.

It seems likely that if this trend continues, we’ll get better, stable software sooner and much of the checking done late by system testers will not be required. Will this reduce the need for system testers? You bet.

Some Agile projects don’t use testers – the testers perform a ‘test assurance’ role instead. The demand for unskilled testers reduces and the need for a smaller number of smarter testers with an involvement spread over multiple projects increases.

What is the Squeeze?

The forces above are squeezing testers from the ‘low-value’ unskilled, downstream role to upstream, business-savvy, workflow-oriented, UX (user experience)-aware testing specialists with new tools. Developers are absorbing a lot of checking that is automated. Some business analysts are taking their chance and absorbing test disciplines into analysis and are taking over the acceptance process.

If a 3 day certification is all you need to be a professional tester, no wonder employers think testing is a commodity, so will outsource it when they can.

Stakeholders know that avoiding defects is better than finding them. Old-style testing is effective but happens at the end. Stakeholders will say, “Let’s take requirements more seriously; force developers to test and outsource the paperwork”.

Smart testers need to understand they are in the information business, that testing is being re-distributed in projects and if they are not alert, agile even, they will be squeezed out. Needless to say, the under-skilled testers, relying on clerical skills to get by will be squeezed out.

A Methodological Shift

There seems to be a methodological shift from staged, structured projects to iterative and Agile and now, towards ‘continuous delivery’. Just as companies seem to be coming to terms with Agile – it’s all going to change again. They are now being invited to consider continuous ‘Specification by Example’ approaches. Specification by example promotes a continual process of specification, exampling, test-first, and continuous integration.

But where does the tester fit in this environment?

I’ll make some suggestions on what might happen and what you might do about it in the second part of this article.

Paul Gerrard is a consultant, teacher, author, webmaster, programmer, tester, conference speaker, rowing coach and most recently a publisher. He has conducted consulting assignments in all aspects of software testing and quality assurance, specialising in test assurance. He has presented keynote talks and tutorials at testing conferences across Europe, the USA, Australia, South Africa and occasionally won awards for them. Find him on Twitter at @paul_gerrard or his site, Gerrard Consulting.

by Ly Nguyen at January 26, 2012 12:30 AM

January 25, 2012

JIRA Product Blog

JIRA Mobile Connect for iPad, HockeyApp, JIRA 5 and more

A few months ago we announced the initial release of JIRA Mobile Connect for iOS. Since then, we have been working really hard to make it even more awesome!

I’m excited to share the latest features and improvements of JIRA Mobile Connect. If you’re not already familiar, JIRA Mobile Connect is a free, open-source library for collecting feedback, engaging with your mobile users and monitoring crash reports in order to improve the quality of your application.

JIRA Mobile Connect Feedback AttachmentsClean User Interface

We have redesigned the user interface for JIRA Mobile Connect to make it easier for your testers and users to send their feedback to you.

The updated feedback screen now stacks attachments on top of one another, rather than side by side. This allows users to easily add many attachments without cluttering the screen.

We’ve also added a new attachments list so that users can see all of their annotated screenshots and audio recordings.

 

JIRA Mobile Connect Attachments

 

Native iPad Support

We have added native iPad support to JIRA Mobile Connect. This allows you to use JIRA Mobile Connect in all of your iPad-only apps!

Enhanced Crash Reporting Using HockeyApp

We’re excited to announce some killer integration between HockeyApp  and JIRA Mobile Connect.

For mobile developers using HockeyApp to distribute betas, JIRA Mobile Connect adds rich user feedback – including screenshots and audio – from your testers.

For JIRA users, HockeyApp now provides enhanced crash reporting using JIRA Mobile Connect. HockeyApp symbolicates all of your app’s crash reports (just upload a dSYM file), groups them together based on this symbolication and then gives you the ability to create a single issue directly in JIRA via JIRA Mobile Connect.

The JIRA + HockeyApp integration also gives you the following features:

  • Over the air distribution - distribute your app to your testers without using the app store.
  • Real-time crash symbolication and grouping - symbolication and grouping of crash reports sent to JIRA as a single issue via JIRA Mobile Connect.
  • Versioning - HockeyApp will track the different versions of your app so you know where the crashes are coming from.
  • Remote uploading - Upload your app from anywhere. HockeyApp has a Bamboo task that allows you to upload your app right after building it from the source!
  • Provision users after building your app! - This neat feature gives you the ability to upload a provisioning file after you have built and uploaded your app. No more re-building your app every time you need to add a user!

Additional Configuration Options

We’re listening to all the issues raised on the CONNECT project and we added several highly requested configuration options to JIRA Mobile Connect:

  • Ability to turn crash reporting off from the JIRA server side
  • Ability to turn feedback off by setting a custom parameter in Xcode
  • Custom fields can now be set on all crash reports

JIRA 5 Ready

With JIRA 5 just around the corner, JIRA Mobile Connect is ready to go. There are two versions for the latest JIRA plugin of JIRA Mobile Connect, so please ensure that you download the version that corresponds to your version of JIRA.

I’m in! How do I get it?!

Three simple steps!

  1. Sign up for JIRA OnDemand (or get the Download version) here.
  2. Follow the set up instructions here.
  3. Tweet about it! @JIRA

What about my Android applications?

Check out our blog from last week.

How can I help make JMC better?

JIRA Mobile Connect is open source, so feel free to fork it on Bitbucket and send us a pull request. We’d love to see what you got!!

All pull requests that are accepted will receive some Atlassian goodies!

What if I have more questions?

If you have more questions about how to use JIRA Mobile Connect, check out Atlassian Answers or simply ask us.

Get JIRA Mobile Connect

by Josh Devenny at January 25, 2012 11:00 PM

Matt Ryall

⌘ Apple’s monster quarter in charts

Dan Frommer has some great charts of Apple’s quarterly results.

#

by Matt Ryall at January 25, 2012 09:31 AM

⌘ Apple reports financial results for Q1 2012

Apple has announced their financial results for the last quarter, including an astonishing revenue figure of $46.33 billion. MacRumors writes:

Apple shipped 5.2 million Macintosh computers during the quarter, a unit increase of 26 percent over the year-ago quarter. Quarterly iPhone unit sales reached 37.04 million, up 128 percent from the year-ago quarter, and the company sold 15.4 million iPods during the quarter, representing 21 percent unit decline over the year-ago quarter. Apple also sold 15.43 million iPads during the quarter, up 111 percent over the year-ago quarter. Apple set new company records for iPhone, iPad, and Mac sales during the quarter.

An amazing story of continued growth, especially compared to their competitors in the computing and mobile phone industries.

#

by Matt Ryall at January 25, 2012 09:01 AM

January 24, 2012

Atlassian Developer Blog

(Guest blog) Finding the Right Foot: Testing Efficiency Through Engineering Efficiency

This is a guest blog post by Catherine Powell, a principal at Abakas, a software consulting company. At Abakas, she provides engineering management, development, testing, and process consulting services. 

Ahh, the glories of software creation. We have an idea, and an idea turns into a list, and a list turns into code plus more lists, which turns into more code and new machines in production ready to share our great new software with the world. And there are a few caffeine-fueled late nights, and there are a few company-sponsored lunches and demos. And then we’re ready… just as soon as we run one last regression test cycle. And it’s going to take way too long. We’re all excited and ready to go, and we have to stop to wait for test. It’s the last thing to finish, and there are never enough testers during those end crunch times, and we keep having to cut corners to make releases happen on time. Plus, it frequently points out that we made the same mistakes we always make. So then we have to patch things and fix configurations and tweak it. That darn testing!

So how do we fix it?

How do we keep testing from being a bottleneck?

Simple. We do less of it. We minimize that end-of-cycle testing holdup. And we do THAT by building trust in our development and in our software creation, deployment, and maintenance process. Test cycles, particularly regression test cycles, are ultimately driven by fear. We do a “test pass at the end” because we do not trust that the activities that lead up to this point have resulted in robust, deployable software that does what we meant for it to do. Fix that lack of trust, and we can skip the extended test cycle.

There’s an old saying about starting off on the right foot. We don’t always have the luxury of starting (or restarting), but we can find the right foot, even on an ongoing project. To improve our testing, to make it more efficient, we have to address the whole software development life cycle. We must find our underlying fear and fix it instead of hiding behind an ever-larger test cycle.

The tricky thing about the fear driving the “test pass at the end” is that it’s frequently justified. We keep finding bugs, or configuration errors, or data problems, or deployment failures. We can’t stop testing when it keeps finding things that we really do need to know! Step one to reducing this test phase is finding the true underlying problems causing our fear, and fixing those. In other words, to make testing more efficient, we have to fix everything else.

The Underlying Problems

Let’s look at some of the more common problems that cause fear, and what we can do about it:

  • We fear that our deployment didn’t work or wasn’t complete, so we test. Instead, we can automate deployment so code gets into QA the same way it gets into production. That way we only have to test in one environment (QA), not two.
  • We fear that a developer forgot to check something in or didn’t make the build properly, so we test. Instead, we can set up a build system and only test – or deploy – from there. Again, it means we only test a build once, not once per environment.
  • We fear that a new feature accidentally broke the old way things worked, and that customers want the old way and the new way to both work, so we test. Instead, we can create a regression test suite and automate it, so the build system can run it every time we check in code. There’s no need to wait until the end to find out that something regressed.
  • We fear that some underlying change – a browser version or OS patch – broke our software, so we test. Instead, we can schedule that testing at a different point in the cycle. Tie it to the release of the software we’re worried about, not to our own release schedule. Let our regression suite (see above) help us find major problems, watch the release patterns of the software with which we interact, and don’t test just because something might have changed. Reserve this for when something actually did change.
  • We fear that several features coming together at the very end will break each other, so we test. This one we still need to test! We can – and should – try to bring in features serially over time, but if the development team is larger than about two people, there’s going to be a bit of a rush trying to get things in before some deadline, whether that deadline is a sprint, a release, or just Friday. Minimize it where possible, and then move everything else out of the way so only this much smaller task is left.

Test smarter, not harder

Fear causes us to take on large test cycles near the end of a release (or sprint or story or whatever the “chunks” are in a given project). We perform slow, repetitive tasks with a relatively low value, just because of that fear. Eliminate the source of the fear, automate the repetitive and low value tasks, and make that end testing cycle less of a bottleneck.  Get the software on the right foot, and you’ll free testers to do the activities that not only assuage fear, but that truly provide value.

Catherine Powell has worked with a broad range of software, including an enterprise storage system, a web-based healthcare system, data synchronization applications on mobile devices, and webapps of various flavors. She is an author, speaker and a mentor to engineers and technical managers. Catherine focuses primarily on the realities of shipping software in small and mid-size companies. Catherine’s published works, blog, and contact information can be found at www.abakas.com.

by Ly Nguyen at January 24, 2012 05:06 PM

Confluence Product Blog

One for the Wiki Markup Pros – Macro and Link Autoformatting

The Confluence team strives to deliver you the fastest online editing experience. In Confluence 4.0 we gave you Autoformatting – converting simple wiki markup on the fly. Formatted texts, lists, tables – it all works. Available in OnDemand and for download today, the  latest version of Confluence extends Autoformatting to support:

  • macros
  • links, and
  • images

Now you can insert all your favorite macros, including parameters, and create links – like anchors – using wiki markup. As soon as you close the macro, link, or embedded image, Confluence will convert it on the fly.

So, give your mouse a break and try autoformatting in Confluence today!

See it in action

Try Confluence today

Confluence makes it easier to coordinate on projects, new releases, and product launches, so you and your team are always on the same page.

 

by Terrence Caldwell at January 24, 2012 02:00 PM

January 23, 2012

Dev Tools Blog

Continuous Deploy One Byte at a Time (or, “How to Eat an Elephant”): part 1

We’ve been talking about continuous deployment here on the Atlassian Dev Tools blog.  Many of you are already sold on the idea, and some of you are putting it into practice already.  But others may be reading these posts thinking “Continuous deployment sounds wonderful, but my hurdles are so many and so high, I wouldn’t even know how to start!”

Sound familiar?  If so, read on into our two part blog series about breaking into Continuous Deployment one step at a time.  The first blog will show you ways to evolve your build process to include more and more automation and the second will give you some tips and tricks to continuous deployment stardom.

Manual Stages Let You Build a Continuous Deploy Framework

Any Plan in Bamboo can include one or more manual Stages.  Each build of the Plan pauses when it encounters a manual Stage, and resumes at the click of a button when your team is ready to proceed.

A single click toggles each Stage between manual and automatic

In the context of moving toward a continuous deploy model, manual Stages can serve as placeholders.  A roadmap, if you will.  Bake them into your Plan now, then update their configurations one by one as you automate each piece of your pipeline.

Why bother setting up a Plan where some steps are performed manually?

  • Accountability: each progression through a manual Stage amounts to a sign-off on it’s success
  • Traceability: see at a glance what build number was last pushed to each environment and what code changes were included
    Release Management: when Bamboo is linked to JIRA, marking a version as shipped and executing the release itself happens with just a few clicks
  • Communication: build result summaries let everyone see exactly where in the pipeline a build is at, decreasing email & IM traffic
  • Repeatability: tasks that are automated can be reliably repeated, whereas manual tasks carry the risk of human error
  • Adaptability: you now have a template for replacing manual steps with automation

Let’s dig deeper into that last point.  It’s the best part!

Combine Manual Steps and Automated Steps

Imagine a project with a build server that automatically compiles the code, runs unit tests, and packages it up.  Deployments to QA and Production are performed manually.   Tests against those environments are a mixture of manual and automated.   Let’s see how artifact sharing and Bamboo’s unique concept of Stages can be combined in a Plan that reflects the current process, and evolves as manual steps become automated.

Here is our imaginary project’s build process, represented as a single Plan in Bamboo.

 

Notice that several Stages have been configured as manual

  1. Build launches automatically with each commit.  At this point, the Plan will fast-fail if, for example, there is a compilation error.  Otherwise, if the Stage completes successfully, the Plan’s execution will simply pause.  In order for downstream Jobs (like deploys) to utilize the packaged build, you must tell Bamboo to share the build artifact. More on that in part 2 of this mini-series!
  2. Deploy to QA is a manual Stage. The deploy engineer will use Bamboo to find the most recent successful build and it’s artifact.   After deploying, they will come back to the Plan and press the Continue button to indicate the step is complete.  Note that you need to include a “dummy” Job in your manual Stages when using them in this way.  In this example Plan, all the Jobs for manual Stages run a one-line script that echoes “hello world”.
  3. Auto Tests on QA is triggered by the completion of the previous Stage.  Its two Jobs will run in parallel if two Agents are available.  Otherwise, they will run sequentially.
  4. Manual Tests on QA will pause the build again, assuming the automated tests succeeded.  This is a signal for the manual testers to begin their work.  Once testing is complete, the QA team comes to the Plan and signs off on the manual testing –again, using the Continue button.
  5. Deploy to Production is where most builds of the Plan will end, until the team feels confident pushing new code with each build. In the meantime, everyone on the project knows that the builds that reach this Stage could go live without introducing any new defects.  When it is time for the production push, the deploy engineer will again pull up the appropriate build in Bamboo to find the artifact, manually deploy it, then sign off on that Stage by clicking Continue.
  6. Auto Smoke-Tests on Production will then kick off automatically, completing the final step in the process

Evolution is the Solution!

Production deploys remain a manual Stage, but now Bamboo does the heavy lifting

Our imaginary scenario is a target-rich environment for automation.  Perhaps the Operations team takes on a project to condense their deploy runbook into a single script.  Simply update the Job in the deploy Stages to run the new script, and update the Stage to execute automatically.   Some time later, QA engineers reach their goal of automating all manual acceptance tests.  Once again, the Plan can evolve: delete the manual testing Stage, and add Jobs to the auto-test Stages as needed to run your thoroughly-sweet suite of tests.

By gradually progressing along the continuous deploy spectrum in this way, you march steadily toward your objective while avoiding ghastly organizational upheaval in its pursuit.  It’s the same as how you eat an elephant, my friends: one bite at a time.

Stay Tuned

Stay tuned for part two of our blogs series that will shed some light on the tips, tricks and gotcha’s to make your process sing. Subscribe to the to the Dev Tools blog or check back shortly for the second post to this series.

In the meantime, share your manual-to-auto transition story by posting to comments.  You might just inspire someone!

New to Bamboo?

Download a free 30-day trial of Bamboo to get your automation process started.

by Sarah Goff-Dupont at January 23, 2012 05:40 PM

Matt Ryall

⌘ XKCD: Sustainable

The word “sustainable” is unsustainable.

Classic XKCD.

#

by Matt Ryall at January 23, 2012 10:47 AM

Bonillaware

La variable de entorno PATH en Mac, desmitificada

¿Qué es PATH?

Cuando en Mac abres un terminal, puedes ejecutar una serie de comandos como ‘pwd‘ -para mostrar la ruta absoluta del directorio en el que te encuentras- o ‘ls‘ -que muestra los ficheros y directorios incluidos en el mismo- independientemente del directorio donde estes y donde se encuentren dichos comandos. Eso es posible gracias a PATH.

PATH es una variable de entorno que permite definir las rutas en las que el sistema operativo buscará esos comandos o ficheros.

El contenido de PATH

Para saber el valor actual de la variable PATH, debemos escribir en el terminal

echo $PATH

El valor de PATH siempre son un conjunto de rutas a directorios o ficheros separados por dos puntos. Por ejemplo, la variable PATH con valor ‘/usr/bin:/bin:/usr/sbin‘  está incluyendo los directorios /usr/bin, /bin y /usr/sbin.

Incluyendo el directorio actual en PATH

Es posible que deseemos modificar el valor de PATH, por ejemplo, para incluir el directorio actual. Si no lo hacemos, no podremos ejecutar ningún comando ni abrir ningún fichero del directorio en el que estemos si este no está incluido en PATH.

Por ejemplo, si estamos en el directorio /Users/david/development/Tomcat/bin y, dentro del mismo, existe un fichero ‘startup.sh‘, al intentar ejecutar el comando

startup.sh

obtendremos un error de ‘Fichero no encontrado’ porque el sistema operativo no sabrá donde buscar el fichero ‘startup.sh‘. Por eso debemos indicarle que está en el directorio actual de trabajo, representado por un punto (.)

./startup.sh

Para evitar tener que usar el punto cada vez que queremos trabajar con un fichero de nuestro directorio actual de trabajo, debemos modificar el valor de PATH para que incluya al mismo.

Como modificar el valor de PATH

El valor de PATH, al igual que el de todas las variables de entorno, se modifica con la sintaxis

NOMBRE_DE_VARIABLE=valor

De tal manera que, para modificar la variable PATH para que incluya el directorio actual deberíamos escribir lo siguiente en el terminal

PATH=$PATH:.

Con esto, le hemos dado a PATH el valor actual ($PATH) y, además, la ruta del directorio actual (.), separándola de la anterior con dos puntos (:).

El problema es que, esta configuración se perderá en cuanto cerremos el terminal. Si quieres saber como modificar el valor de PATH de forma persistente, tendrás que aprender como el sistema operativo OS X compone el valor de PATH.

Como se obtiene el valor de PATH en OS X

En OS X, al iniciar una Terminal se ejecuta el archivo /etc/profile. Así, si escribiéramos al final del mismo la famosa linea

PATH=$PATH:.

conseguiríamos añadir el directorio actual al contenido de PATH, pero lo haríamos de una forma poco elegante -porque ese no es el lugar más adecuado para hacerlo- y seguiríamos sin entender como se compone el valor de PATH en OS X.

El mismo fichero /etc/profile lanza un programa de utilidad llamado path_helper. Este programa es el que determina como se compondrá el valor de PATH:

  1. Primero, añade las rutas que encuentra en el fichero /etc/paths. En dicho fichero podrías añadir más rutas, una en cada linea, sin tener que separarlas por (:). Esto modificaría PATH para todos los usuarios del sistema.
  2. Después, carga todas las rutas, una por linea, que encuentre en los ficheros del directorio /etc/paths.d. Este directorio permite configurar PATH modularmente. Así por ejemplo, Atlassian recomienda crearse aquí un fichero llamado ‘atlassian‘ para añadir las rutas de su SDK. Los ficheros se cargan por orden alfabético (se añadirán primero las rutas de ’50-X11′ que de ‘atlassian’). Esta opción, también modifica PATH para todos los usuarios del sistema.
  3. Por último, puedes crear un fichero .profile en tu directorio HOME -en el que se inicia la terminal- y definir en el mismo el valor de PATH con la sintaxis que ya hemos definido. Esta opción, sólo modifica PATH para el usuario cuyo directorio HOME contenga el fichero .profile

Saber como funciona path_helper no solo nos ayudará a configurar el valor de la variable PATH, sino que además nos permitirá conocer porque unos directorios aparecen antes que otros y resolver los conflictos de rutas que podamos tener.

La gestión del directorio actual por comandos que ya están en el PATH

Gracias a la contribución de Dani Lopez, Victor Martinez y David Martinez, completo la información del artículo:

Cuando se usan comandos del tipo open, vi, sh, etc… no es necesario incluir los ficheros del directorio actual en el PATH puesto que estos comandos ya gestionan por si solos esa salvedad.

Es decir, si se ejecuta un open facturas.pdf, el propio comando open intenta abrir el fichero y, si no lo encuentra, vuelve a intentarlo clavándole a fuego un ./ por delante para comprobar si está en el directorio actual.

Bola Extra

by david at January 23, 2012 05:36 AM

January 22, 2012

Matt Ryall

⌘ Y-Combinator: Kill Hollywood

A Y-Combinator “Request for Startups”:

Hollywood appears to have peaked. If it were an ordinary industry (film cameras, say, or typewriters), it could look forward to a couple decades of peaceful decline. But this is not an ordinary industry. The people who run it are so mean and so politically connected that they could do a lot of damage to civil liberties and the world economy on the way down. It would therefore be a good thing if competitors hastened their demise.

#

by Matt Ryall at January 22, 2012 07:41 PM

January 20, 2012

Matt Ryall

⌘ Google search page layout algorithm improvement

In our ongoing effort to help you find more high-quality websites in search results, today we’re launching an algorithmic change that looks at the layout of a webpage and the amount of content you see on the page once you click on a result.

Google’s search is going to start penalising pages without relevant content “above the fold”. While they don’t spell out what “above the fold” actually means (800px? more?), this should punish the more egregious use of pages top-loaded with advertisements.

#

by Matt Ryall at January 20, 2012 06:46 AM

January 19, 2012

Atlassian Developer Blog

Anatomy Of An Atlassian FedEx Day Win

Atlassian Fed What?

At Atlassian, we work hard to ship great products to our amazing customers. Another thing we like to do is set aside some time to let our brains run wild. Every last employee has some idea in the back of their mind about a product improvement and we think it’s critical to give them time to make those ideas a reality. FedEx day is a day, once a quarter, where we all set aside our day to day and run a 24 hour gauntlet to see what we can deliver in that time frame.

It’s also a great kick in the pants to finally build that thing you’ve been saying would make customers lives easier if it could just land on the backlog. We encourage people to form teams at the end get together, demo the final output and vote on a winner. The chance at glory gives you the push you’ve needed to finally prototype that idea that’s been rolling around.

For a bit more information on Atlassian FedEx days take a look on the About Us section of Atlassian.com.

Winning FedEx

Clear Customer Value

The most important part of a FedEx day project that has aspirations of winning is to create something that shows clear customer value. Atlassian is full of engineers, so we value engineering quality and beautiful code but at the end of the day we’re all about customers. So while we enjoy a presentation on this cool new thing a computer can do, if we can’t figure out how it’s going to make a customers life easier it’s probably not going to win FedEx.

Our most recent FedEx day was October 27/28 and several great things came out of it. The winner this time around was a Confluence Plugin called Autoconvert and we think it’s going to make quickly creating great content in Confluence even easier.

Autoconvert solves the problem of sharing links to other content within a Confluence page. Right now you might be thinking to yourself that there is no problem with linking to content. Creating a link is simple in Confluence. If you just want to share a plain old link, you can copy and paste it into the editor and autoformat will take care of making it into a clickable link and if you want to share a link to content within another Atlassian product you can even use macros so that the content is intelligently linked too, providing hover information about what’s behind the link.

The Autoconvert team decided that this way of creating links was broken. You shouldn’t have to know which button to press, or which macro to use when you want to create these `intelligent links` Confluence should know what content it can link to intelligently and just do the work for you.

That’s exactly what Autoconvert does. It enables Confluence to make decisions about the links you paste in. If it understands what you’re linking to, it will transform the link into the best possible experience for a user reading the page. If you paste a link to a YouTube video, the link will get transformed into an embedded player to show the video at that location. If the link goes to another Confluence page, the link text changes to the title of that page and will update should the page title ever change in the future.

Watch the Autoconvert demo video below to get a better idea.

Leverage Existing Tech

24 hours is not much time to churn out something interesting from scratch. In fact it’s nearly impossible. Instead a FedEx project should leverage existing technology that at least one person on the team has a solid understanding of. This doesn’t have to be Atlassian specific code or product, we’re huge fans of open source and we love it when we discover a new project that’s going to help us ship something amazing.

With the recent launch of Confluence 4.0, Atlassian has been investing in our new Rich Text Editor for around a year with nearly every member of the Confluence team contributing to the editor in some way by the wrap up of 4.0 development. This makes the RTE a great launch pad for a FedEx day project. This is how the Autoconvert team was able to get so many intelligent link transformations in by the end of the 24 hour window. The core of Autoconvert is a simple editor plugin that extends the already solid autoformatting of links on paste.

Make It Extensible

This is a bit of social engineering that helps one to win an Atlassian FedEx Day. As mentioned, we’ve got a very strong engineering culture and as such we love anything we can extend and customize to serve our own purposes. So making sure that you FedEx project has extension or plugin points and talking about those when the final presentations roll around can help get you those few extra votes that count.

From a developers perspective Autoconvert is less about how intelligent it makes Confluence, but about how easy it makes adding more of this intelligence. The core plugin is actually just an extension point through which plugin developers can tell Confluence how it should treat links of certain types.

//From any editor plugin
editor.exeCommand('addAutoconverter', false, function(uri, anchor, done){
//provide a callback that calls done passing it a new DOM node.
if (uri.host.match('.*youtu\.be.*')) {
var vidId = uri.path.substr(1);
var newurl = "http://youtube.com/watch?v=" + vidId;
done( $(node).attr("href", newurl).html(newurl) );
} else {
//not a URI that our plugin handles, just call done passing nothing.
done();
}
});

In 9 lines of code we’ve added handling for YouTube’s URL shortener youtu.be.

The excellent plugin tutorial Extending Autoconvert gives an explanation of each step in creating a Confluence extension that makes use of Autoconvert.

Learn Something

You’re going to need fans among the voters. People who when voting will mention casually to their friends that your team is the obvious winner, and keep in mind that these fans probably pitched their own FedEx project just a few minutes ago. These fans come along pretty naturally when you do all points mentioned above.

  • Create Customer Value
  • Leverage Existing Tech
  • Demo The New Shiny
  • Make it Extensible

But it’s really not about winning at all. Autoconvert won FedEx and when presented with the opportunity to give a speech every member of the team said thanks into the mic and passed it along. We’re all pretty happy about the fact that we work with people who want to create new shiny stuff that will actually have an impact on users.

With that in mind it’s critically important to do something on FedEx day that you can actually learn from. With Autoconvert some of us learned a bit about how easy it is to write an extension for the Confluence RTE. It’s also the first that that some of us have used a style of programming called continuation passing. We actually thought that these two points were interesting enough that we open sourced the code for Autoconvert it’s up on GitHub here.

Join Us For FedEx Day

Could you win FedEx day without breaking a sweat? You should come work for Atlassian. We’re on the lookout for several different types of awesome.

 

by Wesley Walser at January 19, 2012 02:00 PM

Sven Peters

crucible-code-review-comments

Die beste aber am meisten verhasste XP-Technik für guten Quellcode ist… Pair Programming. Ich habe es etliche Male versucht. Das Ergebnis war großartig und jeder Mythos von Managern, dass in der gleichen Zeit Programmierer einzeln doppelt so viel Code (mit nahezu der gleichen Qualität und Quantität) schreiben könnten, gehört definitiv der Vergangenheit an. ABER: Es ist wirklich hart 4-6 Stunden konzentriert gemeinsam am Code zu arbeiten. Programmierer sind ein eigener Schlag Menschen, die dieser Praxis meist nicht sehr zugeneigt sind. Fakt ist: Pair Programming ist nicht sehr verbreitet.

Gute Codequalität und mehr durch Code Reviews

Unbestritten sehen vier Augen mehr als zwei. Was also tun? Man führt Code Reviews ein. Also eine Überprüfung der Codequalität durch ein oder mehrerer Teammitglieder. Diese können dann Kommentare zum programmierten Code abgeben und Fehler identifizieren. Aber wer mag schon gerne kritisiert werden? Genau das passiert aber bei Code Reviews. Wenn man das ganze natürlich im Team nur als Kritik betrachtet, hat man meiner Meinung nach Code Reviews missverstanden. Es geht hierbei vielmehr um „Collective Code Ownership“, also dass sich alle Teammitglieder in nahezu allen Bereichen des Codes auskennen. Dies hilft dabei,dass die Qualität und der Stil des Quellcodes über die gesamte Codebase gleich ist. Ich persönlich fand es immer interessant zu sehen, wie meine Kollegen Probleme gelöst haben. Gerade für neue Mitarbeiter und Junior Programmierer sind Code Reviews ein tolles Instrument: Als Reviewer lernt man die neue Codebase besser kennen und für den Programmierer wird sichergestellt, dass die Qualität des neuen Codes stimmt.

Best Code Reviews Practicies

Die Best Practicies beziehen sich auf Erfahrung im Einsatz von Crucible – dem Online Code Review Tool von Atlassian. Es ist sehr simpel, Mitarbeiter einzuladen, sich Änderungen am Code  anzuschauen und ggf. zu kommentieren. Es gibt einige Regeln zu beachten, damit Code Reviews nicht zum Bottleneck werden und zu Frustrationen führen:

  1. Nicht zu viele Kollegen zu einem Review einladen
    Lädt man zu viele Mitarbeiter zu einem Review ein, fühlen sich die einzelnen Programmierer nicht für die Qualität des Reviews verantwortlich und übersehen Code-Smells und Fehler. Zwei Reviewer pro Änderung haben sich für Atlassian als sehr praktikabel erwiesen.
  2. Reviews dürfen nicht zu groß sein
    Wenn man 100 Änderungen in 80 Klassen reviewen soll, verliert man schnell den Überblick und findet wenig Fehler. Man sollte vielmehr kleine Änderungen für ein Review einstellen.
  3. Reviews für Refactorings von Features trennen
    Damit man den Grund von Änderungen im Review versteht, sollten Refactorings von Änderungen für neue Features oder Bugfixes getrennt werden.  Man verliert sonst schnell die Übersicht.
  4. Nicht alles unter Review stellen
    Man sollte eine pragmatischen Ansatz für Code Reviews wählen, und nur relevante Änderungen unter Review stellen. Macht man simple Änderungen an Valueobjekten oder ändert den Namen einer Methode mit Änderungen in 300 Klassen, macht ein Review nicht unbedingt Sinn.
  5. Reviews sofort durchführen
    Um schnell Feedback zu erhalten, sollten Code Reviews nicht länger als 48 Stunden offen sein. Das heisst, dass der Code nach 48 Stunden vollständig reviewt sein sollte. Sind Änderungen notwendig, sollte diese sofort gemacht werden. Es sollten keine langen Diskussionen im Online Tool stattfinden. Lieber sollten der Autor und der Reviewer dann direkt miteinander sprechen, damit der Code so schnell wie möglich korrigiert wird. Erst dann ist der Task fertig (Definition of Done).
  6. Nicht sarkastisch sein
    Keiner sollte vor Code Reviews Angst haben. Sarkastische Kommentare sollten vermieden werden, sonst werden Code Reviews nicht im Team akzeptiert. Die Kommunikation in Code Reviews sollte der im Team entsprechen: Offen und wertschätzend!
Klar: Code Reviews sind nicht umsonst. Es wird Zeit der Entwickler kosten. Man fühlt sich aber um einiges besser, wenn noch einmal jemand über den programmierten Code schaut.

by Sven Peters at January 19, 2012 06:30 AM

January 18, 2012

Atlassian Developer Blog

Modern Principles in Web Development

I’ve been kickstarting a bunch of small web apps lately. It seems like every time I start a new project, theres’s always something new that causes me to adjust my development principles. I thought it might be good to take a snapshot of what’s “in” today. I like to think of web development phases starting from idea to delivery… all of it backed by strong principles of how to build great apps.

The following are my core web development principles today:

  • Designing for mobile first (even if you’re not building a mobile app)
  • Build only single page apps
  • Create and use your own REST API
  • “Sex sells” applies to web apps

Most developers have their own rules about how they like to build stuff. These rules are pretty opinionated, but that’s ok, because they’re mine. Let me explain why each of these are core to how I build apps today.

Designing for mobile first

Last year, Luke Wroblewski popularized a the idea of building for “mobile first.” Much of his thinking was born from the rise of mobile web/app usage and the poor experience many sites and apps designed for desktops left for users. Mobile first design forces us to frame the features of our app on a smaller screen. It forces us to make the hardest decisions about our app right from the beginning. That is, it encourages us to throw out features up front and limit it to just the ones that matter.

When you design for a larger screen you have a lot more whitespace that’s itching to be filled with features. When you start with a smaller screen, you have the opposite problem. You end up designing a smaller set of features. With a smaller set of features, it’s easier to focus on the core of your application. We’re also forced to innovate on these smaller features in a way that we might not have done when designing for a larger screen.

Another upside to this design approach is that you end up thinking of performance up front. Do you know what the fastest web app is today? It’s not Google’s or some startup’s latest creation. It’s the blank page. Yes, a blank page counts as a web app. The more you add to a blank page, the slower it gets. Mobile first design keeps apps from getting bloated. It allows us to keep our apps small and fast.

A sibling to the mobile first design principle is Responsive Web Design (the brain child of Ethan Marcotte). Responsive web design was also born as a way to fix desktop sized web apps on mobile sized web browsers. Responsive web design is less a design principle and more of a technique for creating multiple size representations of your web app. The core technique uses a feature of CSS3 called media queries. Media queries allow you to apply alternative CSS rules matching the queries you’ve set. The most common media queries are used to determine the size of the “viewport” of the browser. Media queries make it easy to take an existing desktop web site/app and make it mobile friendly.

However, it’s important not to use media queries without knowing the implications. For example, if you take a large web page (i.e., large HTML) with large assets (JS/CSS), applying media queries won’t improve the download speed of that page on a mobile device.

Responsive web design is best used as a technique when you know you’re going to be building a web app that needs to scale according to the screen size. Go here to see some great example of responsive web sites.

Build only single page apps

Single page apps, or SPAs, aren’t new. Gmail popularized it back in 2004, but since then it’s had a bit of a sluggish adoption rate. In a nutshell, a single page app is a web app that operates entirely in a single page. Traditional web apps transition from page to page. Each page is generated dynamically on a remote server. Typically, the web page that’s delivered to your browser is fairly static and doesn’t have much programmatic logic to process the interactions and data that you feed to the page.

A single page app in contrast off loads most of the programmatic logic and computation to your browser. In a single page app, the server typically doesn’t assemble the web page for you. Instead the web app is essentially “running” entirely on your browser. The only interaction between the browser and the server is the exchange of data required to run the app. All of this happens without the page refreshing or reloading.

The rise of better, faster browsers have made it easier than ever to design and build single page apps. Web frameworks and JavaScript libraries have grown over the past few years in support of this new paradigm. I’ll cover this later…

Single page apps have also made it possible to create “real-time” apps. A real-time app is an app that’s alive. It updates itself without the need for user interaction. In the last couple of years, browser vendors have rushed to create functionality to support real-time apps – creating a standard (web sockets) that’s made it increasingly easier to build real-time apps.

Create and use your own REST API

What’s the use of creating an API if you’re not going to use it yourself? The best APIs are the ones that are used for a purpose. If you build something for the sake of being able to say that you have it, it’s going to suck.

REST APIs itself are pretty opinionated. There are folks out there who believe that calling an API a REST API requires compliance with a strict set of principles. The problem is there are a lot of opinions on the principles itself.

Regardless of the core principles behind REST APIs, the one guiding principle I absolutely follow is that the API should be pragmatic. A pragmatic API means it was designed for a purpose and not for a general purpose.

Which is why you should build a REST API for your own use. If you’re not going to use it, how do you expect anyone else to use it?

For me, using my own REST API means using it to power my own “mobile first” designed single page web app. This means my web app uses my REST API as the M (model layer) in MVC. It becomes my interface for all data exchange between my single page app and the server.

“Sex sells” applies to web apps

To me this is obvious. There’s a reason it’s difficult to find great designers or UX people these days – everyone wants them. The first experience a user has with your app is the most important. As with most things, you want to put your best foot forward as first impressions are lasting.

Like it or not, the best looking apps get the most attention – even if your app is fundamentally better. But I’d also argue that an app can’t be fundamentally better if the experience is bad. As developers, we tend to downplay the importance of designing the experience. Developers who factor this in right from the beginning will have greater success with their products, period. If you suck at design, find someone to help you… now. This is one principle you can’t ditch.

Everyone has an opinion

My own opinion is my own. As developers, we’re entitled to that. In the end, it’s about the experience your app creates, not the implementation, that matters. Web development will continue to change. And if you’ve been around long enough, you’ve seen the same patterns appear over and over again. We will continue to evolve as developers. Our opinions and techniques will too. I’m excited when I’m forced to look at something in a different light. I’m sure I’ll have to revise this post the next time that happens.

How about you? Care to share your web development principles?

by Rich Manalang at January 18, 2012 11:52 PM

13 Steps to Learn & Perfect Security Testing in your Org

Intro

It is becoming more common for software applications to be written using web technologies, and for users to want to access them from anywhere, using an internet connection. Security of browser-based applications is very different from how things work with traditional thick-client architecture. There are far fewer boundaries between different web sites inside the browser than between different pieces of code that run on your computer under the control of the operating system. Security testing is therefore a very important part of testing web applications, which means that these skills are growing in demand for QA teams. Even for an experienced tester, web application security can seem daunting. How do you start building up these skills? Where can you turn to for more information?

In fact, security testing is in many ways similar to functional testing. You identify a risk, define what the expected behaviour should be, and then perform some testing to mitigate that risk by demonstrating that the unexpected does not happen. For example, say the system under test is an internet-facing web application, backed by a database. A risk could be that an attacker somewhere on the internet could use the front-end and gain access to sensitive data stored in the back-end (this is called SQL injection). The expected behaviour in this case is that the application will not let this happen – user input will not be directly pasted into an SQL statement that is executing on the database. To test this, you may try manually entering strings that you suspect might confuse the application into executing your commands, or use an automated tool to do this for you, or perform a code inspection to see how an input string will be treated.

The main difference when security testing is one of mindset. When functional testing, you are trying to prove that a feature works for an end-user – it does what they expect, and does not hinder them from completing their tasks. You would probably prioritise accordingly – focus on features that are used more often, used by more users, are considered the most important, etc. As a security tester, your ‘end-user’ is now an attacker trying to break your application. The goal of your testing is to prove that a specific attack scenario does not succeed, for any attack scenario. A significant difficulty here is that proving that a feature works is much easier than proving that a specific feature cannot be hacked by any method. You could use a similar prioritising approach as with functional testing – test only a set of most likely or simplest or most popular attacks for each feature. Another point to note is that popular developer responses to bug reports such as “a user would never do that” and “won’t fix – feature is hardly ever used” are simply not valid when security issues are involved – a potential attacker can do anything they like to perform a successful attack.

In this post, I will outline some tips for building up team skills in security testing.

Basics

1. Understand your own application

It is important to be familiar with the application you are testing so that you can assess where the risks are. Everything else will assume that you have this knowledge – the technologies used by the application, the profile of different users, the abilities you should and shouldn’t have with different levels of access, and the potential data that is stored by the application. The testing you would do is very different for a website that simply displays pictures of cats over the internet to anonymous visitors, versus one which sells pictures of cats to logged-in users who need to enter their credit card details.

2. Understand security terms and definitions

OWASP is a great source for this. The volume of terms and concepts might be overwhelming at first, so just concentrate on understanding some of the terms, preferably the ones most likely to apply to your application. Examples may be XSS, XSRF, SQL injection and path traversal. The CWE/SANS Top 25 lists the most widespread and critical errors that cause vulnerabilities. For an exhaustive list of all known attack methods check out CAPEC.

Build Knowledge

3. Use online training tools

A great way to start learning is to start testing an application which has known vulnerabilities, where you are provided with guidance on how to find them. My preference is for Google’s Gruyere which has separate lessons to cover each concept. You can look at hints to help you find the vulnerability, and the answers if necessary.

Some other options are OWASP’s WebGoat and Damn Vulnerable Web App.

4. Learn from others

It is likely that among the developers in your company, there will be some with knowledge of security topics. Ask them to pair with you to investigate the application behaviour. They should be able to demonstrate, for example, that a SQL injection string is not executed on the database server, and why it is not. If it is, then that will be educational for you both. They can also explain to you the design of the application and how it is intended to protect from attacks. If there are many people wanting to learn about security, get them to give a presentation.

5. Learn to use an automated vulnerability scanner

A good commercial option is Burp Scanner; there are also free options such as OWASP’s ZAP and Google’s RatProxy. These work by routing the HTTP traffic to and from an application through a proxy, and then resending the requests with various attack attempts replacing the original values. This can be an effective way of finding certain classes of vulnerability in a short amount of time, but it is important to understand (and make sure that your stakeholders understand) that this is not a magic bullet. The tool is naive, and has no knowledge of the applications business logic – it is simply replaying requests and checking the responses. There are many types of vulnerability that can not and will not be found with this strategy, and use of a scanning tool absolutely does not replace the need for manual security testing.

Automated tools, even expensive ones, find only relatively simple vulnerabilities and they usually come up with a lot of “noise”, or false positives. You need to know enough about security vulnerabilities to be able to evaluate each finding of the automated tool. Taking a scanner report and sending it unverified to the developers is the worst possible thing one could do.

Share Knowledge

6. Pass on what you are learning

As you start to build up knowledge, make sure that others also benefit from it. Give a presentation on some of the basic security concepts. Run a class about how to use an automated scanner. Both developers and testers can learn from you, and you will cement your own grasp on the topics.

7. Convince people that security is important

You may work with individuals who don’t know or don’t care about security issues – perhaps they are new graduates, or have previously worked in places where the software was firewall-protected. It is worth raising their awareness – remind them of the backlash against some big-name companies that have lost user-data. When your testing finds a vulnerability in an application, make sure you demo it, along with the potential exploits that can follow.  A good tool to demo is BeEF – which shows just how much power a simple XSS vulnerability can give you over another user and their browser.

8. Communicate security issues in context

It is important that you evaluate all security vulnerabilities you discover in the context of your application. A cross site scripting vulnerability that is only exploitable in obscure conditions is much less important that a vulnerability allowing someone to run any code on your web server. You may want to establish a scoring system for vulnerabilities you find. One of popular scoring approaches is CVSS. In addition to scoring, consider the business context – what happens if the attack succeeds? Losing pictures of your cats is of less impact (generally speaking) than someone tampering with company’s business records. If you need to prioritise what should be fixed, prioritising based on impact usually works better.

Maintain

9. Use good default test data

When testing a feature, you will probably be creating test data. Instead of using ‘test1′, ‘test2′, etc. or cartoon character names, get into the habit of using attack strings. This way, you’ll find you come across vulnerabilities almost by accident, just when using a feature. If you have an automated tool or import file providing the test data, do the same thing. You can share such data with other testers and developers, meaning they may come across issues without even knowing they are doing security tests.

10. Practice, practice, practice

Like any skill, you will get better with practice. As you start to find vulnerabilities in an application, you’ll start to get a feel for where they are likely to be in future, and will be able to raise them further in advance. Running regular scans against the code will mean you become more effective at using the scanner. Participate in code reviews and you can start pointing out where vulnerabilities are likely to be before even using the application.

11. Use automation when appropriate

Consider whether automation would help in security testing. You can often reuse existing functional tests for such a purpose.

Improve

12. Read a book

There are a number of good books about web application security. The recent ones are Web Application Hacker Handbook 2nd ed by the creator of Burp scanner Dafydd Stuttard and The Tangled Web: A Guide to Securing Modern Web Applications by Google’s Michal Zalewski.

13. External training

This post covers the basics of getting a team started with security testing. There is plenty more to know – and a wealth of online resources to help. You may decide that more focused training would help, like various courses by providers such as SANS. There are few security training courses specifically for QA people, so look for security courses for web developers instead. So-called “penetration testing” courses tend to focus on network hacking, but they often do have parts dedicated to breaking into web applications, so check the course’s content in advance.

by Mark Hrynczak at January 18, 2012 06:08 PM

Confluence Product Blog

Team Calendars 1.8 Released – Make Team Calendars Personal

Did you actually think we were going to slow down just because it’s a new year? After an exciting first 6 months in 2011, the Team Calendars development team continues it’s blazing pace in 2012.

We’re happy to announce that our next major release - Team Calendars 1.8 - is available for download now!

Connect Team Calendars with Google Calendar

At this point in human existence, managing your schedule is nearly impossible. Once upon a time, one’s agenda only consisted of finding shelter, food, and a mate. Today, however, we need a miracle to keep track of the endless meetings, appointments, and dinner dates. Our increasingly busy schedules deny us the clarity needed to successfully plan and organize our time.

Luckily, the latest release of Team Calendars delivers the vision required to confidently schedule events for your team through Google Calendar integration; satisfying 18 of your votes!

Consolidate Your Team and Personal Calendars

This release allows you to consolidate your Team Calendars and your personal calendar. With an already strapped personal calendar loaded with the day’s responsibilities, the idea of tracking the schedule of your coworkers is as farfetched as an airborne pig. But subscribing to your People and Events Calendars affords a new lens to your personal planning.

You might be planning a team lunch the week the majority of your team is on leave – viewing your People Calendars alongside your personal schedule keeps you from scheduling a meeting no one can attend in the first place.

It’s also helpful to know who’s going to be in the office the day of. If you’re like me, I always check my personal agenda before I leave my house in the morning to see what kind of day I have on my plate. I’m much more prepared for the day if I know which of my closest teammates aren’t going to be in the office that day – avoiding any ‘Oh $&*#’ moments – as I’m not surprised by an absence.

Using Outlook?

Great! You can subscribe to your People and Event Calendars from Outlook too. Bring in the new year by consolidating your team and personal calendars and happily plan and schedule your time with all the information.

So many features, so little time

Be careful not to blink, you might miss the next Team Calendars release (especially if you’re a JIRA user). And if you did blink, here’s a quick review of what we’ve been up to over the last few months:

Have Confluence and Team Calendars?

Awesome. Have a look at the release notes or download it now!

Have Confluence, but not Team Calendars?

Team Calendars averages 65 downloads a day and has reached 2,802 teams - like Facebook, Skype, Workday, and HTC. Using Team Calendars helps teams to schedule their leave, track their JIRA projects, and plan events. Learn more now!

New to Confluence and Team Calendars?

Learn more about Confluence and Team Calendars now.

by Ryan Anderson at January 18, 2012 05:26 PM

jr0cket

Boldly going Atlassian in London

26th October saw the first user group meeting for Atlassian in London.  Whilst there have been some amazing partner events in the past, its great to start building a closer connection to the community.

Over 60 people registered for our first meeting and it was a great turnout, from beginners to long standing customers with a variety of expertise.

Launch night - ideas mean tshirts

As it also happened to by the at the same time at the Atlassian launch there were extra goodies to give out.  To help break the ice, anyone suggesting ideas for the community got a tshirt with the cool new Atlassian logo.

Whether it was the tshirts or just the enthusiasm of the crowd I dont know, but with in about 20 minutes we had enough ideas to last a years worth of monthly meetings...

I showed off a neat video that explains the basics of Atlassian OnDemand, showing how you can get our tools as a managed service.  As there was a mixed level of experience, I also talked through how Atlassian take ideas through to reality.

Sharing experiences

As well as setting up the London AUG, Alan also presented his experience with the recently release Rapid board of Greenhopper.  Alan has worked with teams that often have a big backlog and lots of epics (functionality that needs to be broken down).  Using labels on JIRA tickets, a bit of simple JIRA Query Language (JQL) and the rapid board view he showed us how to manage our work effectively.

Whats next?

We hope to run the London Atlassian user group once a month to give every opportunity to share and ask questions face to face.  We will also make use of the meetup mailing lists and discussion forums so people can talk outside the meetups.

If you want to keep in touch with this community, please sign up, its free !

Thank you.
| John Stevenson | Public calendar | @JR0cket | gplus.to/JR0cket
| Tech websites | Tech blog | Lean Agile Blog

by John Stevenson (noreply@blogger.com) at January 18, 2012 06:53 AM

Visualisation gets ambitious... black holes

This is what I call visualisation, trying to see the heart of our galaxy even though its black...

Plan hatched to view Milky Way's black hole heart


The Event Horizon Telescope (EHT) team is looking for the ring of matter which forms around the edge of a black hole.

As the main feature of space is its black and the main feature of a black hole is black... how else are you going to see them :-)

If Einstein’s equations behind the General Theory of Relativity are correct, the matter around the edge of the event horizon will form a circle as it spins around the rim.

by John Stevenson (noreply@blogger.com) at January 18, 2012 06:50 AM

Matt Ryall

⌘ English Wikipedia anti-SOPA blackout

In around four hours, Wikipedia is going to start a 24-hour protest against the two pieces of US legislation proposed to regulate the internet:

Today, the Wikipedia community announced its decision to black out the English-language Wikipedia for 24 hours, worldwide, beginning at 05:00 UTC on Wednesday, January 18 (you can read the statement from the Wikimedia Foundation here). The blackout is a protest against proposed legislation in the United States – the Stop Online Piracy Act (SOPA) in the U.S. House of Representatives, and the PROTECT IP Act (PIPA) in the U.S. Senate – that, if passed, would seriously damage the free and open Internet, including Wikipedia.

From the community announcement:

In late 2011, the United States Congress proposed two legislative bills, the Stop Online Piracy Act (SOPA) and the PROTECT IP Act (PIPA), which legal scholars and others have advised have the potential to significantly change the way that information can be shared through the Internet. It is the opinion of the English Wikipedia community that both of these bills, if passed, would be devastating to the free and open web.

#

by Matt Ryall at January 18, 2012 01:40 AM

January 17, 2012

Matt Ryall

⌘ Valve Time

Estimating software development is hard, let’s go shopping!

#

by Matt Ryall at January 17, 2012 11:35 PM

⌘ Companies who spam their best customers

Shawn Blanc:

Getting junk mail and advertisements from companies I don’t do business with is annoying enough. But getting it from the companies which I have been a long-time and deeply invested customer is quite annoying.

I imagine it’s easy to fall into this trap when you have a database with all your customers’ email addresses and a campaign to run. Good marketing is hard.

#

by Matt Ryall at January 17, 2012 09:24 PM

Sven Peters

Atlascamp+ Unite

Dieses Frühjahr wird die Rhein-Main Region zur Atlassian-Region. Eine Woche Ende März kommt Atlassian nach Deutschland. Erst wird am 2o. März das Atlassian Unite in Frankfurt stattfinden und vom 22. bis 23. März das AtlasCamp Europa in Wiesbaden.

Die Anwenderkonferenz – Atlassian Unite


Das Atlassian Unite findet an 3 Orten in Europa statt: In Paris (15.3.2012), London (12.3.2012) und Frankfurt (20.3.2012). Hier werden hauptsächlich Vorträge rund um Atlassians Produkte stattfinden:

  • verschiedene Anwendungsfälle unserer Produkte und Plugins
  • die Roadmap für JIRA, Confluence & Co.
  • Best Practices
  • wie wir die Zukunft der Softwareentwicklung sehen
  • die lokale Atlassian Community
  • zusätzlich würden wir uns über Beiträge unserer Kunden freuen: Hier kann man sich für einen Vortrag bewerben

Atlassians Experten werden natürlich den ganzen Tag dabei sein und Rede und Antwort stehen. Das ganze wäre natürlich kein typisches Atlassian Event wenn es nicht am Abend mit einer Atlasbier-Zeit ausklingen würde.

Unsere Mitarbeiter aus San Francisco, Sydney und Amsterdam werden Ihre Vorträge meist auf Englisch halten, so dass es nur einen kleineren deutschsprachigen Teil geben wird.

Wir rechnen damit, dass unsere erste Anwenderkonferenz auf deutschem Boden schnell ausverkauft ist, also am Besten heute noch seinen Platz reservieren.

Die Entwicklerkonferenz – AtlasCamp Europe

Die jährlich in der Half Moon Bay stattfindende Entwicklerkonferenz kommt über den Atlantik! Europäischen Atlassian Plugin-Entwickler treffen sich für 2 Tage mit Atlassian Entwicklern zu diesem Geek-Event in Wiesbaden. Hier lernt man alles darüber, wie man ein Open Social Gadget oder Plugin programmiert, optimiert, erweitert, integriert und testet. Wir haben sichergestellt, dass es genug Zeit gibt, sich mit unseren Mitarbeitern oder Plugin-Partnern zu unterhalten. Weitere Details auch zu Hotels gibt es auf unserer AtlasCamp Europe Webseite.

Natürlich wird auch für ein Abendprogramm gesorgt. Die AtlasCamp Parties sind legendär und man sollte diese sich auf keinen Fall entgehen lassen…

Ich durfte auf dem letzten AtlasCamp in Kalifornien dabei sein… Hier schon als Einstimmung auf Wiesbaden mein Video:


by Sven Peters at January 17, 2012 10:55 AM

Atlassian News Blog

Registration open for Atlassian Unite Europe

Atlassian is coming to Europe! Our first ever Atlassian Unite will take place in London, Paris and Frankfurt. Unite is a full-day of talks about Atlassian products, plugins, community, use cases and best practices.

Tickets will sell out fast so reserve your spot today and we promise to provide you with the best in Atlassian updates, news and social events. We’ll be bringing engineers and product experts from around the globe.

When and where

Monday 12 March – London

Thursday 15 March – Paris

Tuesday 20 March – Frankfurt

Please note, the events in Paris and Frankfurt may have some sessions in French and German, respectively.

Call for Speakers

Got a great story to tell? We have a few slots at each event for customers who want to share their case study. Please submit your presentation ideas.

Get Your Geek On

Passionate about building plugins? We’ll conclude Unite with a 2-day developer event in Wiesbaden, Germany. That’s right, AtlasCamp, is coming to Europe! More info and registration here.

Looking forward to seeing you across the pond!

by Jessie Curtner at January 17, 2012 10:00 AM

Atlassian Developer Blog

(Guest blog) Interviewing the Product: Making Testing More Flexible with a Heuristic Test Strategy Model

This is a guest blog post by Michael Larsen, a “Lone Tester” with SideReel.com, which is a division of Rovi Corporation. His experience covers networking equipment software, SNMP applications, virtual machines, capacitance touch devices, video games and distributed database applications/web services.

Processes getting in the way

Over the past several years, I have had differing ideas and expectations when it comes to performing software testing in different organizations. Some are very rigid, with steps that had to be met in a specific way. In the 90s, when I worked for an internetworking manufacturer, this was mandated by ISO 9001 requirements and us proving that we “followed the process”. This made for voluminous test plans, lots of specific detail, and an impressive checklist.

Later, I worked for a video game publisher that was based in Japan, with testing provided by a group stationed in the U.S. Again, we had very specific requirements, this time not because of a need for following a standard, but because of a translation requirement; every bug report, test plan and status update had to be translated into Japanese and sent back to the company in Japan, where they would be reviewed, commented on in Japanese, sent back to us, and then re-translated back into English. This required a very specific process, and very specific wording for what we did.

In both of these instances, it would be safe to say that the process was “necessary”, by some definition of that word. However, I would also have to say that it also led to less effective testing. Why would I say that? Because in both cases (and several other examples I could provide), the process itself limited our ability to ask questions of the product. For me, my favorite metaphor for software testing is that of the “beat reporter”. We’re out to get “the story”, to land “the interview”, to get “the scoop”. For us to do that, we have to be able to ferret out a story wherever it can be found. When a process helps us do that, then it’s a benefit to us and something we can use to help us get the story. When the process actively discourages such things, then we are hindered in our ability to get the full story.

The Solution: A New Test Model

What if, instead of our constantly focusing on “following the process” or “having a thorough plan” we instead focused on having a large list of questions that we could ask any product? It sounds far fetched, doesn’t it? Actually, it’s not. There’s a way to do this rather effectively and the good news is, we don’t have to re-invent the wheel to do it. The process has already been described and laid out for us to consider and use as we see fit. It’s called the Heuristic Test Strategy Model (HTSM).

HTSM was designed by James Bach (http://www.satisfice.com/tools/satisfice-tsm-4p.pdf) and works as a template to ask a product questions. This model allows for questioning at a focused unit level, and as large and an entire suite of integrated applications. The main point of the HTSM is the ability to look at a broad range of categories, and to understand the questions that would be relevant for that category. Rather than create a series of canned scripts that walk a user through a checklist of expected states, this approach instead focuses on the relevant questions we want to have answered. Those questions may well lead us into numerous paths we otherwise would not have considered when we were focused on the “must test this” checklist. By actively questioning the product, we are able to create a much more comprehensive and adaptable testing strategy. What’s more, we actually learn about the product, and that learning can help us ask additional questions.

The key areas that the HTSM covers are:

  • Product Environment: What resources do we have? What are our constraints? What will prevent us from doing certain things on this environment? What if we were to scale up or down various aspects of our environment (RAM, CPU, storage, network access, etc.)?
  • Product Elements: What are the areas that you intend to test (and don’t say “everything” because that impossible)? How will you determine that you have covered the necessary steps to test that element (or set of elements)? How do you know which interactions make sense, and which ones are unlikely or needless overhead?
  • Quality Criteria: What rules help you to determine if a product has a problem? Do these rules harmonize with each other, or do they clash at times? Are there times when the criteria makes sense? Are there instances where it doesn’t? Penny Wyatt goes into this in more detail in her post on testing intuition.
  • Test Techniques:  What are the methods you will use to create tests? What informs your decision to use a particular technique over another? Does a boundary condition alone make for a successful test, or will you need to incorporate other elements such as load or negative testing to determine if there is an issue?
  • Perceived Quality: What are our results? How have we assessed the quality of a system? What information have we derived to help us come to that conclusion?

Performing a complete breakdown of the HTSM is well beyond the focus of a single blog post, but suffice it to say that it is an approach that can help guide and develop testing efforts in ways that static, formalized structures cannot. Unlike the structured methods, which presuppose a correct answer, the HTSM is instead a process that encourages questions, and more questions after initial questions are answered.

Challenge your product testing

I encourage everyone to take a look at this model, and practice using it on your next testing project. Instead of following the old script, sit down with your product and perform a thorough interview. Ask it the tough questions. Make it squirm, sweat and delve deep into its background, so that you can publish the “Scoop of the Season” in your next report.

Michael Larsen is the producer of “This Week in Software Testing”, a podcast hosted by SoftwareTestPro.com. He is a black belt in the Miagi-Do School of Software Testing. He is also a member of the Board of Directors (and an active instructor) with the Association for Software Testing, and the principal facilitator for the America’s chapter of Weekend Testing. Find him on Twitter at @mkltesthead and writes his own software testing blog called TESTHEAD.

by Ly Nguyen at January 17, 2012 12:13 AM

January 16, 2012

Matt Ryall

⌘ Apple Supplier Responsibility Reports

Apple has just published their 2012 Supplier Responsibility Report:

In 2011, we conducted 229 audits throughout our supply chain — an 80 percent increase over 2010 — including more than 100 first-time audits. We continue to expand our program to reach deeper into our supply base, and this year we added more detailed and specialized audits that focus on safety and the environment.

Well worth a read.

#

by Matt Ryall at January 16, 2012 11:24 AM

January 15, 2012

Atlassian News Blog

Atlassian Foundation helps save the planet

Atlassians with long-handled loppers

Beware of Atlassians wielding long-handled loppers.

It’s a little known fact that Atlassians have green blood. You could cut one to see, but that’s probably not a good idea. Especially if the Atlassian concerned is holding our weapon of choice, the long-handled lopper.

A few days ago, a group of us went out to help Conservation Volunteers Australia save the planet. Our mission: To rid (a small part of) Lane Cove National Park of the noxious weed, privet.

Privet, like many other non-native plants, simples loves Australia. It’s taking over and destroying the indigenous plants. Eventually, our wildlife will lose the habitat it depends on for food and shelter. Dwindling bio diversity. Global warming.  Planet under pressure.

Conservation volunteers to the rescue!

Our mission for the day

Conservation Volunteers Australia works hand in hand with the Australian national parks authorities. Three park rangers from Lane Cove National Park were at the conservation site, to show us the ropes.  Before we set off into the wild wild bush, one of the rangers clued us up on how to get rid of privet.

Trim away the branches, lop the stem at the base, then paint the stump with poison within 20 seconds. Throw the branches behind you and move on. (This led to a bit of confusion and hilarity when some of us realised we had cut off our line of retreat. But that was all part of the adventure.) Ignore any weeds that are shorter than knee-high. Try not to cut down a native plant.

Once the entire area has been cleared, by us and other volunteer groups in coming weeks, the rangers will light a controlled fire – a “hazard reduction burn”. This will burn all the cut branches and the small shooting weeds. The native vegetation will burn too, but will seed and sprout new growth. Many native plants rely on a good fire every now and then to clear the ground for the next generation and to trigger the release of seeds and the sprouting of seedlings.

Lions and tigers and snakes, oh my

A water dragon

We encountered this water dragon, a lizard about one metre long, sunning itself on a log.

The ranger’s briefing included an exciting list of hazards. Snakes are common in the park, in particular the brown snake and the red-bellied black snake. “But”, said our guide, “once we start working, any self-respecting snake will clear out. They don’t look at something 6 feet tall and say, ‘Ah, food.’”

We were warned to be wary of bull ants and jumper ants. They are aggressive, especially if you disturb a nest. They actually hop, and they move fast. We did spot a nest, and gave it a wide berth.

Ticks abound. We all sprayed ourselves liberally with insect repellent, but still a couple of people found ticks on their clothing. Usually a tick bite is just itchy and a nuisance, but some people do run into trouble with infections.

In truth, our park ranger said, our biggest foes were back pain and “that big yellow thing in the sky”. The weather was beautiful: not too hot, a light breeze, no rain. Nevertheless, we did spend the best part of a day in the Ozzie bush in mid summer. And we kept demolishing the trees that were giving us shade. So we drank lots of water, took frequent breaks, and learned to bend our knees rather than our backs.

Group photo

Victory!

Overheard

Armed with notebook and pen, I jotted down some comments from the bush whackers:

  • “Finally, we see the world in more than 1920 pixels.”
  • “I’ve discovered muscles I didn’t know I had.”
  • “That’s a greenhopper, right?”
    “No, a grasshopper.”
    “What’s a greenhopper then? Oh, wait, that’s our product!”
    [Yes, this is a true snippet of conversation, and the confusion was genuine. Real-life marketing. ;) ]

A nature walk

After lunch we took a short walk through the park and learned a lot about the plants, wildlife and nature care groups in the area. Atlassians have taken part in three bush regeneration days so far, and the walk has become a tradition. Quite apart from saving the planet on a regular basis, we love to learn something new. Even if it’s just that “cutting down trees is harder than writing code” (OH).

More pictures

See the people and the action in this Flickr set, and check out Conservation Volunteers Australia on Facebook.

by Sarah Maddox at January 15, 2012 08:14 AM

January 13, 2012

Sarah Maddox

Guess a name to win a copy of my book

Would you like to have some fun, and perhaps win a copy of my upcoming book too? Just guess the name of the girl on the cover! The first person to get it right will receive a free copy of the book, in a choice of paperback or ebook format.

The book is all about using a wiki for technical communication. It’s called Confluence, Tech Comm, Chocolate: A wiki as platform extraordinare for technical communication. It will be published in February by Richard Hamilton at XML Press.

The book cover

I love the illustrations in the book, and especially the picture on the cover. They are the work of a talented artist named Ryan Maddox.

Cover of "Confluence, Tech Comm, Chocolate"

Who is the girl on the cover?

She is the hero of the book. She is a technical communicator extraordinaire. Let’s dub her X for now. When you read the book, you will follow X as she sets up a Confluence wiki and adds a technical documentation space. Learn from her expertise with the wiki editor and macros. Share her adventures in agile development and search engine optimisation. Grow wings, as X does, and make your wiki documentation fly. Discover why X says we need a “kiss my wiki” attitude.

Guess her name – one guess per comment, guess as often as you like

What is X’s real name? Add your guesses as comments on this blog post. It’s just her first name, one word, that you’re looking for. You can add as many comments as you like, and write whatever you like in the comment, but please put only one suggested name per comment.

The first person to get it right wins a free copy of the book. You can choose whether you want a printed book (paperback), a Kindle version or an EPUB version.

If no-one has guessed the right name in the next few days, I’ll add a hint.

Let the fun begin. :)

Another chance to win

Here’s another opportunity to win a free copy of the book: Head on over to XML Press and sign up for email notification about the book. Your name will be automatically entered into a draw for a free copy.

Hint: Think chocolate

Here’s a clue: Our hero’s name has something to do with chocolate.

Keep guessing. :) I’ll add another clue soon!

(Hint added on Sunday 15 January, early morning Sydney time.)

We have a winner!

The name of the girl on the cover is…  Ganache. Congratulations to Jill Brockmann on guessing the name and winning a free copy of the book!

So, Ganache is the name of our our technical communicator extraordinaire. But this may be the first time ever that the word is used as a person’s or character’s name. Ganache is also a mixture of chocolate and cream, used to fill chocolates or cakes. People often add a flavour to the mixture, such as chopped raspberries to make a raspberry ganache.

Thank you to everyone for taking part. I hope you’ve had as much fun as I have!

(Winner announced on Sunday 15 January, 6pm Sydney time.)


by ffeathers at January 13, 2012 08:02 PM

Atlassian Developer Blog

The Kaizen Project – Continuous improvement for your Agile team

The Kaizen Projectis a new source of information to assist Agile teams in continually improving their practices and processes. Kaizen is the Japanese word for ‘improvement’ and The Kaizen Project shares best practice stories from around the globe. Topics from innovation to continuous deployment are covered, along with everything in between.

Teams at Atlassian are always looking for, and finding, new ways increase velocity, improve quality and deliver more frequently. Find stories from these Agile teams on The Kaizen Project, and share your own story too! There is a tonne of cool stuff happening in Agile teams around the world and your team is probably trying something new and exciting right now. To get in touch and share your story please send me an email.

You will also want to bookmark the Atlassian Agile series which includes interviews with and guest blogs by Agile practitioners.

by Nicholas Muldoon at January 13, 2012 04:50 AM

January 12, 2012

Atlassian News Blog

(Press Release) Atlassian Receives 2012 Excellence in Innovation Award Presented by Australian Ambassador to the U.S.

G’Day USA Honors Atlassian’s Contribution to Global Innovation

SAN FRANCISCO–(BUSINESS WIRE)–Atlassian, the leading provider of collaboration software for software development teams, today announced that it is being honored with this year’s G’Day USA Excellence in Innovation Award. G’Day USA is an annual program designed to showcase Australian business capabilities in the United States. Atlassian will receive the premier Innovation award from the Honorable Kim Beazley, AC, Australian Ambassador to the U.S., at tonight’s ceremony at the Computer History Museum in Mountain View, Calif.

Atlassian’s co-founders, Mike Cannon-Brookes and Scott Farquhar, started the company in Sydney, Australia in 2002, with $10,000 in seed capital from a credit card and the idea that innovators everywhere should have the best enterprise software products at the lowest price possible. Atlassian’s first product, JIRA, which streamlines software development, was an immediate success. In 10 years, Atlassian has grown to more than 17,000 customers and 440 employees worldwide with offices in Sydney, San Francisco, and Amsterdam. The firm is privately held, and has been profitable each year since its inception.

“Atlassian is truly unique. There are very, very few companies that can start with a $10,000 credit card, grow, remain profitable over the next ten years, and become a global enterprise,” said Rich Wong, partner with venture capital firm Accel Partners that invested $60 million USD in Atlassian in 2010. “Atlassian’s Australian heritage informs the company’s novel and innovative approach.”

“At Atlassian, we want to help others make better software themselves. We want to help software teams collaborate better. Ultimately, we want to help companies innovate more quickly, more easily,” said Farquhar. “We are truly honored to receive G’Day USA’s Award for Innovation because it speaks to the heart of what we’re trying to achieve. In ten years, we were able to evolve our products to help solve many of our customers’ problems efficiently.”

“Software is becoming increasingly more strategic to businesses around the world and our goal is to help them become more innovative in how they build it, manage it, and use it,” Farquhar added.

About the Awards

The G’Day USA event will showcase Australia’s strengths in biotechnology/life sciences, digital economy, and energy, highlighting Australia’s innovation achievements and a number of Australia-U.S. partnerships. Approximately 250 guests from Fortune 500 companies, investment firms, government agencies, world-renowned universities, and relevant industry associations are expected to attend tonight’s awards ceremony, which serves to kick off Australia Week 2012 in the Bay area.

“We are pleased to present Atlassian with the G’Day USA Excellence in Innovation Award. Atlassian continues to grow their company in Australia, the U.S. and around the world, and we commend them on their growth and philanthropic donor work,” said Mr. Nigel Warren, Consul-General and Senior Trade and Investment Commissioner for the Australian Consulate-General and Trade Commission. “The G’Day USA Excellence in Innovation Award is an annual award given by the G’Day USA/Australia Week Committee and is the premier Innovation Award for the entire G’Day USA program.”

Additional Resources

- Watch us on YouTube: www.youtube.com/goAtlassian or AtlassianTV: http://www.atlassian.com/tv

- Follow us on twitter: www.twitter.com/Atlassian

- Become a fan on Facebook: http://www.facebook.com/atlassian#!/AtlassianSoftware

About G’DAY USA: AUSTRALIA WEEK 2012

G’Day USA is an annual program designed to showcase Australian capabilities in the USA. The 2012 G’Day USA 3-week program brings new business, education, entertainment, innovation, and tourism events to eight cities (San Francisco, Dallas, Los Angeles, San Diego, Washington DC, New York, Houston and Chicago) with the goal of strengthening bilateral collaboration and realizing new business opportunities. Over 30 events will reach targeted audiences in 8 cities through conferences and forums, networking and promotions. The events are produced by the Department of Foreign Affairs and Trade, Qantas Airways, Tourism Australia and Austrade. G’Day USA is supported by the Federal and State Governments of Australia, Qantas Airways and other corporate sponsorships. For more information, please visit www.australiaweek.com.

About Atlassian

Atlassian products help innovators everywhere plan, build and launch great software. More than 17,000 large and small organizations – including Citigroup, eBay, Netflix and Nike – use Atlassian’s issue tracking, collaboration and software-development products to work smarter and deliver quality results on time. Learn more at http://atlassian.com.

Contacts

Atlassian
Catherine Norman, 415-701-1110 ext. 2921

by Annelise Reynolds at January 12, 2012 10:40 PM

Bitbucket Blog

Follow Up On Our Downtime Last Week

Last week we experienced unexpected downtime.  Anytime something like this happens we perform a full post-incident investigation to ensure it never happens again.  Here are our findings.

The Crash

We determined the problem started with our syslog server crashing.  We found log rotation occurred at 04:05 as the cron.daily logrotate script ran:

-rw------- 1 root root 101714 Jan 5 04:05 messages-20120105.gz
-rw------- 1 root root 5012515 Jan 5 15:11 messages

Instead of responding to HUP with a graceful reload, rsyslogd completely stopped:

Jan 5 04:05:04 bitbucket04 rsyslogd: [origin software="rsyslogd" swVersion="4.6.2" x-pid="1905" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'restart'.
Jan 5 04:05:04 bitbucket04 kernel: Kernel logging (proc) stopped.

Based on previous log entries this is normal, but it typically restarts properly.  In this case, rsyslogd didn’t start back up at all.

We’re currently running rsyslog 4.6.2 that ships with RHEL 6.2.  We suspect we hit a known bug – the fix isn’t yet packaged for RHEL.

Blocking on syslog()

So we determined rsyslog crashed.  We wouldn’t have expected that to be much of a problem.  However, closer inspection shows we were syslogging over TCP.  Our syslog server was configured for both TCP and UDP:

# Provides UDP syslog reception

$ModLoad imudp.so
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp.so
$InputTCPServerRun 514

But our clients were specifically configured to log over TCP – two ampersands prior to the hostname means use TCP and one would mean use UDP:

*.*    @@syslog.private.bitbucket.org

When our central rsyslog crashed all applications logging to it over TCP were blocked and our systems became unresponsive.  This included our custom applications and almost every other piece of our technology stack.  Unknown to us, we were  vulnerable to this problem since switching data centers over a year ago.  Moreover, recently we began syslogging much more information, such as Nginx logs.  In this instance, the crash together with the increased logging combined to make the situation much worse.

We’ve made these changes to ensure this doesn’t happen again:

  • Disabled rsyslog’s HUPIsRestart option
  • Added a Monit check to ensure rsyslog is restarted even if it crashes
  • Switched from syslog over TCP to UDP

We’re sorry for the inconvenience this caused.  We’re always working to make Bitbucket more reliable and we won’t see this particular issue occur again.

by Charles at January 12, 2012 08:01 PM

Sarah Maddox

REST API documentation embedded in the application

Our development team has built a tool that documents an application’s REST APIs within the application itself. What’s more, you can test the REST resources and methods too. All from the application’s user interface. Now, that’s embedded help for nerds. :) I’m writing this post because I think many technical writers and developers will be interested in this solution. It may trigger ideas about adding something similar to other applications too.

The tool is called the REST API Browser, and it is implemented as a plugin. At the moment, it is available only within the Atlassian Plugin SDK. In the future, you may be able to download the REST API Browser as a separate plugin and install it into any Atlassian application.

So, what does the REST API Browser do, what is the Atlassian Plugin SDK, and how can you get the REST API Browser to work within an Atlassian application?

Overview of the REST API Browser

This is what the REST API Browser looks like, when running inside an application called JIRA:

The /user/search REST resource in JIRA

JIRA is an issue tracker developed by Atlassian. The above screenshot shows one of the JIRA administration screens, part of the application’s user interface. I’m running JIRA on my local machine, in plugin development mode. The REST API Browser is available as one of the options on the application’s administration screens. It’s as simple as that.

In the screenshot, you can see the resources in the JIRA REST API, starting at the /user/search resource. For each resource, the REST API Browser shows the methods (GET, POST, PUT) and the parameters available.

You can even do real-time testing of the APIs, by submitting a request and seeing the response. In the screenshot below, I have run a GET request using the /user/search resource, asking for details of username “admin”. You can see:

  • A form, prompting you for the parameters relevant to the resource and method. In this case, the only parameter is the username.
  • The request, as formulated by the REST API Browser.
  • The response headers.
  • The JSON in the response body.

A REST request and response

The application’s REST APIs at your fingertips!

Which REST APIs does the Browser show?

The REST API Browser displays all the REST and JSON-RPC APIs available in the running installation of the application. That means all the remote APIs that are part of the application’s default installation (JIRA, in this case) as well as any additional REST APIs provided by a plugin.

So, if you install a plugin into JIRA, and that plugin exposes a REST API, the resources will show up in the REST API Browser too. Magic.

Introduction to Atlassian Plugin SDK

The Atlassian Plugin SDK is a tool for developers who want to create a plugin (add-on) for an Atlassian application. For example, you may want to add a new option to the Confluence page menu, showing all authors who have ever updated the current page. Or you may want to add a new option in JIRA that points to your organization’s intranet site.

But the SDK is useful even for people who don’t want to build a plugin. You can use the SDK to download and run an Atlassian application on your own machine, in plugin developer mode. One of the features that you get is the REST API Browser.

How can you get hold of such sweetness?

Here’s a quick start guide. First, install the SDK and use it to download and run your application:

  1. Follow the guide to installing the Atlassian Plugin SDK. Do just steps 1, 2 and 3. You can skip the last step, which sets up an IDE (Eclipse, IDEA or NetBeans), if you do not need a development environment.
  2. Create a directory in your file system to store the application executables. Let’s assume you want to run the REST API Browser in JIRA. Then, for example, you could create a directory called myjira.
  3. Open a command window.
  4. Go to the new directory that you just created, myjira.
  5. Run atlas-run-standalone --product APPLICATION. For example, atlas-run-standalone --product jira.
    Note:
    There are two dashes in front of the word product.

After following the above steps, you will have the application running on your computer. When all the downloads and installation are complete (which may take a while), you will see a message in your command window that includes the URL for the local installation of the application.

For JIRA, the message will look something like this:

[INFO] jira started successfully in 174s at http://localhost:2990/jira
[INFO] Type CTRL-D to shutdown gracefully
[INFO] Type CTRL-C to exit

Now you can access the application in your browser and use the REST API Browser from the application user interface:

  1. Go to your web browser and enter the URL given for your application. For example, http://localhost:2990/jira.
  2. Enter the username and password: admin / admin.
  3. Go to the application’s administration screen. For example, in JIRA: Click Administration at top right of the screen.
  4. Click REST API Browser on the administration screen.
  5. Choose an API from the dropdown list at the top left of the screen.
  6. Choose a resource from the list on the left of the screen.
  7. See the methods (GET, POST, PUT, etc) and the parameters available for that resource.
  8. To test the resource, enter the parameter values as prompted then click Execute.

The documentation has the details of running the REST API Browser in the SDK, and of viewing and testing the resources.

Getting technical: How the REST API Browser works

The source code is available on Bitbucket, as part of the Atlassian Developer Toolbox. The developer’s guide describes how to ensure that a REST API is included in the Remote API Browser. That document also gives a summary of how the browser is put together.

Pretty neat, huh

From a plugin developer’s point of view, the REST API Browser is very useful. From a technical writer’s point of view, I think it’s pretty revolutionary. Has anyone seen other examples of embedded REST API documentation?

Kudos to Rich Manalang and the Atlassian developer relations team for developing this shiny tool. Here is the blog post in which Rich announced it: Introducing the REST API Browser and the Atlassian Developer Toolbox.


by ffeathers at January 12, 2012 07:07 AM

Sven Peters

Arbeitsumgebung für Entwickler = Arbeitskultur 6

Die Atlassian Kollegen aus San Francisco sind kürzlich in ihre neuen Büroräume umgezogen. Natürlich war viel Wehmut dabei, aber mit der Aussicht in eine eigens für Atlassian geschaffene Umgebung zu ziehen, war der Abschied nicht ganz so schwer. Jetzt haben wir bei Atlassian den Anspruch, in allem was wir tun, excellent zu sein, und so haben wir uns auch bei der Einrichtung der Räume sehr viel Gedanken gemacht. Man verbringt mehr Zeit im Büro als zu Hause (wenn man die Zeit, die man schläft abzieht), und somit sollten die Arbeitsbedingungen  so angenhem wie möglich sein. Auch sollte man seinen Mitarbeitern die Umgebung bieten, die die besten Leistungen hervorruft. Nun haben Softwareentwickler meist andere Ansprüche an ein Büro, als Bänker. Softwareentwickler lieben die Freiheit, sich kreativ entfalten zu können. Und das haben wir versucht… und ich muss sagen: Es ist uns gelungen!

Offen

Wir pflegen eine sehr offene Kultur, also arbeiten wir gerne in Großraumbüros und das ohne Trennwände.

Unsere Besprechungsräume haben Fenster, so dass man sehen kann, wer sich gerade mit wem bespricht. Open company, no bullshit!

Das bedeutet auch, dass es etwas unruhiger ist. Damit die Kollegen andere Mitarbeiter bei längeren Telefongesprächen nicht stören, haben wir Telefonzellen (bei Atlassian eher Skype-Zellen) eingerichtet.

Meetings

Damit man auch spontane ungezwungene Meetings abhalten kann, haben wir Besprechungsnischen eingerichtet.

Flexibel

Einfach mal den Arbeitsort wechseln und gemütlich auf einem Sessel weiter programmieren? Dazu haben wir viele Möglichkeiten geschaffen.

Wohlfühlen

Für das leibliche Wohl ist eine gut ausgestattete Küche vorhanden.

Einfach mal bei einer Partie Tischfussball ausspannen.

Nach dem langem sitzen vor dem Bildschirm tut eine Massage gut!

Mehr Fotos unserer SF Büros gibt es hier. Zusätzliche Informationen zu Atlassians Kultur gibt es auf der Atlassian Webpage.


by Sven Peters at January 12, 2012 04:30 AM

January 11, 2012

JIRA Product Blog

Calling All Android Devs – Help Us Help You

Since the release of JIRA Mobile Connect we’ve had almost nothing but positive reaction from mobile developers. They love the ability to collect feedback from their end users – including custom data, screenshots, voice audio, and crash reports – and have it show up directly into their favorite bug tracker, JIRA.

JIRA Mobile Connect

I say “almost” because there is one small gripe that comes up time and time again: Support for Android.

And trust me, we hear you loud and clear. We want this as much as you do.

Thankfully JIRA Mobile Connect is open source, so with the strength of the Android community, we hope you can help us make this a reality even faster.

JIRA Mobile Connect for Android

We understand the challenges of developing applications for an open platform like Android are significantly more complex than iOS – with seemingly endless combinations of devices, OS and app versions. So, it’s no surprise that JIRA Mobile Connect will make a huge impact for Android developers everywhere.

To date, Dariusz has been leading the charge with his 20% time to get us a working alpha of JIRA Mobile Connect for Android on Bitbucket. While this is heading in the right direction, we’d love to get more of you involved with the project.

How can I help?

Since Dariusz has the basics working, we’d love to get more folks involved by installing and testing out JIRA Mobile Connect for Android (see steps below).

We have also setup a JIRA project to track bugs and feature requests, so feel free to add your ideas for improvement and try to find something you feel is interesting and valuable to work on.

If you need inspiration, I asked Dariusz to identify the top three areas where we could use your help with JIRA Mobile Connect for Android, which include:

  1. Provide ability to attach screenshot with feedback (ANDROID-2)
  2. Polling for server updates (ANDROID-6)
  3. Adding crash report (ANDROID-1)

Of course general testing, polishing and bug fixing is always welcome. We’d love to get more Android apps testing JIRA Mobile Connect to help iron out some of the kinks (like this or that).

Getting started with JMC for Android

It’s actually pretty easy to get started with JIRA Mobile Connect:

  1. First, you’ll want to fork the SDK for Android on Bitbucket and add it to your app. (See readme for details)
  2. Next, you’ll need to add the JIRA Mobile Connect plugin to your JIRA instance via your Plugin Manager and enable it for your project. (See documentation for details)
    If you don’t already have JIRA, just sign up for a free 30-day JIRA OnDemand trial. JMC is included.
  3. Go wild!
Once your changes are complete, simply submit a pull request on Bitbucket for us to review your code and add it back to the JIRA Mobile Connect SDK for Android. We’ll make sure to get some cool swag out to all contributors. So what are you waiting for??

Other helpful resources

You may want to take a look at the following JIRA Mobile Connect resourses:

by Ken Olofsen at January 11, 2012 11:58 PM

Matt Ryall

⌘ Samsung vs Google

Jean-Louis Gassée:

This leaves us with the potential for an interesting face-off. Not Samsung vs Motorola/HTC, but…Samsung vs. Google. As Erik Sherman observes in his CBS MoneyWatch post, since Samsung ships close to 55% of all Android phones, the company could be in a position to twist Google’s arm. If last quarter’s trend continues — if Motorola and HTC lose even more ground — Samsung’s bargaining position will become even stronger.

But what is Samsung’s ‘‘bargaining position’’? What could they want?

#

by Matt Ryall at January 11, 2012 10:06 PM

Bitbucket Blog

Introducing Keyboard Shortcuts

Make your Bitbucket experience faster by dropping the mouse and taking advantage of the new keyboard shortcuts.

Keyboard shortcuts provide a quick and easy way of navigating through Bitbucket and performing common (repetitive) actions without having to take your fingers off the keyboard. Pages you’ll find keyboard shortcuts useful for include:

  • source code browser
  • commit history
  • pull requests
  • searching from any page

Row highlighting

Press “j” and “k” to quickly move up and down between table rows and the source browser.

A yellow row highlighter is used when navigating tables and source to show you which row is selected, so you can quickly move between pages when pressing enter.

Shortcuts are just a key away

Navigate over to your Bitbucket repo and try out a few easy shortcuts to get going:

  • Press “g” then “d” and you will quickly jump to your dashboard
  • Press “/” to search your repo from any page

To see a list of all keyboard shortcuts, simply press the ‘?’ key from any page or read our keyboard shortcuts documentation and start using keyboard shortcuts today!

by jstepka at January 11, 2012 07:59 PM

Confluence Product Blog

Moving Confluence from Subversion to git

Three months ago, the Confluence team switched from Subversion to git, just in time for our 4.1 release. In Confluence, git, rename, merge oh my… we talked about the problems we encountered with merges across branches that had lots of renames. In this post, we take a step back to look at the tools we used in order to migrate the Confluence source code from Subversion to git.

Preparation

Firstly, we wanted to ensure that the following infrastructure supported our source code hosted in git:

  • Since our team uses Maven, we needed to ensure that the Maven releases worked properly, especially all of the custom Maven plugins and scripts we built for source code distribution and Confluence release builds.
  • We have a large number of Bamboo build plans that we use to test and release Confluence and some of its supporting libraries and plugins.
  • JIRA, FishEye and Crucible are crucial in our development workflow, so we wanted to be able to set up and test the integration first.

Secondly, we wanted to make the switch to a new version control system as smooth as possible for the team, without unnecessarily interrupting our development iterations. To accomplish this goal, we decided to set up a git mirror of our Subversion repository, which helped us test the git integration before finally flipping the switch.

Process

With the help of git svn, it is relatively straightforward to convert a Subversion repository to git:

  1. Clone the entire repository with git svn, making sure to properly map author information.
  2. Turn the svn tags that git svn maintains as branches into proper git tags.
  3. Potentially prune unused branches before pushing the git repository to its new location, in order to reduce the size of the converted git repository.
  4. Push the newly created local tags and branches to the final shared repository.

Creating the initial git repository

The authors file

The initial import should be done with a properly populated authors file that maps Subversion usernames to git author names (including email addresses). This file will be used to correctly populate the git commit messages. The authors file has the following format:

SVN-USERNAME = Author name <email>

To get an initial list of usernames for all the developers that commited to the current project, the following command can be run inside the Subversion repository:

svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq

For the Confluence migration, I used a simple ruby script that retrieves staff information from LDAP and prints it in the correct format to STDOUT:

#!/usr/bin/env ruby

# Requires 'ldapsearch' to be on the $PATH

require 'ostruct'

bindDN="uid=ssaasen,ou=People,dc=atlassian,dc=com"
url="ldap://ldap.atlassian.com"
baseDN="ou=People,dc=atlassian,dc=com"

result = `ldapsearch -LLL -D #{bindDN} -x -W -H #{url} -b #{baseDN} "(uid=*)" -S uid uid cn mail`

records = result.split("\n\n").inject([]) do |lst, group|
  # dn: uid=ssaasen,ou=people,dc=atlassian,dc=com
  # uid: ssaasen
  # cn: Stefan Saasen
  # mail: devnull@atlassian.com
  lst << group.split("\n").inject(OpenStruct.new) do |e, line|
    key, *val = line.split(":")
    e.send("#{key.strip}=", val.join(":").strip)
    e
  end
end

records.reject {|e| !e.mail }.sort{|a,b| a.uid  b.uid}.each do |rec|
  name = rec.cn ? rec.cn : rec.uid
  puts "#{rec.uid} = #{rec.name} <#{rec.mail}>"
end

This is of course only one of the many different ways to generate the authors mapping file. When you make the change, be sure to do what’s comfortable for you and your team.

Initial clone

With the authors file properly populated, the following command can be used to import the Subversion history into a git repository:

git svn clone --prefix=svn/ -s --no-metadata \
  --authors-file=$BASE_DIR/authors-transform-final.txt \
  http://svn.example.com/svn-repository/ local-repo

This command will clone the Subversion repository into the git repository named ‘local-repo‘ using a default Subversion layout. (The command assumes svn-repository contains trunk, tags, branches directories.) The layout uses the authors file and removes the git-svn-id that git svn uses as a fallback to map Subversion revisions to git commit ids.

A word of caution: Omitting the git-svn-id meta data from every commit message will prevent git svn from restoring that information if its internal database ever gets corrupted. This option should not be used if you want to use git svn as a Subversion client!

Commits will then look like:

commit 46fd18726ae451ef4d48a5a1ce16600b66bec5d3
Author: John Doe <john.doe@example.com>
Date:   Fri Sep 16 07:00:41 2011 +0000

    CONFDEV-6004: make placeholders more robust in webkit and firefox

instead of:

commit 46fd18726ae451ef4d48a5a1ce16600b66bec5d3
Author: jdoe
Date:   Fri Sep 16 07:00:41 2011 +0000

    CONFDEV-6004: make placeholders more robust in webkit and firefox

    git-svn-id: https://svn.example.com/repository/project/trunk@163240 d2a7a951-c712-0410-832a-9abccabd3052

Since the initial clone took a lengthy 12 hours, we used a slightly modified version of the command that enabled us to keep using the repository as a mirror. Due to our repository layout, we explicitly defined the directories as branches (using the -b, -T, -t flags):

#!/bin/bash

set -u # Don't use undefined variables
set -e # Exit on error

REPO_NAME="confluence-git"
BASE_DIR=/opt/svn-to-git/conversion

git init $REPO_NAME
cd $REPO_NAME

git svn init \
    --no-metadata \
    --prefix=svn/ \
    -Tatlassian/confluence/trunk \
    -tatlassian/confluence/tags \
    -batlassian/confluence/branches \
    -batlassian/confluence/branches/private \
    file://$BASE_DIR/atlassian-private-svn

git config svn.authorsfile $BASE_DIR/authors-transform-final.txt
git config svn.noMetadata
git svn fetch

To decouple network access and svn to git conversion, we used a local svn copy using svnsync instead of directly using the Subversion server:

# Initialise the svnsync mirror
svnsync init file://$BASE_DIR/atlassian-private-svn http://svn.example.com/repository

Keeping the git repository in sync with our Subversion server was then simply a matter of running:

svnsync sync file://$BASE_DIR/atlassian-private-svn
cd confluence-git
git svn fetch --authors-prog=$BASE_DIR/update-authors.rb

For a one-off conversion it is sufficient to only use the authors file mentioned above. For ongoing synchronisation, the --authors-prog option can be used to look up author mappings that do not exist in the original authors file, a necessity if there are new developers commiting to the upstream Subversion repository.

authors-prog accepts a single argument (the Subversion username) and returns a Name <email> pair on $STDOUT. The script we used is a slightly more generic version of the Ruby script introduced above that looked up the name/email pair from our internal LDAP server.

Our git svn mirror was synced every minute, and it was used to test our build and development infrastructure. After successfully running our mirror for a few weeks we even switched some of our builds to run off of git, as it turned out to be faster than checking out from our busy Subversion server.

Final conversion

After running and exercising the git-svn mirror for a few months, we finally decided to switch after the Confluence 4.0 release.
In order to turn our exisiting git mirror into our final repository, we turned the svn tags into proper annotated tag objects in git, pruning old and unused branches along the way.

Subversion tags

In order to maintain svn tags, git svn keeps them as local branches, instead of proper git tags. The following script turns every git branch that represents a Subversion tag into an annotated git tag.

Git has two different kinds of tags: a lightweight tag and an annotated tag. The lightweight tag is simply a named reference that points to a particular commit that allows you to refer to a tag by name instead of its SHA1 commit id. Annotated tags, on the other hand, are objects of their own that require a tag message and record the tag creator and the tag creation date.

The following script turns the svn tag branches into annotated tag objects:

#!/bin/sh

# Based on https://github.com/haarg/convert-git-dbic

set -u
set -e

git for-each-ref --format='%(refname)' refs/remotes/svn/tags/* | while read r; do
  tag=${r#refs/remotes/svn/tags/}
  sha1=$(git rev-parse "$r")

  commiterName="$(git show -s --pretty='format:%an' "$r")"
  commiterEmail="$(git show -s --pretty='format:%ae' "$r")"
  commitDate="$(git show -s --pretty='format:%ad' "$r")"
  # Print the commit subject and body separated by a newline
  git show -s --pretty='format:%s%n%n%b' "$r" | \
      env GIT_COMMITTER_EMAIL="$commitDate" GIT_COMMITTER_DATE="$commitDate"  GIT_COMMITTER_NAME="$commiterName" \
      git tag -F -a - "$tag" "$sha1"
      echo "Tag: ${tag} sha1: ${sha1} using '${commiterName}', '${commiterEmail}' on '${commitDate}'"

  # Remove the svn/tags/* ref
  git update-ref -d "$r"
done

If you compare the tags in your git-svn clone against those in the Subversion repository, you might notice that the number of tags differs. In our case, we had 535 tags in the Subversion repository but 556 tags in our git-svn clone. The difference comes from the tags that were once created but removed from the Subversion repository since the clone began. In order to create a true copy of the Subversion repository at the time of the final switch, we used the following script to remove local tags not present anymore in the Subversion repository:

for tag in $(git tag -l); do
    set -e
    echo "Check if the tag '"${tag}"' still exists in Subversion"
    set +e
    svn ls https://svn.example.com/svn/confluence/tags/${tag} > /dev/null 2>&1
    if [ "$?" -ne 0 ]; then
        echo "Tag '"${tag}"' doesn't exist anymore, will remove it from git repository."
        set -e
        git tag -d ${tag}
    fi
 done

Prune large, unused content

Switching your version control system is a good opportunity to get rid of unused or unnecessary history or branches. This might not be worth the effort for fairly young or small projects, but in large projects like Confluence, we felt that the size of our git clone (~800 MB) could be improved. Due to its distributed nature, a clone of a git repository transfers every single file ever added, so pruning accidentially commited files or removing unused branches benefits every consumer of the git repository.
To reduce the size of the repository on disk, it’s worth checking for large files that can be safely removed from the history. To get an idea of what the large files are in a git repository, we use the following script to print a list of the 10 largest objects:

#!/usr/bin/env ruby

# Based on http://progit.org/book/ch9-7.html

puts "Running 'git gc'" && `git gc` unless $DEBUG

# Find the 10 largest objects
`git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n --reverse | head -10`.split("\n").each do |line|
  # SHA1 type size size-in-pack-file offset-in-packfile
  # or
  # SHA1 type size size-in-packfile offset-in-packfile depth base-SHA1
  sha1, type, size, *rest = line.split
  size_human_readable = sprintf "%.2f", size.to_f/1024.0**2
  puts "Resolving file information for #{sha1}" if $DEBUG
  path = `git rev-list --objects --all | \grep #{sha1}`.split.last
  $stdout.puts "sha1: #{sha1}, size: #{size_human_readable} Mb, file: #{path}"
  $stdout.flush
end

In our case, which considered all branches, including the private and possibly unrelated ones, the script yielded the following result:

$> cd /path/to/git/repo.git && ruby /opt/scripts/find-large-objetcs.rb
Counting objects: 521785, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (165873/165873), done.
Writing objects: 100% (521785/521785), done.
Total 521785 (delta 281337), reused 521785 (delta 281337)

sha1: f785359836cdc6abb85d6771d5241b21034dd31e, size: 44.73 Mb, file: rthomas/fedex13/trunk/conf-webapp/src/main/resources/com/atlassian/confluence/setup/atlassian-bundled-plugins.zip
sha1: 4d18fd8b96cb35b81dba868f905b6d0074dc92e4, size: 41.96 Mb, file: conf-acceptance-test/src/main/resources/siteExport-QAdata.zip
sha1: 89323ee2956be8bbfea9707117ffeb0f45719317, size: 41.37 Mb, file: bar/fedex14/python_scripts/102153-2.xml.zip
sha1: 6c2e4e7388f86b49ae0625cc27262e8448af659f, size: 36.46 Mb, file: replay.tar.bz2
sha1: 2ba11ba3b0f289ebcd23ff722291d2fe2a1767ff, size: 27.57 Mb, file: foo/fedex13/trunk/confluence-bundled-plugins/target/bundles/OfficeConnector-1.6.jar
sha1: e22530fdb67da29d12eefd3adda7d3f2d3b2f14b, size: 17.68 Mb, file: abc/frother/conf-webapp/src/main/resources/com/atlassian/confluence/setup/demo-site.zip
sha1: daf0227c2af2093fe409daf648cba5e05fb035f8, size: 14.36 Mb, file: conf-acceptance-test/src/main/resources/site-export-broken-trustedapp.zip
sha1: b282cdbe5079eca684683b27efa709f67b9a4702, size: 6.31 Mb,  file: conf-webapp/src/main/bundled-plugins/atlassian-plugin-repository-confluence-plugin-2.0.9.jar
sha1: d22e1ce128dc658f4ed3610fed264b676f8ab4ff, size: 5.21 Mb,  file: baz/fedex5/confluence/src/etc/java/com/atlassian/confluence/setup/atlassian-bundled-plugins.zip
sha1: ee6337b5de108cb6aa8f708c3a2f2454af041f58, size: 4.49 Mb,  file: conf-webapp/src/main/resources/com/atlassian/confluence/setup/demo-site.zip

We see that some of the private branches in our svn repository contain files we don’t need. It’s important to note that the files listed can be part of other branches, so this list of large objects is merely one way that may help you identify branches that would be worth leaving out of the new repository.

Create the final branches

To reduce the size of the final repository we decided to prune some of the old branches and to keep only branches mapping to official streams of work (old stable branches for the maintenance releases) or important feature branches. This reduced the size of the repository from ~ 800MB to ~ 350 MB.

The following script for example only considers branches starting with the prefix confluence so it creates local branches for only a subset of all the available svn branches:

#!/bin/sh

# create local branches out of svn branches
git for-each-ref --format='%(refname)' refs/remotes/svn/ | while read branch_ref; do
branch=${branch_ref#refs/remotes/svn/}
# Only use select branches
if [[ "$branch" =~ ^confluence(_[0-9]|-project-[0-9]).* ]]; then
    echo "Creating Confluence branch: $branch"
    git branch -t "$branch" "$branch_ref"
    git update-ref -d "$branch_ref"
fi
done

Push to the new shared git repository

After creating local tags and branches, the only remaining step is to push them to the shared repository that the team is going to use. We host the Confluence repository on Bitbucket:

git remote add origin https://bitbucket.org/atlassian/confluence.git
git push origin --all   # Pushes all refs under refs/heads
git push origin --tags  # Pushes all refs under refs/tags

Done!

Conclusion

git svn is not only a great tool that allows you to use a local git repository with a Subversion server, but it also is a simple way to convert any Subversion repository into a proper git repository.

by Stefan Saasen at January 11, 2012 03:00 PM

Bonillaware

Open Data. Open Government

Corren malos tiempos para la lírica. Ultimamente, parece que las únicas iniciativas públicas aceptables son medidas de ahorro cortoplacistas. Y, sin embargo, creo que, ahora más que nunca, en un mundo que parece un futbolín, nuestro país debería invertir dinero en hacer que nuestros datos públicos sean accesibles por los ciudadanos que los financian.

El concepto es tan estúpidamente simple que parece revolucionario: si no tenemos nada que esconder, si estamos orgullosos de lo que hacemos ¿Por qué deberíamos ocultarlo?

El movimiento Open Data lleva esta filosofía más allá y defiende que determinados datos, en manos de organizaciones privadas o públicas que restringen su acceso, deberían ser puestos a disposición del público, sin limitaciones de acceso, por interés del bien común.

Si un gobierno no favorece la apertura de datos, está implicitamente en contra. Deberiamos preguntarnos por qué.

En el caso de las empresas privadas, la necesidad de acceder a sus datos por el bien común puede ser discutible pero, dejando a un lado estereotipos preconcebidos y convencionalismos… ¿Alguien pueden encontrar alguna justificación para que un gobierno oculte información a sus ciudadanos?

Hay empresas y organismos públicos que han apostado por esa filosofía con resultados espectacularmente exitosos pero, sin embargo, en España las iniciativas similares son escasas y aisladas.

Open Gonvernment

El Open Government o Gobierno Abierto es una doctrina política que cree que la actividad del Gobierno y la Administración Pública deberían ser completamente transparentes para los ciudadanos a los que dicen servir.

Para conseguirlo, se apoya en las ideas del movimiento Open Data y defiende que las instituciones públicas deberían facilitar el acceso a esta información pública de manera libre, sencilla y clara, permitiendo de esta manera que los ciudadanos puedan realizar un control de la acción de gobierno.

En España, aunque los conceptos de Open Data y Open Government son bastante conocidos en ambientes técnicos, el público general apenas los conoce ni entiende el alcance de los mismos.

La defensa de la apertura de datos no tiene nada que ver con política, sino con nuestro deber y derecho como ciudadanos de mejorar una Sociedad en la que supuestamente creemos. Por eso, es importante que ayudemos a concienciar a la gente para que exija al gobierno dicha apertura. Sobre todo cuando, como técnicos, sabemos que cuesta lo mismo proporcionar los datos como un fichero de texto tabulado -fácil de procesar- que en formato PDF.

Algunas iniciativas, como el Desafío Abredatos o Adopta un Senador están intentando popularizar la apertura de datos entre el público general. Tímidamente, empiezan a aparecer algunas iniciativas públicas como el proyecto Aporta, pero queda MUCHO camino por recorrer. Todavía podemos encontrar situaciones surrealistas como ver como se emplea dinero y recursos públicos en evitar que aplicaciones desarrolladas desinteresadamente por terceros funcionen correctamente.

Si estás interesado en conocer más sobre el tema y quieres ir mas allá de este articulo, te recomiendo que acudas el 18 de enero, a las 19:30h, al evento que organizan los camaradas del metal de FamerDev.

Open Data: Modelos de datos abiertos

Espacio CAMON

Plaza de Moncloa, 1; acceso por Princesa.

MADRID

+ info

by david at January 11, 2012 05:37 AM

January 10, 2012

Confluence Product Blog

SharePoint Connector 1.5 Released: Includes Support for Confluence 4

The latest release of the Confluence SharePoint Connector is loaded with new features that help make the static content you store in SharePoint easier to embed within the dynamic content you create and share in Confluence.

Access Content in SharePoint From Confluence, Fast

Confluence 4.0 delivered a new intuitive editing interface that lets users create rich content with extraordinary speed and simplicity. Combine the content storage benefits of SharePoint with the new content collaboration power of Confluence and you’ve solved your team’s collaboration struggles.

From speaking to our customers over the years we’ve learnt that SharePoint is often used to store legacy documents. There are times when you need to make these documents accessible in Confluence where everyone is collaborating around projects and getting their work done. We’ve made it even faster for the users that live in Confluence to embed custom SharePoint Lists and link to SharePoint documents in Confluence pages with Macro Autocomplete.

It’s also easy to jump over to SharePoint from the lists embedded in Confluence pages with a new View in SharePoint link accessible from the macro property panel.

Lastly, we’ve made the integration that the SharePoint Connector provides more discoverable to Confluence users by including the SharePoint Document Link and List macros in the editor’s Insert Menu.

Find SharePoint Macros in the Insert Menu

Faster Linking to SharePoint Content

Let’s face it, collaborating around the content in SharePoint is a burden. However, pulling content stored in SharePoint into Confluence will not only save you time, but your mental health too!

Improved SharePoint Document Link Macro

Effortlessly create links to your SharePoint server’s Office documents while editing Confluence pages. Links inserted using the SharePoint Link macro let users open and edit SharePoint documents directly in the appropriate Office application, such as Excel or Word, without having to load the SharePoint site.

SharePoint Document Link Dialog

SharePoint List Macro

If you’ve got a group of related documents – like collateral for an upcoming product launch – that are stored in SharePoint, the the SharePoint List macro makes it easy to share those documents with other stakeholders that get their work done in Confluence. The macro can display most SharePoint list types and document liabraries giving you the ability to access and collaborate around all of your SharePoint documents in Confluence.

SharePoint List Macro

Watch Confluence Content from SharePoint

If you’re viewing a Confluence page or blog post within a SharePoint site you can now choose to Watch it to receive email notifications whenever changes are made.

Up-to-date Content, All the Time

Even better, if someone edits the Confluence page or blog post while you are viewing it, the Confluence Web Part in SharePoint will automatically refresh so you’re guaranteed to be viewing the most current version. Keeping up-to-date with the dymanic content that lives in Confluence just got easier.

Available Today!

There are even more improvements in the SharePoint Connector 1.5. Go get it, try it out, and let us know what you think.

by Ryan Anderson at January 10, 2012 09:08 PM

Atlassian Developer Blog

Testing and Bad Smells: when to investigate potential bugs

Something Smells Fishy

You’re testing a feature and along the way, you spot something that seems unrelated and trivial. Maybe it’s a warning message in the logs that wasn’t there before. Or the font of some tiny text has changed slightly. Otherwise, the functionality you tested works as expected, everything looks OK, and you really need to resolve the issue and get onto testing the next feature.

You’ve encountered a bad smell.

There are many arguments for dismissing it and moving on. You haven’t seen anything actually wrong, the feature works as intended and most likely the bad smell is just an unrelated distraction. In most cases, you’ll add more value to the product by spending time testing the next feature rather than taking time to investigate the smell. Alternatively, if you stop and investigate it, most of the time it’ll turn out to be just as it appears – a trivial issue or a non-issue.

However, once in a while, you investigate and find something more. The bad smell is merely a symptom of a larger issue that was otherwise unnoticeable… or, at least, unnoticed. By investigating the smell, you’ve prevented a much bigger issue from shipping – possibly even one relating to security or data loss.

What Is That Smell?

A diligent tester could stop and investigate every bad smell he or she encounters, just to be sure. However, in most software development companies there just isn’t the time or the resources to investigate everything to this level of detail – particularly in environments where the dev:test ratio is significantly larger than 1:1. A tester – as does everyone else – has a responsibility to work efficiently and make the best use of their time.

How, then, does a tester tell the difference between a bad smell worth investigating, and time-consuming distraction?

I feel that the answer lies in domain knowledge. A tester who understands the domain – the product, the technology, and the environment – is going to be much better equipped to identify which smells are symptoms of larger problems, than a tester who isn’t. Bearing that in mind, here are some classes of bad smells that I consider worth spending my time following up:

  • Smells that are familiar:
    • When a similar smell has been investigated before and turned up a serious issue, there’s a good chance that it will again.
    • Familiar smells should be treated with caution. After identifying a bad smell and tracing it to a serious issue, the tester and developers involved have a responsibility to ensure that the issue is easier to notice in future. After all, if the only symptom of the issue was the bad smell, it could have been missed entirely if it had been tested by a different person, or by the same person on a busier day.
    • Ideally, automated tests should be written to identify the smell and fail in future if it is detected. In practice this may not always be possible or practical, and so manual testing practices and tools should also be modified to make bad smells easier to notice in future. For example, using test strings that indicate incorrect encoding, turning on JavaScript alert popups (in webapps), tracking memory allocation (in C++) and watching logs while testing.
  • Smells that indicate a false equivalence:
    • An important part of testing is knowing when you can accurately say, “If I test A, I have also tested B and C because they are equivalent”.
    • An otherwise minor difference in behavior between A and B would then be a bad smell – it indicates that they are not equivalent, and hence further testing is required.
  • Smells that indicate a bad claim:
    • Often risk assessments are made based on claims (e.g. “this feature is disabled when in this mode and hence does not require testing in that mode”).
    • When an application behaves correctly but disproves a claim, further investigation is then needed if that claim has been as the basis for other decisions.

Encouraging Smell Investigation

If software quality is a goal of the team, it is important to foster a team culture that encourages testers to hone their sense of smell. At first, this may be inefficient – it takes time and some trial-and-error for a tester to gain a working sense of which smells are relevant and which are merely distractions. However, if the testers are willing to learn, this investment is soon repaid in more efficient testing and more serious bugs caught before shipping.

There are many ways in which the investigation of bad smells can be inhibited in a testing environment – frequently unintentionally. Here are some typical examples:

  • When the progress of testing is tracked entirely through fixed checklists. If there is no scope for a tester to investigate a smell that does not correspond to a checklist item, then the software is guaranteed to ship with any bugs that could have been caught by that investigation. This includes manual testing (only performing manual steps that are listed on a checklist) and automated testing (using a green build as the sole criterion for a feature being shippable).
  • When testers are pressured to sign off on a feature in order to ship as soon as possible. A good tester will make it clear to stakeholders when they are not yet confident about a feature due to a bad smell, even though testing is otherwise complete. However, deciding when a smell is worth investigating is a judgement call, often with little evidence – after all, if there was solid evidence, it wouldn’t be a smell any more, it would already be a bug! If the stakeholders force the issue, a tester can be forced to doubt their own judgement and sign off regardless. In the worst cases, the tester is later blamed for not finding the bug.
  • When testers are given scope to investigate smells, but not the time. If a tester has 5 days’ worth of feature testing scheduled for the week, and every feature they test contains bugs, it is always going to be more efficient to move onto the next feature than to follow up on a bad smell.

In many cases, these issues are caused when decision makers, without testing experience or knowledge, attempt to micro-manage the inner workings of the testing process based on how they assume testing occurs.

Take Time to Smell the Bugs

In conclusion, I encourage you to get to know your product’s smells better. Keep track of them, get to know them, investigate them, share the useful ones with your colleagues, and do what you can to make the familiar smells more obvious.

Your nose, and your customers, will thank you.

by Penny Wyatt at January 10, 2012 08:42 PM

January 09, 2012

Confluence Product Blog

Mission Control: Advanced Attachment Management in Confluence with Arsenale Lockpoint

This is a guest post by David Goldstein of Arsenale—a San Francisco-based consultancy of Atlassian Experts focused exclusively on Atlassian products, services and best practices. Arsenale is the developer of the Arsenale Lockpoint and Arsenale Invisible Ink plugins for Confluence.  

The Cow, The Pig, The Rooster and the Tipping Point

Confluence excels as a rapid and lightweight content creation and sharing platform. However, even within Confluence-savvy companies, much of the document creation process still centers around using traditional desktop applications, such as Microsoft Office. These documents are uploaded to Confluence and managed as page attachments.

Out of the box, Confluence does a good job of versioning uploaded attachments, but Confluence wasn’t designed to manage multiple users downloading the same attachment, making changes, and then—unbeknownst to one another —re-attaching the file with only their edits. The most-recently uploaded version of the attachment becomes the current working copy, without any notification or opportunity to merge with prior updates.

With these layered versions of uncoordinated document updates, it’s like your team is working
to raise a championship race horse but finds itself instead with a stack of bewildered livestock.

As use of an enterprise wiki grows organically, there’s a tipping point where agile wiki
collaboration
 and anything-goes document editing become a project hazard, hindering the
effectiveness of large teams.

Mission Control

The solution we developed is a robust, enterprise-grade plugin called Arsenale Lockpoint.

Lockpoint gives your teams controlled access to Confluence attachments through a check-out and check-in process, much like traditional document or source code management systems. In Lockpoint, this is called locking and unlocking.

When you need to modify a file attachment in Confluence, simply click the Lock to Edit link, and the file is checked out for your exclusive use.

Lockpoint puts an end to Confluence users accidentally overwriting other users’ changes to critical business documents.

How it Works

Here’s a demonstration of how many of the key features in Arsenale Lockpoint work:

The following types of teams commonly see great benefit to using Lockpoint:

  • Product managers, technical managers and development teams collaborating on product requirements documents and technical specs in Microsoft Word
  • Technical writing teams working with libraries of reusable, rich-content documentation published in Confluence
  • On-boarding new Confluence users who are coming from Microsoft SharePoint or collaborating with document drops on network shares

Developing Product Requirements and Specs with Microsoft Word Attachments

Among many of our consulting clients, Microsoft Word still dominates for writing up product requirements documents (PRDs) and technical specs.  Within large projects, it’s common for many parts of a multi-disciplinary team to weigh in on these documents, with contributions and feedback from product management, technical management and individual developers.

Lockpoint’s tight integration with Confluence’s built-in Office integration helps sanely manage this collaboration, providing seamless, exclusive editing of Microsoft Office documents attached to Confluence pages.

For example, when you click the Edit in Office link for a Word-based requirements document, Lockpoint automatically locks the document in Confluence, launches Word, and holds the lock while you are editing. Other members of your project team will see that the document is locked by you and not available for changes. Using Lockpoint’s built-in notifications, they can click the Notify Me link next to the file to request an email when the file is unlocked.

With all your requirements changes made, closing the document in Microsoft Word will automatically save, version and unlock the file in Confluence, and any colleagues who requested notification are emailed.

Exclusive editing of Microsoft Excel and Powerpoint file attachments in Confluence is just as easy.

Working with Reusable, Rich Content Documentation Libraries in Confluence

For technical writers working on product documentation and knowledge bases in Confluence, one best practice is to create a shared library of reusable content. The goal is to reference content snippets throughout the project space without having to maintain duplicate content each place they’re used. Atlassian has a nice writeup on this concept called Creating an Inclusion Library.

Confluence extensions like Gliffy and Balsamiq Mockups have become key tools for Confluence-based technical writers by providing first class diagramming and UI illustration capabilities. Teams are creating large content libraries with the help of Lockpoint’s integration with Gliffy and Balsamiq Mockups, allowing them to provide controlled, exclusive editing of Confluence attachments stored in their library.

For instance, for a frequently-referenced network layout diagram created in Gliffy, you can start exclusive editing by just clicking Lock to Edit in the Gliffy pop-up menu in the Confluence 4 editor.

If your colleague goes to edit that inclusion library page or its associated Gliffy document, she will see that the diagram is locked and not available for editing.

When finished updating the diagram, you can save the diagram in Gliffy and unlock it from the Gliffy pop-up menu. All of this happens without leaving the Confluence editor.

Migrating New Confluence Users from Microsoft SharePoint and Network Shares

New Confluence users who are coming from SharePoint, or users who are used to collaboration via network shares and emailed file paths, sometimes find their initial open wiki experience to be too open. It seems like anything goes. Larger project teams who are making the same transition en masse have to reconsider long-held processes to match the methodology of a new and very different tool and mindset.

As a result, a number of Confluence installations are using Arsenale Lockpoint to ease user migration from legacy systems and processes.

Lockpoint’s check-out and check-in functionality is safe and familiar to users of SharePoint and other similar document-centric systems. Lockpoint’s deep integration with Confluence’s WebDAV functionality also allows users to mount Confluence as a regular network share, traverse its spaces and pages via the native OS file browser, and automatically lock file attachments on launch for editing when using a compatible WebDAV application such as Microsoft Word or Excel.

Advanced Arsenale Lockpoint Features for Admins

We also added advanced plugin administration capabilities in Arsenale Lockpoint, allowing space-by-space customization of:

  • Lockpoint Administrators – designated users and groups allowed to view and manage all locked files within the space and force unlocks when necessary
  • Rules to automatically unlock documents after a specified number of hours
  • Templates used for all Lockpoint notification emails sent to users

Get Started Today, for Free

From fast-growth technology startups to Fortune 500 firms, Arsenale Lockpoint is helping large, distributed project teams effectively manage their critical business documents in Atlassian Confluence.

To get your team started with Arsenale Lockpoint, download it from the Atlassian Plugin Exchange, or install it directly via the Confluence plugin manager. Lockpoint is available in English, German and French.

Arsenale Lockpoint is completely free for smaller Confluence instances, and available with a commercial license and a free 30-day trial for larger, enterprise sites.

For full pricing and to purchase Lockpoint, visit www.arsenalesystems.com/purchase

For additional details on Lockpoint, including user and administrator guides, please visit www.arsenalesystems.com/lockpoint

by Matt at January 09, 2012 10:39 PM

Sven Peters

der neue joel test

Vor 12 Jahren erfand Joel Spolsky, Gründer von Fokgreek Software den Joel Test. 12 Fragen an denen man erkennen soll, ob man in einem vernünftigen Softwareentwicklungsteam arbeitet. Kann man nur 10 der 12 Fragen mit Ja beantworten, sollte man sich überlegen, etwas am Prozess zu verändern. Wie gesagt: Das ganze ist jetzt schon 12 Jahre her. Um es vorwegzunehmen es hat sich doch einiges geändert. Hier mein Vorschlag für einen aktualisierten Joel Test (Sven Test):

  1. Kannst du deine Software in einem Schritt bauen und deployen?*
  2. Erstellst du bei jedem Checkin einen automatischen Build?*
  3. Erstellst du regelmäßig Metriken über deinen Code und wertest diese aus?*
  4. Spricht dein Issue-Tracker mit dem Build- und Versionskontrollsystem?*
  5. Werden bei dir Bugs gefixt bevor neue Features programmiert werden?
  6. Wird Funktionalität der Software vor der Implementierung in irgendeiner Form aufgeschrieben und mit Stakeholdern abgeglichen?*
  7. Haben deine Programmierer ruhige Arbeitsbedingungen?
  8. Benutzt du die besten Tools, die man kaufen kann?
  9. Hast du Mitarbeiter, die sich Vollzeit mit Tests beschäftigen?*
  10. Müssen Bewerber Quellcode während des Vorstellungsgespräches schreiben?
  11. Führst du Usability Tests mit Endbenutzern durch?
  12. Wird jede geänderte und neu programmierte Zeile deines Codes reviewt?*

* neu hinzugefügt
Aber schauen wir uns den Joel Test aus dem Jahr 2000 einmal genauer an, um zu verstehen, wie es zu meinem neuen Joel Test kam:

  1. Benutzt du eine Versionskontrolle?
    Das braucht man im Jahr 2012 wohl nicht mehr zu fragen. Teams ohne Source Control dürfen sich nicht Softwareentwicklungsteam nennen sondern Adrenalin Junkies. Im Jahr 2012 heißt die Frage eher: Benutzt du eine verteilte Versionskontrolle? So essinziell finde ich die Frage allerdings nicht, dass sie in den Joel Test kommen müsste: Fazit: Die Frage fliegt raus!
  2. Kannst du den gesamten Build in einem Schritt ausführen?
    Dies ist leider in vielen Projekten immer noch ein Problem, ist aber durch Continuous Integration Tools wie Jenkins, Cruise Control und Bamboo viel besser geworden.
    Heutzutage müsste es aber heißen: Kannst du deine Software in einem Schritt deployen? Dies rückt spätestens seit der Verbreitung des Begriffes DevOps mit Konfigurationsmanagement immer mehr ins Zentrum.
  3. Erstellst du tägliche Builds?
    Wie die Zeiten sich doch geändert haben: Das gehört definitiv ins Museum. Heute ist es eigentlich selbstverständlich einen Build pro Checkin aufzurufen: Erstellst du bei jedem Checkin einen automatischen Build? Ich würde das gerne noch ergänzen durch: Erstellst du regelmäßig Metriken über deinen Code und wertest diese aus?
  4. Hast du eine Datenbank für deine Bugs?
    Ich hoffe, das können wir streichen. Vielmehr sollten es heutzutage heißen: Spricht dein Issue-Tracker mit dem Build- und Versionskontrollsystem? Die Verknüpfung von textuell beschriebenen Funktionen mit dem tatsächlichen Code, den Builds und den Code Reviews ist super brauchbar!
  5. Werden bei dir Bugs gefixt bevor neue Features programmiert werden?
    Das ist immer noch aktuell und wird es wohl auch immer bleiben. Allerdings sind wir dank Scrum , also durch kurze Entwicklungsiterationen und Releasecyclen, dem Problem dichter auf den Fersen… oder etwa nicht?
    Fällt ein Fehler in der laufenden Software auf, kann er in der nächsten Iteration gefixt werden… Dies kann manchmal auch kritisch werden. Mit Kanban nähern wir uns dem Problem schon besser an. Mein Fazit: Behalten wir bis auf weiteres mal im Test.
  6. Hast du einen aktuellen Entwicklungsplan?
    Klar, heute hat man ein Scrum- oder Kanban Board! Diese Frage können wir also streichen. Und da Product Owner für die Features verantwortlich sind, die programmiert werden sollen, ist das nicht mehr das Problem der Entwicklung: Aufgabe abgewälzt.
  7. Hast du eine Spezifikation?
    Durch Epics und User Stories existiert eine bessere Spezifikation. Funtionaltäten müssen noch nicht bis ins kleinste Detail im voraus festgelegt werden. Diese Art ist übersichtlicher und nicht so zeitaufwendig. Der Punkt ist aus meiner Sicht auch nicht mehr aktuell und sollte durch die Frage: Wird Funktionalität der Software vor der Implementierung in irgendeiner Form aufgeschrieben und mit den Stakeholdern abgeglichen?
  8. Haben deine Programmierer ruhige Arbeitsbedingungen?
    Das ist natürlich auch heute noch interessant. Aber Joels Vorschlag, alle Mitarbeiter in separate Büros zu sperren, ist meiner Meinung nach auch nicht die Lösung. Man verliert dadurch die Zusammenarbeit, den Informationsfluss und Erfahrungsaustausch. Ich habe sehr gute Erfahrung mit Regeln gemacht, indem man ein bestimmte Zeit zur ruhigen Arbeit vereinbart und jemanden als Ansprechpartner für das gesamte Team ernennt. Diese Frage ist also immer noch aktuell und sollte im Joel Test bleiben.
  9. Benutzt du die besten Tools, die man kaufen kann?
    Glücklicherweise sind heutzutage die besten Tools entweder umsonst oder kosten nicht viel. Dank Cloud-Angeboten werden diese wohl auch in nächster Zeit noch günstiger, auch weil man nicht den Betrieb übernehmen muss.
    Anderseits höre ich heutzutage auch oft: Warum ein etwas besseres Tool einsetzen wenn etwas schlechteres umsonst ist? Aber an den Tools für die Entwickler sollte man auch heutzutage nicht sparen!
  10. Hast du Tester?
    Wir Entwickler schreiben Unit-Tests. Diese werden bei jedem Check-In automatisch ausgeführt. Zusätzlich haben wir automatische Integrationstests, die auch automatisch ausgeführt werden. Es fehlt noch der Abgleich der programmierten Funktionalität mit der User Story. Das könnten doch auch die Programmierkollegen übernehmen? Wozu also heutzutage noch Tester? Weil diese viel mehr Erfahrung mitbringen. Die Aufgabe des Testers, bzw. der QA sollte darin bestehen, sich um die Infrastruktur zu kümmern, die Regeln zu überprüfen, Usability Tests durchzuführen und die Programmierer befähigen, dass diese die QA unterstützen können. Tester gehören ins Team und sollten kein eigenständiges Team sein. Also kurz gesagt: Immer noch ein berechtigte Frage für den Joel-Test, die heute aber so heißen muss: Hast du Mitarbeiter, die sich Vollzeit mit Tests beschäftigen?
  11. Müssen Bewerber Quellcode während des Vorstellungsgespräches schreiben?
    Ich glaube nicht, dass sich hier viel verbessert hat. Es ist immer noch die Ausnahme, dass Arbeitsproben gefordert werden. Da viele Programmierer sich aber an Open Source Projekten beteiligen, kann man sich heutzutage oft schon vorab über die Programmierqualität informieren. Aber ein paar programmierte Zeilen, während eines Vorstellungsgespräches, sollte man trotzdem einfordern. Auch wenn das mehr Vorbereitungs- und Nachbereitungsarbeit erfordert.
  12. Führst du Usability Tests mit Endbenutzern durch?
    Dieser Punkt wurden in vielen agilen Unternehmen aus 2 Gründen verbessert: Die Stakeholder nehmen am Ende der Iteration die Funktionalität ab. Man bekommt also alle 2-4 Wochen direktes Feedback. Leider sind Stakeholder nicht unbedingt auch Endbenutzer. Wir kommen aber dichter dran. Durch häufigere Releases kann bekommt man schneller Feedback darüber, ob die neue Funktion auch Benutzerfreundlich ist.
    Auch dank Apple legen die Unternehmen immer mehr Aufmerksamkeit auf Usability.
    Ist dieser Punkt wirklich immer noch so wichtig? Klar! Stakeholders wissen manchmal auch nicht was benutzbar ist und was nicht.

by Sven Peters at January 09, 2012 09:49 AM

jr0cket

Two years on kanban



Having used kanban as a catalyst for continual improvement I feel more capable, confident and way more productive than I have ever been in my life.  Starting with a simple plan-doing-done approach to my kanban boards, I quickly evolved them to meet the needs of particular situations.

I have created many kanban style boards for managing specific areas of my life, such as my own career and skills development, moving house, preparing for 400km cycle rides and starting my own company.  Kanban really helped me pull in and evaluate other ideas to build on how I work and help me become more effective.

Kanban is not a solution or silver bullet in itself, but this simple to use techniques allow you to develop an effective way to manage, to help you get things done!



Lean practices, system thinking and theory of constraints all kick-started a big change and kanban was the technique that made it all come together.

By encouraging me to look at what I was doing and how I was doing it, I had an every growing focus on how to deliver value to myself and to others.  I could no longer hide so easily from the truth and tell myself little white lies about a situation, the information on the kanban board kept me honest and encouraged me to evaluate my actions.


Awareness

Just being aware of your circumstances is a major advancement for most individuals and organisations.  It is all to easy for us to get too wrapped up in today's deadline without thinking of other concerns (such as if today's deadline is actually of value and if you are doing the right thing to maximise that value).

Managing myself


It is often so much easier managing and advising other people than it is to manage yourself.  This is perhaps in part why CxO roles have personal assistance - a service that we could all use to help us focus.  As a consultant I feel that psychologically it is much easier to work with a customer to help them improve than it is to help myself improve.  Part of that ease is the excitement of learning something new and part is that I am working with someone else.

Through personal kanban and associated lean techniques I have found my own way to manage myself effectively without adding any sense of burdon.  Psychologically, I now rarely find it a chore to manage myself as I can easily balance the time I spend being creative with the time I need to focus and deliver value.  I can make lots of small decisions throughout the day as to what I need to do to meet my goals, giving a great deal of flexibility.

I can also quickly see what I have achieve and this gives a great boost as when we are busy we often forget the great things we have achieved that day.


Managing others

No one likes to be micro-managed and all good managers dont actually like to micro-manage people.

Kanban can be used to focus groups of people (eg. project teams) towards a particular goal or business vision.  Kanban allows the group to not only be a part of the decision process of how to achieve these goals, but also visualise how effective those decisions are in sustainable achieving those goals.


At any time, if there is a valuable reason the decisions taken previously could be changes or adapted to move with wider changes in the organisation.


I feel that kanban can be used to help drive progress towards goals very effectively, leading to real management by everyone, or as I like to call it - leadership.

Getting people to help - collaborative delegation

Kanban is a technique that shows real strength when it encourages people to collaborate and I have experience of kanban being a trigger to help cultural change.  By encouraging people to get involved, to use the knowledge and experiences to the full, to challenge them and make them much more responsible for the work they do really drives a sense of meaning within them.

There is no need for motivational posters when people love the work they do, the way they work and know that the are delivering real value to the organisation every day.  People like to feel part of something bigger and get a kick from helping each other.


In Summary

Kanban is a great technique once you understand its context, and used with lean and kaizen ideas it is one of those things that really reflects what you put into it.  Like any good relationship, if you care about your kanban board it will care for you in return.




by John Stevenson (noreply@blogger.com) at January 09, 2012 05:43 AM

January 08, 2012

Atlassian Developer Blog

Continuous Delivery with Bamboo Stages

Bamboo’s biggest strength lies in its ability to give developers control over their entire workflow – all the way from testing to production. With Bamboo, those difficult tasks, such as releasing or deploying software, are easy to automate using a practice called Continuous Delivery.

Continuous Delivery

Continuous Delivery is the process whereby all the steps from code building to deployment are completely automated. Before Continuous Delivery, releasing software was traditionally an infrequent and manual process, prone to errors. But with the time saved by automating steps, you and your team can work on your project’s important deliverables and stop the boring and repetitive tasks that come with shipping your software.

 

 

 

What’s a Stage?

Stages are individual sequential steps within the build. Stages make it easier to break down your build automation into multiple steps such as compilation, testing, and deployment. When a Stage executes, all of the Jobs that belong to the Stage start building, parallelizing your build and greatly reducing its execution time. A Job in Bamboo runs a bunch of Tasks that define the behaviour for your build. Tasks can run scripts, Maven goals, build Visual Studio projects, and much more.

Jobs can be used to split up a suite of tests into smaller batches, with each Job executing a separate batch in parallel. Splitting up integration tests can easily save hours. Jobs in the following stages will not begin executing until all the Jobs in the previous Stage successfully complete. This feature ensures that expensive integration tests only run after cheap unit tests pass, for example.

Ready… set… ship!

In the image above, we have defined three stages – Build, Test, and Deployment. When a developer commits to the Git repository that holds our source code, the Build stage and its single Compile Job execute.

If the project compiles correctly, the build moves to the Test Stage. Now, here’s where things get really cool – instead of running all of our tests in a single Job on a single machine, we granulate our tests into multiple Jobs. When Bamboo starts executing the Test Stage, it queues all of the Jobs in the Stage at once. If enough free Remote Agents are available, each Job should get executed in parallel at the same time.  In our example, this Stage takes approximately 20 minutes to run instead of the hour it would have taken if we had combined all the tests into a single Job. Parallelizing Jobs is a really easy and quick way to get feedback super fast.

Since we don’t want to upload a release to our website on every commit, we have set the Deployment stage to be a manual one. When Bamboo gets to a Manual Stage, execution stops and waits for a manual trigger in order to start building again. In our example, the build stops when it gets to the Deployment Stage, and someone will need to click on the Continue button to continue the build when they wish to release.

In the image above, the history of the last 10 builds of a project are shown, of which only 8 of them are release candidates. Your team can keep committing changes and have Bamboo run through the tests, all with the knowledge that Bamboo will have a working release ready when you decide to pull a Captain Picard and “Make it so!”

What next?

by James at January 08, 2012 11:36 PM

January 07, 2012

Matt Ryall

⌘ Comments Still Off

Matt Gemmell turned comments off on his blog too:

Just over a month ago, I switched comments off for this blog. I wanted to post a very brief follow-up on that decision.

In a nutshell, it was definitely the right move.

He lists several reasons why it has worked out well.

#

by Matt Ryall at January 07, 2012 01:31 AM

Sarah Maddox

Should we allow comments on documentation pages

This is a very interesting question: Should we, as technical writers, allow comments on our documentation pages? It’s interesting because it’s a multi-faceted question, and because people have such strong feelings about it. My quick answer is, “Yes”. Ha ha, but there’s always a “but” or two. Read on, and then I’d love to know what you think.

I’m a technical writer at a company called Atlassian. We write all our product documentation on a wiki. For example, here is the Confluence user’s guide. What’s more, we have configured the wiki permissions to allow anyone to add comments to the pages. (We also allow known contributors to update the pages – but that’s another story.) Every now and then, the question comes up for debate again: Is it a good thing to allow comments on the pages? Up to now, we have decided each time to keep the comments. (Well, except for the developer documentation. More below.)

Multi-faceted question

We could rephrase the question like this:

Should we ask for feedback on the documentation? If so, are comments the best way of getting that feedback?

Or like this:

Should we allow everyone to comment on the documentation, or just known people?

Or:

What benefits do our customers get from being able to add and read comments on the documentation?

Or:

What benefits do we, as technical writers, get from the comments people add? And do we suffer any pain?

Mmmm…

What  benefits does the organization get from allowing people to add comments to the documentation?

And so on.

Examples of comments

On the Atlassian product documentation, we allow everyone to add comments. Even people who have not logged in to the wiki – their comments  are recorded as “anonymous”.

Some comments are very relevant to the documentation itself. For example, the comments on this page about supported platforms in the Confluence administrator’s guide:

Some of the comments on the supported platforms page

Some of the comments on the supported platforms page

Other comments can be requests for help, or suggestions for new features or improvements in the product. Often a reader will add some information that will be useful to other readers. This one is on the page about configuring Tomcat’s URI encoding:

Page about configuring Tomcat's URI encoding

A reader offers information to others

Advantages of allowing comments

A quick list:

  • People tell us about errors or gaps in the documentation.
  • People use the documentation as a tool to help each other.
  • We learn about new ways that people are using our products, and sometimes even about new ways that they want to use the documentation.
  • The documentation becomes an active hub of interesting information. Readers receive notifications when other people add comments, and so keep coming back to the documentation to see the latest. The documentation sticks in their minds as a good place to find what they need.

Disadvantages of allowing comments

Another quick list:

  • Comments can make a page hard to read, if there are too many of them.
  • People may add worthless comments, spam, or even nuisance comments.
  • It is time-consuming, if not impossible, to respond to all the comments.
  • It is time-consuming, if not impossible, to clean up the comments when they are no longer needed. (But we could automate this.)

Please add a comment ;) to this blog post, telling me what I’ve missed in these two lists.

No more comments on the developer documentation

A few months ago, we moved all of the developer documentation to a different wiki, the Atlassian Developers site. By “developer documentation”, I mean the API reference guides, the plugin development tutorials, and all the stuff related to developing add-ons and extensions for our products.

The developer documentation is still on a wiki. In fact, it’s a Confluence wiki just like the product documentation. But we have customised the look and feel, and added some plugins. The thing to note, from the point of view of this post, is that we have turned off the page comments. Instead, there are two panels at the bottom of each page:

Answers and feedback panels on documentation page

Atlassian Answers and feedback panels

The “Atlassian Answers” panel shows a list of posts drawn from a discussion forum called Atlassian Answers. The panel is supplied by a plugin for the wiki that hosts the documentation. The plugin matches the labels on the documentation pages to the tags on the discussion forum. The matching process is not perfect. In particular, labels and tags are not the most reliable way of matching content from a discussion forum and a documentation site. We plan to improve this, by a smarter matching of page titles and content.

The “feedback” panel is supplied by another plugin. When a person clicks “Yes”, “Somewhat” or “No”, a dialog appears where they can give us more information. The plugin posts an email containing that feedback, which in turn triggers the creation of an issue on our JIRA issue tracker. The technical writers and developer relations team can then assess and react to the feedback.

Comparing comments and feedback forms

An advantage of comments over feedback forms is that readers can see and respond to each other’s comments. People can benefit from the advice of other readers. They can hold a conversation and help each other solve problems, quite independently of the documentation authors.

Comparing comments and discussion forums

An advantage that comments have over discussion forums is that the comments are right there on the relevant page. People do not need to go looking for them on a separate discussion site. The information in the comments complements what is on the page.

On the other hand, a discussion forum is in itself a repository of information. I guess, as a technical writer, I’d like to keep people’s attention on the documentation. I’d prefer it if the docs did not become a dead site, for reference only.

But what serves the customer better?

What do you think?

Heh heh, it’s a complex question. And now let me add this specific question to the list: Would you cry if we removed the ability to comment on the Atlassian documentation in particular? (This is just a general question. There are no definite plans at the moment to remove commenting.)

Let the comments begin. :)


by ffeathers at January 07, 2012 12:11 AM

January 05, 2012

Bitbucket Blog

Unplanned downtime today

This morning around 6:00 am UTC Bitbucket began to fail with intermittent 500 errors, which continued for several hours.

Our investigation shows that the root cause was our syslog server crashing. The syslog queues on all of our other servers filled up and they became unresponsive.

We’re currently re-examining our syslog configuration, particularly looking at on-disk queuing, to ensure this single point of failure is avoided.  We’re also adding new monitoring to detect if a similar situation were to reoccur.

We’re very sorry for the inconvenience this downtime caused. This and other service related updates can be found on our status site status.bitbucket.org.

by jstepka at January 05, 2012 09:26 PM

JIRA Product Blog

(Case Study) mgm technology partners uses JIRA to connect development projects directly to customers

About mgm technology partners

mgm is a medium sized software solution company that defines its success by its contribution to the success of its clients’ businesses. Founded in 1994, mgm is based in Munich, with about 300 employees throughout Europe.

Alexander Weiss has been with the company since its migration from Bugzilla to JIRA in 2005 – he championed the adoption internally after using JIRA at a customer site. mgm technology partners uses JIRA, GreenHopper, Confluence and recently brought in FishEye. After reading Alexander’s two-part blog series (Part I, Part II), which highlights how JIRA can be used for projects other than just bug tracking, I reached out to him to learn more about mgm’s experiences with Atlassian tools.

Setting Up

mgm works closely with customers on many aspects of their projects. One of the unique aspects of their business is how they use Atlassian products to get customers involved at most every step of the project and decision making process. Everyone gets a JIRA login – JIRA replaces email for project communication because it serves as a more direct and central tool for discussion, and makes historical information easy to find. They have a single instance of JIRA with about 70 projects running currently, and about 800 active JIRA users (employees and customers). Projects range from two month stints with only a handful of people, to several years long involving dozens of people on both the internal and customer side of JIRA.

Project leaders set up a project-specific JIRA dashboard, so customers have a place to find the most up-to-date information about their project – without having to wait on an update from someone else.

Avoiding Backlog Creep

The mgm development team uses GreenHopper to set up and prioritize project work. They’ve found this helpful in the same way that our own DevOps teams have: showing a customer the prioritized project backlog as it evolves maintains realistic expectations.

Our experiences showed that in software maintenance and enhancement projects – especially in large projects – there is less overhead and more benefits for everybody involved if customers aren’t locked out of the JIRA processes…Furthermore, the customer gets a completely different attachment to ‘his’ project if he is able to see all ongoing activities and if he can generate an actual project state by himself. We have realized that the customer feels much more satisfied and more responsible for his assigned lifecycle parts once he experiences the whole power of process transparency. He also becomes more sensitive for interference factors and usually starts to avoid ‘creeping requirements’ once he realizes the consequences of adding just another “simple” request… although sometimes the exception proves the rules.

Getting on the Same Page

Customers and developers need to understand details and expectations up front, so requirements must be communicated clearly and stored in a central, searchable place. mgm uses JIRA to ensure that requirements are stated in a consistent, relevant way so developers have everything they need when they start work.

The responsibility to verbalize requirements usually remains with us. But the customer can be involved at any time to contribute details and he can (and should) be an active part during the elaboration phase and deliver his input and expertise through comments to the respective tickets.

Another very important point in requirement management is the used terminology. It is very important to always talk (and to write) the customers’ domain specific language. Use only terms that can be understood by the customer! We find it very helpful to maintain a glossary of all domain specific words and terms together with the customer.

Get the Customer Working

Once the wheels of the project are in motion, customers are able to create new issues for requirements, change requests, and bugs – but it doesn’t stop there. Having the customers approve a bug fix or even execute a selected manual test engages them at a deep level, giving the customer a sense of pride and involvement with the project. This has been a huge key to success for many of mgm’s projects.

In our experience the advantages obtained through direct participation of customers in JIRA exceed the disadvantages of for example the increased efforts necessary for JIRA configuration. A well informed customer who is directly involved in his project feels much more comfortable even if something goes wrong or the progress of the project gets stuck. Transparency is the magical keyword.

Final Thoughts

Alexander gives great examples and lessons learned from using JIRA for organization-wide project management for several years. Whether you sell software, give it away, or provide it for internal operations, connecting with other teams and getting your end users involved in a project – even from a high level – helps set proper expectations and keeps everyone on the same page. People make software, and better software comes from better connections between all the people involved.

by Christina Bang at January 05, 2012 07:51 PM

Brendan Patterson

Mobile office essentials - the optimized list

Blog post edited by Brendan Patterson

Having worked 99% remotely now for 9 years I believe I've got my mobile office nearly optimized. 

Here is the list of exactly what's need - no less and no more:

  • Noise canceling headphones - At a coffee shop there is only a 5% chance that they're playing music you find tolerable and 2% it's enjoyable. It's also likely to be either way too loud or the only seat is right under a speaker. The head phones must have a hard case to protect them in your bag. These are mid-to-low end JVC ones I've found suitable for four years: http://amzn.to/A96o00  Pro-tip: Carry a couple spare AAA batteries too or whatever.
  • Sigg water bottle - You need to stay hydrated and avoid plastic. Even more important is something that will never ever ever leak. An aluminum 1L Sigg is perfect.
  • Spare power cord - This should live in your backpack otherwise you'll get to the coffee shop and realize you forgot it
  • Power outlet expander - There is a 30% chance the outlets will be taken, 90% if you're at an airport. Something like this is ideal. Small, light, cheap, but invaluable. I get complimented every single time I pull this out when outlets are at a premium: http://amzn.to/A5ivjE
  • Suitably powerful laptop - There is pretty much no reason to have a desktop at this point as your work computer. Yet I'm shocked on a daily basis at how much time people waste waiting for the laptops to boot, shutdown and spin around. A good machine pays for itself in a few months of more productive work if not weeks. Pony up!
  • A baseball type cap - As the sun moves across the sky you'll eventually have light at the top of your vision or a car will park with it's windshield focusing the light laserlike at your retinata. A baseball cap can mitigate this annoyance. 

That's everything you need for the perfect mobile office. Happy mobile computing!

by Brendan Patterson at January 05, 2012 06:46 PM

Matt Ryall

Places of interest

As well as messing around behind the scenes, I’ve made a few more visible changes to my site over the past week or so. My goal was to make it more like some of the other sites I enjoy reading.

Link posts

A common pattern I’ve seen recently is blogs that use two different kinds of posts: link posts and article posts. Link posts are for posting links to the other places, usually with some brief commentary, whereas article posts are longer-form articles written solely for that site. In RSS feeds, the link posts link directly to the destination, while articles still link back to the blog. This model seemed like a good fit for me. I’ve been posting links with commentary to Twitter, but find that format quite limiting. So I looked closely at two popular sites which follow this model: Daring Fireball and marco.org.

In the Daring Fireball feed, John Gruber indicates his article posts with a black star character (★) and everything else in the feed is a link. With link posts in the feed, the entries link directly to the remote sites and there’s a permalink at the bottom of the body, again indicated with a star. On the site, John uses different heading styles and dividers to help differentiate links and articles.


Daring Fireball link post

On Marco’s website and feed, links are indicated with an arrow (→) and articles have no special indicator. Marco also includes a permalink to link posts in the body of their entry in the feed, using an infinity symbol (∞) like on his site. With link posts on his site, he also uses a change of colour, with red underlined links used for the outbound title links. Black links with no underline are used for articles.


Marco.org link post

I preferred Marco’s solution overall, where links have a special indicator rather than articles. The underline on the links on the site also helps make them look more distinctive. However, I wasn’t totally sold on the symbol used by either of them. The star for DF is really part of the site’s brand, and not something I wanted to copy. Marco’s arrow was okay, but I thought that surely there is a Unicode character that better indicates a link.

Link post indicators

I spent a while looking for a good indicator icon for link posts and unfortunately I didn’t find a really good one. There is a Unicode character LINK SYMBOL (U+1F517) but that’s outside the base plane of Unicode characters, and therefore not very widely supported.

The option I liked best was the PLACE OF INTEREST SIGN (U+2318), which looks like this: ⌘. You almost certainly know it as the Command key icon on the Mac, but in fact it is also widely used as an indicator of tourism “places of interest” in certain European countries. Susan Kare, the designer on the original Macintosh team, started using the symbol after seeing it in a Swedish campground. The symbol is more generally known as either a Bowen knot or “St John’s Arms”.

So link posts on this site look like this:


Link post on this site

Clicking on the blue link will take you directly to the article I’m linking to. I copied Marco’s example of using my site’s link colour for the title of link posts, and underlining them to indicate the link

You can see the place of interest symbol (⌘) indicating that this is a link. It appears as a prefix to the post title on the website, but part of the entry title in the feed. I’m hoping that this character has fairly widespread font support – I know it is available in Arial Unicode on Windows and by default in several fonts on the Mac.

The little icon at the bottom takes you to the link post itself on my site. This link is intentionally small and unobtrusive because you typically won’t need it for anything. The icon itself is a new site logo I put together quickly. If you read my blog in a fancy feed reader like Reeder for iPad, you should see the new logo in a high resolution as the feed icon in your client.

No more comments

I’ve removed comments from the site because I didn’t find them adding much value in recent months. While they don’t require a lot of work to just maintain, the code was getting crufty and difficult to enhance as I made other changes. It seemed like a good time to try simplifying things and get rid of them. If you need to get in touch with me about something I’ve written, please just send me an email.

I’m sure these changes will be a little bit confusing and weird to start with, particularly if you don’t read any other blogs in this format. But I hope it will help in the long term to allow me to post more interesting things in a way that’s easy to consume.

by Matt Ryall at January 05, 2012 12:32 PM

January 03, 2012

Matt Ryall

⌘ A Personal Appeal TO Wikipedia Founder Jimmy Wales

Alexia Tsotsis at TechCrunch:

Jimmy, this year you’ve chosen to left align your traditional banner ad portrait asking for Wikimedia Foundation donations, which means that your mug ends up being the accompanying image for whatever I end up looking up on Wikipedia.

And thus hilarity ensues.

My — granted unsolicited — advice is that next year you take some of the donation money, especially the 20 bucks I’m about to throw at you out of guilt for writing this post, and hire a professional graphic designer so you’re not creeping people out or (worse) making them laugh unintentionally.

I guess this is why they started using other staff photos as well.

For a more serious look at Wikipedia’s fundraising efforts, they are tracking their progress here: Fundraising 2011.

#

by Matt Ryall at January 03, 2012 11:08 PM

jr0cket

Google search page major revamp

Google Search page has been around almost as long as I have on the Internet, which is too scary to think how long this actually is.  The main search page has been kept the model of simplicity, both in terms of design and of usability.  This simplicity has helped Google become iconic.

Whist there have been a long running stream of tweaks to the page, very little of this simple design has been changed.  With Google now reaching out with their Chrome OS operating system on devices like the Asus Transformer Prime, the main search page is in for a bit of a major facelift.

I must confess that I do rely on Google for a lot of services, not just search but also email, calendars, blogging, websites, RSS reader and so on..  So I am very keen to see what changes are coming to the search page and other services.

From the information available so far, things are looking promising.  The clean and simple look is going to be retained and a new Google bar and menu system will help you move quickly between the different services.



The current black Google bar is replace by this with a more subtle design.  The Google logo will provide an application menu and although this requires an additional kick with the mouse,  hopefully it will make the Google apps I use most frequently easier to select.

When this new year present from Google arrives I hope I will find it a welcome one.  Check out the blog post and video on this change from Google itself.

by John Stevenson (noreply@blogger.com) at January 03, 2012 04:42 PM

Building your online persona for fun and profit

There are over a lot software developers in the world and a very limited number of cool jobs, so how do you make yourself noticed without killing yourself working crazy hours?  Here are just a few ideas...

Share your code...

There is a steadily growing move away from the traditional HR route to getting a job, especially for those great jobs.  The most common approach seems to be scanning code repositories such as Bitbucket and Github.

Its not surprising that one of the main skills an employer is looking for is good code, but how much code do you put on your CV?

Developers have seen the benefits of sharing their pet projects (it worked for Linus Torvald) and its a great way to show off not just your skills but also you interests.

I share the code I help create at coding dojos and those kind of events are a great way to show of your interest in learning something new.

Good employers also look for active committers on open source projects to understand the quality a developer can provide.  Working on an open source project is a demonstration of how well you can work in a team.  Not only showing code, but also helping other developers with problems and how they deal with the community of users around the project.


Get Linked In

LinkedIn is simple, its like your traditional online CV and a no-brainer to keep current so people can see your general history.  I also include any significant community involvement on my profile, to give a more complete picture.


Get social... learn to tweet

I didnt get twitter at first, until I saw Tweetdeck (a great startup success story in the UK).  Tools like tweetdeck allow you to filter out noise and turn twitter into an excellent research and communication tool.  If there is some great event happening, an interesting article to read, or a cool new project update, you can usually find it out first on twitter.

The other aspect to twitter is following interesting people - or as is more common, following interesting hash-tags - eg. #LJCJug for the London Java Community or #Clojure for discussions on the functional programming language.  Most technical events have a hash tag so you can give feedback and share the lessons learnt from those events.

Although many people share their blog posts by twitter, its not a complete replacement for for RSS feeds, rather it is a good way to find blogs that are worth reading and adding them to your feed reader (eg. Google Reader).

Twitter tools: Hootsuite (web 2.0), Tweetdeck (desktop, mobile app)



Dont forget to share your thoughts...

Your code does not tell the whole story, so why not share your thoughts, opinions and aspirations.  Having a blog is not about telling the world what they should be doing, but showing leadership in the discussion of worthy topics.

Rather than try starting language wars, interesting blogs are those that encourage you to improve and give you the tools to do so.  Have a look at the range of topics covered on the London Java Community blog aggregation site, agrity.

Blogging tools: blogger.com , wordpress.com


Step away from the computer

Being part of a great technical community also includes events outside of the Internet and is a great way to build meaningful connections with people.  There are hundereds of amazing technical communities in the UK and I find it very rewarding (socially and financially) to be a part of many of themMeetup.com is a great tool for organising events and getting feedback from the community as to what kind of events to run.

Lanyrd is a social conference website where the community creates and manages events.  It allows you to pull together all the information around the conference too - such as videos of the events, presentation slides, speaker lists, etc.  Lanyrd is great for building up your speaker profile, when you get round to speaking at events :-)

Give lightning talks and presentations
Talking to people shouldnt be a scary thing, we are all human after all.  As with most things the more you practice speaking, the more confident you become.  Start with topics you are comfortable with and do small presentations eg. a 5 minute lightning talk.

Speaking at a community event is a great opportunity to talk to a friendly audience and get positive feedback.  Its easy to get lots of ideas on how you can continually improve.

An added bonus to speaking in public is that is makes speaking at an interview seem a great deal easier.  You will have more to talk about and will have explored many different ways to try explain things.

Event tools: Meetup.com, Lanyrd, SuperDevs, Google Calendar, Book: Confessions of a public speaker


Sometimes a blog is not enough


I've used Google sites as a great learning tool for myself and a simple way to share my learning experiences with others.  Whist a blog post series can help you learn, there is always a trade off with brevity.  A really long blog can quickly becomes irrelevant and dull (hopefully not this one).  However a well organised website allows you to find the relevant information you need quickly.

The websites I build also show the level of understanding I have gained and I always feel I have learnt more when I write down (and draw) what I have learnt.  As you build up the site, you have reference materials you can refer to from your blog posts, allowing you to keep those articles focused and interesting.

To support this blog I have therefore added an online persona section to my website.


Website tools: Google Sites, plus many more...

Thank you

John Stevenson | Public calendar | @JR0cket | gplus.to/JR0cket
| Tech websites | Tech blog | Lean Agile Blog

by John Stevenson (noreply@blogger.com) at January 03, 2012 04:24 PM

Matt Ryall

⌘ Ease Mates Into Better Board And Card Games

I had mixed luck introducing family members to a new board game over the holidays. You might have better luck by following this guide.

#

by Matt Ryall at January 03, 2012 05:57 AM

January 02, 2012

Matt Ryall

⌘ RIM’s rise and decline: a 10-year view

Dan Frommer:

BlackBerry maker Research In Motion is a classic example of a company that had one great idea, grew huge because of it, but couldn’t save itself as the industry moved on. And now for the first time ever, RIM’s sales will probably shrink this fiscal year — despite continued rapid growth in the smartphone industry.

#

by Matt Ryall at January 02, 2012 09:01 PM

Copyright © 2006 Atlassian Software Systems Pty Ltd. All rights reserved. Your privacy is important to us.