opensource.google.com

Menu

Google Code-in 2014 wrap up with Drupal

Friday, April 10, 2015

Drupal, one of the Google Code-in 2014 mentoring organizations, has been working toward the release of a new major version. Grand prize winner Getulio Valentin Sanchez contributed to the upcoming release during the contest and shared his story with us.


I was 13 years old the first time I got access to a computer. I had no idea how to connect it to the internet, but that didn’t stop me from experimenting. When I was 14, I saw a documentary about Google and discovered that “programming” and “coding” were completely different things than I’d thought. In that same documentary, I saw Google’s offices and I resolved to myself that I would try to visit them in person by the time I turned 18.

After participating in an OMAPA Computer Olympics event here in Paraguay, a Google Code-in (GCI) mentor from Sugar Labs contacted me to ask if I could help spread the word about GCI in my local community. During that conversation, the mentor encouraged me to enter GCI myself. He pointed out that Drupal was one of the mentoring organizations and they use a lot of PHP, the language I’m most familiar with.

Before GCI, I had never worked with an open source project, nor did I know how to create a patch or anything like that. But since it was a possible opportunity to achieve the dream I’d set for myself, I thought “why not learn something new?”

When the contest began, I got to work on my first task: porting the simple but useful Scroll To Top module to Drupal 8. It was astonishing to me when my patch was approved and committed. With that astonishment came an amazing sensation in knowing that somewhere in the world, someone will be using something that I made. Tasks like these were a little challenging, but I quickly fell in love with this type of work and created a series of blog posts and a video about the process.

I continued porting modules to Drupal 8 throughout the GCI contest. I think the most difficult task I faced was porting the Administer Users by Role module. This wasn’t because it’s a large module, but rather because I had to learn about access checking which I’d never heard about before. Although this wasn’t impossible, it took me about a week to get an initial version ready for the community’s consideration.

The seven weeks I spent participating in GCI taught me a lot. I learned about following coding standards, programming concepts like dependency injection and the Hollywood principle, some of the more powerful features of Git, and features of PHP that I hadn’t even known existed!

People say every end is a new beginning, and that’s been true for me. The end of GCI 2014 was also the beginning of my experience as a regular contributor to Drupal. I now spend my weekends working with this amazing platform and collaborating with the Drupal community. And soon, I’ll be beginning my journey to see Google’s offices in person like I’d dreamed of before -- I began with a humble “Hello World” and eventually became one of the GCI 2014 Grand Prize Winners.


by Getulio Valentin Sanchez, GCI grand prize winner

We throw pie with a little help from our friends

Thursday, April 9, 2015

(Cross-posted with the Google Developers Blog)

Fun Propulsion Labs at Google* is back today with some new releases for game developers. We’ve updated Pie Noon (our open source Android TV game) with networked multi-screen action, and we’ve also added some delicious new libraries we’ve been baking since the original release: the Pindrop audio library and the Motive animation system.

Pie Noon multi-screen action

Got an Android TV and up to 4 friends with Android phones or tablets? You’re ready for some strategic multi-player mayhem in this updated game mode. Plan your next move in secret on your Android phone: will you throw at an opponent, block an incoming attack, or take the risky approach and wait for a larger pie? Choose your target and action, then watch the Android TV to see what happens!

We used the NearbyConnections API from the most recent version of Google Play Games services to easily connect smartphones to your Android TV and turn our original Pie Noon party game into a game of turn-based strategy. You can grab the latest version of Pie Noon from Google Play to try it out, or crack open the source code and take a look at how we used FlatBuffers to encode data across the network in a fast, portable, bandwidth-efficient way.

Pindrop: an open source game audio library

Pindrop is a cross-platform C++ library for managing your in-game audio. It supports cross compilation to Android, Linux, iOS and OSX. An early version of this code was part of the first Pie Noon release, but it’s now available as a separate library that you can use in your own games. Pindrop handles loading and unloading sound banks, tracking sound locations and listeners, prioritization of your audio channels, and more.

Pindrop is built on top of several other pieces of open source technology:

  • SDL Mixer is used as a backend for actually playing the audio.
  • The loading of data and configuration files is handled by our serialization library, FlatBuffers.
  • Our own math library, MathFu, is used for a number of under-the-hood calculations.

You can download the latest open source release from our GitHub page. Documentation is available here and a sample project is included in the source tree. Please feel free to post any questions in our discussion list.

Motive: an open source animation system

The Motive animation system can breathe life into your static scenes. It does this by applying motion to simple variables. For example, if you’d like a flashlight to shine on a constantly-moving target, Motive can animate the flashlight so that it moves smoothly yet responsively.

Motive animates both spline-based motion and procedural motion. These types of motion are not technically difficult, but they are artistically subtle. It's easy to get the math wrong. It's easy to end up with something that moves as required but doesn't quite feel right. Motive does the math and lets you focus on the feeling.

Motive is scalable. It's designed to be extremely fast. It also has a tight memory footprint -- smaller than traditional animation compression -- that's based on Dual Cubic Splines. Our hope is that you might consider using Motive as a high-performance back-end to your existing full-featured animation systems.

This initial release of Motive is feature-light since we focused our early efforts on doing something simple very quickly. We support procedural and spline-based animation, but we don't yet support data export from animation packages like Blender or Maya. Motive 1.0 is suitable for props -- trees, cameras, extremities -- but not fully rigged character models.  Like all FPL technologies, Motive is open source and cross-platform. Please check out the discussion list, too.

