Android App Love

I really, really love my android. It’s the last thing I put down before I go to bed at night, and the first thing I pick up again in the morning. Not only do I not miss my iPhone at all, but I find I take my laptop out of my bag less and less, preferring to rely on my phone for most tasks.

I have been very surprised by how excellent the applications are on the android platform. They easily match the quality of the applications available for the iPhone, and I have managed to find an application to fill every need without paying a cent. There seems to be a much wider range of high-quality free apps available in the market – at least, within my areas of interest. Some of my favourites include:

Aldiko

I’m a voracious reader who was won over to the concept of ebooks many years ago. Aldiko is my favourite application so far on Android. It supports both importing books from SDcard and downloading them from a variety of bookstores within the app, both free and paid. I have found the public domain classics downloadable for free through the app to be beautifully formatted. Purchased epub files from OReilly.com and Baen import without a hitch. The Nexus One’s large, high DPI display makes for an excellent reading experience.

android bookreading application, aldiko

KeepassDroid

KeepassDroid is an implementation of a Keepass compatible password safe for android. Combined with Dropbox, I use it to keep my password database on-hand wherever I am. It registers itself on the phone as a handler for kdb files, and so can open them directly from the Dropbox application. I prefer to use Dropbox to download the database to the SDCard so that I can access my passwords offline. KeepassDroid allows for adding, removing, and editing entries as well as viewing saved passwords. While viewing an entry, KeepassDroid inserts username and password copy actions into the notification area. This allows for quick and easy pasting of authentication data into application configuration dialogues or web forms.

keepassdroid

WordPress

I don’t blog anywhere near as much as I’d like to, but more damningly I’m dreadfully lax about moderating comments on my various blogs. Akismet takes most of the pain out of dealing with spam, but nothing works quite as well as logging in to check the comments queue and manually fixing the ones it gets wrong. The WordPress application for android should change all that.

It supports both WordPress.org blogs, and instances of WordPress managed elsewhere. The application provides a simple interface for managing comments, posts, and pages. Writing a post of this length on the touch keyboard sounds like an exercise in frustration, but the application provides an excellent way to moderate and reply to comments on the move.

the wordpress android application - posts view

I traded my Nokia E90 for an iPhone because of the dearth of high-quality applications on Symbian. While the iPhone has a wide variety of good software, I became more and more irritated with the limitations of the platform. Android really seems to combine the best parts of both platforms, allowing me to access my data without needing to use proprietary software; and still providing a polished and feature rich user experience.

Posted in Android, Technology | 3 Comments

Once apon a time …

Person A has a problem, and can’t find a solution in the project documentation. She eventually figures it out for herself, and when Person B comes along with the same problem, confirms that she had the same issue, notes the documentation didn’t solve it, and points to her solution.

Developer A notices. He tells Person A that if she can write her solution up as a FAQ entry, like the examples he shows her, he will see that it’s posted on the FAQ so that everyone can share her solution. She does so, and finds other problems she can fix. They are very small – but Developer A keeps taking the time to assist her. Eventually she starts contributing larger chunks of content. Developer A arranges for her to get commit access and as the years go past she writes tens of thousands of words of documentation and becomes a strong advocate of the project, writing articles that get published all over the web about just how awesomesauce this project is.

More recently, Person A notices someone in another project have a problem she has also had. Their documentation is excellently written, but there are some knowledge gaps and some parts are hard to find, even if you search willingly and carefully. She chimes in with Person B, pointing out she’s had some of the same problems with the documentation. She can’t point to an exact solution as this situation is far more broad, but she points Person B to some documentation she had written of her own that she thought might be of help to him.

Developer A notices. He informs her that she is wrong, and the documentation she is looking for does in fact exist. He links her to this documentation to prove it. She clarifies that whether the documentation existed or not, a genuine search did not find it for her and this perhaps shows there’s a problem of visibility. This being IRC, private messages telling her that she is an idiot and should stop asking to be spoonfed start rolling in. No-one on the internet can resist an opportunity to argue.

