Posts from July 2008

Heading to the 8th Jornadas de Software Libre?

Thursday, July 31, 2008

By Mario Bonilla, Site Reliability Engineering Team

The 8th edition of the "Jornadas Regionales de Software Libre", a.k.a. JRSL, will happen on this August 20, 21 and 22, in Buenos Aires, Argentina. The JRSL is a Free/Open Source conference that has been held alternately in Argentina and Uruguay since the year 2000, and both the quality of its agenda and the number of its participants define the JRSL as one of the most important events of the region. This year the conference is organized by CaFeLUG (the Capital Federal GNU/Linux User Group), usuaria (the Argentinian Association of Telecommunication and Computer Users) and the University of Belgrano, which is hosting the conference.

Google's Open Source Team will be sponsoring, and I will participate giving a talk about Google and Open Source. The event will also have other important guests, for a total of 80 speakers and 120 sessions.

The conference is conveniently scheduled after the end of the Debconf 8 , which will happen in Mar del Plata, Argentina, and is not too far from Buenos Aires. If you plan to go to the Debconf, or if you just happen to be around Buenos Aires between August 20 and August 22, just remember to register and participate in the JRSL too. I hope to see you there!

London Open Source Jam 9

Wednesday, July 30, 2008

Post by Neil Dunn, Software Engineering Team

For the past 2 years, every two or three months, at the Google London Engineering offices, on a Thursday, around 6:30pm, something happens.

That something is the London Open Source Jam!

OS Jam is a free for all, open to anyone, geek night where open source hackers get together to discuss a topic close to their hearts. Last week we hosted the 10th event. The topic was Performance and Scalability. The pizza was hot, the beer was cold and the 5 minute lightning talks came thick and fast.

Here's a summary of the talks:

  • David Beaumont - What's in an API? - David talked about Java's CharSequence and Appendable APIs and use cases that can kill application performance. His takeaway message - Sometimes the standard APIs just don't fit. It's ok to roll your own.
  • Tim Cox - Scalability in an ad serving system - Tim discussed the iterations his team went through when building a fault tolerant ad serving system. He concluded that sometimes scalability comes at the cost of precision.
  • Zoe Slattery - Profiling PHP and Java with open source tools - Zoe discussed the tools she used to compare a PHP and Java implementation of Apache Lucene: XDebug for PHP and Eclipse TPTP for Java.
  • Douglas Squirrel - 5 minutes of monitoring - The second in a fantastic series of mega lists. Everything Douglas' company monitors and why they do it.
  • Manik Surtani - Publishing internal benchmarks? - Manik discussed the performance benchmarking framework he has built for JBoss Cache and put a question to the audience: Would it be useful if he published the benchmark results?
  • John Ripley - Building software for small devices - John asks, can it be done on a small device? Decoding MP3s? Watching MPEG videos? Playing Doom? Will it blend? Yes it can. As long as you know the platform.
  • Ade Oshineye - Beyond REST - 3 million HTTP requests for 6 thousand photos? Ade weighed in on the issues of RESTful architectures and suggested a few alternatives such as XMPP, the hanging GET, the never ending resource and HTTP callbacks.
  • Simon Stewart - Perfomant Selenium tests - Don't write them! - Simon says you could you use Selenium RC or Selenium Grid, or maybe HTTP unit, or maybe you could write smaller, faster unit tests instead.
  • Jonathan Chetwyn - Visual metaphors for missing images and static vs. dynamic content - Jonathan brought some questions to the table from his work on
  • Darren Hobbs - Caches! - Rip out all the caches and fix your architecture instead!

If you're near the London area and want to hear about future Open Source Jam Events, join our Google Group or monitor the feed on the OSJam page.

Rock on OS Jam!

Ed. Note: Updated post to correct spacing.

Summer of Coders at Google Pittsburgh

Tuesday, July 29, 2008

On Tuesday, July 15th, I had the opportunity to visit the Google Pittsburgh office. I had visited once before for a talk given one evening. I thought it was a great opportunity to meet other participants in Google Summer of Code™ along with Googlers that were into free/open source software.

The whole morning was quite informal, with two students and me (a former student and mentor this year) along with four Googlers for most of the day. It was great to hear how the two current students found their projects and to look around the Google offices and meet people working there.

