Thứ Ba, 29 tháng 8, 2017

Auto news on Youtube Aug 29 2017

Hey! Good morning everybody. Welcome to Xamarin University Presents: a Desktop Developer's Guide to Mobile

with Visual Studio tools for Xamarin. My goal this morning is to encourage each and every one of you

to take your desktop skills and turn them into mobile skills with Xamarin

but before we get to that, I'd like to introduce myself

my name is Mark Smith and I'm a Program Manager for Microsoft my job

is to direct the technical and business areas of Xamarin University

I'm also a longtime developer primarily in the desktop world, going all the way back to 16-bit Windows

I made the jump to mobile about five years ago when I was asked to simulate a WPF medical

application on the iPad to make it easier for sales to carry around and show people

I bid it pretty low thinking my strong C and C++ background would help me out with learning Objective-C

after a week of research I was sweating it thinking I was about to get paid less than minimum wage for this job

Luckily I stumbled across Xamarin which was then called MonoTouch and I was astonished that I could build the app in C#

I ended up reusing about 75% of the code from the existing app some of it being tweaked and some of it just carried straight over

its saved me months of time and we came in under cost. So I'm here today to show you how you can

make the same transition and either bring some of your apps to new platforms

or just start working on a brand new mobile app with Xamarin

I mentioned that I run Xamarin University and you might be wondering exactly what that is

Xamarin University's mission in life is to teach developers how to build amazing native mobile apps

with C# and we've got tons of resources to engage in that mission

When you sign up for Xamarin University, you get live, interactive mobile development training led by Xamarin experts, offered in all

timezones. You get to interact with talented developers who know the platform better than anyone else.

We have 1:1 sessions to get your questions answered fast. This let you schedule time with Xamarin experts to review your app, get

advice, remove technical roadblocks, and more. This is a huge benefit for our subscribers because you get to interact with our experts

directly, in a focused, open session to move your project forward.

Live classes are awesome, but sometimes you need the training now and can't wait for a scheduled class. Self-guided Learning enables

you to get essential Xamarin training, earning course credits towards certification - at your own pace. These classes include the same

content as live versions and provide on-demand training right when you need it. The best part of our Self-Guided learning

is it's all free – just register for an account and you can go through all of our on-demand content and try a few of the live classes.

Speaking of training, we've got over 80 live and on-demand courses, broken into eight learning tracks

with constantly updated classes, ranging from beginner to expert.

This also includes access to exclusive on-demand videos from industry leaders,

covering the latest mobile topics and challenges, from new platform APIs

to testing and deploying on physical devices.

We have flexible options for subscriptions, including a monthly option starting at $83.25/month. That's less than $3 a day to get

unlimited access to our full course catalog, expert mobile instruction and advice, hands-on help, and more.

Finally, you can work through our courses to become a Xamarin Certified Developer. Our certification program identifies top

mobile developers who complete the certification track coursework and demonstrate practical Xamarin mobile development

expertise. I'm a big fan of Xamarin University and think it has some of the best curriculum and trainers in the industry. If you want to really

learn mobile development, this is the place to do it. It's easy to register or signup – just go to university.xamarin.com to check it out.

We are going to start with a brief introduction to the tools we use for mobile development with C#.

Next we will look at a couple of approaches you can take when building your application user-interface.

Which approach you choose will often depend on what you are familiar with, and the goals you have for the application experience. it out.Œ

Then, we can talk about the transition path – the similarities and differences between a desktop app and a mobile app.

Finally, I want to give you some specific things to think about as you jump onto the mobile bandwagon.

Things I learned which were very important as I started building mobile apps.

We'll end our session with some Q&A, but you can ask questions at any time during this webinar through the chat window. We've got

experts available both during and after the session to make sure you get all your questions answered

Let's start by laying out our ultimate goal.

What we really want is the ability to write applications that can take full advantage of the power, features and performance of each

platform, but write the code in a common language. Or even better, share the code across all of these platforms to reduce

development time and help keep application features and fixes synchronized across all of our supported devices.

And this is where Xamarin comes in - Xamarin is an app-development platform that let's you build applications

applications for iOS, Android and Windows, and share the code across all platforms.

This includes Android phones, iPhones and Windows Mobile, but it also includes other form-factors like

Windows desktop, macOS, wearables, IoT, Xbox and even Hololens.

We can share the code we write across all of these platforms and devices with .NET and the Visual Studio Tools for Xamarin.

With Xamarin, you write your applications in C# using Visual Studio on either Windows or macOS. And its more than just the C# language

you also gain access to the fantastic .NET libraries which provide standard APIs and productivity features such as LINQ and the and

the Task Parallel Framework.

Even better, this also includes many popular 3rd party libraries which are available through NuGet

such as Json.NET and Entity Framework Core. So you can use the same IDE, same language,

and many of the same libraries that you do today.

So if you get anything out of this talk, this is the point I want you to remember. If you are a .NET developer – using Visual Studio to build

applications today you can use the same skills to build native mobile applications

So let's talk about the first steps when creating a new mobile application. The first thing you have to decide

is whether you want to use the native UI or Xamarin.Forms.

The first approach is to use the native UI controls directly.

this approach allows you to easily customize the user experience on a per app basis

and take advantage of all the unique features that the platform offers

Here you write the behavior and business logic of the app in C#, sharing it across all your supported platforms.

And then you build a unique UI definition for each platform using the native controls available on that platform.

This can be done in code, but is most often done using a design tool which works with a dedicated language for the platform.

For example, on

iOS, we use storyboards to craft our UI and on Android, we use XML files with a design surface

And on Windows we will often use XAML with the Blend tool or a design surface for Windows Forms.

This allows all of our core logic to be shared, but the UI definition and code that connects to

it is unique and must be created differently for each platform.

The strength of this approach is that it allows us to craft a unique UI experience for each platform. The downside

is we have to replicate the user interface and experience three times

and if our goal is to make the app look exactly the same on each platform, that's more work for us to do and maintain as the app evolves.

The second approach is to use Xamarin.Forms

Xamarin.Forms abstracts the UI definition to a common set of shared elements

but have it still utilize native, platform-specific controls when it runs. This means we can describe our UI once, either in C#

or XAML, and reuse that definition across all our supported platforms.

That saves us both maintenance and development time, however it also makes it

harder for us to customize the UI on a per-platform basis.

Which approach you decide to use often depends on what you want to build, and how you see it evolving in the future.

Microsoft developers often choose Xamarin.Forms initially because, as you'll see,

the APIs and way you construct the application are very familiar.

However, if you want to have a different user experience on Android than you do on iOS, Xamarin.Forms can be a bit limited and you'll

end up doing a lot more work to get what you want than if you'd just used the native UI approach to begin with.

As we compare these two approaches to what typical Microsoft desktop developers do today,

it's helpful to touch on the history of desktop programming using Microsoft technology.

Lets start back in the 90's when we pretty much worked with VB or C/C++ and Win32 APIs

MFC and VB were all the rage back then and a lot of enterprise apps were built with both of these technologies

than .NET was introduced and we got Windows Forms which is a thin managed wrapper over the Win32

API but included the easy drag and drop approach popularized by VB.

in 2006 .NET 3.0 was released

which included the next generation framework WPF and it's close cousin Silverlight. This was such a radical

departure from Windows Forms that it took years for it to mature and for developers to really learn how to use this framework well.

Enterprises were slow to adopt this technology but it's become one of the most popular ways to build desktop apps today.

2011 was the reinvention of the platform with the introduction of WinRT, a brand new set of

APIs available to .NET to interact with operating system services

Things shifted around here with XAML becoming a system service, and opening up the system to Javascript and C++ developers.

Most importantly, this ushered in a new style of desktop application – sandboxed and full screen

using a new design language to formalize how it should look and feel.

Fast forward to today – the latest desktop framework is the Universal Windows Platform, or UWP.

This is actually not just for desktops for all kinds of devices which run Windows 10.

It is build on top of the WinRT APIs introduced in 2011, but with additional support so that desktop apps

built with UWP act more like we expect them to.

Since I'm only supposed to talk for an hour, I'm going to limit our comparison to the most modern of the desktop frameworks.

This actually makes my job a bit easier because Xamarin.Forms took a lot of design hints from WPF

which makes it similar to most of the Microsoft frameworks introduced after 2006.

However, most of what we talk about applies to Windows Forms as well

it's just that the APIs aren't quite as close and so there will be more effort involved in

reusing code you have build specifically for a desktop Windows Forms application when moving to a mobile application.

So we have a reference of comparison, let's create a brand new Xamarin project and look at what we get.

so let's switch over to Visual Studio

I'm going to create a new project - I can do it right here on the Start Screen.

I can search for project templates and the one I want is Cross Platform Apps (Xamarin)

You can also use File > New Project and then get the same sort of list.

This will just jump me right to where I want in the New Project dialog, which is Visual C# > Cross Platform

