fallenrogue.com

Meet up this week!

written on: Monday May 12 2008 at 09:56 AM there are currently 1 comment
Hey all, just wanted to let you know I’m going to be jabbering live in the Cincinnati and Cleveland areas this week.

First stop, there is a new Architecture specific special interest group starting up in Cincinnati Tuesday the 13th at 6:00. It’s being started by Mike Wood who is head of the Cin .net user group, a fantastic community of passionate technologists. Come check it out, chances are that I will talk specifically about software arch and not hardware cause that’s my thing. I’ll let everyone else go on about hardware and infrastructure. Details here.

And on Saturday the 17, I’m going to be talk about SharePoint in Cleveland. It’s a 100-200 intro to SharePoint for designers, devs and sysadms so if you want to grok a little SP, see what it can do for you please stop by the talk. If you then want to talk about Ruby, Rails, Python or Django, hit me at the bar afterwards because I’ve got some convos I need to have!

Cleveland Day of .NET


Truth is folks, I’m large and have been accused of “looking scary” from a far but I asure you, nothing could be further from the truth! Please if you see a 300 lbs. man in a funny plaid colored bukkit hat answering to either Leon, FallenRogue or Rogue, say hi and let’s chat nerd style. Hope to see you guys soon!

Oh! and it's not this week but I'm also speaking at the Dayton .net user group at the end of this month in case you can't make it to Cleveland. details for that event are here

Wanna work for Telligent?

written on: Thursday May 08 2008 at 07:37 PM there are currently 0 comments
The company that I’m currently slinging code for Telligent Systems is currently looking for a SharePoint developer in the Dallas area to join the CommunityServer product team. Yup, that’s right, you work with the best of the best in the .net space building one of the most badass apps on the planet.

So, if you’re looking for a high profile, highly visible SharePoint project to get your hands dirty on check out the job posting here.

Tell your friends. :)
Now back to our regularly scheduled blog articles…

history blog meme

written on: Tuesday April 22 2008 at 10:27 PM there are currently 0 comments
Joe and Jay are doing it… me too!
fallenrogue$ history 1000 | awk ‘{a[$2]++}END{for(i in a){print a[i] ” ” i}}’ | sort -rn | head
135 git
128 rake
30 svn
26 ls
22 rapt
21 cd
19 gem
18 python
11 mate
9 script/plugin

Central Ohio Day of .NET

written on: Saturday April 19 2008 at 09:30 PM there are currently 0 comments
Hey all, this is a place holder for the content. I’ll be pulling the materials for the LINQ and SharePoint talks that I have today and putting them up asap. Unfortunately, I’m pretty tired so it’s going to have to wait until the morning. :) I’ll update the post with links to the material tomorrow.

Thanks to the organizers and sponsors for making it happen. Thanks to the audience for coming with their learning caps on. It was a blast and I can’t wait for next year! :)

UPDATE: FILES ARE AVAILABLE


One more update: Andy Erickson put together a sweet little vid of the event. I'm in it for a second at the beginning. You can tell that I'm still kinda out of it cause of the giant Energy drink I'm inhaling. :)

This is not Nam. This is bowling. There are rules.

written on: Sunday April 13 2008 at 11:56 AM there are currently 4 comments
The quote from the Big Lebowski is meant to provide some emotional context. Last night I, through friends of twitter friends, learned that Andrew Baron of Rocketboom “fame” decided that he wanted to conduct an experiment[sic]. The premise being that he was going to delete his Twitter account so rather than just delete it, he would sell it on ebay to the highest bidder. He covers his ass nicely in the description saying the followers that you purchase may abandon you after you win. He has every right ( I believe ) to do this and therefore my outrage is not with the act of selling the account so much as the public support and defense of it.

I have grown weary of the latest generation of marketers. They are crafty wordsmiths, self promoting hucksters that wear no badge of reason, duty or honor. They live by one principal: make the sale whatever the cost. The notion of shameless self promotion and branding has reached a point that there is literally no consequence what-so-ever for any action proposed or taken these days and passing up a few dollars because it may be the “right” thing to do is seen as ignorant.

