Izzy's Rules
02 October 08 06:04 PM

I've been a consultant for over 8 years and during that time, I've lead a few projects, been on a few and helped to clean up a few more.  I have also been a part of some failed projects, which honestly, if you're going to fail, fail big.  Anyway, during my time I have created a set of rules that I carry with me on every project.  These rules are kind of like the 10 Immutable laws of security, they transcend all technology.   I decided to share them in case others want to share their rules or comment on mine.  Enjoy!

  1. If you say it's easy, you have just signed up for that work
  2. If you say it's done, then it better be Done.Done
  3. If you break the build, you buy doughnuts
  4. You are not allowed to estimate unless you are willing and able to do the work.  Willing and able are different, see rule 5 and 6.
  5. If you're not a developer, don't act like one.
  6. If you're not an architect, don't act like one.
  7. If you don't know, are unclear or have questions, ask.
  8. If you built it, you're not allowed to say it works.  "It works" is for the unit tests, test scripts and testers to decide.
  9. If its broken, fix it.  The team is accountable.
  10. If you didn't pay for it, it's not yours.  Don't act like it.
Postedby ivega | 1 Comments    
Filed under: , ,
Defining Done on a Project - Done means done until we redefine done!
02 October 08 05:50 PM

A common issue that occurs on all development projects is when is someone done.  You will here phrases like:

  • I'm done, but...
  • I'm done except for...
  • I'm kinda done.
  • I'm done when it works on my machine, etc...

There are several ideas about what is done and what does “done” mean so in this post, I will define the done criteria across each discipline that should be taken into account on any development project.  I have used this successfully on several projects and it helps to level set across the team that when someone says they are done. We mean "Done.Done".

Development

1. Code is adequately commented according to the coding standards

2. Code adheres to the coding standards

3. All hard coded strings that can be resolved are removed

4. Unit tests are created and test all positive and negative functionality and any exceptions

5. TODO statements are removed/resolved/entered in TFS as tasks

6. Diagrams and documents are updated to reflect any new changes

7. Code integrates with the latest build and is checked in

8. Code passes the integration build and is deployed to test

9. You have had a peer review by the track lead or another developer

10. Any deployment and configuration requirements are documented and communicated

11. TFS has been updated, the task has been closed and associated with a work item

Build and Test

1. The solution is able to be deployed with no errors.

Deployment

1. Any external requirements are documented

2. A target environment document has been created and the deployment is a repeatable process either by process or automation

UAT

1. Customer has signed off on the functionality and no changes are required

Support

1. Documentation has been delivered to the support staff

2. Support staff has signed off on the deliverables

Postedby ivega | 1 Comments    
Filed under: , ,
Designing a Commerce Server catalog - Scenarios and Solutions
11 September 08 01:48 PM

I have taken a long break from Blogging because of customer commitments but I realized the EVERYONE has the same 24 hours in a day that I have, it's just a matter of how you use it.  I noticed that I have not been using my time to give back to the greater community so here goes.

I am starting a series of catalog design blog posts where I will share different scenarios I have encountered and also share how we solved it.  There is an art to catalog design and you must strike a balance between ease of use for the catalog managers, the back end catalog/item master, the user experience, the reporting/orders/marketing and the UI representation of the data (WOW, do I really need to understand all of these pieces?).. the answer is, as always, it depends.

The scenario:  I did some work for an online beauty product manufacturer where we needed to provide a list of "ingredients" for a given product.  They had a list of ingredients for a product stored in their item master as separate fields for inventory, accounting and other purposes.  They don't sell each individual ingredient (such as water) but they wanted to:

a) show the list on the site for consumers

b) display the ingredient list as a hyperlinks so that they could have a description for the ingredient

 

Solution:  As part of the catalog load process, we concatenated the list of ingredients using a semi-colon and placed the value in a long-text field.  We also loaded each ingredient with the definition into the product catalog as individual, non-sellable items.  We used the ingredient ID from the back end system as the SKU for the products.

Once we had the catalog loaded, we wrote some code to split the field data into an array (string.split(fielddata)) and added a foreach loop in order to generate the hyperlinks for each ingredient.  This allowed the system to be flexible enough to handle any list of ingredients.


So the product field in catalog manager contained:  water; vitamin E; collagen...

At runtime (pseudo code, not actual code): 

ingredList = product.properties["ingredients"].split(';');

foreach(string s in ingredList)
{
    link = string.format("<a href=\ingredpopup.aspx?p={0} ...", s);
}

Scenario:  used the same "pattern" to solve a similar problem when we needed to display a description for a class.  The customer was a sports club and when we displayed the schedule information, each class needed a hyperlink with a popup showing the description. 

Solution: We added the classes as products and when the class list is rendered, we generate a link.

(pseudo code again)

foreach(timeSlot t in timeSlotList)
{
    string className = timeSlot.ClassName;
    string popUp = string.format("javascript:showPopUp('/classpopup.aspx?p={0}')", className);

}

Postedby ivega | 1 Comments    
Filed under:
Building Websites with Content Management Server 2002 series
25 June 08 04:19 PM

I received several notes about this offline so I decided to post the entire series.  I apologize to those that have been waiting but hopefully I gain some brownie points for including the code too :)

 

Day 2: Support links and Q&A
15 April 08 11:35 PM

Today we covered capacity planning, high availability, server roles and migration.  Here are a list of additional links, resources and the answers to some of the questions in the class.

 

Links

http://blogs.msdn.com/joelo/archive/tags/File+Shares/default.aspx

http://blog.krichie.com/2007/02/21/importingexporting-sharepoint-document-libraries-tofrom-the-file-system/

Tools

SharePoint Capacity Planning Tool

Universal SharePoint Manager

echoTechnology

AvePoint

Metalogix

Tzunami

http://www.casahl.com

http://www.quest.com

Free Extractors: Migration Utilities:

http://www.codeplex.com/SPIEFolder

SharePoint Portal Server 2003 Advanced Migration Scenarios

 

Questions

Postedby ivega | 2 Comments    
Day 1: Support links and Q&A
15 April 08 12:25 AM

Day 1 of the Advanced SharePoint Server 2007 Training for Architects ended with some questions and some takeaways for me.  During the class, we spoke about authentication, site architecture, governance and deployment options. 

Here is a list of support links we spoke about during class.

Blogs:

Support Links:

Questions from today:

How do I lock down a WCM site?

Are Excel trusted locations automatically added to the a crawl scope?

  • No. You would have to add it manually to the crawl list.

Can I add a friendly display name for a forms based auth user account?

  • No. The membership provider returns a MembershipUser which does have a display name property, only user logon name property.

What type of optimization can I do the SharePoint databases?

Postedby ivega | 1 Comments    
Filed under: ,
SharePoint Capacity Planning Links
14 April 08 10:42 PM

Here is a list of links related to capacity planning and

Plan for Performance and Capacity (Office SharePoint Server)

Design the Logical Architecture

Determine Hardware and Software Requirements (Office SharePoint Server)

Tools for Performance and Capacity Planning (Office SharePoint Server)

Visual Studio 2005 Team Test Edition: Testing Demos

SCCP RC Download

SCCP Home Page

SharePoint Capacity Planning Tool (TechNet)

SharePoint Capacity Planning Tool (Beta)

Postedby ivega | 1 Comments    
Filed under: ,
Troubleshooting Pipeline components with the CS Dump Tool
14 April 08 10:31 PM

Troubleshooting CS pipeline components are a bit like stumbling around in the dark, you may find your way, but if the lights were on, it would be easier. Recently I found myself trying to troubleshoot a an order property that I knew I was setting but couldn’t read. I combed through the log files and set the debugger but I still could not find the issue. I found this post from CS 2002 and I decided to build it as a pipeline component that I could plug into my pipeline to try to see what was going on. I’ve omitted a lot of the generic pipeline code like the attributes, namespace, etc.. If you want that stuff, you see Max Akbar’s or Collin Bowern’s Blog.

<OMMITTED>

using Microsoft.CommerceServer.Runtime.Diagnostics;

<OMMITTED>

public const int Success = 1; //OPPERRORLEV_SUCCESS
public const int Warning = 2; //OPPERRORLEV_WARN
public const int Error = 3; //OPPERRORLEV_FAIL
private const String ProgId = "PipelineComponents.DumpOrderForm";
<OMMITTED>

