Buzzword bingo, or how to survive long meetings

Working in the IT industry can be very exiting. But not always. There is quite some communication involved when working in a team, and some of those meetings are filled with dull moments to get through, and I must admit that it is sometimes quite challenging to stay sharp and focused. Buzzword bingo may help you to stay sharp.

Long, boring meetings

I recently got inspired by a colleague who wrote buzzword-bingo in PHP. Buzzword-bingo? It’s plain-old bingo, but there are words instead of numbers on the bingo-card. Each time a word from your bingo-card is spoken during the meeting, tick it off. When all of the words from your card were used, yell “Bingo!”. But that last part is purely optional in my opinion. I don’t intend to disrespect the speaker in any way, I just want to stay focused!

In its simplest form the program produced a random bingo-card which then needed to be printed. That is a bit awkward, as I feel a little embarrassed to have a bingo-card in front of me during a meeting. It would be a lot more acceptable to use a digital version which you can play in a seperate window on your laptop, tablet or smartphone, which I’m very likely to have with me. So I wrote one in javascript, and added support for as a distribution-point of wordlists. You upload your wordlist on and tell your co-workers the number under which your upload was stored there. Then visit the online playable version of Buzzword Bingo here, fill in the number from, press ‘load’ and ‘make bingo-card’. The sourcecode of bingo.html can be found here and the server component, here.

bingo.html is actually a client-server program: The client, bingo.html and a server component, http_get.php. That server component is needed because it is not allowed for javascript running on the client to access information on a website that it did not originate from. But on the server, that is not a problem. And that is where a little PHP is needed to – in a way – bypass browser security. Instead of having the client accessing a different website, I simply instruct it (the client-side javascript contained in bingo.html) to access a PHP-script running on that same website. That PHP-script will then access the information on a different website. Which in this case is, and uses the information from it as a wordlist to generate bingo-cards from. PHP has two functions for this that almost seem to be made for buzzword-bingo: fopen, and fgetss.

In Unix, nearly everything can be addressed as if it were a file on disk. That also applies to websites! So instead of opening a file to read, you can instruct it to read a website as if it were a client. Reading information from a website is somewhat different from a plain file, as websites require clients to speak valid HTTP. A little sniffing with wireshark and wget will show that fopen doesn’t use any HTTP-header by itself, which causes some webservers to fail to respond. Fortunately, fopen supports additional parameters that can be used to establish a valid HTTP connection. In this particular case a bare minimum: a wildcard accept-header, a fake useragent string, containing the name of the originating website and the client-ip address, and a host-header containing the name of the website it is visiting.

Reading information from the website is done with fgetss, which strips any HTML (or PHP) and produces plain text; just what’s needed for buzzword-bingo! http_get.php loads that into a buffer and strips out the first 6 words per line.

The client is a little more complex and uses AJAX, CSS and (classic) javascript to produce a random bingo-card. This is done by hiding the initial configuration with a generated bingo-card. Reloading bingo.html will discard the current bingo-card and will let you generate another. http_get.php is called from a function that uses AJAX to load the text-form contain the wordlist used to generate the bingo-card from. If you’re using an old browser that does not support this, then you can still play bingo, but you will have to copy-and-paste the wordlist by hand.


I’ve done quite a bit of programming over the years, and Buzzword Bingo is certainly not code that I’m particularly proud of. I hacked this up within a day, and later added the server component to it. Bingo.html is riddled with bugs, which you’ll find soon enough if you play around with card dimensions and wordlists. But it works for normal situations where you have a large enough wordlist and reasonably normal card. But feel free to improve it. If you do, please share the result!

Please note that the (fake) useragent-header used to access contains both the name of the website and ip-address of the client playing bingo. I did that to be able to trace abuse (to, although that part of the program can easily be altered.

Last words: This type of code is “mostly harmless”, but with some effort can be altered and used to obfuscate your presence and identity on the internet to some extent… And harvesting wordlists can also be interesting to some. Did you know you could let javascript produce hashes, like MD5? AJAX makes a webbrowser a very powerful tool for that.

But really, Buzzword Bingo is great fun to stay sharp, listen actively and respond to others. Bring a little humor to a meeting. You can play it just by yourself or with others. See how others respond to a game while discussing work… Hah! I should try that some day 😉


This entry was posted in Web and tagged , , , , , , , . Bookmark the permalink.