April 2008 Entries
I'm test-driven!I am pushing myself down the TDD path. I say pushing because it is definitely a hard row to hoe. I'm not used to the test-first paradigm. I am getting better, but the purpose of this post is to talk about some of the benefits I have reaped from TDD, and help myself (and hopefully others) to learn why test-first development can help you code and your design.

Stability

Obviously, if you are writing a failing test, writing code to pass the test, confirming this every step of the way and your code coverage is good, then your code will be more stable. That doesn't mean it will be elegant or take the best approach, but it passes your tests. If your tests are good, then your code will be more stable.

Accountability gm_test_500

Writing the tests first allows you to see the desired end result as a list of tests that must pass. This allow you to account for completion of the project. When you boss asks, "how are things coming?", you can reply, "72% of the tests pass." No more replying with vague answers and trying not to commit to anything. It is also a good "Light at the End of the Tunnel" for you as a developer. You can plan your days as, "I'm gonna get 10 tests to pass today." and you can feel good if you get 14 to pass, and know that if you work an extra hour to get all 10 tests to pass, then you accomplished your goal.

 

Design Ability

Writing your tests first forces you to look at your code from the front. It's easy, as a developer, to look at your code from behind the bar. You know your ingredients and you know how to put them together. Sometimes coming out from behind the bar allows you to see the situation from the consumer's perspective, whether those consumers are end-users or other developers. It forces you to view your code in the way it will be used, rather than how to get it to do something. This will inevitably improve your design.

Separated Concerns

Good layered, encapsulated, modular code is the goal of any architect (or at least it should be), and Test-Driven Development, in come cases, forces you to separate concerns in order to test them separately. As soon as you start to delve into TDD, you;ll start to see discussions about mocking and dependencies. If I want to test a method in isolation, I have to force dependant objects that I am not currently testing to give back suitable results. Mocking helps me do this, but it also helps me to understand the boundaries of the encapsulation of my classes. What should my class know about that class? What shouldn't it know? This will generally force to to make good design decisions. If you are finding it very hard to test something without mocking up 5 different objects, you may need to rethink your design.

Conclusion

These are just my thoughts. I am still really new to TDD and have a lot to learn. If you see things that I have forgotten from this list (undoubtedly a lot of things), or you think that some of my assumptions or assertions (pun intended) here are incorrect, leave me a comment.

~L

Just got home from Coders 4 Charity event here in Kansas City. I gotta tell you, it wasn't at all what I expected. I expected 2 intense, round-the-clock days of coding, with an ultimate frustration of not being able to see a full product in the end because of time constraints. That wasn't the case at all.

Friday night lasted a little longer than I expected (we knocked off around 12); and Saturday was an early morning (and a late night), but it was an absolute blast! I met four great developers, and learned a TON about SharePoint. I also played Rock Band for the first time (now I have to get one, I blame Doug). We also managed to deliver a totally usable site to the Blue Springs Boy Scout Troop 813.

BlakeandTimII joeII dougandClint

BereleanChurch MissouriPitBullRescue TaskForceOmega

Hope to see all my new friends at the next DotNetSig Meeting (or the ArcReady Event Tuesday morning)!! Time to sleep (for 36 hours!)

~Lee zzzzzzz

I realize that this is probably WAY beginner stuff for most people who read these blogs, but I am giving these classes to some people who come from a structured programming background and it may help others in the same boat. I like to think I know OOD pretty well, but if you see something that you think (or know) is wrong drop me a comment (no flames please).

In the Beginning...

There was structured programming; and the developers saw that it was good. The coded and rejoiced at the marvels they created. The programs read (and were executed) like books: top to bottom and left to right. They were able to make a computer do anything they wanted, so they were content. But not ALL were content. Some realized that when programs got be large, they were unwieldy. Some programmers spend weeks reworking the flow of a program to add very simple functionality. simple changes would cause "ripple effects" through large programs that caused many coders untold hardship. And it was these developers that went in search of a better way.

And they were bore unto the land of object orientation, and they wondered at its flexibility, extensibility and modularity. It represented the way we deal with things in the real world, and how those things interacted with us (and OTHER thing). But as they began to study the ways of object orientation they began to notice one thing: it was hard.