protected override int ExecuteInternal(object pdispOrder, object pdispContext, int lFlags)
{


IDictionary context = (IDictionary)pdispContext;
IDictionary orderForm = (IDictionary)pdispOrder;
StringWriter textWriter = new StringWriter();

System.Web.UI.HtmlTextWriter output = new System.Web.UI.HtmlTextWriter(textWriter);
DumpUtils.DumpDictionary(orderForm, output, "OrderForm");
DumpUtils.DumpDictionary(context, output, "Context");

string dumpDictionariesAsHtml = textWriter.ToString();
writeToLog(dumpDictionariesAsHtml);
return Success;

}

private void writeToLog(string textToWrite)
{


string path = @HttpRuntime.AppDomainAppPath + @"pipelines\log\";
string fileName = ProgId + "-" + DateTime.Now.ToFileTime().ToString() + ".html";
// Create a file to write to it
using (StreamWriter sw = File.CreateText(Path.Combine(path, fileName)))
{
sw.Write(textToWrite);
}


}

With this tool and the output, I was able to see that my value was indeed not there when the pipeline execution was complete. I ran through it again and I found the issue. I was not calling Basket.Save at the end of the pipeline (dooh!). Fixed that issue now on to the next.

Postedby ivega | 1 Comments    
Filed under:
Support links
14 April 08 05:26 PM

We had a very good session today.  We spoke about authentication, site architecture, governance and deployment options.  Here is a list of support links we spoke about during class.

 Blogs:

Joelo
Steve pescka
John kozell
Bret geoffry
Eric Charran
SharePoint team blog

Download details: Windows 2000 Resource Kit Tool : Setspn.exe

Kerberos link

Kerberos tshooting link

Governance links

Plan for software boundaries (Office SharePoint Server)

Active Directory Performance for 64-bit Versions of Windows Server 2003

Postedby ivega | 0 Comments    
Filed under:
Designing Commerce Server Profile Schemas - Part 1
29 February 08 07:57 PM

When designing CS profiles, a common design question is how do I know whether to mark a property as required.  Here is my guidance.

If the field is required in ALL cases, then it should be a marked as a required field in the UI, the profile definition and the DB schema.  In most cases, the UI and the profile schema should match.  The DB schema does not have to match except for fields that cannot be null (id, email address, unique keys, etc).  In these cases, the UI, the profile schema and the DB should have the field marked as required.

Here is a chart that I use to help me with the design:

UI Required Profile Required DB Schema Required Will work?
XX XX XX XX
XX XX   XX
XX     XX
XX   XX  
  XX XX  
    XX  
  XX    
      XX

Note that there may be other rules that require this to be different such as when the user profile comes from another source or is feed somewhere else.  In this case, defer to the DB Schema to drive your design.

Postedby ivega | 0 Comments    
Filed under:
SharePoint Designer - Value does not fall within the expected range error
28 December 07 10:29 PM

I've been fighting with this error for a few days now after many searches, trials, uninstalls and re-installs the issue is fixed.

Ready for it....

 Use the machine name instead of localhost when you open the site.

That worked for me...I hope it works for you.

Postedby ivega | 1 Comments    
Integrating MOSS and Commerce Server-Post 1
31 March 07 05:16 PM

As I type this, I am waiting for my DC to reboot. I am going to start on a journey to integrate MOSS and Commerce Server 2007 while chronicling my learnings here. I am still in the beginning stages of my development.  I've set up my MOSS server, and I have my CS 2007 instance up and running. First step is to load the CS 2007 starter site with sample data.  Then, I need to set up a WCM site collection.and get the CS profiles and CS auth provider hooked up to MOSS according to Henry Winkler's WP.  I will only cover the rendering of content, not the management of products, workflow, etc. unless I have time. 

Next step it figure out how/where to integrate them. There are several strategies I have pondered recently:

The SOA method of just web parts using web services

Pros:

  • Fairly easy to write web parts that can call into CS and display data

Cons:

  • You loose the tracking ability in CS
  • You loose OOTB caching for profiles and catalogs on the FE web server
  • You can't truly separate yourself from the API unless you want to write your own XML parsing classes.  You have to include several references to CS classes to resolve the specific classes.
  • You must use the BDC to import the profiles from CS into MOSS since the membership provider will be MOSS.
  • You have to write your own wrappers for mapping users to custom catalogs, roles, etc

The integrated way of having both products installed on the box (ala MSIB)

Pros:

  • Easy to call CS API's natively as both runtimes are on the box
  • No need to write your own caching layer

 Cons:

  • Not perf tested. CS and MOSS have several HTTP modules that they load, To get this to work, you would have to hack the XML config file on the MOSS site

