Sunday, March 11, 2007

Last week, I had to exercise the old gray muscle on some database design, and ran into a little gotcha when trying to make a high level conceptual database model in Visio.  Essentially, when you're using the ERD template, you can't model a many to many relationship without elaborating the model further with a junction table.

So that being established, I referred to my handy copy of Michael Hernandez's brilliant Database Design for Mere Mortals (by the way, I'm proud to be able to call him my friend), and some other articles including Jason Mauss' Database Naming Conventions for some opinions on naming things.

Many people suggest that the junction table name be a compound of the two tables comprising the many to many relationship (for example, DoctorsPatients).  In my opinion, this is fine only if the junction table will not contain other columns.  In many cases, the junction table will be used to record other information... order details, doctor assignments, etceteras.  In this case, I think it's better to formulate a name that describes the other content and let the two foreign keys (for the two tables with the many to many relationship) convey the many to many relationship.  For example, in the case of the Doctors and Patients, Assignments is more accurate than DoctorsPatients.

What do you think?

Sunday, March 11, 2007 4:46:18 PM (Mountain Daylight Time, UTC-06:00)  #     |  Comments [1]  | 
 Sunday, February 18, 2007

Though it's lacking some of the goodness of the same operation in MS Office applications, there IS a way to save PDF documents to a SharePoint document library directly from Adobe Acrobat 7.

The first thing you have to do is set up a new Network Place in My Network Places. To do this, open My Network Places, and click Add a network place.  Follow the Wizard, and in the Internet or Network Address field, enter the full URL to the SharePoint document library.  For example, http://sharepointserver/Shared Documents.

Then, in Adobe Acrobat, using the Save As dialog box, click My Network Places, and choose the Network Place you created.

This process won't prompt you for item properties (i.e. SharePoint columns), but it does allow you to get things into SharePoint right from Acrobat 7.

Sunday, February 18, 2007 2:38:47 PM (Mountain Standard Time, UTC-07:00)  #     |  Comments [3]  | 
 Thursday, January 04, 2007

Over on my OZ blog, I wrote a couple of posts about using folders in SharePoint lists and document libraries.  I bemoaned the use of folders in SharePoint document libraries and lists as a way to organize large quantities of documents. 

Finding something in a digital folder hierarchy can be impossible unless you already know the hierarchy. For example, I've seen top level folders in these hierarchies that align with a company's departments or divisions, beneath these are folders for fiscal years, then maybe some folders that describe activities.  What's the problem with this? If I'm new to the company, I pretty much need to understand the business before I can find the document I need.

It seems pretty natural to want to organize things just like you might in your physical filing cabinet, but a filing cabinet doesn't do things like search or filtering, and a computer doesn't expose things in a tactile way like a filing cabinet.  Back in the DOS days, if you had a folder hierarchy like the one I described above and you wanted to find a file with a certain string of characters in the file name, you could issue a command like this:

DIR budget*.xls /s

This would search through the hierarchy relatively quickly and list the files matching the pattern along with the folder in which the file resides.  In Windows, you could use Search, but it's fairly slow because windows has to parse through the contents of the hierarchy one file at a time.  Then along came desktop search which indexes the file system, making searches much faster. Nice, but we're still using a pretty blunt tool. What if we could label files with certain terms appropriate to our business and then quickly expose them based on those labels? 

We can add custom document properties to a file, but in Windows explorer, there's no way to include the custom property as a column and then filter or group on that column.  For example, what if I put all my files in one folder, and all my documents had custom properties called "Fiscal Year" and "Division"? Then, what if I could have a shortcut on my desktop that opened Windows Explorer and showed a list of files from my folder whose custom properties contained 2007 for Fiscal Year, and Manufacturing for Division?  Or what if another shortcut listed all the files in my folder, but grouped things by Division and then by fiscal year? This would be like a Pivot Table for your files... but to me it's like Microsoft gave us these Custom Properties and then didn't give us anything we could do with them.

The bad news is that the file system can't do this.  The good news is that SharePoint can. 

