Edmonton IT Blogger Roll
RSS
 
Object Validation in an Extension Method
I was trying to find a way to define the state of an object based on a set of rules and assign a name to that set of rules that, then defines the state of the object. Here's what I came up with:
 
     public static class Extensions {
          public static bool Is<T>(this T item, Predicate<T> conditions) {
               return conditions(item);
          }
     }
 
This allows me to define the conditions of any object such that I can give a name to its state based on how the business speaks about the object:
 

     Predicate<MyObject> InACancelledState = (x => x.Cancelled.HasValue);

 

This leads me to be able to code fluently about the state of the object at runtime:

     if (obj.Is(InACancelledState)) {
          // Do some stuff
     }
 
 
 
Posted on 2/5/2010 2:09:41 PM by
The IPad and the Nintendo Wii - gamechangers of their industries, part III

In the event you didn't follow where I was going with this post and this post, someone has written even more extensively on the same topic. Actually, so has:

This is the future of computing. Will the IPad be that future?  It's hard to say.  But nonetheless, this is where computing is going.  You should get ready, because mark my words, the Windows operating system will someday be like the mainframe punchcard computers of yesteryear.  I don't mean horribly technically outdated - I mean that gradually the usage of Windows OS as a personal operating system will go away, and the only place you'll see Windows is in the enterprise or in other more "work" style environments.  What the IPad represents is what your children are going to be using, what my grandparents and your grandparents are going to be using.  When I first saw the IPad presentation, I was underwhelmed until I went for lunch with a very, very, *very* smart friend of mine when we realized - hey, we're supposed to be underwhelmed - we're not the demographic being targeted.  I know that is tough to hear for some of the software developers who read this bog, since you're used to being shunned by polite society anyway! 

Sounds crazy, doesn't it?  Well, remember that yours truly, the Nostradamus of the computing industry, also previously proclaimed:

  • That Microsoft would see the error of its ways regarding Javascript.  This was at a time when some of Microsoft's evangelists were all, "Who even likes working with Javascript, right? Watch us spin a couple of squares with Silverlight!"  A couple of years later and now we have JQuery as the library of choice with the Microsoft MVC.  For those of you who read this that are not technically inclined, "who even likes working with Javascript?" is akin to saying, "Who even likes washing their hands before eating dinner?", which come to think of it, explains Silverlight's popularity in Manitoba!!
  • (Speaking of the MS MVC) that the MS MVC was the future of web development, and that WebForms was on its way to being legacy technology.  Well, well, none other than Scott Guthrie agrees!  "I don't see that anywhere in the article,  Justice!"  Trust me.  In my next post I will use my incredible literary analysis skills (honed from the age of 2) to open your eyes.  Again for those of you who don't have a computing background, the difference between the MS MVC and WebForms is like the difference between using indoor plumbing and throwing your feces against the wall - they both resolve the underlying issue but the latter is a heck of a lot messier and was only acceptable in the dark ages.
  • Vista would be a flop.  And it was such a rousing success that Microsoft actually invited yours truly to an "influencer meeting" across the country where I learned all about how to sell Vista to the enterprise.  (I might argue that Microsoft first went wrong in calling me an "influencer", actually, but to be fair they have made some pretty spectacular decisions in the past along with the questionable ones).

I remember wrhen I wrote about why I thought Vista wasn't compelling.   Sure, someone chimed in to tell me all about all of the under the hood improvements that would *guarantee* everyone would get it, and as I said back then, "Why does my mother care about IIS7?  Or Bitlocker?"  But my mother?  She'll care about the IPad.  And that is why the future doesn't belong to you, or to me - because we're the fringe elements on this one, my friends. 

The mainstream is coming.  You should get ready.

Posted on 2/5/2010 9:36:00 AM by
Edmonton tax dollars hard at work

Courtesy "Eyesore of the Month":

An article on the CBC News web page said: "CBC News spoke to Reed Clarke at an exhibit that allows visitors to experience being in an abandoned Japanese dentist's office during a storm. He said the exhibit was very realistic." You can't make this s**t up.

 

 

The Art Gallery of Alberta

Posted on 2/5/2010 9:18:00 AM by
The Apple IPad and the Nintendo Wii

The Nintendo Wii, the spiritual brother to the Apple IPadThe Apple IPad, the spiritual brother to the Nintendo Wii

"We're not thinking about fighting Sony, but about how many people we can get to play games. The thing we're thinking about most is not portable systems, consoles, and so forth, but that we want to get new people playing games."
- Nintendo President Satoru Iwata on the Nintendo Wii

