Posted by K. Scott Allen on Oct 15, 2009 in
Dotnet |
View Original Article
After a long stretch of quietly hacking at home, I’m getting out to speak at some events again:
Stack Overflow DevDays in Washington D.C. on October 26th. The event is SOLD OUT with talks on Python, ASP.NET MVC, iPhone development, Google App engine, and jQuery. Something to learn for everyone!

Øredev! I’m looking forward to seeing Sweden again! There are 14 tracks covering everything from Java to .NET, and Agile Ways to Leadership. The list of great speakers include, but are in no way limited to, Douglas Crockford, Jim Coplien, Dan North, Neal Ford, Ola Bini, Tess “Debug Diag” Fernandez, Shawn Wildermuth, Julie Lerman, Stephen Bowlen, Amanda “F#” Laucher, and Bea “WPF” Stollnitz. There is also Bellware, Oren, Hanselman, and Mr. Neward. It’s going to be awesome.

EPiServer Meetup! I’ve been invited to fly into Stockholm while I am in Sweden to visit the awesome team at Nansen and talk at the EPiServer Meetup on November 4th. Watch the meetup page for more details.
DevConnections! I’m in the ASP.NET track and have a post-conference AJAX workshop on Friday with lots of tips and tricks. Looking forward to seeing guys like Rick Strahl, Markus Egger, Paul Litwin, and Miguel Castro again. Exciting!

Code Camp! The Central Pennsylvania .NET Users Group is having a Code Camp on December 5th. I hope to see you there!
LINQ! I’m giving a three day class on LINQ and LINQ related technologies in Waltham, MA on December 8th. If you want to take a deep dive into the technology and see how LINQ and functional programming can transform not only your data access code but your business logic and tests, then sigh-up now. I’m sure we’ll go off on some interesting tangents, too.

Posted by Rich Tretola on Oct 15, 2009 in
Flex |
View Original Article
InsideRIA had three sessions at Adobe MAX this year: The Battle of the Flex Frameworks Returns, with Greg Owen; Augmented Reality within the Flash Player, with Jesse Freeman; and InsideRIA's Secrets of the Best Rich Internet Apps of 2009 (So...
Tags: adobemax, ar, Blogs, frameworks, ria
Posted by W3Avenue Team on Oct 15, 2009 in
Javascript |
View Original Article
MockFlow is an online tool for creating wireframes of software and websites. It helps to enhance your planning process by enabling to quickly design and share interactive UI mockups. It comes with ready-to-use 70+ components and 200+ icons, all designed to suit wire framing.

