Friday, February 28, 2014

Windy Talking Awesomeness


2014 started with a burst of awesomeness in Chicago



@andyattebery and @johnsprunger - one of my spies reported back and told me this talk was awesome :) Top work - badge of awesomeness winning talking. Thank you!



Some say...


Some say that he uses Linq2Spaghetti to eat his dinner and that he does the dishes afterwards in a-sync. All we know is that he's called @dsplaisted




What can we say?

Follow his PCL blogging and tweeting now...  http://blogs.msdn.com/b/dsplaisted/ and @dsplaisted


Awesome - badge #5





MvvmCross needed a hero...

Running the MvvmCross open source project is amazing.

And, there are a lot of amazing people who contribute really clever ideas and things - thank you all :)

But beyond that, there's also a lot of hard work that goes on - lots of "maintenance".

This is especially the case when things break in dependent technologies - e.g. when Apple, Microsoft, Google or Xamarin change an underlying tool or API.

One of the biggest changes that happened last year was the change in PCLs - with Microsoft opening the licensing on the technology and with Xamarin partnering to provide official support. This was a fabulous moment - especially after 18 months of struggling against the file-linking flow. But the way it turned out also meant that all the existing MvvmCross samples and N+1s were immediately out-of-date. For N+1, this meant there were 40 solutions - each with 3 or more projects - all of which needed loading, updating and testing.

This needed a hero...

And it found one:


Kerry - THANK YOU - beyond awesome and totally deserving of badge of awesomeness #2!




And here's a plug for your podcast too:

Thursday, February 27, 2014

What the F# is that?

Over Christmas, while I was skiing, stuffing my face, and relaxing, this series of tweets came in...





Now, I'm still not sure what this code all does - I'm still working my way up to Type Providers in my "C# to F#" book - but this sort of code looks amazeballs!


Will Smith - thank you - it is really inspiring to see devs creating the future of apps - thank you - a badge of awesomeness is **very thoroughly** deserved!


Awesome Mvvm - at home on Windows

We've seen quite an upturn in the number of "Windows" developers using MvvmCross recently - lots of people build across WindowsPhone, WindowsStore and WPF. This is fab - long live .Net on Windows :)


To help them along the way, there's also been quite a few awesome bloggers posting "tips and tricks" stories.


Among the highlights are:





These are all excellent - really good reads and really help people get booted into writing portable, testable, awesome code.


Thanks to you all for such awesome work - a badge of awesomeness for each of you!



Wednesday, February 26, 2014

Greg Shackles, awesome talks and awesome Text Auto-Formatting

Since we last caught up with Greg getting badge #2 back in October, @gshackles has been giving yet more talks - both face to face in http://shackl.es/1bf2HBB and virtually at the Dallas group (http://www.dfwmobile.net/building-multi-platform-native-apps-with-mvvm-and-c/#more-581)


Beyond that he's also been porting and releasing some very sexy looking custom controls - Auto-Formatting Text Inputs with MvvmCross and Value Converters http://shackl.es/17HIKRQ  #mvvmcross #Xamarin - and he's been cutting and shipping some really good code in his day job too.


It's a fab and easy call - Awesomeness Badge #3 to @gshackles - MvvmCross owes you heaps!



HttpClient Awesomeness


To many people `async` is old hat now...


But to many of us it's still quite new :)


But, **wow** is it awesome :)


Just like with Linq, to start with it doesn't feel that big a deal, but later - after you've been using it a bit - then you know that you are never going back :)


One of the first `async` components that people come across is `HttpClient`. Using this makes async network code really wonderfully writeable and readable :)


from https://github.com/Cheesebaron/RottenTomatoSample


Further, when you use `HttpClient` on iOS, it isn't just better looking code - it can also be better performing code - as it can make use of the native iOS HttpHandling instead of the Mono .Net one.


Last year, PaulBetts produced a github repo to assist with this http://log.paulbetts.org/fast-http-with-modernhttpclient/


To integrate that back into the PCL world of MvvmCross, a couple of regular MvvmCross contributors have posted lots of useful links:





This is awesome - and well deserving of badges #6 and #2 for Tomascz and Michael




AWESOMENESS!!!!

... although actually right now I seem to be missing a post... where is the first badge for @rid00z - will go hunt!

Portable Awesomeness - thanks Microsoft!

As some of you know, MvvmCross has been "quite keen on PCLs" for a couple of years now.


The path to PCL hasn't always been easy though - there have been lots of technical, tooling and legal hiccups along the way....