"I love your...what do they call that?  The IPhone?  It makes everything so easy!!   But the screen is so small - I could never read or type anything on it!"
- My grandmother  

"Why do you keep writing 'There's no more info online?  Don't you understand that a lot of seniors don't have a computer, much less the internet?  And it's so hard for some of us to get on the internet anyway!"
- Letter to the Editor, Edmonton Journal

"This will be the most important thing I've ever done."
-A rumored quote from Steve Jobs, co-founder and CEO of Apple, referring to the Apple IPad

Posted on 2/4/2010 8:09:00 PM by
HarvestApp – Handy for Consultants
Note:  I am in no way, shape, or form affiliated with HarvestApp.com. I’ve been an independent consultant in IT for four years now.  One of the biggest things in my day-to-day activities is keeping track of my time.  Timekeeping has become a bit of a thing for me, even when I was an employee.  It [...]
Posted on 2/3/2010 12:39:05 AM by tom
MVVM and the Infragistics DockManager Control - Part Deux
When I last posted about using MVVM and the Infragistics DockManager Control, I was talking about dynamically adding ContentPane controls to the DocumentContentHost.
 
In a typical application, some content is used for navigation. In the case of Visual Studio, this can be represented by the Solution Explorer or Class View, enabling a person to jet off to the spot they are looking for. With this Infragistics XamDockManager control, these types of panes exist within the DockManager.Panes collection, but not within the DocumentContentHost. The one concern with navigation panes is that they are typically content-heavy with respect to either processing power or resource usage. To combat this, you'll likely want not to destroy these panels each time you close them but, rather, simply hide them; to be made visible again at a later time.
 
Setting the CloseAction property of the ContentPane to "HidePane" (Hide Pain?) partially helps you with this. The problem is that, using MVVM, there's no way to change the visibility of the pane again to make it visible again. There is, however, a work-around. You can bind the visibility of the ContentPane to a boolean property of your ViewModel, and raise the INotifyPropertyChanged event every time you set the value, rather than trying to (more typically) not raise the value unless the property's value has changed.
 
In the attached sample, I am combining some features of PRISM (DelegateCommands) with this to simplify the coding that is occuring. Here is some pseudo-code representing the relevant bits:
 
In MainWindowViewModel:
 
public
MainWindowViewModel() {     
     ShowNavigation =
new DelegateCommand<object>(x => NavigationVisible = true);
}
 
public DelegateCommand<object> ShowNavigation { get; set; }
public bool NavigationVisible {
     get { return navigationVisible; }
     set { navigationVisible = value; OnPropertyChanged("NavigationVisible"); }
}
 
In Window1:
<
MenuItem Header="_Control Panel" Command="{Binding ShowNavigation}"/>
<
igDock:ContentPane CloseAction="HidePane" Visibility="{Binding NavigationVisible, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}}">
<!-- Content Here -->
</
igDock:ContentPane>
 
You can find the complete sample here:
 
 
Special thanks to Sam of Infragistics for helping me figure out that not declaring Mode=TwoWay makes for a lot of confusion.

 
Posted on 2/2/2010 11:20:27 AM by
Where Did the Time Go?
Yeah, I’ve been kind of quiet as of late.  So quiet, I suspect that some people might be wondering if something happened.  I was a bit surprised to see that the last time I had blogged was after TechDays in Calgary.  Well, nothing significant has happened – just a bit of laziness augmented by a [...]
Posted on 1/28/2010 10:28:58 PM by tom
The IPad is to hardcore computer geeks what the Wii was to hardcore gamers, prelude

I put a certain level of faith in the audience for this blog that if you're reading this message you are a person of discriminating taste and the highest intelligence, so I'm certain you can figure out where I'm headed with this one, but sometime this weekend/beginning of next week you'll see why!

Posted on 1/28/2010 10:12:00 AM by
Tales from the Trenches, Episode 5: A new development metaphor

Refactoring:  The Enema of the Software Development Lifecycle?

 

(from a discussion with a developer that will go unnamed*)

3:31 PM Justice Gray

So, Latino Heat and I would like to know why you look like you are receiving an enema every time you're on the phone

Not that I know what receiving one looks like, I'd just like to add

3:32 PM Latino Heat

I have seen in the faces of others though

3:32 PM Justice Gray

You have lived a rich life, Latino Heat

3:32 PM Latino Heat

it starts with surprise, moves on to pain

and ends with disbelief and enjoyment

3:32 PM Justice Gray