Why get my panties in a bunch over this (something someone accused me of) when it seems common place on the internet? Easy. Because I have a brain capable of original thought and if I see someone muddy the waters of a community that I’ve come to respect and honor I call them on the carpet! Everyone wants to be so conciliatory to others and not step on toes and not call someone a douche nozzle when they are clearly being one but not me. NOT ME! I’m mad as hell and I’m NOT GOING TO TAKE IT ANYMORE! Sure, people can “unfollow” or block Andrew, that’s not the point! The point is that self promotion and marketing spin has given a man a pass his actions. Just by calling it an “experiment” he’s free to perform an action that is in no WAY an actual experiment!!! It’s not an experiment if the answer is obvious. YOU KNOW what would happen. This isn’t an experiment but another marketing stunt to cater to the lowest common denominator yet again. Calling unethical behavior an experiment is a cop out rationalization. Keep producing nothing, marketers. Keep shitting in my mouth and calling it a sundae. Keep calling it a community when what you REALLY mean is market segment or demographic.

I’ve heard the internet equated to the wild west and I think that’s unfair… to the wild west. In the wild west if you shot a man in the back it was an act of extreme cowardice. On the internet, you’d shoot your self in the foot if you thought some retard would give you 5 dollars for it. I suppose it’s easy to be cavalier about community when you’d easily toss them on the market to the highest bidder. You can call it what you want, friends, I’m calling it marketing spin. I’m calling it out on the carpet as an unethical move.

Feel free to dismiss me, marketers, as I’m sure you will. Just know that there’s at least one blow-hard asshole out there who isn’t going to take everything you promote and spin at face value and when you need to be told that you’re being unethical I have no problem speaking up. That’s what communities do. That’s what friends do. They tell you when you’re wrong. Now, man up and admit it. I’ll leave you with Bill Hicks who’s rage seems to mirror my own today:

Community.

written on: Monday March 17 2008 at 12:07 AM there are currently 11 comments
Community is difficult to build. Community is even more difficult to dictate and mandate. Communities, for lack of a better cliche, come together. People who have a common goal, living space, working space, whatever it may be, are lost in the wilderness, confused about their surrounding and the direction in which they are heading. So, rather than panic we look to our left and look to our right and find people who can objectively define their panic in a way that parallels our own.

Tonight, I listened to David Laribee talk with Scott Hanselman about alt.net. Now, the interview was fantastic. 2 guys, talking shop and enjoying one another’s company. The rest of the article talks about the concepts that alt.net seems to bring to my mind and not what they were chatting about specifically. In the .net community, we seem to know how to name drop, TLA drop and pattern drop with the rest of the “cool” communities out there. We believe that using OpenID to be a revolution, we believe DI is a revolution. The only problem is that it’s not. It’s only revolutionary to us. It’s interesting when looking at it through the homogenized rose colored glass of .net. But other platforms and languages have been implementing these techniques in advance of us, consistently for years. I’m hard pressed to think of a single contribution to the development lexicon that was established from the .net world (not the windows world, the .net world.). We seem to be chasing the dragon but not taming it. I’m desperate for someone to come up with something that doesn’t have an N in front of an existing JAVA library. We’re getting great at grokking, aping and playing in the sandbox but innovating? Well, I think we’ve got a long way to go, baby.

I don’t want to talk nothing but shit. alt.net’s heart is in the right place. We, as .net developers (and I am one of them), want to make our lives easier but letting someone else (Microsoft) steer the ship has made it significantly more difficult to fight political battles in the enterprise and bring the vary concepts that Laribee is touting into the community (and subsequently, enterprise) awareness.

When is the .net development community going to stop being a “what can you do for me?” community and truly become a “what can I do for you?” community? When are the biggest critics going to turn exclusive events into general events that disseminate information to the very community it’s trying to foster? If they’re going to target MS events, doesn’t it have to look beyond piggy-backing off of the MS marketing and get to Dev Evangelists themselves and remind their audiences that even the greenest developer needs to learn to develop and not drag and drop their way to code nirvana? We have to tell the SharePoint team and the ASP.NET team (who already seem to know, regardless of the fact that the abstract HttpContext is not going to be retrofit into the framework.) that TESTING is important and not a complete waste of time or else we’ll NEVER be able to innovate. We’ll only be able to hack and “play” at the concepts that are being established by the OSS community. David and Scott’s talk (and the larger goals of alt.net) scratches the surface but the larger question of bridging the gap between the mid/seniors to the alphas needs to start taking shape or else I’m convinced that alt.net will become a way for .net alpha geeks to legitimize themselves at the next “cool kids” conference instead of saying that they are .net developers but wished they were making money on Ruby they can instead say “no, I’m cool. I’m alt.net.” Which, as Scott says, sounds more like “alternative to MS” rather than “alternative to the current convention”.