Last November something awesome happened...


Microsoft opened up their PCL licensing to allow PCLs to freely build and run on other platforms.


This really is awesome... so here's a badge of awesomeness to Microsoft - not sure who's going to accept it on Microsoft's behalf - but just wanted to say THANKS to the engineers, to the leaders and even to the lawyers for making such an awesome decision and for pushing it through to delivery :)

Awesome talking (and talking and talking and...)

A couple of long-term supporters of MvvmCross gave talks last November - Gitte @GitteTitter and Kevin @deapsquatter






As ever... Gitte (*4) and Kevin (*5)... 100% awesome




Thank you!

Awesome ActionBarSherlock!

Long term supporter @nitescua published this helpful setup guide for basic ActionBarSherlock use in MvvmCross last year


It's fab - and it's something that many .Net developers need to know!


Thanks - Badge of Awesomeness #1 is yours. Thank you!


Look East for Awesomeness!

In the last few months, we've seen a real surge in interest in MvvmCross from the East.


I'm afraid I haven't been able to follow all the discussions and developments that have happened - my language skills are limited to BabelFish tools - sorry! -  but I have seen a few awesome looking blog posts appearing, and I wanted to take this opportunity to say "Thanks" to some of the fab Chinese and Japanese (and beyond?) developers who've been helping to share the project beyond the English audience.


Than you guys - badges of awesomeness for each of you:



------\

------


------



Badges of awesomeness well earned - thanks to all!






I especially wanted to say THANKS to @amay077 - your posts and tweets have kept me especially entertained and babelfish especially busy - and I think it's you that's behind the lovely "Black&White" app - congratulations on an app success and thank you for "Advent" blogging about MvvmCross - and about RxUI and QuickCross too :)


User Group AwesomeSauce!

Several user groups have recently been experimenting with MvvmCross.

Two really exception groups have been:


  • the Nashville Xamarin meetup which help #mvxember 
  • the Dallas user group which is currently pushing through an awesome mobile bootcamp.


Both of these initiatives are really fabulous!


Thank you all - and by way of thanks here are two badges of awesomeness for some of your organisers:






Really awesome stuff - thanks - enjoy your badges - well earned!




James Montemagno James Montemagno James Montemagno

James Montemagno
James Montemagno
James Montemagno...


We knew Xamarin were smart ... and they proved and improved this when they hired James :)


And boy do they seem to be keeping you busy....


But they couldn't keep you busy over Christmas - and look what happened as a result:





MeetupManager is awesome!

Everyone should check it outhttps://github.com/jamesmontemagno/MeetupManager

Badge winning awesome. Badge Number 3



James, you're a genius - thanks!

Sunday, February 09, 2014

3.1.1 - pushed to binaries and to nuget

I've pushed 3.1.1 to nuget and to MvvmCross Binaries

The complete list of changes from 3.0.14 is below.

The main thing to be aware of is:

MvvmCross is now on profile 158 and so now does have official Xamarin support... but no longer supports WP7


The list for 3.1.2 is already forming on https://github.com/MvvmCross/MvvmCross/issues?milestone=1&page=1&state=open


Thanks to everyone who has contributed - you're all awesome and wonderful


Stuart




Changes in 3.1.1-beta1:

  • Switch to profile 158 for all portable assemblies
  • Switch to WP8 for all WindowsPhone projects - plus System.Windows.Interactivity dependency updated to 3.9.5
  • Fragging now uses the Google Xamarin.Android v4 support library rather than the Mono.Android one.
  • Html email fix for Android
  • Changes to nuget referencing (especially WP8 and SL5)
  • To avoid angst, the existing SQLite plugin is no longer marked "obsolete" - I still encourage everyone to switch to the new community plugin as it is the better plugin (and I encourage people to step forwards to take over the admin of this too!)
  • Improved helper method for subscribing to Interaction events
  • A draft IMvxComposeEmailTaskEx interface has been added to the mail plugin allowing attachments and multiple addresses on some platforms. More work is still needed here


Changes in 3.1.1-beta2:

  • softlion's Accessory fix for Content in Xamarin.iOS table cells
  • removal of the unused Content set property accessor in in Xamarin.Android list view items
  • inclusion of more efficient Exists methods in Windows Store
  • allowing non-void command methods in CommandCollectionBuilder
  • an attempt at fixing the KitKat spinner inflation problem thanks especially to Cheesebaron
  • an initial Community SQLite 158 port thanks to CreepyGnome and Tofutim

