Subscriptions

Last updated: 29 July 2010 11:13
All times are UTC.

Feeds:
RSS 1.0 RSS 2.0 ATOM FOAF OPMF LCA2007
Powered by:
Planet

Planet LCA2010

29 July 2010

Simon Horman

Perdition 1.19-rc3 Released

[Container Ship]

I have released version 1.19-rc3 of Perdition. This release fixes several problems. Perhaps most significantly, Thunderbird 3.1 can now re-connect to perdition SSL/TLS.

The code and related libraries are available as tarballs here. More information is available in the announcement email. More information about perdition here.

29 July 2010 08:16

kexec-tools 2.0.2 Released

[Sumo]

I have released version 2.0.2 of kexec-tools. the user-space portion of kexec a soft-reboot and crash-dump facility of Linux and Xen.

There are changes since 2.0.2-rc1.

The code is available as a tarball here and in git here. More information is available in the announcement email.

kexec-tools recently moved, so the URLs above are new.

29 July 2010 05:01

Moved

[Coral in Miyakojima] My home page and blog have moved. The new locations are:

29 July 2010 03:23

28 July 2010

Emmanuele Bassi

GTK+ Meeting @ GUADEC 2010 – update

since I’m stupid and I scheduled the team meeting before I could actually be in The Hague, I had to move the meeting. and, again, since I’m stupid I managed to schedule it against important talks of the day — and my own.

so: the GTK+ team meeting has been moved to the common area after the last talk of Wednesday, July 28th. sorry for the inconvenience I caused, and please don’t hurt me when you see me.

by ebassi at 28 July 2010 12:42

David Woodhouse

28 Jul 2010

Things I hate today include:
  • Symbian on my Nokia N97 — for spontaneously rebooting as soon as I got off the ferry.
  • Google Maps — for not caching the map tiles I'd carefully downloaded while I was on the free ferry wireless, showing my route to the hotel.
  • Mobile phone networks — for the insane amount of money it will have cost me to re-download the same map tiles again, as I was driving.
It's almost as if it's a conspiracy — especially between the latter two.

I really need to get myself an N900 and start using maemo-mapper again. Every time I try to use non-free software, it hurts.

28 July 2010 08:08

Lev Lafayette

Drupal Bookmarks Module

When developing a website, and in particular an intranet, for an organisation there is often a debate on what should be on the frontpage.

Different departments and different individuals all seem to have "strong opinions" on the matter.

read more

by lev_lafayette at 28 July 2010 02:10

27 July 2010

Stewart Smith

HOWTO screw up launching a free software project

Josh Berkus gave a great talk at linux.conf.au 2010 (the CFP for linux.conf.au 2011 is open until August 7th) entitled “How to destroy your community” (lwn coverage). It was a simple, patented, 10 step program, finely homed over time to have maximum effect. Each step is simple and we can all name a dozen companies that have done at least three of them.

Simon Phipps this past week at OSCON talked about Open Source Continuity in practice – specifically mentioning some open source software projects that were at Sun but have since been abandoned by Oracle and different strategies you can put in place to ensure your software survives, and check lists for software you use to see if it will survive.

So what can you do to not destroy your community, but ensure you never get one to begin with?

Similar to destroying your community, you can just make it hard: “#1 is to make the project depend as much as possible on difficult tools.

#1 A Contributor License Agreement and Copyright Assignment.

If you happen to be in the unfortunate situation of being employed, this means you get to talk to lawyers. While your employer may well have an excellent Open Source Contribution Policy that lets you hack on GPL software on nights and weekends without a problem – if you’re handing over all the rights to another company – there gets to be lawyer time.

Your 1hr of contribution has now just ballooned. You’re going to use up resources of your employer (hey, lawyers are not cheap), it’s going to suck up your work time talking to them, and if you can get away from this in under several hours over a few weeks, you’re doing amazingly well – especially if you work for a large company.

If you are the kind of person with strong moral convictions, this is a non-starter. It is completely valid to not want to waste your employers’ time and money for a weekend project.

People scratching their own itch, however small is how free software gets to be so awesome.

I think we got this almost right with OpenStack. If you compare the agreement to the Apache License, there’s so much common wording it ends up pretty much saying that you agree you are able to submit things to the project under the Apache license.  This (of course) makes the entire thing pretty redundant as if people are going to be dishonest about submitting things under the Apache licnese there’s no reason they’re not going to be dishonest and sign this too.

You could also never make it about people – just make it about your company.

#2 Make it all about the company, and never about the project

People are not going to show up, do free work for you to make your company big, huge and yourself rich.

People are self serving. They see software they want only a few patches away, they see software that serves their company only a few patches away. They see software that is an excellent starting point for something totally different.

I’m not sure why this is down at number three… it’s possibly the biggest one for danger signs that you’re going to destroy something that doesn’t even yet exist…

#3 Open Core

This pretty much automatically means that you’re not going to accept certain patches for reasons of increasing your own company’s short term profit. i.e. software is no longer judged on technical merits, but rather political ones.

There is enough politics in free software as it is, creating more is not a feature.

So when people ask me about how I think the OpenStack launch went, I really want people to know how amazing it can be to just not fuck it up to begin with. Initial damage is very, very hard to ever undo. The number of Open Source software projects originally coming out of a company that are long running, have a wide variety of contributors and survive the original company are much smaller than you think.

PostgreSQL has survived many companies coming and going around it, and is stronger than ever. MySQL only has a developer community around it almost in spite of the companies that have shepherded the project. With Drizzle I think we’ve been doing okay – I think we need to work on some things, but they’re more generic to teams of people working on software in general rather than anything to do with a company.

by Stewart Smith at 27 July 2010 18:40

Robert O'Callahan

Unexpected Downtime

I seem to have picked up some sort of virus. I'm mostly offline while I wait for this to clear up. Please forgive any delays...

27 July 2010 05:39

Jonathan Lange

Python 3

I would be much more sympathetic to the whole Python 3 endeavour if they had made a serious effort to keep the major 2.x releases mutually compatible.

by jml (noreply@blogger.com) at 27 July 2010 00:40

26 July 2010

Lev Lafayette

Installing LAMMPS on a 64-bit AMD Opteron Cluster running CentOS 5 Linux (again)

LAMMPS (Large-scale Atomic/Molecular Massively Parallel Simulator) is used to model atoms or as a parallel particle simulator at the atomic, meso, or continuum scale. It has potentials for soft materials (biomolecules, polymers) and solid-state materials (metals, semiconductors) and coarse-grained or mesoscopic systems. You may remember a difficult install from the past.

read more

by lev_lafayette at 26 July 2010 06:28

25 July 2010

Adam Shand

In stillness …

Bending into Padahastasana, the energy courses through my legs. In sympathetic unison the crickets count the seconds away.

Listening to the drone of my teachers voice, I feel a gecko scurry over my toes to hunt for moths in the glare of the lights.

Looking up from my book, I see ochre tinged cliffs melting into the jungle below. Fork-tailed swallows flit through the skies chasing insects and cuddle on the roof, sharing chirps of intimacy.

Drifting in the pool, I strain to float effortlessly. Above me, in a haze of yellow and black butterflies, swarms of red dragonflies zigzag across the water.

Playing on the beach, we are joined by two young children. They howl in Thai as we skim a frisbee over their heads and laugh with unspoken pride when they pry the disk from the sky.

Hanging out in an empty pub, we make aimless conversation with the owner. As we laugh and talk a party slowly forms around us, John and Boi on the guitar, Kris and I singing.

Struggling to shape my thoughts into words, I'm approached by a young Indian boy who stares longingly at my computer. To his astonishment I don't have any games installed, instead we entertain ourselves by taking silly pictures while his father looks on and laughs.

Watching children play in the distance with a broken surfboard in the sea. Skimming it across the wash they shriek with laughter each time one of them gets catapulted into the air by an incoming wave.

Sitting, facing north, I close my eyes. I can hear the wind in the trees and feel the beat of my heart as I begin to count my breath.

by Adam Shand at 25 July 2010 09:44

24 July 2010

Vik Olliver

Cans to Metal

I was always told that the first thing you need to know about melting aluminium cans is that you don't really want to melt aluminium cans; it's too hard. Find other chunkier scrap aluminium instead. But I'm a sucker so I did it anyway.


The big problem is that there is a lot of surface area on the cans, and that this encourages the aluminium to oxidise. Oxidised aluminium holds on to the liquid aluminium like a sponge, so unlike when you melt lead or pewter the metal does not all automagically drop to the bottom. It needs fluxes, chemicals, special furnaces and the like. Yeah, right.


So, take a load of heatproof bricks or pavers and in a stable location away from flammable stuff construct a sturdy furnace. You'll note that mine is built from ordinary pavers on a mud bank, surrounded by foliage, and looks like it'll collapse at any moment. The trick is to have a long tunnel going into the bottom of the furnace, with a little doorway on top to allow you to put things in and take them out. The chimney takes the sparks up and away from your face and hair, and needs to be narrower than the furnace bottom.


Down the tunnel, you direct a hair-dryer, blower, hot-air stripper (good idea Forrest!), powerful fan or similar. This encourages flames and sparks from ordinary BBQ charcoal at the bottom of the furnace. Do not place the fan up against the tunnel or it may get flamed. If I need to tell you to keep a bucket of water and hose at hand, and warn you not to wet the fan you really shouldn't be doing this.


Back to the cans. Flatten these as much as possible and pack the flattened remains hard into a steel can. This steel can lasts only one burn, so pack in as much as you can.


Now light the furnace. A couple of lit newspaper balls in the tunnel generally does the trick, or poke a blowtorch in there. Once you turn the fan on it's a matter of moments before the whole thing flares up. Once it's going turn off the fan, open the door and rearrange the charcoal so you can put the can inside. Put more charcoal against the can, close the door and turn the fan on again. At this point you realise the value of some peep-hole or crack through which you can watch the inferno.


When the can is orange hot the contents miraculously shrink. once everything in the can is a nice, bright orange, turn off the fan and take it out - I use BBQ tongs. Rattle the contents about a bit, then turn it upside-down on a wide fireproof surface. Squish the pile of dross and molten aluminium streams out. Try to round these up into big blobs so they don't oxidise much when you re-melt them.

Now you have reasonably-sized lumps of aluminium that you can do traditional backyard casting with.

by noreply@blogger.com (Vik Olliver) at 24 July 2010 04:14

22 July 2010

Don Christie

Waiting in the rain

By 8am this morning, a crowd of 13 people had gathered in the drizzle outside Wellington’s Magnummac store, eagerly awaiting the New Zealand launch of Apple’s iPad.

I decided to ask them why.

“This device is changing the rules of digital engagement”, I couldn’t wait to get my hands on one; I want to be the first person in New Zealand to get one.” The hopeful, but ill-informed, gentleman at the head of the queue told me.

“You know that people have been importing them for months?”

“This device is changing the rules of digital engagement” he replied, effectively ending the interview.

I moved along the queue, stopping in front of a lady who, I quickly noticed, had a tattoo of a heart with an apple in the middle of it on each hand and “A-P-L-E” spelled out across her knuckles.  I moved along the queue.

A normal looking gentleman told me: “We want to stand at the intersection of computers and humanism”.  I noticed that he was nervously fingering a small white book on which I could make out the title “The Quotations of Chairman Jobs”, and I fled.

As I passed the last person, he grabbed me and confided that, in his inebriated state, he’d thought it was the queue for the soup kitchen.  I explained.  We fled together along Vivian Street.

by Matthew Hunt at 22 July 2010 21:58

Dave Hall

Travelling, Speaking, Scaling and Aegiring

The next couple of months are going to be a crazy ride. I will be visiting at least 7 countries, speaking on 8 or more days in a 5 week period. The talks will be focused on Drupal and Aegir. My schedule is below.

Horizontally Scaling Drupal - Melbourne

On 7 August I'll be running a 1 day workshop around the theme of horizontally scaling Drupal. The content is built on the knowledge I developed building, deploying and managing around 2100 sites for a client. This event has very limited capacity and has almost sold out.

DrupalCon - Denmark

Denmark is hosting the European leg of DrupalCon this year. I will be attending the full conference. I won't be presenting, but I will be getting involved with some of the BoFs. I had a ball at DrupalCon San Francisco earlier in the year.

Efficiently Managing Many Drupal Sites - Slovakia

After spending a couple of days recovering from DrupalCon, I'll be teaming up with the crew at Sven Creative in Bratslavia, to run a 2 day intensive workshop on horizontally scaling Drupal and development workflows. For more information check out the workshop website.

Free Software Balkans - Albania

On the weekend of 11-12 September, the inaugural Free Software Balkans Conference will be held at the University of Vlore, Albania. I'll be there speaking about Drupal and Aegir. In addition to this I will be running half day build your first Drupal site workshops around the country. The dates and locations for the workshops are still being finalised.

OSI Days - India

On my way back to Australia I will be taking a side trip to Chennai, via Delhi, for OSI Days 2010, Asia's largest open source conference. I will be presenting sessions on Aegir and Drupal. This looks like it will be a huge event.

Other Events

I've launched a new site workshops.davehall.com.au to list my training and speaking engagements. As dates are locked in I'll be adding them to the site.

If you would like to meet with me while I'm on the road, add me to your tripit network, follow me on identi.ca or twitter or add me to your network on LinkedIn.

by Dave at 22 July 2010 12:23

Stewart Smith

A tale of a bug…

So I sometimes get asked if we funnel back bug reports or patches back to MySQL from Drizzle. Also, MariaDB adds some interest here as they are a lot closer (and indeed compatible with) to MySQL. With Drizzle, we have deviated really quite heavily from the MySQL codebase. There are still some common areas, but they’re getting rarer (especially to just directly apply a patch).

Back in June 2009, while working on Drizzle at Sun, I found a bug that I knew would affect both. The patch would even directly apply (well… close, but I made one anyway).

So the typical process of me filing a MySQL bug these days is:

  • Stewart files bug
  • In the next window of Sveta being awake, it’s verified.

This happened within a really short time.

Unfortunately, what happens next isn’t nearly as awesome.

Namely, nothing. For a year.

So a year later, I filed it in launchpad for MariaDB.

So, MariaDB is gearing up for a release, it’s a relatively low priority bug (but it does have a working, correct and obvious patch), within 2 months, Monty applied it and improved the error checking around it.

So MariaDB bug 588599 is Fix Committed (June 2nd 2010 – July 20th 2010), MySQL Bug 45377 is still Verified (July 20th 2009 – ….).

(and yes, this tends to be a general pattern I find)

But Mark says he gets things through… so yay for him.2

by Stewart Smith at 22 July 2010 00:10

21 July 2010

Adam Shand

How we solve problems

This description from Newsweek on what happens in our brains when we're creatively solving problems is wonderful. I don't think I could have come up with these words but they describe exactly what it feels like to me when I'm involved in difficult problem solving.

When you try to solve a problem, you begin by concentrating on obvious facts and familiar solutions, to see if the answer lies there. This is a mostly left-brain stage of attack. If the answer doesn’t come, the right and left hemispheres of the brain activate together. Neural networks on the right side scan remote memories that could be vaguely relevant. A wide range of distant information that is normally tuned out becomes available to the left hemisphere, which searches for unseen patterns, alternative meanings, and high-level abstractions.

Having glimpsed such a connection, the left brain must quickly lock in on it before it escapes. The attention system must radically reverse gears, going from defocused attention to extremely focused attention. In a flash, the brain pulls together these disparate shreds of thought and binds them into a new single idea that enters consciousness. This is the “aha!” moment of insight, often followed by a spark of pleasure as the brain recognizes the novelty of what it’s come up with.

Now the brain must evaluate the idea it just generated. Is it worth pursuing? Creativity requires constant shifting, blender pulses of both divergent thinking and convergent thinking, to combine new information with old and forgotten ideas. Highly creative people are very good at marshaling their brains into bilateral mode, and the more creative they are, the more they dual-activate.

by Po Bronson and Ashley Merryman at 21 July 2010 07:23

Robert O'Callahan

Coding Style As A Failure Of Language Design

Variance in coding style is a huge problem. Reading code where the style varies all over the place is painful. Moving code from one place to another and having to restyle it is awful. Constantly adjusting the style in which you're writing code to conform to the local style of the project, module, file, function or line you're modifying is miring.

Therefore projects adopt style rules to encourage and enforce a uniform style for the project's code. However, these rules still have to be learned, and adherence to them checked and corrected, usually by humans. This takes a lot of time and effort, and imperfect enforcement means code style consistency gradually decays over time. And even if it were not so, code moving between projects looks out of place because style rules are rarely identical between projects --- unless you reformat it all, in which case you damage the relationship with the original code.

I see this as a failure of language design. Languages already make rules about syntax that are somewhat arbitrary. Projects imposing additional syntax restrictions indicate that the language did not constrain the syntax enough; if the language syntax was sufficiently constrained, projects would not feel the need to do it. Syntax would be uniform within and across projects, and developers would not need to learn multiple variants of the same language. More syntactic restrictions would be checked and enforced by the compiler, reducing the need for human (or even tool-assisted) review. IDE assistance could be more precise.

Two major counter-arguments arise. People will argue that coding style is a personal preference and therefore diversity should be allowed. This is true if you only participate in particularly small projects, but if you work in a large project then --- unless you are exceptionally fortunate --- you will have to deal with a coding style that is not your preference, no matter what. (Maciej Stachowiak once said that willingness to subjugate one's personal preferences to a project's preferences is a useful barometer of character, and I agree!)

A more interesting counter-argument is that many coding style rules aren't sufficiently formalized so as to be machine-checkable, and might even be very difficult to formalize at all. This is true; for example, line-breaking rules or variable naming rules might be very difficult to formalize. So I relax my thesis to claim that at least those rules which can be formalized should be baked into the language.

(Figuring out exactly which rules can be formalized, and exploring alternative syntax designs that maximize automatic style checkability while still being nice syntax, sound like fun research! Programming language syntax is one of those areas that I think has been greatly under-researched, especially from the HCI point of view.)

21 July 2010 04:41

20 July 2010

Jonathan Lange

pyflakes-doctest