So, what about me? Well, I’ve been playing in both fields for years now and I’ve tried to live the live (walk the walk?) and realize that sometimes an exercise in .net is a lesson in futility and that sometimes a pattern was developed to solve someone else’s problem that you didn’t have in the first place. Sometimes, unit testing in .net is better served as integration testing. Sometimes, we can’t do what Ruby can do, so we walk 20 miles to progress 2 feet. I believe some call it cutting your nose to spite your face. Subversion versus VSS is one thing but if you can’t tell me why then you’re just trying to keep up with another community. Rails is Rails because it’s being used and not because it’s built in a petri dish for public consumption/fame and fortune. If I were to tell you back in 2002 that Ruby would be one of the fasted growing, widely used, innovative languages in 2008 you’d have said I was crazy (or “wtf is Ruby?). If I was to tell you that MVP was going to lose favor to MVC you’d have said “what’s MVC?” Ruby, friends, is popular because a community formed around great ideas and began to flesh them out and make them great not because they were forced into public focus. .net has the brains, the passion and the skill to do it… but just can’t seem to lead by example.

I want to contribute, I want to help, but at times, feel crippled by the .net framework to bring what I’ve learned in Ruby to C#. (I’ve yet to have a desire to go the other way….) I know we keep talking about options and choices but until we come up with something fun, easy, innovative and alternative to the mainstream it will continue to feel like bubble-gum on a crack in the Hoover dam.

FOR THE LOVE OF GOD please discuss. Tell me I’m wrong, tell me why and let’s get me on the good ship lollypop. I hate to post these kind of posts. Mainly because I had being concrete on topics that are generally gray, I mean, there are good things happening… of course. It’s just easier to talk about the bad. This is not flame-bait but a call to action. What’s next and how can I help?

Fun little ruby time...

written on: Tuesday March 04 2008 at 12:03 AM there are currently 2 comments
So, Scott Hanselman posted a cool little brain teaser over at his site. It wasn’t a teaser so much as an exercise in scripting. I figured when he asked for samples in other scripting languages that we’d see a lot of extremely terse multidimensional array looping examples in OCaml and F# and even Python, Perl and Ruby. Well, no one (at that time) had tossed their Ruby hat in, so I though, oh what the hell. But rather than show off “fewest lines of code” (FTW!) I decided to approach the task like I would any application. I thought it’d be more fun that way and give me a few minutes in my precious love… ruby. <3

Check out Scott’s setup here and read the official rules here and then feel free to tear my example to shreds OR better still, provide us with links to your own. (you can try to reply in comments but I can’t promise it will render very well. :) Without further adieu…


class Team
  attr_accessor :name
  def initialize(name)
    @name=name
  end
end

class Game
  attr_accessor :home_team, :away_team
  def initialize(home,away)
    @home_team = home
    @away_team = away
  end
end

class Schedule
  attr_accessor :games
  def initialize()
    @games=[]
  end

  def scheduled_to_play?(team1, team2)
    @games.each do |game|
      if (game.home_team == team1 || game.away_team == team1) 
            && (game.home_team == team2 || game.away_team == team2) 
        return true
      end
    end
    return false
  end 

  def add_match(team1,team2)
    @games << Game.new(team1,team2) unless scheduled_to_play?(team1,team2)
  end

  def to_s
    @games.sort_by{rand}.each{|game| puts 
      "#{game.home_team.name} vs. #{game.away_team.name}\n"}
  end
end

schedule = Schedule.new
teams= []

("A".."F").to_a.each{|letter| teams << Team.new(letter)}
teams.each do |home|
  teams.each do |away|
    schedule.add_match(home,away) unless home == away
  end
end
schedule.to_s

It’s a “warts and all” first pass (looking after I paste, I wanted to make some changes) but that’s not the point. the point was, task easily solved with Ruby and my night just a little brighter.

NewsFire is now free!

written on: Saturday March 01 2008 at 05:00 PM there are currently 0 comments
Hey all, if you’re a Mac user and you’ve tried a million RSS readers but have stayed away from NewsFire either because a: you don’t like to pay for what you can find for free or b: have mixed feelings about Dave Wantanebe then reason a is gone. I can’t do much about b but frankly, I’ve got nothing but respect for Dave.

