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.

March 5

We’re announcing a new secondary education program!

Today, at our GDC Education Breakfast, we introduced new education R&D initiatives and launched a grant program for secondary schools that will dramatically help teachers secure approvals, implement and deliver interactive application and game development courses. The new program will include no-charge educational licenses with all the features and power of the Unity 5 engine and editor; a 40 page Professional Skill Standard cross-referenced to academic standards like Common Core, Next Gen Science Standards, 21st Century Skills and STEM clusters; and a 200+ page Curricular Framework that covers the entire professional pipeline from design and development, through deployment.   

With this innovative new program, we are committed to removing barriers for secondary institutions and supporting teachers to realize high quality outcomes in the classroom. While students are fascinated and excited with art, design and technology; educators will appreciate Unity as a vehicle for delivering important academic material like physics, math and programming logic in an engaging, multi-disciplinary, team-based, project learning environment.

Mike Preble, Instructor at United Technologies Center in Bangor, Maine commented, “I have seen the value of teaching Unity in my classroom.  It has increased the level of engagement and interest in every student that walks through my door.  The day I received Unity’s curriculum framework and skills standard, a huge weight was lifted off my shoulders and I could do what I love: teach.  My work became validated and my students gained the ability to be learn comprehensively at a faster pace.  The standards-based Curricular Framework provides a base of knowledge and understanding that is unprecedented in my world, which is incredibly valuable in every sense of the word.”

Tim Lawrence, Executive Director at SkillsUSA and Delegate to WorldSkills added, “Unity’s work in the area of curriculum development and instructor resources will enhance student learning and achievement both nationally and globally. Perhaps the most exciting part of Unity’s work is the alignment with academic standards.”

Of course, post-secondary educators and institutions are welcome to the Professional Skills Standard and Curricular Framework. Based on feedback from many of you, we are confident you will find them valuable too. Through this initiative, our ultimate goal is to generate more excitement with younger students, driving them to pursue programs at the post-secondary level and into rewarding careers.

Along with the announcement earlier this week of the Unity 5 Personal Edition, individual students, faculty and staff now have easy and open access to Unity for their personal computers, and a seamless workflow with educational licenses in their school labs and classrooms.  Given our commitment to investing in educational communities, this is only the beginning.  Watch for more exciting announcements from Unity in 2015.

The program and both foundational documents were showcased this morning and are immediately available.  For your no-charge electronic copy of the Professional Skills Standard, the Curricular Framework or to request a secondary school software grant, please contact us.

Xamarin Is Coming to a Campus Near You

This past fall, we announced free Xamarin Indie subscriptions for all currently-enrolled college and high school students. In the few months since, thousands of students have taken us up on our offer and are now building and shipping Xamarin apps for iOS and Android.

As part of this announcement, we also unveiled our Xamarin Student Ambassador program. Students accepted into the program are fostering interest in mobile app development in their peers around the globe by sharing their experience building native mobile apps in C#. This first class of 2014-2015 Xamarin Student Ambassadors includes sixty-four representatives, spanning 27 countries and 5 continents.

Xamarin Student Ambassadors
Our student ambassadors already have a lot of amazing progress to report. From several great blogs covering topics like “Xamarin.Forms and NFC” and “Creating Bindable Custom Controls with Xamarin.Forms”, to our ambassadors in Italy who unified to create a group to serve the students of Milano.

Xamarin Student Ambassadors are on campuses all over the globe and are anxious to share details about upcoming events and find ways to help out in any way they can, so be sure to connect with one near you!

Xamarin Recruiting Near You

In addition to our ambassadors spreading the word about Xamarin all over the world, the Xamarin team is making regular appearances on campuses in the US! If working for team Xamarin is your dream job, we would love to see you at an upcoming information session! We will share a bit about our products, customers, experiences, and discuss the transitions that Xamarin has gone through in the past three years. Stop by, bring your resume, enjoy some good food, and learn why Xamarin was voted one of the San Francisco Business Time’s “Best Places to Work”.

University of California, Berkeley

  • When: Tuesday, March 17th from 5:00-6:30pm
  • Where: The Blue Room
  • RSVP

Stanford University

  • When: Wednesday, April 1st from 6:00pm-8:00pm
  • Where: The Red Lounge
  • RSVP

University of California, Davis

  • When: Monday, April 6th from 12:00pm-2:00pm
  • Where: Internship and Career Center (South Hall)
  • RSVP

March 4

Android Tips: Faster Maps with Google Maps Lite

Inside Google Play Services is the powerful Google Maps API, which allows you to add a rich and interactive maps control to your Android apps. However, the maps control and API can be heavy, and sometimes you just want to display a simple map with a few markers on top of it. This is where the brand new Google Maps Lite mode can come in handy by providing a bitmap image at a specified location and zoom level, while still giving access to a subset of the full API.

coffee mugThis is perfect for situations when your users don’t need to interact with the map, a map is displayed in a feed of items, or you just need a small map to show with a marker. In my case, I wanted to create an app to flip through a list of nearby coffee shops to help feed my 24/7 coffee obsession. I didn’t want to interact with the map; I just wanted the name, rating, and distance of the coffee shop to be overlaid on top of the map. Let’s go over how to start using Google Maps Lite in an app like this.

Setting Up Your Project

To get started with Google Play Services and Google Maps, you will first need to install the Component or NuGet in your Xamarin.Android project.

Add Google Play Services Component

Obtaining a Google Maps API Key

The next step requires a bit of manual work to obtain your Google Maps API Key from Google, however, we have a great walkthrough to follow on our documentation site. Once you have your key, you will need to update your AndroidManifest.xml with a few meta-data entries and permissions:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="4.5" package="com.xamarin.docs.android.mapsandlocationdemo2" android:versionCode="6">
    ...
    <application android:label="@string/app_name">
        <!-- Put your Google Maps V2 API Key here. -->
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="YOUR_API_KEY" />
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    </application>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
</manifest>

Adding a Map in Lite Mode

Enabling Lite mode on a map is extremely simple, as it uses the same classes and interfaces as the full Google Maps API. This means you can add a simple flag to your MapView, MapFragment, or GoogleMap Options.

XML attribute

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
   <com.google.android.gms.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        map:cameraZoom="15"
        map:mapType="normal"
        map:liteMode="true"/>
</FrameLayout>

In Code Behind

var options = new GoogleMapOptions ();
options.InvokeLiteMode (true);

Initializing the Map

Recently, Google changed how developers should initialize their Maps when using Google Play Services. You must now complete two steps to get your map to appear:

1.) Find your map and create

In your Activity’s OnCreate method, you will need to find your MapView and call its OnCreate method passing in the bundle.

mapView = FindViewById<MapView> (Resource.Id.map);
mapView.OnCreate (bundle);

2.) Implement IOnMapReadyCallback and Get Map

