Planet Linux Australia
Celebrating Australians & Kiwis in the Linux and Free/Open-Source community...

July 02, 2009

DomainKeys and OpenSSL have Defeated Me

I have previously written about an error that valgrind reported in the STL when some string operations were performed by the DKIM library [1]. This turned out to be a bug, Jonathan Wakely filed GCC bug report #40518 [2] about it, Jonathan is one of many very skillful people who commented on that post.

deb http://www.coker.com.au lenny gcc

I’m still not sure whether that bug could actually harm my program, Nathan Myers strongly suggested that it would not impact the correct functionality of the program but mentioned a possible performance issue (which will hurt me as the target platform is 8 or 12 core systems). Jaymz Julian seems to believe that the STL code in question can lead to incorrect operation and suggested stlport as an alternative. As I’m not taking any chances I built GCC with a patch from Jonathan’s bug report for my development machines and then built libdkim with that GCC. I created the above APT repository for my patched GCC packages. I also included version 3.4.1 of Valgrind (back-ported from Debian/Unstable) in that repository.

Nathan Myers also wrote: “Any program that calls strtok() even once may be flagged as buggy regardless of any thread safety issues. Use of strtok() (or strtok_r()) is a marker not unlike gets() of ill thought out coding.” I agree, I wrote a program to find such code and have eliminated all such code where it is called from my program [3].

I think it’s unfortunate that I have to rebuild all of GCC for a simple STL patch. My blog post about the issue of the size and time required to rebuild those packages [4] received some interesting comments, probably the most immediately useful one was to use --disable-bootstrap to get a faster GCC build, that was from Jonathan Wakely. Joe Buck noted that the source is available in smaller packages upstream, this is interesting, but unless the Debian developers package it in the same way I will have to work with the large Debian source packages.

I have filed many bug reports against the OpenSSL packages in Debian based on the errors reported by Valgrind [5]. I didn’t report all the issues related to error handling as there were too many. Now my program is often crashing when DomainKeys code is calling those error functions, so one of the many Valgrind/Helgrind issues I didn’t report may be the cause of my problems. But I can’t report too many bugs at once, I need to give people time to work on the current bug list first.

Another problem I have is that sometimes the libdkim code will trigger a libc assertion on malloc() or free() if DomainKeys code has been previously called. So it seems that the DomainKeys code (or maybe the OpenSSL code it calls) is corrupting the heap.

So I have given up on the idea of getting DomainKeys code working in a threaded environment. Whenever I need to validate a DomainKeys message my program will now fork a child process to do that. If it corrupts the heap while doing so it’s no big deal as the child process calls exit(0) after it has returned the result over a pipe. This causes a performance loss, but it appears that it’s less than 3 times slower which isn’t too bad. From a programming perspective this was fairly easy to implement because a thread of the main program prepares all the data and then the child process can operate on it – it would be a lot harder to implement such things on an OS which doesn’t have fork().

DomainKeys has been obsoleted by DKIM for some time, so all new deployments of signed email should be based on DKIM and systems that currently use DomainKeys should be migrating soon. So the performance loss on what is essentially a legacy feature shouldn’t impact the utility of my program.

I am considering uploading my libdomainkeys package to Debian. I’m not sure how useful it would be as DomainKeys is hopefully going away. But as I’ve done a lot of work on it already I’m happy to share if people are interested.

Thanks again for all the people who wrote great comments on my posts.

Dogfooding a pastebin

http://pastebin.flamingspork.com/

A pastebin running Drizzle and  the Drizzle PHP Extension (which is on top of libdrizzle).

Look Mum, no bugs!

I recently encountered a bug in RhythmBox where, if you rename a directory, it thinks that all the files in the old directory have disappeared and there's a whole bunch of new files. You lose all the metadata - and for me that was hours of ratings as I worked my way through my time-shiftings of the chillout stream of Digitally Imported. Worse, if RhythmBox was running during the rename, when you try to play one of those files that has 'gone missing' it will just say "output error"; when you restart it because (naturally) you think it's borked its codecs or something, it then removes all those previous entries (giving you no chance to fix the problem if you'd just renamed the directory in error).

I decided to try to be good, so I found the GNOME bugzilla and tried to search for "directory", or "rhythmbox", or anything. Every time it would spend a lot of time waiting and then just finish with a blank page. Deciding that their Bugzilla was hosed, I went and got a Launchpad account and logged it there. Then, in a fit of "but I might have just got something wrong", I went back to the Bugzilla and tried to drill down instead of typing in a keyword.

Lo and behold, when I looked for bugs relating to "Rhythmbox", it turned up in the search bar as product:rhythmbox. Sure enough, if I typed in product:rhythmbox summary:directory then it came up with bugs that mentioned 'directory' in their summary line. If you don't get one of those keywords right, it just returns the blank screen as a mute way of saying "I don't know how to deal with your search terms".

So it would seem that the GNOME bugzilla has hit that classic problem: developer blindness. The developers all know how to use it, and therefore they don't believe anyone could possibly use it any differently. This extends to asserting that anyone using it wrong is "obviously" not worth listening to, and therefore the blank page serves as a neat way of excluding anyone who doesn't know the 'right' way to log a bug. And then they wonder why they get called iconoclastic, exclusive and annoying...

Sadly, the fix is easy. If you can't find any search terms you recognise, at least warn the user. Better still, assume that all terms that aren't tagged appropriately search the summary line. But maybe they're all waiting for a patch or something...

My top 10 songs of all time

So I didn’t actually get to vote in the Triple J top 100 of all time. I feel really stupid to have missed it! I was just asked (live on radio) whether I had voted and I stupidly said yes intending to get straight off the phone and onto the voting, but it was closed! So below are my top 10 songs of all time, some for technical reasons, all for emotional. Thought it might be of interest to some :)

Meme time!

In no particular order:

  • Gorecki – Lamb. Our wedding  song :) About finding that person that just completes you, that complements and helps you want to be a better person. A beautiful song and a beautiful voice.
  • Smells Like Teen Spirit – Nirvana. Changed everything, and yet so simple. Influenced a generation.
  • Shame – Stabbing Westward. My favourite angsty teenage song. Once went to a Live (the band) concert just to see Stabbing Westward play support, and then left ;) The man has an incredible voice.
  • H – Tool. I love a lot of the older Tool music, this particular one reminds me of  a close friend who died very young in very unfortunate circumstances.
  • We’re in this together – Nine Inch Nails. I love pretty much every NIN song, but this one really talks to me about regardless of everything going on, none of us are truly alone.
  • Fade to Black – Metallica. One of their best songs, and one that influenced me to learn guitar in the first place.
  • Burn – The Cure. an amazing (and dark) song from The Crow soundtrack. One of their best in my opinion. Admittedly takes me back to school :)
  • Cornflake Girl – Tori Amos. Beautiful, powerful and disturbing. Worth looking into the deeper meaning.
  • Classical Gas – Mason Williams. An incredible guitar piece that puts me in an almost meditative state when I play it. Technically challenging but also a joy to play and listen to.
  • Pathetique – Beethoven. Such an exquisite piano piece, and when played well covers about the entire scope of human emotion. Fun to play too, but I’ve yet to master it :)

There are so many more songs I love, and I’m sure given more time I’d rejig this another dozen times. So I’ll leave it there :) Apart from one last honorary mention:

  • Space Cadet – Kyuss. Couldn’t leave this off. This 3 person rock band had such a big sound, such a complex and incredible mix. Great fun to play on the bass. Demon Cleaner also very worth listening to.

Twitter Updates for 2009-07-02

  • It's not just Canberra @sabman, have a look at Geelong http://bit.ly/vhhEh

    :-) #osm #
  • Which kernel are you using @timfaas ? There was a kernel bug that caused a big regression in sqlite performance from 2.6.26-28, fixed i … #
  • RT @774melbourne – 'BOM: "Batten down the hatches!" Severe weather heading across the state, storms to hit Melbourne from 11pm.' #
  • RT @alecmuffett – history of abermud: http://bit.ly/19jNGw #

Powered by Twitter Tools.

This post syndicated from the website of Chris Samuel:

Twitter Updates for 2009-07-02

Blathering for Friday, 03 July 2009

05:46: Mikal shared: qw-cheatsheet-print-zoom.jpg

    Let's say you have to recreate modern technology from scratch... Happens to me all the time.






Tags for this post: blather(S) Comment RSS with no blather

[comp/linux] A regression for WPA2

So for a while I was wondering why I could not use the ANU's WPA2 secure network from my laptop. I had heard reports that some Ubuntu hardy machines had worked. I run Debian unstable and a kernel.org 2.6.29.3 on this laptop.

I thought maybe there was some problem with my laptop hardware and maybe the iwl4965 chipset simply would not do it under Linux. However searching online suggested I should be able to make it do WPA2.

Thinking maybe the Ubuntu people had done it right and Debian was missing something I tried booting a Jaunty live cd. I also discovered the rather neat feature of suspend to disk (hibernate) in that you can hibernate your computer, boot off a live cd, use it, reboot and have your existing session come right back up normally on the next boot.

Anyway I booted up Jaunty and tried to authenticate, still failed in a similar manner to my Debian installation. Out of curiosity as I had heard of hardy working I booted my laptop on a hardy live cd. So network manager and iwlagn driver combined on either Debian sid or Ubuntu jaunty had failed to authenticate. Ubuntu hardy on the other hand, using an older version of network manager and the iwl4965 driver in the kernel worked fine. WPA2 authentication and use on the ANU Secure wireless network.

So now I need to find out where the regression has happened that means WPA2 is broken in more recent releases of the software (kernel drivers, wpa supplicant, network manager) on either Debian or Ubuntu.

Say Goodbye to Reboots with Ksplice

My latest article for Linux Magazine is about Ksplice, the awesome new technology which lets you apply kernel patches without needing a reboot!

I first came across Ksplice at Linux.conf.au earlier this year when Co-Founder Jeff Arnold gave a presentation. It’s great to see it maturing to the point where you can install a client on your Ubuntu Jaunty machine. Sweeeet.

If you dig it, then digg it! :-)

-c

Web Hosting After Death

Steve Kemp writes about his concerns for what happens to his data after death [1]. Basically everything will go away when bills stop being paid. If you have hosting on a monthly basis (IE a Xen DomU) then when the bank account used for the bill payment is locked (maybe a week after death) the count-down to hosting expiry starts. As noted in Steve’s post it is possible to pay for things in advance, but everything will run out eventually.

One option is to have relatives keep the data online. With hard drives getting bigger all the time it wouldn’t be difficult to backup the web sites for everyone in your family to a USB flash device and then put it online at a suitable place. Of course that relies on having relatives with the skill and interest necessary.

The difficult part is links, if the domain expires then links will be broken. One way of alleviating this would be to host content with Blogger, Livejournal, or other similar services. But then instead of the risk of a domain being lost you have the risk of a hosting company going bankrupt.

It seems to me that the ideal solution would be to have a hosting company take over the web sites of deceased people and put adverts on them to cover the hosting costs. As the amount of money being spent on Internet advertising will only increase while the costs of hosting steadily go down it seems that collecting a lot of content for advertising purposes would be a good business model. If the web sites of dead people are profitable then they will remain online.

It wouldn’t be technically difficult to extract the data from a blog server such as Wordpress (either from a database dump or crawling the web site), change the intra-site links to point to a different domain name, and then put it online as static content with adverts. If a single company (such as Google) had a large portion of the market of hosting the web sites of dead people then when someone died and had their web site transferred the links on the other sites maintained by the same company could be automatically adjusted to match. A premium service from such a company could be to manage the domain. If they were in the domain registrar business it would be easy to allow someone to pay for 10 or 20 years after their death. Possibly with a portion of the advertising revenue going towards extending the domain registration. I think that this idea has some business potential, I don’t have the time or energy to implement it myself and my clients are busy on other things so I’m offering it to the world.

Cory Doctorow has written an article for the Guardian about a related issue – how to allow the next of kin to access encrypted data when someone is dead [2]. One obvious point that he missed is the possibility that he might forget his own password, a small injury from a car accident could cause that problem.

It seems strange to me that someone would have a great deal of secret data that needs strong encryption but yet has some value after they are dead. Archives of past correspondence to/from someone who is dead is one category of secret data that is really of little use to anyone unless the deceased was particularly famous. Probably the majority of encrypted data from a dead person would be best wiped.

For the contents of personal computers the best strategy would probably be to start by dividing the data into categories according to the secrecy requirements. Publish the things that aren’t secret, store a lot of data unencrypted (things that are not really secret but you merely don’t want to share them with the world), have a large encrypted partition that will have it’s contents lost when you die, and have a very small encrypted device that has bank passwords and other data that is actually useful for the executors of the will.

One thing that we really need is to have law firms that have greater technical skills. It would be good if the law firms that help people draw up wills could advise them on such issues and act as a repository for such data. It seems to me that the technical skills that are common within law firms are not adequate for the task of guarding secret electronic data for clients.

Scala and Various Things.

Not quite ready to move across yet - however capturing some links to make life that little bit easier when I do. I'm hoping these approaches will work as well for Elmo/OTM as they do for Hibernate.

I'll be updating this with any more links I want to save for a sunny day.

A couple more links worthy of rereading:

A study in yellow



Hard-workin' bees

Originally uploaded by Nooks

Closeups of bees are tricky as all get-out, on account of their skittishness and apparent six sense with regard to when you'll try to open the shutter. But I can't stop trying.



July 01, 2009

 

My day started with a blow from a tiny little knee to the groin. How's your day?

Using RSpec Ordered Message Expectations to Tighten your Specs

I quite enjoy the competitive undercurrent of ping pong pair programming. As the person writing the implementation code, it is fun to write something that will turn a test green, but still not necessarily do what my partner was expecting. Taking this approach has also been helpful for improving our specs. Take this example controller spec:

describe ArticlesController do
  describe "handling create" do
    before(:each) do
      @article = mock_model(Article, :save => nil)
      Article.stub(:new).and_return(@article)
      
      @user = mock_model(User)
      controller.stub(:current_user).and_return(@user)
    end
    
    it "should build a new article from posted data" do
      Article.should_receive(:new).with('title' => 'Test Post')
      post :create, :article => {:title => 'Test Post'}
    end
    
    it "should assign the current user as the article's author" do
      @article.should_receive(:author=).with(@user)
      post :create
    end
    
    it "should save the article"
      @article.should_receive(:save)
      post :create
    end
  end
end

This looks like a reasonable set of concise, clear examples, but you can easily make them all pass and without building a controller action that does what you expect:

class ArticlesController < ApplicationController
  def create
    @article = Article.new(params[:article])
    @article.save
    @article.author = current_user
  end
end

This satisfies the examples, but saving the article before assigning the current user as author isn’t what we would have intended. Enter RSpec’s ordered message expectations. These allow you to specify the order in which you expect an object to receive message calls.

describe ArticlesController do
  describe "handling create" do
    it "should save the article after assigning the current user as author"
      @article.should_receive(:author=).with(@user).ordered
      @article.should_receive(:save).ordered
      post :create
    end
  end
end

This example would fail with the above controller action, and force us to write it properly:

class ArticlesController < ApplicationController
  def create
    @article = Article.new(params[:article])
    @article.author = current_user
    @article.save
  end
end

The result is a controller that does what you expect, a stronger set of specs, and an increased capacity for true behaviour driven development. Win, win, win!

The Very Bloody Fast Train

Imagine if Australia was enlightened enough to have fast passenger and freight train travel.







(youtube link for Planet viewers)



That would be *awesome* to be on that bridge as this train goes under it. Where do I sign up to be one of the geeks behind big the control panel?

brendanscott



“With The Utmost Respect”, the Model is Broken