Someone at Canonical (I don't know who) wrote something cool once to get Pyflakes (the best Python linter) to run on doctests.

It has recently been deleted from the Launchpad tree, but since it's so useful I thought I'd make it available.

Download pyflakes-doctest whenever you'd like. If you can get it into Pyflakes trunk, then you'll become even more wonderfully, deliciously fabulous and creamy than you undoubtedly are already. Get rid of the Launchpad-specific stuff though.

by jml (noreply@blogger.com) at 20 July 2010 14:08

Simon Horman

Flying

[This is not my bicycle]

Due to tyre troubles with my other two bikes I was "forced" to ride my Cannondale road bike to work this morning. The first time I've ridden it since well before Hikari was born last November. Wow, that bike is light and voom it flies. (And I put the brakes back together correctly after shipping it from Sydney!)

In semi-related news, its really warm in Tokyo at the moment.

20 July 2010 00:55

19 July 2010

Robert O'Callahan

Perks

Working on plugin bugs sucks, but sometimes it's fun to watch a video clip over and over again.

19 July 2010 21:14

Grant Pannell

Every Single (Awesome) Game I’ve Played

Today, I spent a couple of hours thinking back to how awesome the good ol’ days of DOS games were and that now…I hardly play games. Mainly because I find them all pretty damn boring. I thought it’d be awesome to make a 1995 super-computer, say a couple of Pentium Pros and a kick-ass 3dfx Voodoo card (or two), just to play some retro games. Alas, finding rare parts, even on eBay, is rather difficult and it’d probably be a pretty expensive ordeal. Guess I’ll just have to stick with DOSbox and VMware.

On another note, I present you with the list of awesome game I’ve played. You’ll notice how it begins with a shit-ton of DOS games, ventures briefly into Windows, then heads to the PSX, then to WoW, and finally, the world of casual gaming.

The DOS Era (1991 – 1997)
Ancients
Battle Chess 4000
Bio Menace
Blake Stone
Blood
Blues Brothers – Jukebox Adventure
Bouncing Babies
Captain Comic
Carmageddon
Catacombs 3-D
CD-Man
Command & Conquer: Red Alert
Commander Keen 1, 2, 3, 4, 5, Dreams, 6
Companions of Xanth
Cosmo’s Cosmic Adventure
Crysal Caves
Dangerous Dave
Descent, 2
Doom 1, 2
Duke Nukem 1, 2, 3D (Atomic)
Dune
Earthworm Jim
ElectroMan
Epic Pinball
Fantastic Dizzy
Flashback
Freddy Pharkas – Frontier Pharmacist
Fuzzy’s World of Miniature Space Golf
Gertrude’s Secrets
Goldfields
Gorillas (QBASIC)
Grand Theft Auto 1, 2
Heretic, Shadow of the Serpent Riders
Hexen: Beyond Heretic, Deathkings of the Dark Citadel
Hocus Pocus
Hugo’s House of Horrors, Whodunit, Jungle of Doom
IndyCar Racing
Jazz Jackrabbit, 2
Jetpack
Ken’s Labyrinth
King’s Quest 1, 2, 3, 4, 5, 6, 7
Lamborghini: American Challenge
Lemmings
Links: The Challenge of Golf
Lotus III: The Ultimate Challenge
Mario Is Missing
Monster Bash
Need for Speed
Nibbles (QBASIC)
Oddworld: Abe’s Oddysee
One Must Fall: 2097
Prince of Persia
Quake
Raptor
Reader Rabbit
Rise of the Triad
Sango Fighter
Shadow Warrior
Sherlock Holmes: Consulting Detective
Sim City 2000
Sim City Classic
Sim Farm
Stunts
SWIV 3D
Terminal Velocity
The Incredible Machine
Theme Park
Tomb Raider
Turok
Wacky Wheels
Warcraft 1, 2
Wipeout
Wolfenstein 3D (Spear of Destiny)
WordMAX
Worms
Zool
The Windows Era (~1995 – 2004)
3D Movie Maker
3D Pinball for Windows
Age of Empires 1, 2, 3
Ballistics
Battlefield 1942
Catz
Chip’s Challenge
Counter Strike
Crazy Taxi
Daytona USA
Deer Hunter
Destruction Derby
DogDay
Doom 3
Doom 3, Resurrection of Evil
Dope Wars
Elasto Mania
Enter The Matrix
FIFA 97
Flight Simulator 2004
Fury3
Grim Fandango
Half Life
Halo
Heretic II
HeXen II, Portal of Praevus
Hitman: Codename 47, 2: Silent Assassin, Contracts, Blood Money
Hong Kong Mahjong
Hover!
I.G.I.
Jurassic Park: Chaos Island
Kid Pix
Kingpin: Life of Crime
Math Blaster
Math Circus
Max Payne, Max Payne II
MechWarrior 2
Metal Gear Solid 2
Micro Machines V3
Microsoft Golf
MindMaze (that game in Microsoft Encarta!)
Monster Truck Madness
Motocross Madness 1, 2
Myst, Riven, III, IV, V, realMYST
Need for Speed 2
Need for Speed: Underground, Underground 2
Postal, 2
Putt-Putt
Pyst
Quake II, The Reckoning, Ground Zero
Quake III Arena, Team Arena, Quake Live,
Rainbow Six: Rouge Spear
Rally Championship
Red Faction
Redneck Rampage
Sega Rally
Sim Park
SimTower
SkiFree
Soldier of Fortune
Sonic CD
Starcraft, Brood War
SWAT
The Land of Um
The Sims
Theme Hospital
Titanic: Adventure Out Of Time
ToCA Race Driver 2
Typing of the Dead
Unreal, Unreal Tournament, Unreal Tournament 2003, Unreal 2, Unreal Tournament 2004,
Virtua Cop
V-Rally
Where In The World Is Carmen Sandiego?
Yoot Tower
The PSX Era (1999 – 2002)
Ace Combat 1, 2
Colin McRae Rally 1, 2.0
Crash Bandicoot, 2:Cortex Strikes Back, 3:Warped
Croc 1, 2
Die Hard
Dino Crisis
Driver
Gex
Gran Turismo 1, 2
Metal Gear Solid: Integral
Point Blank
R4: Ridge Racer Type 4
Silent Hill
Siphon Filter
Spyro the Dragon
Tenchu
Time Crisis
Wargames: Defcon 1
WoW Era (2005 – 2009)
World of Warcraft, Burning Crusade, Wrath of the Lich King
Post-WoW Era (2008 – 2010)
Colin McRae: DiRT 1, DiRT 2
Counter-Strike: Source
Crysis
Knytt, Stories
Left 4 Dead 1, Left 4 Dead 2
Portal
Team Fortress 2
Unreal Tournament 3
Within A Deep Forest
iPhone Era (2009 – 2010)
Angry Birds
BubblePRO
Doodle Jump
Flight Control
Need for Speed Undercover
Paper Toss
Peggle
Plants vs. Zombies
Rock Band
Spikey’s Bounce Around
Super Monkey Ball 1, 2
Tap Tap Revenge
Other
Donkey Kong Country (SNES)
GoldenEye (N64)
Granny’s Garden (C64)
Guitar Hero (Xbox 360)
Pokemon Red, Blue, Green, Yellow (GB)
Sonic 1, 2, 3, & Knuckles (Mega Drive)
Super Mario World (SNES)
Wayne Gretzky’s 3D Hockey (N64)
Wii Sports (Wii)

I am sure to update this list as I can think of any DOS games that come to mind. I currently have one game racking my brain that I played a ton and just can’t remember the name, sigh.

by DigitalDJ at 19 July 2010 17:12

Robert O'Callahan

Summit

I'd better say something about the Mozilla summit at Whistler before it recedes into the past...

It was fabulous, of course. The setting, the food, the people, the talks, the work, the demos, the mission, all really good.

Whistler was lovely. It had been cold up to the week we arrived so while it was 30C in the village at times later in the week, 20 minutes in a chairlift brought you up into the snow. And on top of Whistler Mountain the snow banks were six metres deep in places.

I wisely arrived a couple of days early and on the Monday I spent almost the entire day hiking alone up to Singing Pass. Unfortunately I didn't reach Singing Pass --- around the snow line the track was completely blocked by fallen trees (see below). I climbed over a couple of dozen of them but with no end in sight, decided that was a losing proposition and turned back. Nevertheless it was a wonderful time and some solitude was excellent fortification for the subsequent social overload.

I'm not really a party person and working large groups of people is a learned skill for me. It's helpful when I have goals to accomplish and I know a lot of the people. In some ways it wasn't all that different from networking at an academic conference, except we're all on the same side.

The main downside of the summit was that I was completely exhausted during most of it because I was simply too excited to sleep. Talking to people, going to sessions, playing games, and hacking code are irresistible.

Next time we should plan some "work week" days immediately after the summit. This would give us more time to talk in depth --- there were so many people at the summit I wanted to talk to, I couldn't give lots of time to more than a few. It would give us more time to code. We should have done it this time but I wasn't on the ball.

As usual I met many contributors for the first time. That's one of the best things about the summits. A few I really wanted to meet didn't make it --- you know who you are!

I managed to get together with some Mozilla Christians for some prayer time. That was very encouraging.

I saw bears. Woohoo!

trees fallen across the path up to Singing Pass
This is the track near the head of the valley leading up to Singing Pass. I'm looking back along the track at the trees I've already clambered over! Definitely more trees than track at this point. People told me it was probably the leftovers of an avalanche.
view over Whistler valley
View over Whistler valley from the top of Whistler Peak.

19 July 2010 13:07

18 July 2010

Dave Hall

Western Digital to fix Licensing?

Over the last few months months I've been corresponding with Dennis Ulrich of Western Digital (WDC) about my concerns with the EULA for the My Book World Edition (MBWE) and their obligations under the GPL. To say it has been a drawn out process is an understatement.

It has taken some time to get WDC to understand the situation. There has been confusing messages about what the situation is with the EULA, the GPL and what license covers what pieces of code. The bottom line is that currently users must check the header of each file to ascertain which license applies to it, even though the downloads are marked as GPL.

Although WDC is moving slowly, they do seem to be commited to making the situation clearer in the next iteration of their MBWE product line. Based on a recent phone call with Dennis, the legal and engineering teams are working together to ensure various licenses complied with and their software engineers are aware of their obligations.

The next version of the MBWE is likely to ship with a revised EULA and properly inform the users of their rights under the GPL. This text is still being developed. At the same time it is still unclear if WDC will backport their changes to their existing NAS products. As it is a simple string change it shouldn't be too hard for them to dedicate a few resources to audit the code and update the strings.

It is unfortunate that WDC appears to have little interest in developing their MBWE product range as a hacker friendly FOSS product. It appears the licensing fix that will be implemented by WDC will more clearly delinate the FOSS and non free components of the MBWE firmware. Clarity is always an important legal consideration, but doesn't help foster a community. WDC seem to have little interest in fostering a hacker community around their products. This is an unfortunate decision by the company.

Many manufacturers of embedded devices only start releasing source for their firmware after being caught out for violating the GPL. WDC is to be commended for complying with the requirements of the GPL from the start. Altough there is no legal requirement for them to make the web gui code and other non free components available, WDC already does. It would be disappointing if they chose to take a backward step and stopped distributing parts of the firmware.

It is possible, and perfectly legal, for WDC to stop distributing the source for the proprietary components. At the same time it would not take much effort for them to release the whole platform as GPL or another FOSS friendly license. WDC is already required to do a code drop every time they release a new version of their hardware or firmware. I suspect it would be faster and easier to push all code to a public git repository than pick through and dump selected components as tarballs on a website.

WDC already have their support team dealing with customer bug reports. Maintaining a mailing list, a bug tracker, a wiki and maybe a public source code repository on somewhere like gitorious is likely to take less than 1 full time employee. The benefit for WDC would be great.

Not only is the hacker community likely to contribute bugs fixes and propose or even develop new features, they can help increase sales. I'm sure the good will generated by the switch to truly open approach to the MBWE product line would outweigh the cost of the additional resources required.

Let's hope Western Digital's fix is a FOSS friendly one. I will post more news as things progress.

by Dave at 18 July 2010 13:50

Selena Deckelmann

PDXPUG Day 2010: 9.0 and all sorts of good stuff

I’m nearly ready for PDXPUG Day 2010.

We’ve got some fun talks lined up from leaders in the Postgres community in town for OSCON. It’s free to attend. We’ll at the Oregon Convention Center, room D131.

Stop by sometime during the day if you’re in town!

Here’s our schedule:

10am: What’s new in 9.0 – Selena Deckelmann
11am: ORMs and Their Discontents – Christophe Pettus
1:30pm: Mining Your Logs For Fun and Profit – Josh Berkus
2:30pm: PORTAL – Dan Colish
3:30pm: An Introduction to Managing and Troubleshooting PostgreSQL on Windows – Tim Bruce
4:30pm: PostgreSQL in Brazilian Army and Air Force – Luis Dosso

6pm-10pm: Party at the Gotham Tavern!

Related posts:

  1. A year of PDXPUG
  2. Lightning talks from PgCon 2010
  3. PDXPUG Day on July 20 – Register now!

by selena at 18 July 2010 07:49

16 July 2010

David Woodhouse

16 Jul 2010

I've just been working on Evolution's reply code, and have added a couple more of those annoying "nag pop-ups", including this one which I expect a lot of people will appreciate when they don't get the resulting mail:
Evolution nag pop-up for replying to too many recipients

It's currently set to trigger if you hit 'Reply to All' on a message with more than 15 recipients; unless it's a mailing list message. And of course you can see that it's trivial to turn it off if you never want to see it again.

I've also taken a moment to write down and post some thoughts on the 'Reply to All' vs. 'Reply to List' debate for mailing list messages.

16 July 2010 14:29

Robert O'Callahan

Retained Layers

Retained Layers has landed and seems to have stuck.

In a previous post I talked about our layers framework. Up until now we've constructed a new layer tree on every paint. With retained layers, we update our layer tree incrementally as content changes in the window. More importantly, we are able to cache the contents of layers. So for example if you have an element with partial opacity, we can cache the rendering of that element in a layer and every time you paint (perhaps with a different opacity each time), we can paint the cached contents without rerendering the element. This provides noticeable speedups for some kinds of fade effects. When we use layers to render CSS transforms, we'll get speedups there too.

One side effect is that we were able to totally reimplement scrolling. Our current scrolling code relies on shifting pixels around in the window for speed, and that often doesn't work well, for example on pages where scrolling content overlays stationary content or vice versa. It's also prone to visible tearing on some platforms because we can't scroll and repaint in a single atomic paint operation. But now, our retained layer tree effectively contains the entire window contents pre-rendered. We can scroll by just adjusting the offsets of some layers and recompositing the layer tree. (Well, almost ... it's slightly more complicated.) This is a relatively simple approach. It eliminates tearing. It lets us aggressively accelerate the scrolling of nasty scrolling pages with complex contents, because we're able to separate the moving content into different layers from the non-moving content and scrolling becomes a matter of simply repainting the scrolled-into-view strip of the moving content and then blending layers together. We're seeing significant improvements in scrolling many kinds of pages. Soon I hope to blog again with more about how this works, what it can do and what the current limitations are.

Immediate improvements are nice, but the most important benefit of retained layers is that it lays down infrastructure we will be exploiting in all kinds of ways. Our D3D and GL layer implementations benefit from reducing browser rendering and caching more rendered content in layer buffers, since compositing buffers is very cheap with GPUs. With those backends, because scrolling is fully layer-based, it will be accelerated by the GPU! Chris Jones is working on enabling layer composition to be in a dedicated process, at which point we'll be able to scroll without synchronizing with the Web content process --- in particular we'll be able to maintain a constant frame rate of smooth scrolling no matter what the Web content is doing, i.e. super-smooth. This will especially benefit Fennec. Fennec will also benefit because its current tile-caching implementation can be replaced with something layer-based; our layer-based scrolling permits the layer manager to cache prerendered content that's not (yet) visible.

Before we ship the next Firefox release there are a few regressions to work on and some performance and quality knobs to tweak. But I'm feeling quite relieved, since this was one of the long poles for that release and the one I've been most on the hook for.

16 July 2010 04:02

15 July 2010

Stewart Smith

linux.conf.au 2011 CFP Open!

Head on over to http://lca2011.linux.org.au/ and check it out!

You’ve got until August 7th to put in a paper, miniconf, poster or tutorial.

Things I’d like to see come from my kinda world:

  • topics on running large numbers of machines
  • latest in large scale web infrastructure
  • latest going on in the IO space: (SSD, filesystems, SSD as L2 cache)
  • Applications of above technologies and what it means for application performance
  • Scalable and massive tcp daemons (i.e. Eric should come talk on scalestack)
  • exploration of pain points in current technologies and discussion on ways to fix them (from people really in the know)
  • A Hydra tutorial: starting with stock Ubuntu lucid, and exiting the tutorial with some analysis running on my project.
  • Something that completely takes me off guard and is awesome.

I’d love to see people from the MySQL, Drizzle and Rackspace worlds have a decent presence. For those who’ve never heard of/been to an LCA before: we reject at least another whole conference worth of papers. It’s the conference on the calendar that everything else moves around.

by Stewart Smith at 15 July 2010 00:59

14 July 2010

Paul Wayper

Proposals submitted...

The Linux Conference Australia call for papers is now out, and I've submitted two papers - one for a talk and one for a tutorial. Now the waiting begins...

In 2009 I got accepted to give a talk on writing good user documentation. I'd submitted several papers before then but never got accepted; the chief reason was that I had submitted papers about stuff I was interesed in but was not actually a key contributor to. LCA is crazy hard to get to speak at, but is totally worth it because they really treat speakers well. And to me it's addictive - I loved it so much in 2009 I wanted to do awesome things just to get a place in 2010.

That didn't work out for me; mainly because I'm a neophile. I tend to be interested in a whole bunch of things but only shallowly - occasionally (such as when I decided to write the doco for LMMS) I dip in but I rarely seem to be able to sustain that involvement before the next thing comes along and lures me away. But I'm more hopeful I can get a speakership at 2011 because I'm putting forward two proposals for things that I'm actually really involved in and know about.

Ah well. Now for three months of anticipation. Better keep on working on my electric motorbike then...

14 July 2010 23:45

Dave Lane

Cat Stacking

Cat stacking
The heroic practice of coordination or organising ("wrangling") obstreperous or otherwise uncooperative agents into a consistent, coherent pattern or unit e.g. wrestling those time sheets into a semblance of order was an exercise in cat stacking if ever there was one.

Just wanted to make sure that I claimed this term on behalf of myself and my colleagues who (we believe) coined it at Egressive where the term is in common use.

by dave at 14 July 2010 20:35

Paul McKenney

Stupid RCU Tricks: Holding Off RCU Read-Side Critical Sections

RCU callbacks are registered via call_rcu(). After an RCU grace period elapses, the callback (which is a C-language function) is invoked. RCU's fundamental guarantee states that once an RCU grace period has elapsed, all RCU read-side critical sections that were executing when the grace period began will have completed. (An RCU read-side critical section is a fragment of code enclosed by rcu_read_lock() and rcu_read_unlock().)

Now, an RCU callback, being a C-language function, has a definite beginning and end. But what about synchronize_rcu(), which blocks until an RCU read-side critical section has elapsed? How does RCU know how long to hold off new RCU read-side critical sections once synchronize_rcu() returns?

14 July 2010 05:34

13 July 2010

Silvia Pfeiffer

“HTML5 Audio And Video Accessibility, Internationalisation And Usability” talk at Mozilla Summit

For 2 months now, I have been quietly working along on a new Mozilla contract that I received to continue working on HTML5 media accessibility. Thanks Mozilla!

Lots has been happening – the W3C HTML5 accessibility task force published a requirements document, the Media Text Associations proposal made it into the HTML5 draft as a <track> element, and there are discussions about the advantages and disadvantages of the new WebSRT caption format that Ian Hickson created in the WHATWG HTML5 draft.

In attending the Mozilla Summit last week, I had a chance to present the current state of development of HTML5 media accessibility and some of the ongoing work. I focused on the following four current activities on the technical side of things, which are key to satisfying many of the collected media accessibility requirements:

  1. Multitrack Video Support
  2. External Text Tracks Markup in HTML5
  3. External Text Track File Format
  4. Direct Access to Media Fragments

The first three now already have first drafts in the HTML5 specification, though the details still need to be improved and an external text track file format agreed on. The last has had a major push ahead with the Media Fragments WG publishing a Last Call Working Draft. So, on the specification side of things, major progress has been made. On the implementation – even on the example implementation – side of things, we still fall down badly. This is where my focus will lie in the next few months.

Follow this link to read through my slides from the Mozilla 2010 summit.

by silvia at 13 July 2010 19:35

David Woodhouse

13 Jul 2010

Yay Brazil!. They're making it illegal to use DRM to prevent "fair dealing" with copyrighted works, or access to works which are in the public domain. It's also legal to "crack" DRM if you're only doing it for the purpose of "fair dealing".

So, for example, it would be legal for me to crack the DRM on the eBooks I buy, which is necessary just so that I can read them. Currently I have to break the law just to be able to buy and use eBooks.

UK citizens, go here and add your vote; it's very simple to register if you haven't already done so.

13 July 2010 09:29

Selena Deckelmann

Foocamp 2010: lovely, expectant, reflective

This has been sitting in my edit queue for too long… here goes.

So, I was invited to Foocamp this year. Back in February, I attended KiwiFoo at the invitation of Nat Torkington. I realize now (sorry, Nat!) that I never blogged about going there. I have some rough notes around that I may try to edit down.

I’ll avoid any direct comparisons for a moment, and just talk about what it was like to dive into a slice of Silicon Valley, dislocated into the countryside for a weekend.

When I arrived, I felt immediately at home, welcomed and appreciated. Sara Winge was so helpful and easy-going about the Tesla Coil Josh brought. (Thanks for the ride, Josh!) I spent a lot of evening time educating people about avoiding touching the sparks (it may be a pretty toy, but it is in fact a dangerous one!) and also playing around with a metal glove that was rigged up so you could get a bit closer in to the coil.

I spent a couple delightful hours considering claude glass with Roberta Cairney. Over and over, I absorbed the positive energy tumbling out of Sumana. Once again, I spoke with Kiwis whose humor and affectionate swearing reminded me of home.

I held one session – about forgetting and the ethics of shifting our culture to assume everything may be on your permanent record, and the ways in which people try to opt out or game the system. I was surprised and overwhelmed by the people who attended. Rita King, Scott Berkun, Biella Coleman and danah boyd were all part of the discussion and I was able to talk about ideas I’ve had tumbling around in my head for years. I believe sysadmins/devops must have conversations about the ethics of the default choices made by developers around configuration and long-term management of log data. People asked provocative questions, and we had a real debate about the ethics. It was a wonderful experience and I came up with at least one good idea that I hope Jesse Robbins and I are going to act on together.

I also ran into several people who are just starting to work on user group and community issues in their geographic areas. Seattle came up over and over – and I’m looking forward to helping Ben Huh and the open gov folks who want to do grassroots organizing in their tech communities. I also met some amazing women there, and hope that we’re able to continue our discussions about business and tech in the future.

I camped, and was in a tent under the stars, and early morning fog. I enjoyed running into a fellow PostgreSQL community member, Paul Ramsey, among the early risers.

Apart from the immediate things to collaborate on, and an incredibly long list of new ideas and connection points, I came away inspired and mentally refreshed. I relished the relative lack of device obsession. The people that I wanted to have conversations with tended to have put their devices away for a few hours, and were focusing on the people in front of them.

The Ignite talks were my favorite talks. Jake Applebaum’s meditation on wikileaks was particularly inspiring, reminding me to seek out opportunities to change the world for the better.

Related posts:

  1. meme: Current state of me
  2. My Other Things
  3. xppdx – dipping a toe in the water

by selena at 13 July 2010 08:00

Q&A about Hot Standby

Updated!: See below.

Here are some questions that came up from trying to use the current PostgreSQL hot standby documentation:

Q: If you set hot_standby = off after having it on, what happens?

A: This change requires a database restart on the hot standby (or replica) server. The database goes into “warm standby” mode, and you can no longer issue queries against it. You can change this right back by setting the parameter to ‘on’ and restarting again.

Q: Can you use hot standby with only a single schema or database?

A: No. Hot Standby is all-or-nothing for a particular PostgreSQL database cluster. A cluster is made up of all the databases that live in a particular $PGDATA instance, and Hot Standby is currently not capable of distinguishing between changes occurring on different particular databases or schemas.

Q: Is the process for setting up hot standby any different for empty databases vs. populated databases?

A: No. The setup process is the same – you must create a base backup.

Q: How do I bring my hot standby out of standby mode?

A: If you’re using something like the following in your recovery.conf file:

restore_command = 'cp xxxx'
standby_mode = 'on'

Change: standby_mode = 'off' and restart your hot standby postgresql instance.

