Nuget server on IIS6 returns 404 when downloading package after upgrade
Friday, September 02, 2011 8:03:30 AM (GMT Daylight Time, UTC+01:00)
We updated our nuget server today and ran into a problem where regardless of package selected or whether it's through the nuget package manager or the nuget package explorer, the server returns 404 (File Not Found).

What was odd about this was that the packages exist and the feed was valid:

There are a couple of comments about this online e.g.: Codeplex Discussion 246387 but nothing helped. It took a while to work out that it was caused by a slight change to the way the nuget server makes it's calls. Comparing the IIS logs between the old and new version of nuget server, the previous version of nuget server would redirect the user directly to the nupkg file:
2011-04-21 08:47:46 W3SVC1759424837 192.168.1.1 GET /Packages/TheSiteDoctor.2.0.235.68.nupkg - 80 - 192.168.1.2 Package-Installer/1.2.20325.9034+(Microsoft+Windows+NT+6.1.7601+Service+Pack+1) 200 0 0
On the new one however, it passes the various requests through a new MVC route "download":
2011-09-01 11:31:16 W3SVC1759424837 192.168.1.1 GET /download/TheSiteDoctor/2.0.235.68 - 80 - 192.168.1.2 Package-Installer/1.2.20325.9034+(Microsoft+Windows+NT+6.1.7601+Service+Pack+1) 404 0 3
This is fine if your nuget server is running on IIS7, it will "just work". However if you're running IIS6 you'll need to make one additional change which is mapping all request through the aspnet_isapi.dll (a wildcard mapping). This is easy enough:
- 1. Open the site's properties in IIS6
- 2. Navigate to the "Home Directory" tab
- 3. Click the "Configuration" button:
- This will then open the "Application Configuration" window:
- Now you'll need to add the aspnet_isapi.dll mapping, the path of this will depend on the whether you're running Windox 64bit or not:
32bit Framework: c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll
64bit Framework: c:\windows\microsoft.net\framework64\v4.0.30319\aspnet_isapi.dll
Make sure you uncheck the "Verify that file exists" checkbox
Et voila your packages should all be working again.
Leave a comment if you need any additional help or it helped you.
How to hide a tree node in uCommerce or Umbraco
Wednesday, August 31, 2011 10:37:04 AM (GMT Daylight Time, UTC+01:00)
Have you ever needed to hide a node in the Umbraco or uCommerce trees? It's actually very easy, we needed to hide the Orders, Marketing and Analytics nodes of a new uCommerce install we were working on. All you need to do is set the "treeInitialize" value in the umbracoAppTree to false. This will then hide the entire tree.
The Update SQL
BEGIN TRAN
UPDATE dbo.umbracoAppTree SET treeInitialize = '0' WHERE appAlias = 'uCommerce' AND treeTitle = 'Analytics'
ROLLBACK TRAN
To use the SQL you will need to know the appAlias (this is the bit after the # in the Umbraco admin url once you've clicked the section icon e.g. in "http://www.domain.com/umbraco/umbraco.aspx#uCommerce" the appAlias is uCommerce). If you know the treeAlias it might be better to use that but it's probably easier to use the tree's title (in our case this would be Orders, Marketing and Analytics).
Not sure what tree you should be hiding? Just open the umbracoAppTree table and you'll have the trees from all sections there.
uCommerce tree before

uCommerce tree after

Couldn't be any easier could it!
Is the power of social media returning the power to the people?
Thursday, July 07, 2011 11:17:00 PM (GMT Daylight Time, UTC+01:00)
I watched a couple of really interesting things unfold today which lead me to believe that this is a day I won't forget for a while -and Twitter (or more widely social media) was instrumental in both.
At 12:04:25 today (7th July) Sarah tweeted this status which linked through to her blog post about currys.co.uk which vented her frustration at the way Currys UK treated her.

This isn't the first time that a frustrated consumer has openly complained about their service from a large corporation (and it won't be the last) but where in the past most of the blog posts have fallen by the wayside, what's interesting about this particular instance is the additional clout Twitter added.
I'm almost certain that the call-center person thought "whatever" when Sarah said that she was going to show them the power of social media but I don't think they quite expected the response they got.
The Data
| Hour (GMT) | Tweets |
| 12:00 | 121 |
| 13:00 | 80 |
| 14:00 | 49 |
| 15:00 | 33 |
| 16:00 | 10 |
| 17:00 | 10 |
| 18:00 | 7 |
| 19:00 | 1 |
| 20:00 | 1 |
| 21:00 | 2 |
| Total | 314 |
We wrote a monitor for the various projects we're working on at the moment so I setup a search for the phrase "sazzy currys" which resulted in the following data:
Within the first hour alone, around 120 tweets had been sent. "120? That's a drop in the ocean for Currys" I hear you say -this is true. However to help put it into perspective, when we launched www.borninthebarn.co.uk, 35 tweets generated well over 5,500 hits (and it's still rising) so using the same ratios, that's roughly 19,000 hits and it doesn't factor in those tweeters with far more reach than my followers have (many of Sarah's friends have over 10,000 followers) so I suspect that 19,000 is conservative.
Assuming the same ratios throughout then, so far in the space of 10 hours, Sarah has reached and audience of well over 50,000 people -all who are able to empathize with her and will no doubt further communicate the message.
Ironically (or perhaps more conveniently) @CurrysOnline was only setup within the past two weeks* so this isn't a great introduction to social media -but could certainly be turned around and turned into a good thing if they played their cards right.
* Interesting side note, I did question whether that's an official account because:
- Their first tweet was on a Sunday -not necessarily what you'd expect from a company that I rather suspect only makes their marketing department work Mon-Fri 9-5
- They're not using the same logo as the website (could just be an internal branding issue granted)
- There's no mention of the account on their site from what I could see from a cursory read
The Public vs. News of the World
The second -and I think more concerning/end-of-and-era type thing that happened today was that News of the World (a UK tabloid) announced that it was printing it's last issue this Sunday.
Putting to one side the ethics of why it's getting closed down, I get the impression that social media as a whole has played a large part in the decision. In the past (as with the @Sazzy vs @CurrysOnline above), people have ranted and raved online about things but as there hasn't been a real "collective" so to speak, these haven't had that much of an impact.
Today however I've seen message after message about the News of the World (it's also been fueled by Rupert Murdoch's BSkyB takeover bid) but the general temperature of the public can now be actively monitored -and sadly for these large corporates it's all out in the open.
In Closing
As the saying goes "With great power comes great responsibility" so I'm still undecided as to whether this new found voice/power is a good thing but the reality is, if the larger corporates don't sit up and start listening quickly I rather suspect that more will fall fowl soon.
uCommerce is now free and why it’s great news
Friday, June 17, 2011 12:38:15 PM (GMT Daylight Time, UTC+01:00)
Those of you who were lucky enough to make it to CodeGarden 11 (or have been following the #CG11 hash tag) will no doubt already know that uCommerce Starter Edition is now free.
Why this is good news
For quite some time we've been lacking a good all-round e-commerce solution with CMS ability (regardless of platform). Many of us have written hacks, combined multiple solutions together to form a behemoth -usually involving multiple logins etc or attempted to write our own solution which (either down to time or budget limitations), is never quite re-usable. Ultimately, there's been no all encompassing solution that was affordable but more importantly, able cater for small stores as easily as it could enterprise level solutions.
Umbraco has been working hard over the past couple of years to make the CMS as robust as possible and is now powering sites like www.asp.net, http://msdn.microsoft.com and a fair few other enterprise solutions. Being a proven concept is great because it means your investment is minimal -you only need to learn one solution which is mature enough to cater the majority of scenarios and now adding e-commerce to it's arsenal means it covers all bases.
Which uCommerce version do you need?
One question that I heard a lot around CodeGarden was "yes it's free but what have they removed from it?". Usually when someone is giving away something for free, it's not quite what you need/want. Thankfully that doesn't appear to be the case with the free edition of uCommerce.
Depending on your requirements, you'll more than likely find that the starter edition more than covers your needs (it's what powers most of our solutions). I find the thing that usually confuses people is the use of "Catalog". In uCommerce, a catalog is a group of categories and most e-commerce sites only need one catalog.
You may need multiple catalogs in the following scenarios:
- The Umbraco instance runs multiple websites, each website needs to have it's own product catalog, shipping rules etc (basically it's own store)
- You want to have different category/product structures for different countries
How do they compare?
This is so hot off the press that they've not yet had a chance to update the comparisons so I may need to update this table but here's a quick look at the comparisons and I also currently don't know the prices
| Starter (FREE) Edition | Professional | Enterprise |
| Unlimited Categories |  |  |  |
| Unlimited Products |  |  |  |
| Product Relations (What Customers Also Bought) |  |  |  |
| Multiple Shipping Methods |  |  |  |
| Multilingual | |  |  |
| Marketing Foundation (built in marketing, promotion codes etc) | |  |  |
| Review System | |  |  |
| Multiple Catalogs | |  |  |
| Multiple servers supported out of the box | | |  |
| Multiple Catalogs with user level security | | |  |
What can you do with it?
uCommerce is able to handle pretty much any e-commerce scenario you're able to throw at it. We've reviewed all the e-commerce sites we've worked on over the years (either developed entirely or partly by us) and we have found very few scenarios that uCommerce isn't able to accommodate.
The really nice thing about uCommerce is if there's something missing you can simply write it yourself and plug into one of their many pipelines using .Net controls, XSLT, Ruby or Python (if you really wanted to!).
What does it mean for the competition?
There are a couple of other e-commerce solutions for Umbraco already namely Commerce4Umbraco (free and open source -based on dash commerce) and TeaCommerce. They've both got their strengths and weaknesses and that's for a different post but making uCommerce free will stir things up a little but in a very good way. It now means that regardless of your budget or requirements, you have a great choice of options.
I don't think this will kill off the other projects (and I hope it doesn't) because although uCommerce is most likely what we'll use every time, the other providers have got their uses in different scenarios and competition is healthy. If you're more confident in Umbraco itself then you'll probably "get" TeaCommerce quicker than uCommerce as they are structured slightly differently.
What does it mean for the community?
This is massively good news for those who already use Umbraco as it means that you can let your customers sell online from the same interface that they're already using, but I think this has wider implications for the industry as a whole.
As I mentioned earlier, Umbraco have been working hard on making the CMS a very robust offering. Being able to plug in an e-commerce solution now means you can offer your customers an end-to-end solution which easily rivals the enterprise (paid) solutions currently available. What's better for your customers is that it's all from one login whether it's content, e-commerce, blogging, Job listings etc.
I think that offerings like Magneto will be very interested to check out what they're doing. For those of you who think it's finally knocking out DotNetNuke as an offering, I'm afraid Umbraco did that in V3. 
Why am I shouting about it?
Ultimately it now means that there really is now no reason to not choose Umbraco -regardless of what platform you usually develop on (which is great because it means the community will grow).
Not a .Net developer? Don't worry, although it helps with customisation, it shouldn't stop you. The great thing with Umbraco and uCommerce is that you don't need to know any .Net to get running. The entire thing can be wired up through the web backend but if you don't believe me, get in touch and we'll go through it.
Disclaimer: I have been blogging and using uCommerce since it's first release and I am a proud wearer of their official t-shirt at CodeGarden but I still try and look at these things from an unbiased view point as if a better solution for our clients is presented to us then we'd consider it. Either way, I think this is a good move and if you want help with uCommerce, just get in touch.
Why we came up with Born in the Barn
Monday, June 06, 2011 2:50:18 PM (GMT Daylight Time, UTC+01:00)
Some of you may have already come across our new recruitment drive -www.borninthebarn.co.uk but I thought I would write a few blog posts about the thinking behind the website. This post concentrates largely on the business reasons behind it, I'll post separately about our findings and the technical/design aspects of the site later.
Firstly, if you've not already had a play, go to www.borninthebarn.co.uk and see what you think -and then tell your friends and family about it.
A little background
We started looking for someone to join The Site Doctor team a couple of months ago and followed the usual routes -we posted on job boards, shouted about it on various social media sites e.g. Twitter and LinkedIn, and took out an advert on a job website (in our case cwjobs.co.uk -who were good).
Despite a reasonable response from our efforts (discounting the recruitment firms), we didn't find anyone we felt fitted, so we took a moment to reflect and we realised why:
- We weren't offering a high enough salary to attract someone to our location or selling ourselves properly
- We were following run-of-the-mill methods but were looking for someone special
- Our efforts weren't concentrated and (because we were busy) lacked our complete attention
- Our portfolio was (and still is) woefully out of date and didn't overview the cool stuff we've been working on
But most importantly, we realised that it shouldn't be about us, all the job adverts we've seen to date have been about what we want from you and what we'll be giving you in trade -but why should it be all about what we want? Surely it's more important to know what you -the candidate wanted? As soon as we realised this, it gave us a whole new perspective on our recruitment drive.
Identifying The candidate
Once we'd realised it shouldn't be about us, the next step was to re-think our ideal candidate. Rather than thinking about the skill set, we needed to think long and hard about what they stood for and from this we would be able to work out how to "find" them.
One of the key things we're looking for in the ideal candidate is the right attitude. Looking around at people in the industry, there seems to be a clear divide between those who see it as just a job and those who enjoy -and have a passion for the work they produce. You've got to care about and enjoy what you're doing otherwise it really shows in the work that's produced.
So how do you find someone that cares about their work -and the industry as a whole? We feel they will be:
- Active on social media -Just by having a Twitter/Facebook/LinkedIn account shows a certain level of interest in new technologies
- Attend community events -It doesn't matter whether it's one of the big conferences (e.g. DDD, FOWA, NAConf etc) or a local meet e.g. MultiPack, just attending shows a certain level of interest
- Interest in new technology -HTML5
- Blogging -Ok not everyone has the time to blog (including me) but throwing up a post every now and again goes some way to showing that you care about others in the community and want to help them learn
So what could we do?

