Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
15 messages Options
Reply | Threaded
Open this post in threaded view
|

Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Frank Shearar-3
On 23 April 2013 14:20, Bert Freudenberg <[hidden email]> wrote:
> On 2013-04-23, at 11:55, Frank Shearar <[hidden email]> wrote:
>
>> And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes
>> don't accidentally find their way back into the trunk image through
>> the update stream.
>
>
> Why is that? Why would we not want to have the XML parser in trunk? The plan was for the build server to use an image that didn't have the packages, but load the trunk map to build a full image. Otherwise, how would we update the XML package?

The plan was to remove this package, and more along the way, from
Trunk. The _release process_ would _reload_ the packages, producing
Squeak 4.5 artifacts that are apparently unchanged in functionality.
The output of the SqueakTrunk build meanwhile continually shrinks.

But if the XML package is external to trunk, it shouldn't be in the
update stream. The XML package belongs in an external, SqueakMap
hosted, package. Users can update that as and when new XML-Parser
releases are made.

But right now we don't have that. The update map keeps pulling these
packages in.

But it turns out I know less about update maps than I'd like, because
I _still_ get these packages loaded into my updated-from-a-minimal-4.5
image.

frank

> - Bert -
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Bert Freudenberg

On 2013-04-23, at 15:40, Frank Shearar <[hidden email]> wrote:

> On 23 April 2013 14:20, Bert Freudenberg <[hidden email]> wrote:
>> On 2013-04-23, at 11:55, Frank Shearar <[hidden email]> wrote:
>>
>>> And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes
>>> don't accidentally find their way back into the trunk image through
>>> the update stream.
>>
>>
>> Why is that? Why would we not want to have the XML parser in trunk? The plan was for the build server to use an image that didn't have the packages, but load the trunk map to build a full image. Otherwise, how would we update the XML package?
>
> The plan was to remove this package, and more along the way, from
> Trunk. The _release process_ would _reload_ the packages, producing
> Squeak 4.5 artifacts that are apparently unchanged in functionality.
> The output of the SqueakTrunk build meanwhile continually shrinks.

That is not how I understood the plan.

Trunk is our community's primary workplace. It needs to include all community-supported packages, and they need to be automatically updated when we hit the "update" button, so everyone is in for the fun of testing.

The minimal image is mainly used by the build server. When it updates from the trunk map, it does not update the unloaded packages, because it has the UpdateMissingPackages preference disabled. Then it can run the "minimal" tests to ensure the system works without the unloaded packages.

The result of the trunk build is the minimal image + all unloadable packages, which get pulled in by the trunk update map (UpdateMissingPackages enabled). Then it can run the "full" test suite again.

We had this discussion before, I thought, and we agreed that only truly deprecated packages are removed from the trunk update map, after the deprecation period. As soon as they are removed, the trunk build would not load them anymore, resulting in a smaller trunk image.

- Bert -

> But if the XML package is external to trunk, it shouldn't be in the
> update stream. The XML package belongs in an external, SqueakMap
> hosted, package. Users can update that as and when new XML-Parser
> releases are made.
>
> But right now we don't have that. The update map keeps pulling these
> packages in.
>
> But it turns out I know less about update maps than I'd like, because
> I _still_ get these packages loaded into my updated-from-a-minimal-4.5
> image.
>
> frank





Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Frank Shearar-3
On 23 April 2013 15:06, Bert Freudenberg <[hidden email]> wrote:

>
> On 2013-04-23, at 15:40, Frank Shearar <[hidden email]> wrote:
>
>> On 23 April 2013 14:20, Bert Freudenberg <[hidden email]> wrote:
>>> On 2013-04-23, at 11:55, Frank Shearar <[hidden email]> wrote:
>>>
>>>> And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes
>>>> don't accidentally find their way back into the trunk image through
>>>> the update stream.
>>>
>>>
>>> Why is that? Why would we not want to have the XML parser in trunk? The plan was for the build server to use an image that didn't have the packages, but load the trunk map to build a full image. Otherwise, how would we update the XML package?
>>
>> The plan was to remove this package, and more along the way, from
>> Trunk. The _release process_ would _reload_ the packages, producing
>> Squeak 4.5 artifacts that are apparently unchanged in functionality.
>> The output of the SqueakTrunk build meanwhile continually shrinks.
>
> That is not how I understood the plan.
>
> Trunk is our community's primary workplace. It needs to include all community-supported packages, and they need to be automatically updated when we hit the "update" button, so everyone is in for the fun of testing.

Trunk has never included all community-supported packages.