Anyway, you can read about it going free here and download it here Please to Enjoy!

Intellisense is not a contract. or where have all the interfaces gone?

written on: Friday February 29 2008 at 01:26 PM there are currently 2 comments
There’s something that’s been on my mind and after talking to a few folks locally I thought it may be worth while to express these fews in the open and see what other folks think about it. I’ve made it pretty clear that I’m into many different languages, frameworks and platforms. The plus to this lifestyle is that you can pick up the best of all situations and (if possible) you can be, as Neal Ford says, a polyglot programmer. If Ruby makes sense, use it, if F# makes sense, use that. I love that flexibility. More than the flexibility I love learning the conventions, patterns and practices that are born from the specific problem sets of each language (framework, pattern, etc)

In the past, I’ve, fairly and unfairly, criticized C# for being overly verbose (unless you compare it to VB.net) and I believe that was due to the fact that C#’s specification was originally doing too much. (temping Java devs, helping C++ devs come to managed, looking familiar to all but being new!) Since the original spec, we’ve grown to a C# 3.0 spec that is truly fantastic. The language is statically type but not rigid with a wonderful Reflection library, type inference, annoymous types and methods.All wonderful additions and totally welcome, no matter how demanding the learning curve may be.

Which brings me to interfaces. I’m talking interface in the sense of the C# implementation of it. In the past 5 years, I’ve seen less and less implementation of interfaces leading to more and more obfuscation of object models. Developers use naming conventions to established unity of contract and not an actual contract. I would seem that developers of C# libraries believe that since VS.NET will tell you what methods are available on an object that is currently referenced by the project that they are covered. They are certainly right to a point. Sure, if you need to quickly remember what methods are available Intellisense is perfect but you can’t build a dependcy on an outer library that can’t commit to the signatures that it is specifiying.

Before you say it, I know what you’re thinking… IClonable. Sure, IClonable is the best example of an Interface being ambiguous (the issue was deep vs. shallow copy FYI) but without other interfaces, like ICollection and IEnumerable C# would be an entirely different language. You like the implementation of foreach in C#? Well, it wouldn’t be possible without IEnumerable. foreach relies on the Interface to provide the functionality that you’d expect. That’s pretty cool and doesn’t take much to take advantage of on your own with your own collections. Just honor the IEnumerable contract and you can join the fun.

Now, I’m not suggesting that we go back to header files for each class we write but I am saying that if you’re expecting other folks (and that includes yourself) to use and depend on the code that you build you should make sure that the contracts that you expect and depend on for your program to run are honored by both the provider and the consume. It makes like easier for everyone when we can rely on what you say is going to be there.

So, what do you think? Am I making more of this than I should? Should I be happy that I have VS.NET for intellisense to prove a contract? Is it worth it? I think it is and will continue to do so.

Before I leave you, I will also mention that Interfaces provide a great view into true polymorphism. Show of hands: who where has tried to unit test asp.net? Why is it difficult? If you answered outer dependencies you’d be right. This issue exists in many different languages and frameworks who need to do the same thing. You need a web server to create an HttpContext. Your tests are bound to that environment and may fail based on other aspects of your environment and not on your actual codebase which is frustrating to say the least. Well, if there was an Interface for HttpContext (and now there is in the MVC framwork!) then you could mock the context and run your tests. Good times. Well, if you have a similar situation then it would be fantastic to provide the same interfaces to others so that they may also provide a completely different implementation for your contract that satisfies the needs of all who care. It helps in testing, it helps in debugging, it helps in documenting your code.

It’s not even a lot of work. So, think about it, start small and next time you’ve got a class you’re building, take a look at it. If you say “You know what? This class is useless without x,y,z properies.” Give it an interface! I’ll be happy you did. :)



Bonus Section!


For my birthday this year, I would like the following interfaces…

  1. ISPContext

  2. ISPWeb

  3. ISPWebService

  4. ISPSite


Since MVC is available, I won’t ask for all the asp.net interface I want. :)

SharePoint 2007: Pointedly Mistaken

