 |
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
 |
|
|
|
|
|
|
|
.Net / Workflow Foundation / Silverlight Evangelist |
|
11/10/2008
Silicon Valley Code Camp 2008 Presentation
This weekend I had the opportunity of presenting some of my ideas around a reusable framework for using Silverlight applications within ASP.Net web forms at the Silicon Valley Code Camp
It's a pretty exciting area that I think is going to evolve quite drastically over the next year or so as people look to. | 
| Leverage the industry expertise in ASP.Net whilst looking to increase the usability / UX of web applications. |
Below you will find the Code Samples and the PowerPoint slides.
9/22/2008I'm a big fan of Windows Media Center. I had the XP version and then upgraded to the Vista version some time back.
Recently I was all too easily convinced to purchase a new Hi-Def camcorder – the Cannon Vixia HF10
This is a sweet camera and I'll soon be picking up a nice underwater housing to see how well this thing works when I scuba.
| 
|
It was only natural to want to see my video clips using Media Center, but PC support of the AVCHD / Media Transport Stream Extension is not native so it took a few components to get things going.
First, we add support for viewing the Video stream in Vista by using FFDSHOW.
Then we simply install the Media Center Plug-in .
Honestly, it's that simple! Now when I copy my video clips from my camera I can simply browse the "Stream" directory and view my video clips.
|
6/26/2008
There have been many non Microsoft tools built to help with documenting API's and SDK's from the XML attributes applied to code. More recently, Microsoft themselves have started to tackle the problem via the Sandcastle product.
For some reason it seems that more and more products from MS are command line based, so as an accompaniment to this tool there is a neat GUI project available on CodePlex.
I found the setup to be a breeze and the output is very cool – the CHM links directly to MSDN documentation for known Microsoft types.
| 
|
12/17/2007
I was recently pondering the best way to parse "HTML" text in JavaScript. To be more specific I was actually trying to parse an RSS feed and get to the <description> tag. I needed just the text so I could create a Silverlight TextBlock and display in my own fashion.
Here's the type of thing I was trying to parse:
<description><div><b>Title:</b> Your customers' laptop data could be at risk. Check out the Data Encryption Toolkit for Mobile PCs.</div> <div><b>Description:</b> <div>The Data Encryption Toolkit for Mobile PCs provides tested guidance and powerful tools to help you protect your customers' vulnerable laptop data. The methods outlined in the toolkit are easy to understand, and show you how to optimize your customer data protection strategy using two key encryption technologies: Microsoft BitLocker Drive Encryption and the Encrypting File System. </div></div> <div><b>URL:</b> <a href="http://go.microsoft.com/?linkid=7792650">Learn more.</a></div> </description>
Not the most elegant string to parse! So I started off down various roads, String.Replace(), RegEx etc. None of which seemed too great a solution, but probably not much else to go at in JavaScript.
Then I started to remember that when I looked at the HTML DOM objects in the Studio, the innerText property of any element I looked did exactly what I was after. So a few lines of code later I had what is probably the simplest solution going! Create a new DOM element, set the innerHTML using my text, and then reference the innerText.
Where description contains the html text above:
var descNode = document.createElement("div");
descNode.innerHTML = description);
this._description = descNode.innerText;
10/29/2007
Over the weekend I presented "Silverlight 1.0 Here and Now" at the Silicon Valley Code Camp. It's an all volunteer based event and was very well attended with ~ 400 attendees on the day I was there.
It was great to see my session was standing room only, just going to show just how much momentum and interest Silverlight is getting in the community!
| 
|
It was also great to see the Adobe Flash guys attending and asking very searching questions!
Foothill College, where the event took place, is now also looking into offering a Silverlight class to students.
My presentation and sample code can all be downloaded here.
10/12/2007
I am a regular visitor and poster on the Silverlight.net forums. Most of the stuff on there is really great information; however, recently I have noticed a really big misconception about what Silverlight is.
Silverlight is a browser plugin. It runs as part of the HTML Document and becomes part of the DOM object. It essentially extends the browser by allowing for a much richer UX that is typically found in normal HTML/CSS.
But Silverlight is not an application to itself – It cannot run alone. Version 1.0 gives it a programmability model of JavaScript. Version 1.1 is extending the programmability to include a sub set of the .Net CLR, meaning you can program against it using languages such as c#.
I keep seeing questions like "Can Silverlight display Flash Videos", "Can Silverlight do speech synthesis", "Can Silverlight make coffee" … Ok so I made the coffee one up but you get the idea.
Because Silverlight interacts so well with the DOM, you can hook into its events and do anything you could do in JavaScript (for 1.0), and anything offered by the .Net/CLR functionality if using version 1.1.
|