Q: Where did my recovery.conf file go? (after your database came out of warm/hot standby)

A: PostgreSQL automatically changes the name of the file to recovery.done when recovery completes. This helps prevent accidents.

Q: What happens if my archive_timeout = 60 (which creates a 16mb file every minute) and I flood the database with so much activity that my standby falls behind?

A: This is possible, and you may be interested in trying Streaming Replication. However, for the majority of users, a delay in restoring data is acceptable (and possibly desirable). Eventually the standby server will catch up. You can monitor how delayed the server is using functions like txid_current_snapshot().

Q: Are schema changes (like CREATE TABLE or ALTER TABLE) replicated to the standby?

A: Yes! All changes to the database cluster are copied to the standby. This includes any DDL operations, new rows, the effects of autovacuum — any change to the data store on the master is copied to the standby.

Related posts:

  1. Quick start on Hot Standby
  2. Simon Riggs just rocked my world.
  3. Setting up a PDXAPI instance

by selena at 13 July 2010 04:17

Quick start on Hot Standby

Updated.

We could have some better end-user documentation around creating a warm or hot standby system for basic postgresql replication.

To this end, I created a Quick Start doc on the wiki, but it could use more help. Maybe we should create some setup recipes for common situations?

Also – I wrote the following script during a hot standby bugbash PDXPUG had today:


#!/bin/sh

BINPATH=/usr/local/pg90/bin
CP=/bin/cp
PGCTL=${BINPATH}/pg_ctl
PSQL=${BINPATH}/psql
INITDB=${BINPATH}/initdb

sudo mkdir -p /var/tmp/archive
sudo chown ${USER} /var/tmp/archive

${INITDB} hotstandby1

echo 'wal_level = hot_standby' >> hotstandby1/postgresql.conf
echo 'archive_mode = on' >> hotstandby1/postgresql.conf
echo "archive_command = 'cp %p /var/tmp/archive/%f'" >> hotstandby1/postgresql.conf
echo "archive_timeout = 60" >> hotstandby1/postgresql.conf
echo "port = 6543" >> hotstandby1/postgresql.conf

${PGCTL} -D hotstandby1 start -l hotstandby1.log
sleep 5