Changes in 3.1.1-beta3 and 3.1.1-beta4:

  • Android Email attachment thanks to @holgmans
  • MvxNativeValueConverter inner-wrapper access thanks to @damirarh
  • Tibet leak fixed for Xaml platforms
  • Tabs fragment provide hook to allow transitions thanks to @softlion
  • Droid Honeycomb list activation code included - thanks to several people
  • MvxCommand changed to use weak reference event manager
  • Droid Click and iOS TouchUpInside bindings changed to use CanExecuteChanged
  • Company name included in all assemblies (to stop Windows Store complaining!)
  • LayoutBorderWidth binding added in iOS - thanks to @stephanvs

Changes in 3.1.1-beta5:

  • ImagePicker graceful handling of corrupt Android image files
  • Fix for Tibet binding - functional form of ValueConverter calling now allows better handling for True, False and Null
  • Minor fixes for a couple of improved trace messages 
  • Refactor of MvxViewsContainer - Setup can now more easily override IMvxViewsContainer creation.
  • IoC - warn users if we detect circular resolution
  • IoC - provide PropertyInjector
  • Fix for CanExecuteChanged binding on Touch - weak references were too weak.

Changes in from beta5 to 3.1.1 release:

  • Default binding provided for UIProgressView
  • NativeValueConverter improved (virtual methods provided)
  • MvxColor debug output improved (argb not rgba)
  • MvxViewModelLoader now initialised more cleanly as a singleton
  • FolderExists improved in WindowsStore File plugin
  • Null target handling improved in Windows BindingEx
  • Null evaluation fixed for Tibet binding

Wednesday, February 05, 2014

The MvvM in Spain falls mainly on the awesome

Spain seems to have an abundance of really awesome developers - and we've been lucky to have seen several of them using MvvmCross during the last few years.

One recent contributor is Christian Ruiz -  ‏@_christian_ruiz

He's been active as both a talker and as a plugin publisher - and it's awesome:

- presenting webcasts


- publishing a fab navigation-by-control presenter plugin:



Christian - this is awesome - thanks! It's a privilege to award you to **2** badges of awesomeness for all this work. Thank you! Gracias!



Tuesday, February 04, 2014

Patrick's awesome WCF with Portable Class Library blog post

I'm not really a typical .Net dev.

There's quite a few bits of "every day" .Net that I've never touched.

One of these is WCF - it's just something that I've never really used... and as a result there's a gap in MvvmCross and my blogging and videoing - WCF's not something I've really hooked up with...

And into that gap has stepped http://gofarfetched.blogspot.com - Patrick McCurley




This is awesome - a really excellent well-written blog post! For example, look at some of the diagrams:




If you're into MvvmCross, I highly recommend it for a read - it shows some really nice architecture patterns - it's a well-written app as well as post!


Thank you gofarfetched - a total pleasure to award this badge of awesomeness!



Awesome MvvmCross Validation from Jerel R Hass

One of the things that's been on my personal todo list for a long time is to look at Validation...

I've got some vague ideas about "new bindings" that I might use to really take automated validation in a new direction.

Aren't vague ideas wonderful... ?

No!

Especially not when you've got code to ship and customer demanding things...

So while I'm still off dreaming about things that I might one way do, @agies1 has been off and produced a **real** and really useful working validation plugin that we can all use today!



This is awesome - check it out - https://github.com/Agies/MVVMCross.Plugins.Validation/ - it's 100% deserving of a Badge Of Awesomeness - 110% in fact (there goes my validation!) - thanks @agies1 - awesome!


Saturday, February 01, 2014

3.1.1-beta5 ... consider this a release candidate please :)

I've just pushed 3.1.1-beta5 to the binaries repository and to nuget

All the changes since 3.0.14 stable are detailed below.

The main things to flag since the last beta are:

  • changes to IoC to help users detect when circular dependencies go wrong
  • changes to IoC to make it easier to enable property injection
  • fixes to MvxCommand CanExecuteChanged binding - the weak event references were too weak on iOS


Note: Community-Sqlite is still on 3.1.1-beta4 - there are no changes to this plugin at this time.

I am **really** hoping that this is the final beta.... we definitely need to release a full 3.1.1 release soon!

After 3.1.1 is release, there are a few things lined up for 3.1.2 already :)