Unfortunately, the situation quickly gets out of hand from there. Developer A, joined by Developer B, have a full-blown argument with Person A who is becoming less and less coherent as she tries to explain her position and ignore the private message windows lighting up with insults. Developer A and B are convinced she is insisting that the documentation they showed her does not exist. Person A cannot understand how this can be read from her saying the documentation is hard to find. Developer B seems like he might have actually been a helpful person to her if she had spoken to him first, as he at least is listening to what she has to say rather than rebutting arguments she has not made. Unfortunately it was Developer A who answered first and Developer B has come into the situation assuming that Person A is trying to be difficult, rather than realising Developer A has managed this situation poorly and contributed strongly to the escalation. Person A, also being a nerd on the internet, gets sidetracked into arguing who is right instead of actually arguing her point.

Once she realises that the situation cannot be salvaged, Person A flees vowing not only that she will not contribute to this project, but regretting that she must still use their product. Developer A and B are gleeful, thinking they have proved that this person was not going to do any work for them anyway.

Person A is still the same person, with the same skills and the same willingness to help out with documentation as she loves to write. She knows their product well, and would be very capable of starting to fix the documentation knowledge gap. How did it all go so wrong?


XKCD - someone is WRONG on the internet

Obviously, Person A is me. I managed to get into such a dreadful argument on a project IRC channel earlier today that I was accused of trolling. The accusers hadn’t been involved from the beginning and had only seen me stubbornly repeating the same rebuttal to someone who was just as stubbornly repeating back the same fallacy they’d attributed as being said by me. From that perspective, I can completely understand where they are coming from – but I also firmly believe that this community created the situation in which someone who usually communicates well and has a proven history of contributing to open source projects and a willingness to help with theirs is turned into an angry and somewhat accidental troll.

In the first scenario, a representative of the project notices my interest in the documentation and encourages me to help out and fix it. He lowers the barrier by showing me exactly how to start. If I write something that is like this specific example here, I can email it to him and he will take care of the rest. These are simple steps a new person can easily follow. In order to continue contributing, I must eventually learn SVN, Docbook, and how to create diffs of XML documents. At every stage, the Developer helps and his work pays off when I become a fully autonomous writing machine, no longer needing his help and able to in turn help others. His initial investment in time however was very slight – a short discussion on IRC, a URL, and an offer to mark up and commit my documentation if I did in fact write anything he could use. No more than five minutes of his time would have been wasted if I had turned out to be trolling and as it turned out his risk was well spent and the gain to the project was measurable.

In the second scenario, the Developers think they are being helpful but they’re starting from a much more argumentative position. Their refusal to accept that there is a problem in the first place that I would be willing to help with wastes everyone’s time. They believe they are playing a trump card by insisting that I go to the wiki and just ‘click edit then!’ but this doesn’t wash – I know that it should be more complicated than that to edit a project’s finalised documentation! – and by the time they suggest this action everyone is angry and unwilling to cooperate. As a last ditch effort I ask for information online on how to contribute documentation – a style guide, a glossary, anything that would lower the barrier – and is told it does not exist. Developer B admits that perhaps this is a gap that should be filled and I could help there – but by now no-one involved in the conversation has any interest in helping anyone.

Many open source projects become their own worst enemies in situations like this. Attracting new contributers is necessary for a project to survive, as long as those contributers are genuine and have skills the project can use. Unfortunately, to someone trying to break into a community it’s not obvious at times where to go or who to talk to. IRC and mailing lists become the first point of contact and those project members who are most aggressive and argumentative are the ones who respond.No matter how knowledgeable these members of the community are, aggression is the antithesis to good communication. Someone being WRONG on the internet turns very quickly into a situation where being right becomes more important than actually trying to understand what this person is saying.

The saddest thing about this whole situation is that so often, the fact that the outsider was driven away is seen as the project members winning the argument. They believe they’ve proven that they are right, and that they’ve succeeded – when really, by any measure of benefit to the project, they’ve quite clearly failed.

Posted in Open Source | Tagged , , | 2 Comments

Nexus One

A macro shot of the Nexus One phone

After three years of being a faithful iPhone fan, I’ve switched to Android.