${PSQL} -p 6543 postgres -c "select pg_start_backup('backup')"
${CP} -pR hotstandby1/ hotstandby2
${PSQL} -p 6543 postgres -c "select pg_stop_backup()"
rm hotstandby2/postmaster.pid
rm hotstandby2/pg_xlog/*

echo 'hot_standby = on' >> hotstandby2/postgresql.conf
echo 'port = 6544' >> hotstandby2/postgresql.conf
echo "standby_mode = 'on'" >> hotstandby2/recovery.conf
echo "restore_command = 'cp -i /var/tmp/archive/%f %p'" >> hotstandby2/recovery.conf

${PGCTL} -D hotstandby2 start -l hotstandby2.log

* Added port specification in case you’ve already got postgres running. Added a BINPATH for custom install directories.

Related posts:

  1. Q&A about Hot Standby
  2. Simon Riggs just rocked my world.
  3. Greg’s THREE talks at PostgreSQL Conference East

by selena at 13 July 2010 03:48

Simon Horman

kexec-tools 2.0.2-rc2 Released

[Sumo]

I have released version 2.0.2-rc2 of kexec-tools. the user-space portion of kexec a soft-reboot and crash-dump facility of Linux and Xen. The only change since 2.0.2-rc1 is to include a number of files that were missing from the tarball which caused build failures on x86_64, ppc, ppc64 and arm.

The code is available as a tarball here and in git here. More information is available in the announcement email.

13 July 2010 03:01

Lana Brindley

Keeping It Stupidly Simple

Everyone has heard the old adage about the "KISS Principle: Keep It Simple, Stupid". Easy to say, easy to remember, but often hard to do. At least, hard to do well. When we simplify our language, it often comes across as patronising, dumbed-down, or just plain rude. So how should Stupid keep it simple, without making it stupidly simple? Consider the sentence: "Insert the writable media into the

by noreply@blogger.com (Loquacity) at 13 July 2010 00:51

Linux Australia

LUV August Meeting

3 Aug 2010 19:00
3 Aug 2010 21:00
3 Aug 2010 19:00
3 Aug 2010 21:00

For more information, see http://luv.asn.au/2010/08/03

by cafuego at 13 July 2010 00:12

12 July 2010

Linux Australia

Open Source Developers Conference

24 Nov 2010
26 Nov 2010
24 Nov 2010
26 Nov 2010

OSDC will be in Geelong this year. More details coming soon.

by cafuego at 12 July 2010 23:59

Lev Lafayette

Installation of MVAPICH2 for Different Compilers

MVAPICH and MVAPICH2 is an implementation of MPI for computing systems and servers using InfiniBand, 10GigE/iWARP and RoCE & etc networking technologies.

Installation consists of downloading the tarball into an appropriate directory, extracting it, loading the enviroment variable modules, using of some previously established configuration files, runnig make and make install, and establishing the symbolic links. Note that MVAPICH and MVAPICH2 are entirely different products.


cd /usr/local/src/MVAPICH2

read more

by lev_lafayette at 12 July 2010 23:49

Emmanuele Bassi

GTK+ Meeting @ GUADEC 2010

GUADEC is one of the rare occasions for the people hacking on gtk to meet face to face and use a high bandwidth channel to discuss development of everyone’s favorite toolkit.

I’ve reserved a room under the BOF schedule page; currently, it’s on July 27th, between 16:00 and 18:00 (to avoid conflicting with talks).

we need to gather the attendance list, to verify if we should actually have the meeting or if informal discussions are more suited. please, fill out the attendance list and we’ll see you at GUADEC!

I'm attending GUADEC

by ebassi at 12 July 2010 17:21

Giuseppe Maxia

OpenSQLCamp EU 2010 - Vote your favorite sessions

The deadline for the OpenSQLCamp CfP is over. Now it's time to submit your votes.
As we did last year, the procedure is public and transparent. After seeing the list of submitted sessions, you can then vote via mailing list, or via Twitter.
But, please, hurry! We need to finalize the schedule at the end of this week.
Thanks!

by datacharmer (noreply@blogger.com) at 12 July 2010 15:47

Stewart Smith

Dynamic Range Theory

A great video podcast is Meet the GIMP. It’s quite accessible and has some useful information. The recent(ish) episode on Dynamic Range Theory is useful if you’re wondering why images look different through your eyes, on an LCD and on paper (and what the hell the difference between RAW and JPEG is).

by Stewart Smith at 12 July 2010 14:11

Julien Goodwin

Lenovo T410 first impressions

Well, first few days of impressions.

For anyone who's seen the previous generations of 14.1" ThinkPads I can sum this up by saying "just like the old ones only faster". Especially weight wise, without a scale that reads down the tens of grams there's simply no difference in weight from my old T61.

By far the most noticeable thing about the T410 is just how fast everything is. I have the Core i7 620M and anything previously CPU bound is incredibly fast. I also have the 8GB of ram, but that's not much of an upgrade over my old T61 which had 6GB as it simply wasn't stable with 8.

The 1440x900 LED lit screen is a nice improvement, although as always I wish I could run the screen darker at night. As for the new Intel graphics, there appears to be no improvements, but that could simply be the slow pace of feature support in the X drivers. Given the number of video outputs (internal LCD, DisplayPort and VGA on the laptop itself, four digital plus VGA on the dock) it's a real shame that it only has two CRTC's (essentially screen outputs), the ability to drive my entire quad-monitor setup on my work desk from my laptop would have been awesome. Each of the outputs (plus a non-existent internal HDMI port) is listed in xrandr for a total of eight outputs.

The battery life appears to be excellent, with the 9-cell claiming 6 hours even when I leave my Win7 VMware running. That should mean that with the "slice" battery (a clip on battery with a further 9 cells) I should hit well over 10 hours, more then enough for a conference day. Even the regular 6-cell battery should cover most of my needs, and would be a nice weight saving.

The old ultrabay battery is gone, as the ultrabay is now just a standard laptop DVD sata interface. Although this means losing some features there's certainly something to be said for standard interfaces. What's also headed to the common, this case for the worse, is the environmental monitoring. Older thinkpads had up to a dozen temperature sensors which were great if, like me, you like your systems silent, and the ability to turn on the fan at the last second helps. Now there's only one sensor exposed by ACPI making things a little more coarse.

Although I bought mine with the inbuilt Qualcomm Gobi 2000 3G, and installed my existing 3G SIM before ever booting Linux it seems as though I'll have to wait until 2.6.35 (and the associated VMware update) before I can use it as Debian isn't going to release a version with [info]mjg59's patches. Hopefully 2.6.35 drops soon so I turn my laptop into a portable Stratum 1 NTP server.

As with my T61 I have the dock at work to save connecting (seriously) ten cables every day. Like my old T61 the T410 does two external monitors, but with the new dock they can be two Digital ports, with two DVI and two DisplayPort on the dock, plus a VGA. The one feature of the old dock that's now gone is a SPDIF port, which I used to plug into a high quality external DAC that then drove my Stax Earspeakers (Lambda 404's that were, until today, driven by an SRM-323II, but now has a tube output SRM-T1). However in theory the DisplayPort outputs have audio, but to use it I need chain that goes DP->MiniDP, MiniDP->HDMI w/audio, HDMI digital audio splitter, HDMI->DVI (as I still need to drive the monitor).

All this sounds wonderful, but there three big downsides. First the touchpad is near useless in Windows as it can't be sped up enough, oddly in Linux it came up just as I had on my T61, it also has bumps all over the surface that just annoy me, although even in these first few days they've worn down a lot. Second the bottom edge is now at an angle, a decent idea, except everywhere the ports pop out there's a square bit, making it seem a little odd. Lastly there's a hard mould line just on the front of the palm rest that does a good job irritating the skin of my wrists, although that should hopefully wear down quickly.

All up, for the $2200 that this machine cost after discounts (an end of financial year plus a referral code gave 55% off) it's an excellent machine that I'm happy I bought.

12 July 2010 13:07

Lev Lafayette

PDT/TAU Installation on a 64-bit AMD Opteron Cluster running CentOS 5 Linux

Tuning and Analysis Utilities (TAU) is a program and performance analysis tool for high-performance parallel and distributed computing with a suite of tools for static and dynamic analysis of programs written in C, C++, FORTRAN 77/90, Python, High Performance FORTRAN, and Java.

You'll also need the Program Database Toolkit (PDT), also available from the same location. Let's install that first. You'll need to set your environment variables. You use modules, right?


module load gcc/4.4.4
modulel load openmpi-gcc/1.3.4

read more

by lev_lafayette at 12 July 2010 05:36

10 July 2010

Simon Horman

Perdition 1.19-rc2 Released

[David Miller]

I have released version 1.19-rc2 of Perdition. There is a single change since 1.19-rc1 to fix a crash-bug on invocation of perdition in managesieve mode. Merge madness on my part. Thanks to Filipe Carvalho for reporting it. The fix is here.

The code and related libraries are available as tarballs here. More information is available in the announcement email. More information about perdition here.

10 July 2010 01:13

09 July 2010

Silvia Pfeiffer

Media Fragment URI Specification in Last Call WD

After two years of effort, the W3C Media Fragment WG has now created a Last Call Working Draft document. This means that the working group is fairly confident that they have addressed all the required issues for media fragment URIs and their implementation on HTTP and is asking for outside experts and groups for input. This is the time for you to get active and proof-read the specification thoroughly and feed back all the concerns that you have and all the things you do not understand!

The media fragment (MF) URI specification specifies two types of MF URIs: those created with a URI fragment (“#”), e.g. video.ogv#t=10,20 and those with a URI query (“?”), e.g. video.ogv?t=10,20. There is a fundamental difference between the two that needs to be appreciated: with a URI fragment you can specify a subpart of a resource, e.g. a subpart of a video, while with a URI query you will refer to a different resource, i.e. a “new” video. This is an important difference to understand for media fragments, because only some things that we want to achieve with media fragments can be achieved with “#”, while others can only be achieved by transforming the resource into a different new bitstream.

This all sounds very abstract, so let me give you an example. Say you want to retrieve a video without its audio track. Say you’d rather not download the audio track data, since you want to save on bandwidth. So, you are only interested to get the video data. The URI that you may want to use is video.ogv#track=video. This means that you don’t want to change the video resource, but you only want to see the video. The user agent (UA) has two options to resolve such a URI: it can either map that request to byte ranges and just retrieve those – or it can download the full resource and ignore the data it has not been requested to display.

Since we do not want the extra bytes of the audio track to be retrieved, we would hope the UA can do the byte range requests. However, most Web video formats will interleave the different tracks of a media resource in time such that a video track will results in a gazillion of smaller byte ranges. This makes it impractical to retrieve just the video through a “#” media fragment. Thus, if we really want this functionality, we have to make the server more intelligent and allow creation of a new resource from the existing one which doesn’t contain the audio. Then, the server, upon receiving a request such as video.ogv#track=video can redirect that to video.ogv?track=video and actually serve a new resource that satisfies the needs.

This is in fact exactly what was implemented in a recently published Firefox Plugin written by Jakub Sendor – also described in his presentation “Media Fragment Firefox plugin”.

Media Fragment URIs are defined for four dimensions:

  • temporal fragments
  • spatial fragments
  • track fragments
  • named fragments

The temporal dimension, while not accompanied with another dimension, can be easily mapped to byte ranges, since all Web media formats interleave their tracks in time and thus create the simple relationship between time and bytes.

The spatial dimension is a very complicated beast. If you address a rectangular image region out of a video, you might want just the bytes related to that image region. That’s almost impossible since pixels are encoded both aggregated across the frame and across time. Also, actually removing the context, i.e. the image data outside the region of interest may not be what you want – you may only want to focus in on the region of interest. Thus, the proposal for what to do in the spatial dimension is to simply retrieve all the data and have the UA deal with the display of the focused region, e.g. putting a dark overlay over the regions outside the region of interest.

The track dimension is similarly complicated and here it was decided that a redirect to a URI query would be in order in the demo Firefox plugin. Since this requires an intelligent server – which is available through the Ninsuna demo server that was implemented by Davy Van Deursen, another member of the MF WG – the Firefox plugin makes use of that. If the UA doesn’t have such an intelligent server available, it may again be most useful to only blend out the non-requested data on the UA similar to the spatial dimension.

The named dimension is still a largely undefined beast. It is clear that addressing a named dimension cannot be done together with the other dimensions, since a named dimension can represent any of the other dimensions above, and even a combination of them. Thus, resolving a named dimension requires an understanding of either the UA or the server what the name maps to. If, for example, a track has a name in a media resource and that name is stored in the media header and the UA already has a copy of all the media headers, it can resolve the name to the track that is being requested and take adequate action.

But enough explaining – I have made a screencast of the Firefox plugin in action for all these dimensions, which explains things a lot more concisely than word will ever be able to – enjoy:

Click here to view the embedded video.

And do not forget to proofread the specification and send feedback to public-media-fragment@w3.org.

by silvia at 09 July 2010 15:44

Lev Lafayette

Installing R and Updating Packages (with sed and Perl fun)

R is a language and environment for statistical computing and graphics. To install R download the tarball to an appropriate place and extract e.g.,

read more

by lev_lafayette at 09 July 2010 00:20

08 July 2010

Linux Australia

President's Report July 2010

It has been about 6 months since the current Linux Australia Council was voted in, and about a month since I became President, following James Turnbull’s resignation. In that time, the Council has been working on implementing the platform that we ran on. We have successfully managed to hold a Council meeting every fortnight (with a very few exceptions), to allow us to get together to organise events and implement the goals of Linux Australia.

read more

by johnf at 08 July 2010 22:59

Grant Pannell

Making Vuze 64-bit (Windows)

Today I ventured into making Vuze (the popular BitTorrent client) x64 compatible.

At first, it seems like a pretty simple task, but it turns out it’s slightly more complicated than it seems.

Here’s how to do it yourself. If you’re lazy, there’s a link at the bottom of this post with all the compiled files.

Step 1: Get the 64-bit JRE

First, download and install the 64-bit Java Runtime Environment (or JDK, whatever you want). Here’s a link to the JRE (make sure to download the Windows x64 version): https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jre-6u21-oth-JPR@CDS-CDS_Developer

Step 2: Use the x64 Standard Widget Toolkit

Secondly, we must replace the main GUI toolkit that Vuze uses (SWT) with the x64 equivalent. Download the “SWT Binary and Source” for Windows (x86_64) from: http://www.eclipse.org/swt/ (make sure to click More). At the time of writing the stable version is at 3.5.2. Here’s a link to that version: http://download.eclipse.org/eclipse/downloads/drops/R-3.5.2-201002111343/download.php?dropFile=swt-3.5.2-win32-win32-x86_64.zip

Extract swt.jar from the zip file and place it in the Vuze folder (%PROGRAMFILES(X86)%\Vuze), replacing the file. Note that once you do this, you can’t go back to the x86 version unless you download the x86 SWT or reinstall Vuze. At this point, we can actually use Vuze in 64-bit with the command line using the 64-bit JRE: java -jar Azureus2.jar ….but we aren’t done yet.

Step 3: Make the iTunes plugin work

New versions of Vuze come with an iTunes plugin that uses native code that is x86 only. This particular plugin uses some COM calls using a bridge called JACOB. Open up your Vuze plugins folder (%PROGRAMFILES(X86)%\Vuze\plugins), open the azitunes folder and look for a file that looks like “jacob-x.xx.x-x86.dll”. We need to find the x64 version of that DLL, and match the version. So if x.xx.x is 1.14.3, we need JACOB 1.14.3. You can find all the JACOB versions at SourceForge: http://sourceforge.net/projects/jacob-project/files/ Open the folder with the relevant version and grab the zip file that DOES NOT end in “_src”. Open up the zip, and extract jacob-x.xx.x-x64.dll to %PROGRAMFILES(X86)%\Vuze\plugins\azitunes.

Step 4: Enabling Windows specific Vuze settings

Vuze also uses a small portion of native code to perform some Windows specific tasks. These will be invisible to you until you compile aereg.dll into 64-bit. You will need to checkout the source code from the Vuze SVN respository and compile it with Visual Studio, making sure you target x64 rather than x86. To make it compile you’ll need the 64-bit JDK and to add some include paths to the project, specifically: jdkx.x.x_xx\include and jdkx.x.x_xx\include\win32. Don’t worry about the warnings, if you have any, they’re normal. Here’s the Vuze repository for aereg.dll: http://svn.vuze.com/public/client/trunk/azureus2/lib/libWIN32Access/ After you compile it to x64, make sure to RENAME IT to aereg64.dll. This took me quite some time to figure out, I had to do some source code digging to figure out why Vuze refused to load the 64-bit library.

Step 5: Making Azureus.exe / AzureusUpdater.exe use the 64-bit JRE

This is difficult since Vuze use commercial software, exe4j, to create the EXE launcher for the JAR. I went ahead and well…made it work. I have included the exe4j project files if you wish to compile the EXEs using exe4j by yourself. The final binaries are included at the end of the post. Vuze do not provide these projects, so it took me a while to mimic the exact project options that Vuze use to compile their EXEs. Here’s the projects: http://digitaldj.net/vuze/Vuze_exe4j.zip

Step 6: Edit the manifest

This is a minor step, that doesn’t really need to be completed. Open up Azureus.exe.manifest and make sure to replace all references of “x86″ with “amd64″.

Step 7: Move Vuze to Program Files

If you want, you can go ahead and move the Vuze folder to Program Files, instead of Program Files (x86)….but it isn’t necessary. If you do this, you’ll have to update your shortcuts and make sure your file associations (.torrent) point to the new folder location.

Hooray! We’re done. Now double click Azureus.exe and bam, you’re now using the 64-bit JRE. You can check task manager to ensure you’re not using the 32-bit version (it’ll have a *32 next to the process name).

And for the lazy or non-technical. Here’s the files you need to make your Vuze 64-bit: http://digitaldj.net/vuze/Vuze_x64_1.20.zip Simply extract the files (and overwrite all) to C:\Program Files (x86)\Vuze (these files are current to Azureus 4.4.0.6, and may work for future versions, but maybe not)

PS. Similar steps are taken for Linux and OSX. Minus the obvious. As far as I know, Linux has no native code, but OSX has a similar library to aereg.dll. You’d have to compile the source code here with XCode: http://svn.vuze.com/public/client/trunk/azureus2/lib/libOSXAccess/

by DigitalDJ at 08 July 2010 16:11

Stewart Smith

Kodak Ektar 100 – fun with colour negative film

I’ve been writing a bit about my adventures with Black & White film and developing myself. I haven’t (yet) developed my own colour negative (C41 process) film. I do hope to do so at some point in the future – even though I can get the local lab to do it for $4 a roll, it’s nice to be able to do this yourself.

When I was young, I also took photos. I still use that camera sometimes too. Recently I’ve been scanning in the first ever slide film I shot – a roll of Kodachrome when I was 8 years old. I do like the look of Kodachrome, and am sad that it’s going away.

Last year, when I was in the US for Burning Man, I got introduced to Kodak Ektar 100. With the promise of colours that remind you of Kodachrome, I grabbed a bunch and headed to San Francisco and then Burning Man.

I liked the look of a bunch of stuff I shot. For example:

San Francisco beach at dusk

Golden Gate Bridge

Pier 39San Francisco in late afternoon

Barbie Death Camp

14default.png

Sun peeking under the man

Recently, on my trip to Hong Kong, I shot some too. The above was all shot with an old Ricoh SLR, when I was in Hong Kong I used my Nikon F80 and the 50mm f1.8 lens.

One of my favourites was of this little statue:
Statues in walkways

In Hong Kong a lot of buildings are interconnected so you can walk between them without having to go outside (where it’s hot and humid). There are bits of sculpture in the buildings around the Rackspace office. This is one near the hotel I was staying with. During the morning and afternoons, these walkways are filled with people, exactly like streets…. but a floor above and indoors.

I’m adding more shots from Hong Kong to my Flickr Photstream as the days go on.

I really like this film. I even don’t mind it for people… the first was the test shot (have I loaded correctly, things winding, wonder if this shot will work) in the hotel lobby in San Francisco. Leah:

Leah

I should learn to scan better (I have since, this was probably the first image I scanned using my scanner, certainly the first Ektar frame). Another two people images I like on Ektar are:

Amy in WhiteChristine with spoon!

Dare I say that I always seem to find the Ektar colours to be relaxed? I like it. The blues really shine through. Reds are also really nice (heck, I even love the yellow), and I plan to go and investigate how I can combine these colours in interesting ways on film.

by Stewart Smith at 08 July 2010 14:55

PBMS in Drizzle

Some of you may have noticed that blob streaming has been merged into the main Drizzle tree recently. There are a few hooks inside the Drizzle kernel that PBMS uses, and everything else is just in the plug in.

For those not familiar with PBMS it does two things: provide a place (not in the table) for BLOBs to be stored (locally on disk or even out to S3) and provide a HTTP interface to get and store BLOBs.

This means you can do really neat things such as have your BLOBs replicated, consistent and all those nice databasey things as well as easily access them in a scalable way (everybody knows how to cache HTTP).

This is a great addition to the AlsoSQL arsenal of Drizzle. I’m looking forward to it advancing and being adopted (now much easier that it’s in the main repository)

by Stewart Smith at 08 July 2010 06:53

07 July 2010

Jeff Waugh

QotD: Rusty Russell

Side note: when a respected information source covers something where you have on-the-ground experience, the result is often to make you wonder how much fecal matter you’ve swallowed in areas outside your own expertise.

 — Rusty Russell in Superfreakonomics; Superplug for Intellectual Ventures

by Jeff Waugh at 07 July 2010 11:01

06 July 2010

Jonathan Lange

Documentation again

Documenting your code is not important. Well-documented code is not a thing to be desired nor a goal to be sought. A lack of documentation is not a problem to be solved. Everyone who tells you otherwise is lying.

What is important is that other programmers can easily understand your code and the intent behind it, and that you can understand the code and the intent six months later.

Documenting your code is merely a way of achieving that. It might even be necessary for it. But do not confuse interface with implementation and do not confuse what you want with how to get it.

Solve the problem of confusing, opaque code. Aim for code that can be easily understood. Document if necessary.

(it's pretty much always necessary)

by jml (noreply@blogger.com) at 06 July 2010 14:14

Julien Goodwin

Thoughts on Ethernet Switching

I've recently been asked for advice on ethernet switches by several different people. Here's my opinion on the state of things.

Caveats:

  • Some of the support issues are Australia, and even Melbourne specific

  • If I don't list a brand I've not tested it (vendors are welcome to offer loaners)

  • I only care about managed switches, VLAN's are essential

  • For L3 switches I want IPv4 & IPv6 with OSPF & OSPF3, doing MPLS as a P router is a bonus

  • This is my opinion with my biases


Top Tier Vendors



Cisco



Cisco makes bulletproof switches, but they are quite expensive for people who don't buy them by the pallet load, and unless you purchase the Cat 6k or 4k they're fairly light on the complex L3 features. They also have a nasty habit of, in their larger switches, being heavily oversubscribed and not making that obvious. They also only recently added stacking in their L2 edge switches (the 2960 line that is actually price-competitive).

On the upside the Cisco IOS is well known and it's very easy to find techs for it.

Juniper



Juniper are a recent entrant to the switching arena, but they've brought their routing feature set over. This means that while some complex switching things may be hard or even missing, complex routing can be done with ease. We have some installed at our office that have three separate routing tables to meet our needs (Management, public addressed, and private addressed).

The EX-4200 are by far my preferred 1ru stackable switch at the moment, the only issue being the low 10gb density, which will be addressed when stacking is added to the new EX-4500 later this year.

The major downside with Juniper is that it's still hard to find staff with experience, and as Juniper are the only major vendor with an OS that isn't "inspired by" (a rip-off of) Cisco's IOS this is actually an issue, Juniper do make available some simple training that is enough to bring a competent person up. However the benefits of JunOS, mainly atomic changes and revision control quickly outweigh the time taken to learn it.

Combined with their MX series there's a *very* powerful platform for complex setups.

Brocade (Foundry)



Foundry networks, purchased by Brocade in late 2008, is another vendor many in the corporate space have not heard about as they've been generally focused on the service provider market. Their switches are good for L2 edge or simple L3 work, but aren't quite up there for some of the more complex L3 tricks of Juniper or high-end Cisco's.

Foundry's IronWare is easily the closest recreation of IOS short of the clones, albeit with some odd bugs and limitations (for as long as I've used it backspace doesn't work and you have to hit Ctrl-h).

Extreme



Extreme make some nice looking kit, with nice combinations of ports and stacking. L2 and basic L3 work, although they advertise some advanced L3 support (eg, virtualisation) they don't make it clear that you can't use it on some switches they claim to support it on (eg, two virtual routers, one fixed for management, one normal)

However their Linux-based XOS lets them down. They also have demonstrated not just inability to support the hardware in Australia, but inability to support the software as well, giving them the odd distinction of being the only vendor we've stopped paying support to because we simply get no value from it.

Force10



Force10 are another new name to corporates, they're out of the supercomputing field, and are well regarded as good high-density high-speed switches. I've yet to use any, but have heard good things.

Second Tier Vendors



HP / 3Com



There's actually three switch lines in the HP stable these days. (HP produced) ProCurve, rebadged Brocade, and the newly purchased 3com.

HP ProCurve



The HP ProCurve gear has generally been a decent choice for basic L2 aggregation jobs. Nice solid hardware, ok feature set. Another division of the company uses these at their colo doing simple L3 jobs, and they work fine, not my preference.

One major downside of the HP kit is they lock down SFP's to only HP branded ones. Most of the top tier vendors have tried this before, at least in some kit, but to the best of my knowledge all have backed down (even Extreme).

3com



For many years around the time 100Mbit ethernet was gaining a foothold 3com was the premier switch manufacturer, until Cisco delivered the Cat 2900 series and stole the market. These days a little feature poor compared to the top tier vendors they're still good edge and aggregation switches. I've no experience with their L3 functionality however.

Dlink



Dlink's better switches are decent for edge switching with vlans at a very reasonable price, especially with PoE. Their lower end unmanaged gear is fine for fan-out purposes as well. They have versions with L3 support, but I've not used them.

06 July 2010 07:38

Clinton Roy

clintonroy

When I put my hand up to help with linux.conf.au 2011 I realised how much work it was going to be. I’d (just barely) helped with the previous lca in Brisbane, and shared a workplace with the chief stress bunny (Raymond Smith) so got to see a lot of the really tedious, difficult stuff that just needs to happen.

I’m not very good at that sort of stuff, I’m much better with short sharp tasks that need to happen yesterday. I’ve put my hand up to run the Open Day as my main task, but I also let it be known I was happy to jump into the breach when needed. So far that’s happened a few times, and I’m happy I didn’t take on too much stuff and have some floating time available to me. I think it’s really important for an all volunteer group to have a few people with spare cycles.

A new website with content is soon to go live, the call for papers is almost ready to go, and we’re starting to sniff around for volunteers.


Filed under: lca

by clintonroy at 06 July 2010 04:50

Simon Horman

Perdition 1.19-rc1 Released

[Hikari]

I have released version 1.19-rc1 of Perdition, a mail retrieval proxy. This release includes numerous bug fixes and support for the manage sieve protocol.

The code and related libraries are available as tarballs here. More information is available in the announcement email. More information about perdition here.

06 July 2010 02:47

Perdition 1.19-rc1 Released

[Hikari]

I have released version 1.19-rc1 of Perdition, a mail retrieval proxy. This release includes numerous bug fixes and support for the manage sieve protocol.

The code and related libraries are available as tarballs here. More information is available in the announcement email. More information about perdition here.

06 July 2010 02:47

Robert O'Callahan

Mozilla And Software Patents In New Zealand

Mozilla produces the Firefox Web browser, used by more than three hundred million people around the world. Firefox is open source and is the result of a collaboration of a large group of paid developers and volunteers. In fact, Mozilla funds a team of paid developers in New Zealand working on core Firefox code; some key innovations in Firefox, such as HTML5 video, are the work of our New Zealand team. The work we do is some of the most highly skilled and high-impact software development to be found anywhere in the world. I write about software patents in my personal capacity as one of Mozilla's senior software developers, and manager of our Auckland-based development team and also our worldwide layout engine team. I also formerly worked for three years at the IBM T.J. Watson Research Center where I participated in the filing of several software patents based on my research.

The development and distribution of Firefox, like other open source software, is threatened by the rise of software patents, because the patent system was not designed for our environment. In software, especially cutting-edge software like Firefox, every developer is an inventor; coming up with new ways of doing things is not exceptional, it's what our developers do every single day. Invention created at such a rate does not deserve or benefit from years of monopoly protection. Indeed, it will be crippled if we are forced to play the patent system "to the hilt", to acquire vast numbers of our own software patents and to navigate the minefield of other people's patents.

The patent system was designed to promote invention and especially the disclosure of "trade secrets" so that others can build on them. Research casts doubt on whether it has succeeded at those goals (see an example), but even if it did, in software development --- especially open-source software development --- it is clear that no patent incentive is needed to encourage innovation and publication of our work. Copyright has long been adequate protection for both closed-source and open source software. (Open-source software permits copying, but relies on copyright protection to enforce terms and conditions on copying.) Indeed, the patent system restricts the dissemination of our work because the best way to distribute knowledge about software is in the form of code, and that can make us liable for patent infringement.

Software development is uniquely able to have huge impact on the world because copies can be made available to users for free. If we had charged users for each copy of Firefox there is no doubt we would not be nearly as successful as we have been, either at changing the world or even at raising money --- Mozilla has substantial revenues from "tie-ins" such as search-related advertising. The patent system threatens this business model, because most patent licensing arrangements require the licensee to pay a per-unit fee. This is not necessarily a problem for traditional manufacturing, where there is a per-unit manufacturing cost that must be recouped anyway, but it completely rules out a large class of software business models that have been very successful.

As well as developing software, Mozilla does a lot of work to improve Web standards, and here too we have seen damage from the rise of software patents. We want to ensure that people can communicate over the Internet, especially on the Web, without being forced to "pay to play". We especially don't want any organisation to be able to control what people can do and say on the Web via their patent portfolio. We're already having problems with Web video because many popular video encoding techniques are patented so the production, distribution and playback of Web video often requires patent licensing from organisations such as the MPEG-LA. This has slowed down the standardization and improvement of Web video and forces the use of effectively non-free software in many cases.

In summary, the patent system is not suited to software development. Software development, especially open-source software development, is harmed by patents and does not need patent protection. Development of the Internet is also hampered by patents. New Zealand stands to benefit directly and indirectly from the rise of the Internet and collaborative software development and should protect these benefits by making a clear statement by rejecting the patentability of "inventions" implemented in software.

06 July 2010 02:02

05 July 2010

Giuseppe Maxia

More on the open core : the pragmatic view

Open to the core I joined the number of those who have a public opinion on the open core debate.
Roberto Galoppini has graciously accepted to host a post on this topic in his Commercial Open Source Software blog.
Please read it directly from there:
Open to the core - The pragmatic freedom
Enjoy!

by datacharmer (noreply@blogger.com) at 05 July 2010 16:04

Jonathan Lange

When do you start testing?

Although I love TDD, I don't always use it for everything. I wrote a Python script the other day to clean up my music collection, and I didn't write any tests for it.

Someone asked me, what's the trade-off? At what point do you start writing tests?

For me, it's at one of a few points:

  • Somewhere between 100-200 lines of code I start feeling the need for tests
  • When I start feeling unclear in my head, I reach to tests to make them clear
  • If someone wants to work with me, tests instantly become mandatory
  • When I come back to some code after a while
  • When I notice my first bug
What about you? Do you always do TDD? Do you have any rules-of-thumb for when you do?

by jml (noreply@blogger.com) at 05 July 2010 15:17

Simon Horman

kexec-tools 2.0.2-rc1 Released

[A goat]

I have released version 2.0.2-rc1 of kexec-tools, the user-space portion of kexec a soft-reboot and crash-dump facility of Linux and Xen. The code is available as a tarball here and in git here. More information is available in the announcement email.

05 July 2010 07:15

Giuseppe Maxia

Speaking in the US - San Francisco User Group - Community Summit - OSCON

Giuseppe in US On July 15th and 16th I will be in San Francisco for a few meetings, and it will be my pleasure to meet the San Francisco MySQL User Group, where I will talk about MySQL Sandbox.
From there, I will continue to Portland, to attend the Community Leadership Forum and, of course OSCON, where I will have three talks: two in the main event, and one at the Intel booth.

OSCON 2010

by datacharmer (noreply@blogger.com) at 05 July 2010 07:00

04 July 2010

Don Christie

Newspaper Tries Open Source For A Day

“The Saratogian” used a mixture of Scribus, Google Docs to put out their newspaper on Independence Day as a gesture of support for the Free Software movement. The paper went out and looked good, leading one to wonder what they could do if they adopted this approach permanently and took advantages of the freedoms of Open Source to customise it. Quoting from their site:

So why did we do it? Crazy? Maybe. Tired? Definitely. Proud? You bet.

The free software experiment is part of the Ben Franklin Project of the Journal Register Company, which owns The Saratogian, 17 other dailies and a slew of weeklies and has been expanding its online presence with a content-driven, digital-first mentality that reflects where the world of communication is today and where it’s headed.

by Vik Olliver at 04 July 2010 20:52

Jonathan Lange

Releasing Twisted, and procedure in general

I'm in the middle of releasing Twisted 10.1, following the procedure document that I wrote when I released Twisted 10.0. Having everything written down has been a wonderful aide so far, but doing the release twice has made me think about what it takes to breathe life into old procedure.

The very first step has already been taken, figure out what the process is and write it down. There are still some bits that are unknown and hazy, but I expect they'll be clear by the time we're done. Anyway, writing things down is only the beginning, after that, there are two things that I think we ought to do roughly concurrently.

The first is automate the existing procedure for which here are already many tickets filed, and the second is simplify the process itself. Are all of the steps in the process really needed? Why do we have so many tarballs? Why upload the tarballs to a server that is only periodically mirrored by the actual official download location? Why generate a PDF?

I don't want to start a discussion on the details here, but rather raise the need for Twisted to begin considering this simplification, and for myself to begin articulating some of my own thoughts about process in general.

The final, on-going step in revitalizing procedure is to delegate the task, either to another human being or better yet a machine. I wonder if it would be possible to have the Twisted release done by a monthly cronjob?

In summary, to revive an existing process:

  • Figure out what the process is and write it down
  • Simplify the process itself, reducing the number of steps
  • Automate as many of the steps as possible, thus combining them
  • Delegate the execution of the process

by jml (noreply@blogger.com) at 04 July 2010 14:45

03 July 2010

Linux Australia

Software Freedom Day 2010

18 Sep 2010 11:00
18 Sep 2010 16:00
18 Sep 2010 11:00
18 Sep 2010 16:00

SFD BalloonsSoftware Freedom Day is an event held all over the world to celebrate and raise awareness of free software and open source software.

read more

by cafuego at 03 July 2010 23:54

Dave Hall

Hello Planet Ubuntu Users and Ubuntu Universe

One of my new (financial) year resolutions was to increase the readership of my blog. As part of this plan I have been trying to get my blog syndicated on relevant planets. The latest on my list has been Planet Ubuntu Users and the associated Ubuntu Universe. About 24 hours ago my blog was added to both aggregators. Thanks Tiago!

I run Ubuntu on my Dell D830 laptop (my primary machine). I run various flavours and versions of Ubuntu on desktops, servers and VMs both for my business and clients.

In 2009 I converted the local community run internet cafe to Ubuntu. When they were running XP there were problems almost weekly, since the switch, the only real issue they have had was a failed automatic update for firefox last week.

As for off the clock Linux time, my kids associate tux with computers, while my partner is more than happy running LTS releases on her laptop. The only desktop OS my mother in law has used is Ubuntu Linux.

I have been active in the Australian Ubuntu LoCo for quite a few years.

My Ubuntu related posts are generally technical howtos. Most of the stuff is system administration related with a few Ubuntu home brew packaging and webapp development tips.

The non tagged feed of this blog contains a good mix of geeky stuff about whatever we are working on at DHC, rants about annoying things and the occasional thing from real life. I hope there is something there that you find useful. Happy reading.

by Dave at 03 July 2010 15:14

Adam Shand

Staying quit

Not everybody smokes in Indonesia, but it seems like everybody does. Pinched between gnarled fingers or hanging carelessly from lips — stall owners, bikers and touts all peer out at the world through clouds of smoke. Within hours of landing the cloying smell of clove cigarettes has jolted me back back ten years, memories jostling for attention as they flicker before my eyes. Simultaneously my dormant addiction begins wriggling into consciousness, reaching out into my thoughts, looking for leverage to make "yes" the only answer.

My introduction to clove cigarettes was through Kaleigh and her civilised habit of smoking a single Djarum in the evenings. My ignorance was fascinated and I quickly discovered that lounging in the evening sun, a quiet buzz in hand, was the perfect antidote to whatever stresses the day had delivered. I had not yet learned about addiction, how it waits and yearns, how it lingers in the corners never quite allowing absolution. It is images from this honeymoon period, as my addiction and I become acquainted, which now fill my mind.

Driving with Kaleigh from Seattle to Anchorage over the Alcan Highway. We barely knew each other and were trapped in her jeep, desperately trying to keep the conversation alive through two and a half thousand miles of British Columbia's icy wasteland.

At the end of our relationship, standing on my porch and solemnly swearing off women for the next five years, only to meet Teresa less then a month later. Huddling with her on the back steps of Internet Alaska as she bummed cloves from me, the subzero temperatures providing the perfect excuse to sit close enough to kindle an office romance. I still didn't think of myself as a smoker and I remember my confusion when several weeks later she showed up on the steps with a pack of Camels. I discovered that she was an ex-smoker, and she discovered that cloves are three quarters tobacco.

Watching our friend Mark, as he watched Teresa and I, transition from smoking cloves to smoking Camels. No words were spoken but I understood what he had recognised, and why he no longer joined us for the occasional smoke.

Moving to Portland and discovering a city I could love, a city I still miss. Those endless hours with other volunteers from Personal Telco, sitting around and dreaming in bars and cafes about how we were going to build a free citywide wireless cloud with nothing but geek fervour. The collapse of the dotcom era, my friends and I falling in and out of employment as the economy heaved and twisted. Being trapped in a job I didn't yet realise I detested, and failing to adjust to the grim realities of an enterprise support role at a doomed startup. It still astounds me that James had the grace to allow me to work four ten hour days, so I could spend a day each week at home working to help Personal Telco's dreams become reality.

In the stinking hot week of Portland's summer, relaxing barefoot in the shade on our front steps. With sudden conviction I knew that I wanted to have kids, that I wanted to get married and that I'd really like for us to own our own home. Then the bitter realisation that despite a lifetime of privilege and opportunity, I had nothing but memories to show for it. In those moments I lost the sense that I had all the time in the world, I robbed myself of the freedom to let every experience unfurl in its own time. Years later I realise that there are many things right with having nothing but memories to show for your life.

The honeymoon ended the first time I tried to quit, and failed, but the memories don't stop.

My first extended travels — three months with Teresa chain smoking through England, France, Holland, Germany, New Zealand and Australia. My failed proposal attempt at the Eiffel Tower and a successful one in the Coromandel. Successfully quitting with Teresa at the end of our travels. Becoming a smoker again through the final months of our marriage and plunging into the abyss of divorce.

Modern etiquette won't let me say that that smoking was a good companion, but it has been a companion. As I write this I'm shocked at how much of my life has been spent as a smoker. How many memories I can conjure of me with a fag in one hand and a coffee or beer in the other.

I remember reading in Wired that a big tobacco executive thought that he was going to get rich creating genetically modified tobacco that didn't have any nicotine. Cigarettes that are just as dangerous but not addictive. I howled with laughter, reading it out loud through snorts of astonishment, at this gross misunderstanding. They had it completely backwards. What they need to do is create a cigarette which is still addictive, but that doesn't kill you. The addiction is the point.

Smoking provided a reason to get up from my desk and spend ten minutes away from the computer. A reason to meet Teresa on the front porch in the evenings where we would talk and dream about our lives. Rituals full of comfort in cars and airports, coffee shops and bars. A way to be occupied while being alone. And never underestimate the camaraderie of smokers in a world in which they are beset. Each shared cigarette is the beginning of a new friendship, and all smokers share.

For me it's not the quitting which is hard, it's the staying quit. As the challenge of abstinence fades, my vigilance wanes. It didn't take long, maybe a week? A couple beers in Nusa Lembongan and I was bumming smokes from Tania. The surfers in Medewi were more then happy to share their cloves. A week later I succumbed to the pleasures of my own pack, purchased at the Bromo Permai hotel.

Today I'm in Singapore, sitting at a table full of Nick's dive buddies, laughing my ass off as they joke and tease, teaching me swear words in Bahasa, Hokkien and Thai. Everybody at the table is smoking, drinking and laughing but only I know that I'm smoking my last pack. Tomorrow we get on the train for Malaysia, and in these final hours each one tastes sweeter.

by Adam Shand at 03 July 2010 04:33

Dave Airlie

embedded GPU : what are they hiding?

So to follow on from my posting stating my position wrt kernel drivers for closed source userspace drivers, lets take a look at the embedded GPU industry and Linux kernel relationship.

What does the embedded industry get from Linux?

They get a kernel which is royalty free, with 1000s of man-years of development experience and resources. Before Linux these vendors either sourced an OS on a royalty basis from some closed-shop, or rolled their own in-house one.

Now people might say "but the embedded GPU industry has to support Windows as well", but take one look at NVIDIA Tegra One and you can see the embedded windows marketplace is less than important, NVIDIA Tegra Two is all about the Linux, whereas they were pretty much only talking to MS on Tegra one.

So Linux is a great boon for this industry, and means they can produce higher quality products for a lower cost (or lower quality products at a lower cost in some cases). So really there are probably two games in town for these embedded vendors, selling into Apple or selling into Linux centric developments, like Android, Meego, Linaro.

So what are they actually hiding in userspace?

The main thing they seem to be hiding is shader compilers and their GPU assembler code, things that convert from GLES into the assembler code for their GPUs. This stuff isn't rocket science but it probably is where most of their speed up and tricks are hidden.

So why do they think it valuable?

I think all 3D IP vendors dream of becoming Imagination Technologies, they need to learn there is already one Imagination Technologies and the only way to easily disrupt their revenue stream and sell into other SOCs is to be disruptive, not just follow the herd. They also probably had to spend a lot of money writing a decent GPU compiler from scratch, whereas most embedded firmware is a lot more trivial, so they probably think they need to directly recoup the costs from this development instead of giving it away. The thing is they are hw vendors, the sw is a sunk cost, opening it would actually make future maintenance easier. HW companies never do well at SW and they would be best to just open it and try and involve some community development around it.

Is the value of this IP more valuable than what the receive from Linux?

This is the crux of my issue with these vendors, they are receiving the Linux kernel for free, but don't want to contribute anything back. They know they can't sell into any where else except Linux driven products, but they insist on keeping their development methodologies from the days of Windows and their own in-house OSes. Those days are gone, but they cling to the idea that for some reason they can produce a better GPU stack on their own than they could in collaboration with other, despite the fact that the kernel that forms the basis for their sales was developed in this fashion. They also all use gcc as the compiler for their CPUs again proving the insanity.

Isn't it up to them what they do?

Totally, but its also up to the Linux community to push back against them. The thing is they'd never have opened any code if it wasn't for the GPL making them at least open the kernel portions, they don't care about freedom or GPL, they care about their bottom line, and doing the least amount of work to remain legal and make money. Now they are getting all this wonderful software for free, Linux phone sales are driving their bottom line, but they still don't want to play the game by the rules of the kernel. They want to have their cake and eat it too. (the cake is a lie). Hence they spend their time creating their own solutions in private, releasing what they have to comply with legalese but never actually allowing people the freedom to use their devices.

So shouldn't we give a little?

The thing is two major vendors have been pushing Imagination Technologies for years to open something, these guys are aiming to sell thousands->millions of devices, we have gotten the ugliest kernel shim in the world in 4 years of trying. All the other vendors are only willing to give that little. I don't personally think any of them want to open this stuff and will hide behind IP excuses for ever.

What will make them change their minds?

a) money and lots of it. If google or olpc can demand open driver commitments (in contracts, not handwaving agreements) then I suspect these vendors will quickly realise the value of their IP is dwarved by the value of sales. This probably means a major chance for one of the vendors to control a lot of the space in the Linux world.

b) disruptive vendor, one vendor realises before the others that opening their IP will lead to more sales than keeping it closed and also lead to the chance of more people optimising their technology and leveraging other work in the industry.

So are you saying they should drop all their in-house developed solutions?

No I'm saying that the driver for their hardware is a single entity, and if the whole entity isn't open, then none of it is truly open. So if they don't want to release an open userspace, then they don't get to merge their open kernel bits to support the closed userspace. We have to keep the maintenance burden on them, so it keeps costing them money to track newer kernels, and they don't get community support from other vendors who have committed to doing things right.

So why should they re-write drivers?

This happens in Linux the whole time, with nearly every new technology. Wireless, RAID, SATA for example, all have had vendors trying to push complete stacks of their own writing, you'll notice over time the drivers that are actually written to the current stacks work best, an the crazy vendors drivers are often horror shows.

What would be nice to happen?

It would be great if there was a hero with time/funding and involvement in the ARM GPU community to take over being maintainer of these solutions, from kernel all the way to userspace. Vendor driver writers could ask this person for advice, and they could have some sort of working group where they develop a stack based around current Linux technologies, like GEM/TTM/DRI2/Mesa/Gallium3D. If you take a look at the mesa stack lately, there has been a lot of work on making it work as an EGL/GLES stack as well as a classic GL stack. Then vendors would supply open drivers compliant with this stack, and just sell lots of chips.

What would be most likely negative solution?

We get what we have now, they maintain the 5-6 GPU stacks in their own world, and never talk to each other, and it costs them more and more money going forward to maintain. Some hero reverse engineers one or two of the GPU architecture, maybe some hero writes a open driver stack from docs under NDA or with open docs.

I may update this post as I have more thoughts ;-)

03 July 2010 01:28

02 July 2010

Grant Pannell

iOS4 Multitasking: Developer’s Hell

I finally got around to installing iOS4, so I decided I’d go ahead and investigate what it takes to update the Fresh app (streaming radio) to support multitasking. Currently, my conclusion is that implementing ANY of the multitasking APIs is 110% hell unless you’re starting from scratch.

First of all, your application has to play nice while it’s sitting in the background. This means that you’re basically required to implement a whole lot of “if backgrounded” checks, unless you want to soak up the battery. This involves stopping unnecessary timers, updating the UI when the application comes back to the foreground (rather than per a specific event), and saving non-critical alerts for when the user pops back into the application. This basically requires a crapton of refactoring…and we all love how that introduces bugs. If you have any sort of complicated app, you’ll be having to manage state saving so that fast app switching works nicely. Oh, and not to mention that iOS never guarantees that your application stays backgrounded. It can be killed depending on resource usage, available memory or even just idle time. Every task (other than a few specific exceptions) is time limited, so you are constantly having to check and request more time for your task.

Now, this particular application is meant to take advantage of the background audio multitasking API. Now, as an aside, Apple does not provide any “simple” API to stream audio. What they provide is a primitive and generic audio buffer/queue that suits both local files and network streams. Basically, this means that if you want to stream audio over the network, you have to implement the protocol, manually send the requests to get data (via HTTP for example), then feed that data into a buffer (where you have to handle the size of incoming data vs. the size of the buffer), THEN…play the audio from the buffer or handle any errors that occurred along the way. Now, in any half decent modern API, surely, you’d have a perfected version of the algorithm where you could simply plug in a URL and instruct a magical black box to play it. But alas no, each developer is to implement the over complicated, primitive audio queue… just for a streaming radio application. Now combine that with the following multitasking API, and you’re in developer hell.

One of the official pages on backgrounding is nearly impossible to find on the Apple site, so here it is: http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html Now, if you look closely, you’ll see that most sections are detailed nicely….except background audio, fantastic. So, taking a quick look at that section reveals that if you simply “flag” your application as one that streams audio, you’re good to go. Hooray right? Well, sort of, not really, no.

Hurdle 1: Hooking into iPod controls

Surprisingly, this is the EASIEST part of implementing background audio. It seems to “just work” as long as you have fairly simple start/stop/pause methods for your radio streamer. One gotcha is that state changes can now take place from both your play/stop button and the iPod controls… so, basically you should be using some sort of event system for state changes and to reupdate the UI whenever your app hits the foregound again.

Hurdle 2: Interruptions

Interruptions have existed since OS2. They cause your music to stop, usually when someone rings. However, now your application has to act more like the iPod application…except you can’t! Unlike the iPod application, which automatically restarts after you finish your call, the only way your application can automatically restart it’s stream is if the user brings it back to the foreground. Not only that, I’ve found that interruption events are very inconsistent. Sometimes they fire simultaneously with the interruption, sometimes they won’t fire until you bring the application to the foreground. On the times that they don’t fire with the interruption, I find that some sort of crazy auto deallocation of the streamer occurs which I can only fix with a terrible workaround. I am yet to find the actual cause of this.

Hurdle 3: iPhone Simulator

It sucks. Testing background audio with it is impossible! Even in the GM build, there is a bug that mutes all sound from your application when it is backgrounded. This makes it rather difficult to tell whether or not your application IS ACTUALLY SITTING IN THE BACKGROUND.

Hurdle 4: You’re free to do whatever you want…except when you need do something

So, as explained before, if you flag your application for streaming audio, your application can go ahead and play audio and do what it needs to do without any particular time limit or suspended state. Cool! Sort of like a free pass to do whatever the hell I want, right? Wrong. There’s a HUGE exception here: “if your application stops playing audio while in the background, your application is suspended.” Wow, that’s fantastic. So let me get this right…if my STREAMING AUDIO APPLICATION happens to need to BUFFER (i.e. STOP PLAYING AUDIO) while on a dodgy cellular connection, my application is essentially…fucked. Yes, that’s right. If you have a little bit of a network hiccup, and need to buffer, the user will need to jump back into the application to restart the audio stream! Not even the iPod controls (which are meant for external use) allow you restart the stream. I haven’t yet found a fix for this yet, but I’m assuming I’m going to have to go back to that mindfuck of a primitive audio queue to fill it with some sort of dummy audio while it buffers, so that iOS doesn’t fucking suspend my application in the middle of playing music. Doesn’t this found like fun?

Hurdle 5:Backwards Compatibility

Finally, as always, you need to aim for backwards compatibility. Apple claims to have completely culled OS2.x, but let’s face it, there are still 1st Generation iPod Touch users that DIDN’T pay the iOS3/4 upgrade tax, that want to use apps. You have to, at a minimum, ensure your application works on OS3 devices, which means making sure that some method calls, that are iOS4 specific, actually exist. Then using the simulator to test………. /facepalm.

FML.

by DigitalDJ at 02 July 2010 20:24

Paul McKenney

Stupid SMP Tricks: Memory Barriers (RWC with rmb)

In the previous posting a code fragment dealt with memory ordering. Strangely enough, the foo_1() function contained only a pair of reads, but separated them with a full smp_mb() barrier. So why not use an smp_rmb() instead? Perhaps something like the following:

int x, y; /* shared variables */
int r1, r2, r3; /* private variables */