Changes in 3.1.1-beta1:


  • Switch to profile 158 for all portable assemblies
  • Switch to WP8 for all WindowsPhone projects - plus System.Windows.Interactivity dependency updated to 3.9.5
  • Fragging now uses the Google Xamarin.Android v4 support library rather than the Mono.Android one.
  • Html email fix for Android
  • Changes to nuget referencing (especially WP8 and SL5)
  • To avoid angst, the existing SQLite plugin is no longer marked "obsolete" - I still encourage everyone to switch to the new community plugin as it is the better plugin (and I encourage people to step forwards to take over the admin of this too!)
  • Improved helper method for subscribing to Interaction events
  • A draft IMvxComposeEmailTaskEx interface has been added to the mail plugin allowing attachments and multiple addresses on some platforms. More work is still needed here


Changes in 3.1.1-beta2:

  • softlion's Accessory fix for Content in Xamarin.iOS table cells
  • removal of the unused Content set property accessor in in Xamarin.Android list view items
  • inclusion of more efficient Exists methods in Windows Store
  • allowing non-void command methods in CommandCollectionBuilder
  • an attempt at fixing the KitKat spinner inflation problem thanks especially to Cheesebaron
  • an initial Community SQLite 158 port thanks to CreepyGnome and Tofutim

Changes in 3.1.1-beta3 and 3.1.1-beta4:

  • Android Email attachment thanks to @holgmans
  • MvxNativeValueConverter inner-wrapper access thanks to @damirarh
  • Tibet leak fixed for Xaml platforms
  • Tabs fragment provide hook to allow transitions thanks to @softlion
  • Droid Honeycomb list activation code included - thanks to several people
  • MvxCommand changed to use weak reference event manager
  • Droid Click and iOS TouchUpInside bindings changed to use CanExecuteChanged
  • Company name included in all assemblies (to stop Windows Store complaining!)
  • LayoutBorderWidth binding added in iOS - thanks to @stephanvs

Changes in 3.1.1-beta5:

  • ImagePicker graceful handling of corrupt Android image files
  • Fix for Tibet binding - functional form of ValueConverter calling now allows better handling for True, False and Null
  • Minor fixes for a couple of improved trace messages 
  • Refactor of MvxViewsContainer - Setup can now more easily override IMvxViewsContainer creation.
  • IoC - warn users if we detect circular resolution
  • IoC - provide PropertyInjector
  • Fix for CanExecuteChanged binding on Touch - weak references were too weak.

IoC PropertyInjection in the next MvvmCross 3.1 release

Just posted this in https://github.com/MvvmCross/MvvmCross/wiki/Service-Location-and-Inversion-of-Control#wiki-what-if-i-want-to-use-property-injection-as-an-ioc-mechanism

-----

From v3.1 of MvvmCross, Property Injection is supported in the default IoC container.

To enable this injection, you need to change your app Setup so that it overrides CreateIocOptions()

There are currently two ways you inject into properties:
  • inject only into marked interface properties - MvxInjectInterfaceProperties
  • inject into all interface properties - AllInterfaceProperties

In both cases, MvvmCross will perform the property injection as soon as construction is completed.
One further option is that the MvvmCross IMvxPropertyInjector can be used independently - you can choose to use this on your options if you want to.

MvxInjectInterfaceProperties

If you override options as:
  protected override IMvxIoCOptions CreateIocOptions()
  {
      return new MvxIocOptions() 
      {
                PropertyInjectorOptions = new MvxPropertyInjectorOptions.MvxInject
      }; 
  }
then this will enable injection into public writeable properties which are declared as interfaces and which have an MvxInject attribute - e.g. Foo below:
   public class MyViewModel : MvxViewModel
   {
       [MvxInject]
       public IFooService Foo { get; set; }
   }

AllInterfaceProperties

If you override options as:
  protected override IMvxIoCOptions CreateIocOptions()
  {
      return new MvxIocOptions() 
      {
                PropertyInjectorOptions = MvxPropertyInjectorOptions.All
      }; 
  }
then this will enable injection into public writeable properties which are declared as interfaces - e.g. Bar below:
   public class MyViewModel : MvxViewModel
   {
       public IBarService Bar { get; set; }
   }

Using IMvxPropertyInjector directly

You can inject into your own objects independently of the MvvmCross IoC Container.
To do this, you can use:
 var injector = new MvxPropertyInjector()
or
 var injector = Mvx.Resolve();
and then:
 var foo = new Foo();
 injector.Inject(foo, MvxPropertyInjectorOptions.MvxInject);
or:
 var bar = new Bar();
 injector.Inject(bar, MvxPropertyInjectorOptions.All);