MockFlow allows you to share your work in private/public mode and get feedback from your clients & users. Its simple usability, progressive page templates and quick presentation mode makes the wire framing process really easy and collaborative. You can get a free account that allows 1 mockup with 4 pages, 2 collaborators / mockup, 10 MB storage and exports your work with watermark.
Features
- Simple usability focused to make wire framing easier
- Pages can be applied with multiple (recursive) templates saving time
- Invite co-editors and reviewers to collaborate your Wireframe project
- Create, Visualize and export your Wireframe’s SiteMap
- Export your Mockup to image or PDF document including comments
- Get annotated feedback directly in the mockup
- You can apply your preferred Wireframe Font with one-click
MockFlow is a production of A Produle Systems (P) Limited. Visit MockFlow: http://mockflow.com/
Similar Posts:
Tags: design, Design Tools, Online Tools, Tools, Wireframe
Posted by David Starr on Oct 15, 2009 in
Dotnet |
View Original Article
I am happy to introduce 2 new Elegant Coders! We are excited to have their contributions to the site and look forward to their wisdom.
Kirstin Juhl
@kirstinj
We are excited to have Kirstin drop wisdom like she has been doing on her current blog: I [heart] Code. From her own bio:
I am a former engineer who writes code. I did Toyota Operating System, Kanban, and Lean in my factories a decade ago, and am fascinated by its use in software development today. You can take the girl out of the factory, but you cannot take the engineer out of the girl, and so I approach everything in life as a problem to solved or optimized. Including software development. I strive to be a craftsman.
I am a mom, and I take lessons from parenthood into my work everyday.
Jason Jarrett
@staxmanade
Jason is a big-time Silverlight maven and the developer behind StatLight, a set of unit testing tools for Silverlight. I knew he was perfect for the tribe when he said, “… and so I added automocking to Unity for Silverlight.”
Yeah.
Welcome all.
Tags: blogging
Posted by Davide on Oct 15, 2009 in
Silver Light |
View Original Article
Many MVVM implementations are available on the net, personally I love the approach used by Laurent Bugnion in the MVVM Light toolkit and Michael Sync in the Silverlight MVVM toolkit (Jeremiah Morril have posted a great article about this pattern, don’t forget to read it here).
All these examples use C#, what about F# for describing ViewModel classes? F# is a very powerful and readable language and permits to perform operations using a small amount of code. Last, but not least, at this time it’s a first citizen .NET language and can be easily used in Silverlight applications as well.
How can we build a Silverlight MVVM solution using F#?
First of all, download and install the F# for Silverlight templates and samples.
Let’s start by defining a simple F# ViewModel class containing a simple “Name” property and a “SearchCommand”, this one using the DelegateCommand implementation available in Prism:
namespace SilverlightViewModelFSharp.ViewModels
open System.ComponentModel
open Microsoft.Practices.Composite.Presentation.Commands;
open System.Windows
type MainPageVM() =
//Definition of the PropertyChanged event
let event = Event<PropertyChangedEventHandler, PropertyChangedEventArgs>()
//Definition of the "name" property
let mutable name = "This is the value of a property defined in the F# ViewModel"
//Definition of a test Command
let searchCommand = new DelegateCommand<string>(fun (x) -> MessageBox.Show(x) |> ignore )
//INotifyPropertyChanged interface
interface INotifyPropertyChanged with
member this.add_PropertyChanged(e) = event.Publish.AddHandler(e)
member this.remove_PropertyChanged(e) = event.Publish.RemoveHandler(e)
//Definition of the "Name" property
member this.Name
with get() = name
and set(v) =
name <- v
event.Trigger(this, new PropertyChangedEventArgs("Name"))
//Definition of the "SearchCommand"
member this.SearchCommand
with get() = searchCommand
Cool, don’t you love this F# syntax? It’s so readable
Now we are ready to bind the MainPageVM to a xaml view inserting this simple code:
<StackPanel Orientation="Vertical">
<!-- Example of binding to a F# ViewModel Command -->
<Button Height="40" Content="Click me!"
cmd:Click.Command="{Binding SearchCommand}"
cmd:Click.CommandParameter="Hello from a ViewModel F# Command parameter"/>
<!-- Example of binding to a F# ViewModel property -->
<TextBlock Text="{Binding Name}" Height="40"/>
</StackPanel>
To make the ViewModel magic work, just assign the MainPageView DataContext with the F# ViewModel:
public MainPageView()
{
InitializeComponent();
this.DataContext = new MainPageVM();
}
The source code is available for download here.
New: updated the source code for Visual Studio 2010 Beta 2.
Happy Silverlighting!!
Tags: .NET Programming, F#, Patterns, Programming, ria, Rich Internet Applications, Silver Light, Silverlight, Silverlight 3
Posted by Scott Barnes on Oct 15, 2009 in
Flex |
View Original Article
Adobe have spent a lot of cycles / years nudging Apple that Flash should be on the iPhone. Apple have firmly just said no, and despite the answer, Adobe keep expecting them to cave due to public demand. The problem with this logic is that Apple won't give in. Let's break this down into two parts: First, Don't poke the sleeping giant. Secondly, just because it's easy, doesn't mean its successful.
Tags: adobe, apple, appstore, Blogs, flash, iphone
Posted by Robert Bowen on Oct 15, 2009 in
Design & Graphics |
View Original Article

In business, being able to read people and quickly get a sense of who you’re dealing with is an invaluable skill. It turns your encounter with a client into an opportunity to catch a glimpse of the upcoming project and how it will need to be handled. It is one of the building blocks of a professional relationship.
In today’s digital age, the arena has shifted to the Web, and the online office space that most freelancers inhabit limits personal interaction. Though sussing out a client’s personality via online communication is difficult, it still remains an invaluable tool in your arsenal.

Image by Salva Barbera.
In the freelancing field, you will encounter a range of client types. Being able to identify which you are dealing with allows you to develop the right strategy to maximize your interactions with them, and it could save your sanity. Below is a list of the most common personality types and the tell-tale signs that will tip you off.
The Passive-Aggressive

Image by John Philip.
This is the client who is very passive when you ask for initial input, but when you submit the finished product, they aggressively attack it, demanding a lot of detailed changes, both major and minor. They had an idea of what they wanted all along but kept it mostly to themselves. Even though they showed appreciation of certain ideas and elements throughout the development process, do not expect the passive-aggressive client to keep any of them as they send revisions your way.
Identifying Characteristics
- Communication is mostly one-sided and unhelpful during project development.
- Makes statements such as:
- “I’m not really sure what we’re looking for.”
- “Just do something that would appeal to us generally.”
- “You totally missed the point of what we wanted.”
How to Deal
Patience is the key. Expecting the last-minute requests for revisions may soften the blow of the client’s aggressive behavior. Keep your original layered design intact so that you can easily refine and change it later (not that you wouldn’t, but it does happen). Also, make sure your contract specifies a limited number of revisions.
The Family Friend