At this very moment, the only reason the West has news of any kind of the turbulence within Iran is due to the individual initiative of members of that community – powered by the Internet.   Rather than celebrate the wonderous power of free riding, driven by the Invisible Hand to overcome the concerted effort of government censorship Gary Becker and Richard Posner have chosen to post an article on their blog wringing their hands over the likely demise of the newspaper industry.   Their argument seems to be that, precisely because newspapers are becoming increasingly irrelevant and cost-ineffective,  the legislature should step in and disrupt the rest of the economy in order to perserve them.  The solution they pose is that consumers should pay more in order to preserve an inefficient industry past its use by date.  This is no solution at all.

In essence, their proposal is to take a leaf out of feudalism, randomly taking rights from citizens for the benefit of Newspaper Barons.   The right they propose to take is, quite literally, the right to give directions to others.  Under their dystopia linking would be illegal – that would be like making it illegal in Real Life to tell someone where the nearest school, or hospital is.   Such a proposal in the real world is so exceedingly bizarre no one would have the courage to float it in public, let alone posit it as a serious option.   That such a proposal can today be put forward at all indicates not only how completely disconnected from reality has copyright ideology become, but also how far that ideology, with its unhealthy obsession with demonising legal, justifiable, laudable free riding has permeated “official” opinion.    It is also testament to the far reaching power of copyright feudalism.

If newspapers serve no function they should be left to rot, or be shot.  The people they employ should be assisted to transition into a new world where they get paid like everyone else.   Some will thrive and some will falter and these are unlikely to be the same as thrived and faltered under the old model.    The world survived well enough before newspapers and I cannot see any reason why the world will not fare equally well in a future without them.  As is the case for news from Iran at the moment, there is no reason to think the absence of newspapers will result in the absence of news, or of opinion.  I did not go to a newspaper to read Becker and Posner’s article.   I read it where they published it – on their blog.    I went to them because I trust them to have an opinion as experts (notwithstanding that I find their copyright ideology objectionable).   They’re both clever men, whose time is valuable.   Somehow they don’t seem to notice that they have managed to publish a piece of some non-trivial effort, despite not being supported by advertising (if it is there it is pretty subtle).  Depressingly, they serve as an obvious counter-example to their own argument.

Moreover, I can’t see my quality of life changing noticeably if I were never to read another newspaper (Nassim Nicolas Taleb has a similar view).   I do not, for example, have any newspaper in my list of rss feeds.  This is not to say I won’t have news or opinion, but, rather, that I will get it from a better source than a newspaper.   The “news” of today is such that it can be summarised in a ticker along the bottom of CNN.   To lose it is no loss.  The news of tomorrow will be more tangential and more relevant, closer and more distanced, more nuanced and more blunt.  It will be all those things because individuals are all producing news and perspectives on everything.   It is astounding to realise that there still exist people who think content creation stops in the absence of some Media Baron guiding it.

Becker and Posner’s proposal is not so much a proposal in favour of newspapers, as an attack on the individual rights of journalists.  Rather than saying that journalists ought to be able to compete with each other in an open market, they are in effect crueling the free market and, as a consequence, requiring that journalists be indentured to newspapers.   The natural consequence of their proposal is that a small number of places will become valuable as aggregation sources.  Over time it will cost journalists dearly in order to have access to a market through those aggregation sources.   The Becker-Posner proposal would be better placed in those societies which believe that individual initiative should count for nothing, and that the only actions individuals should embark on are those permitted by their betters.

No doubt they would charge for a link to the place where you get a linking licence.

Twitter Updates for 2009-07-01

Powered by Twitter Tools.

This post syndicated from the website of Chris Samuel:

Twitter Updates for 2009-07-01

Twitter Updates for 2009-07-01

Powered by Twitter Tools.

This post syndicated from the website of Chris Samuel:

Twitter Updates for 2009-07-01

Three More for the Debian New Queue.

Over the last couple of weeks I've managed to get three new packages into the Debian NEW queue :

  • haskell-polyparse - A variety of alternative parser combinator libraries for Haskell (this is a dependency for later versions of HaXml).
  • haskell-dataenc - A Haskell library of data encoders and decoders like Base64, uuencoding etc.
  • haskell-json - Haskell library for serialising data to and from JSON.

Thanks to Simon Horman for sponsoring/uploading the first two of and Matt Palmer for sponsoring/uploading haskell-json.

[various] Sydney again this weekend

So this weekend I will head up to Sydney again. This time for a send off for a friend moving back to England and then hanging out with Jane on Sunday. Last time we found some pretty yummy Vegan friendly food, I hope we find some more new and interesting food this time round. Hope to have Sunday breakfast at Naked Espresso in Newtown as I forgot the name of the place last time and we ended up elsewhere.

Some mountain biking on Saturday at the send off, probably no exercise Sunday (unless we go swimming) (unlike last time), still it should be nice even if I have to deal with Sydney.

US Air Force Web Posting Response Assessment

This is pretty interesting. The US Air Force have a methodology to deal with online responses like comments. I like it how trolls and “ragers” require HQ be notified :)

I think it helps people not used to communicating online think about different sorts of negative feedback, and how it is important to engage with some, and possibly not with others. Also the “response considerations” were quite good too to encourage transparency and accountability in online communications.

Click on the image for the larger more readable version.

US-Air-Force-Web-Response-Assessment

Open Video Conference Working Group: HTML5 and <video>

At the recent Open Video Conference, I was asked to chair a working group on HTML5 and the <video> tag. Since the conference had attracted a large number of open media software developers as well as HTML5 <video> tag developers, it was a great group of people that were on the panel with me: Philip Jagenstedt from Opera, Jan Gerber from Xiph, Viktor Gal from Annodex, Michael Dale from Metavid, and Eric Carlson from Apple. This meant we had three browser vendors and their <video> tag developers present as well as two javascript library developers representing some of the largest content sites that are already using Ogg Theora/Vorbis with the <video> tag, plus myself looking into accessiblity for <video>.

The biggest topic around the <video> tag is of course the question of baseline codec: which codec can and should become the required codec for anyone implementing <video> tag support. Fortunately, this discussion was held during the panel just ahead of ours. Thus, our panel was able to focus on the achievements of the HTML5 video tag and implementations of it, as well as the challenges still ahead.

Unfortunately, the panel was cut short at the conference to only 30 min, so we ended up doing mostly demos of HTML5 video working in different browsers and doing cool things such as working with SVG.

The challenges that we identified and that are still ahead to solve are:

  • annotation support: closed captions, subtitles, time-aligned metadata, and their DOM exposure
  • track selection: how to select between alternate audio tracks, alternate annotation tracks, based on e.g. language, or accessibility requirements; what would the content negotiation protocol look like
  • how to support live streaming
  • how to support in-browser a/v capture
  • how to support live video communication (skype-style)
  • how to support video playlists
  • how to support basic video editing functionality
  • what would a decent media server for html5 video look like; what capabilities would it have

Here are the slides we made for the working group.

Download PDF: Open Video Conference: HML5 and video Panel

 
I told a friend who frequently visits our honours office that I liked the idea of fountain pens, so he loaned me one of his. I've had it for about a week and am now thoroughly converted. Maths students write all day, so some of us are particular about what we write with. And I'm pretty particular in general anyway.

I'm slowly developing expensive tastes.

All my talk slides are now on Slideshare

I've uploaded the slides from essentially all of the talks I've given to Slideshare. This is likely more useful than my previous strategy of dumping them in a directory and leaving the rest up to search engine bots.



Click here for the full list of slides. They are all published under the Creative Commons attribution share-alike license.



One interesting slide title, which I'd forgotten about, is Kernel Security for 2.8, from the 2004 Kernel Summit. This was from when we were still expecting a 2.7 development kernel leading to a 2.8 stable kernel -- I think Linus announced the change in development model at that summit.



Included in this set of slides are several introductory and deeper technical overviews of SELinux; I hope they are useful for people who are looking for information for themselves, or if making their own slides. As the license suggests, please feel free to copy and extend them (but note that the older ones are going to be more out of date).

Too much breakfast

On Saturday we tried for a light breakfast at the 61c Cafe on Murray. The proprietor (I assume) was nice enough to the dawdling family who couldn't make up their minds, consulted their five-year-old about everything, took forever to order and very nearly tried to pay with a credit card: I was rebuffed by the CASH ONLY sign on the register. What is this, the dark ages? We scraped up $20 between us to pay, but it was a near thing for a moment.



June 30, 2009

The Wild Palms Hotel

When leaving the US, I stayed in the Wild Palms Hotel. I selected it for three reasons: I'd stayed there before; it is part of the Joie De Vivre chain which I have had good experiences with before; and it was very cheap on Expedia ($77 compared to an average rate in the area of about $150). I learnt some interesting things I thought I'd share:



  • The hotel is ok, just make sure you get an upstairs room. I was woken by mating elephants at 5am two days running because the floors are so thin. Be the mating elephant, not the victim of it! Once I moved to an upstairs room this probably went away.
  • The executive rooms aren't worth it. I got moved into one of these because of the noise problems. Its advantages was it was away form the road, had a bathrobe (really), and a LCD TV. I don't watch TV much, so the extra cost if I was paying isn't worth it.
  • The cleaning service kept "short sheeting" the bed. By short sheeting I mean pulled the sheets up to make the top of the bed look impressive, but leaving the bottom couple of inches of the mattress uncovered. Lots of hotels do this, and I find it crazily annoying.
  • The air conditioner was insanely loud. It was 38 when I was staying there, and every time the air conditioner kicked in I would be woken up by it.
  • Its a lot further south than I realized. It took about 20 minutes to get to work if you took El Camino. Depending on traffic its probably much faster to go all the way to the 101 and then take that. The Lawrence Expressway looks like the best way to get to the 101 from the hotel.




So, overall this hotel was "ok", apart from some minor annoyances. I'll keep staying there so long as they're cheap. If they're not running a special, then you're much better off staying further north.



Tags for this post: travel(S) usa(S) california(S) sunnyvale(S) Comment

Brunch



Gullifty's Pancake Stack

Originally uploaded by Nooks

On Sunday Ann and Henry and I went to Gullifty's, which appears to be something of a staple here. Actually I was getting it confused with a couple other places I wanted to try eating at again, but no matter.

Henry bravely ordered the pancake stack and promptly proceeded to violate the "never eat anything bigger than your head" rule.

He and I will be looking for a location for a regular Saturday or Sunday brunch for the next week or two.



Autodie 2.00 released

Autodie 2.00 released

This weekend the long awaited autodie 2.00 for Perl was released to the CPAN, which was almost immediately replaced by 2.02, which fixes some oopsed tests and which adds a couple more features to give us a really sweet experience. This blog entry assumes you're using 2.02.

Observant viewers will notice that the major version number has changed. I've taken the great leap from 1.999 to 2.00. Clearly, something is different, and you might be wondering what.

Well, autodie 2.0 now supports a hinting interface for user-defined subroutines. Put simply, if you have a user-defined subroutine that does something funny to signify failure, you can now tell autodie about that. Once it knows, it can Do The Right Thing when checking your subroutine. You can even put the hints into the same file as those subs, and if someone is using autodie 2.00, it will find the hints and use them.

This may not sound very exciting, but it is. It means that a lot of really ugly error-checking code, both on the CPAN and the DarkPAN, can go away. Lexically. Still not convinced this will change your life? Let's look a little more closely; trust me, you'll like it.

Let's pretend you're working on a piece of legacy code. For some reason, the people who wrote this code decided the best way to signal errors is by returning the list (undef, "Error message"). I don't know why, but I've seen this anti-pattern emerge independently in three 100k+ line projects I've been involved in.

sub some_sub {
    if ( not batteries_full() ) {
        return ( undef, "insufficient energy" );
    }

    if ( not coin_inserted() ) {
        return ( undef, "insufficient credit" );
    }

    my @results = some_calculation();

    return @results;
}

If you want to check to see if some_sub() returns an error, you need to capture its return values, look at the first one to see if it's undefined, and if it's not, use the second one as your error. At least, that's what you're supposed to do.

What actually happens is most developers decide that's way too hard, and don't bother checking for errors. Then one day, the batteries on your doomsday-asteroid-destroying-satellite go flat, nobody notices, and through an ironic twist of fate you're left as the last known human survivor, and there are zombie hordes and walking killer plants outside.

So, how can autodie help us? Well, before version 2.00, it couldn't. But now, with autodie::hints, it can! We can give autodie hints about how the return values are checked. They look like this:

use autodie::hints;

autodie::hints->set_hints_for(
    'Some::Package::some_sub' => {
        scalar => sub { 1 },
        list   => sub { @_ == 2 and not defined $_[0] },
    },
);

Our hints here are simple subroutines. If they return true, our subroutine has failed. If they return false, it's executed successfully. Notice that our scalar hint always returns true. That's because we consider any call of our subroutine in scalar context to be a mistake. It's returning a list of values, and you should be checking that list.

Once we've set our hints, we can then use autodie to automatically check if we're successful:

use Some::Module qw(some_sub);

sub target_asteroid {

    use autodie qw( ! some_sub );

    # autodie has lexical scope, so only calls to some_sub inside
    # the target_asteroid subroutine are affected.

    my @results = some_sub();     # Succeeds or dies
}

sub target_ufo {
    my @results = some_sub();

    # autodie is out of lexical scope, so we have to manually
    # process @results here.
}

If you're wondering what that exclamation mark means, it means "insist on hints", and is a new piece of syntax with autodie 2.00. If for any reason autodie can't find the hints for some_sub, our code won't compile. That's a very good thing, and avoids us having a false sense of security if we use autodie on an unhinted sub.

However the error messages from autodie aren't really that useful. They're going to be things like "Can't some_sub() at space_defense.pl line 53". There's a noticable lack of explanation as to why some_sub() failed.

Luckily, since the way early versions of autodie, we've been able to register message handlers. And with the new features in autodie 2.02, we can produce very rich messages. Let's see how!

use autodie::exception;

autodie::exception->register(
    'Some::Module::some_sub' => sub {
        my ($error) = @_;

        if ($error->context eq "scalar") {
             return "some_sub() can't be called in a scalar context";
        }

        # $error->return gives a list of everything our failed sub
        # returned.  We know this particular sub puts the error
        # message the second argument (index 1).

        my $error_msg = $error->return->[1];

        return "some_sub() failed: $error_msg";
    }
);

Now, whenever some_sub() fails, it'll print a genuinely useful message, like "some_sub() failed: Insufficient energy at space_defense.pl line 53". Yes, autodie automatically adds the file and line number for you. Nice!

But wait, there's more! We don't want to see this sort of code floating around in your programs. You may be dealing with other people's modules that you can't modify, so we can't hide all this configuration in there. So, we can write our own pragma that contains all this info. Here's the full code for a theoretical my::autodie pragma, and is the exact same code used by the t/blog_hints.t file in autodie's test suite.

package my::autodie;
use strict;
use warnings;

use base qw(autodie);
use autodie::exception;
use autodie::hints;

autodie::hints->set_hints_for(
    'Some::Module::some_sub' => {
        scalar => sub { 1 },
        list   => sub { @_ == 2 and not defined $_[0] }
    },
);

autodie::exception->register(
    'Some::Module::some_sub' => sub {
        my ($E) = @_;

        if ($E->context eq "scalar") {
            return "some_sub() can't be called in scalar context";
        }

        my $error = $E->return->[1];

        return "some_sub() failed: $error";
    }
);

1;

It works exactly the same as regular autodie, except it also knows how to handle some_sub(), and display good looking error messages. Here's how we'd use it:

use Some::Module qw(some_sub);
use my::autodie qw( ! some_sub );

my @results = some_sub();  # Succeeds or dies with a useful error!

There's a lot more you can do with autodie, and if you want to learn more, I'd suggest coming to my talk at OSCON or YAPC::EU, where I'll be covering all this and more, with a distinctive Star Trek twist. ;)

Tags:

Bookmark: Digg this Digg this

Twitter Updates for 2009-06-30