What’s Fun Propulsion Labs at Google?

You might remember us from such Android games as Pie Noon, LiquidFun Paint, and VoltAir, and such cross-platform libraries as MathFu, LiquidFun, and FlatBuffers.

Want to learn more about our team? Check out this recent episode of Game On! with Todd Kerpelman for the scoop!

by Jon Simantov, Fun Propulsion Labs at Google

* Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.

Google Code-in 2014 wrap up with FOSSASIA

Friday, April 3, 2015

Although best known for their namesake conference, FOSSASIA also acts as an umbrella organization which supports development of open source software linked to Asia or Asian developers. They participated in Google Code-in 2014 and shared this report with us.


2014 marked FOSSASIA’s first year participating in Google Code-in (GCI) as a mentoring organization, and what a splash we made! Students completed 587 tasks with us, the most of any organization in this year’s program. These bite-sized tasks gave young students ages 13 to 17 an opportunity to participate in open source development with the help of mentors. A total of 174 students completed at least one task with us -- they wrote code, designed artwork, tested software, and had a lot of fun.

GCI is a contest and each mentoring organization chooses two Grand Prize winners. Ours were Namanyay Goel and Samarjeet Singh. They’ll travel all-expenses-paid with a parent or guardian to Google headquarters in Mountain View, California. We also had three finalists who deserve a hearty congratulations: Alvis Wong, Amr Ramadan, and Tymon Radzik. We are thankful for your contributions.

Students contributed to the FOSSASIA website along with open source projects like the ExpEYES tool for at-home science experiments, the sup console-based email client, the TiddlySpace idea-organizer, and the p5.js drawing library. This wide variety of opportunities was possible thanks to the efforts of our 24 mentors who found time between their other obligations to help students. Thank you, mentors!

Usually, novice contributors to a project face a significant barrier to entry. There are coding conventions to follow, guidelines for combining or breaking up multiple commits, and more that can be specific to a project. Such requirements help keep the codebase healthy and consistent, but their value isn’t apparent to beginners who have already struggled to produce a contribution and just want to see it integrated. To reduce the discouragement GCI students would face, we decided to merge students’ first pull requests if they get the job done, even if they don’t follow our usual practices. Later, students could accept a task which teaches them about our standards for contributions, giving them a chance to clone and rebase a sample repo so that it follows the rules. Students who completed this task and continued working with us understood the terminology and were able to apply our feedback to their later commits without the usual frustration.

We had a fantastic time participating in GCI and would like to thank all the students who took part in the contest. We’re thrilled to see some of them still hanging around in our community and wish them all an exciting and fruitful future.

By Aruna Herath, FOSSASIA mentor

FlatBuffers 1.1: a memory-efficient serialization library

Thursday, April 2, 2015

After months in development, the FlatBuffers 1.1 update is here. Originally released in June 2014, it’s a highly efficient open source cross-platform serialization library that allows you to read data without parsing/unpacking or allocating additional memory. It supports schema evolution (forwards/backwards compatibility) and optional JSON conversion. We primarily created it for games written in C++ where performance is critical, but it’s also useful more broadly. This update brings:


  • an extensive overhaul to the Java API
  • out-of-the-box support for C# and Go
  • an optional verifier to make FlatBuffers practical in untrusted scenarios
  • .proto parsing for easier migration from Protocol Buffers
  • optional manual assignment of field IDs
  • dictionary functionality through binary search on a key field
  • bug fixes and other improvements thanks to 200+ commits from 28 contributors -- thank you!


Download the latest release from our github page and join our discussion list for more details.

By Wouter van Oortmerssen, Fun Propulsion Labs at Google*

*Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.

How to format Python code without really trying

Monday, March 30, 2015

Years of writing and maintaining Python code have taught us the value of automated tools for code formatting, but the existing ones didn’t quite do what we wanted. In the best traditions of the open source community, it was time to write yet another Python formatter.

YAPF takes a different approach to formatting Python code: it reformats the entire program, not just individual lines or constructs that violate a style guide rule. The ultimate goal is to let  engineers focus on the bigger picture and not worry about the formatting. The end result should look the same as if an engineer had worried about the formatting.

You can run YAPF on the entire program or just a part of the program. It’s also possible to flag certain parts of a program which YAPF shouldn’t alter, which is useful for generated files or sections with large literals.

Consider this horribly-formatted code:

x = {  'a':37,'b':42,

'c':927}

y = 'hello ''world'
z = 'hello '+'world'
a = 'hello {}'.format('world')
class foo  (     object  ):
 def f    (self   ):
   return       \
37*-+2
 def g(self, x,y=42):
     return y
def f  (   a ) :
 return      37+-+a[42-x :  y**3]

YAPF reformats this into something much more consistent and readable:

x = {'a': 37, 'b': 42, 'c': 927}

y = 'hello ' 'world'
z = 'hello ' + 'world'
a = 'hello {}'.format('world')


class foo(object):
   def f(self):
       return 37 * -+2

   def g(self, x, y=42):
       return y


def f(a):
   return 37 + -+a[42 - x:y ** 3]

Head to YAPF's GitHub page for more information on how to use it, and take a look at YAPF’s own source code to see a much larger example of the output it produces.

by Bill Wendling, YouTube Code Health Team
.