void foo_0(void)
{
	ACCESS_ONCE(x) = 1;
}

void foo_1(void)
{
	r1 = x;
	smp_rmb();  /* The only change. */
	r2 = y;
}

void foo_2(void)
{
	y = 1;
	smp_mb();
	r3 = x;
}

After these three functions complete, we have an assertion. Please note that by “complete” I mean that all effects of the functions have become globally visible. One way to ensure this level of completion is for the thread that spawned foo_0(), foo_1(), and foo_2() to do pthread_join() on each of them in turn, and only then execute the following assertion:

assert(!(r1 == 1 && r2 == 0 && r3 == 0));

Can this assertion ever trigger?

02 July 2010 04:22

Dave Hall

Hello Slicehost Planet

Hi, I'm Dave and it has been 10 days since I ran up a new slice.

I have been using slicehost for over 2 years to host various VMs. I run a Free / Open Source focused IT Consulting and programming business based in Victoria, Australia.

This blog contains a good mix of geeky stuff about whatever we are working on at DHC, rants about annoying things / companies along with the occasional thing from "real life". A lot of the stuff that gets blogged about is running on slicehost VMs or at least has been tested on them.

This blog is now being syndicated on the Slicehost Planet. The future of the Slicehost planet is unclear, support have suggested that it suffer the same fate as USA-193, while others insist it is staying. For now at least they are adding new blogs, so long as they hosted on their VMs. If you have a blog running on a slice, email support at slicehost and ask them to add your feed to the planet.

by Dave at 02 July 2010 02:36

01 July 2010

Dave Airlie

open source kernel bits with closed source userspaces

[I posted this to lkml earlier - discussion should happen there not in comments here, but its nice to have somewhere easy to point people at].

Now this is just my opinion as maintainer of the drm, and doesn't
reflect anyone or any official policy, I've also no idea if Linus
agrees or not.

We are going to start to see a number of companies in the embedded
space submitting 3D drivers for mobile devices to the kernel. I'd like
to clarify my position once so they don't all come asking the same
questions.

If you aren't going to create an open userspace driver (either MIT or
LGPL) then don't waste time submitting a kernel driver to me.

My reasons are as follows, the thing is you can probably excuse some
of these on a point by point basis, but you need to justify why closed
userspace on all points.

a) licensing, Alan Cox pointed this out before, if you wrote a GPL
kernel driver, then wrote a closed userspace on top, you open up a
while world of derived work issues. Can the userspace operate on a
non-GPL kernel without major modifications etc. This is a can of worms
I'd rather not enter into, and there are a few workarounds.

b) verifying the sanity of the userspace API.
1. Security: GPUs can do a lot of damage if left at home alone, since
mostly you are submitting command streams unverified into the GPU and
won't tell us what they mean, there is little way we can work out if
the GPU is going to over-write my passwd file to get 5 fps more in
quake. Now newer GPUs have at least started having MMUs, but again
we've no idea if that is the only way they work without docs or a lot
of trust.

2. General API suitability and versioning. How do we check that API is
sane wrt to userspace, if we can't verify the userspace. What happens
if the API has lots of 32/64 compat issues or things like that, and
when we fix them the binary userspace breaks? How do we know, how do
we test etc. What happens if a security issue forces us to break the
userspace API? how do we fix the userspace driver and test to confirm?

c) supplying docs in lieu of an open userspace
If you were to fully document the GPU so we could verify the
security/api aspects it leaves us in the position of writing our own
driver. Now writing that driver on top of the current kernel driver
would probably limit any innovation, and most people would want to
write a new kernel driver from scratch. Now we end up with two drivers
fighting, how do we pick which one to load at boot? can we ever do a
generic distro kernel for that device (assuming ARM ever solves that
issue).

I've also noticed a trend to just reinvent the whole wheel instead of
writing a drm/kms driver and having that as the API, again maintainer
nightmares are made of this.

d) you are placing the maintenance burden in the wrong place

So you've upstreamed the kernel bits, kept the good userspace bits to
yourselfs, are stroking them on your lap like some sort of Dr Evil,
now why should the upstream kernel maintainers take the burden when
you won't actually give them the stuff to really make their hardware
work? This goes for nvidia type situations as well, the whole point is
to place the maintainer burden at the feet of the people causing the
problems in an effort to make them change. Allowing even an hour of
that burden to be transferred upstream, means more profit for them,
but nothing in return for us.

01 July 2010 23:42

Linux Australia

Bids for linux.conf.au 2012

Howdy,  

The Linux Australia council is now requesting formal bid proposals for hosting LCA2012. As you can see from our timeline below, we've slipped a bit on announcements and the close for bid proposals is only two weeks away!!

read more

by cafuego at 01 July 2010 02:46

30 June 2010

Michael Kerrisk

Revised ETA (again!)

A few people have been asking: where's the book? I'd like to know too! But, seriously, production has been a much bigger task than the publisher or I expected, and we've had to slip the date again. Our ETA is now August.

by mtk (noreply@blogger.com) at 30 June 2010 22:05

Stewart Smith

Reciprocity failure

As the light level decreases out of the reciprocity range, the increase in duration, and hence of total exposure, required to produce an equivalent response becomes higher than the formula states” (see Wikipedia entry).

Those of us coming from having shot a lot of digital, especially when you’re experience of low light photography is entirely with digital are going to get a bit of a shock at some point. Why didn’t this image work exactly as I wanted it to? Why isn’t there as much.. well.. image!

You’ll probably read things like “you don’t need to worry about it until you’re into really long exposures” or maybe you’ll start reading the manufacturers documents on the properties of the film and just go “whatever”.

Ilford Delta 3200 Professional is one of the films where you have to start caring about it pretty quickly. Basically, you need to overexpose once you start getting exposures greater than ~1second.

In decent light, handheld with a pretty quick exposure, things look great:

leah

But whack things on a Tripod and have a bit of a longer exposure you’re going to start failing a bit. Even though I like this shot, I find that it’s just not quite got everything I would have liked to capture. Just exposing a bit more I think would have done it. I had to do too much in scanning and the GIMP…

under the bridge

So I learnt something with this roll, which is always good.

by Stewart Smith at 30 June 2010 12:29

29 June 2010

Stewart Smith

No, I haven’t forgotten digital (darktable for the epic win)

This was my first real play with darktable. It’s a fairly new “virtual lighttable and darkroom for photographers” but if you are into photography and into freedom, you need to RUN (not walk) to the install page now.

My first real use of it was for a simple image that I took from my hotel room when I was in Hong Kong last week. I whacked the fisheye on the D200, walked up to the window (and then into it, because that’s what you do when looking through a fisheye) and snapped the street scene below as the sun was going away.

Hotel Window (Hong Kong)

I’d welcome feedback… but I kinda like the results, especially for a shot that wasn’t thought about much at all (it was intended as a just recording my surroundings shot).

The second shot I had a decent go at was one I snapped while out grabbing some beers with some of the Rackspace guys (Hi Tim and Eddie!) in Hong Kong. Darktable let me develop the RAW image from my D200 and get exactly the image I was looking for…. well, at least to my ability so far. Very, very impressed.

Hong Kong streetlife

Being a photographer and using Ubuntu/GNOME has never been so exciting. Any inclination I had of setting up a different OS for that “real” photo stuff is completely gone.

(Incidently, I will be talking about darktable at LUV in July)

by Stewart Smith at 29 June 2010 14:49

More film developing

I’ve developed some more film! Here’s some shots from last time I was in Hobart. All shot on Ilford HP5+, which I quite like. I’m still getting used to this developing thing and next time should be much better!

The HP5+ was shot at the box speed of 400 with my Nikon F80 and the wonderful 50mm f1.8 lens. I developed in R09 OneShot (Rodinal) for the standard 6 minutes that the Ilford box tells me to. I used my Epson V350 Photo scanner to scan the negatives with iscan. I am wishing for better scanning software. *seriously* wishing.

These first four are probably going to be recognisable to anybody who knows Salamanca.

Buskers at Salamanca

boat in the fountain

Dead leaves and a bench

The Telegraph

For those who love the Lark Distillery or English Bitter, I snapped a shot of (one of) the pint I had:

Hand pumped bitter

So I’d count this as fairly successful! Of course, need some animal shots:

black and white rabbitBeaker on film

… and there was a stop at a Sustainability Expo that had a surprising lack of bountiful vegan food when we got there…
Hobart Sustainability Expo

I have to say, pulling that film out and seeing an image is incredibly rewarding.

If you want to know more about how I do it all on Linux, come to my talk at LUV this upcoming July 6th.

by Stewart Smith at 29 June 2010 13:29

Drizzle @ Velocity (seemed to go well)

Monty’s talk at Velocity 2010 seemed to go down really well (at least from reading the agile admin entry on Drizzle). There are a few great bits from this article that just made me laugh:

Oracle’s “run Java within the database” is an example of totally retarded functionality whose main job is to ruin your life”

Love it that we’re managing to get the message out.

by Stewart Smith at 29 June 2010 11:24

Giuseppe Maxia

OpenSQLCamp EU 2010 - Last days to submit a talk

There is still time and hope if you want to present at the OpenSQLCamp 2010, European edition. The Call for Participation is open until July 11th.
Thanks for the ones who have submitted proposals.
A few caveats: if your proposal does not include a description, it will not be accepted. Therefore, wannabe speakers, please check your proposals, and make them as good as you can!
We want talk about all open source database. Not only MySQL.
Open source database fans, wake up, and submit a proposal!

by datacharmer (noreply@blogger.com) at 29 June 2010 10:50

Tim Connors

It's freezing

I hope Debian squeeze is not going to be released without the trivial fix for bug #564464 being applied, just because of any impending freeze. The regression itself wasn't introduced until near when the freeze was mooted, and still hasn't been fixed 6 months later.

Not having a beep that can be tuned in any way with "xset b" is a bit boring for those of us who don't let our desktop environment replace the useful beep signal with stupid noises.

29 June 2010 08:53

Selena Deckelmann

Forgetting: Logging as an ethical choice

I have kind of a weird idea for a database person.

Forgetting should be built into our applications by default. I just spent the weekend at FooCamp, and I held a session to discuss this idea, and some of the possible consequences if it were implemented.

To explain why I think this, I’m going to take an extreme stance for a moment and argue a position that I’d like to see rebutted. So, please have at it! :)

For too long we have allowed decisions made by developers – default application settings – to determine what ultimately become surveillance levels.

There are notable counter examples: 4chan intentionally expires postings every few days. Riseup keeps no logs. The EFF documents what we do and do not legally need to keep. These, however, are the efforts of a tiny minority when considered against the rest of the web.