Bina Patel, Jared Wenerd, Brady Hunsaker and me enjoying Google Pittsburgh

After chatting for what must have been over an hour about open source software, coding, programming languages, careers and the pros and cons of Nerf weaponry in the office we enjoyed lunch in the canteen where the conversations continued. The time seemed to fly by and before I knew it we were in the foyer having our photos taken before leaving. Our hosts gave us all Google Pittsburgh T-shirts, which is very nicely stylized.

It's all about the t-shirt.

Content Licenses Now Available for Your Open Source Project

Wednesday, July 23, 2008

Open source projects often consist of much more than just source code. Resources like documentation and artwork are a significant component of many projects, but sometimes licenses designed for source code are not very appropriate for sharing these resources. To that end we have now made it possible for projects hosted on to choose a content license in addition to their source code license.

Content license choices include the Creative Commons Attribution license and the Creative Commons Attribution-Share Alike license. You can use this setting to indicate the terms under which your project's non-source code materials may be distributed. Just look for the "separate content license" checkbox and select box in the "Administer" tab of your project. The setting is also available when you're creating a project.

If you choose a content license for your project, we will display it along with your source code license on your project's home page. This will make it clear to everyone the terms by which they can share your project's content, including wiki pages.

Google XML Pages: A Functional Markup Generation Tool

Google XML Pages (GXP) is a templating system we use at Google. Its main focus is markup: we mostly use it for generating HTML and XHTML, but it can work with other flavors of XML, like Atom, KML, and RSS. It also has some support for a few non-markup languages (JavaScript, CSS and plain text), though mostly for embedding them within markup.

GXP's story begins in 2001, when I was working on an early version of Google AdWords. We had been having a lot of issues with the templating system that the AdWords Java frontend was using at the time, so I started looking around for alternatives. I made a list of some features I'd like from a Java compatible templating system, which looked something like this:
  • Compile time type checking and markup validation.

  • Convenient parameter passing/modularization. (our old templating system just used "includes")

  • Automatic escaping of untrusted content (to protect against Cross Site Scripting attacks).

  • A way to prevent "business logic" from ending up in our templates without being too oppressive.

  • Easy to use internationalization support.

  • A lightweight runtime, preferably not tightly coupled to the Servlet API. (so you can use it to generate email, not just web pages)

After investigating a number of templating systems, I couldn't find anything that met our criteria. I started playing around with ideas for what a templating system that met all of these criteria would look like, and I showed my eventual design to some other members of the team. They were enthusiastic about it, and our tech lead suggested that I go ahead and build it.

The original version of the compiler was written in Python and had a very tiny runtime system written in Java. We used this new language when we rewrote the AdWords system. Since then a number of other projects at Google have used GXP, including AdSense, Blogger, and Google Reader.

Over the next few years the language grew: the internationalization support was expanded, XHTML support was added (it originally only generated HTML), and the automatic escaping system was improved to significantly improve protection against XSS. About two years ago I began a complete rewrite of the compiler in Java. One of my hopes was that this would encourage users of GXP to become contributors to the compiler.

Several months into the rewrite, Harry Heymann joined in. Not only did Harry aid in getting the new compiler finished to the point where users of the old compiler could switch to the new one, but he also contributed extremely valuable new features like runtime compilation, instantiable templates, and support for generating non-HTML markup. Over the past several months Harry has also lead the effort to open source GXP.

GXP is now available to the Open Source community. It has been a useful tool for us, and we hope that others can find a use for it as well. Like virtually all software, it is still a work in progress, so we're also hoping others would like to help build on this work. In particular, the new compiler was designed to enable generation of code in languages other than Java. We've started writing a C++ code generator, but it is not yet complete. Working on this, or developing code generators for other languages (JavaScript?, Ruby?, INTERCAL?) could be particularly interesting. Take a look and let us know what you think!

Also, if you happen to be in Portland for the O'Reilly Open Source Convention, stop by for our presentation on Wednsday.

... and the winners of the 2008 Google-O'Reilly Open Source Awards are...

Tuesday, July 22, 2008

Hello from OSCON! This evening, we hosted the fourth annual Google-O'Reilly Open Source Awards. I'm pleased to announce, for those who weren't present, the winners of the 2008 awards:
Awards were given out by Google's Chris DiBona and Parrot's Allison Randall to the various recipients, with Bryan Williams accepting on behalf of Martin.