To get the reference to your GoogleMap (which is what you use to add markers and zoom to a location), you must implement IOnMapReadyCallback on your Activity and then call the MapView’s GetMapAsync method.

public class MainActivity : ActionBarActivity, IOnMapReadyCallback
{
  GoogleMap googleMap;
  MapView mapView;
  protected override void OnCreate (Bundle bundle)
  {
    base.OnCreate (bundle);
    SetContentView (Resource.Layout.main);
    mapView = FindViewById<MapView> (Resource.Id.map);
    mapView.OnCreate (bundle);
    mapView.GetMapAsync (this);
  }
  public async void OnMapReady (GoogleMap googleMap)
  {
    this.googleMap = googleMap;
    //Setup and customize your Google Map
    this.googleMap.UiSettings.CompassEnabled = false;
    this.googleMap.UiSettings.MyLocationButtonEnabled = false;
    this.googleMap.UiSettings.MapToolbarEnabled = false;
  }
}

Move Map to Location

Google Maps Lite is powerful enough to enable you to move the camera to a specific location and even control the Zoom Level. Using the Geolocator Plugin, you can easily zoom the map to your current location:

MapsInitializer.Initialize(this);
var position = await CrossGeolocator.Current.GetPositionAsync (10000);
var me = new LatLng (position.Latitude, position.Longitude);
googleMap.MoveCamera (CameraUpdateFactory.NewLatLng (me));

Google Map Initialized

Note the MapsInitializer.Initialize(this);, which must be called before you start interacting with the map.

Adding Markers

With your map up and running, you can now start adding markers or other items to the map. In this case, let’s add a circle indicator at our current location and a full marker at the closest coffee shop:

var coffeeMarker = new MarkerOptions ();
coffeeMarker.SetPosition (new LatLng (coffee.Latitude, coffee.Longitude));
//add marker to map
googleMap.AddMarker (coffeeMarker);
var meMarker = new CircleOptions ();
meMarker.InvokeCenter(me);
meMarker.InvokeRadius (16);
meMarker.InvokeStrokeWidth (0);
meMarker.InvokeFillColor (Resources.GetColor (Resource.Color.accent));
//add circle to map
googleMap.AddCircle (meMarker);

Google Map With Pins

Learn More

You can grab the entire source code for my app Coffee Filter, which shows how to use the Google Places API to query nearby coffee locations based on your location. Additionally, you can download Coffee Filter from Google Play on your Android device to try it today.

coffeefilterdemo

Be sure to read through Google’s Lite Mode documentation to see all of the available API features when using a map in Lite Mode. To see how to easily integrate more features in Android’s location and maps APIs, be sure to read through our Xamarin documentation to easily integrate them into your Xamarin.Android apps.

Discuss this post in the Xamarin Forums

March 3

Xamarin joins Airwatch, Box, and Cisco in ACE Initiative

We’re excited to announce our participation in the ACE (App Configuration for Enterprise) initiative, announced today at Mobile World Congress, joining Airwatch, Box, Cisco, Workday and other enterprise leaders to create a new industry standard for secure enterprise mobility.

ACE (App Configuration for Enterprise) LogoThis collaboration takes a strong step toward solving the complexities involved with enterprise mobile development (EMM) by creating an open industry standard for secure app management and deployment.

ACE establishes an app configuration standard that interoperates with all EMM vendors, removing the need for developers to write vendor-specific code for app management and distribution. Instead developers write to the ACE specification which covers first-time log-in, verifying network connectivity, simplifying the SSO sign-in process and allowing fine-grain app security controls for all major EMM vendors.

Learn more about how ACE works here.

Unity 5 Launch

Unity 5 is here. For everyone.

Today is the big day. We’re launching Unity 5 globally.  Today.  Yes, you can all download it now.

There are literally over a thousand improvements in Unity 5 that we’d love to talk about.  My quick blog today is not the place to do that.  This note is being posted just as I go on stage to officially launch Unity 5 at GDC in San Francisco.  We’re live streaming the launch and you will see Joachim, Ralph Hauwert, Todd Hooper, Will Goldstone go deeper on the technical upgrades in Unity 5.0.  You will also see David, of course!  And, there will be a few ‘guests’ from the industry on stage to talk about Unity 5 in their own words.  Visit our website at Unity3d.com for the latest details and explanations.  Also — Joachim will post some thoughts later this week once he gets through the craziness of the start of GDC.

While I can’t get into all the technical detail on Unity 5 in a short post, I do want to share with you the big ideas that we think define Unity 5.

  1. It is a graphics powerhouse capable of rendering beautiful, complex and detailed scenes.

  2. The highly extensible and feature rich editor is now 64-bit and is even more robust than ever with additions like our huge suite of integrated audio design tools*.  (* full multi-track audio mixer.  very cool.)

  3. Unity’s industry leading multiplatform support grow with WebGL and improves with better console platform support and the introduction of IL2CPP.  Unity now supports 21(!) platforms.

  4. With the launch of Unity 5, we are launching Unity Cloud Build which is providing an option to developers to boost their productivity and efficiency through the cloud. You can learn more about Unity 5 here.

The business model…. one of the big questions for everyone.  We’re evolving the best licensing model in the business into something even better. We’re adding value and power so that everyone has the creative freedom they need to succeed.  Before I describe our pricing model, I want to take a moment and describe the philosophy behind the new pricing. I know I am on tricky ground in describing pricing philosophically.  For many, I am sure you’d rather just see the numbers.  Here goes.  First, know that our pricing for Unity 5 is as much about Unity and our values at Unity as it is about anything else. This is entirely different than with any company I have worked with in my life.  We did not start with setting a profit goal and working backwards.  We started with two goals and worked forward to our developers.

Goal #1 — One of the founding principles of Unity is the idea that we work hard to solve very hard technical problems so our developers / users won’t have to.  For this to be at all relevant, our best tools need to be a great value.

Goal #2 — Deep in Unity’s culture is the principle of Democracy. The goal is to price in such a way as to reflect our principles.  Democracy is the principle we were founded on, and it means we do our best to put Unity in the hands of developers, Indies or Pros, that may not have the resources to pay for it.  Its about enabling most everyone to create with the best tools we can make.  I won’t get too soppy in this post — but is is an honor for me to work in a company so mission driven and principled.

So, on to the pricing model.  We have two.

Unity 5 Professional Edition

With Unity 5 Professional Edition, we’re adding incredible value for teams of all sizes.  Unity 5 Pro will have same starting price point as with Unity 4 Pro, at  $75/month subscription or $1500 perpetual. Pro customers get all the power of Unity 5 plus:

  • Team License

  • Unity Cloud Build Pro (12-month subscription)

  • Unity Analytics Pro (currently in beta)

  • Game Performance Reporting (currently in preview)

  • Asset Store Level 11 (a new collection of free assets available each month)

  • Access to previews and betas

  • No revenue limit, no revenue share