Come to think of it, you just described my refactoring process

Posted on 1/27/2010 4:36:00 PM by
Knowing Me In The Biblical Sense #03: Are you Genesis 2:16 or 2:17?

Jesus Christ, sin manager - a common misconception of Christianity

A common misconception of Christianity


There are a *ton* of things we need to talk about in the next little while and trust me we will get to them, including my response to the steaks and stones brouhaha, the resumption of one post series and then the beginning of a series that is unlike anything you have ever seen before on a blog that talks about whatever this blog talks about.  Seriously, I have been following blogs for the last 75 years and I haven't seen this done on *any* blogs *ever*.  By "any" I mean:

so you know I've investigated this thoroughly.  Trust me, it will be amazing.  Even if by some chance it has been done before, you'll know *why* this is the different the moment it starts.  The last time I made a claim like this, I announced the track that would end up steamrolling over everything else at TechDays 2009 and heck, we'll even talk about that next week simply because I am nothing if not a wildebeest unchained.  Yes, next week all your dreams will come true and by "next week" I mean "probably in the next 30 days or whenever I feel like getting to it" but who are you to judge me.

So as we've covered in the past installments of this series:


Yes, I know that originally you were promised the next installment of this series would focus on an explanation of "Cat & Dog Theology" but hey, you were also promised the next installment of this series would take place six months ago.  We'll get to cats and dogs  next time, because my pastor had an aside today that really spoke to me and I felt compelled to share it with whomever actually kept reading after they realized that this was another "Justice and the Bible" post.  In the end, it will all tie into "Cat and Dog Theology" anyway and I'm sure at that time half of you will be compelled to ask why a man of my genius, vision and excessive humility chose to go into software consulting rather than becoming a minister at some megachurch somewhere.  Anyway, what better place to get started talking about the Bible than where it all began: in the Garden of Eden and the book of Genesis.  Yes, it's an essay.  You'll live.

For the few of you who are not aware, here's the Coles Notes of the book of Genesis:

  1. God creates the world
  2. God creates Adam and Eve
  3. God gives Adam and Eve some simple instructions
  4. Adam and Eve botch that sucker hardcore
  5. God kicks them out of the garden, but God rocks and gives them some guidance
  6. several more generations of God being awesome


and then we're in Exodus.  And now you know the rest of the story.  John Piper and Steve Harvey have nothing on me.  Seriously, this is as much background as you actually need to know for what I'm going to talk about today, which is:

3.  God gives Adam and Eve some simple instructions

Here are said instructions:

Genesis 2:16 - "And the LORD God commanded the man, "You are free to eat from any tree in the garden;"
Genesis 2:17 - "but you must not eat from the tree of the knowledge of good and evil, for when you eat of it you will surely die."

Now, I don't want to understate Genesis 2:17 - I normally don't post spoilers on this blog but Adam and Eve eat from the bad tree.  As a result of this action, you are reading this blog right now rather than lounging around somewhere in paradise eating pineapple or *gasp* something even better than pineapple.

The Kingdom of Heaven - yes, even better than pineapple

"No way!!"  SERIOUSLY.


That's right, the original sin is what brought us to this point. 

Here's the neat thing about Genesis 2:16 and 2:17.  Both of them are exhortations, one of them focusing on what *to* do and the other on what *not* to do.  Now, Genesis 2:16 at its root is awesome.  Imagine God going to you and saying, "Listen - I have given you these gifts, take them and enjoy them to my glory."  In fact, this is echoed in other instructions through the Bible, such as

Ephesians 2:10 - "For we are his workmanship, created in Christ Jesus for good works, which God prepared beforehand, that we should walk in them."

and one of my three favorite Bible verses of *all time* from my favorite Bible book of all time - Ecclesiastes 3:12-13:

"I know that there is nothing better for men than to be happy and do good while they live. That everyone may eat and drink, and find satisfaction in all his toil—this is the gift of God."

Lots of focus in Christianity is given to Adam and Eve's failure to listen to God when he said "Don't eat from the tree of life".  Much less focus is given on their failure to listen to God when he said, "You are free to eat from any tree in the garden."  This is where many of us go wrong as Christians, where we focus so much on the avoidance of sin that we try to live a life that is exclusively focused on avoidance of sin.  Now, before anyone says, "Awesome, Justice just said it's okay for me to sleep with 3 hookers tonight" sin is bad news.   We do need to flee from it because we are called to examples of Christ in the world.  What I am talking about is the kind of Christian whose entire "walk" with Jesus consists of:

  • did I sin today?
  • how often did I sin today?
  • how "badly" did I sin today?
  • how can I avoid sinning tomorrow?