For a special treat, Leslie Hawthorn got up and spoke about Angela's award.

As always, we're having a good time and many of us will be working the Google booth on the exhibition floor tomorrow and Thursday. I'll hope you'll come say "Hi!"

A Gaggle of Googlers Are Going to OSCON Next Week

Monday, July 21, 2008

By Cat Allman, Open Source Programs

The Annual O'Reilly Open Source Convention (OSCON ) is returning to Portland, Oregon, USA next week from July 21-25, and like swallows to Capistrano, Googlers will be there in force.

Between speakers, tutorial instructors, demo-ers of cool stuff in our booth, #116, and attendees, we expect to have upwards of 25 Googlers in attendance. Sessions with our speakers and instructors include:

On MONDAY, July 21st
PHP Extension Writing, Marcus Boerger, and Practical Test-driven Development, Josh McAdams.

On TUESDAY, July 22nd
An Open Source Startup in Three Hours, Gavin Doughtie, Porting to Python 3.0, Anthony Baxter, and People for Geeks, a panel including Brian Fitzpatrick, Ben Collins-Sussman, plus Tuesday evening is the annual Google O’Reilly Open Source Awards.

On WEDNESDAY, July 23rd
Subversion Worst Practices, Ben Collins-Sussman and Brian Fitzpatrick, Code Reviews for Fun and Profit, Alex Martelli, An Open Source Project Called 'Failure', a panel with Ben Collins-Sussman and Brian Fitzpatrick, Google XML Pages (GXP), Laurence Gonsalves and Harry Heymann, and The Google Open Source Update, Chris DiBona and Leslie Hawthorn.

On THURSDAY, July 24th
PLUTO: PL/SQL Unit Testing for Oracle, Josh McAdams, General Lightning Talks, lead by Anthony Baxter, Do You Believe in the Users?, Ben Collins-Sussman and Brian Fitzpatrick, CSS for High Performance JavaScript UI, Gavin Doughtie, Even Faster Web Sites, Steve Souders, and (The Lack of) Design Patterns in Python, Joe Gregorio.

On FRIDAY, July 25th
Open Source and Standards, Joe Gregorio

If you have questions about Google and Open Source, come on down. Hope to see you there.

Getting Giddy with Git

Friday, July 18, 2008

For Episode 18 of the Google Summer of Code™ podcast, we were fortunate enough to be joined by two mentors from the Git project, Shawn Pearce and Johannes Schindelin. Among other topics, we discussed the pleasures and perils of distributed version control systems, preparing an organization's application for Summer of Code, and some of the amazing work already completed by Git's 2008 GSoCers. You'll also get to learn the secret of Shawn's IRC handle and Johannes' commit messages, in addition to hearing about some great features in Git created by Summer of Coders and useful advice on engaging student developers in your community.

Many thanks to Johannes and Shawn for joining us!

You can download the podcast in mp3 or ogg formats. Alternatively, you can subscribe to it.

Is there a particular Summer of Code mentoring organization you'd like to see us interview? Comment away - we'd love to hear your thoughts!

Grand Prize Winners Visit the Googleplex

Thursday, July 17, 2008

Earlier this year, we announced our ten grand prize winners for GHOP, the Google Highly Open Participation Contest™ — our first initiative to get pre-university students involved in open source software development. The contest brought together more than 350 students from around the world to help ten Open Source projects make improvements to their code base, marketing materials, documentation and user experience research. Last week, all of the winners and their families visited Silicon Valley, and we were pleased to welcome them from as far afield as Poland, Russia, Thailand, South Africa, the United Kingdom and the East Coast of the United States, not to mention our local winner.

We kicked off the festivities with a day of rides, fun and frozen lemonade at Great America. We then reassembled on Friday at Google's Mountain View, California, USA headquarters for an awards ceremony with Alan Eustace, our Senior Vice President of Engineering. Following lunch, all of our winners were treated to talks on Google technology, including Android, Google App Engine, Google infrastructure and software testing from engineers including Jeff Dean, Google Fellow, and Guido van Rossum, the creator of the Python programming language.

our GHOP grand prize winners and their mentors

You might also be interested in the video of the Grand Prize Winner Awards Ceremony, which includes some interviews with our winners and their mentors.