We think this is a huge value.  Unity 5 Pro provides a huge upgrade from Unity 4, and it comes with a bunch of extra services and a team license, all for the base pricing of Unity 4.  Inflation gone backwards… or, put another way, better value than ever before.

Unity 5 Personal Edition

Democracy is something we believe in. It’s in the DNA of those that work at Unity. It’s one of the things that drew me to the company. It’s also one of the things that is most important to the games industry. So with that in mind, we are launching Unity 5 Personal Edition. Unity 5 Personal Edition provides all the power of Unity 5 engine and editor. To clarify — this is important — it is the same Unity 5 engine and editor as in the Pro Edition.  It comes with all the features including  Profiler, Occlusion Culling, Render-to-Texture, and Post-Processing Special Effects as well as all the big Unity 5 features like Physically-based Shading, Enlighten, reflection probes and much more.

Unity 5 Personal Edition is free.  No royalty.  Free.

Unity 5 Personal Edition is for professional developers, Indies, hobbyists and studios with revenue under $100,000 and funding under $100,000.

You can see a full comparison of the licenses here.

Download Unity 5, play with it, experiment with it, and create something beautiful and lasting.

Today is a big day.  I hope you are as excited about it as we are at Unity.

John Riccitiello

JetBrain's IntelliJ 14 Android development

If you are a developer of Android Apps you are probably very familiar with the many Integrated Developer Environment (IDE) tools that are currently available. Several of the more prominent of these tools include: Android Studio, Eclipse, Netbeans and IntelliJ IDEA. Any one of these tools would be an excellent choice for app development but the IntelliJ stands out because it is less complex and is more user-friendly which appeals to a broader cross section of developers like you. In this article we will take a look at how you can use the IntelliJ IDEA Java IDE tool to create awesome Android apps.

March 2

Mono Summer of Code 2015!

Hey everyone! The Mono team is pleased to announce that we are a mentor organization in the Google Summer of Code 2015! This is the eleventh year of Summer of Code for us, and we're really excited to work with a new group of students.

This is a great opportunity to spend the summer with a great community working on cutting edge open-source C# tools and frameworks. You can hone your development skills by working on large and complex codebases with experienced mentors, and get paid for your hard work too.

If you're an eligible student, the application period runs from March 15-27. But don't let that stop you from starting on your proposals! Feel free to introduce yourself to the community and mentors, talk about your ideas, and do some preliminary research to make your proposal as strong as it can be. If you're feeling particularly ambitious, you could even get started on some quick bugfixes and patches to show off your skills; while this isn't required, it is really helpful in seeing how you work and getting your name out in the community. Show us how excited you are about coding!

Same as last year, our project ideas and rules are available on our GSoC ideas page, and we'll be updating the list as we come up with new ideas. Don't let these ideas limit you though; if you have your own idea for a great project for the summer, put it in a proposal and send it our way. Or, if you can't decide, you can always submit multiple proposals. Keep in mind, though, quality is better than quantity in this case.

Our project mailing lists should be your first stop for questions about contributing to Mono. There are many lists for different topics, but the main ones are monomono-devel and monodevelop-devel. For external projects, you should also contact the developers in their project mailing lists.

And of course IRC is where you can find everyone online, on the irc.gnome.org server. There's the #mono channel for general Mono discussions, #monodev for Mono development, #monodevelop for MonoDevelop and Xamarin Studio, and #monosoc for Summer of Code-specific questions and saying "Hi" to your fellow students. Hang around a while after asking a question - we have mentors in many timezones so they may be asleep or busy when you visit.

If you're not a student, you can participate in Summer of Code by helping the students feel welcome in our community! Or, if you're interested in mentoring C# tools and libraries under the Mono umbrella, send an email to the Mono GSoC administrator at soc@xamarin.com.

To stay up to date with the applications process and the work of our students, follow us on Twitter and Google+.
Good luck, and here's to another great summer of coding!

Follow the Rainbow to Xamarin Events in March!

Find your lucky charm at the end of the rainbow with Xamarin at this month’s developer group events!

meetup-banner March

DFW Mobile .NET us

  • Irving, TX: Thursday, March 5th 6:00PM
  • Automated UI Testing and Monitoring for your Mobile Apps w/ James Montemagno

Kansas City Mobile .NET Developers Group us

  • Kansas City, MO: Tuesday, March 10th 6:00PM
  • Intro to Apple’s WatchKit using Xamarin

Visual Studio ALM Days 2015 __

  • Düsseldorf, Germany: March 11- 12th
  • Automating UI Testing and Xamarin Test Cloud with Mike James

Birmingham Xamarin Mobile Cross Platform User Group __

  • Birmingham,United Kingdom: Wednesday, March 11th 6:30PM
  • A deep dive into Xamarin.Forms

Northern Virginia Mobile C# Developers’ Group us

  • Mc Lean, VA: Wednesday, March 11th 7:00pm
  • Code-sharing with MVVM Cross and Xamarin

Xamarin Meetup San Diego us

  • San Diego, CA: Thursday, March 12th 6:00PM
  • Xamarin User Group Kick-Off!

London: DEVWEEK 2015 __

  • London,United Kingdom: March 23 – 27th
  • MVVM Pattern and Xamarin.Forms workshops with James Montemagno

Windows App London __

  • London,United Kingdom: Wednesday, March 25th 6:30PM
  • What you want to know about Xamarin

Atlanta Xamarin Users Group us

  • Atlanta, GA: Monday, March 30th 6:30PM
  • Intro to Xamarin Forms and Bluetooth LE

Didn’t see your city listed above? Not to worry, look to this Events Forum for even MORE upcoming Xamarin events, meetups, and presentations happening every day!

Want a developer group in your area and are interested in getting one started? We’re here to help! Here’s a tips and tricks guide 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. Also, we love to hear from you so please feel free to send us an email or tweet @XamarinHQ to help spread the word and continue to grow the Xamarin community.

Bamboo: Automatic merging of Plastic SCM branches

Atlassian's Bamboo is one of the most popular Continuous Integration servers, used by big enterprises and small startups alike. Of course, we released our own plugin to integrate Plastic SCM as a valid repository source in Bamboo quite a long time; however, you might have noticed that it didn't support an interesting Bamboo feature: automatic branch merging.

Well, not anymore. Since our release 5.4.16.647, we've extended our Bamboo plugin and adapted our client core to provide this option! But don't leave just yet. We'll show you a quick example of how to allow Bamboo to automatically merge your Plastic SCM branches, using our lightning-fast Plastic SCM Merge Machine behind the scenes.

February 27

Give Us the Gist of It Contest Winners!

Two weeks ago, we asked the community to share the code snippets that help them write amazing apps even faster. Five winners were chosen at random, and here is the gist of it:

Jason Fox:
Snippet Name: Xamarin.iOS Image Blur
Platform: Xamarin.iOS
Function: Image blur extension method for Xamarin.iOS

