News aggregator

Jonathan McDowell: C, floating point, and help!

Planet ALUG - Thu, 31/08/2017 - 16:58

Floating point is a pain. I know this. But I recently took over the sigrok packages in Debian and as part of updating to the latest libsigkrok4 library enabled the post compilation tests. Which promptly failed on i386. Some narrowing down of the problem leads to the following test case (which fails on both gcc-6 under Debian/Stretch and gcc-7 on Debian/Testing):

#include <inttypes.h> #include <stdio.h> #include <stdint.h> int main(int argc, char *argv[]) { printf("%" PRIu64 "\n", (uint64_t)((1.034567) * (uint64_t)(1000000ULL))); }

We expect to see 1.034567 printed out. On x86_64 we do:

$ arch x86_64 $ gcc -Wall t.c -o t ; ./t 1034567

If we compile for 32-bit the result is also as expected:

$ gcc -Wall -m32 t.c -o t ; ./t 1034567

Where things get interesting is when we enable --std=c99:

$ gcc -Wall --std=c99 t.c -o t ; ./t 1034567 $ gcc -Wall -m32 --std=c99 t.c -o t ; ./t 1034566

What? It turns out all the cXX standards result in the last digit incorrectly being 6, while the gnuXX standards (gnu11 is apparently the default) result in the correct trailing 7. Is there some postfix I can add to the value to prevent the floating point truncation taking place? Or do I just have to accept this? It works fine on armel, so it’s not a simple 32/64 bit issue.

Categories: LUG Community Blogs

Daniel Silverstone (Kinnison): STM32 USB and Rust - Packet Memory Area

Planet ALUG - Wed, 30/08/2017 - 16:15

In this, our next exciting installment of STM32 and Rust for USB device drivers, we're going to look at what the STM32 calls the 'packet memory area'. If you've been reading along with the course, including reading up on the datasheet content then you'll be aware that as well as the STM32's normal SRAM, there's a 512 byte SRAM dedicated to the USB peripheral. This SRAM is called the 'packet memory area' and is shared between the main bus and the USB peripheral core. Its purpose is, simply, to store packets in transit. Both those IN to the host (so stored queued for transmission) or OUT from the host (so stored, queued for the application to extract and consume).

It's time to actually put hand to keyboard on some Rust code, and the PMA is the perfect starting point, since it involves two basic structures. Packets are the obvious first structure, and they are contiguous sets of bytes which for the purpose of our work we shall assume are one to sixty-four bytes long. The second is what the STM32 datasheet refers to as the BTABLE or Buffer Descriptor Table. Let's consider the BTABLE first.

The Buffer Descriptor Table

The BTABLE is arranged in quads of 16bit words. For "normal" endpoints this is a pair of descriptors, each consisting of two words, one for transmission, and one for reception. The STM32 also has a concept of double buffered endpoints, but we're not going to consider those in our proof-of-concept work. The STM32 allows for up to eight endpoints (EP0 through EP7) in internal register naming, though they support endpoints numbered from zero to fifteen in the sense of the endpoint address numbering. As such there're eight descriptors each four 16bit words long (eight bytes) making for a buffer descriptor table which is 64 bytes in size at most.

Buffer Descriptor Table Byte offset in PMA Field name Description (EPn * 8) + 0 USB_ADDRn_TX The address (inside the PMA) of the TX buffer for EPn (EPn * 8) + 2 USB_COUNTn_TX The number of bytes present in the TX buffer for EPn (EPn * 8) + 4 USB_ADDRn_RX The address (inside the PMA) of the RX buffer for EPn (EPn * 8) + 6 USB_COUNTn_RX The number of bytes of space available for the RX buffer for EPn (and once received, the number of bytes received)

The TX entries are trivial to comprehend. To transmit a packet, part of the process involves writing the packet into the PMA, putting the address into the appropriate USB_ADDRn_TX entry, and the length into the corresponding USB_COUNTn_TX entry, before marking the endpoint as ready to transmit.

To receive a packet though is slightly more complex. The application must allocate some space in the PMA, setting the address into the USB_ADDRn_RX entry of the BTABLE before filling out the top half of the USB_COUNTn_RX entry. For ease of bit sizing, the STM32 only supports space allocations of two to sixty-two bytes in steps of two bytes at a time, or thirty-two to five-hundred-twelve bytes in steps of thirty-two bytes at a time. Once the packet is received, the USB peripheral will fill out the lower bits of the USB_COUNTn_RX entry with the actual number of bytes filled out in the buffer.

Packets themselves

Since packets are, typically, a maximum of 64 bytes long (for USB 2.0) and are simply sequences of bytes with no useful structure to them (as far as the USB peripheral itself is concerned) the PMA simply requires that they be present and contiguous in PMA memory space. Addresses of packets are relative to the base of the PMA and are byte-addressed, however they cannot start on an odd byte, so essentially they are 16bit addressed. Since the BTABLE can be anywhere within the PMA, as can the packets, the application will have to do some memory management (either statically, or dynamically) to manage the packets in the PMA.

Accessing the PMA

The PMA is accessed in 16bit word sections. It's not possible to access single bytes of the PMA, nor is it conveniently structured as far as the CPU is concerned. Instead the PMA's 16bit words are spread on 32bit word boundaries as far as the CPU knows. This is done for convenience and simplicity of hardware, but it means that we need to ensure our library code knows how to deal with this.

First up, to convert an address in the PMA into something which the CPU can use we need to know where in the CPU's address space the PMA is. Fortunately this is fixed at 0x4000_6000. Secondly we need to know what address in the PMA we wish to access, so we can determine which 16bit word that is, and thus what the address is as far as the CPU is concerned. If we assume we only ever want to access 16bit entries, we can just multiply the PMA offset by two before adding it to the PMA base address. So, to access the 16bit word at byte-offset 8 in the PMA, we'd look for the 16bit word at 0x4000_6000 + (0x08 * 2) => 0x4000_6010.