Many congratulations to Daniel Abramov, Woorapat Boonyarittipong, Peter Cawley, Spencer Davis, Tomasz Dobrzyński, Patrick Hulin, Federico Lorenzi, Jarosław Tworek, Wojciech Szkutnik and Jonathan Wilde for their many accomplishments in the GHOP contest!

For those of you wondering when we'll be holding the next Highly Open Participation Contest, all we can say for now is stay tuned. The system to manage the contest is under active development and is completely Open Source, so if you're interested in helping make the next GHOP happen visit the Melange project page and jump on into the code!

Check Out Mox, Our Mock Object Framework for Python

Wednesday, July 16, 2008

So you just finished writing a really sweet Python application, and now it's time to do some testing. Or wait, better yet, you're going to write the tests first, then write your application code. It's probably time to pick a mock object framework to make writing tests easy; you definitely don't want to waste your time writing mocks by hand! Well, after many requests from former interns and Googlers working on Open Source projects, I'm happy to announce that now you have another option: Mox!

Mox is a mock object framework for Python developed at Google (and used in hundreds of projects here) that uses the record-replay-verify paradigm you might already be familiar with from library's such as Java's EasyMock. You create a mock object based on a class, record the expected behavior by calling methods on the mock just like a regular instance, then you put the mock in replay mode and run your test. After your test is complete, you can verify that the code-under-test interacted with the mock as expected.

Why would you want / need a mock object framework? In many cases you want to be able to test portions of your code without setting up all of your applications dependencies (databases, file systems, or even just other complex parts of your application). Mox allows you to easily create mock versions of your dependencies (Python classes, even modules) for use in tests. These mock versions only need to know about how they are called (which methods with what parameters), and what they should return. For example, instead of starting up a local copy of MySQL and populating the database with test data just to test that your InsertCustomer method works (or fails elegantly), now you can use Mox to simulate calls to, and responses from the database.