public static UIImage Blur(this UIImage image, float blurRadius = 25f)
{
  if (image != null)
  {
    // Create a new blurred image.
    var imageToBlur = new CIImage (image);
    var blur = new CIGaussianBlur ();
    blur.Image = imageToBlur;
    blur.Radius = blurRadius;
    var blurImage = blur.OutputImage;
    var context = CIContext.FromOptions (new CIContextOptions { UseSoftwareRenderer = false });
    var cgImage = context.CreateCGImage (blurImage, new RectangleF (new PointF (0, 0), image.Size));
    var newImage = UIImage.FromImage (cgImage);
    // Clean up
    imageToBlur.Dispose ();
    context.Dispose ();
    blur.Dispose ();
    blurImage.Dispose ();
    cgImage.Dispose ();
    return newImage;
  }
  return null;
}

Runar Ovesen Hjerpbakk:
Snippet Name: Async and await together with UIAlertController
Platform: Xamarin.iOS
Function: This snippet shows how to use a TaskCompletionSource to enable async and await together with UIAlertController.

public static class CustomerFeelingSheet {
 public static Task<CustomerFeeling> ShowRatingDialogAsync(UIViewController parent) {
   var taskCompletionSource = new TaskCompletionSource<CustomerFeeling>();
   var alert = UIAlertController.Create("howDoYouFeel".T(), null, UIAlertControllerStyle.ActionSheet);
   alert.AddAction(UIAlertAction.Create("likeIt".T(), UIAlertActionStyle.Default,
       a => taskCompletionSource.SetResult(CustomerFeeling.LikeIt)));
   alert.AddAction(UIAlertAction.Create("couldBeBetter".T(), UIAlertActionStyle.Default,
       a => taskCompletionSource.SetResult(CustomerFeeling.CouldBeBetter)));
   alert.AddAction(UIAlertAction.Create("cancel".T(), UIAlertActionStyle.Cancel,
       a => taskCompletionSource.SetResult(CustomerFeeling.DontCare)));
   parent.PresentViewController(alert, true, null);
   return taskCompletionSource.Task;
 }
}

Matthieu Guyonnet-Duluc:
Snippet Name: Android Behavior – WPF Style
Platform: Xamarin.Android
Function: Reproduce the beloved WPF behaviors in Android

<com.mycompany.behaviors.ListViewHideKeyboardOnScroll
        android:layout_width="0px"
        android:layout_height="0px"
        local:View="@+id/resultsList" />
    public class ListViewHideKeyboardOnScroll : Behavior<AbsListView>
    {
        public ListViewHideKeyboardOnScroll(Context context, IAttributeSet attrs)
            : base(context, attrs)
        {
        }
        #region implemented abstract members of Behavior
        public override void OnAttached()
        {
            View.ScrollStateChanged += HideKeyboard;
        }
        public override void OnDetached()
        {
            View.ScrollStateChanged -= HideKeyboard;
        }
        #endregion
        void HideKeyboard(object sender, AbsListView.ScrollStateChangedEventArgs e)
        {
            if (e.ScrollState == ScrollState.TouchScroll)
            {
                var inputManager = (InputMethodManager)this.Context.GetSystemService(Context.InputMethodService);
                inputManager.HideSoftInputFromWindow(View.WindowToken, HideSoftInputFlags.None);
            }
        }
    }

Ken Pespisa:
Snippet Name: SQLite Extension methods for Save & Delete
Platform: Xamarin.iOS
Function: Save the specified entity by calling insert or update, if the entity already exists.

public static class SQLiteExtensions
{
   /// <summary>
   /// Save the specified entity by calling insert or update, if the entity already exists.
   /// </summary>
   /// <param name="pk">The primary key of the entity</param>
   /// <param name="obj">The instance of the entity</param>
   /// <typeparam name="T">The entity type.</typeparam>
   public static int Save<T>(this SQLiteConnection db, object pk, object obj) where T : new()
   {
       if (pk == null || db.Find<T>(pk) == null)
       {
           return db.Insert(obj);
       }
       return db.Update(obj);
   }
   /// <summary>
   /// Delete entities based on a predicate function
   /// </summary>
   /// <param name="predicate">The predicate specifying which entities to delete</param>
   /// <typeparam name="T">The entity type.</typeparam>
   public static void Delete<T>(this SQLiteConnection db, Expression<Func<T, bool>> predicate) where T : new()
   {
       var records = db.Table<T>().Where(predicate).ToList();
       foreach (var record in records)
       {
           db.Delete(record);
       }
   }
}

Ryan Davis:
Snippet Name: InlineTableViewSource
Platform: Xamarin.iOS
Function: A subclass of UITableViewSource that allows you to define UITableViewDataSource and UITableViewDelegate methods inline, rather than subclassing.

var cellId = new NSString("cell");
var tableView = new UITableView(View.Frame, UITableViewStyle.Grouped) {
    Source = new InlineTableViewSource {
            _NumberOfSections = (tv) => 2,
            _RowsInSection = (tv, section) => 5,
            _TitleForHeader = (tv, section) => String.Format("Section {0}", section),
            _GetCell = (tv, indexPath) => {
                var cell = tv.DequeueReusableCell(cellId) ?? new UITableViewCell(UITableViewCellStyle.Default, cellId);
                cell.TextLabel.Text = "hi";
                return cell;
        }
    }
};

Find even more speedy code snippets for your apps in the Get The Gist forum thread, and a big thanks to all who participated in the Give Us the Gist of It Contest!

Unity at GDC 2015

GDC is nearly upon us! It’s crazy hectic getting ready for such a big show but always an incredibly exciting week where we get to meet with so many of our current development community and meet new friends. As you might imagine, we’ve got a lot going on at the show! Here’s a little bit about it.

Unity Special Event

On Tuesday March 3 at 8:30AM PST, we’ll be holding live from San Francisco a special event to kick our GDC off. We’ll be sharing some big news, showing some beautiful demos, and inviting some special guests from the development community on stage.

Event details to come soon on our social media channels, stay tuned!

Unity Party

Don’t miss the Unity Party Wednesday night!
Register here: http://unity-gdc2015-party.eventbrite.com

Unity Dev Day

For those who chose an all access or summit & tutorial conference pass, don’t miss the “Unity Developer day”, Tuesday, March 3rd from 10:00am to 5:30pm in Room 2014, Moscone West Hall, 2nd Floor. We’re refining the final agenda, but in short it’ll be about digging deep into Unity 5, learning from Unity engineers and games developers.
Here’s what we’re preparing:

  • Graphics improvements by Aras Pranckevičius (Rendering Plumber),

  • New audio mixer by Jan Marguc and Wayne Johnson,

  • Future of scripting with IL2CPP by Jonathan Chambers (Scripting Team Developer) and Mantas Puida (iOS Team Lead),

  • Unity Ads & Everyplay by Oscar Clark (Everyplay Evangelist) and Nikkolai Davenport (Dev Relations Engineer),

  • Cloud Build, Analytics and more services by Patrick Curry, John Cheng & Suhail Dutta,

  • Post mortem on producing high-end content by Veselin Efremov (Artist), Torbjorn Laedre (GFX Programmer), Dominic Laflamme (Lead Developer Storytelling),

  • And finally “Rebuilding Republique in Unity 5” postmortem by Camouflaj team Paul Alexander (Producer/Designer), Kevin Call (Engineer) and Stephen Hauer (Art Director)