They were used to the structure of their old ways and these new paradigms were strange. Classes? Methods? PolyWHATism? They were confused.. and not like Confucius, like health nuts in a doughnut shop. They wondered whether to use an abstract class or an interface. They wondered about coupling and dependencies. Why was their and interface here and implementation over there? How would they ever be able to write functional software if their code was spread out in the little classes? How would they tell others about what they had created? They would define terms.

Terms

Class

The class is the foundation of object-oriented design. A class is a blueprint for making an object. It is the plans used to create an object. When you create a new object, you basically ask the class to create you one from scratch.

Object

So what IS an object, then? It is the concrete instance of a class. It is the thing that your code uses; the things you (and your code) interacts with.

Interface

The interface is the outward-facing piece that objects use to interact with each other. It is the "face" that objects see and use to "inter"act with each other. your face, hands, feet, etc. are your interface to the world. The telephone's interface is the number keypad, the receiver and the "hang-up lever" (can't figure out what that thing is called). If you pick up a phone, you automatically know how to use it, because you recognize the interface.

Implementation

This is what happens when the interface is used. When you dial a phone, a call is made. You probably don't know exactly how the call is made; you just know it will be made.

Encapsulation

This is a fancy word that just means "hidden". The details of how something is done is hidden from the person (or object) that asked for it to be done. This is one of the most important aspects of object orientation, as it allows for objects implementing the same interface to be used interchangeably. In the example above, the phone encapsulates the details of how the call is made.

You mean, I'm not in your class?

There are lots of things that go inside you classes, but here are the things you'll see most often.

Constructor

The constructor does just what the name says, it constructs an object using your class and sets any preliminary values.

So a constructor for an Employee class, might look like:

   1:  public Employee(string firstName, string lastName){
   2:    this.firstName = firstName;
   3:    this.lastName = lastName;
   4:  }

This constructor will instantiate a new object from the Employee class and set the initial values of the firstName, and lastName instance variables to the values received.

Properties

Properties read and change the state values in the object. They are just what they say they are; they are properties of the object your creating. If it's a person object, some of your properties might be height, weight, gender, etc. Properties have accessors and mutators, which are more commonly called getters and setters respectively. Again, the purpose of these are pretty obvious: accessors or getters, get values from properties, while mutators or setters change (or mutate) the value.

So your Height property might look like:

   1:  public int Height{
   2:    get{ return _height;}
   3:    set{_height = value;}
   4:  }

Methods

Methods are anything that an object can do. A person object can walk and talk and make spaghetti. Methods have a method signature. This is a group of words that uniquely identify a method (like YOUR signature uniquely identifies you). The signature is made up of four basic parts:

  • The Access Modifier - This determines the visibility of the method (e.g., usually something like public, private or internal)
  • The Return Type - This is the type of the return value (e.g. string, int, object, Employee, etc.)
  • The Method Name - The name that the method will be called by (e.g. MyMethod, WalkTheDog).
  • The Parameter List - These are the values (none to as many as you want) that will be passed to the method when it is called.

So your WalkTheDog method might look like:

   1:  public void WalkTheDog(Dog dogToWalk){
   2:    // sweet elegant code used to actually walk the dog
   3:  }

This method has a public access modifier, returns nothing (void), has a name of WalkTheDog and takes a Dog object parameter.

Private Members

These may be variables, properties of methods, but they are private to the object. I usually use the term in reference to instance variables, or variables that are used within the instance. Properties are sometimes used to get and set these values.

So, an instance variable type private member might look like:

   1:  private string firstName = string.Empty;

The code above will create a private string variable called firstName and initialize the value to an empty string.

 

 

Putting It All Together

The code for an Employee class might look like this:

   1:  public class Employee{
   2:    private string firstName = string.Empty;
   3:    public string FirstName{
   4:      get { return firstName; }
   5:      set { firstName = value; }
   6:    }
   7:    private string lastName = string.Empty;
   8:    public string LastName{
   9:      get { return LastName; }
  10:      set { LastName = value; }
  11:    }
  12:    public string Greet(string name){
  13:      return string.Format("Hidee ho {0}!", name);
  14:    }
  15:  }

Obviously, these are very simplistic examples, meant to demonstrate the pieces of a class and how they are used to create an object. Everything that is visible for other objects to interact with the Employee object, make up its interface. Everything inside that actually does the work, is the implementation.

This has definitely been a long enough post. If you're still reading I hope you got something out of all this. In the next installment I'll discuss, inheritance, abstract classes, polymorphism, and the separation of the interface and the implementation.