And I'm going to pick Cross Platform App (Xamarin). We also have a library template here

as well as a UI Test template to create behavioral-driven UI tests for your application

I'm going to call it App1 and I'm going to put it on the desktop and just click OK. That's going to give me a dialog here where I can choose

the type of app I want. I'm on Visual Studio for Windows. On Visual Studio for Mac,

the experience is going to look a little different. You'll have the same sort of options

but the dialogs you are driven through are going to look different and they're little more visual

I'm going to create a blank app, there's also a Master/Detail app that gets a bit more boilerplate code included as part of the project.

I personally don't like that, I prefer to just start out from scratch with the bare minimum that I can then build up.

Then I can pick my UI technology, Xamarin.Forms or native. This is going to decide the type of UI I want to build.

Either I'm going to construct the UI completely through the native UI toolchain

or I'm going to use a shared UI with Xamarin.Forms. Let's pick native so we can see what it looks like.

Then I'm going to pick my code-sharing strategy. I have two options: Shared Project and Portable Class Library.

Shared Project is source-code level sharing where all the files included in the

shared project are actually compiled into each of your applications.

Portable Class Libraries are a binary sharing technology where it actually generates a DLL.

that I add a reference to, and that DLL gets included as part of the runtime process

We're about to have a 3rd option which is .NET Standard. So, .NET Standard was just released and is now available for Visual Studio.

But it's not completely supported yet by Xamarin.Forms and it's also not listed here in the dialog. But you can create .NET Standard

assemblies - so you can create a .NET Standard library and then consume that

from all of your different applications as well. It's also not completely supported

right now by UWP and so there are some restrictions

there in terms of the types of things that can consume that .NET Standard library. All of that will be fixed very shortly and you'll be able

to simply use that. It will be the replacement for Portable Class Libraries. In fact if you look at the latest versions of Visual Studio

they are listing Portable Class Libraries as "Legacy" libraries, and that's because .NET Standard

is intended to replace that. I'm going to pick Portable Class Library. I tend to use this one

I don't want to get into a debate on whether to use shared projects or

portable class libraries because everybody has a different opinion about that

Often what I will do when I am building a Xamarin.Forms app is I'll use a Shared Project for all of my UI stuff

and then a portable class libraries for my actual business logic and things like that

and so I'll often actually combine the two approaches within a project and you can totally

do that - any combination is possible and you can do whatever you like.

You can see here that I'm going to create three different projects, one of which is a UWP app

and I need to choose the minimum version level that I want to use there

I just took the defaults. So let's quickly look at the different project types that we get here. The first thing I have in my solution is

a portable library project - this is because I picked the PCL option. This is going to generate a DLL. This particular one supports

a couple of different targets - it's .NET 4.5, ASP.NET Core 1,

Windows 8, Windows Phone 8, Windows Phone Silverlight, Android, iOS, iOS Classic and Xamarin.Mac.

This is what is done by default, you can change that if you'd like to pick different targets. Generally speaking,

PCLs have a fairly restrictive set of different profiles and so even if you start and unselecting things it won't

necessarily expand the API set. That's what .NET Standard is intended to address

But this is where I'm going to put all of my shared code. Things like my business logic, and my actual

logic that's going to run the app, behavioral type logic, perhaps my data models, and my web service code

So things things that are going to access web services. Maybe even my database code.

All of that can be thrown here into this portable class library or the shared project because it can all be shared

with my actual platform specific code. The platform-specific code is located in these other three projects.

We have one for Android, that has Android-specific stuff. We have one for iOS, that has iOS-specific stuff

and then we have one for UWP that has UWP specific stuff.

So let's start with Android. The first thing to notice is that

every one of these projects includes the portable class library as a reference

and so all the stuff we place in the PCL here is actually going to be available to us each one of these platform specific projects

The reason we have different platform specific projects is we're going to generate a different binary for each of those platforms

What runs on Android doesn't run on iOS and so we need a unique .EXE or .DLL or whatever the

project type needs to be to run on that platform. That's what these projects are intended to build

and create for you. In fact because we picked native UI, you'll actually find

that the structures that are contained within these projects are very much

influenced by the actual platform target itself. So in the case of Android here, I have a class that is a Main Activity.

It derives from a class Activity which is an Android type - in fact it's a Java class

and Xamarin is what is allowing that derivation to happen. Then we've got usage of APIs in our OnCreate override.

OnCreate is called when the application is launched and you can see here

we're getting the content view from our resources here

In Resources we have a folder called "Layout" and has an XML file in here called Main.axml that corresponds to this

That corresponds to Main layout here - that's going to construct a UI for us that has a button in it and a label.

You can see we are going to be retrieving that button here by it's ID and then we are going to wire up a Click handler to that button.

So that when we run this, we get a Button and as I click it, it's going to actually increment

the text of the button itself. I'm sorry, there's just a Button here - I think we're just changing the text of the button.

I also have an iOS project here, and in iOS I've got different files. I have a Main entry point that is a static void Main, so it's a little closer

to what you might be used to in the desktop world. This is calling UIApplication.Main which is an iOS API that launches our app.

It points to an app delegate. That's a different class here that you can see - AppDelegate; this derives from an iOS class

called UIApplicationDelegate. This is sort of our application-level kind of construct - it's what gets called initially, it's what creates

the initial UI. It has the actual window that we're interacting with when we draw things on the device surface and it's got some

different notifications here as the application goes through different states. So when we enter the background, or when we're activated

or terminated we get some overrides there that can get called to tell us what's happening with our app.

Now, in iOS everything typically gets created through a Storyboard and you can see here we have a Main.storyboard

and when you have a Mac host that is actually connected to your PC

then you can use a built-in designer in Visual Studio to drag and drop elements and about storyboard then you can use a built-in designer in Visual Studio to drag and drop elements into that storyboard

But I can construct my UI using the same sorts of services that I would use if I were building it with say - XCode.

Then of course, I have something called a View Controller. In iOS, everything that gets created is always done in the Model-View-

Controller pattern. Models are data objects, the controller is what actually drives the behavior of the app, and then the view

is what is defined in the Storyboard. So this View Controller corresponds to a page in my application and you can see its got

some overrides here for when we load, and if we've got some memory issues so we can do things

here in our DidReceiveMemoryWarning to maybe release some resources because we are getting low on memory.

And then this right here you can see is the same equivalent logic that we had in our Android application where we've got the button

that's defined in our UI. We are wiring up to an event called "TouchUpInside" with a delegate

handler that will increment some number of clicks and then set the title back on the button.

But the code doesn't look the same as the Android implementation because

the events that get raised by iOS and the methods that change things like the title of the button are going to be different

because we're using the native UI here, we have to use the native methods as well. But, the upside is, I can construct any

kind of UI that iOS allows here, and I can use every single control that is available to me.

even third party controls

that might be written in Objective-C or Swift, I could potentially incorporate into this application. Same for our Android app

I could use third-party things that were developed in Java and then utilize them from within my Xamarin app.

The world is open to me: I have every single API available, every single widget available.

Alright, so that's the advantage of this model. In the same way, I have a UWP app. Now, UWP is a little bit interesting because

UWP doesn't actually use Xamarin. In this case, it's just the regular UWP

application type that you would create if I

did a File > New > UWP app. So there's no Xamarin involved in this, in fact if you look at the references here,

you won't find any reference to any sort of Xamarin stuff. The only reference that we do have is to our portable class library

so again, we're going to share that behavior, share that business logic, share the database code, share the web service code, the source

things that are sharable, and then all the platform specific stuff where I'm dealing with

device-specific features, or I'm trying to talk to the file system, or I'm doing something

that's unique to that device, is going to be placed into these other projects

Alright - so that's our native UI. Let's try another one and let's build one for a Xamarin.Forms app.

and so I'm again going to go to cross platform we'll use App2 this time.

and I'm going to pick Xamarin.Forms and let's just pick shared project, just for fun;

And I'm going to go ahead and create App2. Now this is going to create a structure that's

pretty similar to what we just saw with the native UI. The difference is, we're going to find some

some additional classes that are actually going to be located in our shared code, and specifically

we're going to find some UI constructs because it was Xamarin.Forms I'm going to be able to

define my UI in a standardized fashion, that's shared across all of those platform specific projects.

You can see here that we're going to get a new Universal Windows project, so we'll just pick again the defaults

and then we'll see what got generated here. So let me kind of collapse some of these up.

Notice that our shared project here has a different icon here indicating that it's shared.

It has two files in it - App.xaml and MainPage.xaml.

So we actually describe our UI in XAML, we'll see a little bit more about that in a second.

You can see here that we're creating a ContentPage. A Page just represents a single screen

typically defined by ContentPage. It's a specific type of page that has content. ContentPage can have a single piece of content so typically

we'll have a panel in here, and that panel will have other children. In this case, we just have a Label - "Welcome to Xamarin Forms!"

