
Acire Hacking
This afternoon I took a little time to work on some changes in [Acire](https://wiki.ubuntu.com/PythonSnippets); my little graphical front-end to a library of Python Snippets. I wanted to share this work as I think it will continue to help Acire be a useful little tool.
Today I added a new feature that helps you tie online documentation with a snippet. So, if you take a look at this screenshot:
You can see that in the snippet information (which I have changed the layout on a little) there are now a couple of link buttons. If you click on one of the buttons it will load up the documentation in your web browser. This documentation is added to the snippet like this:
[SNIPPET_DOCS: https://www.website.com, https://www.anothersite.com]
Acire will then grab the title of those sites and display the buttons underneath the snippet. This is a great way of including a link to the manual page for a given feature, tutorial links or anything else with a snippet. This is just a first cut of the feature and I am sure there some bugs to irk out, so merge proposals are welcome. ๐
In addition to this I added some additional fixes and features:
* **Alphabetized Lists** – the list of categories in Acire and the list of snippets in each category has now been alphabetized which makes navigating available snippets much easier.
* **HIG improvements** – thanks to Matthew Pirocchi fo contributing a branch for helping Acire to fit in with the GNOME HIG better. The changes are subtle but really sleek. ๐
* **Number of snippets** – the number of snippets that are currently available are now shown on the status bar.
* **Link to how to add snippets** – Acire is nothing without [python-snippets](https://wiki.ubuntu.com/PythonSnippets), so I added a link in the *Help* menu to [this page](https://wiki.ubuntu.com/PythonSnippets) which explains how people can contribute snippets.
The [python-snippets](https://wiki.ubuntu.com/PythonSnippets) project which provides the library of snippets that Acire uses has been seeing some wonderful contributions across a range of categories. Here is a quick screenie showing the range of categories that we have snippets in now:
So, I am planning on doing a little more bug-fixing and then rolling a 0.5 release of Acire. ๐

Two Ubuntu Community Team Intern Opportunities Available
**PLEASE NOTE THIS POST IS NOW OBSOLETE – PLEASE INSTEAD REFER TO [THIS POST](https://archivedblog.jonobacon.com/2010/03/23/ubuntu-community-team-opportunities-second-draft/) REGARDING THESE OPPORTUNITIES. THIS IS MERELY HERE FOR HISTORICAL REFERENCE.**
Today I am pleased to announce two fantastic opportunities for two enthusiastic, motivated and energetic folks to come and join my team for a six month internship. You will join Daniel Holbach, Jorge Castro, and David Planella as team-mates and report to myself as honorary horse-folk, working on awesome solutions to help make Ubuntu an ever more compelling community to be a part of.
This is a fantastic opportunity to work inside a fast-paced, collaborative environment, solving important problems, working with awesome colleagues and adding Canonical as a rocking reference to your resume.
Before we get to the details about the roles, I want to be clear on a few general elements:
* These are internships: they are are not normal full roles.
* Like most internships, these roles are unpaid.
* Each role lasts for six months.
* Working hours are Mon – Fri from 9am – 5pm.
I want to be clear that my team is a fast-paced, hard-working, hectic environment. I am going to work you hard, and you should expect that, but my goal here is to help you squeeze every ounce of opportunity out of your internship. We will have 1-on-1 weekly calls, I will help guide you on what to work on, help you manage your work, solve problems, and be effective in your projects. In other words: when you sign up for your internship, expect a solid six month adventure, but an adventure that will sow the seeds for many great opportunities in the future.
So, I am looking for two roles:
* Ubuntu Community Documentation Author (Internship)
* Ubuntu Community Web Developer (Internship)
Let’s take a look at the job descriptions:
—-
### Ubuntu Community Documentation Author (Internship)
**Job Title**: Ubuntu Community Documentation Author (Internship)
**Reports to**: Ubuntu Community Manager
**Job Location**: Home with some travel engagements.
**Job Summary**: To produce documentation and online materials for the Ubuntu community and new contributors.
**Key responsibilities and accountabilities**:
1. Produce a series of well-written and clear materials about a range of different topics in the Ubuntu community surrounding how to participate.
2. Make these materials available on line and ensuring they follow style and quality guidelines.
3. Work with the Ubuntu Documentation Team, Learning Team and Ubuntu Manual project to liaise around collaboration and best practise for materials production.
4. Promote and raise awareness of this documentation inside and outside the Ubuntu community.
5. Identify common needs and requirements for materials, prioritize them and build them into your workflow.
#### REQUIREMENTS
**Specific Job Skills**: Excellent writing skills, strong networking and social networking skills, good relationship building abilities, process driven, able to manage multiple work streams, good prioritisation, independent, willing to travel potentially 25% of their work time, and able to resolve conflict.
**Experience**: Experience of working with community in Ubuntu and Open Source projects, experience of the upstream/distributor relationship, technical experience.
**Key Qualities**: Have strong social skills, a good networker and a good technical knowledge of Ubuntu and the Open Source and upstream/downstream development process. Candidates should be process driven, strategically minded and committed. Competent visual design and artistic talent is highly desirable.
Other: Candidates should provide evidence of existing experience and work in the Open Source community and suitable references.
—-
### Ubuntu Community Web Developer (Internship)
**Job Title**: Ubuntu Community Web Developer (Internship)
**Reports to**: Ubuntu Community Manager
**Job Location**: Home with some travel engagements.
**Job Summary**: To design and develop web functionality across a range of Ubuntu community infrastructure web properties.
**Key responsibilities and accountabilities**:
1. In conjunction with the team and the community, design new features and solutions for specific needs in our key web properties.
2. Develop and implement such features and solutions using a range of appropriate tools.
3. Provide solid testing and quality assurance over your work during the development phase and before deployment.
4. Triage, fix and deploy bug fixes.
5. Work with the community to collaborate together on projects and solutions.
6. Report your progress to the team and the wider community.
7. Be responsive to changing needs, emergency fixes and feature requests and be reactive to a range of different customers.
#### Requirements
**Specific Job Skills**: Excellent web development skills (Python, Django, PHP, HTML, CSS and Database experience are a must), good experience of Launchpad, Bazaar and Ubuntu community infrastructure, strong networking and social networking skills, process driven, able to manage multiple work streams, good prioritisation, independent, willing to travel potentially 25% of their work time, and able to resolve conflict.
**Experience**: Experience of working on collaborative web development projects in Python, Django and PHP, strong development experience over a range of projects, experience of working with community in Ubuntu and Open Source projects.
**Key Qualities**: Excellent developer, strong social skills, a good networker and a good technical knowledge of Ubuntu and the Open Source and upstream/downstream development process. Candidates should be process driven, strategically minded and committed. Competent visual design and artistic talent is highly desirable.
**Other**: Candidates should provide evidence of existing experience and work in the Open Source community and suitable references.
—-
## How To Apply
If you are interested in applying for these roles **do not contact me directly**, you should follow these steps:
1. Ensure you have a recent, up to date resume (in PDF or OpenOffice.org format) that outlines your experience, education, your community achievements, technical background and information about your interests and ambitions.
2. Send an email to `alice.paul` AT `canonical` DOT `com` with the subject *Community Team Internship Application* and the following details:
* Specify which role you are interested in.
* Your resume attached.
* A few paragraphs about why you would like to have the role.
Good luck and I will speak to some of you soon in an interview!

Ubuntu Global Jam: Time To Rock The House
As many of you wonderful people of the Internet should be intimately aware of, the [Ubuntu Global Jam](https://wiki.ubuntu.com/UbuntuGlobalJam) takes place from the **26th – 28th March 2010**. That is only a few weeks away, and while we have some great events already set up, we need more!
I just wanted to highlight how simple it is to put together an event. I explained much of this in my recent live videocast today:
*Can’t see it? Watch it [here](https://www.ustream.tv/recorded/5495004)!*
I was keen to summarize much of the key points here though so this post can be linked to so we can spread some best practice around how easy it is to put together an event.
*Ubuntu Global Jam* events are simple events designed to get Ubuntu users and contributors in the same room to work together and contribute to Ubuntu. This can happen through any means: testing, documentation writing, working on a LoCo team, development or whatever else. The key focus here is on getting people together and having fun with Ubuntu.
Let’s look at how to put together an event. ๐
### Step 1: Pick a date
The *Ubuntu Global Jam* takes place on three days:
* Fri 26th March 2010
* Sat 27th March 2010
* Sun 28th March 2010
The first step is to pick a date for the event to happen. There is no fixed time of how long a jam should be it: it could be a few hours or a few days: it does not need to take place on all days. Just pick the times that work well for you. ๐
### Step 2: Pick a venue
The next step is to pick a place to hold your event. One of the misconceptions about global jam events is that they need to be big, professional, full-on events. Not at all! Many are simple, low-key events that are pretty much like most LUG meetings: a group of Open Source fans getting together to have fun and work on Ubuntu together.
When choosing a place I recommend you ensure the following are available as a bare minimum:
* Enough seating for ten or so people.
* An freely available Internet connection.
* Optional but preferable is access to refreshments (e.g. in a coffee shop).
A few great options for venues are:
* Coffee shops
* Bars
* University/school buildings
* Restaurants
* Homes
* If it is a nice day, what about a picnic at a park? ๐
Importantly, you often don’t need to inform the venue that you are going. Just choose a venue (e.g. a coffee shop) and just show up like any other day.
### Step 3: Add your event
The next step is to add your event to the list of events that are going as part of the *Ubuntu Global Jam*.
We are in the process of moving over to our [dedicated LoCo teams LoCo directory](https://loco.ubuntu.com) but as we are in a transitional period, we are also asking LoCo teams to list their events on the old wiki page too. As such, to add your events just follow these instructions:
#### The LoCo Directory
To add an event to the LoCo directory you will need to be a member of your LoCo team in Launchpad.
1. Go to [https://loco.ubuntu.com](https://loco.ubuntu.com) and in the top right on the page, log in.
2. Click the *Venues* link.
3. Check to see if the venue you are holding your event at is in the list. If not, click the *Add new venue* link and add the venue to the system.
4. Click [here](https://loco.ubuntu.com/events/team/add/) to straight to the page to add a new event. On that page, click on the team that the event will be happening as part of and then fill in the form. Be sure to select *Global Jam* in the *Related Global Event* drop-down box.
#### The Wiki Page
Simply go to [this page](https://wiki.ubuntu.com/UbuntuGlobalJam/Events) and add your event to it.
### Step 4: Build some buzz!
Now is the time to spread the word about your event and encourage people to come along! Here are some ideas:
* Be sure to tweet/dent, and post on Facebook about the event. When you add the event to the LoCo directory you will have a link to point people at (e.g. my event’s link is [this](https://loco.ubuntu.com/events/team/39/detail/)) – send multiple messages to remind people of the event and keep it upfront in their minds.
* Blog it – particularly if your blog appears on one of the planets.
* Post to your LoCo’s mailing list – let them know about the event, when it is and where it is.
* Post to local LUG mailing lists – let your local LUGs know: many people may want to come along and join the event!
* Put up fliers – fliers in libraries, computer shops, universities and at the venue itself are great ways to get people to join you.
* Website buttons – why not create some website buttons so attendees can put them on their website and link to your event page in the LoCo directory.
And that’s it! If you have any questions, here are a few useful resources:
* [Mailing List](https://lists.ubuntu.com/mailman/listinfo/loco-contacts) – this is where the LoCo community discuss general LoCo related topics. In most cases cases [teams have mailing lists too](https://lists.ubuntu.com/#Ubuntu+Worldwide+LoCo+Teams).
* `#ubuntu-locoteams` on Freenode – this is an online discussion channel where you can ask questions and socialize with other LoCo community members.
I look forward to seeing you good folks organizing your events and having a great time! ๐

Unleashing The Ubuntu LoCo Directory
One of the most wonderful sub-communities in the Ubuntu world are our [LoCo Teams](https://wiki.ubuntu.com/LoCoTeams); the global span of Ubuntu advocacy groups that are out there every day helping to spread the word about Ubuntu. These wonderful people are on the front-lines helping people to get started with Ubuntu and providing a fantastic place to meet, greet and have fun with other Ubuntu users and contributors.
In terms of resources for this community, we have the following key components:
* [Wiki Pages](https://wiki.ubuntu.com/LoCoTeams) – these wiki pages include best practise and details about how to join the community.
* [Teams List](https://wiki.ubuntu.com/LoCoTeamList) – this is the big list of teams, complete with contact details and online resources.
* [Mailing List](https://lists.ubuntu.com/mailman/listinfo/loco-contacts) – this is where the LoCo community discuss general LoCo related topics. In most cases cases [teams have mailing lists too](https://lists.ubuntu.com/#Ubuntu+Worldwide+LoCo+Teams).
* `#ubuntu-locoteams` on Freenode – this is an online discussion channel where you can ask questions and socialize with other LoCo community members.
One component we have been keen to fix is the *listing of LoCo teams and associated resources and events*. We have discussed this over a few UDSs and I am pleased to show off some work that has been going into making our LoCo portal really effective. Thanks to the wonderful LoCo Directory hackers who have been feverishly working away on this project. You can go and play with it at [https://loco.ubuntu.com](https://loco.ubuntu.com).
The LoCo directory looks like this:
Right now it has the following key features:
* **Teams** – a list of all the LoCo teams in the community.
* **Venues** – a list of venues used by LoCo teams (useful so you don’t need to repeatedly enter new venue information each time you organize and event and also good for sharing good venues with other LoCo team members).
* **Events** – events can be saved to the system and associated with LoCo teams as well as global events such as the [Ubuntu Global Jam](https://wiki.ubuntu.com/UbuntuGlobalJam).
If you click on the *Teams* link you can see the list of LoCo teams:
This is the full list of teams. Teams that have a humanity colored Ubuntu circle of friends next to them are *Approved* teams, otherwise it is colored gray and indicates the team is not yet approved. Already this makes finding teams much nicer for new Ubuntu members: just point them at [https://loco.ubuntu.com/teams/](https://loco.ubuntu.com/teams/) ๐
When you click on a team you see more information about the team and their resources/events. As an example, here is my local team *Ubuntu California*:
The team information page shows some key details such as the owner, admins, when the team is next up for re-approval and also links to a series of resources such as websites, IRC channels, forums etc. The page also rather nicely shows their logo. ๐
Not only this, but the page also shows a list of events that have been organized by the team. In the screenshot above there are two events (they are a little squashed, that is a bug). Clicking on an event shows the details for that specific event. As an example, here are the details for the *Ubuntu Global Jam* event that I have organized in a few weeks time:
When you view an event you can see when it is, what it happens, the location, a map reference and a description. There is also an area where you can RSVP for an event to confirm your attendance or non-attendance: this is a great way of determining how many people are likely to show up to your event.
The way the LoCo directory works is to suck as much information out of Launchpad where possible about teams and then it builds in some of the other features (such as events) into the LoCo directory. This avoids duplication of data and uses Launchpad for key features such as access control and owner/admin information.
Great work, LoCo directory hackers! ๐

Lucid Community Progress
As many of you will know, I manage the Ubuntu Community team at [Canonical](https://www.canonical.com/) where Daniel Holbach, Jorge Castro and David Planella work. Together we strive to make the Ubuntu community a fun, productive and engaging environment. This work involves a tremendous range of diverse disciplines and projects.
One thing that we have been really keen to facilitate in Ubuntu is an ethos of *just do it*. I really believe our community should feel engaged to be creative in their ideas and be able to get out there and do it, with plenty of support resources so others can help them achieve their goals. I am keen that we don’t have a bottleneck where creativity is limited. Of course, this happens from time to time, but we are always keen to resolve it where possible.
While Ubuntu has a great many projects going on at any one time, some of these projects I explicitly put on my radar so I can help contribute to make them successful, and some of these are projects that I have been happy for me and my team to commit their time to. Each of these projects is scoped for a six month cycle, and when we get a little closer to the 10.10 cycle we will start thinking of where we will focus our time in that cycle too.
In the Lucid cycle I was keen to track work on this set of projects in a more effective way. To do this the process worked a little like this:
1. We first had a series of discussions at both UDS and online in which we discuss each project, what is involved and what targets and goals are in scope for the Lucid cycle. Targets beyond the Lucid cycle were explicitly deferred until the 10.10 cycle.
2. The conclusions generated from these discussions were first documented as a *Roadmap* on the Ubuntu wiki. This provides a high-level set of goals that the project is striving for.
3. We then produced a *Blueprint* for each project and a set of actions that are assigned to people. The blueprint is what we use to track progress on the project. The actions are stored in the whiteboard on the blueprint (which anyone can edit) and anyone can subscribe to the blueprint, which makes it great for keeping on track projects even if you are not involved in them.
The actions in the blueprint are stored in a set format, like this:
[jonobacon] An example action: TODO
In the above example, it clearly states who the action is assigned to (`jonobacon` on Launchpad), what it is (`an example action`) and it’s status (`TODO`). When an action is completed it is set to `DONE` and if we decide we want to bump it to next cycle, it is marked as `POSTPONED`.
This process in itself offers some key benefits:
* Commitments to a given project are clearly scoped to a cycle.
* Work is assigned to people: this is a great way of getting things done. Project Management theory has long taught that publicly assigning work to people improves it’s chances of getting done.
* Transparent: anyone can subscribe to a blueprint. As an example, even though I am not managing the *Desktop Experience* team or contributing to their projects, I am interested in their work, so I subscribe to a number of their blueprints. Each time the state of an action changes, I then get an automated email with the update. This is great for keeping up to date with their work.
With a bunch of blueprints that follow this format, I then approve a number of them as projects that my team will help have oversight on and help them to succeed. Some of these projects are driven by my team and I, but many of them are entirely community driven projects that I assign my team to have oversight over.
The legendary Martin Pitt then wrote a script to take this range of blueprints and actions and generate a [burndown chart](https://people.canonical.com/~pitti/workitems/canonical-community.html). Here is my team’s as of today:
It works like this: the Y axis is the number of actions in the blueprints I have approved for my team, and the X axis is the time until the end of the cycle (it is a little shorter as the graph was regenerated). The thick line through the middle of the chart is the *trend line*. My responsibility as a manager is to help keep the number of completed actions (shown as green) under the trend line: this ensures that we are on track for completing the committed actions throughout the cycle.
This was a pretty new concept for our community and of course the community is not expected to follow this way of working, but I have been stunned at how everyone has worked hard to stick to the actions they committed to and see the work through. As such this has felt like a really great cycle with some stunning work going on. Thanks everyone for your contributions!

Download Files Async With Gio And Python
Recently I [asked for some help on how to download a file without blocking the GUI](https://archivedblog.jonobacon.com/2010/03/15/downloading-large-files-async-with-gio/). Thanks to everyone who contributed their expertise in the post comments: I now have my program working great.
I wanted to now share my conclusions so that others can benefit from them too. To do this I am going to first explain how this works, and secondly I have created a Python Snippet and added it to the [Python Snippets library](https://wiki.ubuntu.com/PythonSnippets) so there is a great working example you folks can play with. You can use Acire to load the snippet and play with it. This is the first `gio` snippet, and I hope there will be many more. ๐
The goal I set out with was to download a file without freezing the GUI. This was somewhat inspired from [a recent Shot Of Jaq](https://shotofjaq.org/2010/03/going-async/) shot that we did on async programming, and I used this app as a good example to play with. Typically I had downloaded files the manual way and this had blocked my GUI hard, but I was aware that this is exactly what `gio`, part of the GNOME platform is here to solve.
The way async basically works is that you kick off an operation and then you wait for confirmation of the result before you proceed. It is the opposite of procedural programming: you don’t kick off an operation and in the next line process it. When you do things the async way, you start an operation and then tell it what callback should be called when it is complete. It feels very event-driven: kind of how you connect a handler to a signal in a widget so that when that signal is generated, the handler is called.
When I started playing with this the docs insinuated that `read_async()` and `read_finish()` were what I needed to use. I started off with code that looked a little like this:
def download_latest_shot(self):
audiourl = “https://….the url to the Ogg file….”
self.shot_stream = gio.File(audiourl)
self.shot_stream.read_async(self.download_latest_shot_complete)
It then calls this callback:
def download_latest_shot_complete(self, gdaemonfile, result):
f = self.shot_stream.read_finish(result).read()
outputfile = open(“/home/jono/Desktop/shot.ogg”,”w”)
outputfile.writelines(f)
After some helpful notes from the GNOME community, it turned out that what I really needed to use was `load_contents_async()` to download the full content of the file (`read_async()` merely kicks off a read operation) and `load_contents_finish()` as the callback that is called when it is complete. This worked great for me.
As such, here is the snippet which I have added to the [Python Snippets library](https://wiki.ubuntu.com/PythonSnippets) which downloads the Ubuntu HTML index page, shows it in a GUI without blocking it and writes it to the disk:
#!/usr/bin/env python
#
# [SNIPPET_NAME: Download a file asynchronously]
# [SNIPPET_CATEGORIES: GIO]
# [SNIPPET_DESCRIPTION: Download a file async (useful for not blocking the GUI)]
# [SNIPPET_AUTHOR: Jono Bacon
# [SNIPPET_LICENSE: GPL]
import gio, gtk, os
# Downloading a file in an async way is a great way of not blocking a GUI. This snippet will show a simple GUI and
# download the main HTML file from ubuntu.com without blocking the GUI. You will see the dialog appear with no content
# and when the content has downloaded, the GUI will be refreshed. This snippet also writes the content to the home
# directory as pythonsnippetexample-ubuntuwebsite.html.
# To download in an async way you kick off the download and when it is complete, another callback is called to process
# it (namely, display it in the window and write it to the disk). This separation means you can download large files and
# not block the GUI if needed.
class Example(object):
def download_file(self, data, url):
“””Download the file using gio”””
# create a gio stream and download the URL passed to the method
self.stream = gio.File(url)
# there are two methods of downloading content: load_contents_async and read_async. Here we use load_contents_async as it
# downloads the full contents of the file, which is what we want. We pass it a method to be called when the download has
# complete: in this case, self.download_file_complete
self.stream.load_contents_async(self.download_file_complete)
def download_file_complete(self, gdaemonfile, result):
“””Method called after the file has downloaded”””
# the result from the download is actually a tuple with three elements. The first element is the actual content
# so let’s grab that
content = self.stream.load_contents_finish(result)[0]
# update the label with the content
label.set_text(content)
# let’s now save the content to the user’s home directory
outputfile = open(os.path.expanduser(‘~’) + “/pythonsnippetexample-ubuntuwebsite.html”,”w”)
outputfile.write(content)
ex = Example()
dial = gtk.Dialog()
label = gtk.Label()
dial.action_area.pack_start(label)
label.show_all()
label.connect(‘realize’, ex.download_file, “https://www.ubuntu.com”)
dial.run()
I am still pretty new to this, and I am sure there is plenty that can be improved in the snippet, so feel free [submit a merge request](https://wiki.ubuntu.com/PythonSnippets) if you would like to improve it. Hope this helps!

Ubuntu Global Jam Videocast
Ladies and Gentlemen of the Internet, on **Tues 16th March** at **11am PST / 2pm EST / 6pm GMT** I will be doing a live [At Home With Jono Bacon](https://www.ustream.tv/channel/at-home-with-jono-bacon) videocast dedicated to the [Ubuntu Global Jam](https://wiki.ubuntu.com/UbuntuGlobalJam); the fantastic global event taking place from *26th – 28th March 2010* in which Ubuntu contributors get together in the same location to have fun and work on Ubuntu.
In the videocast I will talk about:
* What is the *Ubuntu Global Jam*?
* What are events like?
* How do you organize an event?
+ Q + A
This is a great opportunity to get the low-down on the *Ubuntu Global Jam* and how to get involved. Be there!
**[Watch the videocast live here!](https://www.ustream.tv/channel/at-home-with-jono-bacon)**

Downloading Large Files Async With GIO
Slightly technical question for my friends on [Planet GNOME](https://planet.gnome.org). I have been hunting around for some help online with no luck, so I figured I would post here and hopefully this blog entry can be a solution for those who have similar questions.
I am in the process of porting *App Of Jaq* to to async. To do this I am using `gio` and have the code that downloads XML feeds up and running pretty well, and the app feels much more responsive. Now I need to have the application download an Ogg asynchronously without freezing the GUI.
My code currently looks like this:
def download_latest_shot(self):
audiourl = “https://….the url to the Ogg file….”
self.shot_stream = gio.File(audiourl)
self.shot_stream.read_async(self.download_latest_shot_complete)
It then calls this callback:
def download_latest_shot_complete(self, gdaemonfile, result):
f = self.shot_stream.read_finish(result).read()
outputfile = open(“/home/jono/Desktop/shot.ogg”,”w”)
outputfile.writelines(f)
Now, I am still pretty new to this, and while this code does work, it freezes the GUI pretty hard. Can anyone recommend some next steps for how I can download the file without it freezing? Some example code would be great. ๐
Thanks in advance for anyone who can help. ๐

Unwrapping The Community Manager at OSBC in San Francisco
I just wanted to let you good people of the Internet know that I will be delivering a brand new talk entitled **Unwrapping The Community Manager** at [OSBC](https://www.osbc.com/) in San Francisco at **11.40am** on **Thu 18th March 2010**.
In the presentation I will be deconstructing the role of *community manager* and discussing:
* who needs a community manager?
* what does the role involve?
* where should he/she report?
* what are requirements for improving the opportunity for success?
* what are the risks?
I will also be sharing my experiences working with Ubuntu and other organizations. I hope to see some of you there!

System 76 Lemur Review
*This blog entry represents the views of me, myself and I, and does not represent the views of my employer (Canonical) or System 76. While I have decided to write a review of this specific machine, there are many vendors out there who ship Ubuntu on their machines and this review does not favor System76 over these other vendors. Heck, I am happy to review their machines too if they want.* ๐
Recently I got one of these new [System 76](https://www.system76.com/) ultra-thin laptops, the [Lemur](https://www.system76.com/product_info.php?cPath=28&products_id=97):
System76 are well known in the Open Source community for shipping Ubuntu on their machines, being active community members and for helping LoCo teams with machines too. I have never owned a System76 box so I thought this was a good opportunity to give it a ride and share some feedback.
So first, the specs:
* **Display**: 14.0″ HD WXGA Super Clear Ultra-Bright LED backlit (1366 x 768)
* **Graphics**: Intel GMA 4500MHD graphics
* **Audio Output**: Intel High Definition Audio
* **Networking**: Gigabit LAN (10/100/1000), WiFi
* **Wireless**: 802.11 agn
* **Expansion**: Express Card 34 slot
* **Ports**: HDMI, VGA, 3 x USB 2.0, Headphone Jack, Microphone Jack, SD Reader
* **Camera**: Built-In 1.3 MP Webcam
* **Security**: Kensingtonยฎ Lock
* **Power Management**: Suspend & Hibernate
* **Battery**: Lemur UltraThin Li-Polymer Battery Pack
* **AC Adapter**: includes one AC adapter
* **Dimensions**: 13.38″ x 9.09″ x 0.90″ (WxDxH)
* **Weight**: 3.5 lbs
The machine I got has an *Intel Core 2 Duo SU7300 1.3 GHz 800 MHz FSB 3 MB L2 (10 Watt)*, *4GB RAM (DDR3 1066 MHz 1 DIMM)* and a *80 GB Intel X25-M Solid State Drive*.
Now, in the interests of full disclosure: I don’t really do reviews, so this is going to be a quick run through the details, not a 150-picture unboxing and War And Peace epic of every minor detail of the machine. I just wanted to get my experience down as quickly as possible so I could share my feedback with others.
## The Machine
OK, let’s zip through the summary:
The machine is a really sleek looking bit of kit. The first thing that struck me is how well designed it feels: it doesn’t feel like a randomly thrown together collection of components. It is thin and incredibly light, and has a very Apple-ish feel to it. It passed what I am calling the *Lost Test*: that is, when laid in bed at night watching *Lost* on [Hulu](https://www.hulu.com/lost) with said laptop rested on your chest (for that IMAX effect), how many episodes can you get though before you feel like your heart is about to overheat and stop working. It’s lightness and lack of heat helped it pass with flying colors.
The screen looks great, doesn’t seem to smudge easily and is nice and bright. I like the fact it is a widescreen, something I miss with my current Thinkpad.
The keyboard is pretty much ok: it ain’t no Thinkpad keyboard, but of all the laptops I have owned and that are buried in my laptop graveyard, the Lemur’s keyboard feels better than most. The keys are wide enough and I love the fact that there is no Windows key, but instead an Ubuntu key. I want to see more of that, yes I do. ๐
The trackpad is long and feels pretty good, and the buttons don’t look like buttons but instead areas on the trackpad near the bottom where you can push down: this makes it look really sleek. Unfortunately at first the buttons are a little hard to press, but I have noticed that they are getting easier, so I think they just need breaking in a little.
With the current configuration of processor and RAM, this thing is *shit off a shovel fast*. It zips along like no-ones business, and Ubuntu is up and running in a matter of seconds. While I didn’t test any hardcore 3D games on there, it runs Compiz great with the extra effects switched on.
Sounds works great, the speakers sound surprisingly good and the built-in webcam works well too. Finally, the battery life seems fine in terms of life, but not outstanding. Then again, I am used to my extra-long-life Thinkpad batteries.
My only real gripe believe it or not is the packaging the machine comes in: it visually looks cheap with a large generic “notebook” logo and doesn’t reflect the swishness of the machine encased inside it. I spoke to Carl Richell, founder of System76 about this and he has acknowledged it is an issue and they are keen to fix it: he said they really want every essence of the System76 experience to feel sleek. Good man. ๐
## The Default Install: Ubuntu 9.10 Karmic Koala
It is just incredible driving back from picking up a computer from the UPS warehouse and knowing that it already has Ubuntu pre-installed. I have never bought a pre-installed Ubuntu computer before, so I was curious to see how it looked. I got it home, switched it on and it threw up the installer’s configuration settings: I entered my details and the system was ready to roll. I was left with pretty much a default installation of Ubuntu: there is not the horrible bundled collection of software you don’t want and ugly vendor wallpaper that you find if you buy a typical Windows pre-loaded machine. Good work System76 on shipping what I consider a great representation of Ubuntu.
Other than that, nothing much to say: everything just works as you would expect.
## Running Lucid
Being part of the Ubuntu development team, I was keen to get Lucid on there. I used Update Manager to update to Lucid and installation was smooth. Once again everything works: any bugs that I have found have not been specific to this machine, but replicated on my other Lucid machine. What is really noticeable is boot speed on the SSD: it is *bonkers fast*.
## Conclusion
In conclusion, I think the Lemur is a beautiful machine, and combined with what I consider a beautiful Operating System, particularly with the new fit and finish of Lucid. When running the Lemur it really feels like great design in hardware and software meeting well. I would happily recommend this machine to others. ๐