> The minimal image is mainly used by the build server. When it updates from the trunk map, it does not update the unloaded packages, because it has the UpdateMissingPackages preference disabled. Then it can run the "minimal" tests to ensure the system works without the unloaded packages.

So this is set by MCMcmUpdater updateMissingPackages ? I'll amend my
scripts accordingly.

> The result of the trunk build is the minimal image + all unloadable packages, which get pulled in by the trunk update map (UpdateMissingPackages enabled). Then it can run the "full" test suite again.

That's not how it's set up, and I thought I'd made it clear. But OK.
Right now the build server uses two main jobs to create a new image.
SqueakTrunk takes a hand-prepared "minimal" 4.5 image and updates it
from trunk. In a copy, it runs all the tests in that image. Then
ReleaseSqueakTrunk takes SqueakTrunk's output and loads various
packages (39Deprecated, 311Deprecated, Nebraska, Universes,
XML-Parser) into the image. This image is the thing people will
download.

As _I_ understood it, when a package is ripe for unloading, it gets a
new CI job, whose purpose is to take a SqueakTrunk image, load the
package, and run the package's tests. (This is the ExternalPackages
job.) This way, we can know that, say, XML-Parser still works.

> We had this discussion before, I thought, and we agreed that only truly deprecated packages are removed from the trunk update map, after the deprecation period. As soon as they are removed, the trunk build would not load them anymore, resulting in a smaller trunk image.

The main reason behind updates-fbs.232 is to stop the SqueakTrunk
image from loading unloading packages, so if #updateMissingPackages:
lets me do that, let's delete the update.

frank

> - Bert -
>
>> But if the XML package is external to trunk, it shouldn't be in the
>> update stream. The XML package belongs in an external, SqueakMap
>> hosted, package. Users can update that as and when new XML-Parser
>> releases are made.
>>
>> But right now we don't have that. The update map keeps pulling these
>> packages in.
>>
>> But it turns out I know less about update maps than I'd like, because
>> I _still_ get these packages loaded into my updated-from-a-minimal-4.5
>> image.
>>
>> frank
>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Bert Freudenberg
On 2013-04-23, at 16:40, Frank Shearar <[hidden email]> wrote:

> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
> image from loading unloading packages, so if #updateMissingPackages:
> lets me do that, let's delete the update.


Sounds good.

- Bert -



Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Frank Shearar-3
On 23 April 2013 15:49, Bert Freudenberg <[hidden email]> wrote:
> On 2013-04-23, at 16:40, Frank Shearar <[hidden email]> wrote:
>
>> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
>> image from loading unloading packages, so if #updateMissingPackages:
>> lets me do that, let's delete the update.
>
>
> Sounds good.

It's not apparent how to do that. I thought I could just go to
http://source.squeak.com/, log in, go to the Trunk project and delete
the map, but updates don't show up in, say, the Latest tab. (They do
of course show up elsewhere, like
http://source.squeak.org/trunk/update-fbs.232.mcm).

frank

> - Bert -
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

David T. Lewis
In reply to this post by Bert Freudenberg
On Tue, Apr 23, 2013 at 04:06:55PM +0200, Bert Freudenberg wrote:

>
> On 2013-04-23, at 15:40, Frank Shearar <[hidden email]> wrote:
>
> > On 23 April 2013 14:20, Bert Freudenberg <[hidden email]> wrote:
> >> On 2013-04-23, at 11:55, Frank Shearar <[hidden email]> wrote:
> >>
> >>> And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes
> >>> don't accidentally find their way back into the trunk image through
> >>> the update stream.
> >>
> >>
> >> Why is that? Why would we not want to have the XML parser in trunk? The plan was for the build server to use an image that didn't have the packages, but load the trunk map to build a full image. Otherwise, how would we update the XML package?
> >
> > The plan was to remove this package, and more along the way, from
> > Trunk. The _release process_ would _reload_ the packages, producing
> > Squeak 4.5 artifacts that are apparently unchanged in functionality.
> > The output of the SqueakTrunk build meanwhile continually shrinks.
>
> That is not how I understood the plan.
>
> Trunk is our community's primary workplace. It needs to include all community-supported packages, and they need to be automatically updated when we hit the "update" button, so everyone is in for the fun of testing.
>
> The minimal image is mainly used by the build server. When it updates from the trunk map, it does not update the unloaded packages, because it has the UpdateMissingPackages preference disabled. Then it can run the "minimal" tests to ensure the system works without the unloaded packages.
>
> The result of the trunk build is the minimal image + all unloadable packages, which get pulled in by the trunk update map (UpdateMissingPackages enabled). Then it can run the "full" test suite again.
>
> We had this discussion before, I thought, and we agreed that only truly deprecated packages are removed from the trunk update map, after the deprecation period. As soon as they are removed, the trunk build would not load them anymore, resulting in a smaller trunk image.
>