written on: Tuesday February 05 2008 at 11:11 PM there are currently 11 comments
Working in SharePoint 2007 (Windows SharePoint Service v3 and/or Microsoft Office SharePoint Server 2007) on a daily basis is an invigorating challenge to say the least. Not because the platform is difficult but rather dispelling the mystery of customizing and developing on it to others on your team. If people are not interested in understanding a platform, getting them to enjoy working on that platform is difficult. If you’re used to PHP apps or dot net nuke or mephisto or wordpress or any other number of popular platforms, then asking you to get down with SharePoint is a tall order to swallow. Compound that with the fact that you’re largely working with a product that had many problems in its previous versions and it’s reputation for being unpleasant for developers and designers was cemented in stone. Many professionals decided that it was not a viable option for them without truly evaluating it. ISVs did not do much better in terms of providing best practices and optimism for the platform when their solutions were hobbled together by disparate technologies that seemed to only solidify the notion that the only way to bend SharePoint to your will was to go around it completely (see Coveo Search for WSS v2; a product that uses the WSS v2 SOAP services to index all WSS content…). There was a lot of negative press surrounding WSS v2 and SPS (SharePoint Portal Server) 2003 and much of it was justified.

So when WSS v3 came around, Microsoft was excited to report that the entire system had been reborn in ASP.NET 2.0 (with some help from the new bits and pieces of .NET 3.0). To say that SharePoint had an uphill battle to prove its worth to the development/design community was to put it lightly. Not only did SharePoint have a reputation for being unfriendly to developers but now it was claiming that it was simply ASP.NET + features = SharePoint. Microsoft has made promises in the past that were not made good on and given the previous version’s pain points many have had issue with re-evaluating SharePoint today.

Not making things any easier would be articles like Cameron Moll’s article condemning MOSS’s ability to be customized by a designer. The article is well written and thought out by Cameron (a trait I’ve come to expect from his blog) but is riddled with inexperience. Certainly not inexperience as a designer, he’s a recognized expert in his field, but rather as a SharePoint developer/designer. I have to sigh at yet another frustrated artist who’s limited knowledge of the platform has driven him to rant and derail public perception of a platform which is not given credit for its extensibility and is evaluated on an extremely narrow scale.

I want to respond to Cameron’s article here not as a means to begin a flame war but rather as a means to dispel some of the dev/des FUD surrounding SharePoint as a development platform. It should also be noted for the sake of full disclosure that I’m currently making a living developing advanced enterprise level solutions on WSS v3 and MOSS 2007 and believe in the platform enough to be actively in talks to write a book on the subject. These points are in direct reference to Cameron’s points and I encourage readers to keep this conversation going, so long as it’s a conversation and not some dissertation on your utter disappointment in your CTO for choosing SharePoint over Drupal. We can compare and contrast feature sets in another post. For now… to unlearn what we have learned…

In my talk at CodeMash this year, I focused on doing much the same thing. Dispelling the notion that SharePoint is an island that is unchangeable by developers and designers. Yes, Visual Studio.NET 2003 (another Microsoft product) re-wrote all of your HTML markup in the way that it saw fit (which made us all want to vomit blood) but VS.NET 2005 remedied that. You can’t continue to hold a grudge unless you’re using VS.NET 2003, in which case, you’ve been warned, a best practice exists and you’re welcome to follow it and retain your pretty markup for “switch to the designer and drag and drop” at your own peril. The choice is up to you, just like in SharePoint development and customization. You can hold SharePoint accountable for the sins of its father but you’d doing the son (and your project) a disservice.

Let’s go back to Cameron Moll’s post to better understand the problem set and if there is truly and impossible chasm that cannot be crossed here.

"SharePoint can be used primarily as a CMS or primarily as a
collaboration tool. However, try to use it as both in a single 
implementation and you’ll entangle yourself in a strenuous skinning effort." 

Go on…
"At its core, SharePoint is a robust content management
system (CMS). Just about any flavor of web content can 
be built and maintained by it — public or internal, small scale or large." 

This is true but let me clarify. MOSS 2007 provides CMS features through the Publishing Portal feature set; a value add built upon WSS v3’s infrastructure (all MOSS value adds are features that extend WSS). The feature set is expansive and highly customizable. While it can be leveraged by users of any size, it’s cost, both from a hardware as well as licensing standpoint suggest that it’s a solution for owners with large scale CMS needs. Continue, Cameron…
"Complementary to its core, SharePoint is a massive collaboration 
tool. It can facilitate the many activities common to any workplace 
... have many site owners accessing admin screens." 