What kind of a life is that?  I put "walk" in quotes because - let's get real - you're not "walking" with Christ if the only place in your life for Christianity is for a sin management ledger with "sins avoided" on one side and "sins committed" on the other.

It's by living this avoidant life that we fall into the *other* trap Adam and Eve fell into - ignoring the blessings and the calling of the Lord in our lives.  What if we stopped avoiding the call of the Lord in our hearts and our minds, and instead of asking ourselves "sin management" questions, we asked ourselves questions like these every day:

  • How can I glorify God today in my actions?
  • How thankful am I to the Lord for the gifts He has given me?
  • How much can I do for the Lord in His name with these gifts?
  • How can I ensure my life is a lamppost to reflect the light of Christ?


Now, what kind of life is that?

Next time: Cat and Dog theology, what it is and how it changed my direction as a believer forever! 

Yours in Christ,
Justice

Posted on 1/24/2010 11:13:00 PM by
Steaks and stones: a parable

Microsoft MVC 2 - Steaks and stones and the failure of the required attribute

"I can't see the difference, can you see the difference?"

I say to my wife and 4 of her friends, "I will grill steaks for tonight's dinner.  They will be on the table at 6 PM".

At 6 PM, we all sit down to the table and I place a rock on each plate, said rock still being slightly damp as I scooped them out from the harbor 20 mins before.

My wife complains, "I thought you were grilling steaks?"
One friend says, "This isn't like any steak I've ever seen"
Another one says, "Not only is this not steak, but it can't be grilled.  It is wet!!"

I reply to them, "Ha!!  Grilling steaks doesn't mean what you think it does!!"

So, in conclusion is this situation:
a) the fault of my friends, who should have asked me what I meant by "grilling steak"
or
b) my fault for communicating something completely different from the commonly held expectation of every human being on the planet?

Posted on 1/21/2010 9:47:00 AM by
Trust. It is a Two Way Street
One of the most common flaws I am seeing in applications is the lack of mutual authentication. Most systems authenticate that the user connecting to their system is a valid user. What is lacking is that the client verifies that it is connecting to who it thinks it is connecting to.

One of the big examples of this is WiFi. If I have a wireless router named "myrouter" and set my laptop to use that router things work great. If I go down the street and someone else has a router named "myrouter", my laptop automatically tries to connect to it. This is because the WiFi implementation does not verify that I am connecting to who I think I am connecting to.

This happens a lot on the service level of applications. The client app resolves a DNS name like www.myservice.com to it's IP address and then sends over some form of authentication. Now what happens if I somehow manage to change the DNS record for www.myservice.com to point to my IP address which contains a service with the same name and same methods exposed to it? The client will connect and divulge its authentication data to this fake service. I can now use the authentication data that you gave me authenticate against the real system and do whatever nefarious things I desire.

The solution for this is for clients to verify that the service it is talking to is actually the service you want to be talking to. This is best accomplished by using some form of shared secret. This takes on many forms but a few methods:

  1. Ask the server to answer a shifting question. i.e. ask the server to hash a certain string. If the hash the server returns matches what you expect then the server might be the one you want (or an attacker managed to replicate the algorithm)
  2. Use windows authentication. For WCF the mutual authentication is implied in this case.
  3. Use certificate authentication. This is the best way to do this task but can be a pain to implement.
Posted on 1/20/2010 11:16:41 AM by Dave Woods
Team City Build Versioning
One of the great things about continuous integration is that we can increment our assemblies version number with each build. For our project we also apply a label to our source code repository every time we build a deployment package. This allows us to get the version of source code from the exact point in time that the msi was built.

One of the issues we ran into was that we have three build configurations:
1. "CI" This gets run on every checkin of code
2. "Deploy - ALPHA" This is run manually to deploy to our alpha test environment
3. "Deploy - ALPHA & BETA" This is also run manually and this deploys the same version to both the alpha and beta test environments

The issue we ran into is that each configuration has its own build number that is incrementing so if we ran "Deploy - ALPHA" 10 times we would have v 1.10.0.0 in ALPHA. If we then ran "Deploy - ALPHA & BETA" for the first time suddenly ALPHA now has v1.1.0.0! Obviously this is not very intuitive. In the end we added in the version number from our source code repository into our build numbers for both deploy configurations. Now we get build numbers like this: 1.46347373.0.0

