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.

October 1

Markdown Style Guide

Markdown is as a file format for easily producing text that can be pleasantly read both on the web and while using command line tools, or plain text editors.

Recently, a crop of tools have emerged that deliver some form of WYSIWYG or side-by-side authoring tools to assist writers to visualize the final output as they work.

Authors are turning to these tools to produce documentation that looks good when authoring the document, yet the tools are not true to the spirit and goals of markdown. And in some cases, authors are not familiar with the essence of what makes markdown great, nor the philosophy behind it:

Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions.

Using these editors is the modern equivalent of using Microsoft Word to produce HTML documentation.

The generated markdown files very easy to produce, but are not suitable for human consumption. They likely violate a number of international treaties and probably will be banned by the EU.

This short post is a set of simple rules to improve your markdown.

They will help you deliver delight to all of your users, not just those using a web browser, but also those casually reading your documentation with a file manager, their console, and most importantly, potential contributors and copy editors that have to interact with your text.

Wrap Your Text

The ideal reading length for reading prose with a monospaced font is somewhere between 72 and 78 characters.

This is text snippet is from Mark Twain's Adventures of Tom Sawyer, with text wrapped around column 72, when reading in an 80x25 console:

It wont matter if you are using a larger console, the text will still be pleasant to read.

But if you use some of these markdown editors that do not bother wrapping your text, this is what the user would get:

And this is what is more likely to happen, with big consoles on big displays:

There is a reason why most web sites set a maximum width for the places where text will be displayed. It is just too obnoxious to read otherwise.

Many text editors have the ability of reformatting text your text when you make changes.

This is how you can fill your text in some common editors:

  • Emacs: Alt-Q will reformat your paragraph.
  • Vim: "V" (to start selection) then "gq" will reformat your selection.
  • TextMate: Control-Q.

Considering Using Two Spaces After a Period

When reading text on the console, using two spaces after a period makes it easier to see where phrases end and start.

While there is some debate as to the righteouness of one vs two spaces in the word of advanced typography these do not apply to markdown text. When markdown is rendered into HTML, the browser will ignore the two spaces and turn it into one, but you will give your users the extra visual queues that they need when reading text.

If you are interested in the topic, check these posts by Heraclitean River and DitchWalk.

Sample Code

For small code snippets, it is best if you just indent your code with spaces, as this will make your console experience more pleasant to use.

Recently many tools started delimiting code with the "```". While this has its place in large chunks of text, for small snippets, it is the visual equivalent of being punched in the face.

Try to punch your readers in the face only when absolutely necessary.

Headers

Unless you have plans to use multiple-nested level of headers, use the underline syntax for your headers, as this is visually very easy to scan when reading on a console.

That is, use:

Chapter Four: Which iPhone 6 is Right For You.
==============================================

In the previous chapter we established the requirement to buy iPhones
in packs of six.  Now you must choose just whether you are going to go
for an apologetically aluminum case, or an unapologetically plastic
iPhone.
	

Instead of the Atx-style headers:

# Chapter Four: Which iPhone 6 is Right For You.
	

The second style can easily drown in a body of text, and can not help as a visual aid to see where new sections start.

Blockquotes

While markdown allows you to only set the first character for a blockquote, like this:

> his is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
	

Editors like Emacs, can reformat that text just fine, all you have to do is set the "Fill Prefix", by positioning your cursor after the "> " and use Control-x f, then you can use the regular fill command: Alt-Q, and this will produce:

> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere
> lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet
> vitae, risus.

Lists

Again, while Markdown will happily allow you to write things like:

*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.

You should love your reader, and once again, if you are using something like Emacs, use the fill prefix to render the list like this instead:

*   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
    viverra nec, fringilla in, laoreet vitae, risus.
*   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
    Suspendisse id sem consectetuer libero luctus adipiscing.	

September 30

iPhone 6 and 6 Plus LaunchScreen.storyboard for Xamarin

Following on from the previous post about adding launch images for iPhone 6 and 6 Plus, here are the instructions for adding a LaunchScreen.storyboard file instead of multiple fixed-size images. Apple's documentation recommends this method over using the static images. I used these instructions for replacing launch images with storyboards as a reference.

Configuring a LaunchScreen like this will automatically scale up your app for iPhone 6 and iPhone 6 Plus devices. You might also want to consider adding @3x retina images for iPhone 6 Plus support.

1. Add a new Storyboard to your project and call it LaunchScreen.storyboard.

2. Drag a UIViewController in and design your launch screen. I chose a black background with some white centered text - it looks like this (use the VIEW AS option to preview in different sizes):
3. Open the iPhone application Project Options and scroll down to the iPhone Launch Images section. There is a new Launch Screen dropdown (currently in Beta) that will automatically be populated with the available storyboards and xibs in your project. Choose the storyboard you just added.
3a. This creates the following key in your Info.plist (just FYI):
 <key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>

4. When you build the app, appropriate launch images will be generated for your app. Here's a shot of the emulator starting up showing the launch image for iPhone 6:

I've updated my Xamarin.Forms Todo sample, the code and storyboard are available on github.

UPDATE: Gerry reminded me about Marco's experience where adding a LaunchImage.storyboard file causes iOS to ignore the UIDeviceFamily setting in Info.plist (which specifies iPhone/iPod, iPad, or Universal app) and upscale iPhone-only apps to full iPad screen size (potentially making your app look really weird!). This behavior still appears to occur on the simulator, so test before you launch :)




The hobbyist and the Asset Store – success with Stealth

Set yourself a goal. You have a year to make a game by working on your own in your spare time. How far can you get?

After 15 months, Nicolas Liatti, who works for Allegorithmic (the makers of Substance) as a COO, published his hobbyist game Stealth to the App Store with some success. He spent just 2-3 hours every day working on it.

“I learnt Unity by following the tutorials and, of course, I used Unity Answers. I know how to make a game, I know the basics, but I’d no knowledge of C# when I got my hands on Unity, and I’m not a programmer.”

You may have already guessed that Stealth is a stealth game. Nicolas grew up with Metal Gear Solid. He couldn’t find anything like it on mobile today, and wanted to try and prototype something to see what it would look like.

“Initially, I spent about 2-3 months refining the mechanics of the game, just using cubes as placeholders until I was satisfied. When I’d got it that far, I went to the Asset Store to find the art, music and animations I needed so I could make my game.”

In fact, almost all the assets in Nicolas’ game are taken straight from the Asset Store. Amongst other things, he used a Mixamo character for his protagonist and a few Manufactura K4 bundles for the environments.

“Creating a unified look and feel for the game was the challenge. I’m not an artist, so actually I didn’t touch the meshes at all. I just tweaked my shaders and, of course, I used Substance software on some of the textures. I’m very happy with the result. It cost me almost nothing to make the game. Around $500 on assets, and I had all I needed!”

In his professional life, Nicolas also uses the Asset Store for prototyping and to impress clients:

“I love Unity, and I think the Asset Store is one of the things that makes it great. For a few bucks you can make a prototype that looks really good. At Allegorithmic we’re making a small game for a client. We found the clothes and animations we needed for the prototype in the Asset Store, along with some other fantastic props. When they saw what we could pull off in just two days they said, fine go ahead and make it.”

Stealth has attracted some very positive reviews from AppSpy and Touch Arcade, drawing favourable comparisons with games that have much higher production values and mammoth budgets. The gamers who’ve left feedback on the App Store have also given it top marks.

Nicolas’ next step is to publish to Android and add Unity Everyplay game replays. “I just clicked the Android build option and the game worked. I’ve had to spend a couple of days adapting a few things, but it’s really not been a big deal.”

Best of luck Nicolas!

September 29

Top 5 Criteria For Evaluating Mobile Quality Solutions

PDF CoverWe know from working with Xamarin Test Cloud customers that coming up with a comprehensive mobile quality plan can be overwhelming.