The obvious answer was to start again (one might say with a blank card!), put out another advert with a higher salary, more words on why we're great and more buzzwords but that would more than likely result in a similar response -a lot of time spent telling recruitment agents that we're not interested. More to the point it still wouldn't sell us to the candidate. The fact of it is that people get excited about different things -and it's not always all about the money (despite what some people say).
We needed a way of finding out what developers really wanted, we felt we knew what our best attributes were, but which were candidates looking for? Knowing which of them were something were good enough to tempt you to join us was the unknown. The original concept was to design a microsite which over-viewed the role, buzzwords, our clients along with any other selling points, but while sketching it out, it hit us -it's still all about us not you. So after a little more procrastinating, we thought, we're not sure what you would want so why don't we just ask?
Asking the community what they wanted from a job meant that even if we didn't find the candidate through the process, we would at least have a good idea of what people looked for in their role -which would then allow us to focus any future advert on just these. Giving people the chance to submit their own cards also meant that they were able to suggest other benefits/features that we hadn't thought about but may already offer (or be able to offer). Ok we're likely to get some joker posting that they want £1m or similar but we expect to get some gems among the rough.
And so was born the concept that is now www.borninthebarn.co.uk
Why we didn't focus on the role itself
You may have noticed that we don't really talk about the actual role itself -or salary. This wasn't an oversight on our behalf. We did this because we're flexible on both. Looking at the process more of a negotiation rather than set sale meant we were able to see what people felt they needed to join us.
On discussing salaries and competency internally, one thing that came to light was that people frequently over -and under value themselves. For example, I probably wouldn't apply for a senior developer role because the people I work with and socialise with at conferences etc. are what I would consider advanced developers (and so suitable for the senior role) and their knowledge blows mine out of the water. But what you forget is that these people also work on the platform that we use to code, they write books -and talk so as far as industry is concerned they're way beyond advanced.
Allowing the candidate to specify their worth meant that we don't discount the candidate before we've had a chance to think about whether we feel they're worth what they're asking (rather than them discounting the role before knowing whether it's what they'd want to do). At the end of the day, we have a maximum salary in mind, if we feel they're the right person but a little over our maximum salary we can then make the decision as to whether to stretch to their demands or not.
What do we hope for?
First and foremost we're hoping for someone to join the team at The Site Doctor's HQ but failing that, we're be happy to get a clearer idea of what people are looking for in their roles so we know what to talk about in our future job postings.
As I think this is also a better way of looking at the recruitment process (the focus being on your new employee rather than just what you need) I hope that other companies take heed and start looking at the way they conduct their recruitment processes. I realise that not everyone has this luxury but they could at least focus a little more on what's in it for the candidate, I think it would be the start of a better (and longer term) working relationship for both parties.
Fix Visual Studio’s crappy HTML formatting and automatic addition of id when pasting
Tuesday, April 19, 2011 5:56:59 PM (GMT Daylight Time, UTC+01:00)
Today I discovered two settings in Visual Studio that are about to transform my life (yes I realise that by just writing that I need to get out more.).
Anyway, the first stops Visual Studio formatting you code like this:
![ScreenClip [4] ScreenClip [4]](http://blogs.thesitedoctor.co.uk/tim/images/Fix-Visual-Studios-crappy-HTML-formattin_FB09/ScreenClip-4.png)
And transforms it into this:
![ScreenClip [5] ScreenClip [5]](http://blogs.thesitedoctor.co.uk/tim/images/Fix-Visual-Studios-crappy-HTML-formattin_FB09/ScreenClip-5.png)
To sort: Open Visual Studio, go to "Tools" -> "Options" -> "Text Editor" -> HTML -> "Formatting" and look for the button "Tag Specific Options" (in the bottom right). Click this button and you should get a window that looks like this:
![ScreenClip [2] ScreenClip [2]](http://blogs.thesitedoctor.co.uk/tim/images/Fix-Visual-Studios-crappy-HTML-formattin_FB09/ScreenClip-2.png)
Expand out "Default Settings" and then click "Client tag supports contents" and change "Line breaks" from "Before, after opening and after closing" to "Before and after" on "Client tag supports contents" and "Server tag supports contents".
This second one is another of those annoying bug bears of mine which is where Visual Studio insists on adding an id to every control you paste in -not something I really want in most cases. Anyway, sticking in the "Text Editor" -> "HTML" settings area, go to "Miscellaneous" and you'll see one there "Auto ID elements on paste in Source view" -uncheck that and click "OK" to save and apply your settings.

Looks like Visual Studio will become a decent HTML editor after all.
Taking UCommerce emails to the next level and include the order id in the subject, multiple recipients and Google click tracking
Friday, April 08, 2011 2:05:24 PM (GMT Daylight Time, UTC+01:00)
One of the things that I've felt has always been a little lacking in uCommerce was their email system, it's a great idea and nicely implemented but it was rather inflexible in earlier version -you couldn't send "other" emails easily etc.
Most of these bug bears have now been resolved however I still feel that even the latest v1.5 release is a few lacking features that we have tended to build into our email systems by default:
- No ability to use place holders e.g. include the uCommerce order id in the subject line or write "Dear John" as a greeting
- It didn't allow you to send to multiple CC or BCC recipients
- There's no click tracking built in
So what does it do?
In our recent project - www.ChalkboardsUK.co.uk, we extended the existing EmailService and "patched" the missing functionality. There's more we can (and will) do with this in the future but for now this should get you started.
By passing in a combination of QueryString and Placeholder parameters, you can send personalised emails to your customer e.g. have a subject line of "Your order with our store #1234" or start your email with "Dear John".

As well as enabling place holders it allows you to send your email to multiple recipients at the same time by simply separating the CC or BCC addresses with a semi-colon.
Finally (and I think this is pretty darn cool), it automatically tags the links within your email with the Google Analytics tracking code! By using the EmailProfile it will enable you to see whether customers are clicking through on links etc within your emails. Pretty cool eh!

The future
We're open to your thoughts on this and ideas for moving it forward but at the moment, we will be adding functionality:
- Pass in a core objects e.g. a purchase order to give them access to any aspect of the data
- Add the ability to format strings
- Repeating regions (though this should really be done within your XSLT) Let me know what you think by leaving a comment, tweeting @timgaunt or emailing me.
Download It
You can download the file right now by clicking here (TheSiteDoctor.UCommerce.EmailService.zip).
How to use it?
The use of this depends on your individual setup, in this post I'm going to assume you've got a separate assembly which you can include this in however I'll post another post soon which wraps this all up into a pipeline. We also use this for the customer "welcome" emails as well so we can send a pretty email welcoming them to the store.
uCommerce changes
Nothing needs to change in the way that you setup your emails in uCommerce. If you would like to send to multiple CC or BCC recipients, simply separate the addresses with a semi-colon (;) as you would in your standard email client:
s

Umbraco Changes
If you want your content editors to be able to include properties from the order in your email, they'll need to use place holders. At present, the place holders are fairly limited in that there's no repeating regions etc. You can inject anything you want (you'll just need to add the key to dictionary of place holders when constructing the email. The user can then use that value in the email by surrounding the key with square braces e.g. [Order.Total].
An example email:
Hi [Customer.FirstName]
Thank you for your order of £[Order.Total] on [Order.Date]. The details of your purchase are below.
Using it in your code
I would think the most common application for this at the moment will be within your own custom pipelines. If you've already used the UCommerce.Transactions.EmailService then you can retty much just replace the code. If you've not, here's an overview of how you can do it yourself:
// Create an instance of the EmailService
var service = new TheSiteDoctor.uCommerce.Transactions.EmailService();
try
{
// Get the current catalog's email context
var profile = SiteContext.Current.CatalogContext.CurrentCatalogSet.EmailProfiles.Single();
// Setup the QueryString Parameters for the page that's got the various content on -in this instance we're just getting an order confirmation so just pass in the order number
Dictionary<string, string> qs = new Dictionary<string, string>
{
{ "orderNumber", purchaseOrder.OrderGuid.ToString() }
};
// Add the various bits of information you want to be able to pass to the content
Dictionary<string, string> ph = new Dictionary<string, string>
{
{ "Customer.FirstName", customer.FirstName },
{ "Customer.LastName", customer.LastName },
{ "Customer.EmailAddress", customer.EmailAddress },
{ "Order.Number", purchaseOrder.OrderNumber },
{ "Order.Date", purchaseOrder.CompletedDate.Value.ToShortDateString() },
{ "Order.Total", purchaseOrder.OrderTotal.Value.ToString("f2") }
};
// Send the email
service.Send(profile, EmailTypeName, new MailAddress(customer.EmailAddress), qs, ph);
}
catch (Exception ex)
{
// Something "not good" happened so add any other info that might be of help
// Add the customer data
ex.Data.Add("Customer.FirstName", customer.FirstName);
ex.Data.Add("Customer.LastName", customer.LastName);
ex.Data.Add("Customer.EmailAddress", customer.EmailAddress);
if (purchaseOrder != null)
{
ex.Data.Add("OrderId", purchaseOrder.OrderId);
ex.Data.Add("Order.Number", purchaseOrder.OrderNumber);
ex.Data.Add("BasketId", purchaseOrder.BasketId);
}
// Send/log your alert
}
Treat all prospects with respect and courtesy
Wednesday, March 16, 2011 6:06:53 PM (GMT Standard Time, UTC+00:00)
Don't judge a book by it's cover -we've all heard that 101 times before but I can't stress how important this mantra is in business.
As I suspect you do, before we meet with a new client/prospect, we perform a little due diligence on them to build a picture of them, the business and their core values. This then prepares us for the meeting and allows us to show interest/knowledge in who they are and what they do.
If you don't do this already, it is important to do as it means you're not completely blind before meeting with the client. If nothing else, it allows you to tailor your offerings for them. At a minimum, for us this usually includes:
- Checking their website (if they have one)
- Searching on the company name
- If we have the registered name, search companies house
- If we know other companies or friends in the same sector, ask them if they know of or have heard of the company
- If you know any of the names of the people, a quick search on those too
- Have a quick search for any potential competitors
Although it might appear a little creepy, if the prospect contacted you then they've no doubt done the same to you and your company before contacting you.
Despite doing these checks however you can still misunderstand who the client is, what they do and what they're about or who they deal with. This might not be your fault, it might just be that they've not updated their details for a while (like us, our website mentions very few of our existing client base -all of who we're very proud of).
I doubt you'll manage to get it right every time, I can think of three separate occasions in the past few years -one of them very recently, where; despite our research, we had built the wrong perception of the company before meeting with them. However, by being interested, courteous and respectful at all times we didn't jeopardise our potential working partnership and have since worked on some fantastic and interesting projects.
Although you both might think you know each other, give them a chance to introduce themselves (keeping an open mind while they're doing so) and also take time to introduce your company. Even if you think you know the answer, ask them what they're about so you can verify the information you've found. Most importantly be interested in them, they've taken the time to meet with you -which you should be grateful of. It's all too tempting to think that it's you that doing them the favour -it's not (or at least not until you deliver them your beautiful brilliant solution).
Only once you've met with them and allowed them to introduce themselves to you will you be in a position to start deciding whether they're a client you'd like to work with.
So before you form your opinions on future prospects, show them the same interest, courtesy and respect that you would receive and get to know them. You never know where it might lead!