This is my understanding also.

Dave


Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Tobias Pape
In reply to this post by Frank Shearar-3
Am 23.04.2013 um 16:57 schrieb Frank Shearar <[hidden email]>:

> On 23 April 2013 15:49, Bert Freudenberg <[hidden email]> wrote:
>> On 2013-04-23, at 16:40, Frank Shearar <[hidden email]> wrote:
>>
>>> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
>>> image from loading unloading packages, so if #updateMissingPackages:
>>> lets me do that, let's delete the update.
>>
>>
>> Sounds good.
>
> It's not apparent how to do that. I thought I could just go to
> http://source.squeak.com/, log in, go to the Trunk project and delete
> the map, but updates don't show up in, say, the Latest tab. (They do
> of course show up elsewhere, like
> http://source.squeak.org/trunk/update-fbs.232.mcm).


In the project overview, there should be an "Edit Configurations" action
to the left. You want that.

Best
        -Tobias

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Frank Shearar-3
On 23 April 2013 16:15, Tobias Pape <[hidden email]> wrote:

> Am 23.04.2013 um 16:57 schrieb Frank Shearar <[hidden email]>:
>
>> On 23 April 2013 15:49, Bert Freudenberg <[hidden email]> wrote:
>>> On 2013-04-23, at 16:40, Frank Shearar <[hidden email]> wrote:
>>>
>>>> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
>>>> image from loading unloading packages, so if #updateMissingPackages:
>>>> lets me do that, let's delete the update.
>>>
>>>
>>> Sounds good.
>>
>> It's not apparent how to do that. I thought I could just go to
>> http://source.squeak.com/, log in, go to the Trunk project and delete
>> the map, but updates don't show up in, say, the Latest tab. (They do
>> of course show up elsewhere, like
>> http://source.squeak.org/trunk/update-fbs.232.mcm).
>
>
> In the project overview, there should be an "Edit Configurations" action
> to the left. You want that.

Thanks! Done!

frank

> Best
>         -Tobias
>

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Frank Shearar-3
In reply to this post by Bert Freudenberg
On 23 April 2013 15:49, Bert Freudenberg <[hidden email]> wrote:
> On 2013-04-23, at 16:40, Frank Shearar <[hidden email]> wrote:
>
>> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
>> image from loading unloading packages, so if #updateMissingPackages:
>> lets me do that, let's delete the update.
>
>
> Sounds good.

I need to push a new config (to include the new MorphicExtras-Tests
package)... just to sanity check, I really should call this
update-fbs.233, right? (In other words, skip the 232 number because
that was for a deleted bad config.)

frank

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Bert Freudenberg

On 2013-04-23, at 17:32, Frank Shearar <[hidden email]> wrote:

> On 23 April 2013 15:49, Bert Freudenberg <[hidden email]> wrote:
>> On 2013-04-23, at 16:40, Frank Shearar <[hidden email]> wrote:
>>
>>> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
>>> image from loading unloading packages, so if #updateMissingPackages:
>>> lets me do that, let's delete the update.
>>
>>
>> Sounds good.
>
> I need to push a new config (to include the new MorphicExtras-Tests
> package)... just to sanity check, I really should call this
> update-fbs.233, right? (In other words, skip the 232 number because
> that was for a deleted bad config.)
>
> frank

You can just reuse the 232 name, won't matter.

- Bert -



Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Frank Shearar-3
On 23 April 2013 16:34, Bert Freudenberg <[hidden email]> wrote:

>
> On 2013-04-23, at 17:32, Frank Shearar <[hidden email]> wrote:
>
>> On 23 April 2013 15:49, Bert Freudenberg <[hidden email]> wrote:
>>> On 2013-04-23, at 16:40, Frank Shearar <[hidden email]> wrote:
>>>
>>>> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
>>>> image from loading unloading packages, so if #updateMissingPackages:
>>>> lets me do that, let's delete the update.
>>>
>>>
>>> Sounds good.
>>
>> I need to push a new config (to include the new MorphicExtras-Tests
>> package)... just to sanity check, I really should call this
>> update-fbs.233, right? (In other words, skip the 232 number because
>> that was for a deleted bad config.)
>>
>> frank
>
> You can just reuse the 232 name, won't matter.