The way we did this was by using the vcs variable in team city: 1.{build.vcs.number.TheNameOfVCSRoot}.0.{0}. The last digit is still an incrementing counter in case you re-run the build that something still increments even though the version in source control has not changed.
Posted on 1/19/2010 10:57:36 AM by Dave Woods
One of the seminal moments in musical history, as recounted by my ITunes collection

Discussion between my wife and I:

Hot wife: "Who sings this version?"

Justice: "Honey, there's only *one* version of this song."

 

 

One of the best weightlifting songs since Mama Said Knock You Out

Posted on 1/18/2010 7:58:00 PM by
Remote MSI Execution
One of the things we have started doing as part of our process is having a build script that creates our deployment package in an automated fashion. We then tied that into our build server so that from one click anyone could create the package. The issue is that we have several test environments and copying the setup.msi file to multiple servers and installing it is a time consuming pain. To streamline our deployment we created a vbscript (yes, it was painful) to remotely uninstall previous versions and then install the new version of the msi. Here is the script currently:

strComputer = "mytestserver"

Wscript.Echo "Getting WMI Object"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Wscript.Echo "Finding Previous versions"
Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product Where Name = 'My First Setup Project'")
For Each objSoftware in colSoftware
    Wscript.Echo "Uninstalling a previous version"
    objSoftware.Uninstall()
Next

Wscript.Echo "Getting Software Object"
Set objSoftware = objWMIService.Get("Win32_Product")

Wscript.Echo "Installing"
errReturn = objSoftware.Install("c:\builds\MyFirstSetupProject.msi", "TARGETENV=DEVL",True)

Wscript.Echo "Install status: " & errReturn


In order for this to work the msi must be copied to the remote machine to work. I tried connecting to a central network share but it did not seem to work for me. The script needs a bit of work but now we can deploy to the environments we want updated in a couple of minutes instead of the 15-20 minutes it took us before.
Posted on 1/18/2010 3:41:27 PM by Dave Woods
Return To Blogging
I am finally finding some time and desire to write again. Life has been busy with my both my company and my family expanding. It feels like things are starting to get back to normal again so I should be writing more frequently.

Some of the things I have been working with that I hope to write about:

  • nHibernate / fluent nHibernate / Linq to nHibernate
  • WPF
  • Click once
  • Silverlight
  • A fluent .NET build langauage called fluent-build
  • Being a lead on a project
  • Multithreading
  • Caching of large amounts of data
  • Threat modeling
  • Other security items
Posted on 1/17/2010 2:05:28 PM by Dave Woods
Actually, I *like* getting paid tons of money, thanks

in the programming profession it's relatively well-understood that, as long as they can get by OK, programmers don't care that much about the money -- it's the quality of experience that matters)

Oh Bruce Eckel, you crazy old hippie. I hope your kids aren't trying to send you to the nursing home after reading this!

(The rest of this essay, however, is excellent weekend reading, especially the part where he highlights why MS is getting destroyed by Apple!! Highly recommended for that alone!)

Posted on 1/15/2010 7:24:00 PM by
The JQuery team has a message for you

And that message is that you are a decrepit piece of street trash.  That is, if you are not already subscribed or reading their "14 days of JQuery", which started today.  Not since I spent two arduous weeks teaching D'Arcy Lussier how to read has there been such an opportunity for total life transformation in only half a month!  The JQuery team is too humble to tell you that pursuing *any* other technology direction in software development is the biggest waste of time since the invention of VB.NET but thankfully, you have someone who has no shred of humility whatsoever to tell you how things really are.   Dave "Encosia" Ward knows that HTML and Javascript are the future.  Sara "Girl Developer" Chipps knows that HTML and Javascript are the future.  And finally, Justice "the man whose words you hang on, read to yourself on a voice recorder and play back softly while you're in the bathtub" Gray knows that HTML and Javascript are the past, present, and future of software development as you know it.  Most of you were planning to spend the next 14 days as you usually do: on the couch playing World of Warcraft with your only companions being a tub of ice cream and your tears.  Let's be real here, iif you don't like JQuery, this is the only life you deserve.  So for today's inspirational missive I am speaking on behalf of every incredibly attractive JQuery fan out there and telling you to stop being such a loser and start paying attention to what the JQuery team has to say!    Take it from the Alpha, Omega, and Gamma Delta of software development!

