Sharing the experience search

Search sharing-the-experience.blogspot.com
Showing posts with label Development. Show all posts
Showing posts with label Development. Show all posts

Monday, May 19, 2014

@SPC_ORG @DougHemminger on #SharePointApp development

No more authohosted app!
MS announced that the Office 365 Autohosted Apps Preview program will end on June 30, 2014.
So now we have 2 left: SharePoint-hosted, provider-hosted.

App model to solve security issues of full trust solutions.

When to use the App Model
 -SPOnline
 -Strong JavaScript\Client side developers

Other recommended read: 

Note:
On Anonymous access for App - How to: Create apps for SharePoint that can be used by anonymous users


@SPC_ORG @helloitsliam on SP2013 Authentication & Authorization

 Claims mentality: there is no user, there is an attribute by Liam Cleary

Authentication = Verification of Claim (login, pwd) - is not on SP
Authorization = Verification of Permission (access verification) - going on SP

Authentication precedes authorization (except anonymous access)

Often mistake: "Too often we focus on Authentication and not Authorization"

Authentication Claims
 - wide support;
 - WF-Trust 1.4
 - SAML Token 1.1 AuthN
 - It was developed for Sign On
 - Federation
Already many providers
-Microsoft standard approach
- before we needed to write custom code to authenticaion

Claim =
1. Identity (AD, Google, Windows Live) +
2. Claim (Attibutes of the Identity) +
3. Token (binary Representation of Idenity) +
4. Relying Party (aka RP) +
5. Secure Token Service (STS)

What is Claims Augmentation:

  • Ability to intercept the incoming claims and transform to different outgoing claims
  • Add additional attributes
Why to use Claims Augmentation: - retrieve user attributes to LOB

Authentication methods:

1. AD is a classical method authentication.

2. Membership and Role Providers - a custom mechanism for authentication

3. Custom Identity Provider.
Requires Trusted Certificate for communication

4. Azure Control Service (Azure Windows AD)
for O365 - ADFS Type cloud based service

Oauth - is a mechanism based on "Trust"
You trust the app, the app has permissions assigned.
So you can access data that you (as user) don't have access, but app has.

Monday, April 21, 2014

#SP24 : #angularJS. Why not #knockoutJS?

+Jeremy Thake in #SP24S058 showed AngularJS basic for SharePoint 2013.
Meanwhile, I have asked people in the web conference room:
Why Angular over Knockout?
and here is the response:

angular is more than a data binding engine, which is what knockout is
 Angular has a different structure and appears to have more features ... at the moment knockout seems easier but like getting used to javascript its just a case of ... getting used to it 
the chart showing the "interest" in Angular exponentially bigger than the other frameworks ...
AngularJS is favored, due to the support of the community. Doing a few searches even around "leaks" shows the community support! 
off the bat, the concepts for service, factory and provider are not in knockout but mostly because there are other ways to do those things ... but that feels more like hacking than using out of box bits :  more directives and customizable directives/tags ... the syntax is different but seems cleaner ...   knockout focuses on purely data binding. angularjs provides a larger framework. either way, leveraging one over the other depends on the reqiurements, right?   if I am just binding, I am fine with Knockout ... but this framework potentially eliminates a lot of the JQUERY lines that I have to support the rest of the app  and here is another thing over knockout ... unless I missed something I can only have one "model" in applyBindings at a time ... this implies I can have many (multiple controllers) ... but I might have missed something advanced in Knockout ... 

What's your take on that? Is that true? Do you prefer knockout? if so, why?
I would love to hear your opinion.

 Back to @jthake main topic: AngularJs bacis
AngularJS facts:

  •  has concept: App, Directives, Service, Factory, Providers.
  •  comes from Google


AngularJs & SP2013?

  • to add  - <div ng-app="myApp">

You can't use templateUrl

  • Instead use JSRequest:



  • use Bootstrap UI


Resources:
SHAREPOINT 2013 APPS WITH ANGULARJS FROM BUILD CONFERENCE 2014