|
I am often asked how to get the parent Canvas for a current control within Silverlight. The answer is a very simple JavaScript function that "walks" back up the XAML tree until it reaches the canvas:
function findParentCanvas(currentObject)
{
while (currentObject.tostring() != "Canvas")
{
currentObject = currentObject.getParent();
}
return currentObject;
}
The same function could easily be adapted to look for any specific type of Parent container by also supplying the name of the type to look for. 9/25/2007
Nothing special here - just a link I found that tries to explain the very ambiguos Silverlight Error Codes.
I especially like this one:
1001: usually AG_E_UNKNOWN_ERROR (yeah, thats really helpful)
9/12/2007
|
I have spent a little time recently trying to figure out a way to see my current XAML structure for my Silverlight controls. I am doing a lot of dynamic control creation using CreateFromXAML and adding to other controls.
In order to debug it's almost imperative I be able to see my DOM/XAML structure.
I am lucky enough to be on a training course with PluralSite this week and once thing I found out today allowed me to build my dynamic XAML structure!!
|

|
|
By using the tostring() method on any Silverlight object, you will get back its type. So by building a simple recursive routine I was now able to represent my entire XAML in a tree structure.
You can download my utility class here. Include a reference to this JS file in your Html page and then invoke the getXamlTree function passing in a Silverlight Object. This will return the tree in a very crude HTML structure which you can just set to a DIV or similar!
I need to work on the UI some more, but the fact that I can now see my XAML is huge! | 9/7/2007
|
Silverlight 1.0 is out in all its glory. IMO it's just a great environment and opens up a world of possibilities for visualization within web browser applications.
But, for those of us coming from ASP.Net, there is the expectation of having an out of the box, rich array of controls that we can simply use. This is not the case with this 1.0 product. |

|
Silverlight gives you the framework to create most anything you can dream up, and it begs the question as to whether we should be using the "common"/"standard" visualizations anyway! Should we just use a Button, as we know it from ASP.Net or should we create something a little more unique? That debate aside, I have created a framework for adding custom controls to a Silverlight surface.
My big priorities when creating the framework were to abstract as much of the JavaScript/Xaml etc. as possible from the calling app. I think it turned out pretty well!
My first control is the combo box, and you can download it here – This will give a complete VS 2005 project that will run the sample app.
Here's what you need to use the controls in your own app:
-
Place the following files in the ROOT directory of your project (I am working on a way to customize this)
- VertigoSLUtils.js
- VertigoSLCombo.js
-
Vertigo.SLCombo.zip
-
Reference the VertigoSLCombo.js in you HTML page
-
In your Silverlight Scene JS, create an instance of the Combo Control Helper
- _vertigoComboHelper = new Vertigo.SLCombo(plugIn, createVertigoControls);
Where:
- In your Silverlight Scene JS, implement the createVertigoControls function to create instances of the controls and add to your canvas:
function createVertigoControls()
{
var newCombo = _vertigoComboHelper.createControl("combo1", 75, "white", "1", new Array("5","4","3","2","1"), "Arial", "12", null, "blue");
newCombo["Canvas.Left"] = 50;
newCombo["Canvas.Top"] = 300;
myCanvas.children.add(newCombo);
}
And that's pretty much it! Have fun and please let me know thoughts / ideas etc …
| Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /personal/dbritton/Blog/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /personal/dbritton/Blog/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
|
|
|
|
|