Unity GDC 2015 Expo Booth – South Hall #1402

As usual, we’re setting up shop in the main expo of GDC. We encourage you to stop by and say hello, ask questions, and check out awesome games from the community and our great partners that make the Unity development ecosystem so amazing.  We’ll have a lot of staff at the booth ready to answer questions and give you tours of Unity including the big new features of Unity 5 and some awesome new demos. We’ll also have daily drawings to win cool prizes

Talks at Unity booth

Additionally, we’ve got a slew of useful talks scheduled from Unity staff and partners designed to help you get the most out of Unity. We will be announcing the program shortly, and of course you can stop by the booth to see the schedule!

Games Pavilion

As usual, we’re very excited to be hosting several games currently in development by the Unity community of developers at the Unity booth. Come by, check out the games, talk to the guys that made them, and get inspired!

Republique Remastered from Camouflaj Ori and the Blind Forest from Moon Studios Gang Beasts from Bone Loaf Mordheim: City of the Damned by Rogue Factor Total War Battles Kingdom from Creative Assembly Space Noir from N-Fusion Super Dungeon Bros from React Games Dyscourse from Owlchemy Labs The Room Three from Fireproof Games The Trace from Relentless Pollen from Mindfield Games Armello from League of Geeks TBA from NVYVE Unkilled by Madfinger Games Wind Up Knight 2 Wii U by Robot Invaders

and two other unannounced titles!

Partner Pavilion

Make sure to stop by and check out the latest technologies and platforms being showcased by our sponsors in the partner pavilion:

Microsoft
image02
image03
image04
image05
image07
image06
image09
image08
image10
image00

This year we’re also pleased to have a new dedicated area for our Asset Store Publishers! The following twelve publishers will be showcasing their tools and technologies for one day during the show, rotating across three kiosks:

Cinema Suite, Houdini, Hutong Games/PlayMaker, Make Code Now, Neat Corporation/Shader Forge, Owlchemy Labs, Polygonmaker, ProCore, Rust Ltd, SonicEther Technologies, TextMesh Pro and Tigar Shark Studios.

February 26

Join Xamarin for GSMA Mobile World Congress 2015

Mobile World Congress LogoXamarin will take the stage alongside Airwatch, Box and Salesforce in Barcelona at Mobile World Congress next week.
 
Xamarin’s Director of Enterprise Mobility, Steve Hall, will join the Steve Hall“Airwatch Presents a New Standard for Enterprise App Development” panel discussion on March 2nd. Employees expect – and need – fast, on-the-go access to company data, and we’ll share how enterprises can successfully build and distribute secure mobile apps.


AirWatch Presents a New Standard for Enterprise App Development featuring Box, Salesforce & Xamarin

Tuesday, March 3, 1:30 – 2:25 pm CET
AirWatch Connect Stand
Hall 3, Stand 3D10
All MWC Attendees are welcome to attend.

See you in Barcelona!

Using history to better explain branch differences

Release BL647 introduced a great step ahead in the way in which branch (and cset) differences are displayed and explained. Now it is possible to understandwhere each difference comes from:

Remastering Republique: The Journey to Unity 5

Greetings, fellow Unity developers! We are Camouflaj, a game studio based near Seattle, WA. We are the folks behind République, an episodic stealth action game about governmental surveillance. To date, we’ve shipped three episodes (of five) to an overwhelmingly positive reception.

Back in 2012, we promised to make a “true” PC & Mac version of République that was in no way a simple mobile port. We spent countless hours thinking and experimenting with ways to make our upcoming PC & Mac release all the more special.

Soon after Unity 5 was announced, the team started dreaming up ways we could use that new technology to make a big splash on PC. We wanted to totally remaster the game in Unity 5.

That’s when we approached Unity with a proposal: in exchange for early access to Unity 5’s alpha and beta releases, why doesn’t the Camouflaj team document their journey from Unity 4 to Unity 5? We’d love to leverage République as a standout title on Unity 5, and share the story of our development with the public so they can learn from our successes and failures. Thankfully, the folks at Unity said yes.

Today we are proud to share the developer diary about our journey to remaster Republique in Unity 5!

Each of the five episodes from our dev diary includes a video and a podcast. Ultimately, our modest hope is that our “journey” series is helpful to you.

Here’s a more detailed breakdown of what we cover:

Dev diary 1: République enters the Next Gen

Why we are using Unity 5 to take Republique to PC

Dev diary 2: République Migrates From Unity 4

We’ll explain how we moved our project from Unity 4 to Unity 5 in the midst of a chaotic, 20-person project, starting with our initial investigation.

Dev diary 3: République in Physically Based Shading

This is the really exciting stuff. We’ll go over a little bit of Physically Based Shading for the uninitiated, and explain how we put this to work in our game.

Dev diary 4: République Lighting & More

We’ll walk you through how we made use of Reflection Probes, Global Illumination, cookies and other good stuff, plus we’ll cover some physics and animation refinements.

Dev diary 5: République Ships on Unity 5

We’ll document our push to launch, and how we optimized and (fingers crossed) shipped a fantastic game.

Thank you for taking this journey with us!

-Camouflaj

February 25

Triggers in Xamarin.Forms

Triggers were introduced in Xamarin.Forms 1.3 along with Behaviors, which we covered previously. Triggers allow you to declaratively express actions in XAML that are executed when a specified condition is met. Xamarin.Forms support four types of triggers:

  • Property Trigger – executed when a property on a control is set to a particular value.
  • Data Trigger – same as the property trigger but uses data binding.
  • Event Trigger – occurs when an event occurs on the control.
  • Multi Trigger – allows multiple trigger conditions to be set before an action occurs.

Let’s take a look at each one in detail.

Property Trigger

Property Triggers (represented by the Trigger element) are added to a control’s Triggers collection. The Setter collection inside is executed when a specified property equals the specified value.

PropertyTrigger

Wouldn’t it be nice to provide some visual indicator that an input control has focus? To achieve this, we can set the BackgroundColor property when the property IsFocused of the Entry element is true.

<Entry Placeholder="enter name">
    <Entry.Triggers>
        <Trigger TargetType="Entry"
             Property="IsFocused" Value="True">
            <Setter
                Property="BackgroundColor"
                Value="Yellow" />
        </Trigger>
    </Entry.Triggers>
</Entry>

Alternatively, we can set them in styles so that they can be attached to every Entry element in the screen.