It also has an App class - the app class is a singleton, kind of like other UI technologies that you are probably used to.

It derives from Application and has some overrides here, similar to what we saw with iOS where I have

Start, Sleep and Resume telling when the user is actually going back and forth between my app and other apps.

And then I've got my three platform-specific projects again. Notice again I now have my App2 included

as part of this. It's a Shared Project so again, it has a slightly different icon.

But it's being included as a reference here. I have some other things in here as well so notice

that I have Xamarin.Forms.Core, Xamarin.Forms.Platform,

Xamarin.Forms.Platform.Android, and then Xamarin.Forms.Xaml

These are the Xamarin.Forms assemblies and so these are added because we used a Xamarin.Forms project.

and then finally I have again Mono.Android which is the runtime for Xamarin.Android. On the iOS side, I have

the same kinds of references, I have App2, Xamarin.Forms.Core, Platform, Platform.iOS instead of Android

and then Xamarin.Forms.Xaml, and then i have reference to Xamarin.iOS which is the runtime for an iOS app.

Notice that we have an AppDelegate here but we do not have a Storyboard in the iOS app because

the UI is not going to be done through a storyboard, it's going to be done through this MainPage.xaml.

or whatever set of XAML pages I might have in here.

In the same way, while I do have a MainActivity in Android, notice that the MainActivity doesn't actually inflate any sort of UI.

I don't actually have any UI in my layout here. We do have a TabBar and a Toolbar,

that potentially can used, those are just resources that are here; but it doesn't actually have a main.axml like we saw

in the native UI. Instead, we are going to initialize Xamarin.Forms and then load our application up from the Xamarin.Forms side.

So, it's Xamarin.Forms that's going to define that UI but I still have a platform-specific project to put platform-specific stuff in.

Again, I can still use all the features of Android, or all the features of iOS, or all the features of UWP.

So here's my UWP app here. It's just that instead of having the UI defined in each of these projects that's independent and separate,

I'm typically going to define as a shared resource, where this one label will inflate to a bunch of different types on the runtime side.

This is sort of the basics of

the Xamarin application solution and the structure that's contained behind it. So let's go back and lets look it sort of some differences

that you might see as you kind of build Xamarin apps vs. your desktop apps.

As I mentioned earlier, I'm going to restrict this comparison to WPF and beyond,

and specifically look at Xamarin.Forms since it's the closest.

If you decide your app UI is better suited to a native UI approach, that's great – you'll just need to reset your expectations on reusing any

UI type code and provide some layer which connects the native UI controls to your behavior and logic.

Let's start with the big picture. Xamarin.Forms actually took a lot of design hints from WPF and Silverlight. So much of the features and

capabilities you are used to in that world are also available in Xamarin.Forms.

Some of the features are almost identical. For example:

Data Binding, Triggers, Styles, Behaviors and XAML all pretty much work the way you'd expect them to.

Some features have some API surface differences. For example, the Application singleton class

has different methods and properties available on it which are mobile oriented.

And then some capabilities are exposed in a different fashion today. Animations are a good example of that – there is no Storyboard in

Xamarin.Forms. Instead, we build and start animations in code instead of XAML.

So, let's look at some of the key differences which tend to bite new developers coming from other XAML platforms.

So, Xamarin.Forms supports using XAML to describe a UI layout. Syntactically it is identical – elements create objects and attributes set

properties and wire up events. In fact, the XAML parser with Xamarin.Forms is even better than what we had before because it fully

conforms to the XAML specification and supports all the cool additions that WPF never got.

The difference is in the UI controls you create and the properties you work with.

Here we have two UI screens created with UWP on the left, and Xamarin.Forms on the right. Notice that we are creating the same

basic UI, and both representations here are XAML. The difference lies in the controls used to describe the UI.

On UWP we have a TextBox and a PasswordBox;

on Xamarin.Forms, the Entry control serves both purposes based on a property value.

On UWP, we have a more relaxed content model where buttons have content properties

and can have non-textual values.

On Xamarin.Forms, we can only have text in our buttons – so we expose a Text property.

Notice as well that our color properties have different names.

Ultimately, when designing UIs with either the native UI or Xamarin.Forms approach, knowing the control set and properties is the key bit of

new knowledge you will need to learn. So, we'll see the control set again in a second.

Another key technology present in Xamarin.Forms is the data binding engine. This allows you to loosely couple a piece of data

exposed through a public property on a .NET object to a visual property on a UI control.

The rules are identical to other Microsoft implementations

the source object can be anything as long as it's public, and the target must be a specific property type – in this case, a

BindableProperty. In other systems, we call this a DependencyProperty, but the purpose is identical.

It is a specific class which works with the binding engine to do it's magic.

Bindings can be OneWay or TwoWay, and each BindableProperty decides the default so it's a good idea to

be explicit in your binding when you set them up if you aren't sure what the default is.

Just like other data binding engines, you can create and apply bindings in code or in XAML. In fact, these two lines of code

here could be used in WPF, UWP or in Xamarin.Forms.

There are some differences though – as you saw, we use BindableObject and BindableProperty instead of DependencyObject

and DependencyProperty. Those original names given to the WPF classes were used because they did a lot more than just provide

binding support. However, much of that additional feature set was lost as they were reimplemented in Silverlight, WinRT and UWP.

So, Xamarin.Forms chose to name them something a little more closer to what they actually do. The same thing is true of the

DataContext property. In WPF and UWP, we use this property to assign a default binding source

for all bindings applied to that element or a descendent of that element.

We have exactly the same feature in Xamarin.Forms – but the property name is BindingContext.

Here you can see the WPF code assigning a view model to the DataContext, and the same line of code

in Xamarin.Forms – assigning the view model to the BindingContext property.

Another difference is in the binding markup extension. In WPF and UWP, we have an

ElementName property which allows us to bind to other visual elements in the same XAML tree.

That support isn't available in Xamarin.Forms, instead it includes the x:Reference feature

from the 2009 XAML specification and allows you to just use that with the Source property.

This is a more standard XAML way to identify another element by name

and so it was the approach the Xamarin.Forms team decided to take.

There are several other differences that we don't have time to cover today. For example, there is no support for compile-time bindings

with x:Bind, and other less-used features from WPF

such as binding validations, multi-binding and binding groups are not implemented in Xamarin.Forms

Constructing User Interfaces is a big part of building an app, no matter what technology you use.

Xamarin.Forms adopts the same basic layout management that you will find in WPF and UWP. Layout containers, or panels

are used to organize children based on some defined set of rules.

The layout system uses a two-pass "Measure" and "Arrange" algorithm to position elements

and you can use pre-supplied containers for layout, or if necessary, build your own layout containers to apply custom logic.

Since the layout containers are so prevalent in our UI, it's helpful to compare them.

Here are the built-in panels from WPF and UWP as compared to Xamarin.Forms.

As you can see, there is a lot of overlap between the styles of panels. In some cases, the panel is only available on one platform

for example, DockPanel and UniformGrid only exists in WPF

and RelativePanel is only available in UWP, although we have a similar container in Xamarin.Forms.

In many cases, the panels work the same way. StackPanel and StackLayout, Grid and Canvas all work the same

across the platforms – although there are some subtle differences when you get into the details, particularly when you are not explicit

about your layout properties as the default behaviors tend to be different.

The important thing here is that the layout behavior is very similar so if you've used a

StackPanel on UWP, then StackLayout in Xamarin.Forms will feel very natural to you.

Finally, keep in mind

if you need a specific layout design, you can always build a custom panel.

There is a WrapPanel example in the Xamarin.Forms documentation

which you can look at for guidance,

and Xamarin.Forms is completely open source so you can always go look at one of the built-in panels to see how they work.

The area where things do quickly tend to get tricky is in the layout properties themselves. Each panel has unique properties

it uses to control layout characteristics, and each control exposes properties to help position itself within the parent container.

In some cases, it's just a name difference, in others, there are differences in behavior depending on what the parent container

happens to be. But this screen is a good mapping of the properties so you can play with them to get exactly the layout you want.

Xamarin.Forms defines it's own UI elements that we use to construct our user application

and just like other UI frameworks, Xamarin.Forms has a visual lifecycle for the application.

Xamarin.Forms defines each screen as a Page. So, when you display a screen of data to a user,

you are really defining a Page object with visual elements that the user can interact with.

when the application is launched it identifies the starting page referred to as the "Main" page

It creates the main page object and then calls a series of virtual methods and events to notify the app that things are happening.

OnStart is called when the page is first loaded. Appearing is raised just before the page is displayed. If the user switches away

to another app, the OnSleep override is called, and when that user switches back to our app, OnResume is called.

Finally, just before the page is destroyed it raises the Disappearing event.

Also, keep in mind that these interception points shown here are part of Xamarin.Forms and therefore common to all supported

platforms. If you need more detail you can also override platform-specific

events and virtual methods that are in the platform-specific projects.

