Slowly releasing new music
It’s been over 3 years since I’ve released any new music. (It was March of 2008 when La famille du solénoïde was finally released on iTunes, Zune, Amazon, etc).
I started SLOWLY working on new material when inspired just over a year ago, and have about 8 different musical ideas I’m working on. Of those, I’ve released two of them as singles.
Missing you between lucid dreams (sample here)
and
Little Angels (sample here).
I like to provide my own samples to my music a bit longer than what you would normally get at the digital distributors. Plus, it’s the sections I want you to hear, not just what they chose
.
Missing you was released almost a year ago, and is already available at most digital music sites such as iTunes, Amazon, Zune, Rhapsody, etc. while Little Angels just went live to day at cdbaby. It should be making it to the digital distributers over the next couple of months, but feel free to check it out at the cdbaby site.
If you have the time, go check out the samples I provided above and let me know your thoughts!
Update: By popular demand
Here is a sample for “Sea Dragon” (sample here) I didn’t include it in the initial post
.
- Keith
Retrieving the Source Term for an items field.
I’m working on a project where I needed to get back to the term properties for various fields of a SPListItem that are based on a managed metadata column.
The actual process of getting back to a fields source term turned out to be rather simple, as the TaxonomyFieldValue object gives you everything you need.
I thought others might find this useful, so I present my GetTerm method here. This sample is provided as an Extension method, but you certainly can use it standalone if you wish.
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Taxonomy;
namespace krichie.ExtensionMethods
{
public static class Extensions
{
/// <summary>
/// Retrieves the Source Term for an items field.
/// </summary>
/// <param name="item" />The item to inspect</param>
/// <param name="fieldName" />The name of the field</param>
/// <returns>The Taxonomy term</returns>
public static Term GetTerm(this SPListItem item, string fieldName)
{
Term term = null;
TaxonomyField field = item.Fields[fieldName] as TaxonomyField;
// if this is not a TaxonomyField throw a new exception
if (field == null)
throw new Exception(fieldName
+ " is not of type"
+ " Microsoft.SharePoint.Taxonomy.TaxonomyField.");
TaxonomyFieldValue value = item[fieldName] as TaxonomyFieldValue;
if (value != null)
{
TaxonomySession session =
new TaxonomySession(item.ParentList.ParentWeb.Site);
if (session.TermStores.Count != 0)
{
TermStore store = session.TermStores[field.SspId];
TermSet set = store.GetTermSet(field.TermSetId);
// Get the term using the distinct TermGuid.
// If you were to just use set.Terms[fieldName],
// you would only examine the root of the term set.
term = set.GetTerm(new Guid(value.TermGuid));
}
}
return term;
}
}
}
HTH!
- Keith
So for the past week or so I’ve had this looming issue hanging over my head that I would try to nail down in-between other issues that I swear was going to be the death of me. I knew whatever it was had to be something really simple that I kept overlooking and something that, when I finally figured it out, would be quite elemental.
The problem was that I had written an EventReceiver to handle ItemAdded events for a custom list. The handler simply creates a task in the Tasks list corresponding to the new item added to the custom list. Every time an item was added to the custom list, the event was firing twice. I was associating the event receiver to the custom list through FeatureActivated on a feature receiver for my Event Receivers project.
I had already covered all the basic things such as:
- Ensuring I set EventFiringEnabled = false
- Ensuring that Require Check Out wasn’t the cause
- Ensuring that my handler code wasn’t actually adding back to the list