Bundling the PMA into something we can use

I said we'd do some Rust, and so we shall…

// Thanks to the work by Jorge Aparicio, we have a convenient wrapper // for peripherals which means we can declare a PMA peripheral: pub const PMA: Peripheral<PMA> = unsafe { Peripheral::new(0x4000_6000) }; // The PMA struct type which the peripheral will return a ref to pub struct PMA { pma_area: PMA_Area, } // And the way we turn that ref into something we can put a useful impl on impl Deref for PMA { type Target = PMA_Area; fn deref(&self) -> &PMA_Area { &self.pma_area } } // This is the actual representation of the peripheral, we use the C repr // in order to ensure it ends up packed nicely together #[repr(C)] pub struct PMA_Area { // The PMA consists of 256 u16 words separated by u16 gaps, so lets // represent that as 512 u16 words which we'll only use every other of. words: [VolatileCell<u16>; 512], }

That block of code gives us three important things. Firstly a peripheral object which we will be able to (later) manage nicely as part of the set of peripherals which RTFM will look after for us. Secondly we get a convenient packed array of u16s which will be considered volatile (the compiler won't optimise around the ordering of writes etc). Finally we get a struct on which we can hang an implementation to give our PMA more complex functionality.

A useful first pair of functions would be to simply let us get and put u16s in and out of that word array, since we're only using every other word…

impl PMA_Area { pub fn get_u16(&self, offset: usize) -> u16 { assert!((offset & 0x01) == 0); self.words[offset].get() } pub fn set_u16(&self, offset: usize, val: u16) { assert!((offset & 0x01) == 0); self.words[offset].set(val); } }

These two functions take an offset in the PMA and return the u16 word at that offset. They only work on u16 boundaries and as such they assert that the bottom bit of the offset is unset. In a release build, that will go away, but during debugging this might be essential. Since we're only using 16bit boundaries, this means that the first word in the PMA will be at offset zero, and the second at offset two, then four, then six, etc. Since we allocated our words array to expect to use every other entry, this automatically converts into the addresses we desire.

If we pop (and please don't worry about the unsafe{} stuff for now):

unsafe { (&*usb::pma::PMA.get()).set_u16(4, 64); }

into our main function somewhere, and then build and objdump our test binary we can see the following set of instructions added:

80001e4: f246 0008 movw r0, #24584 ; 0x6008 80001e8: 2140 movs r1, #64 ; 0x40 80001ea: f2c4 0000 movt r0, #16384 ; 0x4000 80001ee: 8001 strh r1, [r0, #0]

This boils down to a u16 write of 0x0040 (64) to the address 0x4006008 which is the third 32 bit word in the CPU's view of the PMA memory space (where offset 4 is the third 16bit word) which is exactly what we'd expect to see.

We can, from here, build up some functions for manipulating a BTABLE, though the most useful ones for us to take a look at are the RX counter functions:

pub fn get_rxcount(&self, ep: usize) -> u16 { self.get_u16(BTABLE + (ep * 8) + 6) & 0x3ff } pub fn set_rxcount(&self, ep: usize, val: u16) { assert!(val <= 1024); let rval: u16 = { if val > 62 { assert!((val & 0x1f) == 0); (((val >> 5) - 1) << 10) | 0x8000 } else { assert!((val & 1) == 0); (val >> 1) << 10 } }; self.set_u16(BTABLE + (ep * 8) + 6, rval) }

The getter is fairly clean and clear, we need the BTABLE base in the PMA, add the address of the USB_COUNTn_RX entry to that, retrieve the u16 and then mask off the bottom ten bits since that's the size of the relevant field.

The setter is a little more complex, since it has to deal with the two possible cases, this isn't pretty and we might be able to write some better peripheral structs in the future, but for now, if the length we're setting is 62 or less, and is divisible by two, then we put a zero in the top bit, and the number of 2-byte lumps in at bits 14:10, and if it's 64 or more, we mask off the bottom to check it's divisible by 32, and then put the count (minus one) of those blocks in, instead, and set the top bit to mark it as such.

Fortunately, when we set constants, Rust's compiler manages to optimise all this very quickly. For a BTABLE at the bottom of the PMA, and an initialisation statement of:

unsafe { (&*usb::pma::PMA.get()).set_rxcount(1, 64); }

then we end up with the simple instruction sequence:

80001e4: f246 001c movw r0, #24604 ; 0x601c 80001e8: f44f 4104 mov.w r1, #33792 ; 0x8400 80001ec: f2c4 0000 movt r0, #16384 ; 0x4000 80001f0: 8001 strh r1, [r0, #0]

We can decompose that into a C like *((u16*)0x4000601c) = 0x8400 and from there we can see that it's writing to the u16 at 0x1c bytes into the CPU's view of the PMA, which is 14 bytes into the PMA itself. Since we know we set the BTABLE at the start of the PMA, it's 14 bytes into the BTABLE which is firmly in the EP1 entries. Specifically it's USB_COUNT1_RX which is what we were hoping for. To confirm this, check out page 651 of the datasheet. The value set was 0x8400 which we can decompose into 0x8000 and 0x0400. The first is the top bit and tells us that BL_SIZE is one, and thus the blocks are 32 bytes long. Next the 0x4000 if we shift it right ten places, we get the value 2 for the field NUM_BLOCK and multiplying 2 by 32 we get the 64 bytes we asked it to set as the size of the RX buffer. It has done exactly what we hoped it would, but the compiler managed to optimise it into a single 16 bit store of a constant value to a constant location. Nice and efficient.

Finally, let's look at what happens if we want to write a packet into the PMA. For now, let's assume packets come as slices of u16s because that'll make our life a little simpler:

pub fn write_buffer(&self, base: usize, buf: &[u16]) { for (ofs, v) in buf.iter().enumerate() { self.set_u16(base + (ofs * 2), *v); } }

Yes, even though we're deep in no_std territory, we can still get an iterator over the slice, and enumerate it, getting a nice iterator of (index, value) though in this case, the value is a ref to the content of the slice, so we end up with *v to deref it. I am sure I could get that automatically happening but for now it's there.

Amazingly, despite using iterators, enumerators, high level for loops, function calls, etc, if we pop:

unsafe { (&*usb::pma::PMA.get()).write_buffer(0, &[0x1000, 0x2000, 0x3000]); }

into our main function and compile it, we end up with the instruction sequence:

80001e4: f246 0000 movw r0, #24576 ; 0x6000 80001e8: f44f 5180 mov.w r1, #4096 ; 0x1000 80001ec: f2c4 0000 movt r0, #16384 ; 0x4000 80001f0: 8001 strh r1, [r0, #0] 80001f2: f44f 5100 mov.w r1, #8192 ; 0x2000 80001f6: 8081 strh r1, [r0, #4] 80001f8: f44f 5140 mov.w r1, #12288 ; 0x3000 80001fc: 8101 strh r1, [r0, #8]

which, as you can see, ends up being three sequential halfword stores directly to the right locations in the CPU's view of the PMA. You have to love seriously aggressive compile-time optimisation

Hopefully, by next time, we'll have layered some more pleasant routines on our PMA code, and begun a foray into the setup necessary before we can begin handling interrupts and start turning up on a USB port.

Categories: LUG Community Blogs

Monthly meeting

West Yorkshire LUG News - Tue, 29/08/2017 - 18:08

Discuss what’s news in IT,
make plans for Wuthering Bytes,
ask for & provide computer assistance
bring a daft Penguin Mascot
at The Lord Darcy 7:30pm ish This Thursday (31st)

Jonathan McDowell: On my way home from OMGWTFBBQ

Planet ALUG - Sun, 27/08/2017 - 18:42

I started writing this while sitting in Stansted on my way home from the annual UK Debian BBQ. I’m finally home now, after a great weekend catching up with folk. It’s a good social event for a bunch of Debian folk, and I’m very grateful that Steve and Jo continue to make it happen. These days there are also a number of generous companies chipping in towards the cost of food and drink, so thanks also to Codethink and QvarnLabs AB for the food, Collabora and Mythic Beasts for the beer and Chris for the coffee. And Rob for chasing us all for contributions to cover the rest.

I was trying to remember when the first one of these I attended was; trawling through mail logs there was a Cambridge meetup that ended up at Steve’s old place in April 2001, and we’ve consistently had the summer BBQ since 2004, but I’m not clear on what happened in between. Nonetheless it’s become a fixture in the calendar for those of us in the UK (and a number of people from further afield who regularly turn up). We’ve become a bit more sedate, but it’s good to always see a few new faces, drink some good beer (yay Milton), eat a lot and have some good conversations. This year also managed to get me a SheevaPlug so I could investigate #837989 - a bug with OpenOCD not being able to talk to the device. Turned out to be a channel configuration error in the move to new style FTDI support, so I’ve got that fixed locally and pushed the one line fix upstream as well.

Categories: LUG Community Blogs

Bring-A-Box, Saturday 11 June 2016, All Saints, Mitcham

Surrey LUG - Fri, 15/04/2016 - 18:54
Start: 2016-06-11 12:00 End: 2016-06-11 12:00

We have regular sessions on the second Saturday of each month. Bring a 'box', bring a notebook, bring anything that might run Linux, or just bring yourself and enjoy socialising/learning/teaching or simply chilling out!

This month's meeting is at the All Saints Centre, Mitcham, Surrey.  CR4 4JN

New members are very welcome. We're not a cliquey bunch, so you won't feel out of place! Usually between 15 and 30 people come along.

Categories: LUG Community Blogs

Bring-A-Box, Saturday 14th May 2016

Surrey LUG - Fri, 15/04/2016 - 18:50
Start: 2016-05-14 12:00 End: 2016-05-14 12:00

Venue to be found.  Watch this space!  No!  Better still, find a venue and discuss it on the mailing list!

Categories: LUG Community Blogs

Bring-A-Box, Saturday 9th April 2016, Station pub, W Byfleet

Surrey LUG - Thu, 07/04/2016 - 15:04
Start: 2016-04-09 12:00 End: 2016-04-09 12:00

We have regular sessions on the second Saturday of each month. Bring a 'box', bring a notebook, bring anything that might run Linux, or just bring yourself and enjoy socialising/learning/teaching or simply chilling out!

This month's meeting is at the Station Pub in West Byfleet, Surrey.

New members are very welcome. We're not a cliquey bunch, so you won't feel out of place! Usually between 15 and 30 people come along.

Categories: LUG Community Blogs

Bring-A-Box, Saturday 12th March 2016, Lion Brewery, Ash

Surrey LUG - Thu, 10/03/2016 - 22:09
Start: 2016-03-12 12:00 End: 2016-03-12 12:00

We have regular sessions on the second Saturday of each month. Bring a 'box', bring a notebook, bring anything that might run Linux, or just bring yourself and enjoy socialising/learning/teaching or simply chilling out!

This month's meeting is at the Lion Brewery Pub in Ash, Surrey.

New members are very welcome. We're not a cliquey bunch, so you won't feel out of place! Usually between 15 and 30 people come along.

Categories: LUG Community Blogs

Bring-A-Box, Saturday 13th February 2016, Merstham

Surrey LUG - Mon, 08/02/2016 - 11:58
Start: 2016-02-13 12:00 End: 2016-02-13 12:00

We have regular sessions on the second Saturday of each month. Bring a 'box', bring a notebook, bring anything that might run Linux, or just bring yourself and enjoy socialising/learning/teaching or simply chilling out!

This month's meeting is at The Feathers Pub, Merstham

42 High St, Merstham, Redhill, Surrey, RH1 3EA ‎
01737 645643 ‎ · http://www.thefeathersmerstham.co.uk

NOTE the pub opens at 12 Noon.

Categories: LUG Community Blogs

David Goodwin: Automated twitter compilation up to 16 June 2014

Planet WolvesLUG - Mon, 16/06/2014 - 15:22

Arbitrary tweets made by TheGingerDog up to 16 June 2014

2014/06/15

  • RT Proud my 8yo girl failed this worksheet. Wish she had failed it even “worse.” #GenderBias
  • 2012/11/03

  • RT #PHP devs. Please satisfy my curiosity and let me know about the frameworks you’ve used recently. Ta. https://twtpoll.com/gw7zecvn991qaxj (plz RT) 2014/06/15
  • RT Best banner at the World Cup so far
  • 2014/06/14

  • RT RT if you believe in freedom & democracy. #Falklands #LiberationDay
  • 2014/06/14

  • RT WordFriday: crosspathy
  • Attempt to pass homeopathy off as credible by combining it with empirically valid medicine.

    https://www.facebook.com/WordFriday/posts/637531733001454

    2014/06/13
  • And back home. Zzzz. Bromsgrove 2014/06/12
  • And now. Time to catch a plane. #snackTime Cyprus 2014/06/11
  • Thankfully I don’t use tweetdeck. Cyprus 2014/06/11
  • RT “US invasion and occupation cost Washington close to a trillion dollars ” – www.theguardian.com/world/2014/jun/11/mosul-isis-gunmen-middle-east-states enough to address climate change… #iraq 2014/06/11
  • RT #Iraq army capitulates to Isis militants in four cities – www.theguardian.com/world/2014/jun/11/mosul-isis-gunmen-middle-east-states what a disaster…well done, Bush and Blair… 2014/06/11
  • RT Twitter worms are so 2011. 2014/06/11
  • RT Tweetdeck XSS flaw leaves users vulnerable to account hijacking bit.ly/1lcEUK8 2014/06/11
  • RT HOW MUCH PIZZA AND COKE DO I HAVE TO FEED YOU NERDS BEFORE YOU SHUT UP ABOUT 80 HOUR WEEKS 2014/03/26
  • RT If one searches for CityLink on Google right now, you get this rather marvellously off message cartoon.
  • 2014/06/10

  • This morning we saw some Roman ruins and a Byzantine castle (mosaics etc)
  • Cyprus 2014/06/10

  • Oh Jesus. It’s raining men ! Cyprus 2014/06/08
  • It’s fun to stay at the YMCA …. You can get yourself clean. You can have a good meal …. Cyprus 2014/06/08
  • Wedding time.
  • Cyprus 2014/06/08

  • RT
  • 2014/06/07

  • The sun lounger things have already been stolen.
  • Cyprus 2014/06/08

  • It is dark early here. #landed Cyprus 2014/06/07
  • Our trusty steed for the next few hours.
  • Solihull 2014/06/07

  • RT Did… Did MongoDB just kill itself because it couldn’t rotate its log file? It did! It fucking did! 2014/06/07
  • Trying to scan this qr code causes my phone to reboot. #nexus4 #android #bug
  • Solihull 2014/06/07

  • Great weather this morning.
  • We woke to continual thunder.

    I think it is time to leave the country.

    Solihull 2014/06/07

  • Airport grammar fall. #bhx
  • Solihull 2014/06/07

  • RT HTTP/1.1 just got a major update. – Evert Pot feedproxy.google.com/~r/bijsterespoor/~3/padm6aekKhA/http-11-updated 2014/06/07
  • RT I love cycling, but it does really piss me off when cyclists cruise through red lights with an arrogance & nonchalance that boils the blood! 2014/06/06
  • RT Burnout.io – Help build a resource for the IT community to combat burnout: buff.ly/S1nWmk 2014/06/06
  • It has arrived ! (@TheMikeBennett‘s awesome book).
  • Bromsgrove 2014/06/06

  • RT But for the sacrifice of many, we may not have been born free. Think of that today if nothing else. #DDay70 #DDay #LestWeForget East, United Kingdom 2014/06/06
  • RT At turned midnight 6/6/2014 my biggest worry is getting home tomorrow. 70 yrs ago many didn’t, I doubt my day will be as life changing #DDay East, United Kingdom 2014/06/06
  • Categories: LUG Community Blogs

    Jono Bacon: FirefoxOS and Developing Markets

    Planet WolvesLUG - Thu, 12/06/2014 - 23:40

    It seems Mozilla is targeting emerging markets and developing nations with $25 cell phones. This is tremendous news, and an admirable focus for Mozilla, but it is not without risk.

    Bringing simple, accessible technology to these markets can have a profound impact. As an example, in 2001, 134 million Nigerians shared 500,000 land-lines (as covered by Jack Ewing in Businessweek back in 2007). That year the government started encouraging wireless market competition and by 2007 Nigeria had 30 million cellular subscribers.

    This generated market competition and better products, but more importantly, we have seen time and time again that access to technology such as cell phones improves education, provides opportunities for people to start small businesses, and in many cases is a contributing factor for bringing people out of poverty.

    So, cell phones are having a profound impact in these nations, but the question is, will it work with FirefoxOS?

    I am not sure.

    In Mozilla’s defence, they have done an admirable job with FirefoxOS. They have built a powerful platform, based on open web technology, and they lined up a raft of carriers to launch with. They have a strong brand, an active and passionate community, and like so many other success stories, they already have a popular existing product (their browser) to get them into meetings and headlines.

    Success though is judged by many different factors, and having a raft of carriers and products on the market is not enough. If they ship in volume but get high return rates, it could kill them, as is common for many new product launches.

    What I don’t know is whether this volume/return-rate balance plays such a critical role in developing markets. I would imagine that return rates could be higher (such as someone who has never used a cell phone before taking it back because it is just too alien to them). On the other hand, I wonder if those consumers there are willing to put up with more quirks just to get access to the cell network and potentially the Internet.

    What seems clear to me is that success here has little to do with the elegance or design of FirefoxOS (or any other product for that matter). It is instead about delivering incredibly dependable hardware. In developing nations people have less access to energy (for charging devices) and have to work harder to obtain it, and have lower access to support resources for how to use new technology. As such, it really needs to just work. This factor, I imagine, is going to be more outside of Mozilla’s hands.

    So, in a nutshell, if the $25 phones fail to meet expectations, it may not be Mozilla’s fault. Likewise, if they are successful, it may not be to their credit.

    Categories: LUG Community Blogs

    Jono Bacon: Community Management Training at OSCON, LinuxCon North America, and LinuxCon Europe

    Planet WolvesLUG - Wed, 11/06/2014 - 17:55

    I am a firm believer in building strong and empowered communities. We are in an age of a community management renaissance in which we are defining repeatable best practice that can be applied many different types of communities, whether internal to companies, external to volunteers, or a mix of both.

    I have been working to further this growth in community management via my books, The Art of Community and Dealing With Disrespect, the Community Leadership Summit, the Community Leadership Forum, and delivering training to our next generation of community managers and leaders.

    Last year I ran my first community management training course, and it was very positively received. I am delighted to announce that I will be running an updated training course at three events over the coming months.

    OSCON

    On Sunday 20th July 2014 I will be presenting the course at the OSCON conference in Portland, Oregon. This is a tutorial, so you will need to purchase a tutorial ticket to attend. Attendance is limited, so be sure to get to the class early on the day to reserve a seat!

    Find Out More

    LinuxCon North America and Europe

    I am delighted to bring my training to the excellent LinuxCon events in both North America and Europe.

    Firstly, on Fri 22nd August 2014 I will be presenting the course at LinuxCon North America in Chicago, Illinois and then on Thurs Oct 16th 2014 I will deliver the training at LinuxCon Europe in Düsseldorf, Germany.

    Tickets are $300 for the day’s training. This is a steal; I usually charge $2500+/day when delivering the training as part of a consultancy arrangement. Thanks to the Linux Foundation for making this available at an affordable rate.

    Space is limited, so go and register ASAP:

    What Is Covered

    So what is in the training course?

    My goal with each training day is to discuss how to build and grow a community, including building collaborative workflows, defining a governance structure, planning, marketing, and evaluating effectiveness. The day is packed with Q&A, discussion, and I encourage my students to raise questions, challenge me, and explore ways of optimizing their communities. This is not a sit-down-and-listen-to-a-teacher-drone on kind of session; it is interactive and designed to spark discussion.

    The day is mapped out like this:

    • 9.00am – Welcome and introductions
    • 9.30am – The core mechanics of community
    • 10.00am – Planning your community
    • 10.30am – Building a strategic plan
    • 11.00am – Building collaborative workflow
    • 12.00pm – Governance: Part I
    • 12.30pm – Lunch
    • 1.30pm – Governance: Part II
    • 2.00pm – Marketing, advocacy, promotion, and social
    • 3.00pm – Measuring your community
    • 3.30pm – Tracking, measuring community management
    • 4.30pm – Burnout and conflict resolution
    • 5.00pm – Finish

    I will warn you; it is an exhausting day, but ultimately rewarding. It covers a lot of ground in a short period of time, and then you can follow with further discussion of these and other topics on our Community Leadership discussion forum.

    I hope to see you there!

    Categories: LUG Community Blogs

    Dick Turpin: Old Tom

    Planet WolvesLUG - Thu, 05/06/2014 - 11:58
    So most of you will have heard my complaints about the difficulty in simply being able to order fish and chips from the chip shop? Well it would seem there are many other opportunities out there to eat up your lunch hour when trying to buy something.

    A well known UK car accessory outlet.

    Me: "Hi there can I have a Tom Tom Start 25 UK & ROF @ £99.99 please?"
    Assistant: "Do you want the maps for life?"
    Me: "Oh Christ, here we go! No thank you."
    Assistant: "Do you want the European maps?"
    Me: [Sobbing gently] "Could I just have the Tom Tom I asked for please?"
    Assistant: "OK I'll go and fetch one."
    Categories: LUG Community Blogs

    David Goodwin: Automated twitter compilation up to 04 June 2014

    Planet WolvesLUG - Wed, 04/06/2014 - 11:41

    Arbitrary tweets made by TheGingerDog up to 04 June 2014

    Categories: LUG Community Blogs

    David Goodwin: Automated twitter compilation up to 01 June 2014

    Planet WolvesLUG - Sun, 01/06/2014 - 05:00

    Arbitrary tweets made by TheGingerDog up to 01 June 2014

    • RT Apologies but the #psychic fayre at Finstall Park has been cancelled due to unforeseen circumstances. 2014/05/31
    • RT 2 great PHP conferences this autumn in the UK: #Symfony_Live & #PHPNW14. Wonder if I either will let me do a talk 2014/05/30
    • RT As we await the Apple iWatch, don’t forget that in 1984 Seiko made an iWatch — of sorts. And boy it was awesome.

    2014/05/30

  • RT One of the best #PHP conferences in the world is back for 2014, and is looking for sponsors. conference.phpnw.org.uk/phpnw14/sponsors/sponsorship-packages/ 2014/05/30
  • The coop parking enforcer is out and going to be quite rich today it seems. Bromsgrove 2014/05/30
  • Sainsburys at Hundred House (Stourbridge road, Bromsgrove)? Alcohol licence application notice.
  • Bromsgrove 2014/05/29

  • New Hair ! #goodHairDay #selfie
  • Bromsgrove 2014/05/29

  • Haha. It appears my evil plan involving a weakened beer bottle and a car boot worked ! #brotherlylove Bromsgrove 2014/05/26
  • Whoops! Didn’t vote ukip. #noukip West Midlands, United Kingdom 2014/05/22
  • .@moreteadoctor the children have been shouting “‘ERE SHEILA!” for 10 mins in this playground. You have a lot to answer for. #memoryLivesOn Bromsgrove 2014/05/22
  • RT #WhyImVotingUkip DISGRACE!!!! This is one of meny!1!
  • 2014/05/20

  • RT #WhyImVotingUkip Because the weather’s really starting to pick up, and I don’t want it ruined by gays. 2014/05/21
  • RT Because if the gays obtain control over the weather it might start raining men, and they will probably be Romanian #WhyImVotingUkip 2014/05/21
  • RT #WhyImVotingUkip Because these immigrants can’t speak proper English! Oh wait a minute…
  • 2014/05/21

  • RT #WhyImVotingUkip because my university is being overrun by Librarians and we need to send them back to Libraria 2014/05/21
  • RT Worrying signs that the girl will be a javascript programmer. “Sometimes, Daddy, 5 and 5 makes 55 and sometimes it makes 10.” 2014/05/17
  • RT eBay hacked. They say that stolen user passwords were encrypted, ask users to change passwords anyway. https://blog.ebay.com/ebay-inc-ask-ebay-users-change-passwords/ 2014/05/21
  • At school early for once. No doubt they’ll be late out today. #schoolrun West Midlands, United Kingdom 2014/05/21
  • RT Virgin Media #facebooknews
  • 2014/05/21

  • RT Tried as I might, I could not get this damn thing to work. Seen at airport.
  • 2014/05/20

  • Somewhat surprised that a government information site (ratings.food.gov.uk) has been offline for ~6 days. #fail #hygiene Bromsgrove 2014/05/20
  • RT Just finished my second listen-through of ‘Harvey’ by Phil Rossi. I still love the story. You can listen free here: podiobooks.com/title/harvey/ 2014/05/19
  • RT Computer timings in perspective:
  • 2014/05/17

  • Lawn mowed. Decking had a second coat of brown stuff. 25% of study painted. No children drowned. Forest explored. Den made. #today Bromsgrove 2014/05/18
  • TIL – don’t mess with massive lizards. #Godzilla2014 Birmingham 2014/05/17
  • Godzilla o’clock. 2014/05/17
  • “Couldn’t think of an image for this slide”… Thanks. @jukesie #port80
  • Newport 2014/05/16

  • RT Amazingly clever, and somewhat manipulative talk by @roy on neuro-marketing in user experience. #mindblown #Port80
  • 2014/05/16

  • “Don’t worry it’s only marketers collecting our personal information … ” #port80 (thanks @kwe)
  • Newport 2014/05/16

  • RT Watching someone try to get through a spam captcha using voice commands is painful! Cc/ @kimberleytew #port80 2014/05/16
  • RT Next up at @Port80Events is @roy talking about the human brain & what makes people click
  • 2014/05/16

  • Cool brain anatomy lesson with @roy at #port80 … Hopefully we won’t be fighting bears to design websites … #betterSafeThanSorry Newport 2014/05/16
  • Now: @nathan_ford “Mastering the dark art of fluid layout.” — if only I could learn everything about it in a 45min talk #port80 #webdesign Newport 2014/05/16
  • RT Recommended reading from @hereinthehiveElement Queries, From the Feet Up
    www.backalleycoder.com/2014/04/18/element-queries-from-the-feet-up/
    #port80 2014/05/16
  • Thank you @hereinthehive #port80 Newport 2014/05/16
  • Css Breakpoints. Responsive & fluid design. Progressive enhancement. Device type. Reusability. Modularity.
    patternlab.io #port80 Newport 2014/05/16
  • “Failure is only the opportunity to begin again intelligently.”
    “Do it again …like a baby” … #port80 Newport 2014/05/16
  • Power pose time!
    Thanks @denisejacobs #port80 Newport 2014/05/16
  • RT Letter of the week, from May 10 issue of @TheEconomist.
  • 2014/05/15

  • It looks like the parking attendants are fining people today who are parking incorrectly outside coop. #bromsgrove Bromsgrove 2014/05/15
  • Yesterday I mowed the lawn (1st time for me), stained the decking and fitted a new light. Today may be tame in comparison. Bromsgrove 2014/05/15
  • throw new TooHotForAJumperException(“missing the rain ?”); Bromsgrove 2014/05/15
  • RT Bloody Polish: coming over here and teaching us proper English. Vote Ukip, and stop this outrage via @georgephilipb
  • 2014/05/12

  • RT “@mental_floss: U.S. banned the sale of lawn darts in 1988. Parents were urged to “destroy them immediately.”” – meanwhile assault rifles.. 2014/05/13
  • The woman driving k80 anm would do well to look before crossing mini roundabouts. #ifOnlyInsurersCheckedTwitter #driving Bromsgrove 2014/05/13
  • RT How to use friendship.js
  • 2014/05/13

  • Real life HITMAN youtu.be/hKEjM9gF4UQ via @YouTube (it was an awesome film) 2014/05/13
  • RT artificial intelligence, technology of the future — always has been, always will be. #DualismTheBook 2014/05/13
  • The early bird is tired. #airport #taxi #conscript Bromsgrove 2014/05/13
  • RT OK. I give up. Just put the apostrophes where you like Dorothy Perkins.
  • 2014/05/09

  • Drawing Eyebrows On Babies – The Best Of www.anorak.co.uk/397145/strange-but-true/drawing-eyebrows-on-babies-the-best-of.html/ via @TheAnorak 2014/05/12
  • RT 10 Great Reasons to vote #UKIP. I don’t know who made it – so I referenced it from official #UKIP websites
  • 2014/05/05

  • Achievement unlocked : Plumbing 102.
    Fixed leaking stop tap gland.
    Fixed leaking hot water joint. #relieved #EasyFix Bromsgrove 2014/05/11
  • Rowan ran 5km today in his first fun run. He was very happy to have a medal.
  • Bromsgrove 2014/05/11

  • RT Wow. Such elePHPants. Much PHP.
  • 2014/05/06

  • With my psychic powers I predict there will be more painting taking place soon. Bromsgrove 2014/05/11
  • I can’t see the tires on this light. Tier perhaps?
  • Bromsgrove 2014/05/10

  • RT UK surveillance oversight in action (yes, this is a real exchange):
  • 2014/05/09

  • Bromsgrove has a fair this week.
  • Bromsgrove 2014/05/08

  • RT when someone says “giving 110%” this is what they mean i.imgur.com/uFDRzSN.gif 2014/05/06
  • RT A wood near Bromsgrove yesterday. The colour & scent were amazing! @WoodlandTrust
  • 2014/05/06

  • Now to see if the house has flooded while I’ve been out. #noPuddleYet Bromsgrove 2014/05/06
  • There’s nothing like chasing another runner (and beating them) to make you speed up and push yourself that bit more. #sweatingLikeAPig Bromsgrove 2014/05/06
  • Arrangements sorted for @Port80Events … May 16th. Newport. All the cool kids will be there (and me). #port80 #webdesign Bromsgrove 2014/05/06
  • RT They were planning an attack on an EDL demo with guns, knives, and an improvised explosive (pictured) #WMCTU
  • 2014/05/06

  • And now …. to run. Run like the wind. Bromsgrove 2014/05/06
  • Achievement unlocked: Plumbing 101 – outside tap replacement. #WorkingHose #BewareCat
  • Bromsgrove 2014/05/06

  • RT Gotten quite a few photo requests for this underdoge: @dogecoin @Josh_Wise @PPR98. #VeryDega #SuchWow #NASCAR
  • 2014/05/04

  • RT Check out the product placement on this…
  • 2014/05/04

  • RT How very very true — who the slave and who the master? (via @elvis717)
  • 2014/05/04

  • RT Learning how to map disease breakout areas using #OpenStreetMap at @ukodi with @msf_uk 2014/05/03
  • RT Hey @ITISLENNYHENRY. You’ve got to to see this. Genius via @beaubodor #YouKip
  • 2014/05/03

  • Unimpressed by The Amazing Spiderman 2 (not worth paying for). Divergent seemed better. Bromsgrove 2014/05/04
  • This is good Bombay mix like stuff. (Farari Chevra).
  • Bromsgrove 2014/05/04

  • Yum yum. Tasty chocolates from Brussels. (Van Dender)
  • Bromsgrove 2014/05/04

  • RT “£130?! For one night?! I paid less for her. NO F*CKING WAY!” Shouts the drunk guy, with a hooker, at Premier Inn reception. Oh dear oh dear 2014/05/03
  • My house has been invaded by lots of noisy women. Time to plan my escape to the cinema or something …. Bromsgrove 2014/05/03
  • RT 2048 for Atari 2600:
    2048 for Commodore 64
  • 2014/05/03

  • RT Everyone has to work.
    That’s what family farms do.
  • 2014/05/03

    Categories: LUG Community Blogs

    Dick Turpin: Four coaches.

    Planet WolvesLUG - Sat, 31/05/2014 - 17:15
    I am living proof of those people who say "You know if I wrote a book about it nobody would believe it!"

    So I went to visit my daddy today in Birmingham QE hospital. I caught the train to Birmingham and had to change for University station. I spied a guy in blue offering platform information at Birmingham and made my way towards him. Mr Blue coat (I have no idea what they're called?) was just about to help a very smartly dressed guy who looked to be in his early twenties.

    Passenger: "Can you tell me where to go for the 13.20 to blah blah blah?" (I forget where now)
    Mr Blue: "Platform 7 sir."
    Passenger: "Platform 7? You sure?"
    Mr Blue: "Yes sir, platform 7"
    Passenger: "It says four coaches?"
    Mr Blue: "That's right sir."
    Passenger: "So there's no tracks at platform 7 then?"
    Mr Blue: "I'm Sorry?"
    Passenger: "I've never heard of coaches stopping at platforms before?"
    Mr Blue: "The train is made up of four coaches sir."

    Me and Mr Blue pissed ourselves silly once he was out of reasonable earshot.
    Categories: LUG Community Blogs

    Jono Bacon: Last Day Today

    Planet WolvesLUG - Thu, 29/05/2014 - 15:34

    Recently I announced I am stepping down as Ubuntu Community Manager at Canonical and moving to XPRIZE as Senior Director of Community. Today is my last day at Canonical.

    I just want to say how touched I have been by the response. The comments, social media posts, emails, and calls from you have been so kind and supportive. You are all good people, and I am going to miss every single one of you.

    The reason why I have devoted my life to understanding communities is that I believe communities bring out the best in people, and all of you are a perfect example of that. I cannot express just how much I appreciate it.

    Over the course of the next few weeks my replacement will be sourced and announced. and in the interim my team (Daniel Holbach, Michael Hall, David Planella, Nicholas Skaggs, Alan Pope) will take over my duties. Everything has been transitioned over, and remember, the weekly Q&As will continue at 6pm UTC every Tuesday on Ubuntu On Air with my team filling in for me. As ever, any and all Ubuntu questions are welcome!

    Of course, I will still be around. I am going to continue to be a member of the Ubuntu community and an avid Ubuntu user, tester, and supporter. I will continue to be on IRC, you can email me at jono@jonobacon.org, I will continue to do Bad Voltage, and I have a busy schedule at the Community Leadership Summit, OSCON, and more. I am also going to continue to have my own Q&A session every week where you can ask questions about my perspectives on Ubuntu, Canonical, community management, XPRIZE, and more; I will announce this soon.

    Ubuntu has a tremendous future ahead of it, built on the hard work and passion of a global community. We are only just getting started with a new era of Ubuntu convergence and cloud orchestration and while I will miss being there in an official capacity, I am just thankful that I can continue to be along for the ride in the very community I played a part in building.

    I now have a few weeks off and then my new adventure begins. Stay tuned.

    Categories: LUG Community Blogs

    Jono Bacon: Community Leadership Summit 2014, New Forum, OSCON, Training, and More!

    Planet WolvesLUG - Thu, 29/05/2014 - 04:51

    As many of you will know, I organize an event every year called the Community Leadership Summit. The event brings together community leaders, organizers and managers and the projects and organizations that are interested in growing and empowering a strong community.

    The event pulls together these leading minds in community management, relations and online collaboration to discuss, debate and continue to refine the art of building an effective and capable community.

    This year’s event is shaping up to be incredible. We have a fantastic list of registered attendees and I want to thank our sponsors, O’Reilly, Citrix, and LinuxFund.

    The event is taking place on 18 – 19 July 2014 in Portland, Oregon. I hope to see you all there, it is going to be a fantastic CLS this year!

    I also have a few other things to share too…

    Community Leadership Forum

    My goal as a community manager is to help contribute to the growth of the community management profession. I started this journey by publishing The Art of Community and ensuring it is available freely as well as in stores. I then set up the Community Leadership Summit as just discussed, and now I am keen to put together a central community for community management and leadership discussion.

    As such, I am proud to launch the new Community Leadership Forum for discussing topics that relate to community management, as well as topics for discussion at the Community Leadership Summit event each year. The forum is designed to be a great place for sharing and learning tips and techniques, getting to know other community leaders, and having fun.

    The forum is powered by Discourse, so it is a pleasure to use, and I want to thank discoursehosting.com for generously providing free hosting for us.

    Be sure to go and sign up!

    Speaking Events and Training

    I also wanted to share that I will be at OSCON this year and I will be giving a presentation called Dealing With Disrespect that is based upon my free book of the same name for managing complex communications.

    This is the summary of the talk:

    In this new presentation from Jono Bacon, author of The Art of Community, founder of the Community Leadership Summit, and Ubuntu Community Manager, he discusses how to process, interpret, and manage rude, disrespectful, and non-constructive feedback in communities so the constructive criticism gets through but the hate doesn’t.

    The presentation covers the three different categories of communications, how we evaluate and assess different attributes in each communication, the factors that influence all of our communications, and how to put in place a set of golden rules for handling feedback and putting it in perspective.

    If you personally or your community has suffered rudeness, trolling, and disrespect, this presentation is designed to help.

    This presentation is on Wed 23rd July at 2.30pm in E144.

    In addition to this I will also be providing a full day of community management training at OSCON on Sunday 20th July in D135.

    I will also be providing full day community management training at LinuxCon North America and LinuxCon Europe. More details of this to follow soon in a dedicated blog post.

    Lots of fun things ahead and I hope to see you there!

    Categories: LUG Community Blogs

    Dick Turpin: I want it but I can't afford it.

    Planet WolvesLUG - Tue, 27/05/2014 - 08:53
    So I run an 'Opt-In' mailing list predominately of refurbished PC's and Laptops. All the prices are excluding delivery and are Ex VAT. I had this begging email when I got in this morning.

    I regularly get your email updates, but all of the available machines are more expensive than I want to pay.
    I currently have a Compaq Pressario running XP, however it is extremely slow. I need an XP machine as I cannot afford to upgrade all of the software on the one I have. I also have a Dell laptop running Windows 7 (64 bit).

    This is the specification for my Compaq:

    Compaq  Presario 6207EA
    Microsoft® Windows XP Home Edition Service Pack 3
    Celeron CPU 1.70 GHz
    1.49GB RAM
    Maxtor 2F040J0 Hard Drive 40 GB
    Samsung SP0812N Hard Drive 80 GB (Secondary Drive)
    HL-DT-ST DVD-ROM GDR8161B
    TDK DVDRW161N
    Floppy Drive

    I know that the deal on your update below is a good one, and I could load XP instead of 7, but it is still quite a way above my budget.

    Could you let me know if you have refurbished machines that will perform quicker than my Compaq, and if so, how much are they.

    Many thanks

    Not only has this guy got a very large doorstop but as he points out three times that he has no money and that even the £169.00 PC I was offering was out of his price range! Which begs the question "Why are you asking?"

    Oh and also the good advice I sent him to look at freecyle.org was wasted as his hotmail account has a problem and is not accepting mail!
    Categories: LUG Community Blogs

    Ron Wellsted: Barcamp Birmingham

    Planet WolvesLUG - Tue, 27/05/2014 - 07:56

    This event will be held on Saturday 7th June 2014 between 9am and 5pm at The Studio Venue Company Ltd., 7 Cannon Street, Birmingham B2 5EP.

    All the details can be found at http://www.flossuk.org/Events/BarcampBirmingham2014

    I hope to see you there.

    Categories: LUG Community Blogs
    Syndicate content