On each of your ContentPages, you'll define visual elements, or controls that the user interacts with.

The Controls implement the core functionality of your UI.

All the most common controls are available directly from Xamarin.Forms as you can see. There's also an active third-party industry that

provides specialized controls and you can create custom controls if you need to.

The interesting thing about Xamarin.Forms controls is that most of them are just thin wrappers around the platform-specific controls.

Unlike other UI abstractions you might have worked with, Xamarin.Forms always generates a fully native UI – just like the

one you might have created if you were using the native UI controls directly

Here's an example. If we want to display a piece of static text in our UI, we will create and place a Label element into our Page.

In Xamarin.Forms, that Label object is just a model which at runtime is processed by a renderer that is platform specific.

iOS, Android, and UWP all have unique renderers which take the Label definition

and then create a real text object that is unique and specific to the platform it is rendering on.

So for iOS, we get a UILabel added to our view, on Android, we get a TextView, and on UWP, we get a TextBlock.

The key thing to understand here is that Xamarin.Forms doesn't do the rendering on it's own – the visual elements that will be created

by your UI definition are the native, platform-specific controls that every app running on that device uses.

So even though you are using Xamarin.Forms to define a shared UI, the actual UI itself

will look and behave like it should because it's fully native

The downside to Xamarin.Forms is that it only includes the most common controls which all the platforms support.

So, unique controls that are only present on a subset of the supported platforms are generally not available to your Xamarin.Forms application

You can override this limitation very easily however. Xamarin.Forms allows you to embed native controls directly in your UI. Here you can

see we are utilizing an iOS UISegmentedControl and putting it into a Xamarin.Forms StackLayout.

The key thing to note here is the #ifdef statement which restricts this code to iOS

This approach only works when you are compiling this code directly into each platform specific project.

That means to use this feature you will typically want to be using the Shared Project approach.

This will allow you to use the types that are specific to the platform.

I'm showing C# code here to make it clear what's happening, but you can also use

conditional tags in XAML to do the same thing. As with the code shown here,

you would have to have that XAML in a shared project which is compiled directly into each of the platform-specific project.

Now that we've seen some of the API differences and features of Xamarin.Forms, let's look

at a couple of examples of porting desktop style applications to Xamarin.

Ok, so back in Visual Studio, let's close this solution that we created here and I'm going to open up a couple of other solutions.

I've got some pre-built things that I actually already created and that I've worked with and I've got a Github repo that you'll see at the end.

and there's two different projects here that I want to show you. The first one is a

Windows.Forms project. So this was a desktop app that I found on Github and I asked the author if I could use his project as an example

and what he does here is, let me just run it so you can see it; it's a Craigslist scraper application.

and so you can pick a city that you happen to live in, I'm in Dallas, and you can search for things like

"teslas" and it will actually go through and hit a CraigsList

endpoint and then scrape all the data off of it and display things, and if you double-click on one,

just double click, and will open up a web browser

and then actually display that particular entry from CraigsList - so it will just open it up for me from the Dallas Craigslist.

Now, in the Github notes you'll find the actual link to the original repo. The very first thing

I did as I decided to port this application, is I went ahead and updated it

for the latest revision of .NET

and I went ahead and upgraded it to use like async/await and things like that

and I made sure it all continued to run properly here in this project.

Then I went ahead and copied that project and I created a new version of it.

What I did as a starting point, once I'd upgraded it to the latest version of .NET, is I went ahead and took all the portable bits

of it, things that I knew I could share, and I moved it into a portable class library.

And so just as an example I moved to the definition for a single item into a portable class library.

You can see here is the item. It has a link and a price, and a date, location and title

and I also moved the logic that was going to do the screen scraping, or at least the XML parsing and such that came from the API

and I moved that into a static class and so here you can see is a search method with the

city and a search term; all this code was originally part of

the actual Windows Forms app, and I then updated the Windows Forms app to

ensure that it continued to run; so you can see here it is right here and I still have my same form

and so the form is still there and the logic for the form is all still present; the difference is that instead of having all the logic bound in

the form itself, I went ahead and used my new version of the API and I tested it and made

sure all continued to work. So you can see here I can go back to Dallas and I can search for "cars"

and again I get my list, and I can still double-click on a car and it opens up a web browser and you can see that I get my car there.

Then, I went ahead and added a new project into this, and I added a Xamarin.Forms app and that created for me these

projects right here. So you can see I have a portable class library, I have my Android, my iOS and my UWP.

In my portable class library, I defined a version of this page to represent this app in a mobile form; so I had to redefine the UI

because clearly I can't share Windows Forms definitions and you can see here that I went ahead and

created a search bar and a picker to list the cities

and then I have a ListView here, that when I tap an item, it does something. Then I created a data template

for the ListView to actually represents the car or rather the Craigslist entry itself

and I started with just a regular text cell, so just a regular textual representation binding to the same thing that the

Forms app was using; so if we look at the Forms app just as an example here you can see

it's data source is coming from those search terms and so it comes back with a list of items

and then its using DisplayMember of "Value" which is just a ToString representation

I did the same thing here and just bound to that same Value property

and verified that it worked and then kind of extended it to show things in a little bit different fashion so let's actually run one of these

Let's go ahead and run the Android version so I'm going to set this as my startup.

and then go ahead and run this in the Android emulator.

That's going to take a second because it has to build this application and then it has to launch the emulator

but it'll bring the emulator up and then we can actually see our application run

so now that my emulator is up, I can actually pick my city and so again, let's just pick Dallas.

And I can type in my search term here - let's do our "tesla" again

and then notice that it runs and I'm going to get my actual results here - and this is where it's displaying in my data template; so just like

before, if I tap on one, I'm actually launching the web browser right here on the device and I'm actually able to see it right here

this particular entry from Craigslist, and I can go back and go and pick a different one

and see what that one looks like. This is the same exact app, using all the same code behaviorally that the Windows Forms

one did with a different UI here. Now, I can do the same thing for iOS

and so if we switch over to the iOS app and set this as our startup; you have to have a Mac host for this

but you can see up here, I've got my Xamarin Mac Agent and it's connected to my MacBook Pro in the corner, and once it's there I can

see all the emulators and simulators as well as any devices that I have connected and I can tap the button and it will build,

go ahead and create the package on the Mac, and then run it on the Mac, and because I'm running the enterprise edition of Visual Studio,

it can actually remote the simulator from the Mac back here to my

Windows machine so I can actually see and interact with it right here in Windows.

You're going to see that I get essentially the same UI. I'm going to have a search bar and a picker, and then a ListView below it.

So, we're sharing that UI definition - that's the benefit of Xamarin.Forms. But notice that

it doesn't look the same because I'm using an iOS search bar here.

So let's pick Dallas again.

and then let's go ahead and type in our "Tesla"

and then you can see that I get all my Tesla information here, and I can pick one,

tap on it, and it opens up the web browser, just like we saw on Android.

Although, interestingly enough, it's not displaying the .. oh there it goes

so here's one for 65,000

and go back

and let's try this last one, 52000

ah, that one's pretty - a nice red one.

So you can see that it actually runs right here inside the simulator

The last application style we have here is the UWP app and this one is actually quite interesting because

this Xamarin port allowed me to actually create a more modern version of the desktop app,

so notice I can run this right here on my local machine

and notice it comes up here

I have my "Search Craigslist"

and again I have my drop-down here, I can pick my city, I can type in

whatever I'm searching for - and then it will come back with my data. Now, I changed this, so notice that on UWP, we don't put

a border around it like we did on iOS and Android. So you do have the ability to style and theme the app based upon

the operating system it happens to be running on. So let's pick Lincoln Town Car

and again it's just going to open up a browser and display the Lincoln Town car

But this is cool because I'm actually able to create a desktop representation of this with UWP, and reuse all the code

that we'd already build for the the Windows Forms app; so it gives me an immediate upgrade path

to the latest sort of edition of the desktop APIs

While allowing me to share all that code, and I've got a shared definition here for the UI itself.

So, that's a Windows Forms app. Let's try another app. I've got one other example here that I want to show you.

and I'm going to backup here and let's go into vacation spots. Again, I'm going to open up the original.

This was a WPF app, and this app here uses MVVM to be able to structure things. Let me just run it to show you what it does.

The idea was to kind of demonstrate data binding capabilities and things like that, it was a vacation planner application. You can see here

that I can select different places in the world that I'd like to go to: Dominican Republic,

Maui, Cancun, I can scroll down and see there's

places in Thailand and Australia; so maybe I'd like to go to Australia. It gives me some

information about it that I might want to know about this particular vacation. You can see it's all colors and images, kind of the

2009 look of a desktop app with WPF where you kind of went wild. So, again, just like before, the very first thing that I did with this

was, I started to break it out into a common set of code that can be shared and then the visual representation which was WPF.

So I created a VacationSpots.Common, this has all of my view models, and notice it has all of my

data and in fact, it even has the base view model implementation here