Posted on 1/14/2010 8:15:00 PM by
MVVM and the Infragistics DockManager Control
Josh Smith wrote a quintessential article on MVVM entitled, WPF Apps With The Model-View-ViewModel Design Pattern, for MSDN Magazine that was published in February 2009. In the article he shows a sample application that some some tabs and displays some content. Sounds pretty simple until you consider that the content of the tabs is dynamic and could be anything. The sample app demonstrates a little trick I thought was brilliant and made the entire article so eye-openning; using DataTemplates to bind the possible dynamic sources of Views and ViewModels together, allowing the page controller (host view model?) to simply maintain a bound collection of viewmodels and have the XAML do the figuring of what view to display. This is a fantastic example of Separation of Concerns.
 
Though I really loved the article, I wanted to leverage the UX functionality of the Infragistics DockManager control to give the user more flexibility in how they want to view the data being presented (especially in a multi-monitor scenario). Using the source code from Josh's article as a base and swapping out the TabControl he was using with Infragistics' DockManager control failed as there isn't a way to natively bind the DockManager to the collection of ViewModels hosted in the page controller (host view model?). The support from Francis and Sam from Infragistics lead to soliciting help from Andrew Smith who graciously wrote a blog post entitled "ItemsSource for XamDockManager Elements" demonstrating how to accomplish the required binding. (Source code available here)
 
All of this culminates in the successful marryiage of the dynamic nature demonstrated in the MVVM pattern demonstrated in Josh's article with the flexibility of the Infragistics DockManager control. I have posted the sample source code here.
 
Many thanks need to be extended by myself and on behalf of the users of the application I am working on for the efforts of Francis, Sam, and Andrew from Infragistics as well as the ground-breaking of Josh for bringing this all together.
 
 
 
 
Posted on 1/13/2010 8:56:53 AM by
Unit testing publishing events from the event aggregator in PRISM
Coming back from the holiday, my mind was a still in a fog as to how to get an event, exposed by the event aggregator to fire and test the results. This is a quick shout out of thanks to Nikola Malovic for his Prism (CAL) unit testing - How to test Prism (CAL) Event Aggregator using Rhino Mocks post I was able to get on track again quickly. The subtle key to the post is that the events being published are NOT mocked objects.
 
Posted on 1/4/2010 11:09:21 AM by
WPF & MVVM: DataBinding UserControl Command to Parent DataContext
I had been struggling with figuring out how to make the my XAML databinding force the command of a user control be handled by the ViewModel of the parent window in which it is contained. In an effort to follow SRP I wanted the behavior of the ViewModel of the parent window to be more of a PageController and the ViewModel for each contained UserControl follow a more pure ViewModel pattern. I was fortunate to be in contact wtih Steven Robbins via twitter (@GrumpyDev) which lead me to discover the blog post, Wpf: Binding to parent property (RelativeSource Ancestor DataContext), by Jeffrey Knight (Twitter: @jeffreyknight).
 
You can download the sample scenario I created here.
Posted on 12/17/2009 11:20:18 AM by
TechDays 2009 in Calgary
Yesterday I was at TechDays 2009 in Calgary for the day (well, the morning really).  I wasn’t there as an attendee, but as a speaker.  Thanks to everybody who came out to my two talks, the first one on an Introduction to ASP.NET MVC and the second one on SOLIDifying your ASP.NET MVC Application.  There [...]
Posted on 11/19/2009 8:48:09 PM by tom
NotAtPDC and ICE Edmonton session material

Thanks to those who attended the session that I did on “A (Failed?) Project From the Perspective of a Team Lead”.  As you know from being there, the slide deck by itself is not all that useful.  Instead of putting your memory to the test I’ve written up an accompanying white paper that can be downloaded here (pdf format).  If you also look back at my series on failure you can see some other examples of what and where I’ve failed on projects and how they could have been, or were, resolved.

Posted on 11/18/2009 1:29:49 PM by The Igloo Coder
Compiling ASP.NET MVC on Mono 2.4.3
Out of intellectual curiosity, I sparked up MonoDevelop and decided to see what would happen when I tried to compile the ASP.NET MVC source code. I figured that it would Just Work.  After all, I can use the .NET compiled assembly with no problems on Mono, so there really shouldn’t be any problems trying to [...]
Posted on 11/11/2009 9:52:17 AM by tom
A Sad Day in Whoville
Well, today was a rather sad around the household.  This morning I had to take Bailey, my dog, to the vet to be put down.  She had just turned 14 years old in September of this year, and age had finally caught up with her.  Her hips were going and we were getting concerned that [...]
Posted on 11/10/2009 5:48:40 PM by tom
Copyright 2006 CowTipping IT