Over time, our conception of what is reasonable has changed around logging and accounting for vast periods of our activities. Never before would a silly recording taken by a 15-year old be stored indefinitely, and then be documented as a watershed event because of how many times it was viewed in a vast global network, rather than for the content of the cultural artifact itself. The log of views themselves were the cultural artifact, and it is celebrated.

Fading away isn’t evil. But we act like it is when we pipe what once was ephemeral into archive.org indefinite storage.

Why have we decided to participate in this social experiment? It really wasn’t a collective decision. Some software developers and investors decided that archival on a massive scale was important or profitable. We started calling these things “part of history” and just storing them without thinking about it. Saving became default.

I’m not saying that archiving the internet, search robots or “opting in” are bad things. But those who least understand archiving’s effect on personal privacy may be the ones most likely to suffer in the future.

The ripple effects of the decision to move from “default expire” to “default save” are vast. Consider for a moment if we were to call the ability to intentionally forget on the internet a human right.

Instead, what we’ve done is to say to millions of people – you do not have the right to forget. Companies will take your locations and status updates, and never delete them. And privacy is rapidly becoming a privilege of those who can afford to buy it.

For the sake of argument, consider the difference between narrative historical documentation and collections of “facts.” The narrative is an aggregation, full of embellishments and forgetting and kernels of truth. Facts are collected, supposedly objectively. Both approaches to capturing historical thought suffer from the fallacy that historical “fact” is fixed and doesn’t evolve based on the viewer and reteller over time. How much worse is this effect when our collections of facts are now ballooning to include every blog post, photo, tweet and web access log you’ve ever made?

The point is not that individuals wish to change history or even obscure events which may reflect poorly on them. (Even though we all do!)

We need to give people a real choice – not a set of ACLs and rules. Choice about what is archived about them, control over that process and a clear delineation between personal artifact and public property.

Kathy Sierra deleted her twitter stream and was accused of removing a piece of history, and possibly the worse internet offense – taking away conversations. Taken at face value, isn’t that the point of conversation? That it is ephemeral?

Conversations leave echos in changed thoughts and light or deep impressions in the minds of the participants. Just because Twitter has by default chosen to retain these conversations indefinitely doesn’t change the nature of conversation itself. No one would argue that just because we share our thoughts that we are obligated to share every thought.

In the same way, we are not obligated to maintain a record of our sharing. And if we do maintain and share a record of our own end of a conversation, we still have the right to ultimately destroy it.

Once shared, of course, an artifact of a conversation can’t be taken away from those that have copies. But authors and owners of the original work must always retain the right to destroy.

So, that brings me to what is ethical in our applications. When we say: “we’re keeping your data forever” and “delete means your account will still be here when you come back”, application developers and companies are making an ethical choice. They are saying, “your shared thoughts aren’t your own – to remember or forget. We are going to remember all of this for you, and you no longer have the right to remove them.”

Connectedness is not the same as openness. Storing vast logs of data related to individuals which connect thousands of facts over the course of their lives should be presented as the ethical choice it is, rather than a technical choice about “defaults”. Picking what we decide to log and store is an ethical and political decision. And it should also be possible for it to be a personal decision.

No related posts.

by selena at 29 June 2010 07:15

Paul McKenney

Stupid SMP Tricks: Memory Barriers (RWC)

This posting relates to memory barriers in the Linux kernel. We start with smp_mb(), which is a full memory barrier when the kernel is built with CONFIG_SMP=y and is otherwise a compiler barrier that constrains compiler optimizations, but which generates no code.

Consider the following code fragment, where each function foo_n() runs on CPU n, all concurrently:

int x, y; /* shared variables */
int r1, r2, r3; /* semi-private variables */

void foo_0(void)
{
        ACCESS_ONCE(x) = 1;
}

void foo_1(void)
{
        r1 = ACCESS_ONCE(x);
        smp_mb();
        r2 = ACCESS_ONCE(y);
}

void foo_2(void)
{
        ACCESS_ONCE(y) = 1;
        smp_mb();
        r3 = ACCESS_ONCE(x);
}


Now suppose that the following assertion runs after all of the preceding functions complete.

assert(!(r1 == 1 && r2 == 0 && r3 == 0));

Can this assertion ever trigger? Why or why not?

29 June 2010 03:44

Stewart Smith

ENUM now works properly (in Drizzle)

Over at the Drizzle blog, the recent 2010-06-07 tarball was announced. This tarball release has my fixes for the ENUM type, so that it now works as it should. I was quite amazed that such a small block of code could have so many bugs! One of the most interesting was the documented limit we inherited from MySQL (see the MySQL Docs on ENUM) of a maximum of 65,535 elements for an ENUM column.

This all started out from a quite innocent comment of Jay‘s in a code review for adding support for the ENUM data type to the embedded_innodb engine. It was all pretty innocent… saying that I should use a constant instead of the magic 0×10000 number as a limit on an assert for sanity of values getting passed to the engine. Seeing as there wasn’t a constant already in the code for that (surprise number 1), I said I’d fix it properly in a separate patch (creating a bug for it so it wouldn’t get lost) and the code went in.

So, now, a few weeks after that, I got around to dealing with that bug (because hey, this was going to be an easy fix that’ll give me a nice sense of accomplishment). A quick look in the Field_enum code raised my suspicions of bugs… I initially wondered if we’d get any error message if a StorageEngine returned a table definition that had too many ENUM elements (for example, 70,000). So, I added a table to the tableprototester plugin (a simple dummy engine that is loaded for testing the parsing of specially constructed table messages) that had 70,000 elements for a single ENUM column. It didn’t throw an error. Darn. It did, however, have an incredibly large result for SHOW CREATE TABLE.

Often with bugs like this I may try to see if the problem is something inherited from MySQL. I’ll often file a bug with MySQL as well if that’s the case. If I can, I’ll sometimes attach the associated patch from Drizzle that fixes the bug, sometimes with a patch directly for and tested on MySQL (if it’s not going to take me too long). If these patches are ever applied is a whole other thing – and sometimes you get things like “each engine is meant to have auto_increment behave differently!” – which doesn’t inspire confidence.

But anyway, the MySQL limit is somewhere between 10850 and 10900. This is not at all what’s documented. I’ve filed the appropriate bug (Bug #54194) with reproducible test case and the bit of problematic code. It turns out that this is (yet another) limit of the FRM file. The limit is “about 64k FRM”. The bit of code in MySQL that was doing the checking for the ENUM limit was this:


/* Hack to avoid bugs with small static rows in MySQL */
  reclength=max(file->min_record_length(table_options),reclength);
  if (info_length+(ulong) create_fields.elements*FCOMP+288+
      n_length+int_length+com_length > 65535L || int_count > 255)
  {
    my_message(ER_TOO_MANY_FIELDS, ER(ER_TOO_MANY_FIELDS), MYF(0));
    DBUG_RETURN(1);
  }

So it’s no surprise to anyone how this specific limit (the number of elements in an ENUM) got missed when I converted Drizzle from using an FRM over to a protobuf based structure.

So a bunch of other cleanup later, a whole lot of extra testing and I can pretty confidently state that the ENUM type in Drizzle does work exactly how you think it would.

Either way, if you’re getting anywhere near 10,000 choices for an ENUM column you have no doubt already lost.

by Stewart Smith at 29 June 2010 03:19

28 June 2010

Giuseppe Maxia

MySQL Sandbox embraces Python and meets Cluster

If you have tried Quick start guides: MySQL cluster in 10 minutes, you may have realized that it is really quick and easy.
However, it leaves some typing to be done.
Users of MySQL Sandbox have a horror of repetitive typing, and this got me thinking. "Could I integrate MySQL Sandbox and Cluster?"
The answer was: "Sure."
But then I started thinking of all the minor and major changes that I wanted to do to the Sandbox and have delayed for too long. What I need, is a radical refactoring.
And then I remembered that it has been almost two years since I learned a new programming language and that perhaps I could expand my horizons and the Sandbox architecture at once.
Thus, thanks to an irresistible offer from O'reilly about ebooks, last week I bought both Learning Python, fourth edition and Programming Python, Third edition.
During the week end I produced my first tool: a Python script that installs and starts a small cluster, following the instructions given in the MySQL Cluster quick start guides. The script unpacks the cluster tarball, installs a server sandbox from it, then starts the cluster nodes and the MySQL server, and then it monitors the cluster until all the nodes are connected before finally testing the server.
Here is a sample run:

$ make_cluster.py ~/Downloads/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64.tar.gz

++ tar -xzf ~/Downloads/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64.tar.gz

++ low_level_make_sandbox --basedir=$HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64 --sandbox_directory=mcluster --install_version=5.1 --sandbox_port=5144 --no_ver_after_name --no_run --force --my_clause=log-error=msandbox.err --my_clause=ndbcluster
The MySQL Sandbox, version 3.0.12
(C) 2006-2010 Giuseppe Maxia
installing with the following parameters:
upper_directory = $HOME/sandboxes
sandbox_directory = mcluster
sandbox_port = 5144
check_port =
no_check_port =
datadir_from = script
install_version = 5.1
basedir = $HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64
tmpdir =
my_file =
operating_system_user = gmax
db_user = msandbox
db_password = msandbox
my_clause = log-error=msandbox.err ; ndbcluster
prompt_prefix = mysql
prompt_body = [\h] {\u} (\d) >
force = 1
no_ver_after_name = 1
verbose =
load_grants = 1
no_load_grants =
no_run = 1
no_show =
loading grants
.. sandbox server started
stopping server
Your sandbox server was installed in $HOME/sandboxes/mcluster

++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgmd -f $HOME/sandboxes/mcluster/my_cluster/conf/config.ini --initial --configdir=$HOME/sandboxes/mcluster/my_cluster/conf/
2010-06-28 21:29:57 [MgmtSrvr] INFO -- NDB Cluster Management Server. mysql-5.1.44 ndb-7.1.4b
2010-06-28 21:29:57 [MgmtSrvr] INFO -- Reading cluster configuration from '$HOME/sandboxes/mcluster/my_cluster/conf/config.ini'

++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndbd -c localhost:1186
2010-06-28 21:29:57 [ndbd] INFO -- Configuration fetched from 'localhost:1186', generation: 1

++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndbd -c localhost:1186
2010-06-28 21:29:57 [ndbd] INFO -- Configuration fetched from 'localhost:1186', generation: 1

++ mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 (not connected, accepting connect from localhost)
id=4 (not connected, accepting connect from localhost)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @localhost (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 1 node(s)
id=50 (not connected, accepting connect from any host)


++ $HOME/sandboxes/mcluster/clear

++ $HOME/sandboxes/mcluster/start
... sandbox server started
Please wait. Giving the cluster time to catch up
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)
id=4 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @localhost (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 1 node(s)
id=50 (not connected, accepting connect from any host)


It may take up to 2 minutes to initialize ... ( 0 )
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)
id=4 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @localhost (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 1 node(s)
id=50 (not connected, accepting connect from any host)


It may take up to 2 minutes to initialize ... ( 5 )
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0, Master)
id=4 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @localhost (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 1 node(s)
id=50 (not connected, accepting connect from any host)

[...]

It may take up to 2 minutes to initialize ... ( 100 )
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)
id=4 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)] 1 node(s)
id=50 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4)


++ $HOME/sandboxes/mcluster/use -vvv -e "create table test.t1(i int not null primary key)engine=ndb"
--------------
create table test.t1(i int not null primary key)engine=ndb
--------------
Query OK, 0 rows affected (0.45 sec)

++ $HOME/sandboxes/mcluster/use -vvv -e "show create table test.t1\G"
--------------
show create table test.t1
--------------

*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`i` int(11) NOT NULL,
PRIMARY KEY (`i`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

to shut down the cluster, type:
$HOME/python/mysql-cluster-gpl-7.1.4b-osx10.6-x86_64/bin/ndb_mgm -e shutdown
It works! Ans this is a good start to make me feel confident with Python, which I will use to develop MySQL Sandbox version 4. This cluster snippet will probably be made from scratch once the new architecture is in place. For now, it was enough to get the feeling of the language.

by datacharmer (noreply@blogger.com) at 28 June 2010 22:34

Grant Pannell

Creating a custom iOS4 IPSW with Game Center

iOS4 has GM’d, but Apple is yet to finalize their Game Center app. Currently, there are two different versions of iOS 4.0. Firstly, the publicly available version and an developer’s version. The developers version is identical to the official update, but includes the Game Center app for developers. Unfortunately, tools like redsn0w, sn0wbreeze and PwnageTool don’t support the developers IPSW. Fortunately, PwnageTool is incredibly customizable for patching firmware, so a few customizations makes it accept the developers IPSW.

1) Download and extract PwnageTool 4.01

2) View the package contents of PwnageTool.app and browse to PwnageTool.app/Contents/Resources/FirmwareBundles/<Your iPhone/iPod firmware version>.bundle

3) Within this bundle is an Info.plist, open it and make the following modifications to the following keys:

3a) RootFilesystem: needs to match the root FS dmg filename in the developer IPSW. Find this by opening the IPSW with a ZIP application and find the filename of the DMG that is approximately 300-400MB in size (it should be something like xxx-xxxx-xxx.dmg)

3b) RootFilesystemKey: each root FS is encrypted. Finding the key is difficult. Instead, search for the DMG filename in Google and you should find a few places that host the key for that particular DMG.

3c) RootFilesystemMountVolume: usually this is something like ApexXXXXX.iPhoneOS. Change this to ApexXXXXX.iPhoneDeveloperOS.

3d) SHA1: this needs to match the SHA1 of the developer IPSW. You can find this by using the command “openssl sha1 <IPSW filename>”

4) Now you can save the Info.plist, open up PwnageTool and select the developer IPSW. Hooray!

by DigitalDJ at 28 June 2010 10:47

Dave Hall

Multi Core Apache Solr on Ubuntu 10.04 for Drupal with Auto Provisioning

Apache Solr is an excellent full text index search engine based on Lucene. Solr is increasingly being used in the Drupal community for search. I use it for search for a lot of my projects. Recently Steve Edwards at Drupal Connect blogged about setting up a mutli core Solr server on Ubuntu 9.10 (aka Karmic). Ubuntu 10.04LTS was released a couple of months ago and it makes the process a bit easier, as Apache Solr 1.4 has been packaged. An additional advantage of using 10.04LTS is that it is supported until April 2015, whereas suppport for 9.10 ends in 10 months - April 2011.

As an added bonus in this howto you will be able to auto provision solr cores just by calling the right URL.

In this tutorial I will be using Jetty rather than tomcat which some tutorials recommend, as Jetty performs well and generally uses less resources.

Install Solr and Jetty

Installing jetty and Solr just requires a simple command

$ sudo apt-get install solr-jetty openjdk-6-jdk

This will pull down Solr and all of the dependencies, which can be alot if you have a very stripped down base server.

Configuring Jetty

Configuring Jetty is very straight forward. First we backup the existing /etc/default/jetty file like so:

sudo mv /etc/default/jetty /etc/default/jetty.bak

Then simply change your /etc/default/jetty to be like this (the changes are highlighted):

# Defaults for jetty see /etc/init.d/jetty for more

# change to 0 to allow Jetty to start
NO_START=0
#NO_START=1

# change to 'no' or uncomment to use the default setting in /etc/default/rcS 
VERBOSE=yes

# Run Jetty as this user ID (default: jetty)
# Set this to an empty string to prevent Jetty from starting automatically
#JETTY_USER=jetty

# Listen to connections from this network host (leave empty to accept all connections)
#Uncomment to restrict access to localhost
#JETTY_HOST=$(uname -n)
JETTY_HOST=solr.example.com

# The network port used by Jetty
#JETTY_PORT=8080

# Timeout in seconds for the shutdown of all webapps
#JETTY_SHUTDOWN=30

# Additional arguments to pass to Jetty    
#JETTY_ARGS=

# Extra options to pass to the JVM         
#JAVA_OPTIONS="-Xmx256m -Djava.awt.headless=true"

# Home of Java installation.
#JAVA_HOME=

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in /etc/default/jetty). Should contain a list of space separated directories.
#JDK_DIRS="/usr/lib/jvm/default-java /usr/lib/jvm/java-6-sun"

# Java compiler to use for translating JavaServer Pages (JSPs). You can use all
# compilers that are accepted by Ant's build.compiler property.
#JSP_COMPILER=jikes

# Jetty uses a directory to store temporary files like unpacked webapps
#JETTY_TMP=/var/cache/jetty

# Jetty uses a config file to setup its boot classpath
#JETTY_START_CONFIG=/etc/jetty/start.config

# Default for number of days to keep old log files in /var/log/jetty/
#LOGFILE_DAYS=14

If you don't include the JETTY_HOST entry Jetty will only bind to the local loopback interface, which is all you need if your drupal webserver is running on the same machine. If you set the JETTY_HOST make sure you configure your firewall to restrict access to the Solr server.

Configuring Solr

I am assuming you have already installed the Apache Solr module for Drupal somewhere. If you haven't, do that now, as you will need some config files which ship with it.

First we enable the multicore support in Solr by creating a file called /usr/share/solr/solr.xml with the following contents:

<solr persistent="true" sharedLib="lib">
 <cores adminPath="/admin/cores" shareSchema="true" adminHandler="au.com.davehall.solr.plugins.DHCSolrCoreAdminHandler">
 </cores>
</solr>

You need to make sure the file is owned by the jetty user if you want it to be dymanically updated, otherwise change persistent="true" to persistent="false", don't include the adminHandler attribute and don't run the commands below. Also if you want to auto provision cores you will need to download the jar file attached to this post and drop it into /usr/share/solr/lib.

sudo chown jetty:jetty /usr/share/solr
sudo chown jetty:jetty /usr/share/solr/solr.xml
sudo chmod 640 /usr/share/solr/solr.xml
sudo mkdir /usr/share/solr/cores
sudo chown jetty:jetty /usr/share/solr/cores

To keep your configuration centralised, symlink the file from /usr/share/solr to /etc/solr. Don't do it the other way, Solr will ignore the symlink.

sudo ln -s /usr/share/solr/solr.xml /etc/solr/

Solr needs to be configured for Drupal. First we backup the existing config file, just in case, like so:

sudo mv /etc/solr/conf/schema.xml /etc/solr/conf/schema.orig.xml
sudo mv /etc/solr/conf/solrconfig.xml /etc/solr/conf/solrconfig.orig.xml

Now we copy the Drupal Solr config files from where you installed the module

sudo cp /path/to/drupal-install/sites/all/modules/contrib/apachesolr/{schema,solrconfig}.xml /etc/solr/conf/

Solr needs the path to exist for each core's data files, so we create them with the following commands:

sudo mkdir -p /var/lib/solr/cores/{,subdomain_}example_com/{data,conf}
sudo chown -R jetty:jetty /var/lib/solr/cores/{,subdomain_}example_com

Each of the cores need their own configuration files. We could implement some hacks to use a common set of configuration files, but that will make life more difficult if we ever have to migrate some of cores. Just copy the common configuration for all the cores:

sudo bash -c 'for core in /var/lib/solr/cores/*; do cp -a /etc/solr/conf/ $core/; done'

If everything is configured correctly, we should just be able to start Jetty like so:

sudo /etc/init.d/jetty start

If you visit http://solr.example.com:8080/solr/admin/cores?action=STATUS you should get some xml that looks something like this:

<?xml version="1.0" encoding="UTF-8"?>
<response>
	<lst name="responseHeader">
		<int name="status">0</int>
		<int name="QTime">0</int>
	</lst>
	<lst name="status"/>
</response>

If you get the above output everything is working properly

If you enabled auto provisioning of Solr cores, you should now be able to create your first core. Point your browser at http://solr.example.com:8080/solr/admin/cores?action=CREATE&name=test1&i... If it works you should get output similar to the following:

<?xml version="1.0" encoding="UTF-8"?>
<response>
	<lst name="responseHeader">
		<int name="status">0</int>
		<int name="QTime">1561</int>
	</lst>
	<str name="core">test1</str>
	<str name="saved">/usr/share/solr/solr.xml</str>
</response>

I would recommend using identifiable names for your cores, so for davehall.com.au I would call the core, "davehall_com_au" so I can easily find it later on.

Security Note: As anyone who can access your server can now provision solr cores, make sure you restrict access to port 8080 to only allow access from trusted IP addresses.

For more information on the commands available, refer to the Solr Core Admin API documenation on the Solr wik.

Next in this series will be how to use this auto provisioning setup to allow aegir to provision solr cores as sites are created.

AttachmentSize
dhc-solr-plugins.jar3.31 KB
dhc-solr-plugins-src.tar.gz2.41 KB

by Dave at 28 June 2010 10:06

27 June 2010

Tim Connors

Climate Change==Earth tilt

I was given a new explanation for climate change yesterday. A couple of guys had heard from the old timers (read, senile old fools) that the sun used to set in a different location when they were kids living in the same house, so the Earth must be tilting. When I explained that astronomers can pick up unexpected changes at the level of about 1/1000 of 1/3600 of a 1 degree, and we haven't picked up any such changes over the last few decades, they explained that astronomers must just be in cahoots with the climate scientists.

I love small country towns.

In unrelated news, everyone here is expressing surprise that the latest poll has Labor moving ahead again, possibly in response to Julia Gillard being sworn in. "No one I knows will ever vote for her!".

Dammit, I wish I didn't live in a safe Nationals seat.

27 June 2010 04:43

25 June 2010

Jonathan Lange

Better than a pie chart

The bugs page for projects on Launchpad used to have a really ugly pie chart on them. It was a strange little graph,  useful because it helped you feel like you were making progress as you pushed bugs from New to Triaged to In-progress to Fix Committed and then off the chart completely with Fix Released.