as well as the DelegateCommand implementation here that we're sharing with the WPF application.

So all of this got moved out of the WPF app and moved into a common, portable assembly here.

Then, I created a Xamarin.Forms app which gave me

the portable UI definition, so again, I have a MainPage.xaml, I have my App.xaml, I have an Android implementation, iOS and even UWP.

Now, the cool thing about this is, I decided to change the UI. That UI that we had for WPF,

Oh and by the way, I still have the WPF app, again the first thing that I did

was to ensure that the WPF app continued to run the way it was supposed to

I separated out all that code, and then made sure that the WPF app

continued to look correct when it ran here, so you can see that

I still have all my data here, and it's all still running the way I expect it to.

But then I started out with my mobile apps - let me just start with the UWP app here, so I'm going to set it as my startup. I decided that

the UI that we created on the desktop side, wasn't really appropriate for a mobile app.

A list with images - we could totally do that, we've got a Master/Detail view..

we could have a ListView on one side, and then as you select things in the ListView, have your details view change with images and

details about it, but I thought that's really not mobile centric. That's not what a mobile app

normally would look like and so, instead what I used was called a carousel view

a carousel view lets me sort of swipe between different entries

and so my app is up now, and you can see here I got my Dominican Republic

and I can actually click the little buttons here to swipe between the images, but

they are nice and big and pretty. My actual details here is just in a box that

goes up and down based upon me tapping this little icon here - and so as I tap ..

this area, I can actually get it to go up and down. Notice that it by default

just displays the location of where this particular image is coming from

and the same sort of UI is available on my other two platforms. So if we set our Android project as our startup and we run this..

Here we can see our app is running on Android and instead of little arrows, I can just simply

take my mouse and slide, but my up and down still works

And actually it's anywhere in here you can tap and it will go up and down not just the arrow - obviously touch you have to

expand your range of what you can actually tap in order to make it go up and down. So, this whole area is actually the tappable

surface, but the arrow sort of indicates that we can slide this up by touching here.

so let's look at some commonalities here. So again if I go back to my WPF app

and I open up the XAML file here, you can see that

it uses a DockPanel, has a border around

a TextBlock for the title, then it has a status bar at the bottom.

and then here you can see here's our actual list of vacations inside of a list box with a group style as well as a data template

to display the actual image along with all the text blocks. It just got a lot of XAML and it's all based on WPF so you can see Dock Panels

and Stack Panels and TextBlocks and things like that. Then it's got the actual details view which is just a UserControl.

On our mobile side, if I go look at the MainPage here

you're going to see it looks very similar, I have a Grid, I have some resources in the Grid

with a Style for my Label. Notice that in our Grid resources

if you're familiar with WPF, this is very similar - I can put all my Styles inside here. The only difference is I have to declare the

Resource Dictionary; and so unlike WPF where you just start adding styles and there is an implicit

resource dictionary that has been created for you; you have to actually declare the resource dictionary here as part of

of the resources. And then I've got my row definitions with a star-sized height and an auto-sized height, that's all exactly the same

as other XAML frameworks. Then I'm defining my CarouselView. So this is a unique control

to Xamarin.Forms and it uses data binding, so notice it has an ItemsSource that's bound to that same AllVacations that

we use here, and so on the ListBox, notice we're binding to AllVacations right there.

we're binding to to the same AllVacations here and our item is bound to SelectedVacation so the actual Main ViewModel that's driving all

this is identical between these two projects. We have a MainViewModel here that's actually got our list of AllVacations

and our SelectedVacation and it raises property change notifications in order to say when

things are changing. That's all shared code between the WPF

and all of our mobile projects. Then I define a data template that has our image in it

and then I have the frame that moves up and down so this is the

animated frame. Now, that animation, unfortunately we don't have any way to actually describe that in XAML today

at least not for Xamarin.Forms and so the way that's actually setup here is in the MainPage.xaml.cs when you tap on that

frame, I'm running a little bit code in order to actually run those animations. And so you see we have some unique APIs here to animate

and rotate and fade those elements; and so those are animation APIs that are built into

Xamarin.Forms to be able to do the work that I'm trying to do here, and it's all driven off

this one single little method that's in my code behind. So this is unique to Xamarin.Forms

but the actual data storage, and the representation of that data, where it's being loaded from

and all that code that's part of that, is all actually contained in our common

assembly and then it's shared across all of our actual platform-specific

projects, so our UWP, our iOS and Android as well as, of course the WPF app.

So let's switch back to the slides.

For this final part of the session, I want to impart some practical

tips on engaging the mobile development experience.

These are things I learned the hard way which I hope will be lessons that you can take with you.

First, embrace minimalism. Mobile apps aren't desktop apps. On the desktop we have tons of resources – and so most desktop

apps do lots of things for you. When shifting to the mobile arena,

consider what the core functionality of the app should be and focus on that.

Each screen in the app should be devoted to a single thing with navigation

provided to get to other core features you need. Here's an example:

On the desktop, my mail application has lots of screen real estate, so we show

folders, messages and a full message thread all in one window. We also have a toolbar

with common functions, and a search bar to find and filter my messages

When we translate that experience to mobile, we define the core tasks:

reading messages. So we reduce the window to a search bar and the messages

contained in a specific folder. Context menus are still provided, but utilize swipe gestures, or long press gestures to activate.

Notice that we provide a preview of the message, but require that you tap on the message to actually

view the entire contents. At the bottom we provide the most common tasks – New Message and a folder view to switch folders.

We can also utilize orientation to change our features. For example, if I rotate the device horizontally,

I can then display the message list and the full message thread for the selected message.

Notice I also then have room to expand the message options – so I can do quick actions right here on the same screen.

This sort of feature focus reduction is very common in the mobile world, I encourage you to look at other apps

which have desktop parallels – particularly from Google, Apple, and Microsoft to see how they transition to mobile in this regard.

The second piece of advice is to embrace the platform. Each mobile platform has a unique way of doing things.

Users expect their apps to behave in consistent ways and so when you deviate from the norm, you should have a very good reason.

And then, sleep on it before actually doing it!Here's an example. The navigation paradigms for each platform are different.

On Android and UWP, it's common to use hamburger menus, located at the top.

On iOS, it's far more common to use tabs.

Always prefer the standard navigation system used by each platform.

Remember that UWP and Android have back buttons on the device and iOS supports a swipe

off the edge gesture to go back. The app shown here is a Xamarin.Forms application –

but notice that it adopts the proper design based on the platform. This is ideal because it's what users expect.

In fact, each vendor goes to great lengths to document the expected user experience.

Android publishes the Material Design specification with it's flat, shadowed designs with floating buttons.

Apple has the Human Interface Guidelines which provides details for every one of their platforms from macOS to AppleTV.

And Microsoft has the Fluent design language, which is an extension of their Metro Design language created for Windows 8.

Read these specifications, examine their built-in apps, these are the standards

you want to employ so your app looks and feels natural on the platform.

Number three: embrace touch. This might seem like a silly thing to say, but think hard about how people interact with your UI.

Mobile devices are touch based and fingers are much bigger and less precise than a mouse.

Make sure your interactive visual elements are large and not spaced too closely together

Think about how users hold the device while they interact with your application. Can they get to all of your features easily one-handed?

This is important because a 2013 Steven Hoober study documented how people hold their devices and almost half of them tend to

use it one handed. If your app requires daddy-long-leg fingers to reach core features then you are going to have a usability problem.

Mobile devices have some unique challenges which you just don't find in the desktop world. Embrace those differences!

For example, it's common to have your network connection just disappear while you are trying to utilize it. Having robust algorithms to retry

data operations and offline caches of critical data is mandatory in the mobile world.

Your app also doesn't have the CPU or memory resources your desktop apps are used to. You need to consider all the low end

devices people might run your app on and compensate by only keeping what you need in memory and offloading CPU intensive

algorithms to external web services where possible.

Users will use your application in unexpected ways. If it doesn't respond immediately, they might tap or swipe things again and again so

disabling visual elements and providing them some feedback that your app is doing something is important.

And your app has to be robust. Unlike the desktop where apps are opened and closed all the time, or where an application crash is a

minor annoyance and the user just restarts the app, mobile apps are expected to be rock solid. They also don't have complete freedom.

Typically the only time they are given the CPU is when they are in the foreground. Switching away from your mobile app will often suspend

the application with a few special exceptions.

Knowing these rules and exceptions is important to building a robust, high quality application.

That brings me to my final piece of advice. Always test on real devices.

Simulators are wonderful – they are quick and often easy to test with, but they don't exhibit the same performance or complete behavior of a

real device. There are a lot of touch gestures you cannot completely replicate on simulated devices, hardware buttons and on screen

keyboards might behave differently, and most devices support physical interactions to do things such as take screenshots.

Make sure to test your app on the types of devices you expect your users to have.

As developers, we often have high-end hardware that our apps run great on. Then it gets installed onto a real users device and the