Powered by Twitter Tools.

This post syndicated from the website of Chris Samuel:

Twitter Updates for 2009-06-30

Writing the perfect patch

Other people have written and talked (in Lecture 3) about writing the perfect patch for a Free Software project. The goal there is to increase the likelihood that a patch will be accepted by the project developers.



Integrating and testing patches takes time and so reducing that burden is essential when interacting with busy maintainers. Especially if they're volunteers.



Here's what I try to keep in mind when preparing a patch.

Use the right options to diff

These two options should always be part of your call to the diff command:
  • -u: use the most common patch format, unidiff.
  • -p: include the name of the function that's being changed.
and this one can be useful if the output seems unnecessarily large:
  • -d: try hard to find a smaller set of changes.

Minimize the number of changes

You need to draw attention to the changes that you're proposing and remove all other potential distractions:
  • Follow the coding style of the original file. Your changes must fully blend in or they are likely to be rejected.
  • Do not re-indent existing code. This will make it look like you modified every line.
  • Pay attention to whitespace changes. In particular: end-of-line characters, trailing spaces and tab-versus-space differences. Use the dos2unix or unix2dos commands if you need to.
  • Gratuitous refactoring of existing code. Unless the refactoring makes your change smaller or easier to understand, keep it for another patch.
Of course all of the above would be acceptable patches on their own, just not combined with other types of changes.

Only one logical change at a time

Patches often need to be broken up into a series of logical changes to avoid these two extremes:
  • the gigantic patch which adds a number of features and fixes a couple of bugs but scares everybody
  • a series of interdependent patches which all relate to the same change and must all be applied together
It's a bit of a balancing act, but a good rule of thumb is:
  • to have one patch per feature or bug and
  • to try to find the smallest (yet meaningful) change which can be applied on its own.

It's not just about the patch

Your patch can be really good, but the email (or the bug tracker update) announcing it should also contain:
  • a good description of the problem it solves and how it solves it
  • the output of diffstat to give an idea of the size of the change

Brute forcing Oz 7 Lotto

There was a murmur of excitement in the office last week when the Oz 7 Lotto division 1 was $50,000,000. Tonight, it has jackpotted to $90,000,000, which Golden Casket says “shatters all existing records”. The Sunday Mail duly fanned the flames of occasional, optimistic gambling.

Winning division 1 in Oz 7 Lotto requires picking the seven winning numbers from 45: 45,379,620 combinations. Since you can buy a 12-game ticket for $12.70, the entry cost to buy every combination is therefore a shade over $48,000,000. (There are tickets with more games, but I think they’re either system entries or quickpicks.) This suggests that a brute force attack may be efficient: i.e., buying every combination and making a profit. (This has been done before in Ireland, and I vaguely recall reports of it being done for some of the American mega-jackpots as well.)

So, I did some quick sums. The calculations are made easier by the fact that the total prize pool is specified by law and can be calculated based on the division 1 pool (Lotteries Rule 1998 (Qld) sch 6 s 18(1) (AustLII, OQPC), and the Golden Casket website has details about the number of prize winners in last week’s draw. I assumed:

  • There are half as many winners again in each division from last week’s draw (because more tickets are bought).

  • The overheads of the operation are $5,000,000 (about 10%), to cover the cost of actually putting in the 3,781,635 12-game cards and the cost of capital.

On my numbers (which could be wrong), the maximum potential profit is almost $71,500,000: a huge 135% return on investment. (It means that you win over half of the total prize pool.) But what really surprised me was how robust a proposition it is:

  • The main risk is another punter also winning division 1. If there’s another division 1 winner, the profit drops by $45,000,000: but that’s still 50% profit.

  • Even if there are three other division 1 winners, there is still a modest profit (about 7%). Four other division 1 winners gives a 1% loss.

  • If you assume you’re not the only one with this bright idea, and someone else has done exactly what you’ve done, you’ll still make a 37% profit (about $20,000,000), assuming no one else flukes division 1.

  • Even if there are two people (or syndicates) also buying all the combinations, it’s pretty much a break-even proposition: a loss of about $200,000, assuming no other division 1 winners.

So, in other words, for the venture not to be successful, basically there either needs to be four other division 1 winners (unlikely: there has been only 1 division 1 winner in Oz 7 Lotto in the past 13 weeks, and no winners in the past nine weeks), or two other similarly minded people or syndicates. They seem to be better than the usual odds when playing lotto.

Notably, last week (the $50,000,000 draw) was not nearly so robust. Assuming no other division 1 winners (which was the case), buying all the tickets would give a profit of about $22,500,000, or 42%. However, the operation is not profitable if either (a) there is another division 1 winner, or (b) if someone else also buys all the tickets.

In yesterday’s press, there was a report that there may be a further jackpot if there are no division 1 winners this week, and also that the prize pool may be larger depending on entries. This suggests that my projected returns for this week could be higher; and also that if it jackpots, the brute force attack becomes even more lucrative.

As far as I could see from my quick look through the Lotteries Act 1997 (Qld) (AustLII, OQPC), there’s nothing that prohibits this, though there might be something in the conditions of entry. (It’s hard to see a reason why there would be—the lottery is presumably fully funded, so there is no risk to the lottery operator.) What’s better is that section 152 of the Act prohibits a lottery operator from publishing the name or identifying particulars of a winner (see also section 225).

Of course, there may also be tax consequences. An enterprise to buy all the tickets in the lottery may well amount to a business, which I suspect means that the winnings will be taxed as income (rather than being tax-free), but I’m no tax lawyer. (The corollary is presumably that the expenses to earn the income are tax-deductible, which may ameliorate the tax impost somewhat.)

Back from Berlin..

LinuxTAG was interesting.. I got a better grasp of the Linux and Open Source crowd in Berlin (and in Germany in general). I think my geek-side will be satisfied there. I've decided to check out Sugar-on-a-stick after chatting to them there (and pointed one of the developers in the direction of Numptyphysics, which just may appear as a Sugar package at some point). I'm looking forward to settling down in a proper apartment again, and setting up a media center for myself - A nice ATOM dual core + NVidia (ION) server combination (TEO-X had one there) should provide all the power that I need (with lower power consumption) for XBMC & a retro (& not so retro) gaming setup. :-)

Also interesting was Büro 2.0, which involves a shared workspace and services for Open Source companies and freelancers in Berlin. If I decide to be a freelancer there, this might be an option.

The fracas

Dear Nasrul,

I’ve watched the vitriol on osdcmy-list, I’ve seen the attacks on Facebook, and on Twitter and I’ve read all the comments on the Open Malaysia blog, and I think its time I chime in.

Firstly, I need to ask: do you know much about open source? I would highly recommend you read The Open Source Definition.

Next, you’re talking about Facebook, which is a closed platform, which was launched at an open source conference. Why?

But more interestingly, you won RM2,000 for “porting” MediaWiki to run on the Windows, IIS, MSSQL Server, and PHP. For what it is worth, MediaWiki already runs on Windows, and works fine with IIS. So it seems that your largest task, was to port the SQL, to run not on two very capable open source databases, but to run on Microsoft SQL Server (a closed source database).

I read Final Day: MediaWiki – What I learn so far from LAMP2WIN and My Journey with glee.

So I decided to poke a little. You haven’t submitted any code upstream to MediaWiki. But what’s worse is, have you seen Bug#9767? The title of the bug is “Microsoft SQL Server/MSSQL support (tracking)”. It doesn’t take a genius to tell you what the patches in that bug do.

Yes, DJ Bauch added support to MSSQL, via ADODB (work started in 2007, and its been ready since April 30 2009). Something you won money for. But worse? “.. winners walked away with RM2,000 in cash, a MSC Malaysia Participation Certificate. They will also enjoy facilitated access to MSC Intensive Technoprenuer Programme and the eventual RM150,000 pre-seed fund.” (via the Malay Mail).

Now you’re able to access a lot more money, for work that you, yourself, did not do.

I think you should get off your high horse, understand a little more Netiquette, and behave. After all, Google will forever remember what you’ve said, and all the personal attacks against active participants in the open source community, which I’m certain can do you no favours.

Kind Regards,

Colin



Thesis

I'd forgotten how mentally exhausting research was. And how exhilarating.

Blathering for Tuesday, 30 June 2009

21:35: Mikal shared: Anyone try the new Tip Calc App? - PreCentral Forums

    Funny. Dude reports anal retentive bug to JWZ. Hilarity ensues.


21:35: Mikal shared: AT&T's Bad Math Strikes MythBusters' Savage

    The problem of course being that not everyone is famous enough to get this stuff fixed when it happens to them.


21:35: Mikal shared: Forget Lotto, just bank at Westpac NZ for a jackpot

    No don't bank with them. If I can reduce their customer base, it increases my chances of being the next lucky winner!


21:35: Mikal shared: Fake email affair proves costly for Turnbull - ABC News (Australian Broadcasting Corporation)

    Interesting. 18% approval for an opposition leader is pathetic. Surely you can do better than that just with the "grass is greener on the other side of politics" effect.



    PS: Remember. Turnbull is worth hundreds of millions of dollars and is a merchant banker. He's not an Aussie battler by any measure I can think of.


21:35: Mikal shared: Call for Papers are now open! - linux.conf.au 2010 | 18 - 23 Jan | Follow the signs!

    You know you want to submit a paper...






Tags for this post: blather(S) Comment RSS with no blather

De-@wip Your Cucumber Stories

We’ve been really hitting the Cucumber hard in the recent few iterations of our current project. Now that we’re ping pong pair programming, the Cucumber story is the first thing we write, and we revisit regularly during the red-green-refactor cycle.

To make this easy, we place a @wip work in progress tag at the top of the current stories:

Feature: Make coffee

  # This one is done.
  Scenario: First coffee of the day
  
  # This is the one we're working on.
  @wip
  Scenario: Afternoon perk up

Then we use cucumber -t wip to run just the stories in progress. Once the stories are green and we’re happy to move on, we often forget to remove the @wip tags before committing. I wrote a little sed command in a bash alias to make this easier:

# Remove any @wip tags from Cucumber features.
alias dewip="sed -E -i '' -e '/^[[:blank:]]*@wip$/d;s/,[[:blank:]]*@wip//g;s/@wip,[[:blank:]]*//g' features/**/*.feature"

Throw it in your .bash_profile for ease of access! Here’s a gist for your forking pleasure.

June 29, 2009

My last five girlfriends …

Going to see films has been, for me, usually a solitary exercise.

Either no one was interested in seeing what I wanted to, my tastes are somewhat elceltic. Or they wanted to see that right at the beginning or right at the end.

Fortunately there are film festivals where other people with eclectic tastes gather. And even more fortuitously there is one in Edinburgh.

Whilst I would have loved to see some films during working hours -- that was not to be. Instead I saw My Last 5 Girlfriends. It stars Brendan Patricks and, judging by the swooning going on in the audience, he is likely to be the Hugh Grant of his time. The story is a cross between Eternal Sunshine of the Spotless Mind and Being John Malkovich in style.

Most of the girlfriend scenes are what you expect them to be: alternatively predictable, funny and often cringe-worthy. That is not because the script is bad, actually it is the opposite. It is due to the fact that everyone has gone through this exact set of problems and issues with girlfriends. If you get the chance, well worth seeing. ★★★★☆

Oscar Redding wrote and stares in Van Dieman's Land. The movie is graphic, haunting and beautifully shot. In particular I liked the fact that there was little "flinching".

If the guys had to cross the river, the camera was setup and the guys crossed. Buttocks and all.

If the guys had to hit someone, and they were still not dead. You hit them again. And again.

If you want 'popcorn' entertainment, this isn't for you. Why isn't this a 5? Basically — even though I was unaware of the original historical story — I felt that the ending of the film was telegraphed too early. ★★★★☆

SELinux for Humans

I mean, SLUGs...



Paul Wayper gave a couple of talks on SELinux at this weeks' SLUG meeting, and includes links to a couple of very useful slide decks:



The sysadmin slides look particularly useful, as they focus on solving common issues such as running FTP/SAMBA/Apache servers, and provide some very useful general tips, such as looking in the audit log and using policy booleans for high-level policy tweaking.



These slides may be the best, short introduction for sysadmins on the topic that I've seen. It's a difficult thing to get right.

SELinux for SLUGs

Last Friday I gave two talks at the Sydney Linux Users Group, at the new Google offices. It was a pretty full-on day, as I'll explain in another post, and I was keen to get to the meeting pretty quickly. Fortunately the light rail in Sydney is pretty good, and finding ones way from the Star City stop to the offices was pretty easy. I happened to meet two people who were also going to the meeting, a lady escorting her young nephew (if I recall correctly) - she came and asked me if I knew where the linux group meeting was. I talked with them for a bit on the tram, but I'm sorry to them if I was a little distracted - my thoughts were on getting to the meeting, getting set up correctly and giving the talk.

We arrived in the twilight zone between the day, when the lifts allow you to get to any floor without a pass, and the night, when the SLUG Google employees were shuttling people up to the fifth floor. So we climbed the ten flights of stairs - I was in the need of a bit of a stretch. I then picked up my name badge - they were using Anyvite, so they could print out named labels easily for those that had bothered to RSVP on the site so beforehand. I had a brief bit of hesitation when my laptop shut down because it thought it was out of power, a curious interaction between the failing battery and Fedora 11, but all came good. Then it was time to work out how to get connected to the projector.

This was the source of two startling discoveries. Firstly, Fedora 11's screen detection now works pretty much seamlessly - if you plug in a new screen and click the 'Detect Monitors' button, it just finds the new output on the VGA port and sets it up appropriately. Secondly, Open Office 3.0 has a 'presenter' mode that can take advantage of two screens and display your 'now and next' screen on your laptop screen while the projector just displays the current slide in all its streamlined beauty. This was one of those "Wow, It Just Works™" moments where you see how fast the pace of Linux development really is - I was all ready with arcane xrandr voodoo but this just worked perfectly.

Sadly, due to slight cabling problems my laptop was sitting on a server cabinet six meters away, but when I muttered to the nearest person that what I needed right now was a wireless presenter device, the same guy just pulled one from his bag and handed it to me. Whoever you are, you really made my day - thanks! Still, I would be deprived of the handy 'now and next' view and would occasionally have to look over my shoulder to make sure I was talking about the right thing. I'd practiced both talks beforehand, so I was able to move on fairly smoothly. If you're going to do presentations, you have to do this - reading off your slides or looking at the screen to see where you are is really embarrassing.

The two talks went well, though I didn't receive anywhere near the amount of heckling that the CLUG people gave me when I gave the same talks. The questions asked were generally quite insightful, and I had to think hard about my answers. I remembered to restate the question for the microphone, and got to give two T-shirts to people who asked good questions. So overall I was pretty pleased about how it went.

I was talking with Andrew Cowie after the talk, and he gave me some very useful advice for approaching talks in the future. After you've done your initial bit of research working out who you're talking to and what level your should pitch your talk at, you really just have to go for it. I'd been worried that it might be too technical for some and not technical for others - and it was, of course; the point is that that's not really my problem. There always will be that spectrum of knowledge in the people attending a talk at a volunteer organisation, and it's not the presenter's problem to try and cater for everyone. You simply have to do the best you can and reach the most people you can, and not worry about whether you've got everyone interested.

After the talk I got to spend a bit of time with Andrew talking about trades and professions, what makes good meetings and presentations, and many other things that are now lost in the blur that that Friday became. He's an excellent speaker and, like me, wants to see people doing the right thing - being moral and ethical in all their dealings. I also have a small envy of his globetrotting ways, and admire his ability to write Java as fast as think about it in Eclipse, so it was good to get a chance to talk to him for an extended time rather than the usual 'nod in the corridor' meetings we've had in the past.

Overall, a good night. I've put both the SELinux for Beginners and SELinux for Sysadmins talks up on SlideShare for people to read.