Pie charts suck though. They use two dimensions to represent one dimension of data, and they are always 100% full. In the case of bugs, there was no way to tell from the pie chart whether there were more or fewer bugs than last week.

Inspired by some sketches from mpt, I decided to implement what I think would be a nice graph to have on Launchpad, but to do so using the webservice API. I've put some code up on lp:everyday, and there's an example of the graph for the whole Launchpad project.

The code works by sucking down all of the bug tasks associated with a project over the API, then storing them in a desktopcouch database, then using that to generate some timeline data. The graph is made using flot, which is excellent.

For those of you who care about Launchpad API details, I've recently added a parameter to searchTasks called modified_since that lets you fetch only bug tasks for bugs that have changed since a particular date. It makes syncing so much faster.

by jml (noreply@blogger.com) at 25 June 2010 12:26

Giuseppe Maxia

Quick start guides: MySQL cluster in 10 minutes

MySQL Cluster quick start guide Scared of MySQL Cluster?
Don't be. You may want to try the quick start guides that are available in the Cluster downloads page.
These guides are a step-by-step instructions set to create a simple cluster in one host.
Following the instructions, you will be able to shape up all the cluster components in 10 minutes or less. This will be far from production ready, of course, but it shows that cluster is not rocket science, and anyone can get started with it with a minimal time investment.
I tried the Linux instructions on my Mac, and it worked without need for any changes. Things may be different when you deploy a real set of servers on separate hosts, but it's a good start.
If I compare this guide with my first experience with MySQL Cluster in 2004, usability and stability have increased enormously.

by datacharmer (noreply@blogger.com) at 25 June 2010 11:16

Simon Horman

A few words on code style

[Kamakura]

I wish that I was writing about a new code for style but instead I'm writing about poor coding style. I'll keep it brief.

  1. If you have a very large function that is doing lots of things, its a sign that some refactoring might be in order. If not for yourself, to aid others who have to work on the code.
  2. If the things are interlaced for no apparently good reason, you've created a maintenance monster.

25 June 2010 02:29

23 June 2010

Bede Mudge

Open Source Support/Training Tools

Software training/support can be an expensive game. For third parties, it usually involves an initial outlay for the software, and regular software and hardware upgrades to keep current. Even for software vendors, the cost of support software can be prohibitive, and represents money that could be better spent on development.

Open source programs offer a way to supplement your toolkit for no cost, whilst tapping into the enthusiasm and support that this community offers. Freeware is a bit more of a crapshoot, but there are several quality programs out there.

In this blog I will be looking at a number of free and open source applications that I utilise regularly in a support/training environment. This is by no means the end of the options available – if there is a particular function you are looking for, it is well worth a quick look in Sourceforge.

Wink
Functionality: Screenshot capture/presentation software
Pros:
Easy to capture, annotate and publish a series of screen captures
Capture by time-period, keyboard shortcut or on any key/mouse action
Quick and polished presentations in flash or html
Cons:
Limited output formats
No HTML5
Limited annotation themes

Wink is a great program, and one I use very regular. Start a new project, set the program to record a screenshot every time you type or click the mouse, perform an action to demonstrate and voila! You have an easy to follow set of screenshots. The flash export is very solid and supports navigation buttons (useful for web demos, rapid navigation of steps). Getting the images out of the project generally requires saving to HTML and accessing the resulting images folder – not an elegant solution but hardly a time-waster.

The uses for this program are extensive, and the presentation streamlined and stable.

Camstudio

Functionality: Screen video capture tool
Pros: Stable
Configure screen capture area
Lightweight background capture
Cons:
Unable to configure screen capture area on the fly
Large video output

Camstudio is a great tool to use when you want a precise record of onscreen actions. It can be configured to capture a specified area of the screen, which I've used when working on web-page support to cut out the menu bars and Start bar. The inability to redefine the capture area on the fly or have it follow the mouse is a downside however.

A useful tool to have in your kit.

CDBurnerXP

Function: CD/DVD burning application
Pros: Simple interface
ISO burning and creation
Cons: None to speak of, but I have sometimes encountered a bug where an ISO file is deleted upon creation – couldn't find any reports of this from other users so could just be me.

This program is what it is – a lightweight program for creating CDs and CD images. Everyone has to create CD/DVD resources at some point and CDBurnerXP makes it a breeze.

qvPDF
Function: Print any document to PDF
There are a lot of programs out there for printing PDFs, but this app is a good choice. A new printer appears in your list, and sending to it gives the option to save to desktop, to file, email etc. Options for contrast, page size etc are easily configured. It does require ghostscript, so hop onto Sourceforge and install this first.

GIMP

Function: A graphics manipulation program with similar functionality to Photoshop.
Pros: Powerful image options
Cons: Extended options can be complicated to the novice

GIMP is a powerful tool for many reasons, but in the support environment it is useful for creating graphics, disk-covers, performing image conversions and adding text boxes. Yes, you could do most of this in mspaint or Paint .Net, but the results will be far more polished with the GIMP.

Vmware/Virtual Box

Function: Virtual desktop software
These programs allow you to create a self-contained complete operating system within a window on your desktop. Why is this useful? Because you can create a training environment completely tailored around a single program. You can test compatibility with all installed applications and not worry about breaking this with your day-to day activities. It breaks? Just reload from a backup in two seconds.

If you've seen someone performing support on their normal desktop, where things go wrong, emails and IM windows pop up unbidden and you can see their messy desktop with a picture of their kids in the background, you can see the logic of this kind of environment.

Creating virtual desktops isn't cheap, however. You still need a licence for Windows for each environment, as well as any software you may need. But the presentation and time-saving factor could be worth it.

Support Details

http://supportdetails.com/

Need to grab the basic specs from a user to support their OS and web browser? This site doesn't have everything, but is a quick way to get basic information from a novice.

Cacoo

http://cacoo.com/

This web program is in beta and I've only just started using it, but it is a very solid idea-mapping program with a wide range of sensible stock images. Worth checking out for flow charts, area maps, graphs and more.


In summary, the only thing you stand to lose with the above programs is time, and they are well worth the investment. Don't wait until you can afford the latest commercial support software - start achieving with what you want with your support/training environment today!

by Bane Macarbe (noreply@blogger.com) at 23 June 2010 19:22

Linux Australia

LUV Beginner's Workshop

17 Jul 2010 12:00
17 Jul 2010 12:00

It's time again for the LUV Beginner's Workshop. Come along on July 17. 

For more information, see http://luv.asn.au/2010/07/17

by cafuego at 23 June 2010 11:37

LUV Monthly Meeting

6 Jul 2010 19:00
6 Jul 2010 19:00
  • Stewart Smith - Photographers workflow: from the lense to the GIMP
  • Andrew Chalmers - State of the L4Ka Pistachio microkernel.

For more information, visit http://luv.asn.au/2010/07/06

 

by cafuego at 23 June 2010 11:32

20 June 2010

Giuseppe Maxia

Welcome googleCL

I am writing this blog post with Vim, my favorite editor, instead of using the online editor offered by blogger. And I am uploading this post to my Blogger account using Google CL a tool that lets you use Google services from the command line.
I am a command line geek, and as soon as I saw the announcement, I installed it in my laptop. The mere fact that you are reading this blog post shows that it works.

GoogleCL is an apparently simple application. If you install it on Mac using macports you realize how many dependencies it has and how much complexity it gives under the hood.
Using an easy to understand syntax, it allows you to access your blog, pictures, calendar, contacts, videos, and online documents at your fingertips.
For example, let's query my blog for partitioning:

$ google blogger --blog="The Data Charmer" --title=partitioning list "title,url"

Hmm. No results. The manual doesn't help much, but something happened during this query. The first thing ist that I was asked to authorize the script to access my blog, and that was done by activating a key that I got in the command line. So far, so good. The second thing was a message informing me that a default configuration file was created in my home directory. Looking at that file, I saw an option saying "regex = True". Aha! So the title supports regular expressions. Let's try:

$ google blogger --blog="The Data Charmer" --title=".*partitioning" list "title"
Holiday gift - A deep look at MySQL 5.5 partitioning enhancements
The partition helper - Improving usability with MySQL 5.1 partitioning
A quick usability hack with partitioning
MySQL 5.1 Improving ARCHIVE performance with partitioning

OK. This gives me everything with the word "partitioning" in the title. But I know that some titles are missing. Comparing with the results that I get online, I see that the titles where "partitioning" is capitalized are not reported. So the search is case sensitive. What I need to do is to tell the regular expression that I want a case insensitive search. Fortunately, I know how to speak regular expressions. Let's try again.

$ google blogger --blog="The Data Charmer" --title="(?i).*partitioning.*" list "title"
Holiday gift - A deep look at MySQL 5.5 partitioning enhancements
Partitioning with non integer values using triggers
Tutorial on Partitioning at the MySQL Users Conference 2009
The partition helper - Improving usability with MySQL 5.1 partitioning
A quick usability hack with partitioning
MySQL 5.1 Improving ARCHIVE performance with partitioning

Now I feel confident enough to do some changes to my online contents.
To create this blog post, I used some of googlecl capabilities. After I created an image, I uploaded it to my Picasa album using this command:

$google picasa post -n "Blogger Pictures" -t googlecl ~/Desktop/google_cl.png

Then I asked Picasa to give me the URL of the image:

$ google picasa list -n "Blogger Pictures" --query googlecl title,url_direct
google_cl.png,http://lh6.ggpht.com/_gVfZHGgf5LA/TBzjaKiJJvI/AAAAAAAAA74/dthDDhybsmc/google_cl.jpg

And then I inserted that URL in this blog post. Finally, I uploaded the blog post with this command:

google blogger --blog="The Data Charmer" --draft --title "Welcome googleCL" --tags="google,mysql,partitioning,command line,blogging" post ~/blog/welcome_googlecl.html


(Now writing online) And after I checked that the post was looking as I wanted it, I hit the "PUBLISH POST" button.
Welcome, GoogleCL!

by datacharmer (noreply@blogger.com) at 20 June 2010 14:29

Dave Hall

Site Refresh

Our site hasn't changed very much over the last 4 years, but the business has changed a lot. The biggest change was the (uneventful and long overdue) upgrade to Drupal 6 a few months ago.

During the last week or so the site has been updated and refocused. The major changes include:

This also signals our return to regular blogging. There are a few posts in the pipeline. There should be a good mix of drupal and sys admin posts in the coming weeks.

As always, feedback is welcome.

by Dave at 20 June 2010 07:56

18 June 2010

Sarah Sharp

xHCI spec is up!

I'm pleased to announce that the eXtensible Host Controller Interface (xHCI) 1.0 specification is now publicly available on intel.com. This is the specification for the PC hardware that talks to all your USB 3.0, USB 2.0, and USB 1.1 devices. (Yes, there are no more companion controllers, xHCI is the one host controller to rule them all).

Open, public documentation is always important to the open source community. Now that the spec is open, anyone can fully understand my Linux xHCI driver (although it's currently only compliant to the 0.96 xHCI spec; anyone want to help fix that?). This also means the BSD developers can implement their own xHCI driver.

Curious what a TRB or a Set TR Deq Ptr command is? Want to know how device contexts or endpoint rings work? Go read the spec!

18 June 2010 16:13

Paul McKenney

Stupid SMP Tricks: Lockless Access to Structure

Suppose that a pointer is compile-time initialized to reference a static instance of a structure, perhaps as follows:

struct foo {
    int a;
    int b;
};
struct foo static_foo = { 42, 17 };
struct foo *foo_p = &static_foo;

Because this is compile-time initialized, readers should not need use rcu_dereference().

Let's further suppose that at runtime, some CPU, task, or thread might set foo_p to NULL. Because we cannot free the compile-time-allocated static_foo, there is no need for RCU grace periods and RCU read-side critical sections.

These restrictions do simplify things. Readers might be as simple as:

p = foo_p;
if (p != NULL)
    do_something_with(p->a, p->b);


Does this work? Why or why not?

18 June 2010 05:06

17 June 2010

Robert O'Callahan

Thank God For Science

Lord, thank you for making the universe simple enough that we can understand the principles of how it works, from the smallest atom to the largest galaxy; that could have been otherwise. But thank you also for making the working out of those principles so wonderfully complex and beautiful; that could also have been otherwise.

Two of the more disturbing books I've read are China Miéville's Perdido Street Station and Iron Council. They give me a peculiarly strong impression of a world where there is no underlying order --- where real science is impossible. They're wonderful stories though --- highly recommended :-).

(Yes, I need to locate The Scar...)

17 June 2010 09:02

16 June 2010

Jeff Waugh

Happy 7th birthday, Linode!

Perhaps this is a familiar refrain for some readers… but I’ll say it again: Linode rock! On their 7th birthday, they are giving current and new users a huuuge RAM upgrade —  around 42% on average. From humble beginnings as a Linode 64 five years ago, my Linode 512 is now a Linode 768. Yikes!

Good news. Linode’s getting older.”
“… and Leon is getting laaaaarger!”

Already blessed with plenty of memory available for cache (which is very handy on a VM with relatively slow I/O), I now have even more headroom:

by Jeff Waugh at 16 June 2010 20:14

14 June 2010

Giuseppe Maxia

Free software and business in Sardinia

jAPSOn June 10th and 11th I attended two interesting workshops, both related to the Italian Free Software conference, and both organized by private institutions that have expanded their boundaries and created two quite lively international events.

The first event was held near Pula, in an innovation laboratory encased in a beautiful forest. The Technological Park of Sardegna Ricerche is a place where research and business boil together to produce new companies and to help consolidate existing ones.
The workshop was titled A community for a new business model and it was a show case of a dozen companies, both local and from abroad. After the presentations and a lovely open air lunch, there were 1-to-1 20 minutes meetings between companies, to dive deeper in technologies, ideas, and friendships. I must say that I enjoyed the event, not only because my presentation on MySQL community and values was quite well received, but also because I met interesting people and found some new ideas that need further exploration.
The main event, the fourth Italian free software conference, was not as exciting. The organizers decided to paint the event with local colors only, thus making it less interesting for me, as my job takes me around more abroad than in my own country. Oh' well. It's the Italian conference after all, and it has the right of being an all-Italian show. IMO, it's a pity, though. Exposure to external ideas is often beneficial, and I would have welcomed at least some openness beyond the national boundaries.
Anyway, the show was rescued by another workshop, organized by a local company, which was not afraid of venturing in international waters. The company is named Tzente, which means People in Sardinian, and true to their name they brought to the event several international companies, with Italian and foreign speakers. Also this event was very lively and interesting.
The hosts (Tzente) are a company to keep an eye on. They produce an open source software, called Java Agile Portal System or jAPS for short. In spite of the name, jAPS is much more than a portal. It's an integrated and versatile system to automate companies and public organizations. Their business model is simple: give the components away for free, thus building a community of users and testers, and sell integration and customization services either directly or through partners. Compared to many other startups, Tzente has a distinct advantage over the competition. They have customers. Not only they produce an excellent open source product, but their monetization strategy has already brought them large customers in Italy and abroad. They have partnerships with well known names (among which MySQL, Pentaho, Ingres, Red Hat) and I think they are going to grow fast. Good job, Tzente!
A personal note. At the first workshop I did my presentation in English, and I felt very comfortable. At the second workshop, I did the same presentation in Italian. I had the feeling that the English version was more effective. Probably I am traveling too much.

by datacharmer (noreply@blogger.com) at 14 June 2010 08:58

12 June 2010

Bob Brown

Mosgiel Centenary Celebrations – 1985.

I recalled an event I participated in back in 1985 which was the Mosgiel 100 year centenary parade. As a pupil of one of the local primary schools (Reid Park Primary) we were primed with dress of the era and a song that was nowhere near as bad as some radio jingles. We got to ride on a float down the main street, oh what joy!

“I’m a hundred year old kid – don’t you see,
I’m proud to see the end of our first century.
From 1885 through ’til 1985,
We’ll still be century children at our next centenary.”

Author unknown, can you help?

by GuruBob at 12 June 2010 11:45

09 June 2010

Selena Deckelmann

Starting at Emma

Today, I start at Emma.

I have some clues about what I’ll be up to – working on some big PostgreSQL databases, tearing into the infrastructure and discovering what makes their small company tick. Emma’s work with small businesses, and a focus on humane communication and consensus building completely drew me in.

And I’m looking forward to riding my bike everyday over on the office on Burnside!

Related posts:

  1. Change in the air
  2. PostgreSQL Conference Day 1
  3. Women Who Code – where are they?

by selena at 09 June 2010 16:00

Robert O'Callahan

Sleepless In Toronto

For some reason I often don't sleep very well on trips these days. So despite having had exhausting days and only about five hours sleep a night, I find myself awake in my hotel room at 5am reflecting on the last few days. Quite possibly I'm awake because the sheer excitement of this trip has my head buzzing. Maybe the good food, lack of exercise, and almost complete confinement to the hotel has thrown me off. I also suspect that over the years I'm becoming more dependent on home, my wife and children --- that's a good thing. Anyway, this has been a good time to take a mental break, to reflect, pray, recenter myself on God and update my blog :-).

It's been amazing to attend PLDI and the workshops after not having been to a major conference for five years. Even after five years away, I still feel like I fit right into this research community. I know a surprising large fraction of these people --- ex-colleagues and friends one or two degrees removed --- and more surprisingly, I remember most of them; normally my memory of faces and names is extremely poor. I've even found people I haven't met before who know who I am; that's gratifying, since I've been off the radar for so long and was never prolific.

Research trajectories have continued as one might have expected. Interest in parallelism has increased sharply, for obvious reasons. Interest in Web browsers and Javascript has increased even more sharply, since there was none among PLDI researchers five years ago. This is great; it gives me something to contribute to conversations in lieu of research results :-).

I am surprised to find that interest in parallelism has kept work on dynamic data race detection very active --- I thought that DRD work was being mined out in my day :-). There's not as much good evaluation on real systems as I'd like to see, though. I've also been sharing my anecdotal experiences with thread programming at Mozilla, which boil down to the observation that races and deadlocks are not actually a huge problem in themselves, since we try hard to minimize sharing between threads and keep communication patterns simple. The way threads hurt us is by adding nondeterminism, which can make reproducing even simple bugs much more difficult.

I think my LFX talk went pretty well. A few people told me it made them take notes and think, which is a good sign. I managed to get my slides online in spite of the hotel network being awful, at least in my room. The talk is basically a summary of what we do in Mozilla development, followed by requests for research in specific problem areas. One key idea I pushed is that the right place to introduce analysis results into the development process is probably during code review --- in other words, we should apply static and dynamic analysis tools to assist code review of specific changes, rather than in the traditional mode of analyzing large bodies of code to try to find important bugs. In general, finding bugs in code we've already shipped is less interesting, because either we've already found the bug, or the fact we haven't found the bug is evidence it's not important. Interestingly, Bill Pugh --- who has been pushing static bugfinding at Google for a few years now --- has independently come to similar conclusions.

I've also been advocating researchers work more on improving the process of fixing bugs, rather than just finding bugs, since it's bug fixing that is probably our true bottleneck for improving code quality. There's some sympathy, but it will take a while for that ship to turn.

Before I came here I wondered whether PLDI would give me an urge to get back into research. I certainly miss the people, the work and the environment, and it would be incredibly fun to get into research again, but so far nothing has challenged my view that my work at Mozilla is far more important than the impact I would have in research. The parable of the talents applies. It sure would be nice to figure out a way to push out a PLDI paper once in a while, though :-).

09 June 2010 09:18

WebM Landed

Our initial WebM support has landed on mozilla-central. The main holdup was ensuring that Google's VP8 source license was GPL-compatible; that has now been resolved to everyone's satisfaction. Good stuff!

Of course, this is only the beginning. Currently we're working on support for the 'buffered' attribute, and there are many other bug fixes and improvements to make.

09 June 2010 09:04

08 June 2010

Giuseppe Maxia

Performance gain of MySQL 5.1 InnoDB plugin

plugin performanceYou know already that InnoDB in MySQL 5.5 has great improvements in performance and scalability. You will have to wait a few months for that, though, because MySQL 5.5 is not GA yet.
But if you need some extra performance in MySQL 5.1, you may want to use the Innodb Plugin instead of the built-in one. As of version 5.1.47, the Innodb plugin is of GA quality, and it comes with a good out-of-the-box improvement compared to the built-in engine.

To test my assumptions, I used one of my test Linux servers to perform a sysbench on 5.0.91, 5.1.47 built-in and plugin, and 5.5.4. The MySQL servers were all configured with
innodb_buffer_pool_size=5G

MySQL 4.1.47 was tested both as out-of-the-box, and with the plugin enabled.

ignore_builtin_innodb
# note: the following statements must go all in one line
plugin-load=innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.so;innodb_locks=ha_innodb_plugin.so;innodb_lock_waits=ha_innodb_plugin.so;innodb_cmp=ha_innodb_plugin.so;innodb_cmp_reset=ha_innodb_plugin.so;innodb_cmpmem=ha_innodb_plugin.so;innodb_cmpmem_reset=ha_innodb_plugin.so

default-storage-engine=InnoDBinnodb_file_per_table=1
innodb_file_format=barracudainnodb_strict_mode=1

The test was the same for all the servers. A simple sysbench both read-only and read/write on a 1M records table.