I’ve just finally had enough. No matter how polished the user experience is, or how great the hardware, I am sick of being frustrated by iPhone’s petty limitations. When almost every application I have installed includes a built-in web server to get data back out of it again, something has gone pretty wrong.

Unlike many, iTunes wasn’t the breaking point for me. I really enjoy iTunes as a distribution platform, and I’m going to continue using it as a way of purchasing music that’s DRM free. I did however object to iTunes and my phone being so strongly shackled. It was very frustrating being at work, away from my main iTunes library, and wanting to get some data transferred to my phone. Well, I could use very expensive 3G internet … or just wait until I get home, I guess.

It made the experience feel less portable, less mobile. It came to remind me of working in locked down environments – the frustrating juggling act of trying to move data around with arbitrary restrictions. I need to get this file onto this server – but when I’m not allowed to plug my laptop into a network that it shares, how can I do this while breaking the minimum number of rules?

It came to a head when I realised that I’d used my hacked HTC Hero more often in the previous week than I had my iPhone, as whenever I wanted to load something onto a portable device it was the path of least resistance. Plug it into my computer over USB, load what I wanted onto the SD card, and now I can not only take the data with me but transfer it just as easily to another machine when I get there.

I decided to replace my iPhone with a Nexus One, and so far I love it to pieces. The screen is just magnificent and the performance is amazing. I’m told that Android 2.2 will be faster, but I’m having trouble imagining how that’s possible. Does it read my mind and open the applications before I tap the icon?

I was concerned that I’d miss the polish of the iPhone but that hasn’t turned out to be the case at all. The Nexus One has far fewer rough edges than I’d feared, and has a certain flair to it that I’m already learning to love.

Posted in Android, Open Source, Technology | Tagged , | 4 Comments

Simple Steps with Puppet

wall of shiny

Puppet is an automation framework for UNIX and UNIX-like operating systems. It allows sysadmins to automate common tasks in a centralised, efficient, and scalable way.

I’ve recently started looking into Puppet, drawing on my experience managing a large and convoluted Cfengine environment. While Cfengine is an excellent tool and certainly the best choice at the time, Puppet’s more declarative syntax makes for easier to maintain code. While in the Puppet tutorial at LCA this year, I was able to read and understand all of the example recipes without having had any real prior exposure to Puppet or Ruby.

Learning Puppet basics has required a shift in my thinking. I would waste a lot of time over a recipe trying to make Puppet ‘do’ something. Then my perspective would shift with an almost audible thunk and I’d realise where I’d gone wrong. Instead of micromanaging the mechanics of ‘doing’ things, Puppet requires you to define a state you want to acheive. It’s a suble difference, but an important one. I spent a fruitless hour trying to make Puppet create a directory before realising that I needed to tell puppet to maintain the directory.

As an example, here’s a simple class to ship out an authorized_keys file for the root user.

class ssh-keys {

	file { "/root/.ssh":
		ensure => "directory",
		owner => "root",
		group => "root",
		mode => "600",

	}

	file { "root/.ssh/authorized_keys":
		owner => "root",
		group => "root",
		mode => "600",
		source => "puppet:///ssh-keys/authorized_keys",

	}
}

This class ensures that the directory /root/.ssh exists, and has the correct permissions. It then copies out an authorized_keys file from the puppet server, stored in the ssh-keys class definition, and again ensures this file has the correct permissions.

My only real complaint about Puppet so far is that the documentation can occasionally be a little hard to follow. There are plenty of example recipes on the ‘net, but many are extremely complicated and it can be hard to find more simple examples to learn from and build apon. One area in which this was especially true was templating. I had to do quite a bit of digging around before confirming that all facter variables were accessible in templates.

Here as a simple example of using facter variables in templating is a snippet of a class for managing a resolv.conf file.

file { "/etc/resolv.conf":
	owner => "root",
	group => "root",
	mode => "644",
	content => template("resolv.erb")
}

This file management block ensures that the file /etc/resolv.conf exists, has the correct permissions, and has the content set out in the template ‘resolv.erb’.

resolv.erb:

search <%= domain %>
nameserver xxx.xxx.x.x
nameserver xxx.xxx.x.x

Where ‘xxx.xxx.x.x’ are valid nameserver addresses.