Forking out eyeballs

[discussing Google Wave]

D: i only watched 20 mins

the vigorous audience applause after every little feature demo was a bit disturbing

but then my video got stuck. so u may want to download it first

me: hm, i imagine google fanatics are becoming like apple fanatics

D: yeh. except they dont fork out tonnes of cash

me: hm…they fork out lots of eyeballs and data

D: forking out eyeballs?! yegads!

me: ok that didn’t quite come out right :)

Final report for “Inquiry into Improving Access to Victorian Public Sector Information and Data” released

The Victorian Government has been running an inquiry into access to the data that it generates, and they’ve finally tabled their report (PDF). I’ve only had a chance for a quick scan of it so far but its three main recommendations are as follows.

Firstly – this info should be made available and it should be cheap (ideally free!):

The Committee has proposed three key recommendations for access to and re-use of Government information. First, the Committee recommends that the Victorian Government develop an Information Management Framework for the purpose of facilitating access to and re-use of Victorian Government information by government, citizens and businesses. The default position of the framework should be that all PSI produced by Victorian Government departments from now on be made available at no or marginal cost.

Secondly – they should use Creative Commons licensing wherever possible!

The second key recommendation of the Committee is that the Victorian Government make use of the Creative Commons licensing model for the release of PSI. The Committee was told Creative Commons licences can be appropriately used for up to 85 per cent of government information and data, providing a simple to understand and widely used system for the re-use of PSI. Remaining Victorian Government PSI should either not be released, or released under licences tailored specifically for restricted materials.

Thirdly – and least excitingly – there should be a portal for this info..

The Committee’s third key recommendation is that the Victorian Government establish an on-line directory, where the public can search for and obtain information about PSI held by the Victorian Government. Depending on the access conditions Government has attached to specific PSI, people will be able to download information and data directly, or make contact with people in the Victorian Government to discuss access conditions.

They also have a recommendation and finding relating to state government purchasing of software related to open source:

The Committee also considers the use of open source software (OSS) within and by the Victorian Government. One of the Committee’s recommendations is that the Government ensure tendering for software is neither licence specific nor has proprietary software-specific requirements, and that it meet the given objectives of Government.

Finding 23: There is sufficient evidence of cost-competitiveness between open source software and proprietary software for government to carefully consider both options during software procurement and development.

They also consider the licensing of software developed by the government:

As noted in section 10.4.3.2 below, current Victorian Government policy is to allocate IP rights in software produced for it to the software developer, with certain restrictions to ensure the Government’s interests are protected. This means that there is nothing to restrict people who develop software for the government from subsequently releasing it as OSS.

Unfortunately it looks like MS Word stuffed up their references and headings for them – what irony! There is no section 10.4.3.2 in the PDF, it’s probably referring to section 10.3.3, which is followed by section 10.3.4 which in turn is followed by 10.3.3.1 – er ?

Even more interesting is when they talk about file formats:

Recommendation 42: That the Victorian Government require, as part of its whole-of-government ICT Procurement Policy, that software procured by the Government be capable of saving files in open standard formats, and that wherever possible, the software be configured to save in open standard formats by default.

There’s heaps more there, but I’ve run out of time to read it tonight! :-)

(Found via OpenAustralia on Twitter)

This post syndicated from the website of Chris Samuel:

Final report for “Inquiry into Improving Access to Victorian Public Sector Information and Data” released

from the ground up

My current bus activity is AROS hacking. I've actually been doing at least an hour a day for the last couple of months, so I'm making plenty of progress, but I'm off on a long and exciting tangent so it all seems quite different to what I was doing before.

I started thinking about what it would take to make cairo a "first-class" graphics system, sitting directly on top of the graphics drivers, bypassing graphics.library completely. This isn't a crazy idea - a major part of graphics.library is providing drawing and font rendering primitives, similar conceptually to what cairo does (though cairo is of course far more advanced). My thought is that we make the graphics system at the bottom of the stack for apps do all sorts of crazy compositing and whatever other eyecandy effects, and the whole desktop benefits. Initially it could operate alongside graphics.library, but it'd also probably be reasonable to implement graphics.library functions on top of cairo at some later time.