Ok… this is where we begin to see that the problems that Mr. Moll faces are not entirely in sync with a traditional web application. SharePoint’s software architecture and flow is unique to SharePoint and shares more in common with complex distributed systems than a single web application for CMS or Collaboration. There is a rhyme and reason to most design choices (I say most because some are legitimate pitfalls held over for backward compatibility) but I’ll let Cameron make his point before I continue.
"Any changes made to Master Pages (i.e. templates for 
the CMS) will not carry over to the admin screens." 

OK. Here we go. This is true. ...to a point. A point that Cameron soon makes…
"in the collaboration scenario, nearly any user can, and will, 
switch between published screens and admin screens to 
complete tasks. Because your skinning won’t be reflected in 
the admin, what should otherwise be a continuous visual flow 
for users instead becomes a jarring transition from your beautiful 
theme to SharePoint’s vanilla theme and back again." 

Again… This is true. ...to a point. Cameron then goes on to mention that…
"...led to an unsuccessful skinning effort that was eventually 
scrapped. This inevitably begs the question: Is SharePoint 
completely unskinnable when used as a collaboration tool? 
No. It’s still possible to skin the interface using CSS overrides, 
but not to the extent which we were customizing it." 

Well, for reasons that only someone from the product team can answer, all pages in the LAYOUTS directory in the 12 Hive (SysRoot\Program Files\Common Files\Microsoft Shared\web server extension\12) use their own master page – application.master. Layouts pages execute in a different fashion that site pages (buy me a beer and I’ll tell you all the intricate details of this process) and therefore certain global (or specific) tasks are performed from layouts (look at the url for all of the actions in site settings you’ll see _layouts in the url). Some of these tasks, like the ones found in site actions, are correctly located in this virtual directory but others like file upload seem misplaced there. This is the issue that Cameron is referring to. He, like many, don’t mind sending the admins to a differently branded area for admin tasks but when the beautiful theme that you worked so diligently to perfect is tossed away in many key sections of the user experience it can be jarring and downright unacceptable.

Well, there are 2 solutions to this problem which I will outline (and subsequently write articles to demonstrate implementation). First one must understand the exact role that master pages serve in asp.net. They are not “themes” in the traditional CMS lexicon but rather “layouts” pages that dictate the markup that is to be used when rendering elements to the page. Pages in layouts expect more elements (just like collaboration pages do) and therefore implement a different master page (application.master) than their site level (web or SPWeb level) counterparts. This doesn’t mean that they can’t. It just means that by default they don’t. So with this information, there are 2 possible solutions to the problem.

1. Backup application.master to something else, account for the additional layouts specific markup expectations in your default.master (or whatever.master) and provision that file to the layouts directory as application.master. Done. That’s it. you’ve done it. Now. It is worth noting that is this permanent and it’s possible (in fact, it’s probable) that in a future upgrade you’ll lose the application.master customizations. Then again, you can prepare for that and fix it as part of the upgrade.

2. The second solutions and the one I favor (and have implemented recently) is to craft a simple SharePoint Solution that installs an HttpModule to the Farm. This module will determine if the currently requested page is a: coming from layouts and b: from a site that has your feature for the admin master swap enabled. If it does… then in 1 line of glorious C# you can swap the master page to one of your choosing. The best part? It scales, it’s managed cleanly through admin sections and is future proof (or at least future compatible).

Yes. This is not documented clearly in the SDK but the use of application.master is and while the practice of theming asp.net is documented separately from SharePoint, it is documented both by the MSDN and in the blogosphere. It’s difficult to know why Cameron and most clients I’ve dealt with give up so easily on this concept but they do. I see SharePoint’s negative image in the world as well as it’s high barrier for entry when establishing an environment for development (Virtual Machine with Server 2k3, full WSS / MOSS installation running, VS.NET tools and various sdks) as the main reason hobbyists are not embracing the platform and subsequently not sharing their successes and creative solutions with the world. But that’s fodder for an IRC chat…

Back to Cameron…
"Lastly, and most importantly, my greatest concern for 
customizing SharePoint was the hope that I’d not only 
be able to paint the app but customize the interaction 
workflow, as well. Not a chance." 

Actually, there’s a large chance. Quite a large chance to be clear. In fact, there is no feature in WSS v3 that cannot be overridden and re-implemented by developers. Cameron’s “Sally” is having a problem changing the logo on her site and has to move heaven and earth just to find the url prior to going into the admin tool and pasting the url in the correct form. Yes. This is irritating. So, if you have a requirement to make it easier (e.g. you can’t call it a feature and training issue…) you can use the WSS v3 platform to solve it in relatively short order. Off the top of my head (and yes, I’ll consider a followup article to implement this concept) hijack the context menu for image files in her web and add a menu item that calls a layout page that changes the url of the site logo for her. Easy. Or! Event better! Create a new admin section altogether that provides a gallery of publicly available image across the entire farm (based on a search, perhaps?) and allow her to choose the one she wants while getting a nice preview of the changes about to be implemented in a cool iframe window. That would be rad! It’s also not impossible nor is it a profound development effort.