To help you better understand what you should be looking for in a mobile quality solution, and how Xamarin Test Cloud stacks up against other solutions in the marketplace, we’ve created a handy PDF with 5 criteria to consider when evaluating mobile testing solutions. Enjoy!
 

Download PDF

 

Plan Your Days at Xamarin Evolve 2014 and Request Your One-on-One

The Xamarin Evolve 2014 schedule is now available online, including session times, so you can start planning your days at the conference.

Training sessions at Xamarin EvolveTraining attendees in the Fundamentals track will go through a progressive training program over 2 days that will result in your first Xamarin app. More experienced Xamarin developers will choose from the Electives topics, including Testing, Enterprise, Android, iOS and Xamarin.Forms. Training attendees will receive an email shortly to confirm their paths.Craig Dunn presenting at Xamarin Evolve 2013

During the 3 days of the conference, you’ll select from more than 60 sessions across 10 tracks, including Xamarin Platform, Cross-Platform, iOS, Android, Mobile Best Practices, Enterprise, Emerging Devices, Gaming, Testing, and Mobile Ecosystem.

In addition to publishing the schedule, we have also opened requests for one-on-one sessionsOne-on-one session at Xamarin Evolve 2013 with Xamarin engineers to review code, consult on architecture, and troubleshoot issues. Back by popular demand, this expert help was one of the most top-rated features of Xamarin Evolve 2013. We are looking forward to meeting and helping even more of you.

Check out the newly updated website now to start planning your schedule for Xamarin Evolve 2014, and don’t forget to register for a one-on-one session with a Xamarin expert!

September 26

Xamarin Evolve 2014 Speaker Spotlight: Joe Mayo

This is the eighth post in our Xamarin Evolve 2014 “Speaker Spotlight” series, helping you get to know a little bit more about some of the amazing speakers who will be contributing at this year’s conference.

Photo of Joe MayoToday, we’re getting to know Joe Mayo, an author, consultant, and instructor who specializes in Microsoft and Xamarin technologies. He has been using C# since it was first announced in July 2000 and his 6 books are all on .NET topics. For his community contributions, Microsoft has honored Joe with 10 MVP awards over the years.

How long have you been doing mobile development?

A couple of years. Or maybe several years, counting back to all the times I wanted to throw my computer across the room.

What is your favorite platform to develop for and why?

Anywhere I can use C#, whether that be .NET or Mono. I’m very excited with the direction that Xamarin is taking mobile development, and have a great time using their products.

What are your favorite open source libraries?

LINQ to Twitter. Yes, I’m biased because it’s my project. There’s a great deal of satisfaction in knowing that I’ve helped so many developers write Twitter apps and maybe made a few folks smile, because it’s funny.

What are you doing when you’re not doing mobile development with Xamarin?

Working on my open-source project, LINQ to Twitter, writing, speaking, or learning something new.

What devices are you carrying around with you right now?

Nokia Lumia 822 with Windows Phone 8.1 dev update. There’s also a Kindle Fire within reach that’s loaded with a Xamarin.Android app I’m writing for a customer, and a Google Glass which is always a good time for coding and exploring.

What will attendees get out of your talk?

How easy async is to use, and the natural benefits of using it with mobile apps. You will <3 async.

If you missed the earlier posts in this series, click through to read about Jesse LibertyJon SkeetJonathan PeppersLaurent BugnionPaul BettsRachel Reese, and Brent Schooley.

September 25

Is the iOS Unified API for me?

We recently shipped the Unified API for Xamarin.iOS. The Unified API is a huge step forward for Xamarin.iOS, allowing a single source code to produce both 32 and 64-bit iOS Applications, a more streamlined and consistent API, and a much better story for sharing code with Xamarin.Mac applications.

64-bit iOS apps, which until recently could only be run on the most recent devices (iPhone 5s, iPad Air, and iPad Mini Retina), can now also run on the iPhone 6 and iPhone 6 Plus. This is fantastic news, but before you convert your apps to the Unified API, there are a couple of important things to consider, as the Xamarin toolchain matures to match the API.

As of today, the most compelling reason to switch to the Unified API is if you want to create app extensions, which requires developers to produce both 32 and 64-bit binaries to Apple. You can create a new application project using the Unified API or you can follow these instructions to update an existing Xamarin.iOS app.

There are currently some limitations on apps using the Unified API which I’ve outlined below:

Components

Unfortunately, existing Xamarin.iOS components need to be re-built against the Unified API, so while we (and the community) are working to update the component code, you will not be able to include these in your app. A workaround for open-source projects is to download and compile the code yourself as part of your Unified API project.

NuGet Support

NuGet will support Unified packages starting with version 2.8.3, a new build is now available at CodePlex.

Custom Control Designer Support

Our designer currently does not have the ability to render your custom controls in the editing surface when you use the Unified API. We are working on this.

Moving Forward

Xamarin is prioritizing updating our components so that you can start using them in your Unified API iOS apps, as well as updating the iOS Designer custom control renderer.

Our recommendation therefore is this: if you don’t need to utilize the App Extensions framework today, hold off on moving to our preview Unified API until the toolchain and components have caught up.

Thanks!

Xamarin Evolve 2014 is Officially Sold Out!

Xamarin Evolve 2014 banner with dates (October 6-10) and location (Atlanta, Georgia)Xamarin Evolve has sold out for the second year in a row, this year at twice the attendees—over 1,200—and with an additional day of conference sessions.

Those of you who can’t make it to Atlanta will be able to experience part of the conference with us. Live stream of the main stage at Xamarin Evolve 2014 will begin with the Keynote on Wednesday, October 8th at 9 am ET on the conference website. We will continue to stream the main stage sessions for the remainder of the conference.

Many thanks to our speakers and sponsors who are helping make this an unforgettable event. And thanks to our incredible developer community – we can’t wait to delight you at Xamarin Evolve 2014.

See you in 11 days!

The new QA mini site

Today we have launched a new section on the Unity3d.com site dedicated to the work and happenings in QA. We have long been writing blog posts and releasing different parts of our work where we could, but the time has come to make a space for all of it.

The QA mini site is a one stop place for our blogs, our public test suites, the Unity Test Tools and the patch releases. You will be able to keep yourself up to date on all things related to test and QA on these pages.

The Unity Test Tools page will give you links to the package, documentation and example projects for the tools. With those you will be able to both get the latest updates for the package itself, as well as getting resources to help and inspire you with utilizing them.

Our public test suites is currently a package containing our runtime test automation for Android, but we will release them for other platforms as they become available. It is a suite of tests we share with everyone who is interested in running the Unity test suites on their own devices. The main purpose is to share them with our partners who are actively developing OS or devices, such as Google running it on Android development, but anyone can pick them up here. Documentation and new releases will be available on the QA mini site. You can even get an RSS feed from the site to keep up with the patches we send out.

We have also decided to enroll the patch releases coming from the sustained engineering team on the QA mini site. Those patches are all about fixing bugs, so they do have a tight relation to what we do. All the releases coming from them will be available here and you will be able to subscribe to an RSS feed from this site.

Finally we have a page dedicated to the bug reporter. We have so many reports coming that we have to prioritize them according to how good our chances are of reproducing them, so we have an FAQ for our users. We hope it will help you to help us to help you.

With all that said, go check out the site and give us feedback: http://unity3d.com/unity/qa.

September 24

Animated cats delivered to your phone using Twilio MMS

Twilio launched MMS last week on all of its US and Canada phone numbers. A variety of hacks were unleashed by myself and other members of the evangelism team (if you haven't checked out the Mustached Messaging Service, you really need to 'stash yourself).

One of the hacks I put together (animated cats via MMS) is actually so easy to build that I wanted to show you how I put it together so that you can get started with your own MMS hacks! If you want to see the cat gif hack on your phone, send "cats" to (484)483-2287.