Thanks!

~L

As I wander further into the landscape of Test-Driven Development and ASP.NET MVC, I find myself being pounded by tools. The Dependency Injection frameworks like StructureMap, Unity, NInject, Castle Windsor, Pico.NET and Spring.NET. It's also damn near impossible to do TDD without hitting a mocking framework like RhinoMocks, Moq, TypeMoq and NMock. Then, if you're serious about your enterprise-level development, you begin looking at code analysis and documentation generation frameworks. flame11

Now maybe I have been living in the unorganized underverse of development, but none of the small companies I have worked for has had the time and budget to do ALL of this  stuff,  and of course ALL of it is not necessary for every project, but I wanted to get a community opinion.

What tools do YOU use? Now, I know this has sparked enormous flame wars in the past, but that's not my intent. We are all grownups, and most of us are accomplished developers and architects. I think we all realize the there is no RIGHT way; only the best way we know how for the current circumstances. I just want to get a feel for what people are using and why. I'd like it if the comments stuck to compliments about your particular tools and NO DEGRADING OTHERS' TOOLS.

In the next few months, I am going to try to put together a comprehensive, non-biased comparison of the frameworks (at least for DI and Object Mocking). This may make me a target, but I have to make a desicion as to what is best for me, and I have NO preconceived ideas about these frameworks.

So cast your vote for your faves and I'll try to compare them and get some kind of matrices out so that people can use them as a good starting point for deciding which frameworks best fit them and their environment.

Happy commenting!

~L

I would NOT have made it through the day if it hadn't been for this page.

I am setting up a little application-ette to allow us to use our Active Directory as the single point of contact for employee information (Phone List, HR, etc). and using Active Directory for a role management provider is no joke, especially if your development box is Windows XP.

Definitely take a look at the article if you need to use Active Directory as your roles manager source in an ASP.NET app.

~L

For a couple of weeks now, I've been blogging on GWB, but I've been playing it safe. I haven't posted much code. I haven't done any real tutorials. I've been afraid.

I've been afraid that I will post a tutorial or some code and the community would rip me a new one. I had imaginings of code monkeys from everywhere telling me my code wasn't functional or elegant. But I'm done with that. I started this blog mostly to kinda chronicle things I learn, and hopefully help other people to learn with me. I can't do that and be afraid of what you'll think. I will start doing more technical posts about the things that I am most interested in.

So go ahead. Flame on! I'm ok. If you have insight, I want to hear it. Just remember, I am not JP, Jeff or Martin, so take it easy and don't rip me a new one (the old one still works fine).

~L

As I am learning about TDD and MVC, one thing comes up. How should I arrange my models, views and controllers? Of course, I know I need to set up the models view and cotrnollers folders for ASP.NET MVC, but what view actions should go into a controller? An example may help illustrate my question:

In the default project template for an ASP.NET MVC app, you get a HomeController which has to actions in it: Index and About. Should the about really be an action on the home controller?

I guess my initial reaction is to say that all actions within a controller should be part of that silo. In other words, If I have a HomeController it should have actions that only call models and views for getting and displaying "Home" information. A better example is, if I am creating a blog project, then I might have a BlogController and maybe an ArticleController. The BlogController should only have actions in it that get data for and render views for Blog-specific content. The ArticleController should only contain actions that get data for, and display views for Article-specific information.

Now, I am not trying to second-guess the ASP.NET MVC team. I am sure they are MUCH more expreienced than I am, I am just trying to undertand how people are arranging their Ms, Vs and Cs.

I would also welcome suggestions on arrangement of tests. I tend to create a test class file for each model, each view and each controller. But I've been thinking, people might put all controller tests in one file, and all Model tests in another, etc.. Or maybe a combination of both?

Thoughts?

~L