m = mox.Mox()
mock_db = m.CreateMock(database)
new_pk = 12356;
mock_db.Execute("INSERT INTO Customers (fname, lname, email) VALUES
('Sandy', 'Smith', ''").AndReturn(new_pk)

p = PersistenceLogic(mock_db)
actual_pk = p.InsertCustomer('Sandy', 'Smith', '')

assertEquals(new_pk, actual_pk)

Mox has several other advanced features, like the ability to temporarily stub out any object or module with a mock object — even parts of the global environment.

We always love to hear what you think. Please join the Mox discussion group and share your thoughts with us.

Involving Students in Open Source

Tuesday, July 15, 2008

Elin Waring, one of Joomla!'s mentors for the Google Highly Open Participation Contest (GHOP), recently presented at the Computer Science Teachers Association's CS & IT Symposium. Elin spoke to a packed room on Involving Students in Open Source, using Joomla!'s participation in the GHOP contest as a model for discussing engaging younger people in Computer Science and Information Technology. You can read more from Elin about her experiences at the conference, as well as check out the slides from her presentation. You may particularly enjoy some of the quotes in Elin's talk from Joomla's GHOP students about their experiences in the contest.

And for those of you eagerly awaiting all news GHOP, we just hosted our ten Grand Prize Winners last Friday for a day of talks, fun, cake and, of course, awards. We'll have more news, including interviews with all the winners, on this blog later this week. Stay tuned!

Check Out the Talks from Eclipse Day at the Googleplex

Thursday, July 10, 2008

You may recall our recent post about Eclipse Day at the Googleplex. We're happy to let you know that all the talks from the main conference track are now available for your viewing pleasure:

Enjoy, and let us know what you think!

2008 New Zealand Open Source Awards

The deadline for nominations for the 2008 New Zealand Open Source Awards is coming up fast. You have until July 18th GMT (remember the International Dateline!) to submit a nomination, either for an individual Kiwi for their contribution to a project or Open Source in general, or for a New Zealand organization for "exemplary use of open source". The award categories are:

- Open Source Contributor
- Open Source Software Project
- Open Source Use in Government
- Open Source Use in Business
- Open Source Use in Education
- Open Source Use in Infrastructure
- Open Source Use for Community Organizations

Google's Open Source Team is a proud sponsor of the 2008 New Zealand Open Source Awards, and we're excited to ask all of you join in the quest to find the best Kiwi Open Sourcerers. The nominees must all be New Zealanders or New Zealand organizations, but you don't have to be a Kiwi to put in a nomination. The organizers of the awards specifically encourage you to interpret "open source" in its widest sense (i.e. it need not refer to specific licenses), but will generally be taken to mean a technological system where open collaboration and innovation prevails, so be as creative as you like.

Geeks Find an Alternative Way to Spend a Summer Evening

Wednesday, July 9, 2008

What with the football and the tennis, and the Glastonbury Festival and Reboot 10, we had no idea how many people might turn up at the Jericho Tavern for our latest Oxford Geek Night. So it was with relief that we finally counted around a hundred geeks through the door, thanks to our master-stroke of handing out Moo cards to all-comers, to be exchanged for the Google Open Source Team's kind hospitality at the bar.

Keynote speakers are generally industry experts, standard bearers, or just well-respected enthusiasts in their field. This time our keynote was delivered by Tom Taylor from Headshift, talking about not so much his day job as the “beautiful pointlessness” of mashups and automations he had built in his spare time (turning automatic webservices into Twitter feeds, such as @lowflyingrocks), and how other people’s similar work had inspired his own. This was followed up by a brief announcement from the Oxfordshire branch of the British Computer Society and a short break.

Our usual mini-presentations, a.k.a. microslots, then came in thick and fast, in two batches of three. First up was Andrew Godwin, whose music graphing software LastGraph reduces CPU cycles to smoking rubble; Drew McLellan followed him, accompanied by 1970s British TV characters The Clangers in an explanation of the advantages of microformats; then Matthew Westcott took us into the break with the lowdown on the new AJAX “push” technology Comet, and provided us with a soon-to-be legendary description of long and short polling in relation to a tedious car journey with your dad.

After much poking and prodding while everyone else relaxed, Matthew began the second set of microslots with his live demo of Comet, and from this we moved on to a walkthrough of Google App Engine by Tom Dyson; Simon Whitaker imagined in lurid detail and deadpan enterprise jargon how one might use the OSX address book; and Duncan Parkes finished by taking us behind the scenes of PlanningAlerts, yet another focussed, simple, successful, society-changing application from the mySociety stable. The night was rounded off by a book raffle, back after a brief hiatus for OGN6 thanks to Friends of Ed.

You can check out videos for any of these talks, all of which are linked from the Oxford Geek Night #7 page.

Open Sourcing Browser Sync

Tuesday, July 8, 2008

Open Sourcing the Google Browser Sync client was something we'd always planned to do, and we're pleased to say that the code for it is now yours for the taking. Given our recent decision to discontinue support for Browser Sync, we wanted to make sure that the code for it was available for the developer community to use and improve. While we're no longer doing active development, we've released the code in the hopes that those folks who asked for it will use it to develop something cool. For example, it would be great to see the server ported to Google App Engine, or support for Firefox 3 implemented.

You can check out the code using any Subversion client, and we have posted a short tutorial explaining how to build and run it.

Happy Hacking!

Open Source Developers @ Google Speaker Series: Charles Chen & T.V. Raman

Want to learn more about creating accessible Web 2.0 applications from the creators of Fire Vox and Emacspeak? If you are nearby Google's Mountain View, California, USA Headquarters on Monday, July 14th, please join us for Charles Chen and T.V. Raman's presentation Enhancing Web 2.0 Accessibility via AxsJAX. They will take you through a hands on tutorial on Google-AxsJax, an Open Source framework for injecting usability enhancements into Web 2.0 applications. Among other topics, Charles and T.V. will cover an overview of AxsJAX's developer tools, enabling eyes-free interaction for web applications and iterative design processes for accessibility improvements. They will also let you know the secret to getting a cool t-shirt with the Google logo printed in Braille.

Like all sessions of the Open Source Developers @ Google Speaker Series, this session will be open to the public. Doors open at 6:30 PM and light refreshments will be served. All are welcome and encouraged to attend; guests should plan to sign in at Building 43 reception upon arrival. For those of you who cannot join us in person, the presentation will be taped and published along with all public Google Tech Talks.

For those of you who were unable to attend our last presentation, you can check out the video of Tim Ansell's presentation Gaming for Freedom.

Protocol Buffers: Google's Data Interchange Format

Monday, July 7, 2008

At Google, our mission is organizing all of the world's information. We use literally thousands of different data formats to represent networked messages between servers, index records in repositories, geospatial datasets, and more. Most of these formats are structured, not flat. This raises an important question: How do we encode it all?

XML? No, that wouldn't work. As nice as XML is, it isn't going to be efficient enough for this scale. When all of your machines and network links are running at capacity, XML is an extremely expensive proposition. Not to mention, writing code to work with the DOM tree can sometimes become unwieldy.

Do we just write the raw bytes of our in-memory data structures to the wire? No, that's not going to work either. When we roll out a new version of a server, it almost always has to start out talking to older servers. New servers need to be able to read the data produced by old servers, and vice versa, even if individual fields have been added or removed. When data on disk is involved, this is even more important. Also, some of our code is written in Java or Python, so we need a portable solution.

Do we write hand-coded parsing and serialization routines for each data structure? Well, we used to. Needless to say, that didn't last long. When you have tens of thousands of different structures in your code base that need their own serialization formats, you simply cannot write them all by hand.

Instead, we developed Protocol Buffers. Protocol Buffers allow you to define simple data structures in a special definition language, then compile them to produce classes to represent those structures in the language of your choice. These classes come complete with heavily-optimized code to parse and serialize your message in an extremely compact format. Best of all, the classes are easy to use: each field has simple "get" and "set" methods, and once you're ready, serializing the whole thing to – or parsing it from – a byte array or an I/O stream just takes a single method call.

OK, I know what you're thinking: "Yet another IDL?" Yes, you could call it that. But, IDLs in general have earned a reputation for being hopelessly complicated. On the other hand, one of Protocol Buffers' major design goals is simplicity. By sticking to a simple lists-and-records model that solves the majority of problems and resisting the desire to chase diminishing returns, we believe we have created something that is powerful without being bloated. And, yes, it is very fast – at least an order of magnitude faster than XML.

And now, we're making Protocol Buffers available to the Open Source community. We have seen how effective a solution they can be to certain tasks, and wanted more people to be able to take advantage of and build on this work. Take a look at the documentation, download the code and let us know what you think.

Google Test: Come Try Our Google C++ Testing Framework

Friday, July 4, 2008

We Googlers are quite excited about testing, but we're even more excited to share the tools we've created with the community. We've Open Sourced our Google C++ Testing Framework, Google Test, under the New BSD License. Google Test is based on the popular xUnit architecture and works on a variety of platforms, including Linux, Mac OS X, Windows and embedded systems like Symbian and Windows CE. You can find full details on the Google Testing Blog. We welcome your feedback, so please join the Google Test Discussion Group and share your thoughts with us!

Summer in Zurich

Thursday, July 3, 2008

You may recall from our previous write up that Google Zurich hosts a semi-monthly gathering of Free and Open Source Software aficionados known as the Zurich Open Source Jam. Should you find yourself in or around Zurich, Switzerland next Thursday, July 10th, you might want to stop by for the next jam, which will feature a poster session and lightning talks from local participants in the Google Summer of Code™ program. If you are a Summer of Coder or just interested in learning more about the program, please do plan to attend. You can find more information and a registration form in the Open Source Jam Zurich Google Group.

Selenium Ice: A "Cool" New Browser Extension for Internet Explorer

Tuesday, July 1, 2008

I'm happy to announce "Selenium Ice", a new tool for developers who test web applications in Internet Explorer with Selenium. This first version of Ice is limited in scope — it simply adds a new namespace ("") to every web page, for which developers can write code in C# that is callable from JavaScript. In the future, Ice will be used by the Selenium project team as a building block for providing more native control over the IE browser process. With this native access, Selenium will be able to more reliably catch and close unexpected dialog windows, provide better information when JavaScript errors occur, or do things that require interaction with the operating system, like handling file uploads and downloads. Ice can also serve as a base for linking in faster XPath support in IE — an oft-requested feature among Selenium users.

The Ice project was developed using Visual C# 2008 Express Edition, so no development licensing fees are required beyond access to a machine running Windows. There's an NAnt script for continuous integration, a WiX script for automated creation of a Microsoft Installer (.msi), and a system test script written in Python that can launch IE and ensure that the extension works correctly.

The code is all Open Source and available under the Apache 2.0 license. You can check out our project site on Google Code and may want to join our Selenium Ice discussion group. We always love to hear from you, so let us know what you think of our cool new code!