Done!

frank

> - Bert -
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Chris Muller-3
In reply to this post by Frank Shearar-3
On Tue, Apr 23, 2013 at 9:40 AM, Frank Shearar <[hidden email]> wrote:

> On 23 April 2013 15:06, Bert Freudenberg <[hidden email]> wrote:
>>
>> On 2013-04-23, at 15:40, Frank Shearar <[hidden email]> wrote:
>>
>>> On 23 April 2013 14:20, Bert Freudenberg <[hidden email]> wrote:
>>>> On 2013-04-23, at 11:55, Frank Shearar <[hidden email]> wrote:
>>>>
>>>>> And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes
>>>>> don't accidentally find their way back into the trunk image through
>>>>> the update stream.
>>>>
>>>>
>>>> Why is that? Why would we not want to have the XML parser in trunk? The plan was for the build server to use an image that didn't have the packages, but load the trunk map to build a full image. Otherwise, how would we update the XML package?
>>>
>>> The plan was to remove this package, and more along the way, from
>>> Trunk. The _release process_ would _reload_ the packages, producing
>>> Squeak 4.5 artifacts that are apparently unchanged in functionality.
>>> The output of the SqueakTrunk build meanwhile continually shrinks.
>>
>> That is not how I understood the plan.
>>
>> Trunk is our community's primary workplace. It needs to include all community-supported packages, and they need to be automatically updated when we hit the "update" button, so everyone is in for the fun of testing.

Universes is in the image, but you can bet it's not getting tested
beyond its test suite.

> Trunk has never included all community-supported packages.
>
>> The minimal image is mainly used by the build server. When it updates from the trunk map, it does not update the unloaded packages, because it has the UpdateMissingPackages preference disabled. Then it can run the "minimal" tests to ensure the system works without the unloaded packages.
>
> So this is set by MCMcmUpdater updateMissingPackages ? I'll amend my
> scripts accordingly.
>
>> The result of the trunk build is the minimal image + all unloadable packages, which get pulled in by the trunk update map (UpdateMissingPackages enabled). Then it can run the "full" test suite again.
>
> That's not how it's set up, and I thought I'd made it clear. But OK.

I thought you did, too.

> Right now the build server uses two main jobs to create a new image.
> SqueakTrunk takes a hand-prepared "minimal" 4.5 image and updates it
> from trunk. In a copy, it runs all the tests in that image. Then
> ReleaseSqueakTrunk takes SqueakTrunk's output and loads various
> packages (39Deprecated, 311Deprecated, Nebraska, Universes,
> XML-Parser) into the image. This image is the thing people will
> download.

My concern about this approach to deployment is that people will be
downloading an image that has never been tested -- just a likeness of
the trunk image since it's had packages unloaded and then reloaded,
with all associated unload and initialization scripts, etc.
Technically, the state of the image we release for download never gets
tested by individuals.

That's where I think Franks approach has an advantage -- people who
USE XmlParser will have to load it where it was previously unloaded.
Which means they're testing the unloaded/reloaded version of
XmlParser, not the one that's always been safely nestled into the
image for years.

> As _I_ understood it, when a package is ripe for unloading, it gets a
> new CI job, whose purpose is to take a SqueakTrunk image, load the
> package, and run the package's tests. (This is the ExternalPackages
> job.) This way, we can know that, say, XML-Parser still works.

That seems to offer the best of both words -- continued testing of
external packages and also a smaller image for those who don't use
XmlParser.

>> We had this discussion before, I thought, and we agreed that only truly deprecated packages are removed from the trunk update map, after the deprecation period. As soon as they are removed, the trunk build would not load them anymore, resulting in a smaller trunk image.
>
> The main reason behind updates-fbs.232 is to stop the SqueakTrunk
> image from loading unloading packages, so if #updateMissingPackages:
> lets me do that, let's delete the update.

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

Frank Shearar-3
On 23 April 2013 22:48, Chris Muller <[hidden email]> wrote:

> On Tue, Apr 23, 2013 at 9:40 AM, Frank Shearar <[hidden email]> wrote:
>> On 23 April 2013 15:06, Bert Freudenberg <[hidden email]> wrote:
>>>
>>> On 2013-04-23, at 15:40, Frank Shearar <[hidden email]> wrote:
>>>
>>>> On 23 April 2013 14:20, Bert Freudenberg <[hidden email]> wrote:
>>>>> On 2013-04-23, at 11:55, Frank Shearar <[hidden email]> wrote:
>>>>>
>>>>>> And updates-fbs.232 makes sure that Nebraska, XML-Parser, Universes
>>>>>> don't accidentally find their way back into the trunk image through
>>>>>> the update stream.
>>>>>
>>>>>
>>>>> Why is that? Why would we not want to have the XML parser in trunk? The plan was for the build server to use an image that didn't have the packages, but load the trunk map to build a full image. Otherwise, how would we update the XML package?
>>>>
>>>> The plan was to remove this package, and more along the way, from
>>>> Trunk. The _release process_ would _reload_ the packages, producing
>>>> Squeak 4.5 artifacts that are apparently unchanged in functionality.
>>>> The output of the SqueakTrunk build meanwhile continually shrinks.
>>>
>>> That is not how I understood the plan.
>>>
>>> Trunk is our community's primary workplace. It needs to include all community-supported packages, and they need to be automatically updated when we hit the "update" button, so everyone is in for the fun of testing.
>
> Universes is in the image, but you can bet it's not getting tested
> beyond its test suite.
>
>> Trunk has never included all community-supported packages.
>>
>>> The minimal image is mainly used by the build server. When it updates from the trunk map, it does not update the unloaded packages, because it has the UpdateMissingPackages preference disabled. Then it can run the "minimal" tests to ensure the system works without the unloaded packages.
>>
>> So this is set by MCMcmUpdater updateMissingPackages ? I'll amend my
>> scripts accordingly.
>>
>>> The result of the trunk build is the minimal image + all unloadable packages, which get pulled in by the trunk update map (UpdateMissingPackages enabled). Then it can run the "full" test suite again.
>>
>> That's not how it's set up, and I thought I'd made it clear. But OK.
>
> I thought you did, too.
>
>> Right now the build server uses two main jobs to create a new image.
>> SqueakTrunk takes a hand-prepared "minimal" 4.5 image and updates it
>> from trunk. In a copy, it runs all the tests in that image. Then
>> ReleaseSqueakTrunk takes SqueakTrunk's output and loads various
>> packages (39Deprecated, 311Deprecated, Nebraska, Universes,
>> XML-Parser) into the image. This image is the thing people will
>> download.
>
> My concern about this approach to deployment is that people will be
> downloading an image that has never been tested -- just a likeness of
> the trunk image since it's had packages unloaded and then reloaded,
> with all associated unload and initialization scripts, etc.
> Technically, the state of the image we release for download never gets
> tested by individuals.

Well, to be picky, I'd argue that the artifact spat out by
ReleaseSqueakTrunk requires people to test it before we release it to
ftp.squeak.org. So while, yes, you're right, these are also labelled
as alpha class artifacts.

> That's where I think Franks approach has an advantage -- people who
> USE XmlParser will have to load it where it was previously unloaded.
> Which means they're testing the unloaded/reloaded version of
> XmlParser, not the one that's always been safely nestled into the
> image for years.

My main concern with keeping stuff out the core image is that it's
just so easy to add a dependency that you really ought not to. Like
that Graphics/Morphic dependency, for instance. And if you add one,
it's just as easy to turn that into a cyclic dependency. And then
persistent state gets thrown in and suddenly it's really, really
difficult to untangle things.

>> As _I_ understood it, when a package is ripe for unloading, it gets a
>> new CI job, whose purpose is to take a SqueakTrunk image, load the
>> package, and run the package's tests. (This is the ExternalPackages
>> job.) This way, we can know that, say, XML-Parser still works.
>
> That seems to offer the best of both words -- continued testing of
> external packages and also a smaller image for those who don't use
> XmlParser.

And eventually, tiny images that swarm like bees!

frank

Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

timrowledge

On 23-04-2013, at 3:04 PM, Frank Shearar <[hidden email]> wrote:
>
>
> And eventually, tiny images that swarm like bees!

Buzzy, buzzy bees! http://www.raspberrypi.org/archives/3755


tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
A bug in the code is worth two in the documentation.



Reply | Threaded
Open this post in threaded view
|

Re: Gradually minimising Trunk (Re: [squeak-dev] The Trunk: Graphics-fbs.209.mcz)

David T. Lewis
On Tue, Apr 23, 2013 at 04:14:18PM -0700, tim Rowledge wrote:
>
> On 23-04-2013, at 3:04 PM, Frank Shearar <[hidden email]> wrote:
> >
> >
> > And eventually, tiny images that swarm like bees!
>
> Buzzy, buzzy bees! http://www.raspberrypi.org/archives/3755
>

That's really great :)