http://jsfiddle.net/ -to develop and collaborate on JS code.

http://blog.nebithi.com/knockoutjs-vs-angularjs/



Thursday, July 18, 2013

Simple concept: Jump start for developers of SharePoint 2013 App

[Question]:
I want to try SharePoint 2013 App Development.
Where to start?

[Answer]:
I am flattered if you are reading this post, even though MSDN is full of articles about this topic.

Here are following preparations steps before the development:

1. View "Developer training | Apps for Office and SharePoint"
http://msdn.microsoft.com/en-us/office/apps/fp123626
If you have limited time, focus on the Module 5 SharePoint 2013 app model for developers
 
2. Setup the env
 
 To install VS 2012
 
You need to install Microsoft Office Developer Tools for Visual Studio 2012 from
 
You need yo create your own Office 365 Developer site.

Developing apps for SharePoint on a remote system

Thursday, September 13, 2012

Simple Concept: How to search by managed metadata field or term?

[Question]: I have created a term and used it in managed metadata column. How can I search by term value to find any place where such term has been used?

For an example,
I have a managed metadata column "Project Tags" in the library.
I have an item in the library with value "eReview" in the Project Tags column.
I want to be able to search by eReview to find that item




[Answer]:
Once you have created a managed metadata column, you have to run a crawl.
Crawl will automatically  create a crawled property and managed property that look at the managed metadata column.

What you have to do is to check "Include values for this property in the search index". It will give ability to search by term title in the search.

In case you need to search byTerm id, use  a managed property value like this:

Where owsTaxIdProject is a managed property and term id - the actual term of id (in this case -  eReview).

You may ask 2 questions at this time:
1 . Why I need to search by Term id?
 - You may want to build a custom webpart to show all related content based on the select term.
2.  How do I know Term id?
One way to find a term id  is to go to the site collection hidden list Lists/TaxonomyHiddenList
Other popular option is to use seach refiner with the term that is interesting for you:
Select the value in the refiner and then look at the url of the search page:

Easy way to decode this - URL Decoder/Encoder



ATTENTION:
If you have several metadata columns in the several lists that look at the the same term set, but you call them differently (internal names in the different lists are not the same), the crawler will create several managed properties.
You want them unite. Find all crawled properties that have been created based on your managed metadata.

Hint: name of crawled property has a pattern. ows prefix means - custom metadata, taxId - refers to the type of column- Managed metadata. Hence you can find your all crawled managed metadata columns by searching withing crawled properties by name taxId.

And then map the crawled properties to the one Managed property.



Good luck with Taxonomy!

SharePoint sandboxed solutions are deprecated in SharePoint 2013

Yesterday, a new SharePoint developer was frustrated with limitations in Sandbox solution that he has to develop for SharePoint Online, which at this moment (September 2012) is on SharePoint 2010.

He send me an email with a link to Apps for SharePoint compared with SharePoint solutions and a glorious title SharePoint sandboxed solutions are deprecated in SharePoint 2013 Preview

It's totally understandable when you are trying  to find a way to get rid of , as I call it,  SharePoint development madness.
Let me explain myself. For me, SharePoint development madness feels like an internal feeling of frustration and hopelessness. It is rooted in deep sense of overwhelming.
You as a new SharePoint developer is constantly have an  impression that you have to know a lot beforehand in order to write a first line of code for SharePoint.
And I were there... not a nice place. SharePoint community calls it -a steep learning curve...
I have posted recently a quick note on where to start in SharePoint development for a newbie. It might help initially to catch some fundamentals.

If your case is that you have to develop something in sandbox for SharePoint 2010, but you have already heard a lot about SharePoint 2013 new development Apps you almost certainly feel left behind.

You feel cheated since MSDN says that Sandboxed solutions are deprecated in SP2013 Preview? Be hold!

Here is me perspective on this emotional issue:


As it says in Apps for SharePoint compared with SharePoint solutions  SharePoint sandboxed solutions are deprecated in SharePoint 2013 Preview in favor of developing apps for SharePoint, but sandboxed solutions can still be installed to site collections on SharePoint 2013 Preview. 

My impression that MS believes that APP can replace all functionality that is possible to implement in sandbox solution. But at the same  time, we don’t know what’s going to be a new hit in the version after SP2013.

MS doesn’t announce the release date for Sp2013. Some rumors say it might launch 1Q of 2013.

If you feel uncomfortable to develop server side code in Sandbox solution, the only option I can see is Client-Side development: Client-Side Access and Remote Access

I believe you can develop client-side logic (javascript) and deploy it via Sandbox solution.

To summarize, we have to stick with sandbox since we don’t have any other option at this moment. But you still have a freedom to choose how you will implement the logic (server side\client side).
Once we are over the hill and with SP2013, I would glad to see you moving logic out of the sandbox to APP if this is appropriate.

Business doesn't jump fast to a new version. I predict that we will have more clients with SP2010 in the next few years rather than with SP2013.

For more information on SandBox vs APPs in 2013:


Tuesday, September 11, 2012

Get Term Id from Managed Metadata Field in a Sandbox Solution


You are developing a sandbox solution where you want to work with Microsoft.SharePoint.Taxonomy.TaxonomyFieldValue.

You have noticed that you have an exception:

The exception is : System.RunTime.Serialization.SerializationException
Message : Type 'Microsoft.SharePoint.Taxonomy.TaxonomyFieldValue' in Assembly 'Microsoft.SharePoint.Taxonomy, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' is not marked as serializable.
Server stack trace: 
   at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
   at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
   at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
   at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
   at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.SerializeResponse(IServerResponseChannelSinkStack sinkStack, IMessage msg, ITransportHeaders& headers, Stream& stream)
   at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream)


You question: How do I get a value from managed data field?

Microsoft.SharePoint.Taxonomy.dll is not allowed in sandbox solution and that's why you're getting an exception. You can get string value of managed metadata field by calling GetFormattedValue.

But doing so, you will get a value from managed metadata field. 

var relatedNoteFldStaticName = {You metadata column static name}+"0";
item[ relatedNoteFldStaticName  ]

What it does - it pulls the related hidden notes field where Term Id is stored (SPSiteDataQuery in Sandboxed solution with multivalued metadata column)


Monday, August 20, 2012

Simple Concept: Where to start in SharePoint development?


[Question]: I am a complete newbie in SharePoint development. Where should I start?


[Answer]:


Here is what I recommend to read to build a solid understanding of SharePoint architecture and development. I would recommend to read highlighted pages and then dive into development.

I suppose the whole  highlighted  pages reading will take up to 2 days.: 

Understanding and troubleshooting SharePoint 2010 technology features and services -  pages from 6 to 14

Understandingsharepoint journal issue "Introducing SharepPoint 2010" by Bjørn Furuknap - pages from 99 to 152


SharePoint 2010 Development with Visual Studio 2010 (Microsoft Windows Development Series) - Chapter 1: Introduction into SharePoint pages 1-130

What about 2013?
here we are go: Simple concept: Jump start for developers of SharePoint 2013 App
Beginner's luck is on your side!

And full-blown collection of the SP book to get lost)

Need some a bird view on SharePoint main job types  - Developer, Administrator, Architect? - Become a SharePoint professional

SharePoint UX: Styling and Branding. Design implementation

Previous related posts:



Last day Kyle Schaeffer in his Styling and Branding class dove deeper into jQuery and how to use it to enhance User Experience in SharePoint portal.

Kyle said it clearly and easy to remember:


CSS is all about presentation

HTML is all about structure

JavaScript is all about behavior. (Jquery should enhance the interface but your basic structure should be functional even without jQuery)

Remember this and you design will be easy to manage.



The quick signposts to implement it in SharePoint:
Picture Library -> Content Query WP -> Item Style -> jQuery Script with jQuery Cycle Plugin