- No, the event receiver association wasn’t applied via a site template. This was a UI created site, and the list was not generated from a template either.
I even went as far as completely emptying the body of the handler to see that in fact the event was firing twice.
As with any problem, I always try to resolve it through the process of elimination by first isolating the core issue into a test project and therefore out of the primary project I’m experiencing it in because sometimes you can’t see the forest because of the trees. This particular problem was no exception.
After creating the simple project, the problem was still there.
Even a simple app to enumerate the event receivers associated to the list only showed the one instance. It was crazy.
Well, I had moved on to other things again, when all of a sudden, I noticed that new tasks were being created in the task list for some documents that I was uploading to a different document library. Aha! Now I had something else to go on. The event wasn’t firing twice for the same list, it was firing for ALL Lists. That’s pretty much the symptom for a receiver associated to a list template, but this was NOT a list template!
Then it dawned on me.
I took another look at my project.
I took another look at my event receiver I had added via Visual Studio to the project.
Then I realized the mistake I had made.
Yes, I had left the elements file for the Event Receiver there, and therefore when the feature was activated for the project, the receiver got associated to ALL lists on the site. It wasn’t going to show up in the EventReceivers collection for that list instance, because it was associated to the list type. When I added it to the list instance, it just caused the event to fire twice on THAT list. <facepalm>
I could have just removed the elements file reference from the feature, but just chose to delete the elements file in its entirety. I didn’t need it.
So folks, when you create an event receiver via the SharePoint tools in Visual Studio, and you REALLY don’t want it associated to every single list, remember not to be a bone head like me.
I knew the problem was elemental, I just didn’t realize how elemental it was.
- Keith
Bráthair! Chi mi dh’aithghearr sibh!
Am màireach is going to be a deagh latha!
It’s the first time this year my good friend, my Bráthair at heart, Jon and I are going to be at Scarborough together.
When he and I get together out there, it’s ALWAYS a good time
.
Jon and his wife welcomed their beautiful daughter into the world last year, so naturally it’s not as easy as it was to just “Hook up” out there any time we wanted. But everything is squared away for tomorrow, and I don’t know who in our group is more excited than the other. We’re all pumped! Tha mi sona!
Oh and I’m sure there will be more than enough embarrassing pictures
. We’ll just have to decide which ones make it out into the public
.
Chi mi a-rithist sibh!
- Keith
[Update] – 05-11-2011
Figured I would share a few pictures of the event with my Bráthair:
It was a blast ![]()
So I’ve struggled with this weird issue for most of the day yesterday and this morning. The issue is that a new SharePoint custom content type I’m adding to the project I’m working on, was not showing the additional site columns on the forms at all. (Yes, as you’ll notice, some are marked NOT to show on some forms, but one specifically is, and it was not showing at all)
Eric and I exchanged a few emails about it this morning, then double teamed it this morning over IM to get to the bottom of it. (More on the when NOT to listen to your boss bit in a moment, but it was important to listen to him this time
)
Let’s start with what the schema for the content type WAS, then I’ll explain what I changed.
Initial Schema
<?xml version=”1.0″ encoding=”utf-8″?>
<Elements xmlns=”http://schemas.microsoft.com/sharepoint/”>
<!– Define fields–>
<Field ID=”{9EE866A5-34D6-403A-870E-D058441426DE}”
Name=”M_UserAssignment”
DisplayName=”User Assignment Form Link”
Group=”My Project Site Columns”
Type=”URL”
DisplaceOnUpgrade=”True”
Required=”False”
Format=”Hyperlink” />
<Field ID=”{29E5151C-83C6-4FFF-980C-BAC76EC20665}” Name=”M_RequestingUser”
DisplayName=”Requesting User”
Group=”My Project Site Columns”
Type=”Text”
DisplaceOnUpgrade=”True”
Required=”False”
MaxLength=”255″ />
<Field ID=”{9A4B573E-BE14-4E8B-8F12-71C441116BA4}” Name=”M_PermissionedDocuments”
DisplayName=”Permissioned Documents”
Group=”My Project Site Columns”
Type=”Text”
DisplaceOnUpgrade=”True”
Required=”False”
MaxLength=”255″ />
<!– Parent ContentType: Task (0×0108) –>
<ContentType ID=”0x0108008fc7a1218d6d4a48a89adc4c2d4e3fa7″
Name=”Document Assignment Task”
Group=”My Project Content Types”
Description=”Task used to track Document Assignments”
Version=”0″>
<FieldRefs>
<FieldRef ID=”{29E5151C-83C6-4FFF-980C-BAC76EC20665}”
Name=”M_RequestingUser”
DisplayName=”Requesting User”
Required=”False”
ShowInDisplayForm=”True”
ShowInEditForm=”True”
ShowInNewForm=”True” />
<FieldRef ID=”{9EE866A5-34D6-403A-870E-D058441426DE}”
Name=”M_UserAssignment”
DisplayName=”User Assignment Form Link”
Required=”False”
ShowInDisplayForm=”True”
ShowInEditForm=”False”
ShowInNewForm=”False” />
<FieldRef ID=”{9A4B573E-BE14-4E8B-8F12-71C441116BA4}”
Name=”M_PermissionedDocuments”
DisplayName=”Permissioned Documents”
Required=”False”
ShowInDisplayForm=”False”
ShowInEditForm=”False”
ShowInNewForm=”False” />
</FieldRefs>
</ContentType>
</Elements>
The were actually two issues with the above schema
- True != TRUE. I’ve used “True” (mixcased) before for certain attributes but it never seemed to matter, but if memory serves me well someone mentioned to me before to just always use the Uppercase version “TRUE” no matter what as there were inconsistencies in how SharePoint interprets it in various places. Oh well, lesson learned again. Oh, and I made instances of FALSE all upper case as well.
- Although this worked for Eric, it didn’t work for me 100%. For me, I also had to insure that the Inherits attribute was set on the Content Type. I should NOT have had to do it, since the documentation here clearly states: “If Inherits is FALSE or absent and the parent content type is a built-in type, the child content type inherits only the fields that were in the parent content type when SharePoint Foundation was installed. The child content type does not have any fields that users have added to the parent content type.” Well, my parent type WAS a built in type…The Task type. And surely without it, it had the base Task fields in it, just not the ones I added. Regardless, once I added it, everything worked like a charm. (Edits highlighted red)
Final Schema
<?xml version=”1.0″ encoding=”utf-8″?>
<Elements xmlns=”http://schemas.microsoft.com/sharepoint/”>
<!– Define fields–>
<Field ID=”{9EE866A5-34D6-403A-870E-D058441426DE}”
Name=”M_UserAssignment”
DisplayName=”User Assignment Form Link”
Group=”My Project Site Columns”
Type=”URL”
DisplaceOnUpgrade=”TRUE“
Required=”FALSE“
Format=”Hyperlink” />
<Field ID=”{29E5151C-83C6-4FFF-980C-BAC76EC20665}” Name=”M_RequestingUser”
DisplayName=”Requesting User”
Group=”My Project Site Columns”
Type=”Text”
DisplaceOnUpgrade=”TRUE“
Required=”FALSE“
MaxLength=”255″ />
<Field ID=”{9A4B573E-BE14-4E8B-8F12-71C441116BA4}” Name=”M_PermissionedDocuments”
DisplayName=”Permissioned Documents”
Group=”My Project Site Columns”
Type=”Text”
DisplaceOnUpgrade=”TRUE“
Required=”FALSE“
MaxLength=”255″ />
<!– Parent ContentType: Task (0×0108) –>
<ContentType ID=”0x0108008fc7a1218d6d4a48a89adc4c2d4e3fa7″
Name=”Document Assignment Task”
Group=”My Project Content Types”
Description=”Task used to track Document Assignments”
Inherits=”TRUE”
Version=”0″>
<FieldRefs>
<FieldRef ID=”{29E5151C-83C6-4FFF-980C-BAC76EC20665}”
Name=”M_RequestingUser”
DisplayName=”Requesting User”
Required=”FALSE“
ShowInDisplayForm=”TRUE“
ShowInEditForm=”TRUE“
ShowInNewForm=”TRUE” />
<FieldRef ID=”{9EE866A5-34D6-403A-870E-D058441426DE}”
Name=”M_UserAssignment”
DisplayName=”User Assignment Form Link”
Required=”FALSE“
ShowInDisplayForm=”TRUE“
ShowInEditForm=”FALSE“
ShowInNewForm=”FALSE” />
<FieldRef ID=”{9A4B573E-BE14-4E8B-8F12-71C441116BA4}”
Name=”M_PermissionedDocuments”
DisplayName=”Permissioned Documents”
Required=”FALSE“
ShowInDisplayForm=”FALSE“
ShowInEditForm=”FALSE“
ShowInNewForm=”FALSE” />
</FieldRefs>
</ContentType>
</Elements>
So in this case, it was wise to listen to my boss. Although I think it’s quite retarded. (Not him, just the fact that you might want to use all uppercase for these attributes
).
Oh, and as far as when NOT to listen to your boss? Well when this little challenge began, he told me to hold off on something we were working on as he was about to check in some code to our source control. I said sure, it’s time for a coffee break anyways.
Well, I came back and had a coughing fit with a mouth full of coffee, and spewed it all over my keyboard; monitors; desk; etc. It wasn’t a pretty site. I tried to turn my head in time, but it just didn’t happen.
Now the left CTRL and Function key on my laptop keyboard seem to be permanently out of commission. and I can’t use the laptop keyboard to type at all <sigh>. Now I have to make a choice.
- Send it in for repairs (Warranty is out, so that’s going to be a chunk), and not be able to go to my remote office in the afternoon time without taking a spare external keyboard. or…
- Order a new laptop.
Quite honestly, I think I’m going to do both. I want a more powerful laptop, and I can recoup the repair cost by selling the old laptop to a family member
.
One thing is for sure. The next time Eric tells me to go take a coffee break, I’m either going to just stay put, or just STAY AWAY FROM THE KEYBOARD.
HTH
- Keith
Feelin’ the Wave
Wasn’t going to formally announce this on my blog at first, but yes I have recently joined Eric Shupps and the Binarywave team as a Senior SharePoint Programmer/Analyst. Eric and I go back pretty far (not sure exactly how far, but that’s irrelevant), and I’m excited to have the opportunity to work with him and the rest of the team moving forward. This was really an opportunity I could not pass up.
I’m already diving in on my first SharePoint 2010 project with the company, and I strongly feel the work I will be doing will provide me more opportunity to share insights into SharePoint 2010 development that I hope you’ll find useful.
Oh, and for the record… If Eric forces me to wear a Cowboy hat, he’ll have to wear a Kilt in return.
Just sayin’ ![]()
- Keith
Saw an interesting tweet from a friend today that I somewhat agree and disagree with. In a nutshell it was: “ALL developers should be required to spend 1 week per quarter as front-line helpdesk support for their own products.”
I agree that “some time should” but not a whole week every quarter. The response to that was “You need a week to get a feel for the issues. Maybe not quarterly, but just after release, and while working on the next rev.”
Again, I agree that you need to get a feel for some of the issues, but you have to look at how much time a core dev would spend doing helpdesk support depending on the scale of the project itself.
Let’s consider the sole one-man shop for a project:
- Chances are you’re already your own helpdesk, nuff said.
Ok, so how about a small shop with say 3-4 developers
- Your devs may also still be your helpdesk, but in a limited fashion. You probably have someone lined up to take front line helpdesk tickets, but your dev’s are actively involved (especially if it is somewhat of a highly utilized application)
- In this case, all your devs should be somewhat familiar with the features that one of the other team mates are responsible for.
- Watch for trending issues with a particular feature within the application. Assign the responsibility of the dev responsible for those features to attend routine “Assistance” to your helpdesk personnel.
So now, a large scale application with 10’s or 100’s of developers
- Assigning a random developer to helpdesk is probably not going gain you anything, because the chances of him actually assisting someone with the component he is responsible for is going to be pretty slim I would think.
- If anything, he should be responsible for listening in, and reporting back to the team responsible for the types of issues.
- Depending on his area of expertise, he may be just as clueless as to the issue or what to do about it than the person calling in.
- He’s just wasted time listening or trying to help customers who he can’t even help with, than spending quality time fixing bugs in his component, or working on the next rev of his component.
And here are just some random points regardless of the size
- Not every developer is customer friendly. It’s just a fact. There are great developers who write awesome code, but have horrible people skills.
- I have seen issues go from bad problem to horrific political snafu because the wrong person was on the phone with the customer.
- Hopefully your organization is large enough, and the PM (Product/Program Manager) responsible is involved in this area to effectively communicate issues back to the developers.
I know there are lots of other points here I haven’t even mentioned, and I’m sure someone will add points or debate the subject.
The bottom line is, you can’t just put a blanket statement that “ALL developers should be required….as front-line helpdesk support” to this scenario, but rather “ALL developers should be required to listen IN”. Based on experience on both sides of the fence (Support & Development), I just don’t agree it works.
- Keith
This weekend was one of the best weekends I’ve ever had. I can honestly say that. Even though it was mostly spent on the road, I had but one mission in mind. To make a sandwich
If you’re a parent, you’ll understand.
Sometimes I let the stress of life, and other things prevent me from remember what the most important things in life are. Family. This weekend was devoted to mine….And sandwiches. A lot of friends asked me what I was doing this weekend, and I told them “Making a sandwich”, and yes there were many curious looks. They asked me “Ok?”
“Yep I responded, I’m heading down to my daughters to make her special sandwich”
“Ok, so what’s in this special sandwich?” they would ask.
“Nothing special”, I would reply
.
You see, as silly as it may sound, the one thing my oldest daughter remembers about growing up, is Dad’s Sandwich. We all have our comfort foods, and for her…one of them is simply this sandwich.
For the longest time, I didn’t know it meant so much to her. I was always concerned about not having those special moments with my oldest…Thinking to myself “Man, I should have done this when she was little..” or “We could have done this more…” etc. But the bottom line is, you never know just how much a simple thing is going to mean in your child’s life.
When I was growing up, my dad would get myself, my older brother and younger sister, every other weekend, and it was pretty much the same story every time…Either a movie, lunch or dinner at Denny’s, or walking around to the music store and browsing around. It wasn’t that he could not do anything else, it’s just that he had to find a common thing we could all do together, that we would all enjoy. (Sure, we did other things, but these are the key things I remember). Regardless, this is the one thing I love and remember about my father. I knew that when it was our time with him, we were definitely going to see the latest greatest movie at the theatre
It was a given. And I remember and loved it every single time. It wasn’t really that we were going to see the latest and greatest, it was that this was OUR TIME with him. For that single reason I still love going and paying the outrageous price for a movie ticket to sit in a theatre through a lot of really bad movies. It’s the waiting for those few moments when I see an epic flic, and think to myself “That was worth the price of the ticket; the popcorn; etc” and I walk out with that nostalgic feeling and wishing my dad was there with me.
I stopped by my dads house yesterday on the way back home. It was only oh…about 200 miles out of the way on an already long road trip back home, but it had been a long time since he and I have had a chance to sit, relax, and catch up. We got on the subject of movies, and he explained how bad he felt that this was mostly all we did when he had us. I told him, “Are you kidding? I loved those times!” What I didn’t tell him (mostly because I didn’t know how to explain it) was that it’s ok, because that’s MY Sandwich. That’s the thing I LOVE and MISS about my time with my dad. I told him “Dad, don’t worry about it, it’s not WHAT we did, is just that we did it together.
When my oldest was growing up, I was just getting started in my career. We certainly didn’t have a lot (not that it truly matters), but I wanted to do so much more with her. On the weekends, when there was nothing else going on, we would make a sandwich; sit and watch goofy movies; and build up memories. For her, Dad time was Sandwich time
.
Sometimes I get that call from her, when she’s had a bad day, and it ends with “I wish you were here to make me a sandwich”. At first I thought to myself “Really? You want me to make you a sandwich? What was so special about about a simple sandwich…I didn’t do anything special, it was really just mayo, mustard, American cheese, Bologna, etc…” but to her it was special. That was HER Dad time.
So this weekend, on my way down she asked what I wanted to do, did we want to plan anything. I told her… “No, I don’t want to plan anything, I just want to come down and spend time with you. We don’t have to do anything…but the ONE thing I’m doing is, I am SO making you a sandwich”. So Saturday we go to the store to get supplies. Fresh sliced Deli meats and cheeses, Lettuce, etc. I’m making sure I’ve got anything and I tell her “Let me just get some chips to go with these, I’ll try to find something lite” and she points at the Doritos and I say “Oh, you want Doritos? Ok.” Her response was “Yeah dad, you’ve got to put them on the sandwich!”. And then I remembered. Yep, I had always put Doritos on top of everything, and crunched them down
. Ok so maybe there was ONE special thing on the sandwich and I almost forgot! We got home, I put my special Dad Sandwich makin’ skills to work, and we just enjoyed the late afternoon pigging out on sandwiches full of stuff none of us really need right now
but it was timeless.
So what is all this babbling on about? It’s about not worrying what you do or don’t do with your kids if you have them. Just SPEND TIME WITH THEM. In the end, THEY will pick out what’s special to them.
Just remember It’s not what’s in the Sandwich, it’s who made it.
And if you’re REALLY curious about what was in this sandwich:
- Bologna
- Turkey
- American Cheese
- Provolone Cheese
- Lettuce
- Mayo and Mustard
- Dill Slices
- Doritos on top!
- Love and Care!
Cheers,
- Keith
Update:
Was talking to Kat’s Mom about this, Had to update it to “And Glitter”
for something she wanted to start this year too. Not going to try to explain it, just remember to also try to create those Sparkling moments
.
Sardine Sandwich
Ok, so I can’t even remember exactly how it started, but here is what I remember.
I’ve been trying to change some long time habits, and adjust my lifestyle a bit which are:
- Eat more than one meal a day
. I was literally only eating Dinner, and very late at that. - Eat at home more, and stop the fast food shuffle.
The reasons should be pretty obvious, 1 to realign my metabolism to aid in weight loss (i.e. not eating that one meal a day, late in the evening
) and two, just to stop spending so much darn money eating out.
Long story short, I decided to start taking a photo of things I was preparing myself and posting the pictures on facebook to basically make other people hungry and to annoy (in a completely loving way) a friend of mine. This led to this friend saying the other day something to the effect of “OMG, I wish you would stop, I mean you’d take a picture of a Sardine Sandwich and post it knowing you”.
She said this, thinking this was the most far off thing and that I would not just have the ingredients laying around the house.
Well, let’s just say 3 minutes later after that statement I posted the following picture
.
And no, I didn’t eat it. But it was a fun joke ![]()
- Keith
Incoming Email ServerName whoops!
This post is in regards to WSS 3.0/MOSS 2007 but I’m sure the same applies in 2010.
I’m working on a project in which we’re handling responses from users via an email enabled list, that will then programmatically take action on a workflow task on behalf of the user. This is so the business users can approve/reject a given task on their mobile devices without having to be physically connected to the companies internal network.
In the email body that we’re generating for the response, we’re generating the reply to address for the email as <listalias>.<hostingserver> where listalias is the name we’ve configured on the incoming email settings for the list, and hostingserver is the host address for the SharePoint server which is handling incoming email.
The problem was I was using the ServerAddress property of the SPIncomingEmailService instance to get the server address (Which might naturally be your first choice), such as the following:
String serverAddress = Microsoft.SharePoint.Administration.SPFarm.Local.Services.GetValue<Microsoft.SharePoint.Administration.SPIncomingEmailService>().ServerAddress;
but that doesn’t give you the actual name configured in the Incoming Email settings in Central Admin (Operations/Incoming e-mail settings/E-mail server display address). To get that value, you need to use ServerDisplayAddress.
Just thought I would share
- Keith