When There’s an Audience, People’s Performance Improves
hopkinsmedicine.org
hopkinsmedicine.org
Although you're right it's more complicated. If you're an expert at a task, then you do better if you have increased arousal. This is because stress hormones cause new synaptic production to slow down and old networks/circuits to increase in their conduction/strength. So if you're an NBA player, and it's the playoffs, you're going to be better than normal - because you're an expert at the task.
If however the task is 'complex' (like, say, software development) then if you put pressure on people (or if they're putting pressure on themselves), the performance falls significantly. I forgot the name of the study, but this was shown cross-culturally. They gave poor Indian men (in India) 3-months salary to solve a decently straight forward lateral thinking puzzle. The men who got paid performed way worse, then the other men who weren't paid at all.
Sometimes that strikes me as oddly familiar. Paying someone to do something they love and putting too much pressure on them makes their performance degrade.
Don't like to use anecdotes, but still... I'm definitely someone who has a breakdown whenever having to do something with the possibility of an audience, let alone a live one. Fine doing something off camera, completely screw up whenever a capture card or camers is anyway in the vicinity (and hence end up having to throw out tons of failed recordings).
Even with routine muscle-memory tasks like combos in fighting games, "tournament nerves" are blamed for errors.
That's the level of optimization that I have been doing with a project that has only hundreds of users but are building momentum for something I believe in. I know people will need it, use it, and enjoy it, and it teaches me things.
I certainly wouldn't have done so if I knew it only affects one or two users.
It makes a Pi an Android Auto head unit. Google expects the head unit to have a microphone to support voice input. Although technically the phone can use its microphones, but we can't expect Google to help us lifting that (artificial) limitation. It's a RE'd protocol and app. What will we say to them? We made this Frankenstein totally-unauthorized reverse-engineered distro that sorts of encouraging people to DIY their car hardware so they can use Android Auto and it totally won't cause you troubles if anything happens to the users. Please help us by allowing the phone to take microphone input for OK Google on Android Auto?
So, in short, we need a microphone for the head unit. The Pi doesn't have built-in support for microphones. So I wanted to support the Adafruit MEMS mic which is a very simple and cheap mic that works on the I2S bus. Otherwise, we would have to buy a USB microphone/an expensive DAC and waste another USB port to achieve the "OK Google" functionality.
Using the USB mic/dac means we can't realistically use a Raspberry A+ and Zero either, because we have to use the only available port for the phone connection, not the mic. That I2S mic is $6, the BOm is perhaps $2 and thus can be easily integrated into other boards.
The problem: Low volume. It needs something called the ALSA softvol which boosts the volume level for it to work. But I couldn't figure out how to implement a volume boost for the mic. I have documented the behavior here: https://github.com/htruong/snd-i2s_rpi. Adafruit's solution to boost the volume for ALSA programs: https://learn.adafruit.com/adafruit-i2s-mems-microphone-brea.... Too bad it doesn't work with applications that expect the microphone to work out of the box, and anything that uses pulseaudio doesn't work either. Without a configuration that works out of the box for Pulse, we can't say we support that configuration. We can't design a cheap hardware that will have the mic integrated.
I have tried to look at the kernel module code and see what I could do. I have looked at a number of other sound cards to see how they implemented it to fix it from the source -- and still got stuck. Along the way, I made the module DKMS-compatible, planning to push the code upstream to the RPi kernel. I have bought additional DACs to see if I could learn anything from them, and see if is there any way I could come up with a simpler/cheaper DAC hardware. I have asked for help. I have emailed people to see if anyone knows the answer.
I tried fixing ALSA.conf for like 10 hours to make it take the "boosted microphone" as the default mic. It sort-of worked for ALSA programs, but it broke Pulse. Which means I got back to square 0.
Turns out I can neither easily fix the hardware nor the kernel driver nor ALSA.conf. It's just Pulseaudio that needs two lines of code for it to use the mic with boosted volume.
2-lines solution: https://github.com/htruong/crankshaft/blob/master/hardware_s...
Looking back, fixing Pulse seems like the obvious solution to take, but somehow it didn't seem that way to me when I faced it. For me, to discover every single paragraph I wrote above, it took me at least 5-10 hours each. The hindsight is 20/20, and you can say someone who knows Pulse would know that's the obvious answer. But I didn't know Pulse - I needed to learn linux driver, i2s, rpi, alsa, kernel, pulse all at the same time to come up with that answer.
If I ever get to 1000 people on this planet to adopt my software, then I think that'd be somewhat worthy. I'd argue that I will save each of them at least $4 compared to buying a USB DAC+mic, so that's $4000 saved. Which gets me to $40/hour rate... :)
Although having an audience also motivates me to keep my standards high for what I'm satisfied with.
I loved both of these. The pairing and collective code ownership helped me keep things in good shape even when tired. Any mess I made wasn't something I could clean up when I got to it; it would quickly become everybody's problem.
The continuous delivery did the same thing on a product level. It eliminated the mystical time of "before release" where in theory something might get fixed. If we committed code, users would see it.
This might however be argument for code review.
https://youtube.com/watch?v=SoCn9HBvlJM
I can't play 'cause I need a reason
No one here that I aim to pleasin'
There's a joint next door and I hate to barge in
But I play better with girls watchin'
On the other hand, I don't normally write code on a white board and I rely on the IDE to correct my syntax (and other) mistakes. So white board coding is a more complex task than my normal coding. So white board coding is harder and I do it more poorly.
On the other hand, if nothing is at stake, if it's just a friendly discussion about how to do something, among friends, I'm less nervous and it's more fun.
But if a potential job is on the line and I'm in front of strangers, it's more stressful and my performance suffers.
I don't know. What's the biggest effect?
That said, I realized that I tend to model the expectations of those viewing what I produce, known and unknown, and I always get carried away trying to satisfy criteria that I wouldn't if I were just doing a thing for myself. In person, it's more a test of social intelligence where subtle reactions help influence and guide my actions.
In a physical setting, I can work longer and harder without tiring when I'm a part of a balanced team, sort of a time passing more quickly with good company experience. However, I have literally hid in a closet after being surprised in a meeting and failed to play during a solo because I saw someone staring at me in the audience, though, so it's certainly not an absolute effect.
http://meow.noopkat.com/lessons-from-one-year-of-streaming-o...
When you have a deadline, at which time someone will look over your work, it's similar to having an audience.