P.S. Item style is to change the presentation of the data

Tuesday, June 26, 2012

SharePoint 2010: Best Practices on SharePoint on-premise and Office 365 SharePoint Online

Some best practices on "How to develop SharePoint 2010 applications"

I found useful to know how Yaroslav Pentsarskyy suggested to organize SharePoint 2010 project in Visual Studio 2010:
 - Platform project - core components;
 - Content project;
 - Service project;
 - Branding project.

The first chapter gives you an idea how you can organize SharePoint project structure, including the deployment project.

And absolutely agree with the following:

"There is one more benefit to keeping those artifacts separate; when it comes to bug fixes or functionality upgrades, it’s easier to replace one dll that keeps all of the supporting functionality than replacing core platform dll"

Here is one more note on the book "Top 60 custom solutions build on Microsoft SharePoint Server 2010":
All demonstrated solutions are Farm Solutions.


I have decided not to buy the book, since in the near future I will not work with SharePoint 2010 on-premise.
Maybe I will work with SharePoint Online!
For more best practices on SharePoint 2010 development: SharePoint 2010: Best Practices


So, I needed to investigate what should I know before diving into SharePoint Online development.
I have found a great white paper: "Office 365 SharePoint Online –Architectural considerations" byJeremy Thake
"When considering an activation of SharePoint Online as part of your SharePoint strategy, the main architectural decisions which need to be made should focus on the following areas:
 Capabilities 
 Workloads
 Authentication
 Permissions
 Creation of a cohesive end user experience
 Information Architecture 
 On-boarding and Off-boarding of data
 System Requirements
 Architectural Approaches"
Restrictions for SharePoint Online:
- no farm solution;
- no FAST Search;
- no developer dashboard;
- no SharePoint Timer Jobs;
Business Connectivity Services Profile Page;
Audit Opening and Downloading;
 - Records Center (but you still can use in-place record management);

Good news - you can use SCOM 

"A general pattern in the industry has already been to leverage client side code (ECMAScript) and the client object model or Silverlight to bypass some of the limitations."

The "Architectural consideration" is a great and concise article, but in some places info is not up to date.
For example the article states that you cannot use BCS, but  The service update in November 2011 enables developers to create BCS applications by using SharePoint Online. You need to use WCF service deployed on Windows Azure.


SharePoint Online storage limitations:
SharePoint Online for enterprises: key features and specifications
SharePoint Online Collection Sizing and User Limits



In summary, the aforementioned limitations are outlined below:
 -  Size limit of a site collection (100 GB), number of site collections (300) and maximum storage in 
a tenant (5 TB).
-  Record Center capabilities not offered (but you still can use in-place record management)
-  Mail Enabled Document Libraries are not supported, impacting Scanners & Scanner software
-  PDF documents cannot be opened in the browser
-  Word Automation features not available
-  Auditing does not capture which documents are opened and closed

-  Business Intelligence Center, SharePoint PowerPivot, PerformancePoint Services and integration 
with a reporting server not supported
 - Only Sandboxed Solutions, or browser centric applications based on technologies such as Silverlight, jQuery and Client Object Model can be used.



Further reading:


Appendix B: SharePoint Online and Office SharePoint Server Feature Comparisons



SharePoint Online Developer Resource Center 
SharePoint Online Administration


SharePoint 2010 101 Code Samples

Friday, June 22, 2012

Visual Studio 2010 and BDCM: How to build and deploy



During upgrade from SP2007 to SP2010, we have decided convert 2007 BDC files into 2010 BDCM files.


We did it using hybrid BDC upgrade approach


The exported BDC files I have added to SharePoint project in VS 2010
Creating a Business Data Connectivity Model


The article says each SharePoint project can contain only one model.


It's not true.


You can have as many models as you want in the one visual studio 2010 SharePoint project. 
Just create one project item per feature.


For an example, if you want shipped 10 BDCM models, create 10 features in the project.
Place one project item with BDCM model in each feature.


