Here are the sessions recordings for our last event
Building High Performance Applications with .NET 4.5: Part1, Part2
Mohamed Mosallem's Blog
Here are the sessions recordings for our last event
Building High Performance Applications with .NET 4.5: Part1, Part2
In our next DevLifeStyle Community event I will be presenting a session on Windows 8. you can register here
Away from all the discussions about whether Silverlight is dead or not, The Silverlight 5 RC contains the previously announced P-Invoke feature which enables you to call Win32 style APIs from a trusted Silverlight application.
There are some attempts to use Kinect from Silverlight (here) but this was before MS released the official SDK. we will use Silverlight 5 P-Invoke feature to call the Kinect SDK APIs.
P-Invoke in Silverlight works just like P-Invoke on the desktop. you use the DllImport attribute to import the APIs and you declare in your code the dependent types (Enums, structs, etc.)
I tried to keep the classes and methods in library identical to the ones in the official SDK. I implemented only a couple of the available APIs (with the help of the Coding4Fun Kinect Toolkit and Reflector).
To test the library we will create a simple application:
- Create a new Silverlight 5 application
- Add a reference to the KinectSilverlightLibrary.
- Change the properties of the project: enable running out of browser.
- Change the Out-of-Browser settings to require elevated trust
- In the App.xaml.cs file, define a new property of type Runtime, this property represents the Kinect runtime, in the Application_Startup event handler initialize the runtime and in the Application_Exit event handler shut down the runtime
- In the MainPage.xaml file add two image controls that we will use to display the video and depth streams coming from Kinect
- In the MainPage.xaml.cs add the following lines of code
When the page is loaded we open the video and depth streams and subscribe to the VideoFrameReady and DepthFrameReady events, in the event handler we retrieve the ImageFrame and convert it to a bitmap (I used the WritableBitmapEx library)
Here’s the application running
You are free to continue adding the rest of the APIs to this library.
You can download the source code from here:
The long awaited Surface 2.0 SDK has been just released. to get started go to the new Surface Developer Center and download the SDK.
Once downloaded and installed, start VS2010, you will find the Surface 2.0 project templates available
Let’s create a sample application, I will create a simple twitter client (hopefully before scottgu creates it) let’s name it TwittSurf
Once we created the project you will have the same project structure as you have in the Surface 1.0 version, let’s create our UI
We will add a ScatterView control, inside it we will add a SurfaceListBox and configure its ItemDataTemplate.
In the Loaded event of the Window we will write our code, I will use the Twitterizer .net Library (download the lite version) to save some time, the code below will submit a query to twitter and display the result in the list box
Before you run the application Open the Input Simulator (Start Menu-> Programs-> Microsoft Surface 2.0 SDK-> Tools) this tool is used to simulate the different types of inputs (finger, blob, tag).
Run the application, the list will appear with the search results, select the finger input from the input simulator, press and hold the left mouse button to simulate a finger contact on the Surface.
You can drag/rotate the list box around, to scale the list you need two fingers, you can do this by pressing/holding the left mouse button on one corner of the list, then pressing the right mouse button to keep the finger contact in this location, then you can add another finger contact on another corner by clicking the left mouse button and when you move the second finger the list will scale.
I believe you can also simulate more than one contact by connecting additional mice, but unfortunately that didn’t work for me.
You can download the code from here
I’m very excited to have the SDK, Definitely I’m be spending more time playing with it.
With the introduction of Windows Phone 7.0 a new opportunity emerged for Silverlight developers, this new platform uses Silverlight (a version of Silverlight 3.0) as the main framework to build applications on the phone. When building applications for Silverlight and WP7 you will find that you can reuse some of the code across the two platforms, Linked source files were used to share code between WP7 and Silverlight projects along with the use of compilation directives.
Microsoft introduced a new way to create code that targets multiple platforms, it’s a Visual Studio Add-In called Portable Library Tools (Available here)
Portable Library Tools is a new Visual Studio add-in from Microsoft that enables you to create C# and Visual Basic libraries that run on a variety of .NET-based platforms without recompilation.
In this post we are going to build a sample application for WP7 and Silverlight that uses the Portable Class Library Tools.
We will create a CustomersExplorer application that will allow the user to display and edit the customers from the AdventureWorks database, Let’s start by creating new solution we will add a web application project called CustomersExplorer.Web, in this project we will have an Entity Framework model that exposes the customers in the AdventureWorks database (the EF model will use ADO.NET self tracking entities), we will expose the model through a WCF service that uses webHttpBinding. the service code is shown below
We will add three more projects to the solution:
1. CustomersExplorer.Core: a Portable Class Library Project that will contain the shared code to be used in the Silverlight and windows phone apps
2. CustomersExplorer.Silverlight: the Silverlight application
3. CustomersExplorer.WP: the windows phone 7 application
The layout of the solution should be like the following
The CustomersExplorer.Core project will be used by the Silverlight and the Windows Phone applications, so we will add a reference to this project to the Silverlight and Windows Phone Projects.
Next we’ll change the settings of the CustomersExplorer.Core
project. By default when you create a new Portable Class Library project its settings is set to target the .Net 4.0, Silverlight 4.0 and Windows Phone 7.0 frameworks, we will change this to target Silverlight and Windows Phone. Go to the properties of the project and click Change button in the target frameworks section
In the dialog, choose Windows Phone 7.0 and Silverlight 4.0
We need to add a reference to the System.Windows assembly, this assembly contains the ObservableCollection type that we need in the Silverlight and WP applications, the dll is located in this path “C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0\”
Next we need to add a service reference for the CustomersService, for some unknown reason If you tried to add a reference to the Customers service in the Portal Class Library project, the generated proxy class will not use ObservableCollection as the collection type, so we will use the SLsvcutil tool to create the proxy class, the slsvcutil tool is located in the folder “C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Tools”
Run the tool with the following command line
Take the generated file CustomerService.cs and add it to the CustomersExplorer.Core project, the other generated file (ServiceReferences.ClientConfig) must be copied to the
CustomersExplorer.Silverlight and CustomersExplorer.WP projects.
In the CustomersExplorer.Core project we will create the CustomersViewModel, which exposes a property Customers of type ObservableCollection<Customer> , and a property CurrentCustomer of type Customer, two commands are exposed UpdateCustomerCommand and DeleteCustomerCommand that forward these actions to the Customers WCF service.
The Silverlight application is very simple, it has a single page with no code behind, the page creates an instance of the view model
The main grid DataContext property is bound to the View model
A combo box is used to display the customers
and a bunch of Text Boxes are used to display the details of the view model CurrentCustomer property
Two buttons “Delete” and “Updated” are bound to the view model DeleteCusotmer and UpdateCustomer commands
In the Windows Phone 7 project the View Model is defined in the application resources, cause we will have two pages that use the same view model. The first page has a list box that is bound to the view model Customers property
The second page displays the details of the CurrentCustomer
Here are some screen shots of the running applications
You can download the source code from here
I uploaded the sessions recordings for our last event to YouTube, you can find the list here:
http://www.devlifestyle.net/content/DevlifestyleJune2011EventRecordings.aspx
I will be delivering a session on MVVM Thursday June 30, in the DevLifeStyle community monthly meeting.
To register and view the detailed agenda, click here
We are back again, join us on May 5,2011. I will be delivering a session on the new features in Silverlight5.
To register and view the detailed agenda, click here
On Last Friday 25th I delivered an online session part of the Second Riyadh Online Community Summit, here is a recording of the session Download
and here is the source code of the demos Download
You can find a list of the previous tutorial posts here
Continuing our RegistrationBooth Application…
It’s very important to collect the attendees feedback to help us improve the future sessions/events we might organize, we can go ahead and implement this functionality in the RegistrationBooth application. but in this post we will take a different approach, we will implement a Windows Phone 7 application that attendees can use on their phones to submit their feedback. Luckily for us Windows Phone 7 uses Silverlight as its development platform (along with XNA), the Silverlight version on Windows Phone is not the same one as the desktop version, think of this as a compact version that fits the phone capabilities.
Before we start creating the phone application, first let’s think how we will bring the data to the phone, in the case of the Silverlight application we used WCF RIA services (DomainService) which provided rich client experience for the Silverlight application, Unfortunately this type of rich client experience is not available “yet” for windows phone applications.
When we were creating the DomainService we had the option to expose OData end point.
If life was peachy we would just add a new OData endpoint to the Domain service we have and consume this service from Windows Phone, unfortunately the OData endpoint exposed from the RIA Service lacks important feature (query options) so we will not be able to make use of an OData endpoint over the RIA service, the solution is to create a new WCF data service, we will call it RegistrationBoothDataService
Change the Data Service to use our ADO.NET entity model and in the InitializeService method enable access to all the entities, the service should look like the following
Now build the project and give it a try and navigate to the following URL
http://localhost:57263/RegistrationBoothDataService.svc/
You will see AtomPub feed containing the names of all the entities exposed by the DomainService, if you want to see the records of a certain entity just append entityname to the above URL, for example to see all the attendees go to the following URL
http://localhost:57263/RegistrationBoothDataService.svc/Attendees
That’s what we need to do to configure the service on the server side.
Now moving to the client (Phone) we need to add a new project (for the Windows Phone 7 development tools go to http://developer.windowsphone.com) We will choose the Windows Phone Panorama Application project type, later we will see why we choose that.
To consume the OData service from the windows phone project we need to download the OData client library for Windows Phone 7 (http://odata.codeplex.com), when you download this library you will have the assembly System.Data.Services.Client.dll, Add Reference to this dll in the windows phone project, and you will have a command line tool DataSvcUtil.exe that we will use to generate a proxy class for the OData service, so we will run the command line tool passing the service URL
Once we have this class, we will add it to the windows phone project.
So why we chose the panoramic application? or what is a panoramic application anyway? according to MSDN “panoramic applications offer a unique way to view controls, data, and services by using a long horizontal canvas that extends beyond the confines of the screen”
So how we will implement our application UI as a panorama application? we will display the time slots horizontally and the sessions vertically, so the user will see the time slot in the header and below it a list of sessions, and by scrolling horizontally the user will move to the subsequent time slots and below each one the list of sessions in that time slot.
If you inspect the panorama application project we created, you will find that VS created a sample project with organized structure, where you have view models located in the ViewModels folder and the view models contain some sample data, and the XAML pages (views) are bound to these view models, we will follow the same structure in our application.
To communicate with the data service we need to define a DataServiceContext we will define this in the Application class
The first page will be the Login.xaml, for the sake of simplicity we will ask the user to enter the attendee Id only
The code behind is pretty straightforward, in the page constructor we initialize a DataServiceCollection of Attendees
When the user clicks the login button we populate this collection by a query that filters the attendees based on the supplied attendee id "/Attendees?$filter=Id eq {0}"
Once the query is loaded we check to see if there’s any attendee returned in the result, if there is an attendee we save the AttendeeID and navigate to the next page
The next page MainPage.xaml will display the sessions in a panorama view as we described earlier. before we build the UI let’s first create the view model, the first view model is the TimeSlotViewModel which contains two properties the TimeSlotHeader and a collection of Sessions, the view model also implements the INotifyPropertyChanged interface
Another view model we have is the MainViewModel, this is the view model that the MainPage.xaml will bind to, it has an ObservableCollection of TimeSlotViewModel objects, we populate this collection by performing a query against the DataService using the Uri “/TimeSlots?$expand=Sessions/Speakers” this query expands the TimeSlot entity to retrieve the associated Sessions and Speakers entities as well
The MainPage.xaml contains the Panorama control whose ItemsSource property is bound to the TimeSlots property of the MainViewModel, each panorama Item contains a ListBox that displays the Sessions available in that TimeSlot
The code behind the MainPage.xaml will set the DataContext of the page to an instance of the MainViewModel class, we will load the View Model data in the Load Event of the page, on the SelectionChanged event of the sessions ListBox we will navigate to the session evaluation page SessionEval.xaml
The view model for the SessionEval.xaml page is called SessionEvalViewModel this view model has a punch of propertyies we have a DataServiceCollection of EvalCriteria entities which contains the different evaluation criteria, and we have another DataServiceCollection of SessionEvaluation entities which contains the evaluation value for each criteria per session per attendee. there is another ObservableCollection of EvalCriteriaInfo objects, this collection is the one that is exposed to the UI.
the EvalCriteriaInfo class is a helper class that implements the INotifyPropertyChanged interface
The LoadData method of the view model, loads the EvalCriteria and SessionEvaluation collections and save them in the Application object
The Save method will update the corresponding SessionEvaluation entity if there’s an existing one, or it will add a new SessionEvaluation entity, the changes are pushed back to the Data Service by calling the DataServiceContext BeginSaveChanges method
The code behind in the SessionEval page will set the DataContext of the page to an instance of the SessionEvalViewModel class, we will load the View Model data in the NavigateTo event handler the page. When we click the Save button we call the Save method of the view model
The SessionEval.xaml page contains a ListBox that is bound to the Evaluations collection, each list item will have a group of radio buttons that display the evaluation values.
You can build and run the project to see the application in action
You can download the source code from here