performance metrics are quite different. So, test on all the supported variations you expect your app to run on.

To help with that, consider trying out Visual Studio Mobile Center.

Mobile Center covers the entire application DevOps lifecycle from end-to-end, with deep functionality in each area.

One of those areas is Test Cloud which is an automated testing platform I mentioned earlier.

Recall that it allows you to run your application on real devices with a testing script you build to run it through it's paces.

Test Cloud will execute the script on the devices you select and generate a full report on

what worked, and more importantly, what didn't. That way you don't have to invest in every possible variation of device – you can

use our system to do that for you.

Mobile Center is currently in preview – you can sign up today at mobile.azure.com and try it out for yourself.

Well, we've reached the end of our time this morning.

I hope I've given you some ideas on how to get started going from the desktop to the mobile world with Xamarin.

I want to remind you again about our excellent training at Xamarin University.

We've got all kinds of content – a lot of it is free, but we also have a subscription service where you can get trained by Xamarin experts

who have been building apps for years. We've got over 80 classes on a variety of topics to make sure you get the information you need.

and subscriptions start at just over $83/month

and you can use the same subscription you use for Azure services or your Visual Studio MSDN subscription.

Finally, here are some additional resources and links you might be interested in.

We will be posting a recording of this webinar and the slides and demos I did in this session are in the GitHub repository listed here.

Make sure to check out the slides in particular, there are some things I didn't have time to get to today.

Alright – I hope this has been helpful to everybody, thank you so much for attending this webinar with me today.

We're going to stick around and make sure everyone gets their questions answered, so I'll end here, but feel free to engage with our

online experts in the chat window. Thanks everyone – have a great day!

For more infomation >> Desktop Developer's Guide to Mobile with Visual Studio Tools for Xamarin - Duration: 1:01:41.

-------------------------------------------

Baneglow Guide and Family Fighter Strategies - Duration: 5:06.

Hi!

I'm Hazel, and this is your guide to the Baneglow pet battle on Argus.

I'm going to start with a quick easy team for just doing the world quest.

Then, I'll show you strategies for every single pet family for progress on the Family Fighter

achievement.

Baneglow lives here on Krokuun.

These things really look like they should be under the sea but they just insist on being

flying-type.

First up, the fastest strategy for when you just wanna get your World Quest done and go.

This also doubles as the Dragonkin strat.

Grab yourself a high attack Nexus Whelpling or your Stormborne Whelpling with Arcane Storm

and Mana Surge.

Get into battle, use Arcane Storm, use Mana Surge.

That's about itI had a Stormborne Whelp and a Chrominius all ready to go but as it turns

out they weren't really needed.

If you run the Stormborne first or a non attack breed Nexus whelp, you might need one more

smack.

Next up is Aquatic.

I've got Gahz'rooki with Swallow you Whole and Geyser, a Hydraling with Swallow and Shell

Armor and a Moonshell Crab with Arcane Slash and Moon Tears.

Start with Gah'zrooki and use Geyser, then spam Swallow you Whole until you die.

Bring out the Hydraling, set up Shell Armor and go back to spamming Swallow you Whole.

To clean things up, the Moonshell crab can bust out a couple of Arcane Slashes, or a

Moon Tears to set up the Arcane Slash if you're not that close.

You could also run the crab first, go Moon Tears into Arcane Slash spam and then by the

time you're down to your Hyrdaling Swallow You Whole should be close to getting bonus

damage.

Either way.

Next we have Critters.

Get yourself some snails and set them all up with Ooze Touch and Acidic Goo.

Start the fight, and use Acidic Goo.

Ooze Touch three times, then Acidic Goo again.

Keep that up until the end of time.

I actually only needed two snails so if you're experiencing a snail shortage don't feel pressured

to go get a third one.

Next is Elemental.

I'm using an Ashstone Core with Feedback and Crystal Prison, and then Tainted and Fetid

Wavelings with Corrosion and Ooze Touch.

Start with the Core, use Crystal Prison and then you should be able to Feedback about

five times before you die.

Bring out a Waveling, apply Corrosion and then Ooze Touch into it.

He's almost done by the time we get to our second Waveling so one more Ooze Touch finishes

the job.

Next is Humanoids, and Christmas is coming to Argus.

I'm using a Father Winter's Helper, Winter's Little Helper and a Grumpling all with Snowball

and Gift of Winter's Veil.

Use Gift of Winter's Veil on cooldown and then spend the rest of your life spamming

Snowball.

I figured Eggnog would be really good because it clears all those Spores debuffs but as

it turns out it's not super worth the turn it takes to use it.

It's time for Mechanicals.

I'm using my shiny new Pocket Cannon with Arcane Shot, a Sunreaver Micro Sentry with

Laser and a Rascal Bot with Phaser.

Rascal Bot doesn't see battle but if you're missing either of the first two he might come

in handy.

So, we basically press Arcane Shot six times for a total of three shots.

Then I bring forth the Micro Sentry and two good Lasers wraps it up.

Next up is Beasts.

I'm using Moon Moon with Moon Tears, Howl and Moon Fang, a Feline Familiar with Prowl

and Onyx Bite and in the third slot I picked up Ash'ana with Moonfire just in case.

Moon Moon's pretty much got this so don't worry overly much about the second too.

Start up the fight and lay down Moon Tears, then Howl, then spam Moon Fang.

Moon Moon's a very good boi and his damage really comes in once his racial is up so that's

all it takes.

Next we have Flying.

I'm using an Ikky with Savage Talon, Black Claw and flock.

For backup I picked two Nether Rays with Arcane Blast we won't really need them.

Use Black Claw, then Flock and watch Ikky do his thing.

Finish it off with a Savage Talon and that's that.

For Magic I'm using an Empowered Manafiend and then two other pets that won't matter.

Set his moves to Arcane Blast, Surge of Power and Arcane Storm.

Use Arcane Storm, press Arcane Blast a few times and then bust out the Surge of Power

as soon as he's low enough health to die to it.

Remember that Boss Pets take half damage so keep that in mind when you do your death beam

math.

Here I just need him at 669 health or lower.

Last, we're doing Undead.

I have my Unborn Val'kyr with Shadow slash, Curse of Darkness and Unholy Ascenscion.

Second is my Fragment of Anger with Soulrush and Spiritfire Bolt.

The other Fragment pets are fine too, just run soulrush and magic damage.

Start with the Val'kyr and use Curse of Doom.

Get a good five shadow shocks in, then Reapply Curse of Doom if you can and use unholy ascenscion

on your immunity round.

On your fragment, use Soulrush and then spam Spiritfire Bolt.

So, that's Family Fighter for Baneglow!

Thank you so much for watching.

Subscribe for the rest of the Family Fighter guides and other super cool WoW videos.

Let me know what you think, share your own strategies and substitutions in the comments

if you like and have a wonderful, wonderful day.

Bye!

For more infomation >> Baneglow Guide and Family Fighter Strategies - Duration: 5:06.

-------------------------------------------

Dinner at Hobbiton - New Zealand's Biggest Gap Year – Backpacker Guide New Zealand - Duration: 9:58.

Today we are going to Hobbiton Hobbiton Hobbiton.

We are pretty pumped because we are going to Hobbiton today.

See ya later.

We are going to Hobbiton.

Today, we are crossing Middle-earth from Te Aroha to Hobbiton in Matamata.

During the drive to Matamata we were pumping ourselves up.

We listened to the soundtrack of the Lord of the Rings blasting as loud as we could.

We were singing, we were yelling, we were doing the roar of the orcs.

I have been dreaming about this Hobbiton stuff for a long time.

I am extremely excited about this Hobbiton stuff.

I am hungry.

I will eat until I can't walk anymore.

this is going to be awesome.

So the tour starts by a nice little drive by bus to the Hobbiton Movie Set and we pass

through a lot of rolling hills and sheep grazing and all those beautiful things with the sun

starting to set.

And then we start walking toward Hobbiton.

Now the crowd of tourists just start walking through this very small channel then this

when Hobbiton unveils and you start seeing the whole Shire just right in front of your

eyes.

It's just mesmerising.

It's really really gorgeous.

We have two tour guides taking us around the Hobbiton Movie Set this evening.

We have Cass, you know, standard name.

But then we have Samwise Gamgee, who is also taking us around Hobbiton.

Well, his name's Sam but that's the perfect name for such an event.

You know all the Hobbit Holes.

We see Bag End, where Frodo and Bilbo like to hang out.

There's Samwise Gamgee's Hobbit Hole as well.

It's all there.

We were even like knocking on a few doors to see if any of the Hobbits were in but no

one was in.

I've got my Hobbit on!

There is no way you can take bad picture of Hobbiton.

Then sun always looks amazing and the hills always look gorgeous.

I don't know how that works, but it always always always looks good.

The morning, the evening: any time it looks gorgeous.

A good tip though for if you are doing a tour in Hobbiton: you don't need to rush to get