Image by Celiece Aurea.
This is the client whom you have known for years either through personal or family interaction, and this connection has landed you the job. The relationship will be tested and perhaps marred forever by what could very well be a nightmare of a project. This family friend believes he deserves a “special” price and unbridled access to your work. They will sometimes unwittingly belittle your work or not take it seriously because of their personal connection to you.
Identifying Characteristics
- These clients are easy to identify because… well, you know them.
- Makes such statements as:
- “Could you just throw something together for me?”
- “I don’t want you to think that just because I know you I want you to cut me a deal.”
- “You’re going to charge me what?! But we go way back!”
How to Deal
The way to deal with this client depends on how well you know them and how much you value your relationship with them. But remember that anyone who would take advantage of such a relationship is not truly a friend, so respond accordingly. An honest approach could end up saving the relationship. But start off with a professional, not personal, tone, and they may follow your lead. Of course, if you truly value the relationship, you may want to pass on the job altogether.
The Under-Valuer

Image by Maxime Perron Caissy.
Like the family friend described above, this client will devalue your creative contributions. But there is a difference: you do not actually know this person. There is no rationale for their behavior. They feel they should get a “friend’s” pricing rate not because they want to be friends with you, but because they do not see your work as being worth that much… even if they couldn’t do it themselves. Not coming from a creative background or even having had exposure to the arts can mar someone’s appreciation of the work that you do. After years in our field, we make it look easy, and that is what the under-valuer sees.
Identifying Characteristics
- Does not respond to questions in a timely fashion.
- Makes such statements as:
- “It’s not like it takes much effort on your part.”
- “Couldn’t you just throw something together for me?”
- “How hard can this really be?”
How to Deal
Confidence is key here. You know what your work demands and how well you do your job. The under-valuer will recognize this confidence. Don’t back down or concede a point to the client when discussing your role in the project. Standing firm will establish the professional and respectful tone you deserve. If the client does not respond in kind, cut your losses and decline their project.
The Nit-Picker

Image by Bob Smith.
This client is never fully satisfied with the work you do and will constantly pick on minor details here and there that they dislike and want changed. Do not be surprised if they ask you to change these same details over and over ad nauseam. It is not a sign of disrespect (as it is with the other clients), but simply the nature of the person. They may have been burned in some other project and are now unsatisfied with everything in their path, including your work.
Identifying Characteristics
- Complains almost consistently about unrelated things.
- Personal outlook comes with a scathing bite.
- Makes such statements as:
- “How hard is it to [fill in the blank with any rant]?”
- “I’m really not sure about this element here. It just doesn’t pop!”
- “I don’t think you are really getting it.”
How to Deal
Once again, patience is important (especially if you have some sadistic reason for taking on nit-picking clients). Try to detach yourself from the project as much as possible, so that the constant nit-pickery does not affect you personally. It is easy to feel hurt or get defensive when your work is repeatedly questioned, and you may begin to doubt your skill. But understand that this is not about you or your talent; it is simply a personality trait of the person you are dealing with. And once again, protect yourself in the contract.
The Scornful Saver

Image by Ivan Petrov.
This client has similarities to the nit-picker and under-valuer but is actually impressed with your work and skill set. The criticize you merely to undermine your confidence in an attempt to lower your pricing rate. Unlike some other client types, the scornful saver understands creative people and their processes. But they are cheap and manipulative, and their scheme may have worked in their favor once or twice in the past. So, they continue to subtly abuse the people they hire in the hope of saving every last penny.
Identifying Characteristics
- Compliments always come with a less-than-flattering qualifier.
- Takes time to respond to questions, sometimes making you ask more than once.
- Makes such statements as:
- “I really like what you’ve done overall, but I’m unsure about one or two things.”
- “You may not have gotten exactly what we’re looking for, but you’re close.”
How to Deal
Once again, it is all about confidence. Having a solid understanding of your field and being confident in your knowledge and abilities will keep this client’s manipulation in check. Standing your ground and even calling the client on some of their tactics could shift the balance of power over to you. Be prepared to walk away from the project if the disrespect and manipulation continues. There will be other projects and other clients.
The “I-Could-Do-This-Myself”-er