I'm super stoked to see what you build so make sure to email me at brent@twilio.com or hit me up on Twitter @brentschooley with your MMS creations. For now, let me show you how to stitch this hack together and send animated cat gifs to your phone via MMS.

(This project is available on Github)

The setup

What you'll need to make this work is a Twilio account (create one here) with an MMS-enabled number and a Sinatra server with the twilio-ruby gem installed. You can install Sinatra and twilio-ruby by punching the following lines into the terminal:

With those pieces in place, all we need to do is create a file to hold our server code. Run this in terminal:

The code

I promised this would be quick and easy so I'm just going to drop this code here:

This code uses the wonderfully simple API known as The Cat API to generate a random animated cat gif. This URL is passed as the Media URL for the Response that will be sent back to Twilio when an incoming text message is received at your Twilio number. (Note: If you are not using a helper library and are just returning TwiML directly, you will need to properly escape the ampersands in the URL.)

Speaking of incoming messages, you'll need to set up your Twilio number to point at the server code you just wrote to handle those incoming texts. You can do that here. Click on your number and set the Messaging Request URL as shown below to point at the URL where you deployed your Sinatra server (I recommend Heroku - details here):

That's it! Send your Twilio number a text message and you should receive a random animated cat gif. Share this with all of your friends!

What's next?

I think sending a text message and getting back a cute little cat running around doing something hilarious is pretty rad. That being said, I'm really excited to see what you'll do with Twilio MMS! Please leave a comment on this post or email me at brent@twilio.com or find me on Twitter @brentschooley and share what you build.

Happy hacking!

Launch of Xamarin Test Cloud

Xamarin Test Cloud LogoToday we are proud to announce the public launch of Xamarin Test Cloud, with over 1,000 real devices available to help you build better apps, and ensure they work on each one.

The state of mobile testing today is primitive. Last month we ran a survey that found that nearly 80% of mobile developers are relying primarily on manual testing in their attempts to deliver great app experiences. And yet, more than 75% told us that the quality of their mobile apps is either “very important” or “mission critical.”

Continuous testing with Xamarin Test CloudWe created Xamarin Test Cloud to solve this problem. We believe that testing is not something you should do at the end of the development cycle, just before submitting to the app store. Instead, your app should be continuously tested during development in an automated, scalable way. Your developers should be writing user interface tests as they develop the app, and commits shouldn’t be merged until the tests pass.

Once you have an automated test suite, even a simple one, you can easily verify that your app works on the hundreds of device variants in use by your customers, before you ship the app to them.

Doing this on your own is expensive and difficult. It’s simply impractical for developers to purchase hundreds of devices themselves, manage a giant device library, ensure coverage with every test run, and merge test results from large-scale tests performed multiple times per day.

With Xamarin Test Cloud, you can create your own test scripts using our powerful testing framework, run them locally against emulators or devices, and then press a button to run the same tests on as many devices as you would like in the cloud. We even integrate with CI systems like Jenkins and TFS, so that your tests run automatically.

We know that Xamarin Test Cloud is the best mobile QA tool available on the market, with one of the most trusted support teams in the industry, and we are excited to make it available to all mobile teams today. But you don’t have to take our word for it – check out what other developers are saying below.

If you’re interested in learning more about Xamarin Test Cloud, I invite you to join me for a webinar on Tuesday, September 30th, at 10am PDT.

Register Now


 
 
“Xamarin Test Cloud helped us identify and fix critical device-specific issues in the latest release of Foursquare before we released.”

– Mike Singleton, Software Engineer at Foursquare

 
“Xamarin Test Cloud is our path to a low maintenance, high quality and regression-free future. Not only is the product strikingly effective, but the team has been amazing — with their help we’ve seen immediate value from our investment. We’re excited about where this can take our team and product.”

– Sean Beausoleil, Mailbox Engineering Lead at Dropbox

 
Flipboard Logo“As a QA Engineer, I am really enjoying Xamarin Test Cloud because it offers me a broad range of Android and iOS devices. It gives me the ability to have more test coverage and to discover issues sooner. And what’s particularly helpful is that Xamarin offers exceptional service and support that I can depend on every day.”

– Derrick Lam, QA Engineer at Flipboard

 
Expensify logo“Xamarin Test Cloud helps us ensure that critical features of Expensify look and perform great on every Android device imaginable.”

– Tom Jacobs, Software Engineer at Expensify

 
Trello Logo“Xamarin Test Cloud has helped us catch important bugs in challenging scenarios, and to ensure they never occur again.”

– Hamid Palo, Android Team Lead at Trello

 
ebay classified group logo“Xamarin’s Calabash framework, and their Xamarin Test Cloud, plays a fundamental role in our continued effort to maintain the highest possible quality of our products and also in securing a short time-to-market. Our test setup takes care of most of the tedious work doing regression tests and gives our team quick feedback, while helping us delivering new features at a fast predictive speed. Whenever we have encountered problems, the Xamarin service and support has been excellent.”

– Niels Frydenholm, Software Architect at eBay Classifieds

Unity Universal Cyberport Project — A Stepping Stone to Success in the Chinese Market

Right after Unite, we signed an agreement with the local government of the Putuo district of Shanghai that will create a lot of opportunities for indies in China and for international developers coming to this market. The Unity Cyberport Project will provide an incubator, an accelerator and a base for experiments of all kinds. We can’t wait to see the awesome games that come out of this cooperation!

The mobile games market in China has exploded in recent years, the scale of local user payment will be 20 billion RMB (around 3,26 billion USD) in 2014, according to estimates. The Putuo district in Western Shanghai is aiming to take full advantage of these opportunities and become the next Silicon Valley. And cooperation with Unity is of course part of that.

We signed the High Level Strategic Cooperation Agreement at the Unity head office in San Francisco on August 25th 2014 with Zhang Guohong, Governor-in-Chief of Putuo District People’s Government Shanghai, and a number of other representatives. During the meeting, Allen Foo, Unity’s Country Manager for the Greater China Region, talked about our progress in China and the Unity Cyberport Project. Liang Zhuanjian, General Manager of Shanghai Universal Software Park Co., explained incentives placed for developers that included tax and rent policies.

IMG_6808

Unity Cyberport Project is different from traditional games industry technical bases. It will act as a comprehensive platform of engine research and development, game development, testing, operation, publishing, localization and related services, all connected with Unity. It will also support the expansion of interactive digital content into other industries, such as film and television, medical, travel, advertising, architecture etc. The exploration of AR and VR technologies is also one of the goals of the initiative.

The project will have three main parts: an incubator, an accelerator and Unity Awards Greater China. The incubator will provide select startup companies or ISV with launch funding, free office and other infrastructure, R&D guidance, technical support and commercial publishing. The accelerator project will create customized analysis for the incubated enterprises and help enterprises achieve healthy growth and earn profit. We’ll also hold Unity Awards Greater China Contest to evaluate games, inspire developers and introduce them to publishers.

Silicon Valley as the goal, Putuo district as the core, Unity Cyberport Project seeks to attract and cultivate talented developers by providing a great environment for technological and entrepreneurial innovation. With the assistance from the Putuo government, we can see that in three to five years, this technology park will become a leader in innovation and produce thriving and successful games made with the Unity Engine. More than 30 companies are already determined to join the project.

Thinking about joining too? Please send us (andrew@unity3d.com) your company info and your business plan in China, including why you’re interested in the Chinese market and what kind of business would you do here. We’ll discuss your plans internally and get in touch with you  for further discussions. If you’re picked, congratulations! You’ll be get a rent free office for 1.5 years and benefits on Putuo District tax rate.

unnamed

Wear support in Moyeu

Final Setup

I just officially added Android Wear support in the shipped version of Moyeu, my Hubway (Boston’s bike sharing system) app for Android.

As usual, the code is available in my GitHub repository and you can grab it from Google Play.

