Spatacoli
A little over a year ago I wrote a book: Microsoft SharePoint 2010 Enterprise Applications on Windows Phone 7. Packt Publishing has since taken three of the chapters from this book and added them to a compendium: Microsoft SharePoint 2010 Developer’s Compendium: The Best of Packt for Extending SharePoint. And for a limited time you can purchase this book at a discount during Packt Microsoft Carnival.
See the site for more details, and let me know via Twitter (@Spatacoli) if you want some help updating any of my examples for Windows Phone 7.5 since my book was written for Windows Phone 7.0 a lot has changed.
Also, I would like to write another book and give some talks. If anyone has suggestions or think this is a good idea, please let me know!
Thanks for your support.
Posted: 10 May 2012 by Todd Anthony Spatafore
I am writing this from Windows 8. I have been running the developer preview since last September, but just last week upgraded all of my machines to the Consumer Preview. So far it is an interesting transition from Windows 7. Windows 8 was built around the idea of touch first, and using the OS really reminds you of this fact. Many commenters in the Internet have looked down on this fact and dismissed the entire experience as either too childlike or too much of a change. One even went so far as to claim he will switch to Ubuntu Linux because Windows 8 isn’t enough like Windows 7.
Now you may notice that I’m not giving any link love to these people and this is intentional. Think about this: Windows 8 is so drastically different from Windows 7 that someone is going to switch to Ubuntu Linux? Ubuntu Linux is the same OS that was widely criticized last year when it switched the default desktop interface from a pure Gnome desktop to the Unity desktop. But I digress.
Windows 8 is designed for touch based systems. However, not every touch based system is the same. Comparing the experience of using Windows 8 on the Samsung //build/ slate that was given to attendees at the //build/ conference last September and using Windows 8 on an HP TouchSmart All-in-one computer shows exactly what is meant by this. You see many of the OS interactions occur by swiping a finger onto the screen from off the screen. That first pixel around the entire edge of the screen is dedicated to OS functions. However, on the TouchSmart monitor, and many touch screens that I’ve seen, there is a bezel around the screen that extends out from the actual screen. This makes it really hard to get your finger into that little crevice to initiate the swipe. However on the Samsung slate there is no bezel and the swipe is easy and natural.
Many people hate the idea of touching their monitor though and find the experience will get annoying. I can see that point of view, but I am not one of those people. After an all day coding exercise with the //build/ slate I went back to my ThinkPad laptop and found myself trying to touch the monitor far more often than I should. This doesn’t seem to happen when I am working on my desktop computer though. It must be the relative distance you are from the screen. When you are on a tablet/slate touch is natural. When you are on a laptop touch is starting to be less necessary, but still feels natural. A desktop computer with a monitor touch would be nice for some features, but not required. Finally, think about a 10 foot experience. The first thought that comes to my mind there is Kinect. I think this is also the answer to those that don’t want to touch their desktop monitor. Flicking a hand across the air to switch between applications seems like a very natural response.
Here’s the trick
Using Windows 8 with a mouse and keyboard isn’t as difficult as many people would have you believe. Since you don’t have a touch screen forget about swiping in from the bottom/top for application level menus just use a right click on the mouse. Also, forget about swiping in from the right to bring up the charms, just move your mouse to the top right corner of the screen in desktop mode and top right or bottom right in metro mode. If you want to switch applications move your mouse to the top left and you will see some white rectangular outlines appear along the left edge of the screen. Move your mouse down to open up a bar that shows what metro apps are running. This will include the desktop. You can also get this list by moving your mouse to the bottom left corner of the screen. Left clicking at the bottom left corner will also bring up the Start screen. Right clicking in the bottom left corner will bring up a power user menu of common admin apps that may be needed on the fly.
It isn’t hard to use the new Windows interface with a mouse and keyboard. You just have to understand that it works with the mouse by moving the pointer to the corners of the screen.
There are a host of keyboard shortcuts too, but we’ll leave those for another time. Except to say that the Windows Key on your keyboard is used for a lot more than just opening up the Start screen.
I miss being able to move the pointer to the left side of the screen and dragging out the last application like I could with the developer preview, but I think that this new way will work better in the long run.
I hope that everyone out there will go into this new operating system with an open mind, but we all know that won’t happen. I dread the day when I go to an employer provided Windows 8 machine and it boots to the desktop and has the old Windows 2000 Start Menu on it. I’ve seen that with Windows 7 and it didn’t feel natural, and it would feel even worse with Windows 8.
Posted: 06 March 2012 by Todd Anthony Spatafore
I’ve been searching everywhere on the Internet for this information but I couldn’t find it anywhere. I even went to Central Computers hoping they’d have the answer. I got the truly unhelpful, “crack it open and look” answer.
So I did.
The Asus Eee PC 1001P has a standard 5400RPM 150GB 2.5” hard drive in its belly.
Also, you can max out the memory at 2GB with PC-5400 DDR2-800 memory.
I hope this helps someone out there.
Posted: 18 August 2011 by Todd Anthony Spatafore
Come meet other programmers and talk about our craft. Starting August 6th at 11AM we will meet at Peet’s in downtown Los Altos and will try to meet every week at about the same time. This is an open discussion so all disciplines are welcome. If you have any questions please let me know on Twitter (
@Spatacoli). RSVP here:
http://www.nerddinner.com/4900Posted: 27 July 2011 by Todd Anthony Spatafore
This blog has had the comments removed. According to some people I know that means this is no longer a blog. I don’t care. There were too many spam comments and I didn’t have the time to clean them up, and I don’t have the time to fix the comment system. I’ll re-enable comments when I finally get my new site up and running. Until then if you want to comment about a post please Tweet it and include me in the tweet. I am @Spatacoli. Thanks.
Posted: 04 December 2010 by Todd Anthony Spatafore
“All developers should have an SSD.” Have you heard someone say that before? I hear it about once a week. I hear the great amazing things about Solid State Drives (SSD – there’s no moving parts so the “drive” part of it is historical or maybe I’m wrong and it stands for “device” now). I finally fell prey to the ribbing about still using spinning rust in my laptop.
After doing some research I eschewed the advice of experts and went with the OCZ Vertex 2 128GB SSD. I’m still getting a Windows Experience Index Rating of 7.7 which is a marked improvement over the 5.9 I was getting on my old 7200RPM drive. Some peers have gotten 7.9 out of a Crucial Real SSD. But it took a lot of work to actually get the 7.7 rating. I had to make changes to the Group Policy and the registry. I had to manually tell certain services they weren’t needed anymore, and I really had to coax Windows to even install. This is all different from the experience that other peers have had with installing SSD.
With my old 7200 RPM rust drive I could install Windows metal to gold in about 20 minutes. Some people I know have been able to install from metal to gold in 10 minutes with an SSD, but me? No, try 3 hours. 2 hours of that the install was sitting at 47% complete. Yes I have the latest firmware on both the drive and the machine. Yes, my machine will support it. Yes memory is good in my laptop. Etc. It just too forever for it to work.
Now that it’s installed and running am I fascinated with the speed improvement? No. It’s okay. It’s noticeably faster, but it’s not “Oh my God why have I lived so long without it.” What I am impressed with is my battery life though. I am easily getting double the battery life on my laptop than I had before. I can actually leave my laptop in Maximum Performance while commuting and I’ll still have over half the charge left when I get home.
I wish I could have the 256GB drive, but even for the battery improvement and speed improvement I couldn’t justify the cost. For about $220 I’m happy with what I got here.
If you are looking to upgrade your laptop to give it a little longer life I’d highly recommend getting an SSD, but it isn’t as life changing as some other developers out there would have you believe.
Posted: 04 December 2010 by Todd Anthony Spatafore
The Twitter Chirp conference just ended. If any of you have been following it online you may have heard the news that they’ve detailed @Anywhere, provided a glimpse of their business model, and announced personal streams that will be available soon.
I’m writing this to talk about some of the behind the scenes stuff that you couldn’t get from Justin.TV. Although this was a developer conference, it seemed there was really only two types of people I met there: business development people trying to sell me something, or little kids that are looking for jobs.
Business development people came in really two buckets, and from all the conversations I had at Chirp it seems that these are the applications that a lot of people are currently working on. 1) CRM 2) Analytics. Granted these were two of the fields that the VC’s were most interested in expanding out, I was a little disappointed in the creativity from this group of people. The CRM ranged from companies like CoTweet who are really the 800lb Guerrilla when it comes to Twitter CRM. They’ve managed to figure out how to leverage workflow into a corporate twitter environment. The other end of the CRM spectrum was just the people that promised to store all tweets with your company name in it. They then provide some value add by utilizing a proprietary search engine developed by some number (usually 1-3) of PhD’s.
The kids looking for a job ranged from the jerks:
REDHEADED BASTARD: Have you built a Twitter client I’ve heard of?
ME: No, but you’ve heard of the clients I have built Twitter apps for.
REDHEADED BASTARD: goodbye.
To the kids trying to make a name for themselves:
GREG: I write games based on where you are, kind of like a photo scavenger hunt.
The content was really good, except that the Twitter employees that really knew what they were talking about were surrounded by all the actual developers that went to the conference, but asking dumb questions like "Why only 140chars?" Leaving me to talk to the staffing coordinators and recruiters who really didn’t want to talk to anyone except other Twitter employees.
The @Anywhere stuff is mindless to implement. It has three main areas:
- Twitter Connect – like Facebook Connect only for Twitter
- Hovercards – Annoying cards that flip up with contact information when you hover on something like this: @spatacoli
- Tweet Box – Place a box on your web page so people can tweet directly from your site without having to leave the current thought flow.
You’ll see some of this implemented on this site soon. I’m currently rewriting all of it. Check out the docs and you’ll be up and ready in about 5 minutes
The business model has two pillars: corporate accounts (think competition to CoTweets) and paid tweets. Companies write up a tidy 140 and post it, then select that tweet as the ad that we want to serve up. Then Twitter has a magic formula that they are calling resonance to determine how and when they show that Tweet at the top of a stream. At first it’ll only appear in search results, later they’ll add it to the streams that things like Seesmic and TweetDeck use to display their feed. The developers have the option to use the ad stream or not, but there was no discussion about the penalties of not using the ad streams. If you use the ad stream the application developer gets 50% of the ad revenue. So that’s pretty cool.
What’s the one thing that really got me excited?
Personal streams will be the future, but they only gave us access to that during the conference. I hope we’ll see it out soon. The talk around this was inspiring. Instead of thinking about the "Real Time Web" or Web 2.0, think about the "Right Time Web". That means information for you at the right time at the right place. I could tweet right now that I bought a new camera that I really like, but at the moment you read my tweet, you are at work and don’t care. However, three days later you are at Best Buy looking for a new camera. That would be the right time and place for that information. Figuring out how to surface that information at that time and place is where true innovation will take place in the next 2 years.
Posted: 16 April 2010 by Todd Anthony Spatafore
With the recent release of Silverlight 3 we also got a new version of Expression Blend. This new version, Expression Blend 3, includes an exciting new feature called “SketchFlow.”
Introduction
There are three main aspects involved in SketchFlow: Sketch Styles, SketchFlow Map, and the SketchFlow Project. In this blog entry I’ll look at each of these aspects and how they can help us build a prototype of an application. First, however, let’s look at a brief overview of when this is useful.
When starting a new project one of the first processes is to figure out what data the project will present to the user, and how this information should be laid out. This is usually the work of an Information Architect or a User Experience expert. When the IA or UX finishes their discovery process usually what comes out is a PDF document with annotated wireframes. These go to the designers and the designers put a pretty face on it and produces Photoshop files (PSD’s) that the Interactive Designers/Interactive Developers need to translate into a fully functional web site/web application/Rich Client Application/Rich Interactive Application. Sometimes you will be lucky enough to work with an IA/UX professional that will write up very detailed functional specifications, but in most cases an annotated comp is all you get. In extreme cases you’ll only get wireframes, site map, and the designer’s PSDs, but that’s a whole another headache waiting to happen.
I digress, this black hole of information that isn’t gathered in most cases and only written in plain English in the best of cases really needs to be improved. This is the “need” that SketchFlow solves.
Imagine if the IA/UX person could easily prototype the application in such a way that not only would the stakeholders be able to “play” with it, but the stakeholders could also make comments on it from the comfort of their own browser and send those comments back. Oh, and then add in the ability to export it all into a basic set of functional specs complete with screen shots. That is what SketchFlow provides.
I know what you are thinking because I’ve been there before. If the stakeholder sees something that is too functional they’ll think it’s finished. A statement like, “Great, so when can we go live” comes to mind. Well, SketchFlow comes with a resource files that contains styles called Sketch Styles.
Sketch Styles
Sketch Styles attempts to solve the “blue button” problem that can stop progress in a demo meeting with stakeholders. The “Blue Button” problem is the one where the wireframes look too polished and a stakeholder asks if you could make the button blue, or ask why the site doesn’t use the corporate color standards. Instead you can show the client something that looks like the image above.
This is an image of a hypothetical prototype application. It’s hypothetical for this blog, but I’ve done this for other apps and it works pretty well. However, the really cool thing here is that although this looks like a crude drawing (except for that stick figure next to a graph as that truly is a crude drawing) it is 100% functional. On the left there is a real list box, and contained within that real list box are real buttons. Those real buttons are hooked up to logic that actually changes the page when viewing this prototype in a web browser. It is only the style that makes the list box and the buttons look like a crude drawing. This crude drawing style is there in an attempt to get the stakeholders to look beyond the surface and think about what the application actually does.
SketchFlow Map
As I said earlier the buttons on this prototype actually navigate to the “Home,” “About,” and “Tickets” pages. I managed to quickly setup these pages using the “SketchFlow Map” feature in SketchFlow. This is seen in the image to the left here.
The map always begins with the first page. From there you can create as many connected screens as you’d like. This map is a great replacement for a “Site Map” because this map actually represents actual pages in the prototype. You can color code the pages, create connected components, and arrange the pages in the map any way you’d like. This information is also presented in the SketchFlow Project that we’ll look at in a minute. One more place that this information appears is in the export to Word doc. Again, this makes it a handy starting point for the functional specifications.
SketchFlow Project
Once you’ve mocked out the entire application you can export the prototype to a SketchFlow Project. Then just host the project on a web site that the stakeholders can see and you have a platform for very rich interaction between clients and developers. I won’t discuss all the features of the SketchFlow Project, but it is a very handy tool to let the stakeholders see the progress of their application as it is still in the ideation stage.
The stakeholders can make comments, highlight sections of the prototype, and draw all over it. However, to get that feedback back to the IA/UX teams is a rather cumbersome process that itself is more of a proof of concept than a fully baked product. After the stakeholder marks up the prototype, they can save those comments out to a XAML file and then E-mail that XAML file back to the IA/UX team. Then the IA/UX teams have to import that information into their SketchFlow prototype. To make this just slightly more complicated, that import action is hidden be default. You have to enable a “Feedback” pane by an option in the “Window” menu. Then you can load in the feedback. Granted that feedback pane can contain a whole history of feedbacks, but it just seems lightly less thought out than the rest of the product. This is only a Version 1 product (the SketchFlow part, Blend is actually a great solid Version 3 product) and as such I’m sure this process will be better thought out in the next version of the product.
So Where Does that Leave Us?
This has been just a real quick overview of the main features of SketchFlow. I haven’t even mentioned how you can create a temporary dataset for use in the prototype among lots of other little features. There are two (2) main issues that I have with this whole prototyping idea.
The first issue I have with this whole workflow is that regardless of how many times you tell someone that what they are looking at is a prototype and they shouldn’t look at it for style or color, but for functionality they will immediately ask you to change the font. I can hear it now, “That title has to be in Segoe, and where is our logo and the consistent user experience?” On the other end of that spectrum are the customers that like the look of the sketch style and approve it to be in their application. Give it about a year and I’m sure I’ll be running across live applications that are using that sketch style.
The second issue I have with this workflow is that far too few companies are willing to expend any amount of energy on a prototype that is throwaway code. What this means is that after the prototype is finished the powers that be will demand that the prototype code is used for the basis of the real application. I mean, it’s just a sketch style, can’t you just change the style to Contoso Corporation Style and it’s finished? If all you are looking at is the look and feel of the application you’d be 100% correct. However, there’s a reason that the instructions to “Convert into a production project” are 6 or 7 printed pages. It’s really not recommended!
The prototype was built for speed of delivery, not for security, upgradability, or maintainability. The code behind the prototype that is delivered isn’t using any best practice of software architecture or a development pattern of any discernable type. The code in this prototype is throw away. Just think of it this way, would you have your software developers write the site copy? No. In that same way you shouldn’t let your IA/UX people write any final production code. They used SketchFlow to get an idea born and to play with it. The useful parts of the prototype are the ideas that come out of it. The functional specifications are still the final delivery of IA/UX, it’s just that in this case instead of flat 2D wireframes, the developers and designers actually have a prototype to play with as they are doing their job.
Far too many people trivialize the role of the developer. It is important that people understand that a developer is not just a glorified typist. Clearly you hired experts in usability and information architecture to do the IA/UX work, and you hired experts in design to do the design work. Let the experts you hired to write code, write code. Don’t trivialize their abilities by forcing them to try to repurpose prototype code for a final product.
Posted: 13 September 2009 by Todd Anthony Spatafore
There’s a cool new feature that I stumbled across today in Outlook 2010. I was writing a reply to an E-mail in a Microsoft Internal Discussion List. One of the people on the To line has an out of office setup so this appeared at the top:
That’s pretty cool. Rather than send the E-mail, wait for the auto-reply to come in, Outlook 2010 will just let me know right up front that this person is out of the office! I know there are a lot of other great features in the new version of Office, but it’s the little details like this that will make it a killer upgrade.
In other news, I have recently pushed live a new version of the Office 2007 Real Life Tools web site. There’s 9 demo videos showing real life ways of using Office 2007 at home or in a home office. Find the version of the site for you here:
US English:
http://www.microsoft.com/office/2007-rlt/en-US/Office
Canadian English:
http://www.microsoft.com/office/2007-rlt/en-CA/Office
Canadian French:
http://www.microsoft.com/office/2007-rlt/fr-CA/Office
UK English:
http://www.microsoft.com/office/2007-rlt/en-GB/Office
Australian English:
http://www.microsoft.com/office/2007-rlt/en-AU/Office
France French:
http://www.microsoft.com/office/2007-rlt/fr-FR/Office
I have four more locales coming in August. So check out Office 2007 for now, but do Office 2010 when it’s released sometime next year.
Posted: 25 July 2009 by Todd Anthony Spatafore
I’m in the middle of a fairly large scale code review and I wanted to stop and alert everyone to a common mistake I am seeing in a lot of code that I read. You should use the Click event in about 99.99% of the cases that most people are using the MouseLeftButtonDown event. The reason for this is that if you have no mouse, there is no left button, and if there is no left mouse button it cannot go down.
Imagine if I am a keyboard only user, I would tend to Tab my way though a web page to find the button or link I want to activate. I would then press either the Space Bar or the Enter key to activate it. In POSH any Hyperlink would fire using either of these methods. In Silverlight either of these two methods will activate the Click event, but it will not substitute in for a MouseLeftButtonDown event.
I think this stems from Silverlight 1 where the only way to detect a click was to listen for the MouseLeftButtonDown event, but those days are long behind us.
If your intention is to actually capture an actual mouse event, then use MouseLeftButtonDown. However, if your intention is to capture a Click, use the Click event.
Posted: 25 February 2009 by Todd Anthony Spatafore