Identical feature property values from all project items are merged together in the feature manifest. However, if two different project items specify the same feature property key with non-matching values, a validation error occurs.



<Property Key="ModelFileName" Value="BdcModel1\BdcModel1.bdcm" />
So, remember - One project item per feature.
 
Note:
As you may know 2010 SharePoint Foundation allows to use BDCM. But there is one caviat with developing BDCM models in VS 2010 for SharePoint Foundation:

BDC deployment relies on feature event receiver to take care of actions like model import/feature activation. Unfortunately the assembly where the feature event receiver lives does not ship with  SharePoint Foundation. And the reason for that is same assembly has other functionality Microsoft decided not to ship in Foundation.

But, you have a solution to make it work:
 Deploy a BDC Model project to SharePoint Foundation 2010 using Visual Studio 2010
  Publish BDC Model project to SharePoint Foundation 2010 with Visual Studio 2010

Thursday, June 21, 2012

SharePoint: How to build SharePoint application wrong. SharePoint Karma



Whenever I refer to SharePoint development strategies, I always end up with SharePoint deployment strategies.


I am aware that in SharePoint world there are people who prefer to do customization via SPD and without a traditional development cycle.


This post for others... who wants to preserve a development cycle and who wants to have a fully automated and predictable deployment:
- via wsp files (or sandbox solution)
- and specific actions (like a feature activation) which is shipped as  PowerShell\stsadm commands. (Best Practices: Sharepoint Application Development Life Cycle)


How do you choose between content customization and code-based approach?
If you need to deploy anything on the server, that's a sign that's your approach is code-based customization.


Here is a quick SharePoint karma guide for code-driven development for SharePoint. Each wrong action will lead to a specific strong deployment reaction.
All described actions I saw done by developers. I hope this quick guide helps you to avoid pain of SharePoint deployment.


Action: Create a site locally manually. And then develop some other features.
Reaction: Deployment will be hard to other environments. You will need to re-create a site manually and hope that you haven't skip any steps.
Recommended action: create a custom site definition(onet file).It was a recommended approach since 2007. But I heard it's not what will be recommended in SharePoint 15. In SharePoint 2010 you have 2 options:
 - a web template that is shipped via sandbox solution and placed in the content db;
 - a site definition that is shipped via wsp file and deployed on the server.
Custom web templates (the preferred approach) and custom site definitions (which in some scenarios you must do)


Action: Create stp to deploy first version of the site. You know that in the future you need to change the site structure.
Reaction: Once you have created a site from a template, there is no way you can change structure via stp
Recommended action: Use site definition and feature stapling approach for further releases. In SP2010 you can make the changes for some features that is shipped via site definition using Feature Upgrade


Action: Build a wsp, place in it only eventreceivers for specific list with expectation that the list will have appropriate structure (someone should change the structure of list and then register the eventreceiver)
Reaction: As you can guess by action, you will not have stable behavior on the environment,since half of the deployment should be performed manually. I can only hope that you keep your deployment documentation up to date.
Recommended action: If you need to develop an eventreciever for the list that should have specific fields or content type, you should describe the list in the list template feature. Package the list template, list template instance and eventreciever register features as a bundle in wsp file.

Action: Every time is time for deployment - create a new site as a blank site - and create all object manually, copy files from original site to the destination and than replace hard-coded id in the file - manually
Reaction: It's messy and prone to errors.  There is no way to make such site automatic deployable
Recommended action: consider best practices of SharePoint development, use packages to deploy and feature upgrade for further releases. In case you need make some data structure changes - use SharePoint object model, write the code and package as a ReleaseFeature ( Feature stapling). This approach will allow you to keep track of all your structure changes on the existing site, plus you still can use the site definition to create a new site, and after the creation the feature stapling will do change work as it did for the existing one.