This simple template takes the server’s domain from facter, and inserts it in place of the variable “<%= domain %>”. Another very simple template could include:

hosts.erb:

127.0.0.1 localhost.localdmain localhost
<%= ipaddress %>	<%= fqdn %> <%= hostname %>

Here the template ensures the correct localhost entry, and the ‘real’ ip address and hostname of the server are listed.

Obviously there is far more that can be done with puppet than these simple beginner’s examples here. For more information, and for information on how to set up your puppet environment, see Puppetlabs.com

Posted in Linux, Open Source, Technology | Tagged | 2 Comments

Linux.Conf.Au – Day Four

City to Sea Bridge

Day four of the conference opened with a keynote entitiled “Hackers at the End of the World” by Glyn Moody. Glyn explored the history of sharing in science and art as inspired by the open source movement, and contrasted this with the anti-sharing ‘my gain is your loss’ culture of the global financial community. Glyn postulated that the sharing and indeed sharing of sharing that characterises the FOSS community held a tantalising glimpse of a solution to the global financial and environmental crisis.

Glyn Moody

Jeremy Allison brought forward an extremely provocative look at Microsoft’s overtures to the open source community with “The Elephant in the Room – Microsoft and Free Software”. Jeremy took the audience through Microsoft’s duality in recent times in attempting to reconsile with the open source community at the same time working against them in the political and regulartory arena.

Jonathan Oxer delighted attendees with a talk on “Tux on the Moon”, showcasing the Lunar Numbat project and it’s efforts to partner with the Google Lunar X-Prize team White Label Space to “… put a Linux powered robotic Australian marsupial on the moon”.

The day was concluded by a Professional Delegates Networking Session at the Wellington Opera House. The final day of the conference will open with a short keynote by Nat Torkington and a series of lightning talks, with the conference Penguin dinner closing the evening activities.

Tagged | Comments Off

Linux.Conf.Au – Day Three

Waterfront

The glorious weather that had punctuated the first two days of the conference held, heralding in the third day in a blaze of sunshine. The conference proper was introduced by a keynote by Benjamin Mako Hill on Antifeatures: Why your software works against you and why software freedom offers hope of a better future. Mako explored the concept of anti-features as deliberately included functionality or a lack of functionality that users hate so much they will pay to have them removed. Some classic examples included the gator spyware that was included with free version of p2p software on the windows platform – with a spyware-free version available for a fee.

Mako took the audience through why anti-features exist to further profits, and showed how in an environment dominated by free and open software they would be unable to survive.

Keynote

Fowllowing the keynote session, Jonathan Corbet gave his traditional Kernel Report, covering major milestones in kernel development since last year’s conference, and addressing the challenges the kernel development team face in the year to time. Those of us with massively parallel-processing netbooks will be pleased to know the Linux kernel now scales to 4096 cpus.

Matthew Carretts talk on social Success in (and for) the Linux community covered many of the reasons that the Linux community can be a hostile and toxic place for new contributers to enter. He covered how aggressive and confrontational behaviour is rewarded and how as a community Linux will need to learn to welcome and retain new members.

As comic relief I caught Paul Fenwick’s engaging presentation on the World’s Worst Inventions. Covering such gems as cocaine cough-drop marketed to children and the recent children’s bead product that metabolised to GHB when ingested, Paul went through a few hundred years of misguided and downright dangerous inventions.

The fourth day of the conference will feature a keynote by Glyn Moody, provocatively titled ‘Hackers at the End of the World’, and also the Professional Delegates Networking session.

Tagged | Comments Off

Linux.conf.au – Day Two

cuba!

First published on LinuxJournal.com

The second day of the conference dawned just as bright and sunny as the first. The opening keynote was delivered by Gabriella Coleman, Assistant Professor of Media, Culture, and Communication at New York University. She spoke on the history of the FOSS movement as birthed by Richard Stallman and it’s paradoxical growth during the same period that governments and corporate bodies were pushing their agenda for stronger IP and copyright control. Gabriella took the audience through the wrangling that forever forced the FOSS community into the political arena and created the biggest threat to the traditional concept of IP that exists today.