It’s an example of what’s possible to achieve today with our Xamarin.Android Wear support and Google’s Wearable UI library. Feel free to reuse as you see fit.

September 23

Unity developers shine at Ludum Dare 30

The history of the Ludum Dare development contest arguably stretches back to the dawn of game jams.

The inaugural Ludum Dare took place way back in 2002, at the same time as the very term ‘game jam’ began to enter industry parlance. 12 years on and the 30th iteration has just drawn to a close, inspiring a remarkable spread of games.

Ludum Dare 30 saw the creation of 2538 titles, all around the theme of ‘Connected Worlds’. The event, which takes place across the world, was spilt into the newer ‘Jam’ element, which gives teams 72 hours to craft a game, and the original ‘Compo’, that demands a game from a sole developer in 48 hours. Both addressed the same theme.

And now developing has concluded, the votes are in, and the winners are decided, it’s time to look at some of the best entries made using Unity, including Compo winner Superdimensional.


Compo Highlights

Game: Superdimensional
Developer: PixelMind
Position: 1st
Platforms: Web, Windows, Linux
A stark, stylized spin on the puzzle-platformer, Superdimensional only wants you to use your mouse; and it isn’t too keen on the buttons either. In fact, you’ll rarely click or press a single one. Instead, you use the mouse to angle pools of light on the ever-advancing mostly spherical protagonist, exposing it to different parallel dimensions, helping it move through the world by hopping between overlapping realms. ‘Connected Worlds’, if you like. Superdimensional is short, sharp and captivating, and so pretty it’s hard to believe it was made in two days by a single developer.

Superdimensional by PixelMind

Play Superdimensional here.


Game:
Hello World
Developer: Rahazan
Position: Joint 6th
Platforms: Web
Hello World is a captivating game of maintaining communication channels between distant planets, seemingly to ensure cat videos are enjoyed on an intergalactic basis. It’s also a tremendously satisfying puzzle game of drawing lines between satellites and radio antenna, and just like Superdimensional, it hit’s the ‘Connected Worlds’ theme with absolute precision.

Hello World by Rahazan

Play Hello World here.


Game:
On the Edge of Earth: 5000
Developer: Hypnohustla
Position: Joint 12th
Platforms: Web
On the Edge of Earth: 5000 tells a tale of a lone astronaut deep in space, armed with a huge planet zapping laser. This laser, however, flushes dead planets with life, and the player’s is the task of completing a single mission. Effectively a micro adventure game, Hypnohustla’s game is incredibly polished and well crafted considering the timeframe of its creation, and filled with absurd machines to bewilder and delight.

Edge of Earth: 5000 by Hypnohustla

Play On the Edge of Earth: 5000 here.


Game:
I Must See You
Developer: Split82
Position: Joint 15th
Platforms: Web, Linux, Windows
There’s no denying that at a glance I must See You nods to the form of Unity-authored smash Hitman Go. But something is different here, for the player must guide not one, but two entities through an isometric grid puzzler. The twist? If line of site between the two is broken, movement of one is stopped dead. It’s an idea used to great effect, and while fleetingly brief, I Must See You has vast potential to be extended into a fully fledged game.

I Must See You by Split82

Play I Must See You here.


Game:
What Could Possibly Go Wrong?
Developer: Andrew Shouldice
Position: Joint 15th
Platforms: Web
A top-down run ‘n’ gun shooter in the classic form, What Could Possibly Go Wrong? tells the tale of a portal to distant worlds created by scientists, that lets creatures from across space and time pour through to Earth. It’s presented in chunky pixel art, and its title really does say it all. Shouldice’s creation is compelling and hilarious in equal parts, and deserves to be remembered long after Ludum Dare 30.

What Could Possibly Go Wrong? by Andrew Shouldice

Play What Could Possibly Go Wrong? here.

Jam Highlights

Game: This Little Piggy
Developer: InfectionTeam
Position: Joint 5th
Platforms: Web, Windows, Mac, Linux
This Little Piggy starts innocently enough, as a first person adventure, the protagonist scouring a small planet for the ingredients for a salad. Then a pig gets slaughtered for one last ingredient; bacon. That death causes a ripple through the dimensions, ringing alarm bell on a distant home world. Suddenly a portal to a opens in the game’s cheerful setting, and heavily armed swines from an alien planet pour through, turning a charming curio into an FPS that is particularly slick for 72 hours’ toil.

This Little Piggy by InfectionTeam

Play This Little Piggy here.


Game:
The Legend of Light
Developer: Yword
Position: 8th
Platforms: Web
The Yword team used Unity to create a visually splendid platformer in the 72 hours at their disposable. As well as the ability to leap through portals, The Legend of Light’s hero can alter the levels around it, moving whole sections of platforms and rotating entire areas in a way quite distinct from it’s contemporaries. Proof yet that there’s space for originality in the jostling puzzle-platformer space.

The Legend of Light by Yword

Play The Legend of Light here.


Game:
Binary System
Developer: rogueNoodle
Position: 12th
Platforms: Web, Windows, Mac, Linux
There’s a little flavour of arcade icon Asteroids to Binary System. Nothing wrong with that, but there’s plenty more to rogueNoodle’s creation too. It tells a tale of two planets locked in orbit together, tearing through space as one, avoiding impacts and gathering stars. It’s remarkably immediate and simple, and like all of the entries highlighted here, does a fine job with the Ludum Dare 30 theme.

Binary System by rogueNoodle

Play Binary System here.


Game:
Connector
Developer: TeamEagle
Position: 13th
Platforms: Windows, Mac, Linux
The universe needs an internet connection, and it appears one ship is equipped with the tools for the job. Connector takes the theme especially literally, and does so with fantastic artwork and particularly robust physics. Never before has untangling Ethernet cables been more rewarding, and never again will installing an internet line attract so much enemy attention.

Connector by Team Eagle

Play Connector here.

Game: Computer – Open That Door!
Developer: pLaw
Position: Joint 21st
Platforms: Web, Windows, Mac, Linux
When a computer gains sentience, it doesn’t what to be shut down; especially by the over-efficient crew of a starship making hurried leaps through space and time. In Computer – Open That Door!, you play just such a programme, and are tasked with killing off your crew by manipulating ship systems before the humans reach their destination, taking out your prey one at a time. pLaw’s creation is certainly funny, but more than that it has surprising depth, and hides a wealth of secrets that are a delight to unravel.

Computer – Open That Door! by pLaw

Play Computer – Open That Door! here.

The above are just some of the numerous brilliant Ludum Dare 30 games. The top 100 Compo creations can be found here, the top 100 Jam games are here, and the full list of all 2538 creations is right here.

Congratulations to all those who took part.

September 22

iPhone 6 and 6 Plus Launch Images for Xamarin

I was initially stumped by how to get my Xamarin.iOS and Xamarin.Forms apps to size correctly on the iPhone 6 and iPhone 6 Plus. Thanks to this StackOverflow question & answer I have a solution - reposting here because the solution that works best for me right now is only the 3rd most popular answer there.

Simply create two new default images (this is for portrait only, but landscape will become obvious later):

Default-667h@2x.png for iPhone 6; dimensions 752x1334

Default-736h@3x.png for iPhone 6 Plus; dimensions 1242x2208

and place them in the application root or the Resources folder. Notice the filename format is similar to the Default-568h@2x.png image that Apple introduced for the iPhone 5 screen.

Now edit the source of your Info.plist file (open in a text editor so you can type XML directly) and add the following UILaunchImages key:

<key>UILaunchImages</key>
<array>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>7.0</string>
<key>UILaunchImageName</key>
<string>Default-568h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{320, 568}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-667h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{375, 667}</string>
</dict>
<dict>
<key>UILaunchImageMinimumOSVersion</key>
<string>8.0</string>
<key>UILaunchImageName</key>
<string>Default-736h</string>
<key>UILaunchImageOrientation</key>
<string>Portrait</string>
<key>UILaunchImageSize</key>
<string>{414, 736}</string>
</dict>
</array>
If you wish to support landscape images, add matching keys with Default-Landscape-???h filenames and specify the correct orientation and size.