Image by Maria Beliakova.
Where to begin… When this client farms a project out to you, they make clear to you that they know how to do what they’re hiring you to do but that just don’t have the time to actually do it. They may be working at a firm or an entrepreneur; either way, you are there to pick up their slack. If they’re at a firm, you could be in for an interesting situation; they were likely hired for their particular style and proposals, and now you will have to please two sets of people: the person who hired you and the people who hired him.
Identifying Characteristics
- Will generally be (or look) hectic and rushed.
- Communication from them often takes the form of short bursts of information.
- Makes such statements as:
- “I could easily handle this if my schedule weren’t so full.”
- “Really? Not sure that’s the direction I would’ve gone in, but whatever.”
- “Remember, you are filling my shoes, and they’re pretty big.”
How to Deal
The “I-Could-Do-This-Myself”-er will likely have recognized your talent and skill right away, which is why they hired you. They merely want you to know that this project (and thus you) is not above their ability. And though these reminders will grate on you periodically, they will let you run with your ideas, perhaps offering suggestions or feedback on the final design.
The Control Freak

Image by Michal Zacharzewski.
This client desperately needs to micro-manage every little detail of the project, no matter their qualifications. No decision may be made without their explicit input and approval. This tiresome client forces himself into your workflow, heedless of either invitation or protest, and will demand access to you at whim. The concepts of boundaries and strict work processes are easily lost on the control freak, who constantly disrupts the flow. They may also believe you lack dedication or preparedness, further reinforcing their need to interfere.
Identifying Characteristics
- Initial contact is long, detailed and one-sided, with little input sought from you.
- Your input remains unsought as the project pushes forward.
- Makes such statements as:
- “This way we can keep in contact 24/7 in case you have any questions, or I do.”
- “I really know best what is right for the project and what is not.”
- “What do you mean, I’m distracting you? I am the only thing keeping this project on track!”
How to Deal
If you absolutely must take on this client, for whatever reason, resign yourself to the fact that you will not be steering at any point. You will have to detach yourself from the work because you will have no control at all. You will merely be constructing, not designing, so just let go and let it happen. You may want to exclude this project from your portfolio.
The Dream Client