Custom Document Properties are metadata.  Being able to manipulate file listings based on their metadata is one of the core pieces of functionality in SharePoint.  My opinion?--- don't use folders in the file system OR SharePoint.  In a SharePoint document library, custom document properties can be promoted or demoted to/from the document library's columns (effectively linking the two). I believe we should use SharePoint, properly describe our documents with Columns (and/or custom properties), and then use custom views to filter and/or group based on these.  It gives you the ability to simulate a folder like experience, but it's important to note that in SharePoint, if you nest documents in folders, this doesn't work.

Thursday, January 04, 2007 1:42:02 PM (Mountain Standard Time, UTC-07:00)  #     |  Comments [0]  | 
 Sunday, December 17, 2006

Recently, I've been thinking a lot about inspiration and team dynamics.  Last week, I was listening to the excellent .NET Rocks episode 205.  Among many great thoughts, Venkat Subramaniam made an interesting point about mentoring-- something to the effect of "Mentoring is not giving someone answers, rather it's giving someone opportunities to find the answer themselves".

As I was listening, I'd been shoveling snow and not paying complete attention, but this idea grabbed my attention.  I rewound (do you do that with a podcast?) to the beginning, and heard another gem.  He told a story about how when you're trying to change lanes and you turn on your signal light, if there's someone in the next lane over your shoulder, they have a tendency to speed up.  This might cause an interesting response the next time you need to change lanes--- you might speed up, begin to turn, and then signal (only so you don't get a ticket). He went on to explain that if everyone would remember that on the road, we're not in direct competition, rather we're just trying to get where we want to go safely, it might reduce the occurrences of road rage (his story was much more amusing than the way I'm telling it, but you get the point).

A few weeks ago, I was reading "Dynamics of Software Development" by Jim McCarthy.  I particularly enjoyed his chapter titled "Don't Flip the Bozo Bit".  I've been guilty of Flipping the Bit on people in the past, and have made an effort not to anymore. I'm as imperfect as a person can get, and can use lots of advice like this-- I think there's a common thread. Too often, we make the mistake of taking the actions of others personally, or make inaccurate assumptions about their motives, when we should really be seeing things from a much broader viewpoint.

In the past, stress has gotten the better of me, but lately at work I've enjoyed the benefit of some flexibility with my schedule. I spend a great deal of time reading, and find it difficult to concentrate in my cubicle. Our team (of about 15 people) is in temporary digs, and the space was quite obviously not designed with acoustics in mind.  There is a fridge and microwave oven right in front of the opening, and 2 hallways converge, causing sound from both directions to be bounced right into my workspace.  Furthermore, the temperature rarely goes below 27 degrees, making the noise of numerous fans at times unbearable.  And don't get me going about the cleanliness of the restrooms.  It's the flexibility that makes it work.  My boss is understanding when I sneak away in search of quieter, more comfortable environs for an hour here and there. So, even with all these things to complain about, I respect his approach.  It's not his fault that the working conditions are a little tough, so if I choose to be understanding, and non-judgmental, I get better results all around.

I think the point I'm trying to make is that a place of work is more than just the physical surroundings, and each individual can make things different.  To start, quit complaining. Then, follow my 5 simple rules to becoming happier at work:

  1. Keep yourself organized. Use techniques like "Getting Things Done" to close the "open loops" at work.  You'll be surprised how much happier and more productive you become (which in turn makes you even happier).
  2. Help your peers look better. This could be tough if they're jerks, but I think in most cases, when someone sees that you're helping, it comes back in spades.
  3. Stay sharp. Read, go on courses, talk to people who know more than you, keep learning...  An idle mind is the devil's workshop.
  4. Laugh. Find the humour in tough situations. Laughter creates seratonin, and seratonin makes you happy (or something like that).
  5. Take a break.  If things are getting to you, get outside for a walk (remember, no complaining). Think about successes, people you love, or things you enjoy doing.

Maybe the Christmas Carols are getting to me... Peace!

Sunday, December 17, 2006 7:02:32 PM (Mountain Standard Time, UTC-07:00)  #     |  Comments [0]  | 
 Sunday, November 19, 2006

When we began seeing errors on our SBS 2003 Server several days ago warning that space on the C drive was running low, we began to plan an intensive (and scary) operation to upgrade it.  The plan WAS going to look something like this:

  • shut down server
  • remove system drive and install it in a second machine
  • install bigger drive in second machine
  • install disk cloning software on second machine
  • copy old drive to new drive
  • put new drive (cloned) in server
  • be happy

There are many esoteric little things involved in these steps, especially when we're talking about SCSI and Dynamic NTFS disks. The whole process was a little daunting.

BUT, much of this worry goes away with Paragon Partition Manager Server Edition.  Hallelujah!  I installed a new 70 gig SCSI drive to replace a 16 gig drive (required a server restart). Then I ran Partition Manager to copy the system disk to the new disk (this needed another restart), and Ka-ching!... shut down the server one more time to remove the old drive and we were back in business.

Brilliant. Thank you Paragon!

Monday, November 20, 2006 2:07:30 AM (Mountain Standard Time, UTC-07:00)  #     |  Comments [0]  | 
 Tuesday, October 17, 2006

Much has been written about business process analysis.  There are articles about Use Cases, Sequence Diagrams, and more.  It's my opinion that most small businesses can avoid this level of complexity when they're trying to understand their business processes, and can instead focus on understanding the roles and responsibilities of people as a start.

One tool that I like to use is a high level diagram that correlates responsibilities with individual people (or small teams), and can then be used to deconstruct the responsibilities to tasks and process flows.  I call it a responsibility diagram.  If you work in a small business, you likely have many jobs to do-- understanding these jobs is a great place to begin.  Here's an example from a small business that sells sewing project kits online:

Admittedly, this is a bit of a hybrid of several UML diagrams, but what it's really designed to do is get a small business owner (decision maker) thinking about the high level processes and lead them into decomposing them into more manageable workflows.  Once we've got this diagram, we can rename the person to a role, in this case, a suitable role name might be "Order Taker".  This will help to separate the tasks from a person, and may make it easier to identify responsibilities that should more naturally fall on other people.  In this example, why wouldn't the Inventory Adjustment be done by Kelly.

I call the rectangular box the responsibility boundary, and once the responsibility changes, the flow would be illustrated in another box.  Similarities to Use Case Diagrams and Sequence Diagrams are obvious to the initiated, but to the business owner, it's still a simple diagram that portrays the work their people do in an easy to understand way.

In Part 3, we'll talk about what happens when a responsibility crosses boundaries to another role.

Tuesday, October 17, 2006 5:30:27 PM (Mountain Daylight Time, UTC-06:00)  #     |  Comments [0]  | 
 Friday, October 13, 2006

Now HiringOur city (and province) finds itself in a unique situation.  The local economy is booming thanks to high global oil prices, and the proximity of the Fort McMurray oil-sands, one of the largest oil deposits in the world.

Property values are up, retail sales are up, unemployment is way down, people from coast to coast are coming here to find work. Unfortunately, this leaves many small businesses scrambling to find staff.  It seems that everywhere you look in the city, you'll see a "Now Hiring" or "Help Wanted" sign.  In fact, the MacDonald's restaurants have taken to posting their pay rates on those portable roadside signs, and they're pretty competitive.  Our business is no stranger to this--- we're recruiting aggressively, advertising in numerous mediums.

One thing that a small business can do to be more efficient with what staff they do have is something the big guys have been doing for a while now--- Business Process Analysis.  Understanding what your company does and how it does it, and then documenting it in detail is the first step to improving efficiencies.

This series of posts will highlight some simple techniques that a small business can use to analyze, understand, and improve its business processes.  Please stay tuned.

Friday, October 13, 2006 12:43:12 PM (Mountain Daylight Time, UTC-06:00)  #     |  Comments [0]  |