Stacy Draper Stacy Draper's Professional Blog 18 Ways to Be a Team Member Other People Want to Work With <p>This list began by reading a few articles about being a great leader and while thinking those may be great leadership qualities they are also great people qualities, team member skills, people we all want to work with traits.  We’ve all been on teams, if you haven’t you were on a team and didn’t know it, or you will someday.  It’s the number three guarantee of life, you will be on a team, it’s right up there with death and taxes.  Some teams are way more fun to be on than others, what makes those teams more fun.  Some might say it’s what you’re working on and to a certain degree that’s true, but I’ve done some nasty jobs and really enjoyed the team I was on.  It’s the people.  The people are what make a team and ultimately the work you do an enjoyable experience.  But it’s not just any people there are certain people that can make any situation unbearable and there’s other people that make the skies open, divine sun rays shine through and angels sing while birds chirp and things are wonderful.</p> <p>What are the qualities that people have that make them great to work with?  I haven’t figured them all out, but here’s 18 of them in no particular order:</p> <h1>Believe in Some Form of Karma</h1> <p>Being indirectly compensated for your contributions is something that is important to remember.  Often times people will say, “That’s not my job” well you have the ability and the authority so in the interest of progress how ‘bout you knock this out for us real quick?  Team members who keep score of who does what and how often not only end up really unhappy but are so preoccupied with keeping score they are useless.  Do what ever you can.  You’ll be justly compensated somehow for your contribution and if completion of the project isn’t enough for you do everyone else a favor and get off the team.  That’s right get out of the way so someone, even though less skilled, can get on the team and be lots more productive.  You owe it to the world.</p> <h1>Be Assertive</h1> <p>So getting along just for the sake of getting along is terrible.  The world doesn’t need another head bobbing yes person.  If you KNOW something is WRONG speak up.  Notice the caps?  If you know it’s wrong your it’s you’re responsibility to say so.  On the other hand guessing that something is wrong and fighting about it is wrong(er).  Assertive doesn’t mean being aggressive.  Assertive means that you honestly offer up a valid truth at the right time (earlier rather than later).  Aggressive means that you want to see veins in your teeth when you look in the mirror.</p> <p>Again.  Assertive is just stating what you know as a fact and how it relates to the team or relevant team members.  Aggressive is that state of not being able to take an unmitigated step forward.</p> <p>If you find yourself fighting or on a team that’s fighting look to see if people are being defensive.  Often times someone has their feelings hurt and now has to demonstrate how smart they are to the rest of the team.</p> <h1>Encourage others to contribute</h1> <p>Ever notice the person who is constantly trying to demonstrate how smart they are is the least pleasant person on the team.  No matter what you think this person hasn’t thunk it already.  Yeah I know it’s thought instead of thunk, but I chose to use my creative license to demonstrate how stupid the behavior is.  If this person does have real value then take them out back and kick them a few inches short of death and then invite them back on the team.  If they are irrevocably useless then kick them out.  Who needs the constant distraction of someone whose mother told them too many times they are wonderful and they can do anything?  In reality these types of people get in the way of others.</p> <p>They are so preoccupied holding the mic, the stage, the entire theater and all the audience seats too that nobody else can get a word in edge wise.  Not everyone has something to say all the time but everyone must be afforded the opportunity to contribute.  That’s not a management style of decision by community, it’s just to say that as often as possible get everyone’s contribution.</p> <h1>Make a Decision</h1> <p>When in charge be in charge.  That might come from the Marine Corps. among other places, but what it means is pretty powerful.  When someone finds themselves in a an authoritative position be authoritative, everyone else depends on them to make a decision.  Right or wrong doesn’t matter when faced with passivity.  There are some folks out there that just try to get 40% of the decisions to be right, that way they only have to make two and a half more correct decisions about it.  Sounds kind of crazy but it actually works and enables people to make decision.  If you think you’re wrong?  Hurry up and do it so you can find out it was wrong faster rather than hem and haw and not be sure if it’s right or wrong and never really be sure.</p> <h1>The Changing Of the Mind</h1> <p>Once a decision has been made stick to it follow it through.  If you find that you’re only as good as the last person that you talk to find someone you respect and put them in the position to make these decisions.  This doesn’t mean that you are an ineffectual leader, quite the contrary.  When you give others the ability to make a decision you have expanded your team by conveying responsibility.  Now you’re freed up to make decisions about things that you’re good at making decisions about.  And yes everyone is happier.</p> <h1>Clear Communication</h1> <p>Now there’s a decision what should be done with it?  Sometimes a meeting ends and everyone goes back to their desk doing whatever it was they were doing before they got interrupted.  This is often coined, “A Waste of Time”.  Without creating clear direction, setting expectations, measuring results, and providing constant feedback . . . . that decisions was as effective as a passive shoulder shrug. </p> <p>Make sure everyone knows what is expected of them by when and get an understanding if that’s even possible.  Many times people will have a very convincing “That’ll take me 2 weeks.”  Everything for them is 2 weeks.  They might be really good at doing the job but they might be terrible at figured out how long it will take to get done.  Sounds weird I know but it happens.  It’s important to understand that they don’t know how long it will take.  In most cases they haven’t done it yet.  So it might take some extra time or personal attention to get to the bottom of how long something might take.  At the end of the discussion everyone has to walk away know what has to be done when.</p> <h1>Communicate By Doing</h1> <p>There will be times when an idea is just so unique and never been done before. . . or it just sounds hard *sigh* and nobody want’s to get off the couch.  So what’s a team member to do?  Start by doing, demonstrate through your actions what people should be doing.  What ever it is grab a hold of it and show people by you walking through the steps and then you take them through the steps.  Sometimes a simple walk thorough is all anyone needs to get something started.</p> <h1>Play your position well</h1> <p>It’s pretty clear when the kicker messes up.  It doesn’t go between the uprights.  When the quarterback throws the ball and nobody was there,  well the receiver for whatever reason couldn’t get there.  There are projects were a person is a developer and then the next project they are a project manager or a business analyst then maybe a quality person back to development.  Whatever role you are in be in that role 100%.  Nobody wants to hear excuses like, “Well normally I’m the _____ and I don’t know how to do this well”  no need to apologize for your past.  Figure out what you are going to do right now.</p> <p>Help others when they aren’t playing their position well and let others help you when you aren’t in yours properly.  Doesn’t mean anyone is going to get less of a reward because they have been corrected.  In reality it means that everyone is going to be rewarded greater.</p> <h1>Professional Development</h1> <p>Not everyone is great at everything.  Not everyone knows what the next steps are in their career.  I have 25 years of profession experience and just when I thought there wasn’t something else I could do I made a few connections on linked in and met someone who showed me how I could get paid for my expertise in a capacity I had never fathomed before.  Nobody knows where these lending hands come from, but be ready for them.  Additionally lend people a hand.  We are all humans and we are competing, very effectively, with all the other species on the planet.  Just because we are doing well eight now doesn’t mean we should stop getting better.  Be ever ready to lend and receive advice.  </p> <p>As always be sure to deliver the advice in the most attractive manner possible and it doesn’t hurt to make sure the receiving party is ready to receive it.  When someone offends you, ask yourself, “Hey?  Is this help disguised as an insult?”</p> <h1>Honesty</h1> <p>Honesty is a common running thread through out this entire character.  When something can’t be done as planned or as expected communicate it.  When you hear something that isn’t going to be done as planned or expected it’s not entirely necessary to fly off the handle or demonstrate ones ability to become furious.  Remember that people are in a mosaic, in a larger picture, and sometimes they can’t see beyond the tile they are currently looking at.  Sometime all that is necessary is to gain an understanding how firm this obstacle is.  It’s not necessary to rip someone’s head off, but it is necessary to know that things will happen and provided a good environment most people want to do and please rather than be unpleasant and not do.</p> <p>By having a sans-punitive environment people will be more forth coming with contentions that would be detrimental to a project sooner.  And that’s always a good thing.</p> <h1>Recognize the Best Effort</h1> <p>People on a team have a wide and varied back ground and experience levels.  It does absolutely no good to beat up Bill because he didn’t do it as good as Todd could have when Bill’s experience pales in comparison to Todd.  Recognize people for the contributions subjectively and honestly.  People know, or should know, where they are lacking.  As always communication is key.</p> <h1>Hunger For Learning</h1> <p>One of the definitions living is a capacity to grow.  For us humans that includes learning. If you are a point where you don’t want to learn anything new and you defiantly don’t want to teach anyone anything . . . go home, go away, get on a different project or do something else because you’re probably miserable.  Go find your passion.  If you’re this person you are making everyone else around you miserable too.  Go find what you like to do.  Life is too short to be doing stuff you don’t want to be doing.</p> <p>Finding yourself frustrated or stagnating is totally different.  For things to change you have to change things.  Maybe that includes teaching others.  Maybe it means getting out of your comfort zone and taking on things that you normally wouldn’t take on.  Sometimes it’s as simple as teaching someone else something you already know. </p> <h1>Passion</h1> <p>When someone has an intense emotion like enthusiasm or desire about something they are said to be passionate about it.  Passion is an awesome thing harnessed correctly it can be used to do positive things like build bridges or it can be used in destructive ways like wars.  Team members who align their passions to meet a common goal are undeterred.  Talented people become talented because they are or at one point were passionate about that thing that are talented at.  Understand what your passion is and passions of others around you.  Understand how they align and are a part of the common goal.  leverage those passions around you to fuel your passions and make your skills better so that you can thrive in your discipline.</p> <h1>Discipline</h1> <p>Until I was much older I thought discipline meant getting beat with a stick by whom ever was closest, but it also means a field of study.  Being good at what you do doesn’t mean you have to be good at everything else.  Be good at what you do and master it.  Learn about the things that touch it.  Understand how your discipline fits with in the greater scheme of things.  Understand how the greater scheme of things affects your discipline.</p> <p>What we’re looking for here is a consistency.  The work that is done by each team member is reproducible regardless of the circumstances or impedance.  Unless blame is the desired product of end result pointing fingers and generating excuses isn’t going to help anyone.  Endeavor to produce quality regardless of the harsh environment.</p> <h1>Social Network</h1> <p>Talents people are drawn to one another.   Be willing to meet other people who have similar and dissimilar passions and drive.  Be ever ready on team and off team to lend a helping hand.  Understand how much time you are willing to invest in someone and be honest with them.  They’ll be fine with it.  They’ll be more fine with that than blowing them off.</p> <p>Many times there are people who have reached the panicle of their career and they turn into a scoffing person who retorts with an attitude similar to, “How do you not know that ____”,  or “if you had done the things I have done you would know that ____” if you find yourself turning into this person remember that you too learned this material and it’s not unlearnable by others.  Because you act like an ass doesn’t mean that you know more as much as it means you are an obese challenge to work with. If you know everything and you treat people badly, know that someone one has told you once that you are going to suffer for it though lost opportunity.</p> <h1>People Matter Companies Don’t</h1> <p>Companies by themselves are just legal entities, without people to work at them they aren’t anything at all really.  A company’s character is made up of the people that work there.  Take care of the people and the companies will take care of themselves.  It’s a small world out there often times a project manager in one project might be the developer on another project reporting to previously subordinate quality person.  Maybe the situation is much dire and you need job and a previous team member knows of a place for you to work.  Being a desirable team member is important and we get there through being honest and direct while being thoughtful.</p> <h1>Judging Yourself First</h1> <p>There’s been a lot of talk about giving advice and contributing to others, but before all that, let’s make sure to take a long hard look in the mirror and make sure we’re doing our part.  Before we demonstrate the short comings of others let’s see if we can’t fill a gap or a void in the project with some minor adjustments from ourselves first.  </p> <h1>Being Ever Optimistic</h1> <p>When you genuinely enjoy what you are doing it’s difficult to find yourself in a place where down about being able to accomplish something, but it does happen.  Without being dishonest be optimistic.  Optimism is contagious and if you ever are infected with it don’t fight it.  A healthy dose of optimism is sometimes all that is needed to overcome fate, circumstances and all that other stuff.</p> <h1>Conclusion</h1> <p>Be that person you’d like to work with.  Maybe you’ve never met that person, maybe you have to make up one, maybe the traits are spread over a few people.  This by no means is a definitive list and has absolutely no scientific anything behind it.  It’s just been my experience.</p> Stacy Draper feb89f54-7868-4dbf-a2b1-7d488459fd80 Tue, 19 Feb 2013 18:42:09 GMT Speedtest from DC office <p>So I got on this kick about testing bandwidth to various points around the world and thought I'd set up a speedtest from my DC office so others could test.  I pay for 100Mbs Down and 20Mbs up and I get about 110Mbs down and about 22Mbs up to a testing site 6 miles away.</p> <p> </p> <p>Run the test and leave your results in the comments.</p> <p style="text-align: center;"><iframe height="300" src="" frameborder="0" width="385"></iframe></p> Stacy Draper 7f7d5433-2597-4dd6-88fb-a8ba2061e662 Sat, 02 Feb 2013 10:17:14 GMT Is it so wrong to seed your GUID? <p>I don’t know how wrong it is to seed your GUID.  But I did it just for fun and here it is <a href="" title=""></a></p> <p>I got tired of looking at impersonal GUIDs and I wanted something familiar to look at.  I thought I wonder what if I high jacked a few of those characters for my self.  So I grabbed the first 16, there are 32 in all.  The first 16 I can put in just about anything I want.  The last 16 is the number of seconds since my birth.  So if someone has the first 16 characters and me and at the same exact second in there life as me creates a guid,  well then I guess we’ll have a duplicate.</p> <p>On the upside, I can get an understanding of what it is I’m looking at and hopefully I’ll be able to do my work faster.  I was making a custom field type, a few site columns, a content type, and a list.  Lots of GUIDs to look at and a lot of double checking.</p> <p>This morning I blurted out, in turrets style, “Is it possible to have a family of GUIDs? That way maybe you have a chance of recognizing them.” and Jim Wilcox @poliTechnosis picked right up on what I was asking about and shared that facebook prefaces theirs with facebooc.  He quickly wrote this code <a href="" title="" target="_blank"></a> </p> <p> </p> <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:1174ebca-1efe-44a5-8ca0-58d4b2c20707" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px;"> <pre class="brush: c#;">using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CustomGuidTest { class Program { static void Main(string[] args) { Guid customGuid = GenerateCustomGuid(); Console.WriteLine(customGuid.ToString("B")); Console.ReadKey(); } static Guid GenerateCustomGuid() { Guid result; //0xFACEB00C //backwards, but required this to achieve desired result. byte[] custom = new byte[] { 0x0C, 0xB0, 0xCE, 0xFA }; byte[] random = Guid.NewGuid().ToByteArray(); byte[] final = new byte[16]; for (int idx = 0; idx &lt;16; idx++) { switch (idx) { case 0: case 1: case 2: case 3: final[idx] = custom[idx]; break; default: final[idx] = random[idx]; break; } } result = new Guid(final); return result; } } }</pre> </div> <p>I added too it and came up with:</p> <p> </p> <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:b8e62164-db31-4b0c-a2b8-ee2aba05c3c3" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px;"> <pre class="brush: c#;">using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { static OrderedDictionary dictionary = new OrderedDictionary(); protected void Page_Load(object sender, EventArgs e) { //the opportunity here is to allow the users to set their favorite aliases if (dictionary.Count == 0) { dictionary.Add("0", "0"); dictionary.Add("1", "1"); dictionary.Add("2", "2"); dictionary.Add("3", "3"); dictionary.Add("4", "4"); dictionary.Add("5", "5"); dictionary.Add("6", "6"); dictionary.Add("7", "7"); dictionary.Add("8", "8"); dictionary.Add("9", "9"); dictionary.Add("a", "A"); dictionary.Add("b", "B"); dictionary.Add("c", "C"); dictionary.Add("d", "D"); dictionary.Add("e", "E"); dictionary.Add("f", "F"); dictionary.Add("g", "6"); dictionary.Add("h", "4"); dictionary.Add("i", "1"); dictionary.Add("j", "9"); dictionary.Add("k", "7"); dictionary.Add("l", "1"); dictionary.Add("m", "3"); dictionary.Add("n", "2"); dictionary.Add("o", "0"); dictionary.Add("p", "7"); dictionary.Add("q", "9"); dictionary.Add("r", "2"); dictionary.Add("s", "5"); dictionary.Add("t", "7"); dictionary.Add("u", "4"); dictionary.Add("v", "7"); dictionary.Add("w", "7"); dictionary.Add("x", "7"); dictionary.Add("y", "4"); dictionary.Add("z", "2"); } } protected void Button1_Click(object sender, EventArgs ea) { Byte[] use = getTimeInSeconds(); DisplayGuid.Text = GenerateCustomGuid(use).ToString(); } private static Byte[] getTimeInSeconds() { TimeSpan span = DateTime.Now.ToUniversalTime().Subtract(new DateTime(1970, 4, 9, 10, 32, 0)); double seconds = span.TotalSeconds; Byte[] byt = BitConverter.GetBytes(seconds); Byte[] use = new Byte[8]; for (int it = 0; it &lt; 7; it++) { use[it] = byt[7 - it]; } return use; } private string getCharacter(string text, Guid guid, int idx) { string tempValue = ""; object o = dictionary[text.ToLower()]; if(o != null){ tempValue = o.ToString(); } if (string.IsNullOrEmpty(tempValue)) { tempValue = guid.ToString().Substring(idx, 1); if (string.IsNullOrEmpty(tempValue) || tempValue == "-" || tempValue == "{" || tempValue =="}") { //random works terribly bad Random random = new Random(); int randomNumber = random.Next(dictionary.Count - 1); tempValue = dictionary[randomNumber].ToString(); } } return tempValue; } private Guid GenerateCustomGuid(byte[] use) { Guid result; Guid randomGuid = Guid.NewGuid(); string part1 = TextBox1.Text.PadRight(8, '*'); string part2 = TextBox2.Text.PadRight(4, '*'); string part3 = TextBox3.Text.PadRight(4, '*'); string sum = "".PadRight(16,'*'); if (part1 + part2 + part3 == sum) return randomGuid; byte[] random = Guid.NewGuid().ToByteArray(); byte[] final = new byte[16]; for (int idx = 0; idx &lt; 16; idx++) { switch (idx) { case 0: case 1: case 2: case 3: final[idx] = Convert.ToByte(Int32.Parse(getCharacter(part1.Substring(6 - idx * 2, 1), randomGuid, idx) + getCharacter(part1.Substring(7 - idx * 2, 1), randomGuid, idx+1), System.Globalization.NumberStyles.HexNumber)); break; case 4: case 5: final[idx] = Convert.ToByte(Int32.Parse(getCharacter(part2.Substring(10 - idx * 2, 1), randomGuid, idx) + getCharacter(part2.Substring(11 - idx * 2, 1), randomGuid, idx+1), System.Globalization.NumberStyles.HexNumber)); break; case 6: case 7: final[idx] = Convert.ToByte(Int32.Parse(getCharacter(part3.Substring(14 - idx * 2, 1), randomGuid, idx) + getCharacter(part3.Substring(15 - idx * 2, 1), randomGuid, idx+1), System.Globalization.NumberStyles.HexNumber)); break; case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: final[idx] = use[idx-8]; break; default: final[idx] = random[idx]; break; } } result = new Guid(final); return result; } } }</pre> </div> <p>I’ve change my birth day,  but I did have fun converting it to utc time.  I learned that I was actually born a day earlier than I thought.  </p> <p>Here’s the .aspx page:</p> <p> </p> <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:faf7795d-11c3-4538-8ce6-ccaa23a45fec" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px;"> <pre class="brush: c#;">&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %&gt; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""&gt; &lt;html xmlns=""&gt; &lt;head runat="server"&gt; &lt;title&gt;&lt;/title&gt; &lt;style type="text/css"&gt; .textbox { width:100%; border:0; font-weight:bold; font-size:22px; overflow:hidden; } &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;form id="form1" runat="server"&gt; &lt;div&gt; &lt;asp:TextBox ID="TextBox1" runat="server" MaxLength="8"&gt;&lt;/asp:TextBox&gt; - &lt;asp:TextBox ID="TextBox2" runat="server" MaxLength="4"&gt;&lt;/asp:TextBox&gt; - &lt;asp:TextBox ID="TextBox3" runat="server" MaxLength="4"&gt;&lt;/asp:TextBox&gt; &lt;asp:Button ID="Button1" runat="server" Text="Create Guid" onclick="Button1_Click" /&gt;&lt;br /&gt; &lt;asp:TextBox ID="DisplayGuid" runat="server" CssClass="textbox" &gt;&lt;/asp:TextBox&gt; &lt;asp:Label ID="Label1" runat="server"&gt;&lt;/asp:Label&gt; &lt;/div&gt; &lt;/form&gt; &lt;script type="text/javascript"&gt; if (document.getElementById('&lt;%= DisplayGuid.ClientID %&gt;').value != "") { document.getElementById('&lt;%= DisplayGuid.ClientID %&gt;').select(); CopyToClipboard('&lt;%= DisplayGuid.ClientID %&gt;'); } function CopyToClipboard(controlId) { var control = document.getElementById(controlId); if (control == null) { alert('ERROR – control not found – ' + controlId); } else { //determine the value of the control var controlValue = control.value; //copy to clipboard window.clipboardData.setData('Text', controlValue); alert('Copied GUID, ' + controlValue + ', to the clipboard.'); } } &lt;/script&gt; &lt;/body&gt; &lt;/html&gt; </pre> </div> The copy to clip board is starting to annoy me so it may come out.  I got it from <a href="" title="" target="_blank"></a>  <p>I got the highlight piece from looking at the html source on this site <a href="" title="" target="_blank"></a>  it wasn’t obvious that I could just hit ctrl-c and copy it.  But once you’re aware it’s kind of nice.  I might add parameters so that I can hit a link and always get the same prefix.</p> <p>I really like the way Darren Hemming @cariad1234 was thinking about this. He called it a GUID namespace.  He brought up some valid points like it being a real GUID.  It’s run right through the new Guid() constructor so it’s a legitimate GUID, what are the chances of there being a duplicate in the world?  I don’t know.  But then again I don’t know what the chances are of an unseeded GUID.</p> <p>Leave a comment or a trackback about how your are using your GUID!</p> Stacy Draper a347c35d-ef94-4e4d-916b-b88edf4f5de0 Sat, 09 Jun 2012 17:17:01 GMT Finding Every Server That Has SharePoint Installed <p>For whatever reason SharePoint teams sites tend to popup all over the network.  Somehow marketing gets a server. Marketing then installs SharePoint on it themselves.  Marketing becomes dependent on the data SharePoint houses.  This usually underpowered and fault intolerant server crashes and burns.  The data is lost.  Organization suffers.</p> <p>This is just one scenario, but there are many reasons why you don’t want SharePoint weeds in your network.  Licensing.  The “What did you know and when did you know it factor” to name a few.  @buckleyPlanet posted a microblog on twitter.</p> <p>“Are there any community/3rd party replacements for the <a href="!/search/#SharePoint"><s>#</s><b>SharePoint</b></a> Asset Inventory Tool?” was the entire post that started me thinking about all that.  At the time I had totally forgotten about this tool.  Apparently it’s gone.  I don’t know why, but the links I got to give me a 403.  It could be misplaced or removed without notice.  So I got to thinking about replacements for this thing.</p> <p>All it did was tell you what servers were running SharePoint and how many sites and site collections there were on each server that it found.  At least that’s what I think it did. Anyways my mind flooded with alternatives and started searching the web for more.  THere are a few ways to do this, the one I actually tried out was using PowerShell.  It took me about an hour to write:</p> <p> </p> <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:317fcb1a-1e7e-4030-89f1-f9566b02f153" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px;"> <pre class="brush: powershell;">$objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.Filter = '(OperatingSystem=Window*Server*)' "Name","canonicalname","distinguishedname" | Foreach-Object {$null = $objSearcher.PropertiesToLoad.Add($_) } $names = $objSearcher.FindAll() | Select-Object @{n='Name';e={$['name']}},@{n='ParentOU';e={$['distinguishedname'] -replace '^[^,]+,'}},@{n='CanonicalName';e={$['canonicalname']}},@{n='DN';e={$['distinguishedname']}} $names | forEach-object{$ + "`n" + "=================="; get-wmiobject -computerName $ -class win32_product | where {$_.Name -eq "Microsoft SharePoint Server 2010 "}; "`n"; "`n"}</pre> </div> <p>I say I wrote it.  I copy and pasted my way to it.  the first part I ripped off from <a href="" title=""></a> The second part I had from something I was doing earlier in the week.</p> <p>This script isn’t awesome it just is.</p> Stacy Draper 31118d9c-7d9a-4b04-abf4-6c1564c2e7db Fri, 24 Feb 2012 16:35:33 GMT Experiences with my SharePoint development farm <p>So I’ve been building out a new development farm and trying a few things out on it here and there.   I’ve experimented with the dynamic ram in Hyper-v.  The database server got so messed up he didn’t even know he was running sql.  I set it back to a static amount, rebooted and all was right with the world.  I had two web front ends and the surprise there was both web front ends have to be up if you want the .wsp solution to install correctly.  I spent all my time today getting <a href="">bginfo</a> set up just the way I wanted it.  I guess the first thing to do is describe my environment.</p> <p>First off I had to make a choice between Hyper-V and VMware.  At the time I built the host my client was mostly using Hyper-V, or so I was told.  It turned out later that they were really using more VMWare.  The other deciding factor was that it came with my OS.  There are converts to go from VMWare to Hyper-V and vice versa, never the same tool though.  But they do exist and they aren’t terrible.  Long story short I went with Hyper-V.</p> <p>I have AD1 (Active Directory) and it’s still on a dynamic allocation of ram 768MB – 1792MB right now it’s at 953MB assigned and it’s using 686MB.  I only have one user.  Me.  If I ever have a situation where I’m testing users I’ll but it up to 2 or 4GB.</p> <p>The DB1 (Database) has been set to a static 4096MB.  Before the incident it was set dynamically at 2G – 4G and it was assigned 3.5G and using 3G.</p> <p>WFE1 (Web Front End) is set to use 4 processors and 8 gigs of ram.  I was messing around with the processors giving 2 here and 4 there.  Turns out I was over thinking it.  They are virtual processors and I can only assign up to 4.  Having 12 available it just didn’t make sense.  I couldn’t say physically which processor it should use or shouldn’t use.  So what the heck?  I gave everyone 4 processors.  8 gigs of ram because there’s visual studio and everything else under the sun on that box.  That’s where I spend a lot of my time so I want it to run real smooth.</p> <p>WFE2 is still on the dynamic ram technology with 2-8GB it runs around 2GB assigned and 512MB used. The reason why I went with 2 WFEs is so that I could do a little bit more testing before my code leaves me.  I never really felt like I was missing out on anything before, but I have it there just in case.  I used to have it connected all the time, but then I learned that when it’s not booted up the wsp never deploys.  Not wanting to have that kind of problem on my development box I took it out of the farm with PSConfig.  I’ll put it back in with PSConfigif I ever need it.</p> <p>An interesting thing about this PSConfigis that WFE2 hosted central admin as well as WFE1.  I removed WFE2 through central admin and added WFE2 back to the farm with PSConfig and I told it not to host central admin.  This caused a problem to appear.  I was getting messages about not upgrading properly.  So I removed wfe2 through PSConfig this time and added it back to the farm telling WFE2 to host central admin again.  Then I removed it with PSConfig and added it back telling it NOT to host central admin.  That finally worked.  I guess I wanted my way?  Maybe I didn’t want to forget that I had it hosting central admin? Who knows all that matters is it’s the way I want it and I’m happy.  </p> <p><a href="">Fabian Williams</a> convinced me to have a client machine.  I don’t know if I’ll ever use this one but we’ll see.  As a matter of fact I just looked and seemed to have messed it up.  I created an iSCSI drive and I disconnected it, but it was a windows 7 box with the recommended ram and probably 4 processors.</p> <p>I’ve spent the last few days trying to find a project that I could do for community.  I couldn’t find anything that wasn’t done a few different ways so I went on a detour today.  I thought hey, I’m like a real live sysadmin now.  Now I too can have those cool desktops with the text on it that tells me all about the server I’m on like in Figure 1.</p> <p><a href=""><img width="517" height="847" title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px;" alt="image" src="" width="517" height="847" /></a></p> <p>So I hopped on Google and didn’t know what to search for.  So I hopped on twitter and blurted out something like, “What do admins use to write on the backgrounds of their desktops?”  As always Todd Klindt made sense of my question and suggested that some people like to use <a href="">BGInfo</a>.  Several people agreed, except <a href="">Mark Rackley</a>.  He some how came up with Sharpie, but I wanted something more dynamic than that.</p> <p>BGInfo is pretty cool and time tested so I’m not going to get into all of it’s awesomeness.  I saw that I could get values via vbscript.  I thought that should be fun.  I was once the best I knew at vbscript and was wondering if I still had the touch.  Turns out I don’t.  I spent all day today trying to figure out how to call PowerShell from VBScript.  You can do it, but you’re not going to be calling SharePoint cmdlets.  those are 64 bit.  VBScript, as I became painfully aware of is 32 bit.  There are a couple reasons why this wouldn’t have worked.  The Calling application that creates the app domain in the first place is 32bit.</p> <p>However I did come up with some good ideas.  To use VBScript to call PowerShell and then pass data back to VBScript I came up with a few things that worked and a few that don’t.  So you’ll see some stuff about environment variables.  That doesn’t work because environment variables are session specific and I couldn’t find anything that would let you rewrite the system environment variables.  So that was out.  What I finally liked was writing to a file cause that’s super easy in PowerShell and reading in VBScript and that’s only about 5 lines of code that you can copy and paste.  Passing information to PowerShell by parameters worked pretty well too.</p> <p>So I was really stuck.  How was I going to get the SharePoint Version.  I rarely use it.  But I wanted it.  I had to have it on the desktop.  I don’t know why either, but just bare with me.  I was going to use PowerShell to get the version number.  Cause again I blurted out a question like, “How can I get the version number from SharePoint” in twitter.  @usher and @toddklindt responded with get-spfarm | select BuildVersion or something similar.  Both they’re approaches were a little different but were basically the same idea.  This other guy, @sstrnager, came up with something around get-wmiobject win32_product and this got me to thinking.  Since BGInfo has a built in WMI query interface maybe I can just use that?  I was right.  for the first time today.  It felt pretty good.  Until I spent 2 hours trying to get a scheduled task to work which started working for no reason at all.  I finally used </p> <div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:bd039b56-ccb5-45e0-8cb0-52e5d9d53680" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px;"> <pre class="brush: c#;">SELECT Version FROM Win32_Product WHERE name = "Microsoft SharePoint Server 2010 "</pre> </div> <p>So at the end of a very long day I was able to put some text on a desktop or 4 and leave my self some notes.  I do wish I could centrally manage this.  I dread having to go to each machine to do make a little change.  Like leave myself another little note about my farm or if there’s other information I would like to see is going to be a major chore.  Maybe I can but the configuration file on a network drive?  I’ve never had much luck with that and I’ve had enough rejection for one day.</p> Stacy Draper f32142e9-31d9-4dca-9638-45b71a9273e8 Wed, 22 Feb 2012 01:00:48 GMT Cheap office 365 pricing <p>Alls you gotta do is . . . .</p> <p>Become a registered partner or higher, then from there join online services as a competency and then cloud services and you get office 365 free for a year and then it's half price after that if you don't meet the sales quota.</p> <p> </p> Stacy Draper 9f6e4340-5abc-40d5-a678-5cd9eafc6652 Mon, 20 Feb 2012 12:33:07 GMT When certificates have fallen and can&rsquo;t get up. <p>When upgrading to windows server 2008 R2 from sans R2 the Security Token Service loses its self-generated certificates and an error <em>“The requested service, 'http://localhost:32843/SecurityTokenServiceApplication/securitytoken.svc' could not be activated.”</em>&#160; The resolution is simple enough.&#160; Re-Provision the Token Service.&#160; This seems like a popular way to fix a lot of things in SharePoint 2010.&#160; Something’s broken?&#160; Recreate the service application.&#160; Jon in support was awesome he gave me a nice little PowerShell script.</p> <pre class="brush: ps">$sts = Get-SPServiceApplication | where {$ -like &quot;*token*&quot;} $sts.provision()</pre> <p>All this does is find service application with the name token in it and then it provisions it.&#160; Simple enough but took forever to figure out.</p> Stacy Draper 2a1abcb9-b102-4b1b-b7cb-561819351660 Sat, 05 Feb 2011 11:49:02 GMT Slow People Picker <p>So maybe you have a slow people picker?  We did.  The network guy said “Let’s check which ports are being blocked.”  I thought “well, it’s working so I don’t know what good that’s going to do?  It’s just super slow.” but I bit my tongue and went through the motions.</p> <p>We saw that port 3268 was being blocked from SharePoint servers to AD.  We unblocked it and the people picker ran like the wind.  I was amazed.  Now that we knew the port number things became easier to find.  First thing I did was tweet about it.  Then we went and did some research.</p> <p>Our infrastructure was a little weird, they are . . . let’s say, firewall friendly.  Between the 3 servers in the SharePoint farm there are 3 firewalls and then between all that and AD there’s one going out and one before active directory.  The outbound firewall rule was prohibiting 3268 from going out.</p> <p>Last night I had an interview and it came up and I couldn’t hardly remember the port, so I thought I’d blog about it.  An hour ago I sat down to write this post and couldn’t find my tweet.  I never know how hard it was to find old tweets.  Good thing for me I have cool friends who know stuff.  <a href="" target="_blank">Dan Usher</a> send me this link <a href="" title=""></a> and I saw the port number and it jogged my memory.</p> <p> </p> <p>The long and the short of it is ldap at 389 is not as graceful as the catalog at 3268 at searching.  If you have a slow people picker try to find someone while looking at the traffic and you’ll see a wealth of information.</p> Stacy Draper eafd5627-20cf-4a5e-a75d-d6b4f2d5d9e6 Wed, 27 Oct 2010 12:49:31 GMT Google Wave RIP <p>So Google officially came out and killed Wave.  Here is yet another technology that I've learned that has one away.  They claimed adoption, frankly I was waiting for it's release!  I was planning on speaking about it at the SPEVO conference in London, but I got volcanoed out but I was going to switch topics anyways.  </p> <p>Some of the problems stem from the browser war.  Chrome loosely interpreted an HTML tag while IE strictly interpreted it.  This meant that worked in chrome and not IE.  So that kind of killed the whole Google wave to SharePoint integration.  Another thing that got worse was they playback.  It sometimes got out sequence and didn't playback character for character like they promised.  In the beginning it was great because it was different by providing the user with the context of time.  Towards the end it was just another forum or discussion board.  </p> <p>It's really too bad that technology didn't make it.  I think if someone were to deploy what Google had advertised I think would have been a great success.</p> Stacy Draper 0aaf6216-1462-4a62-918c-574d1f7a3a14 Fri, 06 Aug 2010 10:35:07 GMT Functions Used In Calculated Columns In SharePoint Lists A question that I've had on the back burner for quite some time is what are the functions in SharePoint calculated columns.  I've taken a cursory look here and there and never found the answer.  I've recently been passing direct messages via twitter to <span class="fn">Andrew Clark,</span> @sharepointac, and he sent me a message that had the answer I've been looking for <a shape="rect" href="" shape="rect"></a> Stacy Draper affdc88c-11c5-4afb-a839-430d10879476 Thu, 17 Dec 2009 10:52:43 GMT Working with existing SharePoint views from code <p>Every week I have to fax a form that has data that I keep in a log, a SharePoint list actually.&#160; The recipient expects it to be done by hand, I guess there aren’t many people who go the extra step and make a SharePoint list.&#160; I was just hoping to export the information to an excel spreadsheet,&#160; but the spreadsheet confused them.&#160; They just wanted to see their little for filled out by hand.&#160; I don’t like to do anything by hand.</p> <p>Using GDI+ to load up the form as a bitmap then using the Graphics object to draw text in a comic font, kind of looks like I wrote it by hand.&#160; I had even considered (and still considering) buying our own fonts, for each person who enters information into the log, from a place like <a href=""></a>.&#160; By checking the “last modified by” to see whose font to use.&#160; I decided against it because they are 9 bucks a piece and I figured no one would ever notice and there’s certainly no value in it other than it’s “cool”.&#160; Once the image is created it’s sent as an email attachment to <a href=""></a> and they fax it where it needs to go.&#160; Seems simple enough.&#160; I figured it would take a few hours, but I ran into a couple problems around using an existing view on a list.</p> <p>There is a time and a place to use a SPView vs an SPQuery.&#160; The problem is that people can change the SPView and that could be exactly what you want.&#160; But most of the time you want to use an SPQuery in your code.&#160; I was in a hurry and didn’t feel like writing a CAML query and it bit me right in the butt a couple of times.</p> <p>First problem I ran into was &quot;<em>Value does not fall within the expected range</em>&quot; which means the column isn’t in the result set that I was bringing back.&#160; So I went to the view and added the column, but not so fast!&#160; I first assumed that the column was there already and spent some time searching for a solution and trying a few variations on the code.&#160; This hacking led me down a road where I thought something was seriously wrong.&#160; I could do something like items[i].Fields[“my-Field”].InternalName and it would give me my_x002d_Field, or whatever the hex for a hyphen is.&#160; Then I would pass the internal name to the items collection like this items[items[i].Fields[“my-Field”].InternalName] and I still got the error!&#160; The point being I got all wound up in the wrong direction for two reasons:&#160; </p> <ol> <li>The fields collection doesn’t have anything to do with the fields that are brought back in the view.</li> <li>The hyphen wasn’t as near much trouble as I was trying to make it.</li> </ol> <p>The field names don’t change no matter what the user does, but they can delete a field.&#160; A missing field can cause your code problems, so you need to check for the field first just so your code doesn’t bomb.&#160; Using a view can be nice because a user change change the sort order or even the order of fields.&#160; They can also mess with the group by which leads me to the second problem.</p> <p>The other problem I ran into was a very vague message &quot;<em>An entry with the same key already exists</em>&quot; around Collections.Specialized was mentioned.&#160; I’m not making a collection, I’m being handed one!&#160; I was just simply pulling back a collection and I was getting this error messages.&#160; I tried it as an SPItemsCollection, I tried it as a DataTable,&#160; I tried it in the morning and I tried it at night.&#160; I was even looking around for a virgin goat to sacrifice.&#160; Then it dawned on me that the duplicate key that it could be talking about is the group by on the DateTime column.&#160; I removed the group by and everything worked as designed.&#160; I loaded up the ChartPart and pointed to a view that had a groupby on it as well.&#160; Groupbys are nice for people and I think a very common thing.&#160; But unless you’ve written your code to accommodate them know that you’ll have problems.</p> <p>For the most part an SPQuery is the way to go, but when I’m in a hurry, being cheap, or just want to prove a point I’ll use a SPView and manage it on the list.&#160; I can imagine where a SPView would be very useful when the business needs the user to manage the query, but if that’s not the case then SPQueries are the way to go.</p> Stacy Draper b247b0c4-7ee6-4639-a12d-936cb24e4e54 Sun, 20 Sep 2009 17:32:27 GMT Audio stops working in Windows Server 2008 <p>My workstation operating system (OS) is Windows Server 2008, for a number of reasons, but mostly so I can better describe what settings need to be set where.&#160; Everyone once in a while my audio has quite working.&#160; Actually on any server os my audio quits a lot.&#160; It usually comes back when I reboot but I don’t reboot but every 15 to 30 days.&#160; I have a bazillion things open and rebooting is always a pain in the butt.</p> <p>Start &gt; Administrative Tools &gt; Services &gt; Restart “Windows Audio”</p> <p>or if it happens enough make a batch file:</p> <pre class="brush: csharp;">net stop &quot;Windows Audio&quot; net start &quot;Windows Audio&quot;</pre> Stacy Draper f2a97402-8169-42a0-98b9-0e9fcb24ba3e Sun, 23 Aug 2009 10:03:02 GMT Ferrari Case Study <p>I just read the <a title="Ferarri Case Study" href="" target="_blank">Ferrari case study</a> and was surprised by this statement, <em>“Site traffic has increased by 237 percent, with a 150 percent increase in unique visitors.”</em> SharePoint by itself doesn’t increase traffic.&#160; Understanding how search engines look at your site and being able to manage the content search engines look at increases traffic.&#160; </p> <p>The article did state that it’s now easier manage content than it was in their previous java based version.&#160; It almost sounded like they had to have a developer make all content changes.&#160; I’m not a Java fan, but I do think this is a cheap shot at a whole platform.&#160; There are plenty of bad content management solutions in .NET technologies too.&#160; The increased traffic was a combination of a few things.</p> <p>When the content, meta tags, titles and other asset areas are easy to manage it’s easier to make the search engines like the site.&#160; It’s also important to know what they like.&#160; So it’s important to know what to do and to have the ability to do it, and this is what a properly implemented SharePoint brings to the table.&#160; Believe me you can set up SharePoint so that it doesn’t cater to search engines at all.&#160; It’s just content, like anything else it can be managed poorly or it can be managed well.</p> <p>These numbers do seem modest so I tend to believe they aren’t from a marketing champagne (because even a bad one would more than double your traffic) and are really from search engine optimization but it’s hard to know that for sure.</p> <p>The bottom line is that the case study didn’t clearly point out why traffic increased. I think they are trying to say that because the content was more easily managed they were better able to optimize the content for higher ranks on the search engines.</p> Stacy Draper 9d45c187-7364-4e0a-b26f-236a6660c3cc Wed, 05 Aug 2009 09:46:50 GMT I may pick and choose who I work with but at least I&rsquo;m not asking the government for money <p>Here’s a page out of my Sunday morning.&#160; I went to Chrysler.&#160; I heard that they had some pretty good deals so I thought I’d go find out more about it. Having crappy luck online and being in the area to big one that didn’t close down recently I thought I’d just drop in.&#160; Just on a whim and maybe walk out with a car.&#160; I just need adaptive cruise control and a few other things and I’d be set.&#160; Walking into the dealership I saw this sweet little Dodge Challenger and it looked cool.</p> <p>Upon entering the <a title="" href="">Arrigo dealership</a> I found there were 4 sales people and a receptionist.&#160; One of the sales people greeted me and asked me how I was doing and if he could help me.&#160; I said, “Sure, I’ve heard you got some great deals and I’d like to know more about your product line.”&#160; He pushes me off with a back handed wave onto the other sales people behind him.&#160; </p> <p>Another one in the bunch notices that I’m flailing and he asks me if he can help me.&#160; So I tell him the same but this time I don’t say what I want as smoothly, in looking back on it it’s because now I’m a little bugged and the Challenger is now where in my mind.&#160; I’m wondering to myself why I’m even here.&#160; Then this person comes up in between us and tries to be cute, but she’s not, and asks me if she can help me.</p> <p>Noticing that she was obviously the receptionist I said, “Look please don’t ask me if you can help me if you really can’t?”&#160; I’m there to buy a car,&#160; it’s not that big of a jump in logic.&#160; She nods her head like she’ll be able to help me so I tell my story a third time.&#160; She responds with, “Can I get some information?”</p> <p>“No.” she obviously wasn’t just wanting my name.&#160; I’m certain she wanted my address, email, and phone number.&#160; I just want to learn about Chrysler.&#160; She stood there looking at me with her shoulders shrugged as if to say, “If you don’t give me any information I can’t sell you car.”&#160; But before she could even come up with any nonsense like that I turned and started to walk out and it struck me as I was walking to the door and I turned and said&#160; “I may pick and choose who I work with, but at least I’m not asking the government for money.”</p> Stacy Draper 4192eb18-f763-4088-8f52-8215affa4b8d Sun, 26 Jul 2009 21:27:13 GMT First wave page <p>After <a href="" target="_blank">receiving notice</a> that I was accepted into the program&#160; I get my user name and password in less than 30 minutes.&#160; I get logged in and it was confusing at first because it’s a whole new interface and paradigm.&#160; Like chat and forums all mixed into one.&#160; Like forums with the extra ability to reply right in the middle of someone else's sentence.</p> <p>The first thing I wanted to do was build extract a wave to my own web page.&#160; I did that at <a title="" href=""></a> it’s my wave attempting to recruit other developers to help build a bunch of controls around wave.&#160; </p> <p>I was trying to figure out how to keep the screen shot in sync like take one every 5 minutes for example,&#160; but I couldn’t figure out an easy way to do that.</p> <p>So far there are three of us and 2 features, create new wave and rss feed.&#160; Once I get it done I’ll stick it in a web part this will probably be a codeplex project and I’ll post the url to it once we get it going.</p> Stacy Draper 09a0829d-4cc5-4b90-815d-dea80389ccd9 Fri, 24 Jul 2009 08:23:18 GMT