Windows Store app development snack: Why is the store showing the wrong currency?
For more posts in this series, see the series index.
To the right is a screen shot from the Windows 8 Store app on my machine, note the app called Cozy and in particular its price, it is in dollars… and I live in South Africa where we use Rands. :/
The store settings are controlled by the Windows Region settings, so to fix this you need to change the settings, which you can get by search for region:
Once in the region app go to location and change it from United States to South Africa, or where ever you are:
Next time you launch the store (you may need to do a reboot) it will be in the right country!
Windows Store app Development Snack: A better architecture diagram
For more posts in this series, see the series index.
I have been talking a lot about Windows 8 recently and my slides have been using the architecture images Microsoft releases at Build 2011 & that awesome one Doug Seven created. However I have still found a lot of discussion exists even with those and they are showing their age.
I have tried to create a new one recently that addresses those issue:
- Age: DirectX can be used by VB/C# in addition to C++ now.
- Age: How does Windows Phone 8 fit the picture – note this may change, it is based on my assumptions and half info we have gotten.
- Discussion: Is WinJS = WinRT?
- Discussion: is .NET = WinRT?
- Discussion: Can I use my own JavaScript libraries like jQuery?
- Discussion: Can I use WinJS on the web?
- Discussion: Can I build desktop apps on Windows 8?
- Discussion: Can desktop apps run on Windows 8 ARM CPU's.
- Discussion: How does the language projection fit in?
Clearly this wouldn’t work in a single image – so I have created a slide deck that has a great overview image and also has build up experiences where step-by-step it builds the image with information and hopefully during that answers all the questions.
Windows Store app Development Snack: Series Index
This page is a list of the blog posts in my series of small articles related to things I am learning while building Windows Store apps. Existing snacks are listed below:
- A better architecture diagram
- Why is the store showing the wrong currency?
- Being a sharing target while your app is running
- Secondary tiles with text
- InvalidOperationException for Share & Settings
- Localised Resources & the Store
- Lock screen image pain
- Where is Microsoft-Windows-TWinUI exactly?
- Publishing your app, what has to be done before you publish?
- What is in a name?
- Knowing your (memory) limits, will avoid problems in the store!
- What the age restriction for apps means to developers.
- Stop asking for the SMS code when going to the dashboard
- Debugging a background task
- What do you get from being a lock screen app?
- Async & Sharing
- Feedback links in your app
- Simulator tips & tricks
- Changing the application theme from dark to light
- Debugging Share Target experiences
- Dealing with Async warnings
- Side loading apps for development purposes!
- The vastness of CPU time
- Background Colour
- File Type Association Icons
- Compress your images
- XAMLSPY
Future of certification with Microsoft.
Over the next 10 months the learning & certification program at Microsoft will change drastically. This post is really just a cheat sheet of the new certifications and exams that are coming, as always for the latest source of news on this check out: http://www.microsoft.com/learning/en/us/default.aspx
High level
At a high level the three tiers will change as follows:
- The MCP will certification will drop away and be replaced with MCSA (Microsoft Certified Solutions Associate). This applies to IT Pro’s & DBA’s – there is no MCSA for developers!
- The MCPD & MCITP will be replaced with MCSD (Microsoft Certified Solutions Developer) & MCSE (Microsoft Certified Solutions Expert) - yes, those are the same names from about a decade ago.
- The top level MCM will be replaced with MCSM (Solutions Master). I am not covering that in this post.
IT Pro’s
MCSA for IT Pro can be obtained in two ways:
- MCSA - Server 2012. Made up three exams:
- 410*: Installing and configuring Windows Server 2012
411*: Administering Windows Server 2012
412*: Configuring Advanced Windows Server 2012 Services - Can upgrade with the 417 exam from
- MCSA: Windows Server 2008
MCITP: Virtualisation Administrator
MCITP: Enterprise Message Administrator
MCITP: Lync Server Administrator
MCITP: SharePoint Administrator
MCITP: Enterprise Desktop Administrator - MCSA - Server 2008. Made up of three exams:
- 640: Windows Server 2008 Active Directory, Configuring
642: Windows Server 2008 Network Infrastructure, Configuring
646: Windows Server 2008, Server Admin - Can upgrade with the 417 exam from
- MCSA: Windows Server 2008
MCITP: Virtualisation Administrator
MCITP: Enterprise Message Administrator
MCITP: Lync Server Administrator
MCITP: SharePoint Administrator
MCITP: Enterprise Desktop Administrator
There are three ways to get an MCSE as an ITPro:
- MCSE Server Infrastructure: You need a MCSA – Server 2012 & the 413* (designing and implementing a server infrastructure) & 414* (implementing and advanced server infrastructure).
- MCSE Private Cloud: You need a MCSA – Server 2012 or MCSA – Server 2008 & the 246 (monitoring and operating a private cloud with system centre 2012) & 247 (Configuring and deploying a private cloud with system centre 2012).
- MCSE Desktop Infrastructure: You need a MCSA – Server 2012 & the 415* (implementing a desktop infrastructure) & 416* (implementing desktop application environments).
DBA’s
MCSA for a DBA can be obtained in one way:
- MCSA - SQL 2012. Made up of three exams:
- 461: Querying Microsoft SQL Server 2012
462: Administering a Microsoft SQL Server 2012 Database
463: Implementing Data Warehouses with Microsoft SQL Server 2012 - Can upgrade by doing both the 457 & 458 exams from any MCTS on SQL Server 2008
There are two ways to get an MCSE as a DBA:
- MCSE Data Platform: You need a MCSA – SQL Server 2012 & the 464 (developing Microsoft SQL Server 2012 databases) & 465 (designing databases solutions for SQL Server 2012).
- MCSE BI: You need a MCSA – SQL Server 2012 & the 466 (Implementing Data Models and Reports with Microsoft SQL Server 2012) & 467 (Designing business intelligence solutions with Microsoft SQL Server 2012)
Developers
There is no MCSA for developers so the three ways to get a MCSD are:
Web Application Developers requires three exams:
- 480: Programming with HTML 5 with JavaScript and CSS
- 486: Developing ASP.NET 4.5 MVC Web Applications
- 487: Developing Windows Azure and Web Services
- You can also upgrade to this from MCPD: Web developer 4 by doing
- 480: Programming with HTML 5 with JavaScript and CSS
- 492: Upgrade exam
Windows Store Apps using HTML 5 requires three exams:
- 480: Programming with HTML 5 with JavaScript and CSS
- 481: Essentials of developing Windows Store Apps using HTML 5 and JavaScript
- 482: Advanced Windows Store App Development using HTML 5 and JavaScript
- You can also upgrade to this from MCPD: Windows developer 4 by doing
- 480: Programming with HTML 5 with JavaScript and CSS
- 490: Upgrade exam
Windows Store Apps using C# requires three exams:
- 483: Programming with C#
- 484: Essentials of developing Windows Store Apps using C#
- 485: Advanced Windows Store App Development using C#
- You can also upgrade to this from MCPD: Windows developer 4 by doing
- 483: Programming with C#
- 491: Upgrade exam
*Beta exams currently - will change.
SMS Subscription Service: the scam & how I got my money back
This post is a departure from my usual technology filled posts, it is rather a personal story that affects many people that I think is worth sharing my experience. It is about these SMS subscription services where people signup for a service, and get content via SMS and then get billed monthly for it via there cellphone provider. I was signed up without my knowledge, billed and this is how I found out about this scam industry and got my money back from them.
The Story
It starts
The first indication I had was the odd appearance of “Content Charge” on my July invoice from MTN (my service provider). MTN uses such complicated names for services that it could mean anything but something said I should find out what it is. I called MTN and was told it was for a subscription service! I told the call centre agent that I had never signed up and wanted my money back. Unfortunately MTN couldn’t help me – all they did was cancel it that day and give me the details of who to contact about this.
The interesting thing about this is that to run a subscription service in South Africa you must be a member of WASPA, Wireless Application Service Providers' Association. WASPA has excellent rules about what is allowed and what is not allowed and the company MTN told me to call about a refund is thus a WASPA member – that company is called Opera Interactive. (I am not linking to these companies not because I do not want you to know exactly who they are, but I do not want to give them any search engine love).
I phoned and spoke to their Opera’s call centre (by now the 25th July) and they told me they could not help – as they only do the billing. All they can do is cancel the service and give me the actual companies details. That is right, Opera is not the company they are a middle man and, from what I understand, they let non-WASPA members “pretend” to be them, handle the interaction for billing with the service providers and take a cut of the profit!
Opera then told me to contact Mobmatic who were incredibly rude & told me to email as they do not help on the phone with refunds because, while they have a South African phone number, they are based on the UK - eventually they just hung up up me after I asked to speak to a manager. So I emailed then and then immediately logged a complaint with WASPA.
Lies, damn Lies
Nothing until the 31st July when Mobmatic emailed me a document (below) as proof I had signed up and told me that they wouldn’t refund me. So I looked over it and checked the details.
- Checked my SMS’s on my phone to see if there were any @ the dates/time specified. There was only one the 3rd July one, but considering I have never signed up I ignored as it seemed like a scam – however the key confirmation signups were not there.
- The phone model & even the browser string features did not match my phone.
I responded again with that info and asked for a refund.
Then nothing, no one responding until the 2nd August when WASPA said it had proof of me signing up from a company called Sprint (note: not Mobmatic), had asked for the service to be cancelled and then closed the case. Despite me asking for a refund, they ignored it – it really felt like WASPA had an automated system. I contacted them back and said I suspected the the “proof” was the same as sent to me and outlined the error in the “proof” and asked for a refund.
The scary part of the WASPA reply was “Since your unsubscribe request was not resolved using the informal process,” – informal?! What is informal about logging requests, getting reference numbers and so on. Just leads more proof that WASPA does it in an automated process.
WASPA contact Sprint again with the details I sent them and told them they had to provide a significant data in their response of they would have to go before an adjudicator.
The fight back
Oddly within 3 days of this I was phoned and offered a full refund and told I would be emailed and I could respond with my details. I got the email the next day (below) and it is almost what they said, except for a clause to protect themselves of any legal action if I accepted the refund.
I gave them the details and got my refund! WASPA contacted me a week later to confirm and I held responding for a further 3 days until the money actually arrived in my account (10 full days after I had spoken to them – what is this the 80’s). I told WASPA it is sorted out but urged them to launch an investigation into the companies and structures. That all was a few weeks ago and nothing has happened since.
Final Thoughts
Hopefully this shows you that it is possible to fight these people who are screwing the man in the street around and gives you some idea what to do. The short list of things to remember is:
- Your mobile provider can’t do much – so do not fight with them. Be kind, and get them on your side so you can get as much info as possible.
- Keep a log of all interactions, get names, reference numbers, times etc…
- Once you have tried the direct route with the companies, contact WASPA immediately. While they seem to be a tick the check box type organisation, you will need their help too.
- When you get “proof” go through it in detail. I would have likely just agreed with them that maybe it was a mistake, but the phone model was wrong & the ISP suspicious, gave me confidence that I was correct. These are not simple things to check, so maybe get your favourite geek to help.
- Do not give up – if you are right there is plenty of routes. From speaking to MTN during this, if WASPA fails you can still escalate to the consumer commission which does give you a lot of power to fight them.
While WASPA is a good idea, it seems they are underfunded and employing everything they can to automate the system and deal with the load as much as possible. It is clear in the requirement you need a double opt-in, however the opt-in system does not need to be on the device and thus can be forged – this is just a sign that while the good idea is there, they are not able to keep up to date with techniques that bad companies are using to steal money.
Hopefully you never have this happen to you, and if you do I hope this helps you fight these scammers!
The new .NET 4.5 feature every XAML developer will love
If you develop using XAML and you are using .NET 4.5 (i.e. WPF or Windows 8) then there is a feature that will make you smile a bit, CallerMemberName. XAML developers often implement INotifyPropertyChanged to enable updating of data bound fields. If are smart, you often wrap the raising of the event into a simple method you can call, for example:
public void RaisePropertyChange(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
This leads to code that looks like this:
private int ticks; public int Ticks { get { return ticks; } set { if (ticks != value) { ticks = value; RaisePropertyChange("Ticks"); } } }
There are some problems with this
- Refactoring – rename the Ticks property and even if you use the VS refactoring tool it won’t find the string in the method call.
- Magic strings – It is just a string so there is nothing to make sure that you spelt Ticks in the string the same as Ticks in the property name.
- Copy & Paste – If you copy & paste another property, you must remember to rename this string too.
The solution: CallerMemberName
.NET 4.5 includes a new parameter attribute called System.Runtime.CompilerServices.CallerMemberName which will automatically place the name of the calling member (i.e. method or property) into the parameter. This enables us to change the method signature to:
public void RaisePropertyChange([CallerMemberName] string propertyName = "")
Note: The attribute in front of the property & note we have also given it a default value – when using this attribute your parameter must have a default value.
Now we can change the calling definition to
private int ticks; public int Ticks { get { return ticks; } set { if (ticks != value) { ticks = value; RaisePropertyChange(); } } }
Now we have solved all the problems with the string in the method call! Go and enjoy!
Below is a file with a sample application to get you started (everything is in MainPage.xaml.cs).
Rapid Business Development: LightSwitch vs. Dynamics CRM vs. SharePoint vs. ASP.NET MVC
Over a year ago I wrote a post where I compared four technologies that can be used to build business applications rapidly. The original post was inspired by how similar a number of products have become over the last few years and more importantly how Visual Studio LightSwitch, which is a specialized rapid business tool development platform built on top of Visual Studio, is going to affecting the development eco-system. That post was written in the LightSwitch Beta 2 timeframe and the world has changed a lot since then – LightSwitch has shipped, not once but TWICE! So it is about time it got a refresh.
As with the previous post I am going to compare LightSwitch against Dynamics CRM, SharePoint & ASP.NET MVC Scaffolding. If you are not aware of these different products see my older post for a brief overview of them.
I think the differences between these four are very interesting and while each has its strong & weak points, this should definitely not be looked at as a pick one only post. There are many scenarios where you want to combine them for even better experiences.
To be clear that ASP.NET MVC is greater than ASP.NET MVC Scaffolding – you can do almost anything with MVC, however for this article we are looking at the concept of rapid development and comparing MVC with MVC scaffolding, scaffolding will give you a more rapid development with trade-offs. An example of this is databases supported, where MVC supports anything .NET does but scaffolding is a subset of databases.
I have broken down the issues into twenty two (!) aspects (key points we can compare them against each other) which are grouped into six scenarios to make it easier to digest. Each scenario starts with a list of the aspects and a brief description followed by a comparison table of those aspects. All the aspects are numbered so you can easily scan the table & if there are notes available the information will give you the relevant note numbers (see image below for more info).
Starting
- Ready to go out of the box: Once installed, can it do anything? Seems silly, but quick turnaround at the start, even if actual development is longer is important as it helps with prototyping, shows some rapid development and hints at how hard it is to learn (for me at least, if it does something I find I can experiment and learn quickly). Important to note, we are not looking at making it align with your company needs here, we just want it to do something. Eating CPU cycles & RAM is not something either.
- Northwind Style Sample development costs: This aspect looks further than the above aspect and looks at how much more would it take to get it tailored for a company, like the fictional Northwind, to have a XRM type system as it can be done across all four. Fewer $ signs means less time and/or resources for the functionality.
LightSwitch (LS) | Dynamics CRM | SharePoint 2010 (SP) | ASP.NET MVC | My Notes | |
Aspect 1 Ready to go out of the box | Medium (see note 1) | Fastest (see note 2) | Fast | Slowest (see note 1) |
|
Aspect 2 Northwind Style Sample development costs | $ (see note 2) | $$ | $$ | $$$ (see note 1) |
|
Finishing
- Cost for on-premise deployments: This looks at the money cost for licensing to get the solution up and running on premise (i.e. in your company). Licensing is, of course, flexible and this will vary based on who you are – so this is not indicative for all. It does not include such things as server hardware or common costs, for example operating system licensing.
- Deployment Complexity: Getting a solution up and running shouldn’t be difficult for an organization and a lot of time can be lost (and costs incurred) changing, upgrading and troubleshooting systems that do not want to be deployed.
- Deployment Documentation: When it happens that you need to deploy, having a wealth of documentation (be that video’s, best practice guides, troubleshooting material) is vital and plays a large part in getting a solution up that works every time.
LightSwitch (LS) | Dynamics CRM | SharePoint 2010 (SP) | ASP.NET MVC | My Notes | |
Aspect 1 Cost for on premise deployments | $$ Visual Studio licenses. No per user costs. (see note 2) | $ to $$$ Cost per user & cost per server. Visual Studio only if you are doing integrations or custom workflows. (see note 1) | $$$$ to $$$$+ Cost per user & cost per server. Visual Studio licenses for any serious work. | $$ Visual Studio licenses. No per user costs. (see note 2) |
|
Aspect 2 Deployment Complexity | Easy (see notes 1 & 2) | Hard (see note 1) | Hardest (see note 1) | Easiest (see notes 1 & 3) |
|
Aspect 3 Deployment Documentation | Yes (see note 2) | Yes (see note 2) | Yes (see note 2) | Yes (see note 1 & 2) |
|
User Experience
- Front End Technology: A good looking, feature rich UI can seriously ease adoption, and what we are looking at here is the richness level of technology used for the out of the box front end user interface.
- How good the standard UI looks: Completely subjective and really this is based on what I think looks best.
- Flexibility of out of box front end: In this aspect we are concerned about how easy it is to adjust and tweak the out of the box front end.
- Themability: Corporate branding is massive business and making sure the application out of the box looks like it is part of your business is important. It is important to note that both CRM & SharePoint can have custom front ends built which enable this scenario, but that requires extra development, and we are focusing on the out of the box options here and assuming you have the theme built already.
LightSwitch (LS) | Dynamics CRM | SharePoint 2010 (SP) | ASP.NET MVC | My Notes | |
Aspect 1 Front End Technology | Silverlight. Supports out of browser (desktop) & in browser (see note 1) | Web Just ASP.NET | Web ASP.NET under the covers with sprinklings of Silverlight | ASP.NET (see note 2) |
|
Aspect 2 How good the standard UI looks (very subjective) | Medium (see note 2) | Medium (see note 3) | Today: Very Low Future: Medium (see note 1) | Depends on your web designer (see note 3) | This is the most subjective aspect:
|
Aspect 3 Flexibility of UI development in the tool | High (see note 1) | Medium (see note 2) | Medium (see note 2) | High (see note 1) |
|
Aspect 4 Themability | Today: High Future: Highest (see notes 1, 2 & 3) | Low (see note 4) | Medium (see note 3) | Highest (see note 1) |
|
Extensibility
- API for integration: In the short term having an API means it is easy to get data into your new solution, in the medium term it means more ways to sync data and mash up your systems and in the long term it gives you a way to get your data out. It is vital to have an API.
- Marketplace: Apple kicked the idea of having an AppStore into reality for many of us and now having a marketplace to get extensions, customisations or themes is an important aspect. I am ignoring public sites, like Codeplex for example, and only focusing on an official marketplaces. Galleries are just marketplaces with no vetting, which means they are bigger but the quality bar is not guaranteed.
- Additional Authentication Options: Only your employees or customers (which may be everyone if you are lucky enough) should access your solutions. What do we get out of the box to limit access to the system? All four systems support Windows & Forms based authentication so I am only listing other options which are available.
- Permission Structure (Authorisation): Being able to control what parts of a solution you can access, once you have logged in is also vital and having a lot of flexibility in this space is also important as very seldom will one structure work for everyone.
LightSwitch (LS) | Dynamics CRM | SharePoint 2010 (SP) | ASP.NET MVC | My Notes | |
Aspect 1 API for integration | Yes (see note 2) | Yes (see note 3) | Yes - at least 5 of them. (see note 3) | Yes (see note 1) |
|
Aspect 2 Marketplace | Gallery available (see note 3) | Yes (see note 1) | Nope (see note 2) | Gallery available (see note 3) |
|
Aspect 3 Additional Authentication Options | Anonymous, Custom, Windows Authentication (AD) & Forms based. (see notes) | Claims based authentication via STS | Anonymous and more available through custom development (e.g. Windows Live). Claims based authentication (custom development required). | Anonymous and more available through custom development (e.g. Windows Live). Claims based authentication (custom development required). | LS makes use of ASP.NET Authentication Provider so it fits nicely into the technologies developers already know. |
Aspect 4 Permission Structure (Authorisation) | Very complete model for permissions. Minor coding required. (see note 2) | Fantastic out of the box option, plus plenty of extensibility if needed. (see note 3) | Good structure with many levels of customisation. Out of the box is very simple. (see note 3) | Basic support for it but can be extended through development. A lot of XML work though may be needed. (see note 1) |
|
Information Worker Features
- Offline support: Being able to work when you are not in the office is a vital need for many people. So how do these platforms enable that scenario? In theory it is always possible to build this, so we are just looking at the out of box offering. This scenario is focused on offline with a laptop, not a tablet or mobile phone.
- Easily Import Data: How do we get information into the solution, besides the API? Does the product make this easy with out of the box tooling?
- Printing: Despite the promise of a paperless office, it still is not the case and being able to print is important, even if it is just to XPS or PDF for invoicing.
- Office Integration: Integration into Microsoft Office products (i.e. Word, Excel, Outlook, PowerPoint, Access, Publisher, and InfoPath & OneNote) means that your IW’s will be able to work in the tools that they are comfortable with, easing adoption and productivity.
- Mobile Device Support: Information workers are increasingly mobile and having good mobile device support is a critical feature. When I look at this I am not just thinking about the simple, does it support it but also how well it supports mobile devices.
LightSwitch (LS) | Dynamics CRM | SharePoint 2010 (SP) | ASP.NET MVC | My Notes | |
Aspect 1 Offline support | No (see notes) | Yes (see notes) | Yes (see notes) | No (see notes) | Being able to work offline is important if you are a roaming user. LS & MVC offer nothing in this space while CRM & SP both offer offline via Outlook. |
Aspect 2 Easily Import Data (out of the box) | Nope (see notes) | Yes, from CVS. (see notes) | Yes. Multiple options. (see notes) | Nope (see notes) | In all cases there are tools and other ways to import data (for example LS has the http://officeintegration.codeplex.com extensions) but CRM & SP have an out of the box options. |
Aspect 3 Printing (out of the box) | Nope (see note 1) | Yes (see note 4) | Yes – Poor (see note 3) | Browser Level (see notes 1 & 2) |
|
Aspect 4 Office Integration | Low One way export to Excel in out of browser mode only. Others can be custom developed or use the OfficeIntegration extensions (http://officeintegration.codeplex.com) | Medium One way to Excel. Mail merge with Word & Outlook. Deep integration with Outlook is available too. | High Only Publisher doesn’t have some integration with SharePoint. Every other Office product does, some like Excel are one way while others like Access are two way. SP internally has features that understand Office files too, for example PowerPoint Libraries show thumbnails. | None Can be custom developed. | |
Aspect 5 Mobile Device Support | Today: Limited Future: Fantastic (see note 1) | Good (see note 2) | Okay (see note 3) | Fantastic (see note 4) |
|
Other
- Databases Supported: Where the data can come from for your application is a critical piece of the puzzle because it means the difference between building ETL solutions to handle moving it around if the source is supported or having it just work.
- Minimum Skills for Tailoring: Tailoring is what I refer to when I think of customisation of a system, without the need for a programming language. At some point you will need a developer but how far away that is and what can be done by a analyst or super user early on is important from a time to solution and cost perspective. Lower is better here.
- Can run in the cloud? If you not thinking about how you can leverage the cloud, then you are not thinking. Making sure the solutions can cater for the cloud is an important consideration. All four solutions can run in the cloud but how do they run is also important
- ALM Experience: How does this tool work with a full ALM experience? Can I unit test it easily? Will it go into source control easily and what happens when multiple developers are updating the same files? How about build server and development tool integration? All important questions in understanding a complete picture of that these tools cost or what you sacrifice with some of them.
- Requires Silverlight: Despite decent market penetration and ease of deployment in corporate scenarios, the requirement for Silverlight can be a deterrent to business, especially those where the CEO uses an iPad. This is not answered in the table as only LightSwitch requires Silverlight today (in the future it will support HTML). CRM has no dependencies, SharePoint has a fall back mode and if you used Silverlight with MVC it would be possible to have a fallback mode, provided you developed it.
- Data performance: This is also not in the table since it only applies to LightSwitch. For CRM, MVC & SharePoint I assume your front end (web) is always close enough, for example the same LAN, to the database but in LightSwitch you can really separate them. Here it is important to note LightSwitch is NOT great with data performance between backend & frontend out of the box, however with careful tailoring of data sources & screens you can greatly improve it. It sends massive amounts of data around. In my view it really does not feel optimised for low bandwidth WAN scenarios.
LightSwitch (LS) | Dynamics CRM | SharePoint 2010 (SP) | ASP.NET MVC | My Notes | |
Aspect 1 Databases Supported | Out of the box:
| SQL Server | SQL Server normally. With advanced skills can use external data sources with BDC. External content types can also be used in place of BDC with a lower skill set (power users) but at a smaller feature set supported. | For scaffolding anything supported by LinqToSQL or Entity Framework. | |
Aspect 2 Minimum Skills For Tailoring | Low (see note 3) | Lowest (see notes 1 & 3) | Low (see note 1) | Highest (see note 2) |
|
Aspect 3 Can run in the cloud? | Platform as a service using SQL Azure for database & compute instances for front end. Also supports the new Azure Websites options. | Software as a service: Can get it from Microsoft & Partners at a cost per user per month. | Software as a service: Can get it from Microsoft (Office 365) & Partners at a cost per user per month. | Platform as a service using SQL Azure for database & compute instances for front end. Also supports the new Azure Websites options. | |
Aspect 4 ALM Experience | Medium (see note 3) | Low (see note 3) | High (see note 2) | Highest (see note 1) |
|
Finally
A post like this is not possible to do without some amazing people providing feedback and I want to say a special thanks to:
SharePoint and protocol-relative URL's
Introduction to protocol-relative URL’s
Recently I learnt an amazing new trick, the protocol-relative URL where the scheme of a URL (the http bit) can be dropped and your browser will use the same scheme as the page’s URL uses. This is very useful for when you have a website on http & https. For example you can set a image URL to be
//demo.com/horse.png
and if you browse to http://www.demo.com
then it will load the image from http://demo.com/horse.png
, but if you got to https://www.demo.com
then it will load the image from https://demo.com/horse.png
– and this works with CSS & JavaScript too!
This is not some odd browser trick, this is in the standard for how URL’s work!
To be clear this is similar, but not the exact same as absolute & relative URLs.
SharePoint
SharePoint (and for this post, this has only been checked with 2010 so your mileage may vary on newer/older versions) does not follow this standard and actually breaks protocol-relative URL’s in two ways.
Front End
If you are working on the SharePoint UI and putting content in a content editor web part or an text column in a list and you edit the HTML and put in a protocol-relative URL SharePoint and hit save SharePoint will “fix” it by putting the current scheme in for you! So no matter what you do, on the front end you are completely stuffed.
Example
You put in <img src=”//sharepoint/horse.png”/>
SharePoint will change it to <img src=”http://sharepoint/horse.png”/>
(assuming your page is on a http scheme).
Back End
The other scenario is you are working with the SharePoint web services, for example the list service, and setting the HTML that way – SharePoint once again will try and “fix” things. Interesting it does something completely different to the front end. I guess the front end uses JavaScript and the back end uses some other code. It removes the attribute completely from the HTML.
Example
You put in <img src=”//sharepoint/horse.png”/>
SharePoint will change it to <img />
– yip the src attribute is gone.
Outlook 2013 Preview: The Case Of The Missing Email
Office 2013 is available in preview and being the fan boy researcher I am, I am running it. In the last week I have had an odd problem – it started when someone told me they had emailed me, but I never got it. I logged a call with the IT desk at work and they were able to find it in OWA (Outlook Web Access), and then suddenly I had it in Outlook too. I am over worked and tired maybe I just missed it – that was the thought I had, so I left it and went on believing I need a holiday.
Then yesterday I was in OWA and saw I had 25 unread while Outlook had 0 – I AM NOT CRAZY.
I logged a call again with the IT desk and got some awesome feedback – it is still too early to say it is fixed but I will update this post as I know more.
Patches
There is a patch already for Outlook 2013 available at: http://support.microsoft.com/kb/2737132
Not sure what it exactly does, but I am sure it is worth applying (blind faith that patches bring magic is a key requirement of a fan boy). It is worth nothing that Windows Update is not pushing this out – so you must manually get it.
Other sources of Help
There is a FANTASTIC page with 29 common issues for Outlook 2013 that is worth reading: http://www.howto-outlook.com/faq/outlook2013newandchanged.htm
One of those on their is about caching, which leads to…
Caching in Outlook 2013 is very different
Prior to 2013 Outlook would grab all the mail from the server and store it locally in an OST file giving you a locally cached copy of all the mail. Starting with Outlook 2013 that has changed, by default only the last 12 months are cached.
To change this to work like it used to:
Click File, then Account Settings ,then Account Settings…
Next double click on your Exchange account.
Here you’ll find a “Mail to keep offline” slider.
Move that all of the way to the right to select "ALL" and restart your Outlook.
Finally wait for it to update.
It is a preview
The last thing is a personal one – this is a preview, it is not promised to work. I have been so spoilt by great releases from Microsoft in the preview stages (Windows 8 & Visual Studio 2012) that I forget that it is a preview and could be broken. It is important to always have a backup & a way to verify it is working. For me this means I will be checking with OWA daily now.
Mythbusters: You should use an Array because it is the only collection that can be serialised
Another in my theme of investigating claims that to me sound wrong, this time that arrays should be chosen over other collections because only arrays can be serialised (or put differently, no other collection can be serialised).
For this I am assuming serialised means to XML, and it also means serialised easily. In theory anything can serialised as it just a concept, which is why I am assuming easily – i.e. no custom code outside of invoking built in framework serialisation.
Serialisation with XmlSerialiser
private static string Serialise<T>(T o) { var serializer = new XmlSerializer(typeof(T)); var memoryStream = new MemoryStream(); serializer.Serialize(memoryStream, o); memoryStream.Position = 0; using (var reader = new StreamReader(memoryStream)) { return reader.ReadToEnd(); } }
With the above code you can pass in an array and spits out XML. It also works perfectly with ArrayList & List<T>. This does fail with LinkedList<T> and Dictionary<T,K> which is annoying.
Serialisation with DataContractSerializer
The myth I think comes from lack of knowledge of what is in the .NET Framework, in this case thinking there is one way to serialise something when the framework ships with many of them. So lets use DataContractSerializer this time and see:
private static string Serialise2<T>(T o) { var serializer = new DataContractSerializer(typeof(T)); var memoryStream = new MemoryStream(); serializer.WriteObject(memoryStream, o); memoryStream.Position = 0; using (var reader = new StreamReader(memoryStream)) { return reader.ReadToEnd(); } }
Using this Array, ArrayList, List<T>, LinkedList<T> & Dictionary<T,K> are all serialised!
Myth Outcome
BUSTED! There is a simple way to serialise the collection classes in the framework – so array’s are not the only thing that can be serialised!