Action:Write a code to send an email\interact with end-users without environment variables
Reaction: If you miss configuration settings for your interactive logic, you miss control over it. You may end up with end-user notification sent while you are testing the application.
Recommended action: Choose approach that suits your needs best:
- property bag on the specific object (site, list, item ,etc ) (One of the way how to handle the property bag - SharePoint Property Bag Settings 2010)
- hidden list with environment variables.


Action: Manually copy to the environment all custom master pages and customized OTB SPD web parts
Reaction: It's messy and prone to errors.  There is no way to make such site automatic deployable
Recommended action: Package master pages in a feature to deliver to the server.
Regarding OTB SPD web part -there is no easy way, since the web part holds the id of the specific object from where the data is pulled. So this object will not be valid on other environment ( but in case you have developed on the copy of the prod content db, you are fine)
We have decided to develop a custom feature receiver to deploy such web parts - File provisioning: a hard-coded list id replacement


Action: Deploy report files with data source - a list asmx with hard coded List ID
Reaction: If you developed the data source (a list) that doesn't have the same id as in prod, you will have to manually change the data source after deployment.
Recommended action: To make it transportable - you can think of msi installer with parameters to swap hard coded value to a new one.


Action: Create a site groups manually and have the logic that gets these groups by IDs
Reaction: It’s prone to errors. If someone delete the group and then create a new one with the same name. You hardcoded value in the logic will break.
Recommended approach: Try the approach:
- create custom code feature which creates the groups. In the logic verifies if the custom groups exist and the permissions for them are right. If the groups don't exist, re-created them in the code.

Action: Create your own field as a counter that looks at id and has some increment value in the config file. Every time user deletes the records, you have to change the increment value in the config file.
Reaction: What???
Recommendation: I saw such application that works several years in the Prod with regular request from developer to change the increment. Last time I have checked the increment was gravitating to number 42)).
So never do such thing. This is approach is plain wrong. If you need,for some reasons, to keep ids for list items in strict order and you don't want to skip a number even though the user deletes the item and your next SharePoint id will not be subsequent to previous one, consider:
- to create a calculated field;
- to implement event receiver on the updated\created to keep the counter up to date.


And overall bad actions:


Action: Developer's objection: “It’s working on my local machine, so it is supposed to work everywhere”
Reaction: Depends on how you thought about implementation plan (if any), you may end up with the code that will work nowhere except your local machine.
Recommendation: Before you start coding for SharePoint, think through how you see your changes will be deployed.


Action: Administrator's easy fix: “If on the feature on the Prod gives you a headache - uninstall  the feature”
Reaction: Some sites will may lose the functionality that they needed from uninstalled feature.
Recommendation: Analyze what uses this feature 



Action: Project manager accusation\question: "This is sign of careless and sloppy work. How can we fix it?"  
Reaction: A team will not collaborate to fix the issue since they are considered careless and lazy
Recommendation: Respect the work of others, be aware the world is not perfect, we are here to make it work at some extend. Ask you question in the polite way to get a faster and constructive answer.



Good deeds to you and light consequences.

Tuesday, May 29, 2012

Windows 8: Developer Camp


Trying to expand my view beyond SharePoint. Here is a first step:
http://blogs.msdn.com/b/cbowen/archive/2012/03/07/windows-8-developer-camps-coming-soon.aspx

Microsoft hosted a free event for developers to show the possibilities and steps for implementation of Windows 8 applications.

Here are quick notes from the camp:


Building Metro-style application


"Metro design"



  • "Content before control". Hide your controls  on the local bar at the bottom, global bar at the top;
  • Layout is critical. Microsoft issues a design guidelines. Become accustomed  with navigation and gesture language;
  • Never block UI, use  async calls;
  • Seamlessly transition tablet app to desktop ; Metro app is built for desktop, mobile devices, you don't need to adjust the code to run on the different form factors;
  • Only one app at one time, all others get suspended (5 sec to get to suspension mode); But if App is terminated, in this case you don't have time to save the state; suspensions gets all threads gone.
  • Metro apps talk with each other via contracts, no shared data; Use the right contracts;
  • To install the metro - via The Windows store only;