Gabriella Coleman

Tuesday is traditionally the second day of miniconfs at LCA, with the lineup including:

System Administration Miniconf
Bridging the gap
Open and the Public Sector
Education Miniconf
Data Storage and Retrieval Miniconf
Multicore and Parallel Computing Miniconf
Multimedia Miniconf

For me, the highlight of the day was the talk by Paul Gunn of Weta Digital, who explored the ‘Challenges in Data Centre Growth’ inherent in the demanding task of rendering movie frames. With some limited personal knowledge of the makeup of the infamous Weta render farm, it was fascinating to get a closer look.

This year, Linux.conf.au is hosting a photography competition for delegates and speakers, with four sections breaking the stunning Wellington city sights into quadrants. Entries are accepted for Lambton, Cuba, Courtenay and the Waterfront, roughly delimiting four areas of interest in Wellington’s compact CBD.

The first round of competition entries have been judged with the finalists announced – disclaimer, I was one of them – you’ll all just have to believe me that I intended to mention the competition before I knew!

The first round of finalists were:

Dustin Kirkland
Tim Potter
William Gordon
Jes Fraser

With Dustin Kirkland having entered two winning entries.

Day 3 will usher in the conference proper, starting with a keynote by Benjamin Mako Hill.

Tagged | Comments Off

LCA 2010 – Day 1

First posted on
LinuxJournal.com

January brings with it the southern-hemisphere’s summer and Linux.conf.au. This year, the conference is being held in Wellington, New Zealand thanks to the hard work and dedication of the Capital Cabal, a team of volunteer organisers lead by Susanne and Andrew Ruthven.

Civic Square

After a grey and wintery weekend, Wellington was all smiles for the first day of the conference. Situated at the Town Hall and Wellington Convention Centre close to the waterfront, sunshine, blue skies and balmy temperatures saw quite a few conference goers spending time outside exploring today.

This year’s volunteers are numerous and helpful, and have done an amazing job of making the first day of LCA smoother than any other in memory. For the first time, the conference is being streamed live and streams can be accessed from the schedule on http://lca2010.org.nz. For me, just having the wireless working on day one was impressive enough.

Welcome to LCA

The conference format is the same as previous years, with two days of mini-confs and then three days of conference proper. Monday’s line up included:

Business of Open Source Miniconf
Open Programming Languages Miniconf
Wave Developers Miniconf
Haecksen and Linuxchix Miniconf
Libre Graphics Day
Arduino Miniconf
Distro Summit

I have always enjoyed the first day at LCA, catching up with people I’ve met at previous years and making new connections. Registration is always exciting with the traditional goodie bag to rifle through. Tuesday is when the sessions that pique my interest most start, with talks on systems administration and high-performance computing. I’m really looking forward to it, and from looking at how it’s started, I really think this year’s conference is going to be one of the best.

Goodie Bag!

Tagged | Comments Off

Linux.Conf.Au 2010 – Preparation



It’s Linux.conf time of year again, and I’m starting to get that night-before-christmas feeling. This year the conference is being held in my home city of Wellington, New Zealand. Thanks to the generosity of my employer, Modica, I will be spending the entire week at the conference.

I’m going to be blogging the conference here and on LinuxJournal.com which will be a nice motivation to start writing regularly again. I’m looking at the schedule with a particular eye toward kernel and systems administration talks, and anticipating catching up with people I’ve met in previous years.

More than that, every year I return from LCA fired up by feeling a real connection with the community and armed with new knowledge that gives me a direct benefit in my day-job as a Linux systems administrator. I’m looking forward to experiencing this for my third year in a row.

Tagged | Comments Off

Changes

Jes and David Fraser

Jes Fraser (née Hall)

A very quick note to mention that I will be known from now as Jes Fraser, having recently entered into a civil union and taking my partner’s name. Given my previous history of Open Source contributions and writing for Linux Journal that can be found on the internet under the name of Hall, it was a hard decision.

Of course, almost as soon as I had officially taken the new name, someone on the internet mentioned some of my Open Source contributions under my old name. It was going to happen, right? :)

Tagged , | 3 Comments