<ContentPage.Resources>
   <ResourceDictionary>
     <Style TargetType="Entry">
       <Setter Property="AnchorX" Value="0" />
       <Style.Triggers>
         <Trigger  TargetType="Entry"
                   Property="IsFocused"
                   Value="True">
           <Setter Property="BackgroundColor"
                   Value="Yellow" />
         </Trigger>
       </Style.Triggers>
     </Style>
   </ResourceDictionary>
</ContentPage.Resources>

Data Trigger

DataTriggers are very similar to PropertyTriggers, except that instead of specifying the Property, we specify the Binding for the trigger. This Binding generally refers to another VisualElement’s property on the page or it could reference a property in a ViewModel.

The code below shows how to disable the button when the entry’s Text.Length property is 0.

<StackLayout Spacing="20">
<Entry x:Name="emailAddress" Text="" Placeholder="email address"/>
<Button Text="Send">
  <Button.Triggers>
    <DataTrigger TargetType="Button"
         Binding="{Binding Source={x:Reference emailAddress},
                                           Path=Text.Length}"
         Value="0">
      <Setter Property="IsEnabled" Value="False" />
    </DataTrigger>
  </Button.Triggers>
</Button>
</StackLayout>

Event Trigger

Event Triggers execute user-defined code when a specified event occurs.

In the above Property Trigger example, we saw how to change the background color of an Entry element based on the IsFocused property entirely in XAML. Alternatively, we can use an Event Trigger to execute an action written in C# based on the TextChanged event of an entry to perform some basic validation.

Define the TriggerAction in code

Every action that we define has to inherit from TriggerAction<T> where T is the element to which a trigger is attached. When a trigger is fired, the Invoke method will be called. In the code below, we change the Entry’s BackgroundColor to indicate whether the input is valid or not.

public class NumericValidationTriggerAction : TriggerAction<Entry>
{
   protected override void Invoke (Entry entry)
   {
      double result;
      bool isValid = Double.TryParse (entry.Text, out result);
      entry.BackgroundColor =
            isValid ? Color.Default : Color.Red;
   }
}

TriggerAction in XAML

To use the C# code, just declare a namespace for the assembly (xmlns:local in this sample) and add the NumericValidationTriggerAction element to the event trigger:

<Style TargetType="Entry">
<Style.Triggers>
    <EventTrigger Event="TextChanged">
        <local:NumericValidationTriggerAction />
    </EventTrigger>
</Style.Triggers>
</Style>

Multi Trigger

A MultiTrigger looks similar to a Trigger or DataTrigger except there can be more than one condition. All the conditions must be true before the Setters are triggered.

In the code below, we enable the button when either the email or the phone entries are filled in by the user. Each condition is true when the length of the text input is zero (ie. nothing has been entered). When both conditions are true (ie. both are empty) then the trigger’s Setters are called, which in this case disables the button. When either have text entered, the overall condition becomes false and the button is enabled.

<Style TargetType="Button">
<Style.Triggers>
  <MultiTrigger TargetType="Button">
    <MultiTrigger.Conditions>
      <BindingCondition
          Binding="{Binding Source={x:Reference email},
                            Path=Text.Length}"
          Value="0" />
      <BindingCondition
          Binding="{Binding Source={x:Reference phone},
                            Path=Text.Length}"
          Value="0" />
    </MultiTrigger.Conditions>
    <Setter Property="IsEnabled" Value="False" />
  </MultiTrigger>
</Style.Triggers>
</Style>

To see how to build a “require all” trigger (like you’d use in a login page, for example) check out our Triggers sample on GitHub that uses an IValueConverter along with a MultiTrigger.

For even more information on Xamarin.Forms, be sure to check out the detailed documentation.

Discuss this post in the Xamarin forums

How to setup an encrypted server

We are happy to announce a new Plastic SCM feature that allows configuring a server with encrypted data.

It means that, in your organization, you can configure a central server where all the data is encrypted. This way, the users who have a specific key, will be able to push/pull data to this server.

It is important to remark that this server is created for replication purposes only. Repositories have all data encrypted. If we directly download the file content to a workspace, we will only see empty files (the data is encrypted).

This configuration could be very useful when your server is accessible from a public network or you just need to be sure that even if a not authorized person access to your server, he will not be able get any information.

February 24

Live APAC Webinar: Go Mobile with Xamarin

Photo of Mayur Tendulkar

Join Xamarin Evangelist Mayur Tendulkar for this live webinar timed just for our APAC customers, where you’ll learn how to leverage your existing Microsoft .NET and C# skills to build iOS, Android, and Windows Phone apps using Visual Studio and Xamarin. We’ll also talk about how to maximize code sharing and reuse existing .NET libraries.

At the end of the webinar, you’ll have the skills you need to create your first iOS and Android apps in C# with Xamarin in Visual Studio.

Wednesday, March 11
11:30 AM – 12:30 PM IST

Register

All registrants will receive a copy of the webinar, so please feel free to register even if you can’t attend.

Gorgeous Arch-Viz in Unity 5

Is it possible to dial up the quality level in Unity 5 high enough to make high-end architectural visualizations?

In response Alex Lovett aka @heliosdoublesix built this gorgeous architectural visualization demo in Unity 5.

It makes good use of the real-time global illumination feature, physically based shading, reflection probes , HDR environment lighting, the linear lighting pipeline and a slew of post-effects all in order to achieve the necessary visual fidelity expected in an architectural visualization.

The aim was to push for quality, so very high resolution textures were used and the model has just over 1 million faces.

There is no baked lighting in this scene

The first part of the demo has a fast moving sun. The second part has more localized lighting; a spot light from a fellow maintenance robot lights up the environment in addition to the headlight of the robot the viewer is piloting. In both parts there is considerable environment lighting.

Due to how the scene is laid out, there is a lot of bounced lighting and also quite distinct penumbrae caused by indirect lighting. For example, the v-shaped columns cast a very sharply defined indirect shadow onto the ceiling, which is especially visible in the night time part of the video.

Front-Huge 28 Under-16-10 Side Redo1 Redo4 Redo5 TopShadow-16-10 Reflection probes TopShadow2-16-10 Night5-Top Shadow1 Night4-Corner Indirect shadow penumbrae Indirect shadow penumbrae

Using high resolution real-time lightmaps

When the lighting changes, these penumbrae and the overall lighting gradients have to change significantly. In order to do this with global illumination, the Enlighten powered real-time lightmaps feature was employed. Traditionally, Enlighten is used in-game at relatively low resolutions (1-2 pixels per meter). This works well because the bounced lighting is generally quite low-frequency.

In this demo, a much higher density is used to capture the fine details in the lighting. An overall density of 5 pixels per meter was used. There is about 1.5 million texels in the real-time lightmaps in total. In the resolution screenshot below you get a sense of the density in relation to the scene size.