Note that this is not Apple's preferred way of indicating support for the screen sizes. Their Launch Images doc says:

You use a launch XIB or storyboard file to indicate that your app runs on iPhone 6 Plus or iPhone 6.

which requires you to create a Storyboard or XIB using size classes. More on how to do that in future, or head back to that StackOverflow post!

p.s. this iPhone 6 Screens Demystified post by PaintCode is awesome!

Video: Xamarin.Forms – Over 90% Code Re-Use And Access to Native Features

One of the features I love about the Xamarin 3 Platform is Xamarin.Forms, which enables you to build beautiful, native UIs for iOS, Android, and Windows Phone from a single shared C# codebase.  In an enterprise CRM demo app that I’m currently writing with James Montemagmo (which we’ll make publicly available in the next few weeks), we’re getting over 93% code re-use, which encompasses the UI, business logic, and cloud connectivity.

A critical point to call out is that Xamarin.Forms provides the capability to access platform-specific implementations via a feature called the Dependency Service. For example, Android, iOS, and Windows Phone all provide GPS and Text to Speech (TTS) capability, but their interfaces and implementations all differ.

I recorded this short video with Craig Dunn, Xamarin technical writer and Developer Evangelist, that shows the basics, code samples, and a demo for Xamarin.Forms running on different devices. Watch it in HD and full-screen to see the code.

Sample Code:

The code we used to put this demo together is available on Github here. Download it and try it out for yourself!

Accessing GPS & Location Features:

The sample code illustrates how to access GPS info on Android and iOS devices. More detailed guides are available on the Xamarin Developer site and on Microsoft MSDN. Links for this info are at: Android, iOS, Windows Phone.

Using Text to Speech (TTS):

The Xamarin developer site has a good overview of the Dependency Service that utilizes Text to Speech as an example. There’s code on how to implement it across Android, iOS, and Windows Phone. It’s available here.

Come See Us At Xamarin Evolve 2014!

Xamarin Evolve 2014 is October 6-10 in Atlanta, Georgia. Craig and I are both presenting, along with many other talented developers and speakers from Xamarin, Microsoft, Facebook, and Github (and many others).

  • Your First Xamarin.Forms AppCraig Dunn
  • Architecting Authentication, Security, and Extending Existing Systems for Enterprise Mobile AppsSteve Yi

If you’re still on the fence about attending, I encourage you to sign up – not only is it an opportunity to learn and network with other attendees and Xamarin engineers, there’s also fantastic training.

See you in Atlanta!

Branch differences

We’ve implemented a batch of improvements in the branch/cset/label diff window in the last months. Some of the improvements are pretty recent and some others have been around for months already. I’ll be walking through them and explaining how they help when running diffs on a daily basis.

Improved diff groups

Availability: 5.0.44.603 (Sep 12th 2014) and 5.4.15.605 (Sep 19th 2014).

The first feature is the ability to group together files and directories that only differ in file system permissions (typical scenario when some files get executable flag on Linux). Now the files that only differ in file system permissions are grouped together so you can better focus on what was actually modified.

The goal here is to let you focus on the real changes when diffing code for a review or when figuring out why a bug occurred, by grouping away potentially uninteresting changes.

The second feature is a slight modification since we released Item Merge Tracking last year. Now the files that were in changed/changed merge conflicts will show up in their own category:

And this is how the same info was grouped before:

As you can see now he highlight the “changed/changed” and put them at the very beginning of the list so you can focus first on the diffs of files which were modified by both contributors during a merge, and hence are potentially worth reviewing.

Analyze diffs

Availability: 5.0.44.536 (March 3rd 2014) and 5.4.7.538 (March 10th 2014).

There’s a story behind this feature: sometimes you find yourself reviewing a task where the developer modified a huge number of files, like 200 or so.

You launch the diff and then you see the counter with a big number on it: 100, 200, 250 files… whatever. Your feeling will be: “oh god! Let’s go and grab some coffee first”. Which, in short, means that huge reviews are extremely unproductive because you enter in this state of mood of “this will take a loooooong time”.

And sometimes that’s correct and you truly have to spend a long time.

But chances are that many of the files changed by your colleague only contain trivial changes. Like a rename on a method that affects a bunch of files, but all this files only have a trivial modification.

How can you figure out beforehand? Well, that’s why we’ve introduced “analyze changes”.

You click on the new “analyze differences” button and then Plastic will use cloc to calculate the lines of code being modified. You can see it running in my review with 284 files below:

And here goes the result once the changes were classified:

As you can see there’s a new SLOC column where you see a summary of the lines of code being added, changed and deleted (since it uses SLOC and not LOC, there will be cases where changes only affected comments or white lines and hence they’ll show up as zero changes!).

You can sort the column and then check how many files have really “big changes” and it will have a positive effect on your mood and willingness to go through the entire list, which at the end of the day means increased productivity :-)

In my screenshot you can see how the selected file just contains a namespace change… which is not a big deal to review and in fact in my example this refactor affected more than 180 files out of 280, not bad.

This is the first step towards true “semantic multi-file diff” :-)

Find in files

Available since: 5.0.44.574 (Jun 6th 2014) and 5.4.12.575 (July 1st 2014).

Sometimes you’re diffing a branch and then you would like to find something (a method call, a given text or comment) inside the files being diffed.

That’s why we added “find in files” to the diff window: click on the new “find in files” button or “CTRL+SHIFT+F” and the following panel will show up:

You can enter the pattern to find, then decide whether you want to search in both sides or only one of them, select the extension or whether you want to select the search to the filtered files in the diff window.

And the results are displayed as follows:

With the occurrences of the left and right sides separated to ease the navigation.

In my case I was looking for the word “comment” and it is clearly more common before the change, which means the word was deleted from the file.

Our plan is to implement another feature on top: “search only in diffs” to restrict the search to the text blocks which were really modified. This is useful, for instance, to see if a certain method call has been really used in the new code or not.

Annotate each contributor

Available since: 5.0.44.577 (Jun 18th 2014) and 5.4.13.578 (Jun 26th 2014).

We added the option to launch the annotate from within the diff view so you can instantly see the detailed information about each line of each of the two sides of a diff.

I find it especially useful when going through complex merges: look at the screenshot above. Do you see the “Yes” at the end of the annotate? It means this line was modified during a merge. Which means the two contributors to the merge don’t contain the line but it was actually edited during the merge (at least prior to the checkin). This information is very useful to figure out what was really changed manually and what simply comes directly from one of the merge contributors.

As it happens with some of the other features explained in this blog post, this is just a first step. We’re working on more improvements to item merge tracking to be able to display on files in the “changed-changed” group exactly which lines come from merges or were modified on the branch.

Info about binary files

Available since: 5.0.44.592 (Aug 6th 2014) and 5.4.14.593 (Aug 8th 2014).

Sometimes you’re diffing a branch and there are binary files that can’t be diffed. So far we were just displaying a message telling “diff not available” (although you can CTRL+D to launch the external diff, for images for instance). Now we display useful metadata to understand the change:

The date and size and author are especially useful to understand what is going on with the file.

For images our plan is to embed the Image Diff here (check the gallery to find out more about the tool).

September 20

Expanded Oculus Rift Support in Unity

More awesome news today as Brendan Iribe, during his Oculus Connect conference keynote, announced that our two companies have extended our partnership in order to ensure that Unity is available for all of our development community. That means whether you’re using the free version of Unity or Unity Pro, you’ll be able to create awesome VR experiences for the Oculus Rift and the Oculus VR Store for free!

We’re working with Oculus to create an official add-on supporting the Oculus Rift in Unity that everyone will have access to for free. We know a lot of you have interest in creating new experiences and experimenting with one of the most exciting platforms around so we’re very happy to make that as easy as possible.