sysbench \
--test=oltp \
--oltp-table-size=1000000 \
--mysql-db=test \
--mysql-user=$USER \
--mysql-password=$PASSWD \
--mysql-host=$HOST \
--mysql-port=$PORT \
--max-time=60 \
--oltp-read-only=$ON_OFF \
--max-requests=0 \
--num-threads=8 run

What came out is that, by using the innodb plugin instead of the built-in engine, you get roughly 15% more in read-only, and close to 8% in read/write.


Note that 5.5. enhancements are more impressive in scalability tests with more than 8 cores. In this server, I have just tested a simple scenario.

I did some more testing using "ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=X" in the InnoDB table, where X changed from 4 to 16. But sysbench didn't seem to play well with compression. For low values of KEY_BLOCK_SIZE, you actually get a much worse result than the built-in engine. I have yet to figure out how I would use this compressed InnoDB in practice.

by datacharmer (noreply@blogger.com) at 08 June 2010 00:07

07 June 2010

Paul McKenney

Stupid RCU Tricks: Synchronizing With External State

This puzzle came up at a recent ISO SC22 WG14 standards–committee meeting (for the C language).

Suppose you have an array of three RCU-protected structures. At any given time, one of them is the current structure that will be used by RCU readers. This means that there is a global pointer that will be pointing to one of the elements of this array, thus designating it as the current element. (And yes, a grace period must elapse before a given element is reused.)

But suppose that there is another global integer whose value must be kept consistent with the contents of the current element — to keep things trivial, let's assume that the value of this global integer must be twice that of an integer within the current structure.

The data structures might be set up as follows:

struct rcu_protected {
  int a;
};
struct rcu_protected elements[3];
struct rcu_protected *current = &elements[0];
int consistent;  /* must be 2 * current->a */

How can this be accomplished?

07 June 2010 04:00

06 June 2010

Jeff Waugh

Why I’m excited about Palm’s webOS

I have been a Palm fan for a very long time. My first PDA was a PalmPilot Professional, which eventually led to the m100 (AA batteries!), my first Palm OS phone, Pia’s hand-me-down Tungsten W, the Treo 650 and finally, my last (real) phone: the Treo 680. I’m even vaguely sad that I missed the final outing of Palm OS on the Centro.

I was disappointed when Palm split into two companies, but perhaps it was ultimately a good thing… PalmSource became victim to an almighty corporate Sarlacc, to be digested slowly over a thousand years, while Palm became nimble and determined to win out of necessity.

The ill-fated Foleo was a public relations disaster, but in retrospect, a concept way ahead of its time — consider the explosion of the netbook market soon after, and where the iPad is today (albeit generations of mobile technology beyond the capabilities of the Foleo).

Which brings us to webOS, released a year ago today on the Palm Pre. Having waited impatiently all that time (often running to the emulator to get my fix), I finally acquired one last week.

It is a truly delicious user experience. I won’t go into too much detail on this front — as with most things, you must use it — suffice to say that it carries the soul of Palm OS in a 21st century vessel.

(Okay, one thing on this: When it comes to the basic functions of a smart phone — calls, and contacts — I’m convinced this thing has both the iPhone and HTC’s Sense UI for the Desire beat. Synergy is seamless and awesome.)

Despite it’s youth, webOS is an incredibly promising and fast-moving platform… and in stark contrast to other “mobile Linux” competitors, it’s not just a bunch of goofy shit piled on top of a heavily molested Linux kernel: What runs on your phone is an utterly recognisable Open Source stack and an utterly recognisable web stack. Sure, there’s a layer of proprietary Java gumpf shoved between the good bits, but even that is getting thinner.

To some extent, webOS is the GNOME Mobile platform with a user interface and services layer built for the web generation. It’s D-Bus, GStreamer and PulseAudio under WebKit. Mojo applications, written in JavaScript, talk to services via JSON APIs, and native apps integrate into the web-based user interface via — get this! — NPAPI plugins.

Crucially, webOS will grow and improve along with the web. Everything you’re seeing in the web world — faster JavaScript, hardware accelerated CSS animation, massive growth of the JavaScript ecosystem (consider all the frameworks, CommonJS modules, nodejs event-based server, etc.) and all the incredible new APIs popping up — will find a place in webOS. Check out the Palm Developer Day keynote and podcast from Dion Almaer and Ben Galbraith for more on the near future of webOS.

On the awesomeness of Dion and Ben at Palm? I’ll just quote James Governor:

Palm tried to use Apple’s trick of secrecy first rather than investing heavily in developer good will and playing the open card. It didn’t work. Palm realised its error last year and did something incredibly smart – it hired Dion Almaer and Ben Galbraith to develop a new, web-savvy, strategy around its platform.

Using open technology as the bricks and mortar of a platform is not particularly amazing of course. Everyone’s doing it. But Palm are making friends and influencing developers by having an impressively open attitude to devices, too. Your store-bought phone — with a bit of Konami code action and the freely downloadable webOS SDK — is already “rooted” for you. Just log in. ps afx? cat /proc/cpuinfo? top? Your “first command” habit is most likely catered for. :-)

That openness has encouraged an incredible amount of community activity. The most Open Source savvy group dedicated to the platform is WebOS Internals. Initially, they published all sorts of juicy information about the innards of webOS and the Pre… but have now rallied around distribution of “home brew” Open Source patches and apps, using their own package management interface, Preware. They’ve even published an updated kernel which supports overclocking, temperature sensors and more advanced power management than the original! It’s wonderful stuff.

Then HP bought Palm.

Despite some messaging hiccoughs (now resolved), this is an incredibly exciting move for Palm and webOS fans. I’m hoping it gives Palm the reach, resources and relationships to go global, accelerate improvement of the platform, and ship some terrific new hardware to make their software shine… that said, it better not be an almighty corporate Sarlacc!

Damn it feels good to be a Palmster.

by Jeff Waugh at 06 June 2010 20:28

Adam Shand

At rest in Nusa Lembongan

There's a lazy insolence in the way the locals move slowly about their tasks. It's difficult for me to tell if it's a form of disinterest with their activity or a measured conservation of energy. Perhaps as the young men in front of me leisurely drag air tanks through the waves they are simply wishing that they too were out playing in the ocean like the near by children. Certainly their bodies don't speak of a easy life.

Nusa Lembongan is the first place I've felt at all at ease. It's still full of tourists but at least they are my age and friendly, unlike the crowds of dour faced Australians in Kuta and the smiling but reticent retirees in Sanur.

Down the beach from where I'm drinking coffee and watching the morning unravel, three kids are playing in the waves on a broken surfboard. Taking turns skimming headlong into an oncoming wave to catapult head over heels into the water. Each wave brings shrieks of laughter from their friends and I regret leaving my camera back in my room a little more. More then anything I think it's the happiness of the children that puts me at ease, I'm glad the we're staying here a few days.

Across from me, two men have been sitting in a boat named Chilli for the last hour. They are waiting for something, but it's not clear what. Perhaps a diving tour? A couple of boats down a young European woman is being given a scuba lesson by her boyfriend. Periodically they disappear only to resurface a few minutes later behind a different boat.

I'm fascinated by the little differences. We haven't been slumming it and each place has had the full range of modern conveniences, but with caveats. At one the shower points at my navel and sprays water everywhere from the tap. Other one we think doesn't have hot water until we realise it simply takes the duration of a shower to warm up. Many are just a combined "wet room" which shower, toilet and sink all cohabitating in a tangle of pipes and levers. Some provide soap, some towels, none have bathmats and most are slowly disintegrating. I like the differences, each reflecting the biases of the owner and towns we're staying in.

This is the morning of my eighth day of my trip and while I'm settling into the pace and realities, already I'm wondering why I'm doing this. I feel just as out of place amongst the hard bodied locals and touring surfers as I always have. What do I want from this trip, am I chasing a childhood dream? I can clearly imagine friends and family rolling their eyes as I over think this as well, but its in my nature to try and understand.

by Adam Shand at 06 June 2010 15:31

Sex, Trash & Transport

I didn't expect the trash. The constant mosaic of excrement, plastic bags and bottles, cigarette butts, food scraps, old clothes and candy wrappers. I'm not sure why I didn't expect it, but I didn't. In my own country this neglect makes me angry, here I have no right to anger and instead it leaves me numb.

I'm getting used to being measured at every encounter, my new friend quickly determining the fastest route to my callow wallet. Everyone knows somewhere I can stay, can drive me somewhere or has a pretty girl who will blow my mind. It's easy to get overwhelmed, so I've learned to step back, smile and keep walking. This seems better understood then any plea of "no", which is taken as the opening bid in the coming negotiation. I admire their collective organisation, once convinced my wallet isn't making an appearance, they are generous with advice about where to go and what to see. They have the network effect down pat, knowing that everything comes back around eventually.

The smell of rubbish is the backdrop for the constant offers of girls and cries of "transport". A Balinese taxi driver tells me about his wife and children before regaling me with tales of the western women he's fucked. A bemo driver boasts of his conquests, disdainfully describing the whores as Javanese, while in the same breath, offering to find me a nice Java girl. In the hotel pool, a traveling Malay salesman asks to hold our hands and describes in detail the perfect nipples of the girl sleeping in his room. He offers to introduce us to her and while two Canadians laugh and joke, psyching themselves up to the occasion, I slip away to my room.

It's a family affair, mothers and boyfriends watch from the corners of alleyways and bars as their girls whore themselves. Their eyes display a nonchalance which leaves me distinctly uncomfortable and confused. Husbands are texted requesting a pick up before running off into the darkness with their latest catch. The offers are so pervasive, and the environment so accepting, that it's impossible not to be curious. To wonder about these girls with their slender hips and perfect nipples, to imagine what an hour spent with them might be like. It's easy to see how men who would never be tempted at home, end up paying for the girl in their bed.

Today the Bali part of the trip ends. We travel to Gillimanuk to catch the ferry to Banyuwangi, the eastern most point of Java. The last two weeks have been spent making friends, swimming, riding scooters and surfing; but most importantly getting used to the routines of a traveler in a new country.

It's time to move.

by Adam Shand at 06 June 2010 15:12

Lana Brindley

Time to tell Mum about privilege, EFA!

I have loved and supported Electronic Frontiers Australia (EFA) for many, many years. The love affair began back in uni, and coincided with my discovery of open source software. The power of freedom (as in speech) was heady and strong back in those days. Today, in many ways, it still is. Right now the fight is not so much against the big software companies though (although that's still up there),

by noreply@blogger.com (Loquacity) at 06 June 2010 12:32

04 June 2010

Jonathan Oxer

Building a Status Screen, part 3: Display

This is the final installment of a 3-part series on building a visual status screen, or dashboard, for your company. If you missed the previous parts you can find it at:


 Building a Status Screen, part 1: Hardware

 Building a Status Screen, part 2: Collecting Data


In the first installment I showed how to physically mount LCDs on a wall, and in the second I showed how I go about collecting data from various systems (both internal and external) in a central location.


The final step is taking that data and displaying it on the status screens, and then updating the display whenever the data changes. There are a huge number of ways this could be done depending on what sort of system you are accustomed to working with, but since I normally do web application development I decided to take the simple way out and make the status screens using dynamic web pages. Yes, when I'm swinging this PHP hammer every problem looks like it could be solved with a web page!


I'll start by showing you the simplest, most brute-force approach that should be easy to get going. It's a bit crude but it'll get the job done, and later I'll mention some enhancements that can make it more elegant.


In the last installment we ended up with all the relevant data being stored in simple text files on a central machine. With all the data in one place it's easy to create a dynamic web page that is served by that machine and displays the data neatly formatted to suit your LCDs, and by displaying it in a browser like Google Chrome that can run in full-screen mode it can look really pretty.


You'll need some kind of scripting system running on your server to generate dynamic web pages, and there are many alternatives so I won't go into detail here. I'm using PHP but you could do the same thing with Perl, Python, ASP.net, or many others. It's really up to you.


Let's start with just about the simplest case possible, which is a page that loads a single value (the current temperature, in this case) from a text file on disk, displays it, and reloads itself periodically.



<html><head><title></title>
<meta http-equiv="refresh" content="10" />
</head>
<?php
$temperature = file_get_contents( "/home/statusscreen/data/data-weather-temp" );
echo "The temperature is " . $temperature . "&deg;";
?>
</body></html>

That's it! Not so hard, right? If you put that code into a file called something like "screen.php" inside the web tree on your server and load it up in a browser, you'll see a mostly blank page with the current temperature displayed on it - assuming your data collector script is updating the "data-weather-temp" file as described in Part 2.


The "meta" tag at the top is a special tag that tells the browser to reload the page periodically, and in this case it'll reload every 10 seconds. If you leave the page open in your browser and alter the value in the "data-weather-temp" file you'll see the change reflected in the web page after a few seconds.


Of course this is a very minimal example, and if you've done any programming it'll be obvious that there are many ways to improve the code above: for example, before attempting to retrieve the contents of the file there should be a check to make sure the file actually exists. Then once the value has been extracted it should probably be cast to a numeric value just in case something nasty ends up in the file. The page itself will also be totally unstyled, simply displaying default black text in the top left corner of the page on a default white background. You'll also notice that the entire page is reloading every single time, when really it's only the temperature value that should need to be fetched from the server.


It's a start though, and with some further development it can end up as quite a decent system. To test it you can open the Google Chrome browser on the computer connected to your wall-mounted status screen, press F11 to go to full-screen mode, and leave it open. The page will continue to reload every 10 seconds so by editing the script on the server you'll be able to see the effect of your changes almost immediately. You can also preview the page directly on your laptop or desktop, of course, but having it open on the machine and screen combination that you'll ultimately leave running can be handy because it may have a different resolution to your own computer. Normally when developing web pages it's a good principle to structure it in such a way that it looks good in different browsers at different resolutions, but in this case you're creating a web page that will only ever be loaded up by one computer running that specific browser at a known resolution, so you can tune it to look exactly the way you want without caring about how well it works on other computers.


The next step is to expand the script to include other bits of data that you want to display on the same screen. In my case I wanted a simple 4x3 grid layout for one of the screens so it made sense to put the different parameters into a table. The result could be something like this:



<?php
$datapath = "/home/statusscreen/data";
$temperature = file_get_contents( $datapath . "/data-weather-temp" );
$brillianz = file_get_contents( $datapath . "/data-ops-br" );
$sb4 = file_get_contents( $datapath . "/data-ops-sb4" );
$projnum = file_get_contents( $datapath . "/data-projects-projnum" );
//(etc)
?>
<html><head><title></title>
<meta http-equiv="refresh" content="10" />
</head>
<table>
<tr>
<td><?=$temperature?></td>
<td><?=$brillianz?></td>
<td><?=$sb4?></td>
<td><?=$projnum?></td>
</tr>
</table>
</body></html>

That's functional, but still ugly. We're still dealing with default text on a white page in an unstyled table.


But now you can apply some styling to make it look pretty. By putting class names and IDs on the various elements and loaded an external CSS file you can now make your plain page look as classy as you like. In my version I applied styles to just about everything using CSS: the font size, font colour, text shadow, page background, borders and margins, and cell backgrounds you see in photos of the screens are all just styled with CSS.


At this point you have a system that is not only perfectly functional, but is actually starting to look pretty sweet as well. You could leave the system running exactly like this and be happy.


If you want to take things a little further though there are many things you can do. For example, rather than load the entire page every time you could have the page only load once and then use AJAX to periodically fetch and update data for the individual cells. In my version I have a bunch of Javascript that fetches values and then applies a "fade" effect to update from one value to the next, making the visual transition much smoother than a jarring reload of the whole page.


Because I have three screens on the wall I actually have three pages defined. One uses the simple grid layout described here, while one loads a web-based energy monitoring system created at IVT to display real-time power consumption in different parts of the building, and another displays bar graphs using data collected from various internal systems such as our bug tracker and package autobuilders. What you want to display is totally up to you.


The energy monitoring system is actually based on slightly different technology to what I've described here. It's still a web page, but it uses Adobe Flex to display real-time data that updates dynamically without having to reload the whole page.


I've deliberately become more vague towards the end because this is where you really have to decide what data you want to display and how you want it to appear. I built a system that suits my requirements, but it may not suit yours.


If you've built a status screen for your company I'd love to hear about it, so please drop me an email!


04 June 2010 04:43

03 June 2010

Selena Deckelmann

Setting up a PDXAPI instance

Today I spent a little time setting up a PDXAPI instance of the CivicApps data. There are a few different tools out there for grabbing the data and loading it up, and so I’m documenting the basic steps here for setting up a spatial SQLite using @lokkju’s python projects.

hg clone https://pyspatialite.googlecode.com/hg/ pyspatialite

cd pyspatialite
mv setup.cfg.OSX setup.cfg
python setup.py build
sudo python setup.py install

cd ..
cd pyod

hg clone https://pyod.googlecode.com/hg/ pyod

# unsatisfied dependency!
sudo easy_install pyyaml

pypython fetcher.py

This creates a 1 GB sqlite database called ‘test.sqlite’.

Next, I’ll be testing out loading this into a CouchDB instance and maybe playing with Max Ogden’s initial PostGIS export.

Related posts:

  1. Q&A about Hot Standby

by selena at 03 June 2010 23:26

Jeff Waugh

Ubuntu’s Bleeding Edge, an act of niche journalism

I’ve been struggling to write anything of consequence at all recently… but apparently the best way to get back on the horse is to write what you know, so I have embarked on what might be described as an act of niche journalism.

Ubuntu’s Bleeding Edge is a new blog about the action, intrigue and occasional romance of the Ubuntu development branch, for everyone who thinks Release Day parties are only meant to celebrate the start of a new release cycle. It’s an easy way to keep up-to-date about the goings-on of Maverick Meerkat… particularly if the idea of running an ever-changing, alpha-quality operating system scares the bejesus out of you.

The story so far…

It’s a nice way to tackle a problem in bite-sized chunks, have a ready excuse to write regularly, and recall how much I used to enjoy those six month roller-coaster release cycles. It sure helps to have an enjoyable subject that I know pretty well, too!

Check it out, and subscribe to the feed if you’re keen to keep up with the ups and downs of Maverick.

Update: My latest devel branch update covers the removal of aptitude from the default desktop install and the switch to building for i686, both of which have become minor controversies.

by Jeff Waugh at 03 June 2010 23:16

Stewart Smith

New CREATE TABLE performance record!

4 min 20 sec

So next time somebody complains about NDB taking a long time in CREATE TABLE, you’re welcome to point them to this :)

  • A single CREATE TABLE statement
  • It had ONE column
  • It was an ENUM column.
  • With 70,000 possible values.
  • It was 605kb of SQL.
  • It ran on Drizzle

This was to test if you could create an ENUM column with greater than 216 possible values (you’re not supposed to be able to) – bug 589031 has been filed.

How does it compare to MySQL? Well… there are other problems (Bug 54194 – ENUM limit of 65535 elements isn’t true filed). Since we don’t have any limitations in Drizzle due to the FRM file format, we actually get to execute the CREATE TABLE statement.

Still, why did this take four and a half minutes? I luckily managed to run poor man’s profiler during query execution. I very easily found out that I had this thread constantly running check_duplicates_in_interval(), which does a stupid linear search for duplicates. It turns out, that for 70,000 items, this takes approximately four minutes and 19.5 seconds. Bug 589055 CREATE TABLE with ENUM fields with large elements takes forever (where forever is defined as a bit over four minutes) filed.

So I replaced check_duplicates_in_interval() with a implementation using a hash table (boost::unordered_set actually) as I wasn’t quite immediately in the mood for ripping out all of TYPELIB from the server. I can now run the CREATE TABLE statement in less than half a second.

So now, I can run my test case in much less time and indeed check for correct behaviour rather quickly.

I do have an urge to find out how big I can get a valid table definition file to though…. should be over 32MB…

by Stewart Smith at 03 June 2010 07:40

Robert O'Callahan

Not Implementing Features Is Hard

Sometimes we take heat for deliberately not implementing certain Web platform features. Three significant examples are SVG Fonts, WebSQLDatabase and H.264 in <video>.

SVG Fonts --- at least the subset implemented in Opera and Webkit --- don't offer anything significant over downloadable Opentype (or WOFF) fonts ... except the last three points of the Acid3 test :-(. And people keep asking for it "because it's in SVG 1.1". But I don't think those are good enough reasons on their own to make SVG Fonts an essential part of the Web platform.

WebSQLDatabase has a completely different problem. It's the only way of doing structured, queryable client-side storage in any browser right now, and a lot of mobile apps targeting Webkit-based browsers use it. The problem with WebSQLDatabase is that it isn't good for the Web, because it depends completely to the semantics and query planning of SQL as implemented by SQLite --- which is a somewhat quirky SQL implementation.

The pros and cons of H.264 have been well documented in this blog and elsewhere...

SVG Fonts and WebSQLDatabase would actually be very easy for us to implement. SQLite is already embedded in Firefox and even exposed to non-Web Javascript. The SVG Fonts subset implemented by Opera and Webkit is very simple. We could even support H.264 by hooking into specific codecs that may be present on various platforms (I think; the licensing for platform codecs is rather vague). It's certainly tempting to just cave in, implement these features, and move on. The people who complain that we're lazy, stubborn, or just wrong would move on or find something else to complain about. If we were only interested in market share, that's definitely what we'd do. But I honestly think we're doing the Web a service by resisting these things.

I think not implementing certain features is one of the hardest and most altruistic things we do.

Update I should also point out that we're not just exerting "stop energy" here; for each of these features that we're not adding, we are promoting superior alternatives --- namely WOFF, IndexedDB, and WebM.

03 June 2010 04:06