I want to leave you with this: I have been customizing WSS v3 since it’s RTM and there hasn’t been one task that I haven’t been able to perform. In fact, I’ve got someone of a reputation with my former employer, Cardinal Solutions, for saying “yeah, sure. That’s easy in SharePoint” when others had hit a wall. Turns out, I had already hit the wall, showed them a better way around and they were on their way. Now the team is teaching me all kinds of great things! In SharePoint, the approach usually required an understanding of the platform to help reveal the strongest path. While I don’t think that it’s always practical to “reinvent the wheel” for every design choice that was made in SharePoint, when you consider that it’s possible to do so without negatively impacting the future viability of the platform, that alone is a compelling argument for implementing it.

The lighter side...

Leon Gersing's Facebook profile

Twitter Updates

    The conversations...

    In Meet up this week!

    Joe Wirtley: Like I'm going to talk about hardware or infras...

    In This is not Nam. This is bowling. There are rules.

    Zach Dorman: MMMmmm... I love social debate!! Soooo let me s...
    Andy Watts: Bill Hicks and the Big Lebowski in single post....
    Leon: @heike thanks for the comment, and for someone ...
    heike: A friend sent a link to your article today. I w...

    In Community.

    Jason Alexander: Great post. This is exactly why I had such a d...
    Andy Erickson: This comment is more philosophical than perhaps...
    Leon: @James I assume you mean this question rhetoric...
    James Avery: Here is another question. Why? Why should you s...
    Rich: I think that we need to recognize that we're in...
    Leon: @Dave: sounds like a plan, thanks for taking th...
    Dave Laribee: Well said. This is _constructive_ criticism and...
    Leon: (I've really got to fix that comment order bug ...
    Leon: @Scott: why regret? Because I don't want to be...
    Scott Hanselman: Why?
    Leon: I'm already regretting this post.

    In Fun little ruby time...

    fallenrogue: @Eric YES! fantastic! I knew it was only a matt...
    Eric: Here's a small "FTW-example" #################...

    In Intellisense is not a contract. or where have all the interfaces gone?

    Leon: One can only hope, Joe. if not Ruby, then F# wi...
    Joe Wirtley: A guy who also programs in Ruby advocating for ...

    In SharePoint 2007: Pointedly Mistaken

    Shankar: I have very similar experiences that I blogged ...
    bazztrap: the problem is two fold. In this age we have di...
    Leon: @Solace - I'm trying to be more positive in my ...
    stefan demetz: Nice article !! skinning Sharepoint is quite h...
    Solace: Well-written with a nice spin, Leon. It's good...
    Leon: Hi Will Green, thx for the feedback. I'm workin...
    Will Green: Leon, Another great article. My company has ma...
    Zach Dorman: As a relatively new sharepoint developer let me...
    Leon: Thanks for the comments guys! @John: Hittin...
    Victor Shamanovsky: Excellent post. You really nailed it with the f...
    John: If you see a lot of other people hit a wall whe...

    The most recent comments...

    Joe Wirtley: Like I'm going to talk about hardware or infrastructure at the architecture SIG. I guess that wi...
    Shankar: I have very similar experiences that I blogged about here. This is more focused on end user adopt...
    Zach Dorman: MMMmmm... I love social debate!! Soooo let me stir the pot a bit :) ( these views may not necessa...
    Andy Watts: Bill Hicks and the Big Lebowski in single post. Hats off!
    Leon: @heike thanks for the comment, and for someone who is not an English speaker your thoughts are ex...
    heike: A friend sent a link to your article today. I would love to just write "I totally agree with you"...
    Leon: They're back now. Sorry about that. :)
    Leon: Hi Tiffany, I had a problem with my host over the past few days and have been trying to restore c...
    tiffany: The ppt files seem to be missing. Have these moved?
    Leon: no prob, gordon! Good luck with your app!
     

    The other stuff...

    ©2000-2008 fallenrogue.com | Some Rights reserved.