The Oculus add-on will include stereo imaging optimizations, 3D audio support, deeper Unity editor integration, inclusion of the Oculus Rift in the Unity development and debugging workflow, integration of Oculus-specific APIs within Unity, and direct publishing to the Oculus platform.

We do want to make sure everyone can work on Oculus projects while the Unity for Oculus add-on is in development. To that end, we’re working with Oculus to make the current Oculus plug-in, one that has been available for free for Unity Pro users, also available for those making games with the free version of Unity. This new plugin version will be made available for free download on the Oculus developer site as soon as possible.

We’re already seeing some amazing things being made in Unity for the Oculus Rift. Projects like Lucky’s Tale, Game of Thrones: The Wall, The Gallery: Six Elements, DarkNet, Titans of Space, Blocked In, and our 2014 Unity Awards winner for Best Student Project, The Rift: U.R.I.D.I.S., demonstrate the great creative potential in virtual reality and the Oculus Rift. We can’t wait to see what you can do with dedicated tools!

David

September 19

Add Some Punch to Your Apps with iOS 8

iOS 8 iconWith over 4,000 APIs, and 12 major new or upgraded frameworks and features, iOS 8 is one of Apple’s biggest OS releases yet. Now, Xamarin is here to get you started with the new goodies and 64 bit support with the iOS and Mac Unified API.

To get building apps that take advantage of the new iOS 8 frameworks and features today:

  1. Download and install the latest Xcode.
  2. Update Xamarin.
  3. Check out the Introduction to iOS 8 Guide.

While you’re downloading Xcode and installing the updates, watch the Get Ready for iOS 8 webinar for a curated overview of the new features, hosted by Xamarin Developer Evangelist Mike Bluestein.

If you want to see the new features in action for yourself, you can also download and play with our new iOS 8 Samples.

iOS 8 has a ton of new frameworks and features, so when you’re ready to continue your journey and dive deep, check out the Xamarin guides, which will help you utilize the new features and add some sparkle to your apps.

Provide Rich OS Integration with App Extensions

App Extensions iconApp Extensions allow for apps to deliver unprecedented functionality through deep OS integration. With Extensions, applications can now offer features like the Today Widgets that live on the notification screen, custom keyboards, and sharing extensions, to name just a few. To learn how to create your own, check out the Intro to App Extensions guide.

Access Secrets Biometrically with Touch ID

Touch Id iconThe new TouchID APIs allow app developers to integrate with Apple’s biometric touch sensor to authenticate users and restrict access to data and functionality within your apps. Additionally, with TouchID, access to the keychain and secure storage is available biometrically. For more information, check out the Introduction to TouchID guide.

Build Custom Photo Galleries and Create the Next Instagram with Photo Kit

Photo Kit iconPhoto Kit is a new framework that makes working with the image library a snap. With Photo Kit, you can more easily fetch photos, create custom galleries, and even apply filters and modify them en masse. For an example of using the Photo Kit framework in Xamarin, see Mike Bluestein’s Build Great Photo Experiences in iOS 8 with Photo Kit blog post.

Use Manual Camera Controls to Create Highly Stylized Photos

Camera API iconThe AVFoundation Framework got a big upgrade in iOS with the addition of the all new manual camera controls. With them, you can get low-level access to the camera hardware, enabling the iPhone’s camera to be controlled more like traditional cameras. Jump in and read the Intro to Manual Camera Controls guide for more information.

Take your iCloud Integration to the Next Level with Cloud Kit

Cloud Kit iconCloud Kit expands on the existing iCloud APIs to enable much more sophisticated integration with iCloud, and is targeted at developers who want to take advantage of iCloud to handle cloud-based data persistence and retrieval. It offers a much simpler integration story than previously, while offering a much more feature-rich experience. For more information, check out the Intro to Cloud Kit guide.

Share Documents with other apps with the Document Picker

Document Picker iconThe Document Picker allows applications to reach beyond the app sandbox to share and access documents with other applications. With the Document Picker, you can now create complex document workflows between more than one application. For more information on working with it, check out the Intro to the Document Picker guide.

Work with Calendars and Events in Event Kit

With iOS 8, Apple expanded on the Event Kit framework to allow easier access to, and manipulation of calendars and events. For more info, check out the Intro to Event Kit guide.

Simplify UI Creation Across All iOS Devices with Unified Storyboards

Unified Storyboards iconWith the introduction of the iPhone 6 and iPhone 6+, creating user interfaces that work well across all iOS devices got much more complicated. Fortunately, Apple introduce Unified Storyboards to simplify the process by allowing you to create single screens that scale for different devices. For more information, see the Intro to Unified Storyboards guide.

Integrate 3D Graphics into your App with Scene Kit

Scene Kit iconSceneKit is a 3D scene graph API that makes integrating 3D content into your application and causal 3D games a breeze. For an example of using the Scene Kit framework in Xamarin, see Mike Bluestein’s Lights, Camera, Action – 3D in iOS 8 with Scene Kit blog post.

Create 2D Games Quickly with Sprite Kit

Sprite Kit iconSprite Kit, the 2D game framework from Apple, has some interesting new features in iOS 8 and OS X Yosemite, including integration with Scene Kit, lighting, and physics enhancements. For an example of using the SpriteKit framework in Xamarin, see Mike Bluestein’s New Sprite Kit Physics Features in iOS 8 blog post.

Browse the Entire List of New APIs and Features

These are some, but not all, of the new features in iOS 8. For a comprehensive list, check out the API change log and release notes.

Xamarin Evolve 2014 Speaker Spotlight: Brent Schooley

This is the seventh post in our Xamarin Evolve 2014 “Speaker Spotlight” series, helping you get to know a little bit more about some of the amazing speakers who will be contributing at this year’s conference.

Photo of Brent SchooleyToday we’re featuring Brent Schooley, a Developer Evangelist at Twilio, who has been working with C# since 2005 and iOS since 2009. A strong advocate of building mobile apps with C# starting with MonoTouch 1.0, and carrying through to today with Xamarin, Brent has a passion for both development and design and is the author of “Designing for Windows 8” from Apress. He is a Microsoft MVP in Client Development.

Why did you get into software development?

I have always been interested in computers. It started with the Apple II playing games off of floppy disks. It continued in 5th grade when I wrote code for a Commodore 64 during school hours. I built my first website when I was in 6th grade. I went to college for computer engineering and ultimately pursued software development after graduation. Computers have always been a major part of my life.

How long have you been doing mobile development?

I have been doing mobile development since the release of the iOS SDK in 2008.

What is the biggest lesson you’ve learned as a mobile developer?

The biggest lesson I have learned is that developing and designing mobile user interfaces is completely different from desktop and web.

quotation markTHE NATURE OF MOBILE DEVICE USAGE IS VERY ON-THE-GO AND APPS MUST BE CONSTRUCTED TO ACCOMPLISH TASKS AS EFFICIENTLY AS POSSIBLE. YOU DON’T HAVE MUCH TIME TO MAKE A LASTING IMPRESSION, SINCE A TYPICAL APP SESSION LASTS A LITTLE LONGER THAN A MINUTE.

What devices are you carrying around with you right now?

Retina iPad mini on T-Mobile, Gold iPhone 5s on Verizon, 2nd gen Nexus 7, and Nokia Lumia Icon.

What are your favorite mobile apps and why?

  • Gmail – it’s my preferred email client
  • Tweetbot – definitely my favorite Twitter client
  • Facebook – because it’s where my friends are
  • Flowdock – keeps me connected to my team

What will attendees get out of your talk?

Attendees will learn how to take any of the many Objective-C libraries that are available on sites like Cocoa Controls and make them work in Xamarin via C# bindings.

If you missed the earlier posts in this series, click through to read about Jesse Liberty, Jon Skeet, Jonathan Peppers, Laurent Bugnion, Paul Betts, and Rachel Reese.