At this resolution, the precompute time spent was about 2.5 hrs. The scene is automatically split into systems in order to make the precompute phase parallelizable. This particular level was split into 261 systems. The critical path through the precompute (i.e. the sum of the most expensive job in each stage along the pipeline) is about 6 minutes. So there are significant gains to be made by making the precompute distributed. And indeed going forward, one of the things we will address is distribution of the GI pipeline across multiple computers and in the cloud. We will look into this early in the 5.x cycle.

See geometry, GI systems and real-time lightmap UV charting screenshots from the Editor below:

Geometry Real-time lightmap systems Real-time lightmap texture density and UV charts

Interactive lighting workflow

Once the precompute is done, the lighting can be tweaked interactively. Lights can freely be animated, added, removed and so on. The same goes for emissive properties and HDR environment lighting. This demo had two lighting rigs; one for the day time and one for the night time. They were driven from the same precompute data.

“I’m able to move the sun / time of day and change material colors without having to rebake anything. I can play with it in real-time and try combinations out. For a designer like me, working iteratively is not only easier and faster, but also more fun,” says Alex Lovett.

Lighting 1.5 million texels with Enlighten from scratch takes less than a second. And the lighting frame rate is decoupled from the rendering loop, so it will not affect the actual rendering frame rate. This was a huge workflow benefit for this project. Interactive tweaking of the lighting across the animation without interruption drove up the final quality.

To make this a real-time demo, some rudimentary scheduling of updating the individual charts would have to be added, such that visible charts are updated at real-time, while occluded charts and charts in the distance are updated less aggressively. We will look into this early in the 5.x cycle.

Acknowledgements

A big thanks to Alex Lovett owner of shadowood.uk. He has been tirelessly stress testing the GI workflow from when it was in alpha. Also thanks to the Geomerics folks, especially Roland Kuck.

The following Asset Store items were used. SE Natural Bloom & Dirty Lens by Sonic Ether, Amplify Motion and Amplify Color by Amplify Creations.

Web continuous integration with Plastic SCM and Azure

Microsoft defines Azure Websites as a fully managed Platform-as-a-Service (PaaS) that enables you to build, deploy and scale enterprise-grade web Apps in seconds. Since most modern web development teams promote new code from staging to production environments, it is important to consider various techniques to automatically deploy your code as part of your ALM (Application Lifecycle Management) process. The technique that we will focus on in this article is Plastic SCM with GitSync. With this technique, your team can quickly and easily publish changes automatically to Azure Websites from GitHub.

February 23

Adding Real-world Context with Estimote Beacons and Stickers

It’s no secret that iBeacons have created a buzz in the development community. Leveraging these Bluetooth Smart devices enables developers to add contextual awareness to their mobile apps with just a few lines of code. iBeacons were everywhere at Evolve 2014, including at the forefront of the Evolve Quest scavenger hunt and the conference mini-hacks, as well as taking the main stage for an in-depth session.

sticker_bikeEstimote, a leader in the iBeacon space, recently introduced Estimote Stickers, a low-powered device to go alongside their traditional beacons. Stickers can be attached to almost anything and turn any everyday item into a “nearable” – a smart object that can transmit data about its location, motion, temperature, and environment to nearby apps and devices. Today, we’re pleased to announce the Estimote SDK for iOS, available on the Xamarin Component Store, enabling developers to easily detect Beacons and Estimote Stickers with a beautiful C# API that includes events and async/await support.

Detecting Nearables

Nearables have a new, simplified API. Each Nearable has a specific NearableType that can be used to detect, for example, Car, Dog, or Bike. You can decide to range for a specific type or all nearby Nearable devices.

Let’s see how easy it is to get up and running with Nearables by scanning for all Nearables that are close by.

Install the Estimote SDK for iOS

The very first task is to set up a new Xamarin.iOS project and add the Estimote SDK for iOS from the component store.

2015-02-19_1313

In addition to the SDK, you must specify NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription in your Info.plst file with a description that will be prompted to your users, since iBeacons use CoreLocation functionality.

Setting Up App ID

When you log in to your Estimote Cloud, you are able to manage all of your Beacons and Stickers in addition to creating API keys for your mobile apps. Once you have an app set up in the Estimote Cloud, you can config the app in your AppDelegate’s OnFinishedLaunching method:

Config.SetupAppID ("<appId from cloud>", "<appToken from cloud>");

While not required, it’s recommended to set up your app ID so that the SDK can now communicate with the Estimote Cloud to pull in unique attributes.

Ranging Nearables

Using the new NearableManager you can easily range for Nearables by subscribing to the RangedNearables event.

NearableManager manager;
public override void ViewDidLoad ()
{
  base.ViewDidLoad ();
  manager = new NearableManager ();
  manager.RangedNearables += (sender, e) => {
    //Nearables detected, load into TableView or pop up alert
    new UIAlertView("Nearables Found", "Just found: " + e.Nearables.Length + " nearables.", null, "OK").Show();
  };
  //Specify the type of Nearable to range for. In this instance return All types.
  manager.StartRanging (NearableType.All);
}

Estimote Nearables Detected

The real power of Nearables is the additional attributes that are received when they are detected, such as their temperature, orientation, acceleration, and more. As an example, you could easily use these attributes to detect a Bike Nearable in motion for over 45 minutes and prompt your user to perhaps take a break.

NearableManager nearableManager;
public override void ViewDidLoad ()
{
  var identifier = "94064be7a9d7c189"; //Identifier ranged earlier
  var durationThreshold = 45 * 60; //45 minutes
  nearableManager = new NearableManager ();
  nearableManager.RangedNearable += (sender, e) => {
    var bike = e.Nearable;
    if(bike.IsMoving && bike.CurrentMotionStateDuration > durationThreshold) {
      Console.WriteLine("Bike is moving and has been in motion for over 45 minutes!");
    }
  };
  nearableManager.StartRanging(identifier);
}

Triggers and Rules

In addition to ranging and monitoring Nearables, there is an advanced trigger system in the Estimote SDK that enables you to specify several rules that would trigger a notification. Let’s say you want to be notified every time a Nearable changes orientation and is laid down in a horizontal position. You would simply create a OrientationRule and use the TriggerManager to wait for the Nearable’s state to change.

TriggerManager triggerManager;
public override void ViewDidLoad ()
{
  var rule = OrientationRule.OrientationEquals (NearableOrientation.Horizontal, NearableType.Shoe);
  var trigger = new Trigger (new Rule[]{ rule }, "TriggerId");
  triggerManager = new TriggerManager ();
  triggerManager.StartMonitoring (trigger);
  triggerManager.ChangedState += HandleTriggerChangedState;
  triggerManager.ChangedState += (sender, e) => {
    Console.Log("Shoe nearable has been placed horizontal");
  };
}

More complex rules can be configured that are based on DateTime, temperature, proximity, and more.

Enhanced C# Beacon API