to the front because the tour guide actually spoke really clearly.

We could hear everything she was saying and still get all the stories of Hobbiton and

all the behind-the-scenes.

Just wait behind, wait for everyone to move out of the way and then take your pictures

of the Hobbit Hole.

What are you doing, Laura?

I'm just seeing if Pippin is in.

Slowly the sun is setting and the colours are changing across Hobbiton.

The lights are starting to glisten in the background and across the lake you can see

The Green Dragon with the lanterns glistening and reflecting off the lake and bringing a

tear to our eyes.

And we're not going just to Hobbiton, right.

We are going for a feast.

We are going to dine like kings or more probably like Hobbits.

And then we arrive at the Green Dragon.

We are getting inside the bar and ordering our lovely drink.

Another thing about the Hobbiton Food Experience is they have their own specially-brewed beers

and ciders and non-alcoholic ginger beer.

So we go and sit by the fire and talk about our travels and journey, the Unexpected Journey

to come.

And then Sam, our lovely guide, calls us gathers us in front of the curtains for a grand reveal.

And bam, they open the thick curtain unveiling the whole dining room.

There is so much food on the table, right.

there are some mushrooms, there are some potatoes, there are some vegetables, there is some roasted

chicken, there is some beef stew, there is some roasted pork, there are some stuffed

pumpkins, there is some marinated onions or whatever.

Beef, meatballs, there were some beans, there were some capsicums, there were some garlic,

there were a bit of everything.

Po-ta-toes: boil 'em, mash 'em, stick 'em in a stew.

At Hobbiton, first servings are a must, second servings are compulsory, third servings are

mandatory, fourth servings are not advised but some people just have them anyway.

It was pretty amazing like the amount of food there was there and all day Robin has been

saying: "I'm going to stuff myself so much tonight.

I'm going to have every course I can get.

I'm going to eat so much until I'm sick."

Well...

Guess what?

Robin does exactly that.

He keeps...

Yep...

There's no stopping him.

He's just eating everything he can get and there's so much food, it could feed you know,

an army of orcs.

But he succeeds to eat as much as he can until he looks like a mountain troll.

Yeah, I think Robin eats an entire pavlova to himself and then later on in the evening

he starts to hiccup and burp and make strange noises beside me.

All in all, he was pretty ill that night because he ate far too much.

I cannot move.

After feeding ourselves way too much, we then get we are all given a lantern - well, one

lantern between two.

We have to buddy up with a lantern buddy.

Now, the walk through Hobbiton at night is really magical.

It's like a fairy tale, you know.

You go through village which is well-lit and there is the reflection of all those nightlights

over the lake.

We all gather round, we put our lanterns in a circle so they are all facing Sam who is

our tour guide, not Samwise Gamgee unfortunately, and he tells us some stories behind-the-scenes

stories of how they made this Party Tree scene and how they got all the friends and family

of the crew to have a massive party.

Literally, the scene was a massive party and in real life it was a massive party.

All I want to do is go to Hobbiton.

All I want to do is see our little Hobbitses and eat with the Hobbitses but no, I have

to be here with this: He's nothing but a troll.

For more infomation >> Dinner at Hobbiton - New Zealand's Biggest Gap Year – Backpacker Guide New Zealand - Duration: 9:58.

-------------------------------------------

Tokyo Travel Guide | Ultimate One Day Plan for Beginners - Duration: 11:11.

For more infomation >> Tokyo Travel Guide | Ultimate One Day Plan for Beginners - Duration: 11:11.

-------------------------------------------

Field Guide To The Modern Human Male - Duration: 4:17.

- Man.

The human male is a majestic creature,

but he is facing one of

his greatest survival challenges yet.

Prostate cancer.

Fourteen million males worldwide

are living with this disease,

but with your help

we have a chance to save them all.

My name is Rob Riggle.

Follow along as we go into the wild

to tag the many species of men

for the Field Guide to the Modern Human Male.

First on our journey today,

we see Tinkerous Motorous.

This particular male thrives

in his cave environment.

He has developed an advanced ability to use tools.

- Tool box!

- [Rob] The bouquet of motor oil repels his mate,

but all that goes away when he

releases his emphatic mating call.

(motorcycle engine roars)

While he's careful to check the oil every week,

he has not yet had his prostate checked.

But don't just take it from me,

here's a real doctor.

- Hi, I'm Dr. Drew.

In the United States,

one in eight men will develop prostate cancer.

- [Rob] Now, as we venture into the backyard,

the stinging scent of charcoal alerts us

to the presence of the great carnivore,

(grill pops)

Grillius Ignitus.

This mighty male demonstrates his dominance

by providing a hearty meal for his pack.

But when they get overzealous,

he may become agitated

and lash out.

- No!

- Although he takes great pride in caring for his pack,

the male's pride often prevents him

from taking care of himself.

- Prostate cancer is 100% treatable if detected early.

- And now, it is with great apprehension

that we set our eyes upon Dad-jokey Embarrassus.

This male will do anything to impress the cubs.

Watch as he shamelessly attempts

one of his many terrible characters.

- Tong Monster!

(roars)

- Absolutely devastating.

- Potato chips!

- The chances of getting prostate cancer are one in three

if you have a close relative with the disease.

If two close relatives

have been diagnosed with prostate cancer,

the risk jumps to over 80 percent.

- And lastly,

the reigning patriarch, Back In My Dayus.

Presiding over the family unit,

he regales his clan with stories of yesteryear.

- Half the town would be on fire.

- The feeling of safety is abound,

but this is the most vulnerable of times.

- Where does it come out?

Where does the photo come out?

Can you print it?

- The risk of prostate cancer

rises rapidly after the age of 50.

I was diagnosed at age 52,

but some men can develop prostate cancer

as early as age 40.

- The human male is in a race against time.

May I?

Thank you.

That looks great.

In the U.S.,

a man is diagnosed with prostate cancer every 3.3 minutes.

Every 20 minutes,

a man loses his fight against this disease.

Surely, it's our responsibility to do everything

within our power to save these men.

This is the singular focus of many versus cancer,

and why we invite you to join us.

Steaks are done!

Visit savethemales.org to tag all the males you know

in the online Field Guide

and donate to help save them.

Your gift will fund a network of more

than one thousand of the world's top cancer scientists

who are making breakthroughs in labs and clinics

every single day.

Together, we have the power

to save millions of lives.

Together we can save the males.

Tag.

I love it!

Tag, you're it!

For more infomation >> Field Guide To The Modern Human Male - Duration: 4:17.

-------------------------------------------

World of Warcraft Thrall - A painting guide for the bust, ep 1. - Duration: 27:13.

For more infomation >> World of Warcraft Thrall - A painting guide for the bust, ep 1. - Duration: 27:13.

-------------------------------------------

Guide to uploading documents on a school or provider page for Council staff - Duration: 8:26.

For more infomation >> Guide to uploading documents on a school or provider page for Council staff - Duration: 8:26.

-------------------------------------------

Mersey Gateway tolls – a guide for Halton residents - Duration: 2:18.

For more infomation >> Mersey Gateway tolls – a guide for Halton residents - Duration: 2:18.

-------------------------------------------

Sådan skifter du det forreste støddæmperleje på SKODA ROOMSTER 1 GUIDE AUTODOC - Duration: 21:37.

Use a socket №16

Use a socket №10

Use a socket №18 and a open end wrench №18

Use a socket №13

Use a special tool to tighten the spring

Use a combination spanner №21 and a hex-nut wrench №7

For more infomation >> Sådan skifter du det forreste støddæmperleje på SKODA ROOMSTER 1 GUIDE AUTODOC - Duration: 21:37.

-------------------------------------------

Ark Survival Evolved - 1min Guide - The Center (Map Guide) - Xbox One (german) - !Eng Subtitles! - Duration: 2:21.

Whats up guys ? Welcome to a

new video on my Channel. Todays video is about ark

survival evolved

and how to unlock the map "The Center".

In this video i will show u a easy way to unlock this map.

For those who started playing Ark, please make sure to play "The Island"

before u watch this video.

However i have figured out

how to unlock "The Center" and i wanna share this with u

in my first 1 minute Guide

Stay tuned.

We start after the Intro.

First start the game in a local

single player game.

Make sure the choose the map "The Island".

You dont have to change the settings.

Also you dont have to change character settings.

As soon as you start the game

on the Island

press start

and press LB + RB + X + Y.

Then the command line

on the Xbox and PS4 (L1+R1..) and after that

tipe playercommand Ascend2 in the command line. Press start.

As soon as you press admin command

then the credits appear.

That will finish the game Ark Survival Evolved.

You probably now also unlocked an archivement.

I didnt got the archivement because i got it already.

You can now press end to go back to the main screen

and then you unlocked the map "The Center".

I hope this quick guide helped you out.

If you liked this video (Guide) make sure to leave a like.