Not sure why this happens, but I was trying to create an SSIS package on my work machine (this'll be my first SSIS package since DTS died), and recieved a weird error:

Failed to save package file "C:\TEMP\tmp18D.tmp" with error 0x8002802B "Element not found"

Turns out that this is due to MSXML6 not being registered. I found the solution here:

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2450699&SiteID=1

Basically:

To register MSXML 6.0.
1. From the Start menu, click Run.
2. Enter the following command:. regsvr32 %windir%\system32\msxml6.dll.
3. Click OK. ...

Hope this helps someone else, like it helped me.

~L

I can't for the life of me find the blog entry that mentioned digsbyDigsby, but I am glad I read it. I downloaded it then, but it's been sitting on my desktop ready to try out for awhile, and I just finished installing it an playing a bit with the features. This is my new client. It does everything. MSN, AIM, Yahoo!, Jabber, ICQ, gmail (yes you can SEND emails through Digsby), twitter and more and more and more...

I'm hooked.

Enjoy!

~L

This is a question I have been asking myself on and off for about a year now. I have researched all the schools, and all the programs, and I have to make a decision. I want to continue my education, but I should I go for a Master's in a technical realm or a business one? I have pretty good technical skills, and I am learning so much just from reading books and blogs and going to .NUG meetings, so I think maybe my education should be toward an MBA. I think it might help to solidify my ability to talk to business people in their own jargon to help them understand how technology can help them do what they do and when it won't help.

At the same time, I am really interested in the technical and that's what really gets my juices flowing. I know that generally I can learn what I need from reading technical books on my own, going to meetings, reading blogs, asking for help on the Internet and maybe even pushing myself to get some certifications. But would it be more beneficial to go through a technical master's degree program?

Now don't get me wrong, I am not considering a master's degree in computer science from Stanford or MIT. We're talking about night school probably at University of Kansas (not that there is anything wrong with KU). If I thought I had a chance to get into Stanford or MIT, I would be trying to figure out how to find an apartment in Northern California or Massachusets.

I'm sure I would enjoy the technical curriculum more, but I think my career might be better served with an MBA.

What do you think?

~L

Actually, I wanna be like ScottGu and ScottHa and Phil Haack, and.... well you get the idea.

I have been thinking about things I want to accomplish in my career for awhile now. I have set out some goals for myself. Like Becky Isserman, I want to become an MVP. This is a bit longer road for me because, I have not been super active in the developer's community here. It's not that I don't want to, I just haven't figured out how. I haven't figured out how ScottGu and ScottHa and Phil manage to do it. Phil and ScottHa have kids. I just have a wife, but we are trying to get pregnant (or at least we're trying to get HER pregnant).

If it were up to me, I would spend all my time writing code, blogging, cruising the forums and going to geek meetings of all sorts, I love it, but finding that balance will be tricky. With the goals of becoming an MVP and getting an MCSD, and maybe even starting a master's degree this fall, I just don't know how I'd make time for everything.

I just want to know how they do it. How do they find time to blog about meaningful, helpful things and contribute to Open-Source projects and speak at .NUGs and still go to work and have a rewarding family life?

So to that end, I need suggestions. For those of you who are MVPs (especially those with wives & children), if you have any time management suggestions for me, it would be greatly appreciated.

TIA

 ~L

For someone like me, who has never traditionally done test-driven development, it sucks. It's hard to get used to writing the test first, then when you write your test, it's easy to start writing the code to make the test pass and forget that you're doing TDD and just continue coding.

It's also hard to know WHAT needs to be testing and HOW to test everything you need to, at the appropriate isolation level. To add to my frustration, I starting my first fully test-driven project (on my own) and learning about ASP.NET MVC as well. TDD & MVC'ers also have to learn all about Mocking Frameworks and Dependency Injection framework too.

I've been an ASP.NET developer since the early betas (2000) and I can usually crank out a website in pretty good time and with this project, I have spent probably 20 hours already and I haven't even created a usable page! At least not one that didn't already exist in the MVC project template.

But I see the value.

I have created my fair share of web apps, and every one was always a crap shoot when it went live. I can (and almost always) do have someone acceptance-test the apps before launch, but it still always a crap shoot. You never know when some user is going to do something weird and end up sending a bug into your system (for your boss to see) with a screenshot of a yellow screen of death on it. I don't care WHO you are, the kinda stuff doesn't look good. But just the few (modified template pages) that I have created have been rock freakin solid. You know how I know? 'Cause I tested 'em!

The process is slow, because I am a beginner at it (and all the accoutrements that go with it). I can really see how, when I get accustomed to doing test-first development, I could settle into a real groove and not have it take that much longer than non-tested development (and with the a lot more confidence).

