Friday, May 29, 2009
hulu Desktop
I may be able to scale back my TV subscriptions with all of this great content on the 'net/
Cheers!
Tuesday, May 12, 2009
Hi, I'm a Mac...
Post upgrade the machine is quite usable, but I think a CPU upgrade is in my future. And the reason for the switch? Windows failed me too many times. I still use Windows (ver 7) at work, and I have a Windows box at home, just in case. But my daily non-work computing is all on the Mac now. Maybe once I upgrade to a Core 2 Duo I'll throw VMWare on it and ditch the fulltime Win box forever.
Cheers!
Friday, May 08, 2009
Foxmarks = Xmarks = Greatest Thing Ever!
It's a tool to allow you to sync your bookmarks on one machine to all of you machines. And the best part is it works on every platform I've tried it on so far. OSX and Safari, check. Windows 7 and IE 8, check. Ububtu 9.04 and Firefox 3, check.
Simply amazing. Only problem is they somehow got reordered. I blame IE 8.
iPhone OS 3 Beta 5
Wednesday, April 22, 2009
Planet of the Dead
Cheers!
Monday, April 20, 2009
Windows Free
So what changed? Virii! I have always had PCs and have never used or needed anti-virus software. The few times I tried it it seemed to always make things worse. Slower running machines and overall poor user experience. Well, in the last few months my system has been brought to it's knees several times by nasty little bugs. And it's not my fault! I blame the kids these days. They have no idea how to be careful net citizens. Apparently they listen to warnings about computer viruses and trojans as well as they do our warnings about sex and drugs! So after three rebuilds in four months I had to make a change.
I am now running Ubuntu 9.04 on my work laptop as well as my home desktop. So far everything is working perfectly. I still have my Windows 2008 VMs for doing dev work locally, but I do most everything via RDP on real Windows Servers. I also bought a Mac Mini for the family to use for general computing tasks that are not handled elegantly on Linux (ie iPhone sync and games for the kids).
I will really miss you Windows. Maybe we can hook back up one of these days, you know, for old times sake?
Thursday, March 12, 2009
Convergence 2009
Well, I just got back from attending Convergence 2009. It was a pretty typical MS conference. Bad food, lots of walking and moderately useful sessions. We did get a few nuggets of info from each session. The CRM/SharePoint session was by far the best. I will definitely be combining the two in the near future.
Adventures in New Orleans
Having just returned from my first trip to NOLA, or N’Orleans as they call it, I have a really funny story that I’d like to share. Now, for those who are hoping for something tawdry, well you’ll have to look elsewhere. I was a good boy. This story is however quite funny.
So, like all Microsoft conferences there are lots of after-hours receptions and ‘events’. These things usually involve an open bar and a barrage of Microsoft salesmen and partner salesman harassing you about buying/upgrading/implementing some new software. Well, after one beer my co-worker, Gavin, and I had decided we’d had enough and decided to make a quick, and unobserved exit. Once free from the clutches of the beast we set about trying to decide where in the big easy to go and grab a bite for dinner.
Rather than walk around town till something came to us we decided to stop in at a bar we were passing and have a beer or two while we pondered our options. Now this bar looked like something you’d see on Bourbon St, although it was nowhere near there. Typical French Quarter architecture with the large wrap around balcony on the second floor. Gavin decided it would be much cooler to be up on the balcony than on the street, so up we went. Upon reaching the top of the stairs we were confronted with balloons and a table that read ‘Friends of Joe Landry Election Committee’. Well, it seemed they were having some sort of private party upstairs, so I turned to leave. This is of course where the story gets good. Gavin marches up to the table and signs us in, gets us a couple of nametags and heads for the bar. ‘Wow’ I think, but decide to just roll with it and follow him to the bar. We grab a couple of beers and head out onto the balcony. After finishing the beers Gavin decided to head back in for something a little harder, and why not. It’s all on Joes dime! So we head to the bar again so he can get his double Patron on the rocks. As we turn to walk away from the bar we run into Mrs. Joe Landry. She turns and introduces herself to us and asks how we know her husband.
At this point my mind totally blanks out. I have no idea what to say. Gavin however spins a wonderful yarn about how our co-workers at the local branch (we actually do have a branch in New Orleans, so not really a lie) told us about how great Joe is and that we should go out and support him. Well, she is truley touched by this story, so after introducing us to her four grown daughters she decideds we MUST meet Joe. Now I am really starting to freak out. This has gone from bad to worse to OMG!!!!
We decide its better to follow and meet Joe than wait for him to come to us (or try to sneak out) so we set off after Mrs. Joe. Upon meeting Joe, we can tell he knows we are full of it but he seems to be rolling with it. We throw out the names of our local co-workers and play it up pretty good, but Joe’s BS detector seems to be working pretty good. So, Joe gets called away for a second and we blend in with a group heading out and make our break.
It was one of the craziest things I’ve ever done and was a lot of fun. It was definitely the highlight of the trip.
Monday, March 02, 2009
Update for March 2nd 2009
Wow, I’m really bad at blogging huh? Things have been really crazy the last month or so. Between work and taking the family to Disney World I have been too busy to post anything. Ahh well. Here it goes.
First, I have to say that I hate Informix. I also hate vendors who lie and say their product uses SQL Server when it clearly uses Informix. With that being said, I have been working on some new data classes that combine data from Informix with SQL Server data to create a holistic view of our corporate data. Exciting isn’t it? I am also going to be pulling a lot of data from Informix soon so if anyone has any good tips, please pass them along.
Disney World was a blast, as usual. The kids loved it, especially the princess breakfast at Cinderella's castle. It was pretty cold while we were there (high was only 45 one day!!) but we all survived. The only real problem was that it happened to be Mardi Gras week (which, being a good Catholic boy I knew, but not being from Louisiana I didn’t think meant anything too special) so the place was pretty busy. Who knew Mardi Gras meant a week off for all the school kiddies? Much busier than our crafty planning thought it would be.
Looks like I will be attending Convergence 2009 next week in New Orleans, so if anyone is going to be there drop me a line and we can grab a drink and geek out over some code talk.
Cheers!
Wednesday, February 04, 2009
I’m Baaaack!
Hello all. I have recently ended my employment with BinaryWave. I had a really great time working with Eric and everyone these last couple of years but I felt it was time to move on.
I plan to resume blogging here in my original home. I will probably expand the content from being so SharePoint centric, since I am involved in a lot of other technologies now. I still love SharePoint, but it is no longer my whole world.
Keep an eye out here for new content!
Friday, May 18, 2007
Friday, April 20, 2007
Thursday, March 29, 2007
Wednesday, March 28, 2007
The eGroup == BinaryWave
So expect to see a new web site along with lots of great content, and maybe a new blogger or two!
BTW, BinaryWave is hiring! We are looking for talented, motivated developers. SharePoint experience is a plus, but by no means a requirement. In fact we would love to get a few junior developers in who have a willingness to learn. BinaryWave is one of the top SharePoint developers in the US and Europe and is a great place to expand your skill set and gain valuable experience. Plus, if you want to travel we have several UK clients that you could visit. And if you don't like to travel that's OK too! In a lot of cases we do all the development in our offices and only visit the clients for meetings and code hand-off. We focus exclusively on SharePoint and applications that integrate into SharePoint. We leave everything else to our partners. You wont spend a lot of time doing install and config either! We ONLY do development. And we have a lot of really great projects for you to work on, so there is never any bench time.
If you are interested, please let us know.
Also, look for myself (Sean) or my boss (Eric) at the Dallas SharePoint User Group meetings and at the UK SharePoint User Group meetings. Feel free to introduce yourselves! We won't bite.