From there I started looking at the graphics driver API. What we have works well enough (despite the deficiencies that I've complained about in the past), but its not a particularly good fit to the cairo backend API, and from what I understand, not a great match for a modern 2D hardware interface either. So the next thing I started thinging about was to change the graphics drivers to have the exact same interface as the cairo backend API. From there, a driver and/or the hardware could directly accelerate cairo drawing operations. The cairo software fallbacks are pretty heavily tested and optimised (including some tight assembly versions of things where necessary), so I'd expect that even a graphics card or whatever that doesn't offer a lot of function could still go faster than, say, the current SDL driver (which uses the graphics.hidd fallbacks for just about everything currently).

So now I'm looking at drivers. As you know, I work in hosted, so my two examples are the X11 and SDL drivers. Something I hate about the X11 driver is how closely tied to the underlying kernel implementation. I took some steps to deal with this when I wrote the SDL driver with hostlib.resource, but its not perfect, and lately something has changed in the X11 driver to require it to be linked with the kernel once again. Besides that, the X11 driver is ancient, hailing from a time where AROS windows were X11 windows, and it retains a lot of that structure even though its no longer the way the world works. Also, it relies on the X11 "backing store" feature, which is usually disabled and will shortly be removed from Xorg. In short, the thing needs a rewrite.

So yay, rewriting one, maybe two, graphics drivers. Down a level to figure out what's going on the core, and sure enough, more work required there. In the last few years the structure of an AROS kernel has changed to be a minimal kernel.resource which implements the absolute minimum required to initialise the memory and task-switching hardware and hand control to exec.library. The loader (typically GRUB) can optionally get whatever modules (libraries, resources, devices, etc) into memory and make them available to exec when it starts. This is the basic idea behind the so-called "modular kernel", which has been implemented in the x86_64, Efika, SAM (both PPC), and more recently, mingw32 ports. The only ports that don't do this are the first two - Linux hosted and i386-pc.

The mingw32 port is particularly interesting. Its a hosted port to Windows, and in essence uses the OS threading system to implement a minimal virtual machine, all within kernel.resource. It has a small bootloader that loads an ELF kernel, making it so that stock AROS i386 code can be used even on Windows which doesn't use ELF itself. The other thing it does is neatly split modules into host-side and AROS-side parts. The AROS parts are handled as normal modules, but in their initialisation they call into hostlib.resource (which is now contained within kernel.resource) to load and link the host-side part. These are standard shared libraries (ie DLLs) which can bring in any library dependencies they need, neatly avoiding the problem contained within the X11 and SDL drivers in that its kinda painful to find the needed libraries at runtime. This way, you just find what you need at link time.

And so, after all this, I'm doing a new port of AROS to Linux, based on the structure used for the mingw32 port. I'm improving on it a bit though. There's still too much arch-specific code in exec.library (like thread context manipulation) which I'm hiding inside kernel.resource. I'm also adding a host.resource which will provide ways for modules to hook into the system main loop inside kernel.resource to do things like "virtual" hardware and the like (ie faking interrupts and such). The mingw32 port did this via special architecture-specific calls in kernel.resource, but I want to try to make kernel.resource have a standard interface across all ports, so they can all run an exec.library that is substantially the same.

So that's some kind of plan. I'm currently at the point where the kernel.resource boots and gets exec.library online. The next thing I need to do is reimplement my task switching and interrupt core which I never tested. If you feel like googling something, it turns out that ucontext_t is not particularly easy to copy or cache on Linux due to the Linux people messing up the way they store the floating point state. I need to rewrite it based on the wonderful context_demo.c example, which never requires an explicit context copy and should do much better. After that I should be able to hook DOS up and get something interesting happening.

I'll keep working and maybe let you know some more in another month or two :)

What Price Ideology ? – Mbeki, AIDS and the lost ARV treatment

Reading the New Scientist article on AIDS Deniers (which reminded me a lot of the Global Warming denial farce with its reliance on obsolete results, junk science and people who won’t let facts get in the way of a good conspiracy theory) I was very disturbed read about an assessment on the number of extra deaths in South Africa caused by the policies of its ex-president, Thabo Mbeki. Mbeki did his best to block the use of ART’s in the treatment of AIDS, despite all the evidence that they were the best treatment. The number of extra deaths due to this is simply staggering, around a third of a million lives lost due to the false ideology that HIV doesn’t cause AIDS. :-(

The journal article referenced for those numbers is called “Estimating the Lost Benefits of Antiretroviral Drug Use in South Africa” and is published at the end of last year in Volume 49 – Issue 4 of the JAIDS Journal of Acquired Immune Deficiency Syndromes. The abstract for the paper puts the issue like this:

South Africa is one of the countries most severely affected by HIV/AIDS. At the peak of the epidemic, the government, going against consensus scientific opinion, argued that HIV was not the cause of AIDS and that antiretroviral (ARV) drugs were not useful for patients and declined to accept freely donated nevirapine and grants from the Global Fund.

The cost was truly devastating:

Using modeling, we compared the number of persons who received ARVs for treatment and prevention of mother-to-child HIV transmission between 2000 and 2005 with an alternative of what was reasonably feasible in the country during that period. More than 330,000 lives or approximately 2.2 million person-years were lost because a feasible and timely ARV treatment program was not implemented in South Africa. Thirty-five thousand babies were born with HIV, resulting in 1.6 million person-years lost by not implementing a mother-to-child transmission prophylaxis program using nevirapine. The total lost benefits of ARVs are at least 3.8 million person-years for the period 2000-2005.

What a price to pay. :-(

This post syndicated from the website of Chris Samuel:

What Price Ideology ? – Mbeki, AIDS and the lost ARV treatment

Twitter Updates for 2009-06-29

Powered by Twitter Tools.

This post syndicated from the website of Chris Samuel:

Twitter Updates for 2009-06-29

Stallman on Mono and C#

Big free software wig, Richard Stallman, has weighed in on the Mono issue in Linux, saying why we shouldn’t depend on applications written in C#.

He writes:

The problem is not in the C# implementations, but rather in Tomboy and other applications written in C#. If we lose the use of C#, we will lose them too. That doesn’t make them unethical, but it means that writing them and using them is taking a gratuitous risk.

If you haven’t already, have a read of my creative commons article on Mono.

linux.conf.au 2010 - Wellington Call for Papers is Now Open!

linux.conf.au Call For Papers

linux.conf.au ( http://www.lca2010.org.nz ) is pleased to announce the
opening of its Call for Papers for the coming linux.conf.au, LCA2010!

LCA2010 will be held from Monday 18 January 2010 to Saturday 23 January
2010 in Wellington, New Zealand.

linux.conf.au isn't just a Linux conference. It is a technical
conference about Free and Open Source Software, held annually in
Australasia since 2001 - covering everything from the Linux Kernel and

read more

[mtb/events] Lots of time on foot

Yesterday I carried my Garmin in a jar in my backpack so I now know I did 42.8km in the 4h47 minutes spent moving during the metrogaine yesterday. In the end we came in 14 minutes late. After our score was adjusted for the loss of 140 points we had 830 points.

Early on in the event my camelback bladder burst when I slipped walking down off Mt Ainslie and landed on the backpack. Fortunately our course was taking us around 500 metres from my house so we made a detour 20 minutes later and I got a new bladder and changed out of my soaked jersey. Later on on Black Mountain we made a small nav error coming down from the summit trail looking for a 40 point control. We started looking for it too early above the fire roads. It took us about 8 minutes of searching and looking at land features to realise they did not match, look closer at the map and realise we had to head down another 100 metres in a gully to find the control.

Paul was a strong team mate and we got through the day well, today I hurt a lot I can definitely feel I did something on the weekend.

[life] Moon

At some point in the past I read a plot summary for Moon and it immediately tickled my fancy. I added it to our Netflix queue and promptly forgot about it until Nigel was raving about it at work on Friday.

I watched the trailer and was immediately sold on it.

I caught it today with Matt. Absolutely fantastic. I don't want to try and describe it very much because I'll just give too much away. A definite must see if you like Sci Fi of the Kubrick variety. I have no idea why this film is having such a limited release.

OpenSolaris on FLOSS Weekly

I had the privilege to be a guest on FLOSS Weekly with Leo Laporte and Jono Bacon this week, thanks guys! Of course Aaron and David had done awesome groundwork with an interview on ZFS a few weeks earlier. It was a fun hour, and I enjoyed it though can think of many thing I’d answer differently now! Looking forward to catching up with Jono and others at the Community Leadership Summit next month in San Jose, the weekend before OSCON.

And yes, OpenSolaris is officially ‘not bollocks’. Check it out!

Bolos 4: Last Stand







ISBN: 0671877607

Baen (1997), Mass Market Paperback, 432 pages

LibraryThing

This book continues on from many of the previous short stories, which is a nice touch. It also starts to fill in some of the historical gaps between the collapse of US society (night of the trolls), to the Concordiat Empire, to the Melconian wars. I found one story in this book pretty hard to read, but that's mainly because its about a small child risking death from basically crazies. That story was good, just a bit close to the bone for me. I liked this book, which isn't a surprise because I have liked all the others as well.



Tags for this post: book(S) Keith_Laumer(S)
Comment

June 28, 2009

Mario is dead and dismantled

Beloved Shuttle Box

Beloved Shuttle Box

Six weeks ago, on a fatal Saturday, both my washing machine and cute little Mario died in one day. The washing machine was quickly repaired, but there was no hope for Mario, as the burnt smell of electronics indicated. It wasn’t going to start up again.

Mario had been the first server to run the code developed at Vquence. It was our development and testing server for more than 8 months until we moved to a server at The Planet – later to Voxel and now ultimately to Amazon.

After it was relieved off Vquence duty, Mario became what it was originally bought to become: a media server. Running Linux and MythTV, it was the beloved center of our living room for the last 2 years. But it seems the heavy duty VCR work as well as running Linux exhausted him.

Well, it is now replaced by an ordinary HP machine – I will miss the cute little shuttle.

If anyone wants the remains, let me know.

Something new

Last week, the High Court heard argument in Fellowes v Military Rehabilitation and Competition Commission: [2009] HCATrans 148, [2009] HCATrans 149.

I mention this, because I think this is the first time that a majority of a High Court bench hearing a case (as opposed to an application for special leave) is women: it is being heard by Hayne, Heydon, Crennan, Kiefel, and Bell JJ.

(French CJ couldn’t sit because he was one of the members of the court from which the appeal was brought: Fellowes v Military Rehabilitation and Compensation Commission (2008) 170 FCR 531; [2008] FCAFC 140.)

Valgrind and OpenSSL

I’ve just filed Debian bug report #534534 about Valgrind/Helgrind reporting “Possible data race during write” [1]. I included a patch that seems to fix that problem (by checking whether a variable is not zero before setting it to zero). But on further testing with Valgrind 3.4.1 (backported from Debian/Unstable) it seems that my patch is not worth using, I expect that Valgrind related patches won’t be accepted into the Lenny version of OpenSSL.

I would appreciate suggestions on how to fix this, the problem is basically having a single static variable that is initialised to the value 1 but set to 0 the first time one of the malloc functions is called. Using a lock for this is not desirable as it will add overhead to every malloc operation. However without the lock it does seem possible to have a race condition if one thread calls CRYPTO_set_mem_functions() and then before that operation is finished a time slice is given to a thread that is allocating memory. So in spite of the overhead I guess that using a lock is the right thing to do.

deb http://www.coker.com.au lenny gcc

For the convenience of anyone who is testing these things on Debian and wants to use the latest valgrind, the above Debian repository has Valgrind 3.4.1 and a build of GCC to fix the problem I mentioned in my previous blog post about Valgrind [2].

if (default_RSA_meth == NULL)

default_RSA_meth=RSA_PKCS1_SSLeay();

I have also filed bug #534656 about another reported race condition in the OpenSSL libraries [3]. Above is the code in question (with some C preprocessor stuff removed). This seems likely to be a problem on an architecture for which assignment of a pointer is not an atomic operation, I don’t know if we even have any architectures that work in such a way.

static void impl_check(void)   {

        CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA);

        if(!impl)

                impl = &impl_default;

        CRYPTO_w_unlock(CRYPTO_LOCK_EX_DATA);

}

#define IMPL_CHECK if(!impl) impl_check();

A similar issue is my bug report bug #534683 [4] which is due to a similar issue with the above code. If the macro is changed to just call impl_check() then the problem will go away, but at some performance cost.

I filed bug report #534685 about a similar issue with the EX_DATA_CHECK macro [5].

I filed bug report #534687 about some code that has CRYPTO_w_lock(CRYPTO_LOCK_EX_DATA); before it [6], so it seems that the code may be safe and it may be an issue with how Valgrind recognises problems (maybe a Valgrind bug or an issue with how Valgrind interprets what the OpenSSL code is doing). Valgrind 3.3.1 reported many more issues that were similar to this, so it appears that version 3.4.1 improved the analysis of this but didn’t do quite enough.

I filed bug report #534706 about the cleanse_ctr global variable that is used as a source of pseudo-randomness for the OPENSSL_cleanse() function without locking [7]. It seems that they have the idea that memset() is not adequate for clearing memory. Does anyone know of a good research paper about recovering the contents of memory after memset()? I doubt that we need such things.

I filed bug report #534699 about what appears to be a potential race condition in int_new_ex_data() [8]. The def_get_class() function obtains a lock before returning a pointer to a member of a hash table. It seems possible for an item to be deleted from the hash table (and it’s memory freed) after def_get_class() has returned the pointed but before int_new_ex_data() accesses the memory in question.

I filed bug report #534889 about int_free_ex_data() and int_new_ex_data() which call def_get_class() before obtaining a lock and then use the data returned from that function in a locked area[9] (it seems that obtaining the lock earlier would solve this).

I filed bug report #534892 about another piece of code which would have a race condition if pointer assignment isn’t atomic, this time in err_fns_check() [10]. In my first pass I didn’t bother filing bug reports about most of the issues helgrind raised with the error handling code (there were so many that I just hoped that there was some subtle locking involved that eluded helgrind and my brief scan of the source). But a new entry in my core file collection suggests that this may be a problem area for my code.

I think that it is fairly important to get security related libraries to be clean for use with valgrind and other debugging tools – if only to allow better debugging of the code that calls them. I would appreciate any assistance that people can offer in terms of fixing these problems. I know that there are security risks in terms of changing code in such important libraries, but there are also risks in leaving potential race conditions in such code.

As an aside, I’ve filed a wishlist bug report #534695 requesting that valgrind would have a feature to automatically add entries to the suppressions file [11]. As a function that is considered to be unsafe can be called from different contexts, and code that is considered unsafe can be in a macro that is called from multiple functions there can be many different suppressions needed. Pasting them all into the suppressions file is tedious.

around the world

Yeah, its been a while. I'm still here, and I've done heaps of stuff since last time, but I just haven't gotten around to writing about it yet. I'll get there.

What I'm here for tonight is to tell you about something new. I know there's people out there blogging about AROS. I'm subscribed to a few of them myself. I'm sure I haven't got all of them though. So I'm putting together a planet to list them all:

If you're trying to follow what's going on with AROS, it'll be good for you to subscribe to this planet, as you'll find out everything that's going on. If you're blogging about AROS, it'll be good for you to be on this planet, as you make sure that everyone is reading your stuff and you benefit from other people's popularity.

If you write about AROS, email me (rob@cataclysm.cx) or ping me on IRC (fce2 on irc.freenode.org). Let me know the location of your RSS or Atom feed, and I'll add you. Its cool if you have non-AROS stuff in there, this is about AROS people as well as AROS itself.

If this gets big and popular, I'll see what I can do to get a better URL. How does planet.aros.org sound? :)

Oh, and I need to do something to pretty it up a bit. If you feel like doing something there, drop me a line.

Twitter Updates for 2009-06-28

Powered by Twitter Tools.

This post syndicated from the website of Chris Samuel:

Twitter Updates for 2009-06-28

A review of the W3C Timed Text Authoring Format

The W3C has published a third last call for the draft specification of DFXP, the Distribution Format Exchange Profile for the Timed Text Authoring Format – or short: for their new standard format for captions. Comments are due by the 30th June, so rush if you want to give any feedback. Here is what came to my mind as I was reading the 183 pages long document.

Please note: This review looks at DFXP from a Web view, i.e. how compatible is it with existing Web technologies, since my main use case will be on the Web, even if advocates will say that that’s not it’s main purpose, strangely enough, for a standard coming out of the W3C.

The state of affairs with caption formats

When it comes to caption and subtitles, there is no lack of formats. It seems, because it is an easy challenge to define a data format for something as simple as a piece of text and some timing information, every new project that wanted to deal with captions – or more generally timed text – created their own format. I am no exception to the rule. :-)

Thus, the current state of affairs wrt timed text is that there are many different textual file formats to store such data, there are also many different video container formats each with their own data format (or even formats) for embedding timed text into them, and there is a lot of software that will deal with many input, output and encapsulation formats.

The problem with this situation is that the formats are all different in their complexity. The simple “piece of text and timing information” problem can be turned into as complex a problem as you desire. By adding layout information, styling information, animation functionality, metadata about the video and about the content, and possibly hyperlinks, we have ended up in a large mess of incompatible formats.

The aim of W3C Timed Text

The W3C Timed Text working group was chartered in January 2003 to attack this issue. It was supposed to become the super-format of all possible functionalities for timed text formats and therefore a perfect interchange format between applications (see requirements document). Its focus was for use on the Web and with SMIL and to make use of existing W3C technologies where possible

However, the history of captioning is TV and the scope of Timed Text is beyond mere use on the Web, so while W3C Timed Text took a lot of inspiration from other Web standards, it has become a stand-alone standard that does not rely on, e.g. the availability of a CSS engine, and it has no in-built hyperlinking functionality (see what requirements it fulfills).

Dissecting DFXP

So. let’s look into some of what DFXP provides.

Here is an example file taken straight from the draft – check the presentation here:

<tt xml:lang="" xmlns="http://www.w3.org/2006/10/ttaf1">
  <head>
    <metadata xmlns:ttm="http://www.w3.org/2006/10/ttaf1#metadata">
      <ttm:title>Timed Text DFXP Example</ttm:title>
      <ttm:copyright>The Authors (c) 2006</ttm:copyright>
    </metadata>

    <styling xmlns:tts="http://www.w3.org/2006/10/ttaf1#styling">
      <!-- s1 specifies default color, font, and text alignment -->
      <style xml:id="s1"
                 tts:color="white"
                 tts:fontFamily="proportionalSansSerif"
                 tts:fontSize="22px"
                 tts:textAlign="center" />
      <!-- alternative using yellow text but otherwise the same as style s1 -->
      <style xml:id="s2" style="s1" tts:color="yellow"/>
      <!-- a style based on s1 but justified to the right -->
      <style xml:id="s1Right" style="s1" tts:textAlign="end" />
      <!-- a style based on s2 but justified to the left -->
      <style xml:id="s2Left" style="s2" tts:textAlign="start" />
    </styling>

    <layout xmlns:tts="http://www.w3.org/2006/10/ttaf1#styling">
      <region xml:id="subtitleArea"
                   style="s1"
                   tts:extent="560px 62px"
                   tts:padding="5px 3px"
                   tts:backgroundColor="black"
                   tts:displayAlign="after" />
    </layout>
  </head>
  <body region="subtitleArea">
    <div>
      <p xml:id="subtitle1" begin="0.76s" end="3.45s">
        It seems a paradox, does it not,
      </p>
      <p xml:id="subtitle2" begin="5.0s" end="10.0s">
        that the image formed on<br/>
        the Retina should be inverted?
      </p>
      <p xml:id="subtitle3" begin="10.0s" end="16.0s" style="s2">
        It is puzzling, why is it<br/>
        we do not see things upside-down?
      </p>
      <p xml:id="subtitle4" begin="17.2s" end="23.0s">
        You have never heard the Theory,<br/>
        then, that the Brain also is inverted?
      </p>
      <p xml:id="subtitle5" begin="23.0s" end="27.0s" style="s2">
        No indeed! What a beautiful fact!
      </p>
      <p xml:id="subtitle6a" begin="28.0s" end="34.6s" style="s2Left">
        But how is it proved?
      </p>
      <p xml:id="subtitle6b" begin="28.0s" end="34.6s" style="s1Right">
        Thus: what we call
      </p>
      <p xml:id="subtitle7" begin="34.6s" end="45.0s" style="s1Right">
        the vertex of the Brain<br/>
        is really its base
      </p>
      <p xml:id="subtitle8" begin="45.0s" end="52.0s" style="s1Right">
        and what we call its base<br/>
        is really its vertex,
      </p>
      <p xml:id="subtitle9a" begin="53.5s" end="58.7s">
        it is simply a question of nomenclature.
      </p>
      <p xml:id="subtitle9b" begin="53.5s" end="58.7s" style="s2">
        How truly delightful!
      </p>
    </div>
  </body>
</tt>

I’m going to look at each of the different functionalities separately and discuss their strengths and weaknesses.

Content

Let’s begin with the body of the DFXP document and what elements are defined for this area.

Firstly, <body> comes with optional begin, end, and dur attributes. As is the case for all time specifications in DFXP, there are both “end” and “dur” attributes. Why this over-specification? There is not even an explanation which of the two has higher priority when in conflict. This is plainly asking for trouble – why not simplify the spec?

The “region” and “style” attributes refer to a previously defined region and styles that are applied to the body. “id” and “lang” attributes allow to associate a name and a language with the body.

The “timeContainer” attribute enables the author to specify whether the elements in the body are all to be regarded as temporally parallel or in sequence, the default being parallel. This means that all text elements specified inside the body can render over the top of each other – a situation that is solved by giving them specific start and end times.

The containing elements of body are a sequence of <div> tags. The div element functions as a logical container and a temporal structuring element for a sequence of textual content units. div elements like body elements are allowed a “start”, “end” and “dur” attribute and generally everything that the body element also has, except that their children can be more div or p. Again, the children of the div element are all regarded as being temporally parallel.

The p element is basically the inner-most element that contains the actual text, including new-lines (br) and spans to associate further styling, metadata, or animations. The children of the p or span element are also all regarded as being temporally parallel, unless otherwise specified.

The structuring of text into div, p, and span elements seems to make sense and provide sufficient (if not even excessive) flexibility for any required timed text needs.

Layout

Once the text is specified and structured, the next question is where it should be positioned.

The extent attribute of the <tt> root element specifies the width and height of the root container, if not specified by the external authoring context.

Inside the root container, regions are defined through explicit <region> elements. The origin of placement for a region is the top left corner. Regions can define their “origin” offset, their “width” and “height”, the alignment of text within them through the “textAlign” and “displayAlign” styles, and whether text that “overflows” a region should be visible or hidden.

The way in which DFXP defines regions and placement of text within regions is very different to the way in which HTML and CSS work. By default, elements in HTML flow one after another in the same order as they appear in the source. CSS attributes applied to the elements can control their positioning through giving coordinates, or relative placements in relation to other elements. In DFXP elements are placed inside regions that are styled, making it incompatible with HTML.

Styling

The styling attributes available for DFXP are limited, but sufficient for timed text purposes. The way in which style associations to elements are resolved is quite diverse. Styles can be associated with regions, with individual elements, individually and as a group, through layouts and through parent elements. Compared to CSS, it feels complicated and potentially full of contradictions.

Animation

Further to styling, DFXP defines animations, which are discrete changes to some style parameter value that applies over some time interval. This is relevant for example to implement karaoke style colouring of text over time.

Metadata

The <metadata> element serves as a generic container for grouping metadata information. It can be associated virtually with any element – which seems somewhat over-flexible, but provides for interesting meta data information such as meta data for styles or for a <br>.

In addition, metadata is actually limited to a set number of elements: title, desc, copyright, agent, name, and actor. These are strange fields – in particular if you compare them to the flexibility of HTML meta data, which consists of free-form name-value pairs, bringing us domain-specific schemes such as the Dublin Core. This is not easily possible here, but instead one has to define extensions to allow for such flexible meta data.

Other features

DFXP provides other features such as information that describes the related video file, e.g. frameRate, subFrameRate, frameRateMultiplier, pixelAspectRatio, smpteMode, timeBase, and tickRate. Such information will help at the point in time when DFXP is supposed to be multiplexed into a binary media file together with audio and video tracks. These attributes can provide information required for the multiplexing process. I am not sure that justifies their existence though.

Other, minor features are available too. Check out the full specification to get a complete picture.

Examples

Part of the publication of this draft is also a test suite. Several of the defined features are still not represented in the test suite, which to me raises the question if they are really required. It might do wonders to the draft size to remove them.

Summary

DFXP is a standard for timed text that is firmly grounded in past captioning specifications, but written in XML, and borrowing ideas from Web technologies. It is unfortunately not re-using existing Web infrastructure to implement its more complex features: no use of CSS for styling and layout, no use of hyperlinks. Also, the use of namespaces seems excessive and won’t make it easy to author this format, in particular since the defined namespaces do not map into the defined profiles.

DFXP is, however, simple to transcode to something that a Web Browser can deal with through its existing engines, because it has borrowed from other Web standards. It is thus easier to work with on the Web than most other formats. It should be relatively easy to map to HTML, CSS and javascript, as already started in the test suite with the HTML5 video element.

DFXP is witten in such a way that it is possible to put together a new profile with extensions that are more appropriate for specific needs, e.g. that fit better into existing Web infrastructure. Currently, DFXP has three defined profiles: one focused on transformation, one focused on presentation, and one that contains everything.

I think it’s time for a html5 profile of DFXP that at minimum extends DFXP with hyperlinks, making it a real timed text Web format.

Announcing: Swedish Chef wave robot



Swedish Chef wave robot

I managed to score myself a Google Wave account by promising to write a Swedish Chef robot. So this afternoon I wrote one, in a language I've never used before (Python) and to a target platform I've never explored (Google App Engine). Mostly I ripped off code from other sources, especially Dive Into Python.

Screenshot

So if you have a Google Wave sandbox account, add borkforceone@appspot.com to a wave and your text will be translated into cod-Swedish.

Contact me

‘Heritage’ is relative

I live in a country where even buildings less than 100 years old can be protected as ‘heritage’. Yet in India they can demolish a 700-year-old mosque without even batting an eyelid!



©2009 Sridhar Dhanapalan.

This work is licensed under a Creative Commons Attribution-Share Alike 2.5 Australia Licence.

Creative Commons BY-SA Licence

.

June 27, 2009

[debian] Every day's a school day

Courtesy of a wonky prerm script in a package I'm working on, I just learned that when you dpkg-reconfigure a package, it runs more than just the package's config script. I guess subconsciously, I'd always expected it to run the postinst again as well, but I did not realise the prerm script was also run.

So having now peeked at the innards of dpkg-reconfigure, it runs the prerm with upgrade version, the config with reconfigure version and the postinst with configure version, in that order.

[mtb/events] Some races this weekend

Today I went out to sparrow hill and raced in the CORC 3 hour race at Sparrow Hill, it was kind of fun. Though my lack of long rides in the last year or two shows, I was pretty good for 2 hours keeping my speed up and heart rate above 150, then my last two and a half laps I just did not have any oomph left in me to go hard. Still a good event, huge turnout, thanks to Paul, Sue, Sherri, Russ, etc for putting it on and to Kent and Bec for the coffee and Leanne for the food out there.

Tomorrow I will be doing the 2009 ACTRA Metrogaine with a friend Paul. As Paul is fit and keen to have a good crack at it I suspect we will both be pushing ourselves pretty hard for the 5 hours of the event. Ahh well I need to do more stuff like races this weekend to HTFU from time to time I think. Fun has been and will be had.

A butterfly because of Henry



DSC_0550

Originally uploaded by Nooks

Nothing new today, have a butterfly macro instead (ooh, lol-insects, there's a concept). I only have an old photo because Henry is asleep in the next room where I'd normally sit to organize my upload queue. He and Ann arrived safely this afternoon, he'll be staying with me and going to the Spanish Immersion summer camp for the next 8 weeks.



On Twitter

OK, I broke, I’ve got myself a Twitter account (chris_bloke)..

This post syndicated from the website of Chris Samuel:

On Twitter

June 26, 2009

IPv6 over PPP over a null-modem connection

I just did my first null-modem serial link today. And yes, I did IPv6. On each computer I ran:

# pppd nodetach noauth /dev/ttyS0 115200 ipv6 ,

Then, each computer came up with a ppp0 interface that was down by default (for some reason, pppd doesn’t like to bring it up if it’s IPv6-only). So I ran this on one machine:

# ifconfig ppp0 up
# ifconfig ppp0 add fc00:23::1
# ip route add fc00:23::2 dev ppp0

And then on the other machine, the reverse:

# ifconfig ppp0 up
# ifconfig ppp0 add fc00:23::2
# ip route add fc00:23::1 dev ppp0

Then the glorious:

$ ping6 fc00:23::2
64 bytes from fc00:23::2: icmp_seq=1 ttl=64 time=12.0 ms
64 bytes from fc00:23::2: icmp_seq=2 ttl=64 time=11.8 ms
64 bytes from fc00:23::2: icmp_seq=3 ttl=64 time=9.87 ms

Serial is cool.

DAViCal 0.9.7 released

Several weeks ago I was browsing around CalConnect wondering, as you do, if the timing will ever be right and the backing available for me to visit one of their meetings. It seems that the planets may actually finally be in alignment and I am really hoping that I can get to CalConnect XVI from 5th to 9th of October - though I will have to save my pennies.

In passing I noticed that the FREEBUSY Technical Committee has just published a Proposal for Freebusy Read URL, defining a bunch of optional parameters that can be used in queries against a freebusy URL. As calendar servers increase in power and scope it seems natural that these things will become more useful even if you might have thought time had passed them by, replacing them with more advanced CalDAV scheduling extensions.

Since DAViCal has always had Freebusy URLs, and in fact accepted a couple of simple parameters in them already it turned out to be a simple matter to provide these standardised ones as well. This change was included in DAViCal 0.9.7 which I released quietly into the wild a few days ago.

Another change in DAViCal 0.9.7 are the use of significantly enhanced algorithms for selecting events to appear in time-range queries. In the past these were selected in an inexact manner, erring in the direction of "well, the clients will only display the events you really want to see, so it's OK to give them a few extra ones". That works fine for the standard clients everyone uses: though it added a smidgin more bandwidth from time to time, it was a little less work for the server. For non-standard clients, however, it was much less desirable and some users desired a more exact set of results. So in 0.9.7 I finally switched over to the use of the in-database RRULE parsing functions that I have been working on for some time. These functions improve the exactness, and it turns out they also generally operate faster than the earlier logic as well.

The other important change for 0.9.7 is that it will work with the iPhone OS 3 Calendar App. In fact this would have been much harder for me without the support of the nice folk at Truhearing (suppliers of discounted hearing aids) who are so keen on DAViCal that they bought me an iPhone just so that I had no excuse! And indeed having the iPhone certainly does make a difference to the way I use DAViCal myself - not just for the fact that it has enabled me to work around a few iPhone issues, and to fix some DAViCal issues, and the two are now playing nicely together. I still see a few iPhone issues (appointment end times sometimes show up with +12 hours on the iPhone if created elsewhere... and I'm in UTC+12... coincidence? Also there is no way to move appointments between calendars, and no easy way to set the timezone just for one appointment) but no doubt the more critical of these will be resolved in future releases.

Interest in running the code to support the iPhone has meant that a wider cross-section of DAViCal users have been running the updates prior to release, as a result this is probably one of the best tested releases ever, and the community has been really helpful in making it so.

For now, the new version is hosted on my server. Tomorrow I'll upload it to Sourceforge and publicise the release more widely.

Security subsystem changes in the 2.6.30 kernel

Here's an update on the major changes to the kernel security subsystem for the 2.6.30 kernel.



  • TOMOYO

    The TOMOYO security framework from NTT was merged. This is the first significant LSM scheme to be merged since SELinux in 2003. TOMOYO is characterized by its targeting of non-technical users, where security policy is automatically generated with a "learning mode" tool. This scheme utilizes pathnames for determining access to filesystem objects. Another interesting feature is that a domain, i.e. an active subject which acts on objects, is defined as a history of process invocations, rather than a single process. This allows policy to be applied to a particular branch of processes in the system. For example, an access permitted for init->httpd->perl may not be permitted for init->httpd->bash. Sample policy may be found here.




  • IMA

    IBM's Integrity Measurement Architecture was also merged. This uses the TPM to verify and store cryptographic checksums of files used by the system, i.e. measurement. If a measured file has been modified on disk, this will be detected and stored permanently in the TPM. The aim is to help detect attacks based on modifying files—such as executable binaries or configuration files—although it cannot detect runtime attacks, and requires checksums to be known in advance for the full system startup chain. Files to be measured may be specified in a policy loadable via securityfs.





  • Remove Old SELinux Network Controls

    The original SELinux network controls were deprecated by the iptables-based Secmark system several years ago, although they remained available via the compat_net option for the likely few people who were using them. The old code has now been removed entirely, and users should transition to Secmark: Paul Moore has written a detailed guide for this.


The remaining changes were primarily bugfixes and enhancements across most parts of the security subsystem, including SELinux, SMACK, and keys.



Paul and I are finalizing the schedule for the security microconf at the upcoming Linux Plumbers Conference. It's looking like a great line-up at this stage—stay tuned for more details soon.

[various] ROUS exist, how cool

An unusual seeming pet but I was excited to see that it seems R.O.U.S exist for real. Anyone out there want a 100lb rat as a pet? (ahh princess bride moments that could happen for real, what entertainment there is in the world)

I did it twice!

Yesterday I was brave enough to ask two complete strangers if I could take their picture.

I spied this woman a few times as I wandered down the street, she was riding her bike and delivering flyers, they looked like material from a familiar environmental group focusing on wind and solar power in this coal-obsessed state.

I love her hair and piercings and her vivid blue overalls. This is the second of two shots; in the first she's looking at the camera and posing a little (but not too much) but it had a smidge of motion blur because I was too nervous to check the shutter speed. I quickly snapped this before she got impatient---I figure she has important stuff to do.



June 25, 2009

R.I.P Michael Jackson

MJ died 55 minutes ago from cardiac arrest.

Today is a sad day.

ODF Plugfest

After the noise over whether or not the implementation of ODF (Open Document Format) in SP2 for Microsoft Office 2007 was deliberately broken for monopolistic purposes or incompetently implemented (or a combination of both) it’s nice to see that there is active interoperability work going on between vendors and developers at the ODF PlugFest, and the KOffice developers Jos van den Oever and Sven Langkamp attended and contributed to an article on the KDE DOT news website and Sven blogged about his positive experiences at the workshop.

It was first time I was going to such a workshop and I had expected that there would be fights between the different vendors like it happened in some blogs before the workshop. It was a pleasant surprise for me that the athmosphere was very friendly and productive. It was really nice to meet other people projects/companys, put the competition aside for some time, work and drink some beer together.

One neat feature mentioned there is the OfficeShots website which lets you submit an ODF document and then get back renderings of it (PDF, screenshot, ODF) from various ODF implementations. There are 8 listed at present (including KOffice), but sadly MS Word or Google Docs aren’t amongst them (yet).

This post syndicated from the website of Chris Samuel:

ODF Plugfest

preupgrade -- caveat emptor

A good rant every now and then?



I have been upgrading my Fedora machines by hand using yum. This seemed to work OK, for a machine with minimal tweaking there usually were not so many dependency issues that had to be solved by hand. Though it still is a time consuming process for a handful of machines.



So, I recently found out that I'm bad boy (oooh yeah!), and should have been using preupgrade. Looking at TFM I thought, "fair enough, upgrading a non live system seems like a wise thing". So I gave it a whirl. Which ended up in a strange exception in anaconda and after reboot /var/lib/rpm was missing. yay. So I trip to the reinstall Fedora 11 from DVD shops later and I was back in the mix. But there were/are still some other machines that needed updating to 11.



Once bitten, twice masocistic I thought. So I decided to try on another machine. It might have been something I tweaked on the laptop over the many Fedora updates etc that fluffed up preupgrade and anaconda...



Luckily the second time I didn't loose any data. For one thing, my /var/lib/rpm shouldn't be deleted assumption from before the first install was missing and everything was backed up (twice, I had running incremental baculas too). But preupgrade won't touch a system where /boot is on a RAID. So the second attempt stopped nice and fast.



I might try preupgrade again on the laptop next time. I left things fairly stock during the Fedora 11 install there just so preupgrade could possibly work its magic in the future. But I'm wondering if the pain of yum updating across versions makes sticking with Fedora worthwhile. I have better things to do than manually update and tweak things and if other distros don't chomp days of my life every 6-12 months then maybe I should check them out.



It's a bit sad that /boot on a software RAID-1 is such a rare setup that its not supported.



And that concludes this rant... was it as good for ya?

Kitties!

Excuse me, drunk, may make a balls up of this flow chart:



                                    Applied for job in Sydney by closing date? 
                                         /            /
                                        / yes        / no
                                       /            /
                                 offered job?      /
     ________________               /   \         /
    |                |             /yes  \no     /
    |                v            /       \     /
    |         re-evaluate at a later date  \   /
    |  Is kitty-obtaining suitable yet?     \ /
    |             /            \             v
    |            |no            \yes        /                    
    |____________|               \         /
             oh well, try         \       /
           again next year         \     /
                                    \   /
                                     \ /
                                      v 
                             Get a siamese kitty
                                     



This post inspired by this

They'd been watered mere seconds before



Floral Bokeh

Originally uploaded by Nooks

An f/1.8 macro lens would be truly wonderful; the 50mm prime just sucks up light and produces pictures I find particularly pleasing.

Anyone want to offer an opinion as to the name of these lovely flowers?



ITWire filesystem interview

Sam Varghese interviewed me about filesystems as part of an article about the rise of ext4, you can find his article “Enter ext4, the filesystem of the future” at ITwire.

This post syndicated from the website of Chris Samuel:

ITWire filesystem interview

June 24, 2009

Intel to replace ACPI, Linus should be happy

Most modern computers use ACPI (Advanced Configuration and Power Interface) to control things like, well device and power management.

It has been alive for some 12 years now, but does anyone yet fully understand it?

Now Intel has announced they are creating a new more simple system that even has the word “simple” in the name – Simple Firmware Interface. It looks like Linux will get support for SFI in 2.6.32 but I wonder if Linus is happy this time round.

Here’s what he had to say about ACPI:

Modern PCs are horrible. ACPI is a complete design disaster in every way. But we’re kind of stuck with it. If any Intel people are listening to this and you had anything to do with ACPI, shoot yourself now, before you reproduce.

So here’s hoping that SFI will be a sane spec that everyone will understand!

Follow Up From "How Does A Homeschooling Mum Move On?"

Now that I'm no longer 'schooling' my own children I'm out in the big, wide workplace again. It's a scary place to be when you haven't worked for a long time. I've kept my skills up doing some paid and voluntary work but it's still scary to be facing the workforce again at nearly 40.



As far as moving on from homeschooling is concerned though, I'm actually getting some work tutoring primary school children. I'm using the skills I've developed so far in life and homeschooling my children to earn some income.



I've got two students at the moment one is 5 and the others is 8. I get to design lesson plans and individual lessons again! Yay!! I'm dividing the lessons up into 10 minute segments to keep the interest and attention up. It's lots of fun working with these young ones again, I enjoy the one to one work and seeing them making progress!!

FITT for management?

Tonight I went to the inaugural Females in IT & Telecommunications event in Melbourne. Now FITT is a non-profit crowd and this event was organised by volunteers, and I recognise that you can never please everyone, but nonetheless… I have some feedback.

Now Telstra was hosting and sponsoring this event, so fair enough, there was some Telstra involvement. The host, Michael Lawrey, was a chap from Telstra. (An undoubtedly impressive chap, but was it really so difficult to find a single woman in Telstra who might be able to talk about women in IT/telcos? And if so… what does that say?) So, no worries. A chap from Telstra talking for 20 or 30 minutes as an intro to a panel. And no one from FITT was even introduced.

Then the panelists were… “past Telstra Business Women Award winners”. Let’s check the panelists have all the relevant fields covered:

  • Fashion/retail: check.
  • Education/economics: check.
  • Publishing/bridal: check.

IT or telecommunications? Oh, well, you know, they’re all big users and fans of technology… In a sense we’re all women in IT these days, aren’t we?

I held out hope it might be redeemed by the panel interaction. No such luck. It was the strangest panel I’ve ever seen: the host fed canned questions to the panelists, most with no bearing on technology (and the few times they had to talk about the impact of technology, they struggled to say anything insightful), such as, “How do you measure success?”

“What have some of your milestones been?”

“What would your advice to others be?”

“How’s your work/life balance?” (I’m not sure if that was really a question… it might have been. In any case, I didn’t realise until now that work/life balance was like code for How do you assuage your motherly and wifely guilt for daring to leave the house? — Or perhaps I had this under repression.)

The most baffling thing was that the host asking the panel questions accounted for about 90% of the panel time. What kind of bizarro panel is that? I was very tempted to break out some spontaneous audience participation, but I didn’t feel certain that the rest of the audience wasn’t actually loving it. Then there were 3 quick questions from the audience at the end. And all this took over an hour, I’d say.

So basically the whole thing was uber-business geared and there was next to no IT/telecommunications specific content. Oh wait, I lie: after the panel, there was a Telstra promo video about their cable to Hawaii… no particular relevance to women, though.

During the post-panel “networking drinks and canapes” I took it upon myself to speak to Lawrey. I gathered a drink and stood in the vicinity of a conversation he was having with another chap from Telstra. (There were about 5 men of maybe 50 people there, and I guess they were all from Telstra. Good that he was taking this opportunity to talk to all these women present…)

First I asked him if there hadn’t been any Award winners who had worked in IT. He couldn’t think of any. I tried to make the point that there was little IT-specific content in the panel. We also talked a bit about “how to get more women into the industry”, which he talked about in the introduction. He had mentioned the need to market the industry better, e.g. by going into schools and talking to grade 10s. I said I thought they should be engaging primary school kids, which he laughed at in surprise. A 15 or 16 year old girl who has it fixed in her head that she could not be “techy”, is not likely to have her mind changed by a Telstra suit doing a fly-by promo.

He also mentioned maternity leave…. but again, this is something that applies across the board. It is not something specific to the IT industry that keeps women away. In his intro he talked a lot about women’s participation in the workforce more generally. My interest is: what is it about IT that makes it in particular unattractive to women? To the extent that participation has decreased since the ’80s? I tried to engage him on this but I don’t know how successful I was.

While the panel was going on, on a board at the front was a big list of FITT’s objectives:

  • Encourage more women into the ICT industry
  • Inspire women in the industry to achieve their personal aspirations and potential.
  • Assist women to broaden their understanding of the ICT industry.
  • Facilitate networking opportunities.

I was thinking about which of these the panel was fulfilling. It must be the second. And it just seemed to say, “Management straight ahead for you!” And I wanted to ask, what else might success in a technical field look like? Is your career stalling unless you are making slow march towards management? I would like to think not, because let’s face it, if you’re aiming to end up in management, there would be far more direct routes to take than via an IT career. Just go do freaking HR or something. Geez.

FITT has certainly done some interesting stuff in its twenty years of being. (Twenty!) But comparing this with past events with groups like LinuxChix or Girl Geek Dinners, FITT will need to lift its game.

iphone panorama



soper road (w/ iphone)

Originally uploaded by Nooks

I'm pleasantly surprised how well this turned out, given that I just held the phone and rotated it to take the pictures; I've had tripd-mounted source images not work as well as these did when it came time to stitch.

This is the western end of the farm, the houses you can see on the left belong to neighbors. You can also see Ann in the distance: we were out walking, I think Henry decided he didn't want to come after all and stayed home.



Saudi Arabian Adventures - Days 1-2

Note: Pictures of my trip to the Middle East are now available.

The events in this entry happened on 12-13th June

Saudi Arabian Adventures - Day 1

My first true day in Saudi Arabia was one of rest. After 30+ hours of travel, being able to sleep in a bed was truly lovely. I woke up fairly late in the day, caught up on e-mail, and then decided to go exploring. There was a food hall just around the corner from the hotel, and while I gawked at the sign displaying opening times, (I was concerned I had missed lunch), and worried about the wording that said the hall was for Saudi Aramco staff only, one of the staff members waved me in with a smile.

What I discovered is that the food hall has both very good and very affordable food. Cans of drink, bottles of water, and cups of coffee were almost universally 1 riyal (about $0.30 AUD). Some basic meals were available for about 4-5 riyals (under $2.00 AUD), with the best value for money undoubtedly being the "budget meal", which provided soup, vegetables, rice/potatoes, a generous main meal serving, and a dessert, all for 11.5 riyals (about $4 AUD).

I got myself a salad (which were excellent), some soup, and some coffee, and felt very thankful that I had changed myself some 300 riyals (about $100 AUD) while in Dubai, since I hadn't spotted any way of doing money exchange at the Dammam airport.

The rest of my travels included a walk around the camp, the most interesting part of which was a fenced area that seemed to include a library and a bowling alley. Here also a large sign proclaimed the facilities were for Aramco employees only, and passes will be checked on entry. I was getting the feeling that having an employee pass would be a good idea.

Saudi Arabian Adventures - Day 2

Today was my first day of teaching. Fuad, my contact at Aramco, had arranged to meet me at 7am at the hotel, and I had noted from my trip to the food hall yesterday that it opened for breakfast at 5am. Collectively, these were hints that Saudis were morning people. I set my alarm for 5am, which in my jet-lagged state would feel like waking up at noon in Australia.

Going to the food hall for breakfast once again had me feel like I was in America; the most popular food that people ordered were waffles! Of course, I didn't fly half-way around the world just to have waffles for breakfast, so I ordered a generous bowl of ful medames... and waffles.

Of the two breakfast foods, ful was the clear winner. It tasted good, and unlike the waffles, it had actual nutritional content. I finished breakfast with plenty of time to meet Fuad back at the hotel at 7am.

Fuad chuckled at my attempts at an Arabic greeting, and asked in perfect English "where are you learning this stuff, a phrase book?". I think that means my Arabic has some ways to go. ;)

Fuad asked about my flight here, explained that the Aramco camp was generally divided into zones, the general business hours (7:30am-3:30pm), and helped me get set up with my lab. I was also glad to hear he would be attending my first course.

At this point, I should explain a little about what I was teaching. My class consisted primarily of people with job titles that started with "Geo-", and who regularly had to deal with data that was in formats different to what they would prefer. Unsurprisingly, they'd like to use Perl to help solve these problems. That's an increasingly common story with the courses I teach.

What made this interesting is that rather than having a good four or five days (which is what I'd prefer), I was teaching two classes, a dozen students in each, with only 2.5 days per class. To top that off, I was in a different country, and I had no idea how comprehensible my Australian accent would be. I'd put together a plan that covered the basics (syntax, variables, and control structures) a tour of the CPAN, and as much regexp content as I could squeeze in.

When we were doing introductions, it became clear that my class had a good sense of my humour. My favourite introduction was from one student who said "my name is very hard to remember... it's Mohammed".

The first day of teaching went well, and from the bountiful, well-thought out questions, it was clear that I was being understood.

Tags:

Bookmark: Digg this Digg this

Microsoft Open Source Information Evening

I have just attended a Microsoft Open Source Information Evening. It was in some ways one of the stranger things that I have experienced in my computer career.

Firstly there was the location, it was in a function room in the CBD, it was convenient for public transport and had good service but seemed likely to be quite expensive. A MS employee said that they believed that some people wouldn’t want to enter an MS office – I can’t imagine why they think that they could convince people who refuse to enter the MS office of anything if they got them to attend. As there were only about 6 people who weren’t from MS it seems likely that they paid something in excess of $200 per head for each non-MS delegate (I can’t imagine two function rooms, two dedicated hotel employees manning the bar, and a supply of food for a larger audience costing less than $1200).

If they had spent $100 per head for us all to have dinner at a good restaurant then I think that the result would have been better. They might want to consider running targeted meetings in future with a small number of people personally invited to dinner at a good restaurant. That said, the dinner of duck canapes and asian-style chicken noodles that they provided was pretty good.

I suggested that they should find other ways of promoting such events as the audience was obviously smaller than they desired. One suggestion that I made was that they create a blog about what MS in Australia is doing in relation to Linux and to offer the RSS feed URL to the people who run Planet Linux Australia. They were reluctant to accept that idea and stated that they don’t want to be seen to be forcing their presence where they are not wanted. That is a good approach (and a contrast to some activities of MS in the past). But I believe that it is misguided in terms of RSS feeds. When you create a blog you make the RSS feed available and then the people who run syndication services have the option of using it. The Linux community is on the side of open discussion, I don’t think that we have anything to fear from hearing what MS people have to say. While my opinion of MS has improved this evening, I still have no interest in using any of their software. Linux just works really well and satisfies all of my needs.

There were a bunch of smart MS people there, they seemed to really care about their work and want to improve things. Their pitch was about how Open Source software works on Windows, they showed demos of the installation process for a variety of PHP programs and showed Python code being used in a MS web environment. Most of the presentation time involved technologies developed outside of MS, while there was obviously a lot of MS code involved in getting Python, Ruby, PHP, etc working well the focus was mostly on the free software. They also mentioned some of their work in opening APIs so that free software programs can access Exchange servers (among other things). I didn’t pay a great deal of attention to the technology as I’m never going to use it. I was more interested in their approach which was positive and respectful and the general trend of what they are doing.

It seems that there is an increasing number of people within MS who realise that free software is not going away and that their customers demand that things work together.

They also didn’t display any of the arrogance for which MS is known. When one of the delegates predicted that MS would take a fall the way IBM did there was no argument about that possibility, instead there was a discussion about how MS software can be used with software from other sources to meet the current and future needs of customers.

The discussion of software patents was generally not very productive, I got the impression that they were not permitted to give anything that I would have considered to be a good answer to any of the questions. They did show examples of software that they have released with RAND terms for patents and other situations in which there would be no patent liabilities. But it seems that MS as a whole has no interest in getting any of the patent problems fixed. I can only hope that IBM, NEC, or one of the other big patent companies will give MS a demonstration of why software patents are bad.

Finally I was given a couple of 8GB USB sticks and a copy of MS Expression Studio 2. If anyone wants the unopened copy of Expression Studio they can make me an offer by email.

24 Jun 2009

[edit: a home has been found]

Free to good home, one Intel 510T 22 port switch. (There are a couple of dead ports but its otherwise fine - no glitches or anything).

I've just replaced my home ethernet switch - I was using 5 ports, and most of my wired machines have gigabit now. Yay.

So, if you need a 22 port network switch, let me know. If I don't hear from anyone, it'll go into next months local recycling pickup.

This will be a 'come pick it up' arrangement, unless you're going to be at the same place I am for some other event - in Sydney, if thats not obvious.

intel 510T photo

linux.conf.au 2010 announces first keynote speaker!

An exciting announcement from the linux.conf.au 2010 team! Benjamin Mako Hill will be a keynote speaker. I’m rather excited now – Mako is a great speaker and I’m looking forward to LCA2010 even more (if that’s possible)!

Yum still on the menu?

Update: I’ve tried to post my results back to Seth’s thread but it won’t work, so I’ve emailed him instead.

In response to my article comparing Yum and Apt (at least I think it was my article, might have been someone else’s I guess), lead developer of Yum, Seth Vidal, wrote his own test script and performed some Yum benchmarks of his own.

He wrote:

Always a fun comparison. It’d be even more fun if any of the numbers seemed accurate.

His ran his test and concluded that Yum is “pretty good” and offers for others to run the test and post their results. So I did, on the same computer I used for the my article. I also compared the results to Ubuntu, as that’s really what my article was talking about :-)

So what did I find?



Scripts

Firstly, here is the script he wrote:

http://skvidal.fedorapeople.org/misc/yum-test.sh.txt

Here is the script I modified for Ubuntu:

http://christophersmart.com/files/apt-test.sh

Preparation

Before running the tests I first deleted all old repo data as I wanted as clean a system as possible. I then ran “yum check-update” and “yum install -y –downloadonly zziplib-utils” on Fedora so that I had an up-to-date package database and the files locally. I did the same thing on Ubuntu (but obviously not with “yum”).

Then I uninstalled “yum-plugin-downloadonly” and “yum-plugin-download-remove-with-leaves” and rebooted, so that it would not negatively affect the speed of Yum having to load extra plugins outside of the default.

I also ran the tests in single user mode so that other system processes such as PackageKit would not interfere.

After I had run both scripts, I also re-ran each of the tests individually (which below I call “freshboot”), rebooting in between each one so that memory caching would not manipulate the results. After all, running all those commands one after another is bound to overlap and I don’t think provides an accurate benchmark of each package management component.

Results

Results for Fedora 11 are here, followed by results on a freshboot:

http://christophersmart.com/files/simple-yum-results.txt

http://christophersmart.com/files/simple-yum-results-freshboot.txt

Ubuntu 9.04 results are here, followed by results on a freshboot:

http://christophersmart.com/files/simple-apt-results.txt

http://christophersmart.com/files/simple-apt-results-freshboot.txt

Analysis

Search by keyword

Yum provided 5 results and took 4.746s

Apt provided 12 results and took 1.366s

Apt was 3.47 times faster.

Fresh boot

Yum took 3.380s

Apt took 1.240s

Apt was 2.73 times faster.

NOTE: I don’t know why this results were faster on a freshboot, they should be about the same as the first test was on a fresh boot anyway!

Search by file provide

Yum took 10.654s

Apt took 2.291s

Apt was 4.65 times faster.

NOTE: I have discovered that running “yum provides” builds a cache and so subsequent searches are much faster. Debian has two tools for this, apt-file and dpkg, but dpkg only works for installed packages while apt-file does the entire repository. Also, apt-file needs to be updated like apt-get does, so perhaps a better comparison is needed.

Fresh boot

Yum took 10.903s

Apt took 2.354s

Apt was 4.63 times faster.

List installed pkgs

Yum listed 1,092 packages and took 1.756s

Apt listed 1,188 packages and took 0.191s

Apt was 9.19 times faster.

Fresh boot

Yum took 3.924s

Apt took 0.187s

Apt was 20.98 times faster.

Install pkg + deps

Yum installed two programs and took 9.775s

Apt installed two programs and took 4.868s

Apt was 2.01 times faster.

NOTE: I didn’t install the same program for my tests, but in my article Apt was about 3 times faster.

Fresh boot

Yum took 14.097s

Apt took 5.671s

Apt was 2.49 times faster.

Removing package

Yum took 3.714s

Apt took 2.337s

Apt was 1.56 times faster.

NOTE: For the tests in my article I used yum with “–remove-leaves”, which checks to see if any other programs requires the dependencies of the package you’re using and if not, removes those too. This was not done here, which is most likely the cause of the big difference between these and the results in my article. In my article I used tomboy for my tests (after I had removed all mono applications and then re-installed tomboy) which had to remove 7 dependencies. The test used in this script is not really testing all that.

Fresh boot

Yum took 10.137s

Apt took 4.916s

Apt was 2.06 times faster.

Conclusion

Seth’s test seem to confirm my own findings, with the exception of installing and removing packages. Naturally I installed different packages than were used here and I also used the remove-with-leaves plugin for Yum to make it remove no-longer needed dependencies.

These two tests probably caused the most eyebrow raising (as in my article it shows Ubuntu as being 3 and 5 times faster, respectively) but they aren’t really addressed in Seth’s script. The results from his script are in Ubuntu’s favour to a factor of 2.5 and 2, respectively so it’s not crazily out of proportion. I’d be interested to see some results on this. Also, a better test for searching by provides would be useful.

Of course it is hard to compare these when they all use different packages and pull in different dependencies. This is why I also had a test to install from a file rather than the database. My test installed Skype via an rpm and deb (ugly I know, but it was the only 3rd party application I could find which provided native packages for both distros), which had zero dependencies and was not in the local database. In my tests Ubuntu was faster than Fedora by a factor of 7. I’d like to see this included in his script too.

It is interesting to see that Apt is faster still, when running from a fresh boot.

Never-the-less, I would invite any others who wish to test to do so also and let me know how it went. Sure, Yum might have bucket loads more metadata and maybe it can do lots more fancy things, but at the end of the day it still comes in at second place here.

And while I’m writing all this up, I want to clarify that I’m not a Yum hater. I do agree with Seth that Yum is “pretty good”, but I just wish it would be better. Actually, I also really like Fedora.

As I concluded in my original article, maybe no-one cares how fast or slow their package manager is. Then again, maybe some people do. Personally, I’d love to see Yum become the best package manager on the planet :-)

What I now want to know are all the tweaks and configurations people do to their Yum systems to get better performance. Tips anyone?

Unreasonably Large Source Packages

For the past few hours I’ve been going a build of the GCC packages on a dual-core Opteron system with 2.5G of RAM and a pair of reasonably fast SATA disks in a RAID-1 array. The machine is reasonably powerful so presumably such a build would take a significantly larger amount of time on a laptop or an older machine – my primary development machine is an old laptop and is thus unsuitable for such things.

My aim is to do a build with the patch for GCC bug 40518 [1] – which is a small patch to the STL.

Presumably the people who are seriously involved in GCC development don’t do this, they would be doing a build of a small sub-set that matches the code that they are working on. But as someone who is not involved in the project such an approach doesn’t seem viable, by using the Debian build tools to rebuild all packages from the source package I can reliably get a good build.

It would be convenient if these large source packages could be split into smaller packages. It shouldn’t be necessary to compile the C compiler (presumably with the full double-compile process), as well as the C++, Objective C, and Fortran compilers when I only want to compile the STL (libstdc++). It also shouldn’t be necessary for me to hack around a build system when all I want to do is to apply and test a single patch.

It seems to me that the current situation discourages contributions. If I can build a package in a reasonable amount of time on my laptop (Pentium-M 1.7GHz with 1.5G of RAM) then I can work on it at any time and in any place. If it requires hours of build time on my biggest machine then I can only work on it when at home and only when I have hours to spare (or if I have enough of a need to come back to it the next day).

So if there are two bugs that have equal importance to me and one of them happens to be in part of the GCC family then the probability that I will work on the GCC bug is close to zero.

I realise that packaging GCC etc is really hard work. But it seems that making it easier for more people to contribute would alleviate the burden slightly.

brendanscott



Netgear Open Source Router (<- Hello Michael?)

I am trying to anticipate what I will need to have a wired gigabit network set up for a small office.  I can find gigabit switches, but gigabit routers don’t seem to be promoted.  Anyways, when looking I came across some stuff on Netgear’s site specifically advertising open source as a feature, notably the Open Source Router but also the “4-Port Web Safe Router with 10/100 Mbps Switch RP614“.   How nice to see mainstream vendors now selling open source as a benefit.   Now more glad I bought one of their switches yesterday.

Thesis



I'm starting to work seriously on my thesis finally. I couldn't really start before because I was overloading, and I really needed some functional analysis before I could get started.

My thesis is mostly about studying solutions to the heat equation that can be formulated as expectations of functions of brownian motion. The heat equation with a particular initial condition can be viewed as a linear differential operator, and so is a prime candidate for some functional analysis.

Differential operators are unbounded. All of the theory we covered in functional analysis was to do with bounded operators, and so I have to pick up all the theory of unbounded linear operators on my own. It turns out to be pretty complicated! The unbounded operators we're interested in are closed, which is almost as good as being continuous, and they are defined on a dense subset of the Hilbert space we're interested in.

I was worried things would get "interesting" if you tried to compose two operators defined on different dense subsets, but then I remembered Baire's Theorem, which states that arbitrary intersections of dense sets are again dense, so you've lost nothing. You should still get a ring of operators, which is pretty neat :)



[ Edit: There were some fairly major errors in this post. Fixed now. ]

Bolos 3: The Triumphant







ISBN: 067187683X

LibraryThing

This book is a little different from Bolos 1 and Bolos 2 in that it is several short novels instead of a collection of short stories. On the other hand, they're very good short novels, and I quite liked Nike's character. I'm glad I read this book.



Tags for this post: book(S) Keith_Laumer(S)
Comment

SELinux Developer Summit: CfP closes 1st July (1 week)

Just a reminder for SELinux developers and anyone interested in the internals of SELinux that the SELinux Developer Summit CfP closes on July 1st, which is about a week away.



SELinux logo




Details of the CfP are here. Don't forget to join the event mailing list if you're attending.



Proposals for presentations, lightning talks, and development sessions should be submitted via email per the instructions in the CfP. Proposals do not need to be especially detailed: if you have a good idea, simply send it in.



mystery object




For reading this, you are rewarded with a mystery object (pictured above). See if you can figure out what it is before clicking on it and reading the comments @ flickr.

Unwired and Australian Government Content Filtering Trial

Just got an email from Unwired asking if I’d like to voluntarily join a trial. A censorship trial. The wonderful “you can’t know what you aren’t allowed to see” form of “trust me” democracy embraced by our current government.

I first used Unwired for the time it took for Telstra to recover from screwing me when I moved (and bringing the DSL connection with me). I’ve kept the device around to enable on-the-road net connection on occasion and as a backup to my DSL line.

I’ll now look for an alternative backup internet solution.

June 23, 2009

Trans-Atlantic trip

I'm in the middle of a trip to London and Albany, NY - the former for work, and the latter to complete admission to the New York bar (it was cheaper to fly to New York from London than from Kuala Lumpur...

Confidence

I have every reason to feel confident...

Happy 20th Birthday

From: Geoff Huston

Sent: Tuesday, 23 June 2009 6:27 PM

Subject: [AusNOG] Happy 20th Birthday Australian Internet

On the night of the 23rd June 1989 Robert Elz of the University of Melbourne and Torben Neilsen of the University of Hawaii completed the connection work that bought the Internet to Australia. It was a 56k satellite circuit, and the Australian end used a Proteon P4100 router.

20 years, eh?

I wonder if you could make money off something like that….

Why dynamic IPv6 subnet allocations for home users are evil

Currently, a typical home Internet user will be assigned one IP address from their ISP, and then use NAT (Network Address Translation) to share the Internet connection among all their computers. The IP address assigned by your ISP is dynamic, and that is not a problem for the average home user, or even your typical power user.

Setting static IPs on computers is not all that uncommon, even among home users, excluding only the very most technically-illiterate ones. For example, your home router might be 10.0.0.1, and the other desktops in your house might be 10.0.0.10, 10.0.0.11, and so on. Then, if somebody drops by and wants to use your WiFi, they might be assigned an address via DHCP, such as 10.0.0.121.

This won’t work in IPv6 if, and only if, ISPs choose to make your subnet allocation dynamic. I urge ISPs to assign static IPv6 subnets to all their customers.

Why? Well, let me give my reasons. In IPv4, all the home machines in the above example are behind a NAT. This means the private IP address (10.0.0.121) gets dynamically translated to your public IP address (123.12.134.78).

Because of the absence of NAT in IPv6, this can’t happen! Your machine’s IPv6 address is tied to the subnet allocated to you by the ISP. And if your ISP changes your subnet every time you connect to the Internet as they currently do with IPv4, your static IPs will break horrendously.

I am aware of site-local and unique local addresses. These addresses are designed to be used only in a local situation, and not routed to the Internet. In theory, this could solve the problem, by allowing you to have a static local address, and a dynamic global address. In practice, this will not work because:

  • Site-local addresses have been deprecated by RFC 3879.
  • Unique local addresses are considered to be global addresses by current OSes. Wikipedia says that “despite the restricted, local usage of these addresses, they have a global address scope”, which means that your computer will assume either one can get to the Internet.
  • Thus, your source IP may be wrong, and your packet may be filtered and rejected by your ISP, or you may never get a reply, as the message won’t be able to get back to you.
  • Having both unique local and global addresses are confusing to the end-user, unlike link-local addresses, which are clearly marked as such, and are generally non-routable.

Finally, we must look at the reason why dynamic IPv4 addresses are assigned in the first place. I believe the main reason for this is to conserve space. With most of their address space used up, ISPs would have to count on all of their customers not using their Internet connections at the same time. Dynamic IP addresses means they can effectively over-subscribe their puny IP allocations.

In IPv6, this is not necessary. ISPs typically get a /32 allocation, which if you’re not familiar with CIDR notation, is bleeping huge! With a /32 allocation, an ISP could allocate more than 4 billion /64 subnets (which are suitable for a typical household) to each of their customers. I don’t think any ISP in the world has 4 billion customers, and if they did, they could get a /31 allocation, which would give them about 8 billion /64 subnets. Plenty of space for static allocations for everyone!

In conclusion, I’d like to summarise what I’ve been trying to bring out:

  • People that like to set static IPs on their machines will have them break if their subnet changes.
  • Site-local and unique local addresses only add to the problem, not solve it.
  • There is enough IPv6 address space in a /32 for everybody to have a static subnet.
  • There is no business advantage in giving out dynamic subnets. Do the best thing by your customers and go static.

So, dear ISPs of the world, please make static IPv6 subnets a part of your standard offering — not a “paid upgrade” or anything silly like that. It might work in the NAT’ed world of IPv4, but you will do your IPv6 customers a disservice.

Thanks for reading. :)