Xamarin.iOS has been able to detect iBeacons from any vendor since the feature was introduced in iOS 7 in CoreLocation. However, the Estimote SDK greatly simplifies the tasks of requesting and a simplified API for ranging and monitoring for beacons. In addition, if you are using Estimote Beacons you can tap into advanced features, such as their accelerometer.

0001125_estimote-beacons

Learn More

The Estimote SDK for iOS has plenty of great samples for both Nearables and Beacons for you to start out with, including a full Getting Started Guide. In addition, Estimote has SDK reference documentation and a developer portal with more information.

If you are interested in adding iBeacon functionality to your Xamarin.Android apps, be sure to check the component store for multiple libraries that you can take advantage of.

Discuss this post on the Xamarin Forums.

February 21

Apple Watch Kit round-up

It's Saturday, a good excuse for a 'fun' post. Here's a little collection of tidbits about the Apple Watch...



Apple: Watch Kit - if you're thinking of developing for the platform, might as well start at the source :)

Wareable: The best Apple Watch apps... - some great screenshots of apps already being built, including Clear, BMW, and Nike. It's interesting to see the UI design approach being taken by different developers. Check out the similar list on ibtimes.com

FastCompany: How the Apple Watch will work... - a couple of thoughts on app design, and screenshots of Todoist.

eleks labs' unofficial Tesla app - more design thoughts and prototype video (unofficial development, not affiliated with Tesla)..

Daring Fireball: On the Pricing of the Apple Watch - so yeah, "starting at $349" sounds like it's going to be the understatement of the year.

WatchKit FAQ - Awesome collection of questions and answers (and cute watch drawings too).

MartianCraft: Designing for the Apple Watch with Briefs - even if you don't use the tool (which looks great) this is a lovely post on Watch app design.

If that's got you interested in building apps for the Apple Watch, it's time to check out Xamarin's Watch Kit Preview and how to get started (inc video) and my first watch app.



I've also got a couple of samples, including Magic 8 Ball, Calculator, Insta, and Todo for you to try.

^ watch frame screenshots generated with Bezel thanks to the fine folks at infinitapps.

February 20

Nordic Game Jam 2015

A couple of weeks ago, several of us from the Unity Copenhagen office took part in the Nordic Game Jam . With around 730 participants, it’s probably the largest game jam in Europe. I’d been told in the past that I absolutely had to try this, but all the other game jams I’ve been to before were much smaller, so I didn’t know what to expect. Here’s what went down!

People from different countries flew in to Copenhagen for the two day jam that took place at Aalborg University, which consists of these two enormous buildings by the water connected by a bridge. The view from the bridge was beautiful and great to catch the sunrise from on a clear day!

IMG_2437 Polish invasion! Live DJ set at NGJ pre-party

While the actual jam kicked off on a Friday, we started getting into Nordic Game Jam mode the day before. A large group of game devs from Poland came to visit us at the Unity Copenhagen office, what later became known as the Polish Invasion. After a day of hanging out, we gathered the troop and went to the NGJ pre-party in Christiania where lots of dancing, playing indie games like Progress and catching up with friends took place. There were a couple of game journalists accompanying the game devs and they wrote a nice piece about their visit to our office.

Once in place at Aalborg University for NGJ, we set up a booth where participants could stop by and chat with our HR manager Anders about landing a job at Unity and get temporary Unity tattoos! NGJ interviewed Anders about working at Unity.

IMG_2231 (1) IMG_2234 IMG_2695

While part of the audience may have been a bit tired after the pre-party, you could sense the atmosphere of excitement the next day. I gathered a group of friends from Sweden, Poland and Germany, which turned out to be a really cool team.

The theme of the game jam, “OBVIOUS”,  was revealed after a day filled with talks, including one from James Portnow of Extra Credits and a keynote from Steve Swink. What’s pretty cool about game jams in general is that anyone can participate, whether you have created several games or are completely new to game development. Extra Credits recently worked with us on a series of videos about getting started with game development and I believe game jams to some degree fill the same purpose.

IMG_2263 IMG_2440 IMG_2241

Everyone split up into their groups, moved into rooms or spaces for dev:ing, started brainstorming game ideas and seeing what skills everyone had that could be put to use. You could hear lively discussions going on and feel the atmosphere of creative minds interchanging genius thoughts. Different groups had different methods of getting their thought processes going, pinning googly eyes on pineapples and spontaneous dancing took place.

The NGJ organisers made sure any type of game could be created during the jam. There was equipment for creating arcade games, material for board games, 3D printers, Oculus DK2’s, joysticks, and so on. The best part was being able to use the sound lab, which looked insane when I walked in the first time, a dark room covered in enormous spikes pointing directly at you, so quiet I could hear my own thoughts. I could use this room when performing the voice acting for the role of a pregnant woman in our game, which was a pretty interesting experience as well. Getting to scream as loud as I could in a room all by myself is not an everyday activity. My voice did however take quite a beating and I was still recovering the week after from a sore throat. Totally worth it.

IMG_2439

Though there were teams that got started on their games on Friday night, my team first decided on a specific game idea during our Saturday morning meeting. It really was a matter of “our deadline to decide on something is before lunchtime and after that we work work work.” And so we did. Feeling confident, we all popped back up into the space we’d taken over the night before and started producing. We split the areas up well having quite a large group, so each person was able to dedicate their time to art, code, design and audio. The group sizes at NGJ varied from 2 person teams to 6 persons. A few lovely souls also jumped between teams to help out in any area they could, which was super awesome.

Several groups stayed up late or pulled all-nighters to finish up their games for Sunday’s submission deadline. I believe around 140 games were submitted, so presentations took place in separate rooms where participants were able to vote for their favourite. Several of the games were made using Unity and you can play many of them on NGJ15′s itch.io site. One of the best things about game jams is that you never know the outcome of what people are working on, the projects typically start out pretty comprehensible, but can quickly turn ridiculous, which makes them that much more memorable.

A ceremony was held after the absolute final voting had taken place and the jury had made their decisions on which games were the best in each category. Awards were handed out, speeches were given, songs were sung and everyone was happy with the results. A great game jam, making new friends and just having a swell time is the summary of the weekend.

But before you stop reading, check out a couple of my favourite submissions:

Look at my drawing

Screen Shot 2015-02-18 at 17.51.07

Press F to Win

Screen Shot 2015-02-18 at 17.46.27

Hest til fest

Screen Shot 2015-02-18 at 19.48.36

Double Trouble

SnRsjC

There were many more good games, you can find a complete list and play some on NGJ15′s itch.io site.

Here are a couple of games made by the teams that included some Unity folks:

Gone

oaQHaC

Express Delivery

Screen Shot 2015-02-18 at 17.42.05

Black Hole Battle: not #madewithunity, but a board game instead!

IMG_2442

Once again, a big thank you to the organisers for creating such a fun and memorable event, we look forward to participating next year which also happens to be NGJ’s 10 year anniversary!

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