Xamarin Evolve 2014 Speaker Spotlight: Rachel Reese

This is the sixth post in our Xamarin Evolve 2014 “Speaker Spotlight” series, helping you get to know a little bit more about some of the amazing speakers who will be contributing at this year’s conference.

Photo of Rachel ReeseToday’s spotlight features Rachel Reese, a long-time software engineer and math geek who recently relocated to Nashville, TN to work with the fabulous folks at Firefly Logic, as well as to be a part of the Nashville functional programming scene. She currently helps run the Nashville Xamarin user group, @NashXam, and is an ASPInsider and an F# MVP. You can hear Rachel’s talk, “1) Write Cross-Platform Apps with F# & Xamarin. 2) ??? 3) Profit!: Mobile App Development in F#” in the Xamarin Platform track at Xamarin Evolve.

How long have you been doing mobile development?

Actually, not very long (around eight months). I’d been hearing about Xamarin and F# development for about two years, but it took my move to Nashville for me to get really involved in mobile development. In just under a year, I’ve jumped all in — what’s there to not love about using my F# and C# skills to build iOS and Android apps? This is awesome!

Why did you get into software development?

Oh, good question. I was a math/physics major in college. The summer after my freshman year, I started a research job with a high-energy physics lab. One of the grad students sat me down on my first day, handed me a book on C, and told me that I wouldn’t really be useful until I understood most of it. I spent the summer going through the book meticulously. I took a couple programming courses in school, as well, so when I graduated (after much, much hemming and hawing about whether or not to go to grad school) I opted for a job with a friend of mine that only required I know a bit about HTML. It was all downhill from there!

What is your favorite line of code that you have ever written?

quotation markI CAN’T THINK OF A SPECIFIC FAVORITE LINE OF CODE OFF-HAND, BUT THAT MOMENT YOU FINISH PIPELINING A LONG CHAIN OF FUNCTIONS IN F# AND EVERYTHING JUST WORKS? *SIGH* <3

What will attendees get out of your Xamarin Evolve talk?

A basic understanding of how and why using F# is a fabulous alternative to C# for mobile developers.

How much do you love curly braces and why?

Curly braces!?

*puts on shades*

Where I am, I don’t need no stinkin’ curly braces.

What are you doing when you’re not doing mobile development with Xamarin?

I’m confused. Life outside mobile development with Xamarin!? That… exists?

Traveling (both near and far)! Fun fact: my two dogs have been to more countries than I suspect most Americans have (5: France, Germany, Spain, Canada, US).

Also, cooking. I have an awful/amazing habit of buying spices, infused balsamics, and kitchen trinkets. Sometimes I concoct awesome things, sometimes not so much, but it’s all fun.

If you missed the earlier posts in this series, click through to read about Jesse Liberty, Jon Skeet, Jonathan Peppers, Laurent Bugnion, and Paul Betts.

September 18

Meme Generator Powered by MMS

If you haven't heard yet, Twilio annouced MMS support today on all US and Canada phone numbers. I'm so stoked about this new feature and I knew exactly what I wanted to build with it.

Introducing the MMS Meme Generator

It is my belief that a mechanism for sending pictures cannot survive in the market if it does not generate memes. The internet demands the ability to express itself with images containing words. So, I am excited to bring you the first Twilio powered MMS meme generator.

How it works

All you need to do is send a properly formatted text message to (443)746-3637 -- that's (443)74-MEMES -- and you'll get back an MMS with your meme. Here are the supported memes in v1:

  • One does not simply ______
  • What if I told you ______
  • Brace yourselves ______
  • ______ but that's none of my business
  • ______ all the ______
  • ______ ain't nobody got time for that
  • ______ we're dealing with a badass over here
  • ______ aaaaand it's gone  (note: any number of a's will work on this one!)

 

Have fun with this!

Hope you have some fun with this. Share your funniest memes with me on Twitter @brentschooley! Future additions will allow you to send these memes to your friends by sending their phone number in the text. Also, stay tuned to the Twilio blog where in a few weeks I'll show you how this was built.

If you want to get started with Twilio MMS, my team has put together a great Getting Started post that covers Node, Python, C#, PHP, Java and Ruby. Show me what you build!

Global Illumination in Unity 5

Unity 5 is receiving a major make-over in terms of graphical fidelity and lighting in particular. Unity has been limited to baked lightmaps since Unity 3.0, but since then a lot of progress has been made in the global illumination field. Now is the time to provide some of that goodness out-of-the box in Unity. One of the new graphics features in Unity 5 is real-time in-game global illumination combined with new and vastly improved lighting workflows and these are the focus of this post. But first some background.

Doll model rendered with path tracing in Unity. Courtesy of Paul Tham, Unity Singapore.

What is this global illumination all about?

Global illumination (GI) is the simulation of physically based light transport. It is a means to simulate how light is transferred between surfaces in your 3D scene and it will greatly increase the realism of your game. Not only that, it is also a means to convey mood and with clever use can be used to improve the gameplay. GI algorithms take into account not only the light which comes directly from a light source (the direct illumination), but also subsequent cases in which this light is reflected by surfaces in the scene using different materials (indirect illumination). Traditionally, indirect illumination has been too expensive to compute within the real-time constraint of a game.

It is all down to this innocent looking equation:

It is really rather simple. The lighting visible from some point in your scene is the sum of light emitted from that surface point (Le) and the incident lighting from the hemisphere above the point reflected into the viewing direction towards the viewer. Li describes incoming light from some direction w’ on the hemisphere towards the point x. The reflectance term p then describes how light is reflected towards the viewer and is dependent on the incident angle w’ and the exitant angle w.

As the observant reader might have spotted L(x,w) is on both sides of the equation and inside an integral to boot. Now if that hadn’t been the case we would have had global illumination in Elite. Since the laws of physics are hard to alter, the research community set about to come up with a solution.

One of the most popular (and oldest) algorithms is path tracing, which basically attacks this algorithm head on, with some tricks added to spend the most time on areas known to be difficult. Path tracing is used a lot in CGI for film and television. Even though a massive amount of research has been poured into this, an image takes in the order of seconds to render (even with a beefy GPU).

Path tracing is typically used in screen-space, so the image needs to be re-rendered from scratch in every frame. This means that it supports fully dynamic scenes: lighting, materials, geometry can be freely animated. This is also a drawback as a new image has to be rendered when the camera is moved, and, since it takes on the order of seconds for the image to fully converge, it will not be appropriate for games.

A not fully converged image has disturbing noise in it and it is also not temporally coherent either so the image will flicker badly as it reaches convergence. Filtering can help limit this effect, but it cannot be completely removed. Below are a few shots taken at various levels of convergence:

Path traced images at various stages of convergence.

Lately a number of hybrid approaches have been developed, many running on the GPU, such as voxel cone tracing. Most of them require a desktop GPU with a fair amount of memory and are appropriate for high-end desktop systems only. In order to provide global illumination that will work well on a wide swath of supported platforms (including mobile) some compromise has to be made.

Enter Enlighten

Enlighten provides an excellent solution to this problem. It very elegantly scales from mobile through consoles up to high-end systems because it constrains the problem it is solving. It has also been battle-tested as it was shipped in AAA titles such as Battlefield 4, MoH Warfighter, and others.

The basic idea is that if some of the visibility is precomputed (i.e. the integral on the right in the rendering equation above) it is possible to modify the lighting in real-time even on mobile platforms.

Enlighten allows dynamically changing:

  • Light sources.
  • Environment lighting.
  • Material properties (diffuse reflectivity and surface emission).

The geometry that is part of the GI simulation has to be static, but dynamic geometry can be relit using light probes that are updated in real-time with the GI generated from the static geometry. In order to do this Enlighten precomputes the data needed for simulating GI at run-time. This data is consumed by a run-time module which is available for many platforms: OSX, Windows, Linux, iOS, Android, PS Vita, PS3, PS4, Windows Phone, Xbox360 and XboxOne. WebGL is in the works, but no definite timeline for this.