When you are spending over 4 hours at a time...

...on the ’phone with a girl, in intelligent conversation, & getting good practical results, does that mean thimgs are getting serious? (-:

[various] Some amusing cartoons in The Australian



The Australian pocket cartoon 2009-06-23
Two days in a row now I have had a good laugh at the small pocket cartoon on the front page of The Australian newspaper. Today was the the cartoon on the left, yesterday was Rudd suggesting Swan can at least use the ute to clear out his office.

In the context of the cartoon today it is interesting to see the Sauce bottle language has gotten some international coverage.

[debian] Yay for GeoDNS

I'm very excited that Debian is dabbling with GeoDNS.

I look forward to the day when one can point at their sources.list at ftp.debian.org (or the generic equivalent) regardless of their location and get a fast local mirror. One less question to answer when installing Debian.

Where's that toad when you need it?



Borage and housefly

Originally uploaded by Nooks

Ugh, houseflies. I would have preferred a more interesting subject to explore the borage, but at least it did not fly away when the flash went off.



ATO Spam

The level of banking spam has been going through the roof lately and I've recieved everything from St George, to the NAB, Westpac and even the CUA. However given that it's nearing tax time, the ATO is being given a run at the moment.

This morning I recieved an email with the following text:

You have get a Tax Refund on your Visa or MasterCard.

Complete the formular, and get your Tax Refund.

(Your Refund Amount Is 250.50 AUD)

Complete Formular

Classy work isn't it.

So out of curiosity I clicked on "Complete Formular" to see how professional the crackers had made the site look. It was meh. They'd obviously done a screen shot of the ATO site and then overlaid some sort of imagemap. There was a link you had to follow to "claim your refund" so I thought I'd follow that and see what sort of information they were asking for. Here it is in all it's glory.

I'm sorry, but anyone who falls for this is asking for it. The ATO is never, ever going to ask for your ATM PIN. Ever. I can see them asking for Credit Card details, but only in relation to paying of taxes, not giving of refunds.

Sigh.

June 22, 2009

Side project #1: Pageant

So as per my post from a week ago, here comes the description of my first little side project. But first a quick reiteration of the aim: I’m trying to get a feel for what it’s like actually doing a tech startup; so not charging for my time, but rather making something once that I can then sell repeatedly without having to do a lot more work. This is intended to make me more experienced rather than wealthy, so “success” means learning something, rather than making much money. As a consequence I’m aiming for business ideas that are in the bad-to-mediocre range, that will nevertheless involve some interesting/useful technology. That way if the business part goes badly, I don’t feel like I’ve screwed up a chance to make a bazillion dollars, or wasted my time doing something pointless.

So the first interesting-tech/mediocre-business idea I have is related to popcon. I like to think a comment I made once helped inspire popcon’s existance back in the day:

I think It’d be interesting to have a debian-survey style package that when installed, informs the `project’ (stats@debian.org?)  who’s using which packages. This would allow us to get a *much* better indication on which packages’s are in fact moderately stable and tested, and which are just gathering dust; and give us a better idea of what’s appropriate for inclusion in stable and/or unreleased.

Sadly that mail disappeared from the web (it was in the archives mentioned at the bottom of one of my initial posts to debian-devel regarding (what became) the testing suite, but disappeared after an upgrade/reinstall of www.debian.org) — but it was nominally in the public domain as of late July 1998, and lo and behold, popularity-contest appeared some three months later, doing everything I’d thought of and more. (For all I know, my comment played absolutely no part in Avery’s implementation, but I still like to think it did :)

Anyway, cool as popcon (and my original idea!) is, there’re interesting ways you could extend it, getting more information, and doing more with it. You could, for instance, survey more information about packages — what version’s installed would give you hints about how many people are pulling from backports, or mixing stable and unstable, or Debian and Ubuntu; or checking conffiles against their original md5sum might give you useful information about how often the default configuration is sufficient. Or you could analyse the information more thoroughly — eg, seeing if there are any unexpected correlations between people who use particular combinations of packages, or doing a netflix-like “I see you use package foo, many other people who use it also use bar, maybe that might be worth investigating.” (I once tried to do that sort of analysis on the popcon data, but all I ended up with was a pretty animated gif, that apparently crashed some people’s browsers… Red dots were systems, blue dots packages, with a package being installed on a system implying attraction, and uninstalled applying repulsion)

You could also gather completely different data — like information about the hardware, or things like the default language or timezone, or potentially even things from logs. That would let you answer questions like “do many people run Debian on HP hardware?” or “which IBM hardware is popular with Linux users?” which might influence future hardware development or purchases; or tell you surprising things about where Linux is actually being used; or give you some feedback on questions like “is the OOM killer a common occurence?” or “is IPv6 adoption actually going anywhere?”

As well as just gathering data from otherwise passive users, you could also use the data collection as an opportunity to make introductions between users — having established you’re running Debian and have a particular Intel graphics card, you could be automatically given the address of a section of the Debian wiki that’s dedicated to issues with that card; with the idea being that you can see any helpful solutions other users have already come up with to problems you’re having, or leave your own tips for future users. The same principle potentially applies to other sorts of data: if you have an old version of wordpress installed, it might be reasonable to point you at some security alerts that apply to it, or having determined you’re running Debian on some HP server, you might get directed at some updated management software that enables some extra features.

Another interesting improvement I think you could make is to provide ways users can aggregate and anonymise their own data. Even in the age of social networks and ubiquitous transparency, managing privacy of this sort of data is important: it would be spectacularly bad to provide a website that told people exactly which machines were vulnerable to which secuirty exploit, but that’s exactly what a list of which machines have which versions of which packages installed would provide. The popularity-contest software goes to some lengths to avoid that, by identifying data against a randomly generated UUID rather than an internet address, email or username; by not storing detailed information about package versions; and by restricting who has the ability to run any detailed analysis on the data. But you can go further than that by aggregating and filtering the data even before it makes its way to a centralised server — eg, rather than have each individual machine on a network reports its statistics to Debian, you could have the information sent to a proxy server that aggregates all the packages into a single report (30 computers, 10 of which have apache, 15 of which have exim, …), thus removing certain correlations (do all the machines running apache also run exim? or do none of them?), and potentially filtering things like the UUID (which might reveal something about the random number generator, particularly given Debian’s recent issue with randomness…) popcon version (which gives an indication what version of Debian is in use, and in some cases how recently it’s been updated) or timestamp (that may give away that the machine has been down). And if you’re running a network that’s intended to be somewhat locked down, it might be more reasonable to have computers reporting to a machine that you control, rather than one just out their in the wild.

So that, in very rough terms, is the spec for this project, which is currently going by the name “pageant” (ie, a popularity contest that takes itself a bit more seriously…) The technical goal is to provide a pageant client that people can run on their systems, which can report potentially arbitrary information to a central server and can receive and present relevant snippets of advice related to that information; a pageant proxy that can intermediate and filter pageant clients to provide a slighter higher level of anonymity/privacy; and a pageant server that can collect the data, provide relevant advice to clients, and analyse the data. I think it’s feasible to do an interesting job of that, that should go a little further than existing programs, and be usable by actual people, though I suspect the server side will have to be a bit beta-ish to be finished within a  week or so.

The business goal, obviously, is to turn some of the hypothetical benefits touched on above into actual income, ideally without turning it into a vast NSA-like data hoarding corporate conspiracy. I figure there’s a few reasonable ways to approach that:

  • First, I figure that providing the same information other systems currently do at no charge makes sense: so getting basic stats on how many Debian users have nickle installed, or Ubuntu users have network-manager, or Fedora users have a Synaptics touchpad should be free.
  • Second, I figure providing further analysis for companies and researchers should probably be possible, and cost something: probably more depending on how complicated the analysis is. Possibly there could be an extra fee for the analysis to not be also made available to the public; that could be entertaining.
  • Third, I figure that it probably should be possible for companies to at least provide advice to users of their hardware through the system, and that at least in some cases, that probably should be for a fee. I’m not sure if there’s a line in there somewhere between necessary advice (security updates?), helpful tips (here’s some non-free drivers for that hardware?), or outright advertising (buying our hard drives will give you 200% better performance!) that might mean “advice” should vary between free, paid and blocked. An approach might be to say distros’ advice is free, other people pay.
  • Fourth, I think it would be interesting to allow users to optionally pay a fee to register their hardware. This could have a couple of benefits: it provides a low-maintenances way to discourage ballot stuffing — it’s not at all difficult to hack up popcon to pretend you have thousands of servers running your favourite package to try to bias the statistics, but it’s somewhat harder to come up with even a few dollars thousands of times; and possibly more interestingly, it provides an easy means to link a small payment for “using Linux” with the software that’s being used — so distributing 80%-90% of those fees to the authors of the software that’s actually being used might be an efficient way of helping support free software development.

Anyway, that’s the project! My notes have a few other things in them worth mentioning — there’s a couple of not entirely little complications in a few of the above ideas, for one — but this is already long enough, and it’s not like I can’t blog again later. Even though there’s a few similar projects around (popcon and smolt in particular) I’m planning on taking a NIH approach and starting from scratch, on the basis that current stuff is mostly pretty basic to reimplement, and getting an architecture I’m comfortable with is pretty important in making it appropriately generic. As always, helpful tips, questions and/or any general encouragement appreciated, either by email or the comment link…

Permalink | No comments