I'm sold. No doubt about it, I believe. I am sending in my $12.95/mo for the full satisfaction of knowing that I can never be turned down for coverage, no matter how old I am. I am riding the wave of confidence that says, "Of course my method checks that!" an "Of course, I'm sure!" I know that might delivered product will eventually be better for the suffering I face now (I'm getting paid for it and I LOVE it, so maybe suffering is a bit strong). I am a total convert and I haven't even been to the promised land.

Can I get an AMEN!

~L

posted @ Friday, April 04, 2008 2:59 PM | Feedback (0) | Filed Under [ TDD ]

Some of you may already know about it, but I found this great site that hosts projects.Now I know what you might be saying, "Yeah dude, there are plenty of places that host projects... ever heard of Codeplex?" But that's not what I am talking about. Assembla lets you make your project public or private, hosts your svn repo, hosts a Trac system for your project, sets up a wiki for it and allows you to "hire" people to work on your project with you.

The place? Assembla.

The free package offers 500Mb of space, but there are also pay options that are pretty reasonably priced. I have set up a private project just for me to test out the system and try out some development lifecycle things. It's also great for side projects, since noone but you and your "staff" can see/check out the code.

Check it out!

~L

I have a small page I need to write for my company to list all empoyees. This in effect becomes the in-house phone roster. Makes sense, right? I though it'd be no problem. I know I can manipulate AD from an ASP.NET page, so I'll put together this app no problems. OK, my hubris got the best of me. I queried the AD Directory service no problem:

DirectoryEntry server = new DirectoryEntry();
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = server;
searcher.SearchScope = SearchScope.Subtree;
searcher.Sort = new SortOption("CN", SortDirection.Ascending);
searcher.Filter = "(&(objectClass=group) (CN=EmployeeGroup))";
SearchResult group = searcher.FindOne();

Well, that's simple enough. This returns the group EployeeGroup from Active Directory. Now I just need to list all the users in that group. Not so fast. The employees are not actuall in EmployeeGroup, they are in groups that are in the EmployeeGroup. Well, ok that should be a problem. See that line that says:

searcher.SearchScope = SearchScope.Subtree;

I believe that means to search the entire directory tree for whatever it is you're searching for. But that's not entirely acurate. At least not in the way I think about tree structures. WHat I ended up doing (and if anyone who knows AD better than me knows a better way to do it, please comment) is recursively getting users and then remocving the duplicates from the list of users (in case someone is in more than one group in this group). Like this:

// created a member List that the recursive function can populate
private static List employees= new List();
// then in a main method, i start the recursion
... code from above
if (group != null) {
  FindGroupMembers(group.GetDirectoryEntry());
}
// this is the recursive method
public static void FindGroupMembers(DirectoryEntry entry) {
  object members = entry.Invoke("members");
  foreach (object item in (IEnumerable)members) {
    DirectoryEntry member = new DirectoryEntry(item);
    if (member.SchemaClassName == "group") {
      FindGroupMembers(member);
    } else {
      if (!employees.Contains(member.Name))
        employees.Add(string.Format("name={0} control={1}",
                      member.Properties["CN"][0],
                      member.Properties["userAccountControl"][0]));
  }
 }
}

It ends up being a lot like crawling a folder (ahem, directory) tree. The problem seems to be that Active Directory doesn't actually make a tree. it seems to be more disconnected than that. So searching for the users wiithin a group seems to only work with the Invoke("members") method. I had originally assumed that to get all the users of a group, you would just:


DirectoryEntry server = new DirectoryEntry("LDAP://CN=EmployeeGroup,DC=sub,DC=domain,DC=com");
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = server;
searcher.SearchScope = SearchScope.Subtree;
searcher.Sort = new SortOption("CN", SortDirection.Ascending);
searcher.Filter = "(objectClass=user)";
SearchResultCollection results = searcher.FindAll();
Console.WriteLine(string.Format("Found {0} members", results.Count));
foreach(SearchResult result in results){
  Console.WriteLine(string.Format("CN={0}, Path={1}", result.Properties["CN"][0], result.Path));
}

But no matter how I arrange it, the EmployeeGroup always returns 0 results. Am I missing something?

My recursion solution takes way too long to run (nearly 7 seconds!!!), so I am going to have to find another solution.

Any help would be appreciated.

~L

 

I've spent the last week reading about Dependency Injection, and I think I may finally understand. First of all it is a type of Inverion of Control. Now .NET programmers see inversion of control all the time. Usually in the same place we encounter delegates: event handlers. The event handler actually controls the handling of the event and not the main program.