Enlighten outputs the following data:

  • Real-time lightmaps.
  • Real-time lightprobes.
  • Real-time cubemaps.

Enlighten is limited to computing GI for diffuse transport. This is the most important mode of transport as it conveys the overall illumination of the scene. Since diffuse transport is generally low-frequency the real-time lightmaps can be quite low-res and updateable in real-time. Support for specular/glossy transport is added by providing dynamically updated cubemaps. In Heckbert notation Enlighten accounts for the following light path subset: L(D)*(S|G)?E. This means that most GI effects are covered. The main missing effect will be specular bounces via diffuse surfaces – commonly known as caustics. To get this effect you will need to cheat.

Below is an example of two lighting setups rendered with Enlighten. These lighting setups were fully dynamic and switching between them is instantaneous.

Screenshot_04

 Viking Village – dawn

 In this next shot a brighter blue sky was used the sun is higher and more intense:

 Viking Village – sunny day

Environment lighting is grey and desaturated and the sun intensity is lower. Mainly ambient lighting:

Viking Village - overcast day

Lastly a sunset shot with warm reds for a sunset mood:

Viking Village – sunset

Using this technique enables games with very realistic looking time-of-day cycles.

Enlighten precompute

The compromise is that most of the geometry has to be static, effectively all the large scale geometry that will participate in the GI solution. During the precomputation phase Enlighten will automatically break up the scene into systems. It is also possible to affect how these systems are generated. The systems serve to make the precompute a massively parallel pipeline. The pipeline is relatively deep and solves per system tasks. Here is an example of how the Viking Village level was automatically broken up into systems:

systems

Editor visualization of the automatically generated Enlighten systems.

After the precompute has finished the relationship between the systems is known and this can be used in the run-time to partially alleviate the limitation of static geometry. At run-time the amount of indirect light transferred between systems can be controlled. This allows you to fade in bounce between systems and this can be used to achieve effects such as destruction or opening doors.

Enlighten run-time

The Enlighten run-time is efficient enough to run on higher end mobile devices. It runs asynchronously on a CPU thread (or more threads if the platform allows it). The most prominent issue for mobile platforms will be that the direct lighting and shadow maps for dynamic lights needs to be computed on the GPU. So on mobile platforms only a few dynamic lights will be feasible. However, the emissive properties of geometry can be adjusted in real-time almost for free. The emissive lighting computed by Enlighten encodes visibility too. This means that the emissive light is effectively shadow mapped for free, albeit at a low resolution.

Enlighten scales well onto desktop systems and next-gen consoles that could support games using exclusively dynamic lights since more GPU power is available for direct lighting and shadow mapping.

Here is an example of a mobile demo using Enlighten running on an ARM powered tablet:

What about baking

For some titles baking will be the appropriate choice, so this workflow will be supported and developed well into the future. In Unity 5 the lighting inputs: light sources, emissive materials and environment lighting can be tagged as using baked or real-time GI. Baked lighting inputs are baked into lightmaps in the same way as in previous versions of Unity and dynamic lights are handled by the Enlighten run-time. The baked and real-time GI merges seamlessly.

There are also new baking features already in Unity 5. One of those is that now the lightmaps are broken up into components. For each atlas there are five lightmaps containing direct lightingindirect lighting, direct directionality, indirect directionality and AO respectively. After a bake these will be composited into lightmaps used in the game. In the Editor there are controls that specify how these lightmaps are composited. You can tweak these settings to adjust the look of the final output. For example the indirect lighting can be boosted easily. This only requires a compositing job, which takes seconds whereas before a rebake would be needed to do this.

Lighting workflow

Enlighten doesn’t just provide in-game real-time GI. One of the most important improvements that Enlighten provides is a vastly improved lighting workflow for artists. It allows for faster iteration on lighting, which in turn yields better looking content. An iterative mode has been added, which removes the need for explicitly baking the scene. The scene will instead precompute and  bake in the background without any user intervention. The Editor will automatically track changes made to the scene and execute the tasks needed to fix up the lighting. In many cases when iterating on the lighting these tasks will be nearly instantaneous.

The following video shows a live session using the new lighting workflow:

What types of games will work with Enlighten?

As already discussed the limitation of real-time GI is that the large scale scene setup must be known in advance. We had to choose either to pursue a fully dynamic solution that would only work on high-end systems or a solution that covers many use-cases but also works on mobile hardware, thus reaching a wider part of the market. And we chose the latter for 5.0. Below is a list of types of games that may prove difficult with real-time GI:

  • Q: Can I do opening of doors and gates?
    A: As discussed above authoring systems and scripting the exchange of bounce between systems depending on the door or gate will solve this in some cases. (The scripting extensions needed for this are expected to arrive in 5.x.)
  • Q: Can I support destruction?
    A: Support for making objects transparent dynamically exists in Enlighten. This means that objects that may be destroyed in the game must be marked as such in advance. While this is not ideal it should support many use-cases. ( This feature should arrive in 5.x.)
  • Q: Can I download (stream) chunks of level additively?
    A: Yes, systems can be streamed in additively. The systems can be made so that they do not straddle your streaming chunks. This can be done manually or with scripting. (This feature should be available in 5.0.)
  • Q: Can I create a game world semi-procedurally with premade chunks (endless runner type)?
    A: Yes, bounce between consecutive chunks would be possible if the various combinations that premade chunks are arranged in are precomputed separately. This is similar to how you would bake lightmaps (without seams) for an endless runner. (The precompute API needed for this should be available in 5.x.)
  • Q: Can I create game world fully procedurally, Minecraft style?
    A: Short answer, no. However, we are doing multiple projects with Imagination Technologies using their PowerVR Ray Tracing technology for GI previews and hybrid rendering. This could potentially yield a solution to procedural or user generated scenes. The PowerVR Ray Tracing technology supports interactive GI for fully dynamic scenes. It is not yet fully real-time and the first few frames will have visible noise as the solution converges, but it is a very promising direction. It will certainly be able to light user generated scenes assuming some delay is acceptable. (There is no ETA for this as it is still an R&D project.)

What will be in Free what will be in Pro?

The feature split between Unity Free and Unity Pro has not yet been decided. We will announce this in a future blog post.

What is in 5.0

These are the main features shipping in Unity 5.0:

  • Enlighten run-time for in game real-time GI.
  • Iterative workflow (for both real-time GI and baking).
  • Reflection probes.

Beyond 5.0

As we are doing a lot of changes to the lighting workflows and lighting in general some features will slip 5.0 as they need more polish. These are some of the features that will surface during the Unity 5 cycle:

  • PowerVR path traced previews for real-time and baked lightmaps (details here).
  • API for controlling the real-time GI contribution between systems.
  • Enlighten real-time cubemaps.
  • Support for real-time GI transparency.
  • Cloud/cluster precompute/bake.

Some more material is available on this subject: slides for the Unite 2014 talk on GIvideo of the Unite 2014 talk on GI, Unite 2014 keynote (graphics part).

Let us know what you think!

The Graphics Team.

September 17

Update progress

The update operation is the responsible of downloading files and directories from the repository into your workspace. It can be a time consuming action if there’s a high number of files to be downloaded (or updated) or if the overall size is big. The equivalent to “update” in Plastic is “checkout” in SVN and Git jargon.

We added a new “update progress” so that when there’s a lot to be downloaded you get more precise feedback:

The progress is updated in 4Mb blocks which is the transfer unit we use. It can be a chunk of a big file or a group of small files summing up to 4Mb.

Availability

This feature is only available in version 5.4 (5.4.13.578 - Jun 26th 2014 and higher). 5.0 won’t get this one merged since the code is built on top of some other changes and improvements developed for 5.4 only.

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