Image by Piotr Lewandowski.
This client, widely dismissed as a myth, does in fact exist and understands the full scope and artistry of your work. They value your role and creative contributions and want you in the driver’s seat as soon as the project gets underway. They are timely with responses and payments… payments that they did not “negotiate” but rather accepted for what they are. They reflect on your suggestions and have confidence in your capabilities.
Identifying Characteristics
- Is enthusiastic about the project and your involvement in it.
- Communication shows awareness of and respect for your role.
- Makes such statements as:
- “Here’s the brief we prepared. The rest is pretty much up to you.”
- “We like what we’ve seen and trust you’ll do great things for us.”
How to Deal
Don’t brag! Just enjoy the ride and hold on to them for as long as you possibly can!
Wrap-up
Being able to identify the type of client you are dealing with will prepare you for the job ahead. It will also help you decide whether to accept the job in the first place. Your contract will reflect the power dynamics of the project, so the more you know about the client, the better able you will be to adjust the contract as necessary. Have you come across other types of clients in your freelancing career? Please let us know in the comments.
Further Resources
Because contracts are such an important tool, here are some resources to help you draft them.
(al)
© Robert Bowen for Smashing Magazine, 2009. |
Permalink |
11 comments |
Add to del.icio.us | Digg this | Stumble on StumbleUpon! | Tweet it! | Submit to Reddit | Forum Smashing Magazine
Post tags: clients, freelancing
Tags: clients, freelancing, How-To
Posted by Rick Strahl on Oct 15, 2009 in
Dotnet |
View Original Article
I’ve been using a small hack to deal with the ASP.NET naming container morass that is so prevalent in client side development with ASP.NET. Particularly in Master Pages all server control IDs are basically munged because the master page place holders are naming containers.
To recap – the problem is that if you are dealing with something as simple as this:
<div class="contentcontainer" runat="server" id="PageContent">
<h2>Stock Quote Lookup</h2>
<div class="labelheader" style="margin-top: 20px;">Enter a stock symbol:</div>
<asp:TextBox runat="server" ID="txtSymbol" />
<input type="button" id="btnGetQuote" value="Go" />
<div id="divStockWrapper">
<div id="divStockDetail">
</div>
<img id="imgStockChart" />
</div>
</div>
inside of master page or even a container or user control you end up generating HTML output that looks something like this:
<div class="contentcontainer" id="ctl00_MainContent_PageContent">
<h2>Stock Quote Lookup</h2>
<div style="margin-top: 20px;" class="labelheader">Enter a stock symbol:</div>
<input type="text" id="ctl00_MainContent_txtSymbol"
name="ctl00$MainContent$txtSymbol" />
<input type="button" value="Go" id="btnGetQuote"/>
<div id="divStockWrapper">
<div id="divStockDetail">
</div>
<img id="imgStockChart"/>
</div>
</div>
Notice the ctl00_MainContent prefixes that are added to the server controls that point to the master page and content container respectively. You get those nice and un-friendly ASP.NET naming container generated ids that are a bitch to use in client side code. You don’t want to use these generated names directly because they can easily change if you rename any of the IDs down the chain – if you change the content placeholder’s id so will the id and your script code might break because of it. Not a good idea to use those ids directly.
Now if you want to access this client code you have to jump through a few hoops. A few common ways to access these values with jQuery look like this:
$("#<%= txtSymbol.ClientID %>")
or slightly better more generic approach that stores all client IDs in an object globally:
var ids = {
txtSymbol: "#<%= txtSymbol.ClientID %>",
PageContent: "#<%= PageContainer.ClientID %>"
}
// to use it any where in code:
$("#" + ids.txtSymbol)
The latter also partially gets around the main problem with ClientIDs in that they only work in ASPX pages not external .js files. The latter approach lets you declare only the id definitions in the main page, but the IDs can be globally accessed even in a .js file.
I also posted about a ScriptVariables component that can automate this object creation on the server as part of a component (ScriptVariables component and updated code) so you don’t have to manually map all of the client ids – the component can do it automatically (as well as a few other things like passing any values into JavaScript explicitly with proper formatting ).
All of these workarounds are pretty ugly though.
A better Solution
A solution I’ve been using a lot lately is by taking advantage of jQuery itself. We can search for Ids directly from JavaScript since there’s a pretty simple pattern to clientID – at least when dealing with non-repeating values.
Remember a typical client ID that isn’t in a list control of some sort looks something like this:
ctl00_MainContent_txtSymbol
which is actually fairly easy to find with jQuery:
alert( $("[id$=_txtSymbol]").attr("id"));
You can use that directly in your JS code from anywhere that works for most situations, but while it’s not exactly complicated you still have to remember what the format of these controls looks like and how to do an attribute search. It also doesn’t deal with the case where a control might just exist on a page without a master/naming container. How many times have you created a client code page that started out as standalone page and then you later added a Master Page only to find out most of your script code is broken due to the invalid IDs? I know I have.
Knowing the above though it’s easy enough to create a small routine that returns us a jQuery object based on only the id:
function $$(id, context) {
var el = $("#" + id, context);
if (el.length < 1)
el = $("[id$=_" + id + "]", context);
return el;
}
This code uses jQuery to first do a plain ID search and the behavior of the function is the same as the native jQuery constructor except for the specific selector implementation that only finds IDs. Just as with jQuery you can pass in a relative selector context ( a jQuery object or DOM Element) that limits the search to children of that elements’ level in the DOM hierarchy.
If the function finds a direct match on the ID that’s returned. If not it checks to see if a context was passed. A context is the container context and if passed the search here is limited to that specific container and its immediate children. This is meant to make it easier to isolate naming containers in case there is a possibility of overlapping names so you can drill into a specific user control for example.
So in simple usage to select my ctl00_MainContent_txtSymbol value both of the following work:
alert( $$("txtSymbol").attr("id") );
Or if I want to be specific about the container:
alert( $$("txtSymbol",$("#wrapper")).attr("id") );
This is a low impact approach to dealing with client ids that is easy to type and understand. Obviously you can name this function anything you chose – the $$ just seemed like a good choice to me that doesn’t conflict with anything that jQuery isn’t already conflicting with :-}. I suppose it would also be possible to create a special selector operator in jQuery for this, but I think I actually like the single function implementation better even though it lives outside of jQuery.
Please realize that this won’t address all scenarios where naming container variables might be involved. Specifically this function only deals with the simple ASP.NET variable case – it doesn’t deal with list controls that output sequentially numbered ids, but then that’s not really been an issue for me. I don’t think one often searches for list items by ID directly – they are usually accessed by event behavior or iteration – rarely directly by ID.
Single controls however - I constantly access to get or set values on and manipulate items. While I get more and more away from using server controls at all there are still plenty of times when naming container naming ends up in markup and this makes using these controls a no-brainer.
Hope some of you find this simple solution useful.
© Rick Strahl, West Wind Technologies, 2005-2009

Tags: jquery