Dont forget to subscribe, so you do not miss the new guides.

Leave a comment and

tell me what guides should i do next.

And dont forget...

...to tell me exactly which guide because there are many guide out there.

Anyways, i see u in the next one.

Ciao!

For more infomation >> Ark Survival Evolved - 1min Guide - The Center (Map Guide) - Xbox One (german) - !Eng Subtitles! - Duration: 2:21.

-------------------------------------------

Guide to a school or provider page for senior leaders - Duration: 9:03.

For more infomation >> Guide to a school or provider page for senior leaders - Duration: 9:03.

-------------------------------------------

Guide to a school or provider page for Council staff - Duration: 13:29.

For more infomation >> Guide to a school or provider page for Council staff - Duration: 13:29.

-------------------------------------------

Mersey Gateway tolls – a guide to pre-pay accounts - Duration: 2:14.

For more infomation >> Mersey Gateway tolls – a guide to pre-pay accounts - Duration: 2:14.

-------------------------------------------

A Guide To Property Sourcing Agents And Their Deposits - Duration: 4:58.

For more infomation >> A Guide To Property Sourcing Agents And Their Deposits - Duration: 4:58.

-------------------------------------------

International Students Pre-Departure Guide - Duration: 6:03.

Congratulations on being accepted into St. Lawrence College.

You are about to start a journey of a lifetime.

This video will outline everything you need to know.

It's your first step to a successful experience in Canada and at St. Lawrence College.

STEP ONE: Where to Start

If you still need a visa to study in Canada, contact the embassy in your country or visit

the website given in the document.

Contact the International Office

Once you have received your visa or study permit, please let the International Office know

so we can prepare for your arrival.

We will also need to know

if you are using an agent or not.

If you are using an agent, please ensure that you are receiving our emails

to an email address that you frequently check.

We will also need to know what city you will be arriving in by plane.

If you are attending Kingston or Brockville campus,

it would be a good idea to fly to Toronto or Ottawa.

For Cornwall, the best airport is located in Montreal, as it's very difficult to travel

between the cities of Ottawa and Cornwall by public transportation.

Welcome Sessions

There will be two dates you need to mark on your calendar before coming to Canada.

First will be the International Welcome Session that is usually held several days before classes.

The second date will be your orientation day.

Both sessions need to be attended.

This will help you prepare to have a successful start in Canada.

Book Your Flight

Try to book your flight so you arrive at least a week before the Welcome Session,

so that you can get a little more comfortable in your new home.

Get to Know Your City

Research the town you will be living in!

Find out where the nearest grocery stores are to your housing and Google the many things

you can do for fun.

This may be your first time abroad and a little research can go a long way.

STEP TWO: Make Housing Arrangements

It is important to find housing before you arrive in Canada.

Students who do not find a place to live prior to arriving, should arrange to stay in a hotel temporarily.

There are multiple housing options during your stay in Canada

residence, homestay, off-campus room rental and renting on your own.

Residence is an on-campus option for students that includes internet, a meal plan,

areas for students to gather and is conveniently close to classes.

If you require residence, you will need to apply soon after receiving your

acceptance letter, as rooms fill up fast.

Homestay is an excellent choice for international students

who would like to work on their English language skills.

You will rent a room from a family, and meals will be prepared for you, which is a great

way to feel comfortable when you are so far away from home.

If you choose to rent a room off-campus, you will be living in a house near the college

with up to 7 other students.

You would have your own room, while sharing common areas such as the kitchen, living and bathroom.

This is a great way to make friends from different cultures.

If you are an older student, bringing your family,

or just prefer to be on your own, renting is also an option.

Off-campus housing and renting your own apartment requires a lease agreement with a landlord.

You can find apartment listings online and through property management companies.

STEP THREE: Packing

Deciding what to pack is largely determined by the time of year you will arrive.

Do some research ahead of time and do not pack in a rush!

If you are arriving for our January intake, it can be very cold, and snowy, and slippery

during the winter months. Be sure to pack warm clothes, boots and a coat.

If you are arriving for our fall or summer intake, you can pack lighter clothes for warmer

weather, but be prepared, as the temperature can change daily.

Before leaving home, you should organize at least one night's accommodation if needed.

Make sure you know if there are a few days between your move in day and the day you arrive,

and book your stay accordingly.

STEP FOUR: Arriving in Canada

Customs: Be prepared to spend 30-60 minutes in customs when you arrive the first time.

Things you will need to have with you in your carry-on luggage and easily retrievable include:

Passport, letter of acceptance to St. Lawrence College, Letter of Introduction

and all the papers used to obtain your study permit.

Be prepared to answer questions about what you are studying and prove where and how long

you will be staying in Canada.

After the questions are asked, the Border Services Officer will print your study permit.

Be aware of which campus your St. Lawrence College program is, and look into

transportation from the airport. Make sure to leave at least a couple hours between your

scheduled landing time and the time you are booked to leave

for your St. Lawrence College campus town.

We do not recommend taking a taxi, it is far too expensive.

So, research and book your options prior to landing.

Ways to get to campus include Via Rail train, Megabus or airplane.

For more information please see the document provided.

STEP FIVE: Cultural Differences

Friendliness: Things are going to be very different than the country you are from.

In the beginning this can be confusing, but also exciting!

Canada and St. Lawrence College are very welcoming to new international students, and will support

you during your stay here if you need help.

Food: Thanks to Canada's multiculturalism, we tend to have a little bit of everything

when it comes to food, and we enjoy all of it!

Here is your chance to try cuisine from many different

cultures, but still find food that reminds you of home.

Classroom Differences:

In Canada, it is common to call your professor by their first name and you are encouraged

to ask questions during your lecture.

Teachers are happy to help you, so please ask for help if you need it.

Group work is very common in a Canadian classroom.

It's also a great chance to practice your English and meet new friends.

In the beginning, it may make you feel nervous, but don't worry,

with practice it will become easier.

STEP SIX: Getting Settled

Visit St. Lawrence College, introduce yourself at the International Office, take a tour,

and pick up your photo and receive your student card.

This student card also includes a bus pass that you can use for city transit.

Take a tour of your new city.

Use your student card and an app like Google Maps,

to travel around and get comfortable with your new surroundings.

Some things that will help you transition:

Open a student bank account (you will need your student card for proof).

If you have a phone, sign up for a plan and purchase a SIM Card

from a Canadian communication company.

We're excited to see you all here in Canada and we'll see you soon!

Check your email for an invitation from iCent

to download our International Office app.

For more infomation >> International Students Pre-Departure Guide - Duration: 6:03.

-------------------------------------------

IDEAS Guide for small media and communications projects - Duration: 2:56.

TITLE: IDEAS Guide for small media and communications projects

IDEAS is an acronym for Innovating, Designing, Evaluating and Applying at a Small scale for media and communication projects

So that tells us a lot about the intention of the guide.

In that it is really helping innovative

learning based approaches to build

an evaluation design into

the process of designing a project

so that the two are really working together.

What was lacking, there was a void, this void

which we believe the IDEAS Guide

the Facilitators' Guide fills.

It offers those who are not accustomed

to piecing proposals for donors

on a regular basis. This IDEAS Guide

offers them an opportunity on how to do it

like a text book.

And it guides them through it. Makes it a lot easier

and it stops

for want of a better word, development partners or donors

from trying to influence some of the

ideas and some of the home grown talent.

It offers them an opportunity to do

something for themselves. It builds their capacity

and they don't have to rely on an external consultant to come in and charge them top dollar

to put together their ideas. And I think that's important.

So there are ten modules in the IDEAS Guide

And they start to thinking about your project through to

who is coming along, what questions you need to ask.

And how you may answer your evaluation questions.

And all of them are designed to be quite hands on

encourage discussion and negotiation.

The thing is in development, you know so often

there is sort of this parachute that lands

they do their little development project and their gone

and there is no sort of

long lasting impact.

But if we took this tool out, we would find out what people wanted.

We would find out what they were prepared to do

and if they even needed help.

The way that it has been framed, the IDEAS Guide is like

Here take this, share it, do what you want with it, adapt it.

Looking back at our project

if there had been more monitoring

and evaluation and smaller steps

then we wold have caught some of the

I guess fail points along the way.

I think we would have asked more questions how might we fail

And that is a really good question

when you are going somewhere new.

So I think as, maybe like a

facilitation, community consultation

sort of diagnostic tool

I think its got, I would be using this next year!

Music

Credits

For more infomation >> IDEAS Guide for small media and communications projects - Duration: 2:56.

-------------------------------------------

Så byter du främre stötdämpare på SKODA ROOMSTER 1 GUIDE AUTODOC - Duration: 21:37.

Use a socket №16

Use a socket №10

Use a socket №18 and a open end wrench №18

Use a socket №13

Use a special tool to tighten the spring

Use a combination spanner №21 and a hex-nut wrench №7

Không có nhận xét nào:

Đăng nhận xét