A separated site with MOSS/WCM running most of the site and CS running the checkout on a separate URL.

Pros:

  • Separate URL for CS checkout, could be a separate machine.

Cons:

  • Many moving pieces. Could be difficult to manage.

Some other ideas I had to was to set up a reporting dashboard.  Since I am pretty passionate about this subject, I think I'll try them all!  Here goes...

Postedby ivega | 0 Comments    
Searching fileshares with SharePoint Server 2007
22 March 07 07:08 PM

I recently set up a lab with a DC and MOSS box and SQL box, not VPC's or VServers, but actual hardware.  The plan is have an environment where I can recreate scenarios, problems etc.  I ran across a problem where I wanted to search a file share on my network AND I didn't want anyone to know where the actual file was coming from.  At first I set up a content sources to the D$ default hidden admin share and the crawler failed with an access denied message.  I then created a share on the the folder but made it hidden from the network browser (d:\docs is shared as Crawl-docs$).  Then I only allowed domain admins and the crawler to see the share and limted connections to the share to 10.  Then I created the content source to point to the share and that worked.

The next problem was how do I hide the actual path to the document?  Under the SSP -> Search Settings, there is a feature called Server Name Mappings that allows you to mask the URL that gets returned in the search results.  I added a server mapping for my file share as http://archive (I also added a DNS entry to point to this site).  Then in IIS I created a virtual directory on my file share that exposes the files over http.  I only allow authenticated users to the file share and did not enable browsing so that the users would have to know the URL to the document to see it.  I found that you have to recrawl after you change the server mapping.

The benefit is that I don't have provide the users with a path to the actual file share and I can ACL the files in one place, while still allowing users to search it.

Now what if the network file share isn't member of the domain?  This one was tough as there is no way to create a rule to that uses a local machine account to use when crawling the file share; only certificates, basic or domain users are allowed.  Luckily it was a windows machine so I create a hidden share that allowed Everyone read access to it.  That worked.

Postedby ivega | 5 Comments    
Filed under: , ,
MCMS - Default styles that should be implemented for content authors
17 October 06 11:20 PM

Here are the OOB styles and the matching HTML tags that should be implemented on every CMS engagment.  They are used by CMS to allow content contributors to format text when adding content.  They are also used to format the display of the content when it is copied from another source such as Word.  You should override all of these styles by specifying the presentation in the style sheet to ensure site consistency.

CMS authoring style CSS Style
Normal = BODY {}
Paragraph = P{}
formatted = PRE{}
address = ADDRESS{}
h1 = H1{}
h2 = H2{}
h3 = H3{}
h4 = H4{}
h5 = H5{}
h6 = H6{}
Numbered list = OL{}
1. numbered list item = LI{}
Bulleted list = UL{}
Bullet list item = \*Same as LI*Directory List = DIR{}
Directory List Item = \*Same as LI*Definition term = DT{}
definition = DL{}
Menu = MENU{}
Bold = STRONG{}
Italic = I{}
Underline = U{}
Hyperlink = A:link{}
= A:active{}
= A:visited{}
= A: Hover{}

Virtual Server R2 on Vista
23 June 06 02:44 PM

I started playing around with Vista Beta 1 this week and between the flashes of user security prompts, I actually like it so far.  I decided to install Virtual Server R2 and with the help of the virtual PC guy, I got VServer installed and running.  My next step was to get my MOSS 2007 Beta 2 VPC's running.  I have 2 images, a DC and a 2007 server.  At first they could not see each other.  Here is what I did:

Vista Host

  • Installed the MS loopback adapter on the host (don't know if this is required)
  • Enabled the Virtual Machine Network Service on my wireless adapter (don't know if this is required)
  • Added a host entry for my MOSS 2007 virtual server (you must run visual notepad as administrator to edit this file)

VServer Master configuration

  • Added a new virtual network called "Wireless" and bound it to my wireless card
  • On each virtual server configuraiton, configured the virtual network adapter to connect to wireless

VServers:

  • Assigned each server a fixed IP on the same network segment as my host
  • Fixed the DNS records on the DC

Now I can RDP to the virtual servers and browse my MOSS instance from the Vista Host.  I still can't browse the internet using my virtual servers (working on that) but at least they can talk to each other.

Postedby ivega | 1 Comments    
More Posts Next page »

This Blog

Syndication

Page view tracker