Herding Code 158: Nat Friedman and Joseph Hill announce Xamarin 2.0

Nat Friedman and Joseph Hill from Xamarin join us for several big announcements: Xamarin Studio, Xamarin Component Store, iOS development in Visual Studio, and a new free Starter edition.

Download / Listen:

Herding Code 158: Nat Friedman and Joseph Hill announce Xamarin 2.0 [audio://herdingcode.com/wp-content/uploads/HerdingCode-0158-Xamarin-2.mp3]

Show Notes:

  • (00:45) Nat begins by catching us up on Xamarin’s first eighteen months.
    • Xamarin’s focus is on helping developers build mobile apps across multiple platforms.
    • They have 230,000 developers in their community, adding 700-800 per day, with over 12,000 paying customers.
    • They’ve had top iPad (Bastion), music apps (Rdio) and some large mission critical line of business apps.
    • What’s special about their platform is that you can target iOS, Android, and Windows Phone, share C# code across  all those platforms, and still deliver a native experience.
    • Nat say’s they’re the overnight success that took ten years to prepare, referencing the ten years they took to build Mono.
  • (03:20) Xamarin’s value proposition and customer base
    • Kevin asks which of their value propositions (.NET based development, cross-platform development) resonates more with users.
    • Nat says that many developers are initially attracted by C# development, although that’s not always the case (referencing an internal app at GitHub written by Objective-C developers who just liked sharing code between platforms).
    • Nat says there’s no real way to be a mobile developer now without having a cross-platform strategy – iOS might have looked like the only platform that mattered a few years ago, but now Android is more popular and Windows Phone is growing in popularity.
  • (04:47) Code reuse strategy
    • Kevin asks how the code reuse happens, since these are true native applications.
    • Nat talks about different cross-platform strategies and says that they don’t believe in write once, run anywhere.
    • With Xamarin, you separate the backend and UI code and write specific UI code for each platform, although you still write it in C#.
    • Rdio has over 150,000 lines of code which are shared between iOS, Android and Windows which covers networking, caching, authentication, etc.
  • (07:55) First big announcement: Joseph Hill announces support for building for iOS applications in Visual Studio.
    • Nat says that you can have one Visual Studio solution targeting iOS, Android and Windows Phone, and step through the code with the full debugging support you’re used to.
    • How does the Mac support work?
      • Scott K asks if this means that you have to run Visual Studio on a Mac. Nat says that’s not necessary, you just need to pair your Visual Studio instance with a Mac – it just needs to be on the network somewhere. That’s required both to be able to sign releases and to meet Apple’s license terms.
      • Jon asks if this would work with a Mac Mini, and Nat says that’s a popular option.
      • Scott K asks about a "Mac in the cloud" option; Nat says they’re not planning that.
      • Kevin asks if several developers could share one Mac. Nat says that Apple’s requirement is that each developer is supposed to have a license, and Joseph says that the Apple toolchain is build for single user rather than server support.
      • Jon ask if he can start playing with iOS support without having a Mac, Joseph explains that you can install and look around a bit, but you can’t build or deploy.
      • Kevin asks about the Interface Builder interaction.
      • Kevin asks if it was incredibly painful to set up this support for Visual Studio.
  • (16:14) Second big announcement: Nat announces the release of Xamarin Studio.
    • Xamarin Studio runs on OSX, Windows, and Linux.
    • It’s based on Mono Develop, but it’s a completely new user interface with a lot of great new features.
    • Visual Studio Express users can’t install extensions so Xamarin Studio allows them to do Xamarin development, also it’s what all Mac users will be using.
    • Kevin asks if it’s a fork of Mono Develop.
    • Kevin asks if Xamarin Studio is open source.
    • Jon asks how it was developed. Joseph says it’s still C# Mono code using GTK. Developers write Xamarin Studio in Xamarin Studio.
    • K. Scott asks if you can target non-mobile scenarios. Joseph says you can still target ASP.NET, console, class libraries, etc.
    • Kevin asks what happens to Mono Develop. Nat says it continues as an open source project, and they’ll contribute back to it as they develop Xamarin Studio.
  • (22:35) Xamarin as a Mono producer and consumer
    • Jon says it’s interesting watching the evolution of the Mono / Xamarin efforts as they’ve moved from supplying the Mono framework to being both building Mono and building a business on Mono.
    • Nat says it’s great working for a customer base rather than an opinionated crowd. "A really good signal that we’re doing good work is that people give us money for it."
    • Joseph talks about their model, explaining how their Xamarin business works well with their role as stewards of the Mono project.
  • (25:28) Third big announcement: Nat announces the Xamarin Component Store
    • Nat says they see developers solving the same problems over and over again, giving an example of a common requirement for a signature capture control.
    • The Xamarin Component Store is a library of pre-built components. Nat gives an example of an Azure Mobile Service component.
    • It works in both Visual Studio and Xamarin Studio.
    • Components include documentation, screenshots, and sample projects. Nat says it’s conceptually similar to NuGet, but gives you a lot better experience and makes it easier to get started.
    • There are a lot of component vendors who are contributing both free and paid components, and Xamarin has also contributed several based on their experience in supporting Xamarin developers.
    • Jon asks how they handle cross platform, native user interface with components.
    • Kevin asks how people can submit components to the store.
    • Nat says he thinks this will really be a compelling feature of their platform, since developers won’t have to build everything from scratch.
    • Kevin asks they handle purchases and vender payments.
    • Kevin asks if the components are curated.
    • Jon asks about component support for Android and Windows Phone.
    • Kevin asks if it’s possible to create Xamarin components using native Objective-C components. Nat says they support both Objective-C and Java code reuse.
    • Jon says the design on the Xamarin Component store website looks great and asks about Xamarin’s approach to design. Nat says that they’re selling a good design experience and design is an important part of that.
    • Kevin says he like hover screenshots, Nat says he really likes the hover menu control.
  • (39:35) Fourth big announcement: Nat announces the free Xamarin Studio Starter Edition
    • You can use Starter Edition to get started, build, and deploy applications.
    • Starter Edition is limited to 32KB of IL code.
    • Jon loves the idea of limiting the free edition based on compiled code size.
    • Kevin asks what kind of app will fit in 32KB. Nat says that using a lot of DLL’s will put you over the limit quickly, but images aren’t content. About 20% of the apps in the store would fit under the limit.
    • Joseph says they didn’t want to limit based on features. Jon talks about the frustration people see in Visual Studio version based feature limitations. Nat says pricing is hard; ultimately they want to get a lot of people using Xamarin and they think this is a good way to do that.
  • (44:53) Jon asks about support for languages other than C#.
    • Nat says they see people using F# and Java (using IKVM).
    • Joseph says that C# is their main focus – all the documentation is in C# – but they’re happy to see people using other languages.
    • Kevin asks for JavaScript support. Nat says they think it’s hard to build large scale apps in JavaScript.
  • (47:35) Nat talks about their upcoming developer conference.
    • The first two days are focused completely on training.
    • The second two days feature some great talks by community leaders, user interface designers, and more. The entire team will be on hand to answer questions.

Show Links:

Herding Code 157: Amir Rajan on dynamic web development with Oak and Gemini

On this episode of Herding Code, the guys talk to Amir Rajan about his Oak and Gemini projects, which bring Rails-inspired dynamic programming to ASP.NET MVC.

Download / Listen:

Herding Code 157 – Amir Rajan on dynamic web development with Oak and Gemini [audio://herdingcode.com/wp-content/uploads/HerdingCode-0157-Oak.mp3]

Show Notes:

  • Overview – Developing with Oak
    • Oak is an approach to building single page applications that are heavy on JavaScript that takes a lot of inspiration from the Ruby community’s development approach.
    • Jon asks Amir to explain his development workflow, including SpecWatcher, NSpec, and Growl.
    • Jon asks about the File / New Project experience. Amir describes how that’s not even required – Oak works with WarmuP to build out a new project.
    • The next step is using Rake – Amir explains how Rake works. Running Rake builds the application and deploys, then sets up IIS against that instance.
  • Dynamic programming and Gemini
    • Oak leverages the dynamic keyword. Amir explains how it just augments what’s already there in ASP.NET MVC.
    • Amir explains how Oak works with Gemini, separate library he’s built to enable building dynamic objects. It allows you to attach properties and methods through mixins. He gives an example of using Gemini to extend a dynamic object with validation methods.
    • Amir describes how Oak leverages Gemini to take advantage of these decorated dynamic model objects throughout the different layers.
    • Scott K asks where the composition happens – is this a pipeline process?
    • Jon says it sounds like this is a more fleshed out version of some dynamic features that were started in ASP.NET MVC, like dynamic views and ViewBag. He explains how Gemini goes beyond Expando, because it also includes support for method missing.
    • Jon says Gemini reminds him of the Clay dynamic objects used in Orchard.
  • Data access and Cambium
    • Jon asks Amir about Cambium, the data layer. Amir says he customized Rob Conery’s Massive library to work with his Gemini objects, and points out that the resulting library uses remarkably little code.
    • Scott K asks Amir if he’s looked at Breeze. Amir says so far he’s just worked with standard ASP.NET MVC controllers, but he’s interested in looking at Breeze, Dapper, and NoSQL ORMs.
  • But why?
    • Kevin asks the silly question: why bother bringing Rails idioms to ASP.NET MVC – why not work in Rails?
    • Jon says the thing he sees Amir’s done is eliminate the shift between development and runtime modes in Visual Studio based development.
    • Jon asks about change tracking support in Cambium.
  • More about data – migrations
    • Amir explains migrations and schema generation in Oak and Cambium.
    • Amir says that SQL based migrations are important in many development environments.
  • Single page and Ajax
    • Jon asks Amir about the Single Page Application story in Oak. Amir explains some of the points of friction that exist in ASP.NET SPAs and explains how Oak is able to round-trip dynamic types.
    • Scott K. asks why it’s so hard to migrate schemas in .NET. Amir says that it’s due to our fixation on trying to define our models using code first in .NET types rather than in the database.
    • Jon asks how the first deployment and upgrade scenarios work in Oak.
    • Jon asks how Ajax interactions work. Amir explains how this works using the TaskRabbit sample to explain.
    • Amir explains how he’s relying on client-side rendering and templating more and more. He asks if we’re seeing that movement as well, and Scott K. agrees with him. They agree that focusing on serving JSON and rendering on the client solves a lot of problems.
    • Jon asks Amir if he’s using one controller to serve HTML and JSON, or if they’re split out. Amir says he’s got one controller to serve the HTML, then does everything else via a separate controller that serves JSON. He says he’s noticed that the ORMs have very little need for state with this approach.
    • Jon says he’s seeing the shift from a little Ajax interaction in mostly HTML focused servers to servers that are almost completely focused on serving JSON.
  • Some misc. questions
    • Jon asks about Canopy. Amir describes how Canopy is a stabilization layer on top of Selinium, and talks about why Canopy is built on top of F#.
    • Scott K. asks if Amir has looked at OWIN yet.
    • Jon asks about Async support in Oak.
    • Twitter question from Bobby Johnson: What do you do to limit the viral nature of dynamic in your code? Amir and Jon talk about how a lot of the assumed safety of static code is an illusion when you think about all the moving parts you’ve got no control over.
    • K. Scott and Scott K. think this is a fascinating project and like the code.
    • Scott K. and Jon joke about variants. Amir mentions that the dynamic nature of Gemini means that all the dynamic properties and methods are case insensitive.
  • Wrap up and getting started with Oak
    • Amir talks about how to get started with Oak.
    • Jon says the sample apps, documentation and screencasts are really nice.
    • Jon asks what’s next. Amir lists a better SPA story, better file uploads, adding dynamic to ServiceStack and Nancy, and growing the number of Gemini modules.
    • Kevin asks about the performance impact of this dynamic focus. Amir that he’s got an included test, and he’s found that dynamic is actually faster in a lot of cases which need to use reflection, such as ORMs, JSON serialization, and model binding.
    • Amir calls out the NSpec project and references their interview on Hanselminutes.

Show Links: