First; thank you to everyone that showed up to my talk on Functional Reactive Programming at AADND last week. It was great to host the Ann Arbor .NET Developers in The Forge by Pillar….the food was pretty good too.

The Forge

Slides

If only as a way to catalog the evolution of my attempt at trying to explain and provide a “real world” reason for using FRP; here my the slides from my second time giving the talk.

http://www.slideshare.net/detroitpro/real-world-functional-reactive-programming

Based on feedback and continued learning about FRP and it’s usages; I’m in a constant cycle of present-update-present. It’s going to be a long time until we have a presentation that captures just enough FRP without being BORING.

Next Up

Saturday, March 21st, at GRDevDay

Xamarin Forms 1.4 is a minor point release and that means there are API changes. One of the new API changes is around the ScrollView.

ScrollView now has a ScrollX and ScrollY property;

public double ScrollX { get; }
public double ScrollY { get; }

This means we can now get the scroll offset. With the scroll offset we can adjust a background image…we can create a parallax effect!

Parallex Scrolling

Parallax scrolling is a special scrolling technique in computer graphics, wherein background images move by the camera slower than foreground images, creating an illusion of depth in a 2D video game and adding to the immersion

– Wikipedia

Scrolling Example

Example App

It’s actually pretty easy, now that we have access to the offsets, to implement parallax. I put togehter a little demo app today; Parallax Xamarin Forms Demo

However; the core of the scrolling can be found in this gist:

Source

Xamarin.Forms Forums

There are plenty of examples of create List Detail style application workflow using either UITableViewController or without using a Storyboard. Of course; I wanted to use a Storyboard and to use a UITableView

Working with Storyboards

Getting started; I added a UINavigationController which comes with a “Root View Controller”. On the root view controller I added my UITableView

Getting started

Prototype Cells

The default UITableView comes with 3 prototype cells.

  • The UITableView can display different data in different formats.
  • You can use these prototype cells to design how they display.

If all your data is of the same type and displayed the same way you can change the number of prototype cells down to 1.

Cell Identifier

ViewCells don’t have a Cell Identifier by default. You will want to add one so you can decided which Prototype Cell will be returned by your custom UITableViewSource

Getting started

The arrow below shows where you decide which type of cell to dequeue. The string value passed into DequeueReusableCell must be the Cell Identifier of one of your Prototype Cells

dequeue)

All of my troubles started when trying to implment a simple list to details navigation. Without dequeuing the correct reusuable cell, by ensuring the name Cell Identifier; my navigation would never happen.

As long as you wire-up the Cell Identifier and Prototype Cell configuring navigation using a segue is pretty straight forward.

Simply, ctrl+drag from one of your Cell Prototypes; you likley only have one, to the details view controller. Now; when someone clicks on your UITableViewCell the segue will fire and navigation will happen from the list to the details.

Passing Data

Unlike normal navigation there is not an event to connect to when the UITableViewCell (Prototype Cell) is clicked. Instead; you override the PrepareForSegue method from the view controller that holds your UITableView.

public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
{
    if (segue.Identifier == "TaskSegue") { // set in Storyboard
        var navctlr = segue.DestinationViewController as TaskDetailViewController;
        if (navctlr != null) {
            var source = TableView.Source as RootTableSource;
            var rowPath = TableView.IndexPathForSelectedRow;
            var item = source.GetItem(rowPath.Row);
            navctlr.SetTask (this, item); // to be defined on the TaskDetailViewController
        }
    }
}

Conclusion

There are many different little gotchas that can getya when you are setting up simple list details view navigation. In this post I highlighted the Cell Identifier of the Prototype Cell because that is the one that got me.

You can also find a good overview of this navigation pattern in the Xamarin developer center.

Creating Tables in a Storyboard

I’ll be presenting – or more so – practicing my talk Real World Functional Reactive Programming today (3/4/2015) at The Forge by Pillar A2.

If you are in the area please come on over. It’s a casual environment located in the Northern Brewery 1327 Jones Drive A2.

For the Pillarites, and THE WORLD, there is also a GoToMeeting you can come heckle me at:

Join GotoMeeting

Access Code: 287-662-757

Here are the slides I’ll be using today; they are going to change….THE WORLD.

Google Docs

I just heard that food will be provided by the awesome Pillar Chef Traci!!!!

Yesterday we did a quick introduction of iOS projects, their structure, ViewControllers and Storyboards.

The project we’ve been working on for the last 10 months, since the day Xamarin Forms was released, has been exclusivity XF. My experience with iOS proper comes from creating custom renderers and watching training videos.

We created a sample project, added UITableView and some data, a button and did some simple navigation. At 20 minutes in we exhausted my iOS knowledge!

When preparing for the lunch and learn I realized that I didn’t know how to do MVVM with the native UIs.

I think it was a good introduction but expect that Xamarin Forms is the way most of the Xamarin teams will build their apps for the contest.

The company I work for, Pillar Technology, announced an internal mobile app development contest last week. The contest will run for 4.5 months and award fabulous prizes but for me most the exciting part is being able to evangelize using the Xamarin platform.

One of the first things I did was setup is a series of lunch and learns. Somehow; I thought it would be a good idea to drive a series of 10 DAILY lunch and learns over the next 2 weeks. Let me repeat that: DAILY, 1 hour lunch and learns for the next 2 weeks!

These lunch and learns will cover the Xamarin ecosystem, Mobile App Development best practices and Mobile Craftsmanship.

Today was the first lunch and learn; we had 10 people on GoToMeeting all ordering t-shirts by walking through the Xamarin Store App!

I’m ‘super excited’ to see more co-workers in C# shirts representing #TeamXamarin over the next few months of the contest.

From the initial feedback it looks like we will have applications developed for iOS, Android, Xamarin.Forms (xplat) and SpriteKit.

I look forward to helping each team build their app, create examples, and blog posts for them long the way.

TeamXamarin

1.3 is the 3rd large release of Xamarin Forms and like most software, the story for developers begins with the 3rd release. 1.3 brings a massive set of changes, features and fixes. One feature is not getting the attention it deserves: Context Actions! You can now edit lists! OMG!

funny pic

Display

As expected; Context Actions are rendered using the native UI on each platform.

  • iOS – Left Swipe to view context actions.
  • Android and Windows Phone – Long Press to view context actions.

alt text

Context Actions

ListView has ViewCells, ViewCells have ContextActions and ContextActions contain MenuItem

and the 3 important properties on MenuItem are:

  • Text – The string displayed
  • Clicked or Command – The event that happens when clicked
  • IsDestructive – (optional) If true items is rendered differently (eg: red background on iOS)

There are a few more properties on MenuItem

alt text

Important Notes

  • You can only have one MenuItem with IsDestructive as true
  • MenuItem is a text or icon based item. It’s not very configurable but I don’t think that will be much of a problem.

Sample

github sample

I put a sample project on github, it is the same one that I used to make these gists below. You can find it here:

https://github.com/detroitpro/XamarinFormsContextActionsSample

Code MenuItem

MenuItems can be created in code or XAML; here is an example in code. This code is inside a ViewCell

XAML Sample

Here is an example in XAML. Personally; I like the XAML style of development better.

Review

Context Actions bring the Xamarin Forms rendered list views on pair with the Xamarin Native list views.

A few weeks ago I was able to speak at the Dog Food Conf about the last few months we’ve spent developing an iOS app using Xamarin.Forms.

 

Lessons Learned: 4 Months of Xamarin.Forms ** from **Eric Polerecky

 

It was a small room but made for great conversation. It was nice to use the slides as a starting point and basically going “off script” for the whole hour. Thanks to everyone that attended.

 

Here are some of the key points that I tried to make during my talk:

  • You can make good looking Xamarin.Forms apps; it’s hard but it can be done.
  • Custom Renderers rock.
  • Coding .NET on a Mac is getting nicer and nicer with Xamarin Studio and Mono Updates.
  • Azure is super amazing!
  • Xamarin.Forms ALL THE THINGS!

 

Checkout this out. http://osrc.dfm.io/detroitpro

Except that it is full of lies! 51% JavaScript to 49% C#

Here is my SQL use case:

Customer has invested in P2P transactional replication in SQL Server 2008R. Their database has many unique and composite key constraints that is likely to cause merge conflicts.

Question:

  • Is there a method to automagicly resolve conflicts (ie: merge replication business logic resolvers) when using P2P transactional replication
    • Is Merge publishing a supported way to handle databases with a high potential for conflicts
      • Is Merge publishing deprecated</ul>