Custom Work Flows in SharePoint and VS2005
There is not a lot of (ie not any) documentation out the for doing custom work flows in MOSS and using custom ASPX forms for the instantiation, association etc... forms. Well we (AKA BinaryWave, AKA The eGroup) have done all the hard work for you! We have developed a custom work flow in VS2005 for SharePoint, and developed some custom ASPX forms for use with the work flow. This should be great news for those of you who do NOT want to use InfoPath forms. More to come...
(if you can't wait, leave me a comment and I will respond!)
Using User Controls in SharePoint 200x
Now getting those user controls wrapped up in a web part and deployed is not always the easiest thing in the world. Thanks to the great Jan Tielens you can use the SmartPart. The SmartPart is great and I used it a lot when I was first starting out in SharePoint development. However I soon ran into situations where the SmartPart was not appropriate. Plus I hate to use third party controls where I don't have access to the source so I can really tweak it out. (*Note, Jan has released the source to at least a few versions of SmartPart so you can check out how he did things too!) So inspired by the great work done by Jan I decided to write my own web part that encapsulates user controls. I have used this part on several projects with great success. I will be releasing a sample project that contains a basic working sample of the techniques required to host a user control. This should be ready in the next few days.
Let me know if there are any specific needs and I will try and address them in the release, or in a follow-up release.
Wednesday, February 21, 2007
The (un)Official Guide to adding AJAX to MOSS 2007!!!
Here is the post
And its quoted below (just in case)
Blogger hates me so replace all the '[' and ']' with '<' and '>' respectively.
Microsoft ASP.NET AJAX 1.0 and SharePoint
Windows SharePoint Services
version 3 builds much more directly on top of ASP.NET 2.0; therefore, many of
the capabilities of ASP.NET AJAX work directly with SharePoint.
However,
in a few cases there are some compatibility issues between ASP.NET AJAX and
SharePoint which are anticipated to be addressed in the first service pack of
Windows SharePoint Services. For this reason, until that first Service Pack of
Windows SharePoint Services, we are unable to offer formal support through
Microsoft Product Support Services for usage of ASP.NET AJAX within a SharePoint
Web site. This post is intended to provide developers with some guidelines for
evaluating ASP.NET AJAX and WSS3.0.
Specifically, there are some
limitations on usages of the UpdatePanel in your web parts and controls. Some
approaches are described below to address these limitations, but these are
workarounds and as such may cause other issues in your application.
Here
are some common scenarios in SharePoint you should be able to achieve with
Microsoft ASP.NET AJAX 1.0:
Building a more powerful, re-usable JavaScript
libraries you can use in your web controls and parts
Enabling your web
services to render via JSON, resulting in easier usage in JavaScript/Ajax
Applications
Building a web part that takes advantage of Extender technology
to provide richer interaction styles, such as autocomplete on a textbox.
Using an UpdatePanel in your web part or control for more fluid, no postback
interaction. (this will require some workarounds, however.)
Adding
Microsoft ASP.NET AJAX Technology to SharePoint Pages
To extend your
SharePoint site with Microsoft ASP.NET AJAX 1.0, you’ll need to perform a few
steps.
First, you will need to download and install ASP.NET AJAX on
servers in your farm.
Second, you need to extend web.config with some
settings to enable ASP.NET AJAX technology.
Third, you will need to
add the ASP.NET AJAX Script Manager into your master page to enable scenarios
such as Extenders or UpdatePanels.
Installing ASP.NET AJAX on servers in
your farm
You will want to install the full "ASP.NET 2.0 AJAX Extensions
1.0" from ajax.asp.net.
Extending SharePoint web.config files with
Microsoft ASP.NET AJAX 1.0
Extending SharePoint web.config files with
ASP.NET AJAX requires that you interleave some Ajax registration entries in-line
with WSS registration entries. To do this you will need to edit your SharePoint
web.config file, typically in a directory like
c:\inetpub\wwwroot\wss\virtualdirectories\80.
1. Add a
[sectionGroup]element to the [configSections]tag:
[configSections]
[sectionGroup name="system.web.extensions"
type="System.Web.Configuration.SystemWebExtensionsSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"]
[sectionGroup name="scripting"
type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"]
[section name="scriptResourceHandler"
type="System.Web.Configuration.ScriptingScriptResourceHandlerSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="MachineToApplication"/]
[sectionGroup name="webServices"
type="System.Web.Configuration.ScriptingWebServicesSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"]
[section name="jsonSerialization"
type="System.Web.Configuration.ScriptingJsonSerializationSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="Everywhere" /]
[section name="profileService"
type="System.Web.Configuration.ScriptingProfileServiceSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="MachineToApplication" /]
[section
name="authenticationService"
type="System.Web.Configuration.ScriptingAuthenticationServiceSection,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" requirePermission="false"
allowDefinition="MachineToApplication" /]
[/sectionGroup]
[/sectionGroup]
[/sectionGroup]
[/configSections]
2. Add a
[controls] section as a child of the [system.web]/[pages] tag.
[pages]
[controls]
[add tagPrefix="asp" namespace="System.Web.UI"
assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[/controls]
[/pages]
3. Add
the following tag to the [assemblies] tag, within [compilation]:
[assemblies]
[add assembly="System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[/assemblies]
4. Add some new registrations to the end of the
[httpHandlers] section:
[httpHandlers]
[add verb="*" path="*.asmx"
validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[add verb="*" path="*_AppService.axd"
validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[add verb="GET,HEAD"
path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" validate="false"/]
[/httpHandlers]
5. Add a new registration to the HttpModules section, beneath any
existing registrations.
[httpModules]
[add name="ScriptModule"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[/httpModules]
6. Add a SafeControl entry for the System.Web.UI
namespace from Microsoft Ajax Extensions, within the
[SharePoint]/[SafeControls]section:
[SafeControls]
[SafeControl
Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*"
Safe="True" /]
[/SafeControls]
7. Finally, add the following
configuration tags at the bottom of web.config, near the bottom before the end
[configuration] tag.
[system.web.extensions]
[scripting]
[webServices]
[!-- Uncomment this line to enable the authentication
service. Include requireSSL="true" if appropriate. --]
[!--
[authenticationService enabled="true" requireSSL = "truefalse"/]
--]
[!-- Uncomment these lines to enable the profile service. To allow profile
properties to be retrieved and modified in ASP.NET AJAX applications, you need
to add each property name to the readAccessProperties and writeAccessProperties
attributes. --]
[!--
[profileService enabled="true"
readAccessProperties="propertyname1,propertyname2"
writeAccessProperties="propertyname1,propertyname2" /]
--]
[/webServices]
[!--
[scriptResourceHandler enableCompression="true"
enableCaching="true" /]
--]
[/scripting]
[/system.web.extensions]
[system.webServer]
[validation
validateIntegratedModeConfiguration="false"/]
[modules]
[add
name="ScriptModule" preCondition="integratedMode"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[/modules]
[handlers]
[remove
name="WebServiceHandlerFactory-Integrated" /]
[add
name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/]
[add
name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd"
preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/]
[add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD"
path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" /]
[/handlers]
[/system.webServer]
Adding a ScriptManager into a SharePoint MasterPage
Many
components of ASP.NET AJAX require the inclusion of a .NET ScriptManager control
within a page.
Although it may be possible in some cases to dynamically
insert a script manager from within a control, in many cases the control may not
be able to insert the script manager early enough in the page lifecycle
depending on how the control is used, making this tricky to get right. Also, the
control implementer will need to ensure that multiple instances of their control
(or other controls) do not result in the addition of multiple script managers
within the page. For these reasons, dynamic insertion of a ScriptManager control
from another control is not recommended.
To statically embed a script
manager into a page, it is recommended that you add the ScriptManager into the
master page of a site.
To do this, open up the master page for your
site. Typically, this will be located at [site url]/_catalogs/masterpage. You
can edit this file by opening it in an editor such as Microsoft SharePoint
Designer, or directly in Notepad by opening your master page library via DAV
(typically \\server\[pathtosite]\_catalogs\masterpage.)
Add the following
into the markup of your page. A recommended location is right beneath the
WebPartManager registration (search for [WebPartPages:SPWebPartManager id="m"
runat="Server" /]):
[asp:ScriptManager runat="server"
ID="ScriptManager1"][/asp:ScriptManager]
Using UpdatePanels within
SharePoint
UpdatePanels are a very useful addition to ASP.NET AJAX, and
represent the simplest way to convert existing, standard ASP.NET controls and
parts to take advantage of Ajax techniques. However, there are some changes
within Windows SharePoint Services which may get in the way of working with
ASP.NET AJAX.
Windows SharePoint Services JavaScript has a “form
onSubmit wrapper” which is used to override the default form action. This work
is put in place to ensure that certain types of URLs, which may contain double
byte characters, will fully work across most postback and asynchronous callback
scenarios. However, if your scenarios do not involve double byte character URLs,
you may successful disable this workaround and gain the ability to use ASP.NET
AJAX UpdatePanels.
To do this, you may need to register a client startup
script which disables this workaround, in addition to resetting the default form
action:
[script type='text/javascript']_spOriginalFormAction =
document.forms[0].action; _spSuppressFormOnSubmitWrapper=true;[/script]
This script may be directly embedded in the page, or could be emitted by
a control that uses the UpdatePanel. The following is an example of a very
simple ASP.NET Web Part which uses UpdatePanel capabilities:
using
System;
using System.Collections;
using System.Text;
using
System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI;
namespace MS.Samples
{
public class
AjaxUpdatePanelPart : WebPart
{
private Label label;
private TextBox
textBox;
protected override void CreateChildControls()
{
base.CreateChildControls();
this.EnsureUpdatePanelFixups();
UpdatePanel up = new UpdatePanel();
up.ID = "UpdatePanel1";
up.ChildrenAsTriggers = true;
up.UpdateMode =
UpdatePanelUpdateMode.Conditional;
this.Controls.Add(up);
this.textBox =
new TextBox();
this.textBox.ID = "TextBox";
up.ContentTemplateContainer.Controls.Add(this.textBox);
this.label = new
Label();
this.label.Text = "Enter your name.";
up.ContentTemplateContainer.Controls.Add(this.label);
Button button =
new Button();
button.Text = "Say Hello";
button.Click += new
EventHandler(HandleButtonClick);
up.ContentTemplateContainer.Controls.Add(button);
}
private void
HandleButtonClick(object sender, EventArgs eventArgs)
{
this.label.Text
= "Hello " + this.textBox.Text;
}
private void EnsureUpdatePanelFixups()
{
if (this.Page.Form != null)
{
string formOnSubmitAtt =
this.Page.Form.Attributes["onsubmit"];
if (formOnSubmitAtt == "return
_spFormOnSubmitWrapper();")
{
this.Page.Form.Attributes["onsubmit"] =
"_spFormOnSubmitWrapper();";
}
}
ScriptManager.RegisterStartupScript(this, typeof(AjaxUpdatePanelPart),
"UpdatePanelFixup", "_spOriginalFormAction = document.forms[0].action;
_spSuppressFormOnSubmitWrapper=true;", true);
}
}
}
Output
Caching and ASP.NET AJAX
ASP.NET AJAX infrastructure is not compatible
with output caching features. This output caching infrastructure is a featured
component of managed content pages such as those supported by web content
management features in Microsoft Office SharePoint Server. For this reason, many
scenarios which involve output cached features may not be able to take advantage
of components like UpdatePanel. However, you will be able to successfully use
other ASP.NET AJAX features, such as the JavaScript library, combined with your
output cached pages.
Compatibility with output caching is targeted for a
future release of ASP.NET AJAX infrastructure.
Conclusion
Microsoft ASP.NET AJAX 1.0 provides great building blocks for building
rich Ajax-enabled applications. Combined with the power of the SharePoint
platform, and knowing some of the integration limitations, you can build
powerful Web2.0 applications that bring together the best of both of these
technologies.
Tuesday, February 06, 2007
VISUG event in Mechelen (Belgium)
"Scott confirmed Daniel's statements (not supported, only use the the client side scripts, server-side controls don't work, etc), but more interesting; he told the audience that ASP.NET AJAX will be supported in SharePoint 2007. How is Microsoft going to pull off this trick?
ASP.NET Ajax will be supported in SharePoint when we release a service pack for SharePoint, we will ship it later this year."
And...
"Another statement that Scott made, (which actually contradicts Daniel's statement) was about using the UpdatePanel in web parts. According to Scott you can make use of the UpdatePanel in SharePoint, when it's hosted in a web part."
Now I like the sound of this! I want to go on record as stating that I believe (and Daniel is free to disagree, but please explain to me your logic) that UpdatePanel is the holy grail of Sharepoint. I have done a lot of Sharepoint work in the past few years and the one thing users hate more than anything is that a page has to post back, and RELOAD EVERYTHING every time. Now we all know that the Sharepoint payload is huge, and pulling it down for every tiny post back in a webpart is crazy. Lets wrap those baby's in an UpdatePanel and increase the user experience 1000-fold!
It has been my personal mission to get UpdatePanel working in a webpart, and now I know that my goal is attainable. Wish me luck!
Attention all developers!
Here is the link.
http://weblogs.asp.net/scottgu/default.aspx