But Dependency Injection is a step beyond. DI inverts control of the program so that a dependent object is injected into its dependant object. So if I have an object [Foo] that depends on a [IBar] type, I can make a call to a container class (aptly named a Dependency Injection Container) and have it inject into the [Foo] object a concrete instance of a class that implements [IBar]. This relieves the actual dependency on the concrete instance of a class that implements [IBar]. To me, it's a bit like the Factory Pattern on steroids. I also read a bit about Service Locator, but that's about all my little brain can handle for now.

Enjoy!

~L

As I get settled in at this new job, I begin to take stock of what the company wants to accomplish: a solid, extensible product with the longest possible useful life. Given the fact that this product will probably take 2-3 years (total) to develop, that means learning the newest stuff and looking at some technologies that have yet to be released. The new technologies coming out of Microsoft in the next six to twelve months is staggering. Beyond products (like Windows 2008, SQL Server 2008 and Visual Studio 2008), there are also lots of open-source projects being developed by Microsoft (Yes I used 'open-source' and 'Microsoft' in the same sentence in a complimentory way).  There are also several ideas that, while they're not new,  they are subtlely changing the way we should code.

I've been looking at:

... and the list goes on.

It is quite overwhelming. I'll find myself reading the same blog entry ten times to try and understand something, only to find out that in order to really understand it, you have to understand some underlying principal on which it is built.

On the plus side, I am learning all kinds of new stuff every day, and that makes my job one of the best in the world!

~L

I am creating a blog engine. Not because the world needs another, but because there are some techniques I want to learn about and creating this very straight-forward project will allow me to do that. First step was to create the project and start experimenting with Test-Driven Development inside MVC for ASP.NET. I started by searching for TDD MVC and ASP.NET which led me to this article by phil haack. While trying to put together some of my first tests, I had to use a mock object. The easiest way to do this was to download Rhino.Mocks to use for my mock framework.That leads you to download a Dependecy Injection framework (the article uses StructureMap and it seems pretty easy to use. So far, I have made it through the article (and understand most of it!), and have continued to finishing the view that makes the section of the site work. now to start extrapolating out the information from Phil’s article to the rest of the site.

Wish me luck!

L

I started a new job this week. I will be helping to move existing applications to .NET. I think it'll be a blast. The guys (and girls) I work with all seem great so far. Right now just getting my toes into their current applications and architecture.

Currently reading two books: re-reading Test-Driven Development in .NET and just starting Patterns of Enterprise Application Architecture. The test-driven book was awesome, but I need to go back and read it again and really dig into it.

I was just about to /mywrists today when I found this post. I wanted to post to this blog to say thanks to SteveX for posting it.

I was trying to read a web.sitemap file in as an XML doc and work with it. I was screaming at my screen that I KNEW there were nodes matching my XPath (//siteMapNode) but it always returned 0 nodes.

Thanks again to SteveX for savin' my life. :0)

~L

Since it's early beginnings in 1821, Kansas City has been a hub for the nation. Being located at just about the absolute center of the country is definitely a major factor, but we also were the demarcation line between the old and the new. We were the supply center for the frontier, we were the crux of the railroad's journeys to every corner of the nation and we were the finish line for those escaping slavery.

So why is it, that when something new in software comes out, we seem to get skipped? Don't people know we have geeks here? We're not all farmers and wheat-suckers (Not that I have anything against either). We have Linux User Groups (Two that I know of KCLUG and KULUA) and we have .NET special interest groups and we even have an ITEC convention. But somehow, when industry breakthroughs are announced, they do it in NY, San Francisco, Seattle or London (which I'm pretty sure isn't even IN America!). We have droves of geeks here in Kansas City and plenty of guys who think it makes them cool to hang out and talk about D&D, MUDs, MMOFPSs and robot girlfriends. So why don't we get the credit we deserve?

I wanna change it. I want the people of Earth to know that Star Trek and Star Wars are BOTH being reenacted somewhere in Kansas City right now. I want the world to know that we have a 20-sided die and we're not afraid to use it. We have Ren-Fests and Lan-parties and we LOVE pizza and Red-bull! We can restore the great centrality to the ...center. I say let's make Kansas City the next Silicon Valley without all the high priced real estate!

Viva La Central!

~L

posted @ Thursday, April 03, 2008 1:08 PM | Feedback (1) | Filed Under [ Rants ]