Win RT

 -  HTML\Javascript, C# \VB. net, C++ - first class citizens -  all have the same perfomance because of the Projection;
Language projection to run Win8 API (via WinRT)
Projection for .Net - CLR;
Projection for Javascript - Chakra;
WinRt is to eliminate Interop Code.


Metro principles for HTML\JS and .Net
[The notes from Win 8 At Night: Everything web developers must know to build Metro style apps]
IE 10 implements CSS3, HTML5 standards.
IE10 has 2 modes in Windows 8: Desktop version and Metro version.
WinJS - a Microsoft library that allows to call WinRT APIs (via Projection for Javascript - Chakra).

Using JavaScript you can access local resources for the Windwos 8 (ex, camera). Remeber that user has full control over this access and anytime he can deny the access. Plan your code accordingly.

NOTE:
Metro version of IE10 can't have plugins (flash, silverlight won't work) , but non-Metro version (Desktop version) of IE10 have plugins

Since IE9 the browser improved performance via using GPU.

Metro-version of IE10 uses WinRT to get access to local resource to get better performance, no code executed in the browser, it is in WinRt environment

In Javascript for Metro style app  async calls are called promises.

Visual Studio 11
What's new:
 - Templates for JS projects;
 - Debugging on the tabled via network on the developer's machine;
 - XAML tools ( from the blend)  (Full  Blend functionality) is available in VS11


New Metro style controls and experiences:

Text controls
 - password control with reveal button (while user touch the reveal button, the password visible in the clear text)
 -  text prediction

Commanding controls:
Flyout at the right bottom corner instead of the message popup.

Images:
You can have several copies for different resolution. The special name for them gives Metro engine to pick the right one for the specific form factor.

Gesture control. There are of the box. But you can  use MSGesture to develop your own.
MSPointer for multitouch.

Animations:
to add depth and dimension to the app, to give visual feedback


Contracts:
Search throughout all apps
Share (via Share broker - it's looking for the type of the shared package and find the apps that can understand this type)

If you use your own custom control, remember that a user can turn the tablet over.

App Tiles and Notifications:


Basic, Live Tiles - you have 30-40 tile templates on dev center. You can cue the tile updates
Toast - a notification outside of the app context (as an example, from Cloud).
Note: there is no design view for developing toast notification.

Windows Notification service is engaged in case you need to push notification to the app that is not running. Enables delivery of tile and toast notifications over the internet.

Windows Notification services is a free cloud service. To make use of it, you have to build your own cloud service (ex. Azure) that will make use of the Windows Notification Service. Which in its turn push notification back to Metro Style app. Your app should be registered in the windows store to get a client secret and package security id to authenticate to Windows Notification service.

Queue of notification is 5 element long. You can use badge notification for quick notifications.

Windows store:


The windows store is not yet open.

Ranking -the more users use your app, the higher ranking
You can measure and re-valuate the program before to send to approval to Windows store. You can run submission kit (already available) before submit to the Windows store. The windows store for Metro-style app only. Marketplace stands alone.
70% revenue goes to developer
once you app makes 25000$ - revenue goes up to 80%
You can offer for free or for money.
Min price -  $1.49 up to $999.99

There are several steps for approval:
Pre-processing - 1h
Security lab - 3 hours
Technical compliance - 6 h
Content compliance -5 d (human)
Signing and publishing - 2 h
Release

The Windows store provides analytics


Links:
http://msdn.microsoft.com/en-us/windows
http://msdn.microsoft.com/library/windows/apps/hh779072
to register you metro style app before the official release to get  2 year free in the Windows store:
https://win8.msregistration.com/login.aspx
(p.s. even you have your windows account, you have to create a new one for this)
https://manage.dev.live.com/build?wa=wsignin1.0
http://win8maap.com/

#win8app - to follow the conversation on Twitter

http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx
http://msdn.microsoft.com/en-us/library/ie/hh673549(v=vs.85).aspx

http://www.rhok.org/ - want to code for charity?