Archive for the ‘Products’ Category

Playing around with Photosynth

Monday, April 27th, 2009

I recently started playing around with Panoramic photography by stitching a series of photos together.

I’ve been pretty pleased with the results so far.  I’ve mostly been using the stitching features of Windows Live Photo Gallery.  It’s been the easiest to use with the best results so far.  I still need to do a more scientific test of other applications.

Here’s the result of one such set of photos:

health
on Flickr” href=”http://www.flickr.com/photos/futileboy/3448784979/”>Lake Chelan Panoramic final

I took the source photos for this image and decided to give it a try in Microsoft’s Photosynth.  I did an earlier test when the service first became available, prescription but I didn’t have a good enough source set of photos to try it out with.

This set actually came out to be a full 100% Synthy.  Which is their term for how well all the photos work together in to one scene.

You can play around with the results here:

I had more photos of the scene then I used for the single panoramic, so I fed them all in to Photosynth since it seems to better with more.

Take a look and let me know what you think.

My only issue with it, is that this full 360 series of photos doesn’t seem to be recognized as such. So you can’t just spin around and around.

3rd party twitter apps

Wednesday, November 12th, 2008


Multitouch Space Invaders! from multitouch-barcelona on Vimeo.

From Guten Touch! An Interactive Art Installation designed for Red Bull Music Academy

Multitouch Space Invaders! from multitouch-barcelona on Vimeo.

From Guten Touch! An Interactive Art Installation designed for Red Bull Music Academy

Multitouch Space Invaders! from multitouch-barcelona on Vimeo.

From Guten Touch! An Interactive Art Installation designed for Red Bull Music Academy
this site on Flickr”>3rd party twitter apps

I started putting together a collage of desktop applications, diagnosis websites, tools and mobile applications that use twitter. This is my first draft. Mostly the logos have been sourced from here http://twitter.pbwiki.com/Apps. I was actually surprised how many applications and services I found that work with Twitter. This image by no means contains all of the ones I found either. Many didn’t seem to have a logo so I left them off.

If I missed you, send me your logo and URL.

Link to 3rd party twitter apps on Flickr

Simple CSS based wireframe annotation

Wednesday, October 22nd, 2008

A while back I created a simple CSS based solution to annotate wireframes for one of my clients.  This created a simple web based view of the wireframes.   I created the wireframes in OmniGraffle.  As a side note, tadalafil I love OmniGraffle.  It’s one of my most favorite applications.  The Omni Group makes amazing software in general.  If I didn’t have to use a Windows PC for work, website I would be using their software all the time.  It makes me sad that there isn’t a version for Windows.   My favorite part of this solution is that is works on screen and in print.  By creating a print version of the CSS it’s a simple process to print out a non interactive version of the wireframes if you need a hard copy.

image

The basic idea is to have a simple wireframe image loaded up with an image map to handle navigation. The image map part in this example was created using OmniGraffle, look but you could use which ever tool you prefer.

   1: <map name="GraffleExport">
   2:     <area shape=rect coords="20,366,169,450" href="News.html">
   3:     <area shape=rect coords="16,232,138,246" href="Products_List.html">
   4:     <area shape=rect coords="25,196,158,210" href="Suppliers_Page.html">
   5:     <area shape=rect coords="137,155,162,169" href="Products_Search_Results.html">
   6:     <area shape=rect coords="181,366,453,450" href="News.html">
   7:     <area shape=rect coords="466,106,752,180" href="About_CP_-_Careers.html">
   8:     <area shape=rect coords="466,331,750,450" href="Customers.html">
   9:     <area shape=rect coords="466,189,750,321" href="Suppliers_Overview.html">
  10:     <area shape=rect coords="0,0,13,14" href="Stucture.html">
  11:     <area shape=rect coords="686,77,740,91" href="About_- Careers.html">
  12:     <area shape=rect coords="175,77,222,91" href="News.html">
  13:     <area shape=rect coords="121,77,181,91" href="Products.html">
  14:     <area shape=rect coords="62,77,127,91" href="Services_Solutions.html">
  15:     <area shape=rect coords="217,77,266,91" href="About.html">
  16:     <area shape=rect coords="29,17,256,59" href="Landing_Page.html">
  17:     <area shape=rect coords="643,77,693,91" href="Contact.html">
  18:     <area shape=rect coords="25,77,65,91" href="Landing_Page.html">
  19:     <area shape=rect coords="512,17,739,59" href="Login_Register_block.html">
  20: </map>

For the notation part the notes are contained in DIV tags at the bottom of the HTML document and then placed with CSS and use JavaScript for the moue over behavior below is an example of one note.

HTML of the note:

   1: <div class="noteblock">
   2:     <div class="note" id="note001" onmouseover="return escape(document.getElementById('note001text').innerHTML)">1</div>
   3:     <div class="notetext" id="note001text">
   4:         1. This is the login is / register box. The behavior is for it to dynamically swap out with login box if selected. <br/>
   5:         <img src="loginNote.png"/>
   6:     </div>
   7: </div>

The CSS used handle to layout and display:

   1: .note {
   2:     font-family: tahoma, Arial, Helvetica, sans-serif;
   3:     font-size: 9px;
   4:     font-weight: bold;
   5:     background-color: #FFFF99;
   6:     border: 1px solid #FFCC33;
   7:     color: #996600;
   8:     width: 16px;
   9:     height: 16px;
  10:     text-align: center;
  11:     visibility: visible;
  12: }
  13:  
  14: .notetext { visibility: hidden; }
  15:  
  16: #note001 {
  17:     position: absolute;
  18:     left: 493px;
  19:     top: 20px;    
  20: }
  21:  

 

The for the to get the note to appear next to the cursor I use wz_tooltip.js.  To handle the hide and reveal the notation layer I put together the following javascript:

   1: function getAllRules()
   2: {
   3:     if (document.styleSheets)
   4:     {
   5:         var theRules = new Array();
   6:         if (document.styleSheets[1].cssRules)
   7:             theRules = document.styleSheets[1].cssRules
   8:         else if (document.styleSheets[1].rules)
   9:             theRules = document.styleSheets[1].rules
  10:         else
  11:             return "Your browser doesn't support rules[] or cssRules[]";
  12:  
  13:         var returnstring = '';
  14:         for (var i=0;i<theRules.length;i++)
  15:         {
  16:             returnstring += i + ' = ' + theRules[i].selectorText + '<br>';
  17:         }
  18:         return returnstring;
  19:     }
  20:     else
  21:         return "Your browser doesn't support document.styleSheets";
  22: }
  23:  
  24:  
  25: function hideIt()
  26: {
  27:     
  28:     if (!document.styleSheets) return;
  29:     var theRules = new Array();
  30:     if (document.styleSheets[0].cssRules)
  31:         theRules = document.styleSheets[0].cssRules
  32:     else if (document.styleSheets[0].rules)
  33:         theRules = document.styleSheets[0].rules
  34:     else return;
  35:     theRules[0].style.visibility = 'hidden';
  36: }
  37:  
  38: function showIt()
  39: {    
  40:     if (!document.styleSheets) return;
  41:     var theRules = new Array();
  42:     if (document.styleSheets[0].cssRules)
  43:         theRules = document.styleSheets[0].cssRules
  44:     else if (document.styleSheets[0].rules)
  45:         theRules = document.styleSheets[0].rules
  46:     else return;
  47:     theRules[0].style.visibility = 'visible';
  48: }
  49:  

 

For the print CSS it’s loaded and defined with the CSS print media type

<link rel="stylesheet" type="text/css" href="print.css" media="print">

Here’s the print.css:

   1: .note {
   2:     font-family: tahoma, Arial, Helvetica, sans-serif;
   3:     font-size: 9px;
   4:     font-weight: bold;
   5:     background-color: #FFFF99;
   6:     border: 1px solid #FFCC33;
   7:     color: #996600;
   8:     width: 16px;
   9:     height: 16px;
  10:     text-align: center;
  11:     visibility: visible;
  12:     position: static;
  13: }
  14:  
  15: .notetext { 
  16:     font-size: 9px;
  17:     visibility: visible; 
  18: }
  19:  
  20: body { 
  21:     margin: 0px 0px 0px 0px;
  22:     padding: 0px 0px 0px 0px;
  23:     }
  24:  
  25: #top {
  26:     display: none;    
  27: }
  28: #top a {color: #999999;}
  29:  
  30: .noteblock {
  31:     margin: 26px;
  32:     padding-top: 12px;
  33:     border-top: 1px dotted #666;
  34: }

 

Here’s how it looks:

image

You can view the example of the wireframe notation.

I found this form to very helpful with several of my clients.  My favorite part is the ability to walk a client through the interaction and leave it behind since the notation is inline it helps answer most of the questions about interaction that are not represented by the wireframes.

What is Web 2.0

Friday, September 26th, 2008

Real world tagging with the iPhone using Tonchidot. Simply amazing!Real world tagging with the iPhone using Tonchidot. Simply amazing!Real world tagging with the iPhone using Tonchidot. Simply amazing!

I’m working a little preso to help explain what Web 2.0 is all about.

This is my first version, physiotherapy and I’m working updating it but I wanted to share my “beta” version.

sick Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;” href=”http://www.slideshare.net/futileboy/web-20-presentation-620419?type=powerpoint” title=”Web 2.0″>Web 2.0

View SlideShare presentation or Upload your own. (tags: 2.0 web)

SEO for Silverlight

Tuesday, June 24th, 2008

I’ve got a problem.  A problem with Outlook and Exchange.  You see I have two exchange accounts on two different servers.  This is problem that I thought was rare at first, information pills
but I’m finding more and more that folks who work in the consulting space are having this challenge when their clients are using MS Exchange. 

On my mac, tadalafil
this isn’t really a big problem because I Entourage actually supports multiple Exchange servers.

On the PC side though, Outlook wants nothing to do with my multiple Exchange servers accounts.

To set up support for two accounts I had to go in to the control panel and locate the mail icon.

image

Then from there users have to figure out the very abstract user interface of what to do next.

image

Nope not “E-mail Accounts”  I need to create a new Profile.

image

I’ve already created a new profile, but this is where you’d click Add.

Give it a name that explains the account to you

image

Then you have to fill out this for and will try to auto configure your account

image

These seems to work most of the time.

So now you have two profiles.  Here’s where it gets annoying.  These profiles have no awareness of each other.  So if you get a meeting request in one and accept it, it will only be visible in that accounts calendar.

Then when you switch profiles you have no way to take that information with you.

Here’s where I’m using Google Calendar Sync.

It’s not perfect, but it does help.

image 

Once set up it will sync my Google calendar with my Outlook calendar.  Then when I switch profiles from one Outlook session to the next.  Google’s Calendar Sync stays active.  It will then begin syncing the information from my current profile.  

Of course the big issue here is that I have to continue switching my outlook profiles back and forth during the day to make sure all the information is up to date.  It’s still possible to receive a meeting request for the same time in both accounts.  Accept in one switch profiles.  Then accept in the other before Google get’s the calendars synced and I can create a conflict.

What Exchange really need to do is offer this a service feed directly from the server so that I don’t have to go through Outlook to activate all.

Phew!  That’s a lot of work just to make sure I don’t double book myself.

Of course this all gets much worse once you start to open yourself to other scheduling services like evite and upcoming.

Sometimes I have to remind myself that computers are supposed to make life easier not harder.

I’ve got a problem.  A problem with Outlook and Exchange.  You see I have two exchange accounts on two different servers.  This is problem that I thought was rare at first, information pills
but I’m finding more and more that folks who work in the consulting space are having this challenge when their clients are using MS Exchange. 

On my mac, tadalafil
this isn’t really a big problem because I Entourage actually supports multiple Exchange servers.

On the PC side though, Outlook wants nothing to do with my multiple Exchange servers accounts.

To set up support for two accounts I had to go in to the control panel and locate the mail icon.

image

Then from there users have to figure out the very abstract user interface of what to do next.

image

Nope not “E-mail Accounts”  I need to create a new Profile.

image

I’ve already created a new profile, but this is where you’d click Add.

Give it a name that explains the account to you

image

Then you have to fill out this for and will try to auto configure your account

image

These seems to work most of the time.

So now you have two profiles.  Here’s where it gets annoying.  These profiles have no awareness of each other.  So if you get a meeting request in one and accept it, it will only be visible in that accounts calendar.

Then when you switch profiles you have no way to take that information with you.

Here’s where I’m using Google Calendar Sync.

It’s not perfect, but it does help.

image 

Once set up it will sync my Google calendar with my Outlook calendar.  Then when I switch profiles from one Outlook session to the next.  Google’s Calendar Sync stays active.  It will then begin syncing the information from my current profile.  

Of course the big issue here is that I have to continue switching my outlook profiles back and forth during the day to make sure all the information is up to date.  It’s still possible to receive a meeting request for the same time in both accounts.  Accept in one switch profiles.  Then accept in the other before Google get’s the calendars synced and I can create a conflict.

What Exchange really need to do is offer this a service feed directly from the server so that I don’t have to go through Outlook to activate all.

Phew!  That’s a lot of work just to make sure I don’t double book myself.

Of course this all gets much worse once you start to open yourself to other scheduling services like evite and upcoming.

Sometimes I have to remind myself that computers are supposed to make life easier not harder.

I’ve got a problem.  A problem with Outlook and Exchange.  You see I have two exchange accounts on two different servers.  This is problem that I thought was rare at first, information pills
but I’m finding more and more that folks who work in the consulting space are having this challenge when their clients are using MS Exchange. 

On my mac, tadalafil
this isn’t really a big problem because I Entourage actually supports multiple Exchange servers.

On the PC side though, Outlook wants nothing to do with my multiple Exchange servers accounts.

To set up support for two accounts I had to go in to the control panel and locate the mail icon.

image

Then from there users have to figure out the very abstract user interface of what to do next.

image

Nope not “E-mail Accounts”  I need to create a new Profile.

image

I’ve already created a new profile, but this is where you’d click Add.

Give it a name that explains the account to you

image

Then you have to fill out this for and will try to auto configure your account

image

These seems to work most of the time.

So now you have two profiles.  Here’s where it gets annoying.  These profiles have no awareness of each other.  So if you get a meeting request in one and accept it, it will only be visible in that accounts calendar.

Then when you switch profiles you have no way to take that information with you.

Here’s where I’m using Google Calendar Sync.

It’s not perfect, but it does help.

image 

Once set up it will sync my Google calendar with my Outlook calendar.  Then when I switch profiles from one Outlook session to the next.  Google’s Calendar Sync stays active.  It will then begin syncing the information from my current profile.  

Of course the big issue here is that I have to continue switching my outlook profiles back and forth during the day to make sure all the information is up to date.  It’s still possible to receive a meeting request for the same time in both accounts.  Accept in one switch profiles.  Then accept in the other before Google get’s the calendars synced and I can create a conflict.

What Exchange really need to do is offer this a service feed directly from the server so that I don’t have to go through Outlook to activate all.

Phew!  That’s a lot of work just to make sure I don’t double book myself.

Of course this all gets much worse once you start to open yourself to other scheduling services like evite and upcoming.

Sometimes I have to remind myself that computers are supposed to make life easier not harder.

I’ve got a problem.  A problem with Outlook and Exchange.  You see I have two exchange accounts on two different servers.  This is problem that I thought was rare at first, information pills
but I’m finding more and more that folks who work in the consulting space are having this challenge when their clients are using MS Exchange. 

On my mac, tadalafil
this isn’t really a big problem because I Entourage actually supports multiple Exchange servers.

On the PC side though, Outlook wants nothing to do with my multiple Exchange servers accounts.

To set up support for two accounts I had to go in to the control panel and locate the mail icon.

image

Then from there users have to figure out the very abstract user interface of what to do next.

image

Nope not “E-mail Accounts”  I need to create a new Profile.

image

I’ve already created a new profile, but this is where you’d click Add.

Give it a name that explains the account to you

image

Then you have to fill out this for and will try to auto configure your account

image

These seems to work most of the time.

So now you have two profiles.  Here’s where it gets annoying.  These profiles have no awareness of each other.  So if you get a meeting request in one and accept it, it will only be visible in that accounts calendar.

Then when you switch profiles you have no way to take that information with you.

Here’s where I’m using Google Calendar Sync.

It’s not perfect, but it does help.

image 

Once set up it will sync my Google calendar with my Outlook calendar.  Then when I switch profiles from one Outlook session to the next.  Google’s Calendar Sync stays active.  It will then begin syncing the information from my current profile.  

Of course the big issue here is that I have to continue switching my outlook profiles back and forth during the day to make sure all the information is up to date.  It’s still possible to receive a meeting request for the same time in both accounts.  Accept in one switch profiles.  Then accept in the other before Google get’s the calendars synced and I can create a conflict.

What Exchange really need to do is offer this a service feed directly from the server so that I don’t have to go through Outlook to activate all.

Phew!  That’s a lot of work just to make sure I don’t double book myself.

Of course this all gets much worse once you start to open yourself to other scheduling services like evite and upcoming.

Sometimes I have to remind myself that computers are supposed to make life easier not harder.

There are more challenges when it comes to optimizing for search engines to consume your content if it is a dynamic Rich UI application that doesn’t rely on Ajax. While Google is able to pick up Flash SWF files during its crawl, gynecologist
this does not guarantee that the content is parsed correctly or given the same weight as any other file formats or a pure HTML/AJAX page. Worse, disorder
if the application uses a web service, page
how can it be guaranteed that all the pages are crawled and returned correctly?

In most cases you will need to make sure that the page hosting the application has some html text that describes the application and what it offers. So in essence treat the page in the same way you would HTML.

When possible expose the content of the application so that it too can be indexed.

Simple Silverlight application – XAML to XHTML with XSLT

For a Silverlight element that contains all of its content in the XAML the best method would be to transforms the XAML using XSLT into friendly XHTML. The goal is to contain the translated XAML into a <div> element that would be replaced by the Silverlight control. Search engines would find the XHTML while browsers with Silverlight installed would see the Silverlight app.

 

   1: <div id="SLHost">
   2:     <asp:Xml ID="XHTML" runat="server" DocumentSource="seo.xaml"
   3:   TransformSource="XAML2XHTML.xslt" EnableViewState="False"/>
   4:     <script type="text/JavaScript">
   5:         createSilverlight();
   6:     </script>
   7: </div>

Then use the following XAML2XHTML.xslt

   1: <?xml version="1.0" encoding="utf-8"?>
   2:  
   3: <xsl:stylesheet version="1.0"
   4:     xmlns:sl="http://schemas.microsoft.com/client/2007"
   5:     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   6:     exclude-result-prefixes="sl">
   7:  
   8:   <xsl:output omit-xml-declaration="yes" indent="yes"/>
   9:  
  10:   <xsl:template match="/">
  11:     <xsl:comment>This is the text that is in the Silverlight XAML:</xsl:comment>
  12:     <xsl:apply-templates select="*"/>
  13:   </xsl:template>
  14:  
  15:   <xsl:template match="sl:Canvas">
  16:     <div>
  17:       <xsl:apply-templates select="*"/>
  18:     </div>
  19:   </xsl:template>
  20:  
  21:   <xsl:template match="node()"/>
  22:  
  23:   <xsl:template match="sl:Image">
  24:     <div>
  25:       <img src="{@Source}"/>
  26:     </div>
  27:   </xsl:template>
  28:   <xsl:template match="sl:MediaElement">
  29:     <div class="Media">
  30:       <a href="{@Source}">Media</a>
  31:     </div>
  32:   </xsl:template>
  33:  
  34:   <xsl:template match="sl:TextBlock">
  35:     <div>
  36:       <xsl:value-of select="@Text"/>
  37:       <xsl:value-of select="text()"/>
  38:       <xsl:apply-templates select="*"/>
  39:     </div>
  40:   </xsl:template>
  41:   <xsl:template match="sl:LineBreak">
  42:     <br/>
  43:   </xsl:template>
  44:  
  45:   <xsl:template match="sl:Run">
  46:     <span>
  47:       <xsl:value-of select="@Text"/>
  48:       <xsl:value-of select="text()"/>
  49:     </span>
  50:   </xsl:template>
  51: </xsl:stylesheet>

 

Handling more advanced Silverlight applications

How do you design an application that could have dynamic content and robust interaction while at the same time enable a web crawler to understand and categorize the underlying content correctly? Unfortunately there is no simple answer or single correct answer. It depends highly on the application’s purpose. In some situations there will be no way to offer the content of the application up to spider outside of the application. In this case it’s best to have as much meta information on the page hosting the application as possible. By following the standard HTML methods in this document you can still extend the indexability of your application by making sure external links are properly formatted and that high ranking sites link to your application.

Detect and Serve

It requires a little more work up front from a development standpoint to go this route, but if you really have a strong need to get the content in your application indexed then this will be the best approach. The goal is to develop the code of the site to be delivered in multiple formats based on the user agent that is accessing the content. This isn’t all that uncommon anyway with the large range of browser and devices out there that are consuming the web already. Most applications are built with the data stored separately from the interaction in a database or local XML document. The site would have to be built so that it can serve up HTML pages for those who don’t have Flex/Flash/Silverlight installed. Plus, we could potentially change these pages for mobile devices like the iPhone that don’t yet support Flash or Silverlight.

It’s also recommend to have some enticement or value proposition to explain to real users why it would be beneficial to add the plug-ins required to get the optimal experience.

The goal would be to have clients that have the plug-in or runtime installed, would be provided the rich interaction. On those that don’t, a functional page in HTML will be provided. More importantly, to the search engines, these pages that are generated will be tagged and indexed correctly, making the content of our applications visible and increase their visibility.

Silverlight 2.0 Twitter Widget

Wednesday, April 16th, 2008

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

Mark Wieman

So when is it okay to borrow someone’s html code and design?  I think there are times when it’s okay to take a snippet here and bit from there.  Most likely they found it someplace else too.  I guess I could be better at citing the sources when I do this, hospital but sometimes I’m bad about it.  Sorry.  I would never take a fully functional design, javascript function, CSS library, or anything that was fully completed by someone else with out giving them credit.

Recently my friend Mark Wieman’s business site design and code was lifted as is and used for the Celebrities Against Autism site. This was done without notifying him or crediting him for his work.

Mark’s a freelance interactive producer.  He makes a living creating web sites and designing user experiences.  Because of this there is a monetary value associated with his work.  So to me, taking the design and not paying isn’t all that different from stealing from him.

imageSo he went ahead and contacted them and told them it wasn’t cool.  As a result they changed the background color and added a Creative Commons Licenses where Mark’s old copywrite information used to be. I didn’t grab a screen shot of the first rev of the site, but I did grab one after they updated it with the fancy yellow background.

Putting the CC license on the site really takes the cake though.  First they take his work and then they licensed it for anyone else to use as well.  Well, that is nice of them. 

I know non-profits don’t have much in the way of money, but there are plenty of free templates out there for them to have used.  What I really wonder is, if the person who is taking credit for the site made any money at all for their work.  Even as an employee of the non-profit, it just doesn’t seem right to me.

I’m on an RSS widget roll.  I put together a widget that is much like the Flickr widget only it uses Twitter as the source.  Now Twitter had to go and give me a hard time by recently changing their cross domain policy file to only allow specific sites. Because of this I had to add a proxy to this solution to get it to work. 

Let’s get to the code.  If you need an aspx proxy this should do the trick for you.

(more…)

Silverlight 2.0 Flickr WordPress Widget

Tuesday, April 8th, 2008

I had the challenge of creating both a simple Silverlight 2.0 flickr viewer and a WordPress widget that used silverlight so I combined the two projects in to one.

The first part was creating the Silverlight 2.0 Flickr RSS viewer.

   1: <UserControl
   2:     xmlns="http://schemas.microsoft.com/client/2007"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     x:Class="FlickrShow.Page"
   5:     Width="auto" 
   6:     Height="auto" 
   7:     x:Name="FlickrShow" 
   8:     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
   9:     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
  10:     mc:Ignorable="d">
  11:  
  12:     <Grid x:Name="LayoutRoot" Background="#FF424242" >
  13:         <Image HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="ImageItem" VerticalAlignment="Stretch" Stretch="Uniform" Cursor="Hand" Source="OpeningImage.jpg">
  14:             <Image.Resources>
  15:                 <Storyboard x:Name="FadeOutAnimation">
  16:                     <DoubleAnimation Duration="00:00:00.20" From="1" To="0"                        
  17:                                      Storyboard.TargetProperty="Opacity"                        
  18:                                      Storyboard.TargetName="BigImage" />
  19:                 </Storyboard>
  20:                 <Storyboard x:Name="FadeInAnimation">
  21:                     <DoubleAnimation Duration="00:00:00.20" From="0" To="1"                        
  22:                                      Storyboard.TargetProperty="Opacity"                        
  23:                                      Storyboard.TargetName="BigImage" />
  24:                 </Storyboard>
  25:             </Image.Resources>
  26:         </Image>
  27:         <TextBox Height="30" VerticalAlignment="Bottom" Text="" x:Name="LabelBox" Background="#2B000000" Foreground="#FFFFFFFF" BorderThickness="0,0,0,0" FontSize="11" />
  28:     </Grid>
  29: </UserControl>

page.xaml

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Windows;
   5: using System.Windows.Controls;
   6: using System.Windows.Documents;
   7: using System.Windows.Input;
   8: using System.Windows.Media;
   9: using System.Windows.Media.Animation;
  10: using System.Windows.Shapes;
  11: using System.Windows.Threading;
  12: using System.Windows.Browser;
  13: using System.Xml.Linq;
  14: using System.Windows.Media.Imaging;
  15: using System.Windows.Resources;
  16: using System.IO;
  17: using System.Net;
  18: using System.Xml;
  19: using System.ServiceModel.Syndication;
  20:  
  21:  
  22:  
  23: namespace FlickrShow
  24: {
  25:     public class SettingDefinition
  26:     {
  27:         public string userID { get; set; }
  28:         public string feedType  { get; set; }
  29:         public string tags  { get; set; }
  30:         public string duration { get; set; }
  31:     }
  32:  
  33:     public partial class Page : UserControl
  34:     {
  35:         string currentUserID;
  36:         string currentFeedType;
  37:         string currentTags;
  38:         int currentDuration;
  39:  
  40:         DateTime lastUpdate;
  41:         string currentLink;
  42:         String[,] imgArray = new String[20, 3]; //Array to store information pulled from the RSS
  43:         int i = 0;  //handy little index number to count with
  44:         int imageIndex = 0;  //another index used for displaying specific images
  45:         DispatcherTimer dt = new DispatcherTimer();
  46:         
  47:         public Page(string UserID, string FeedType, string Tags, int Duration)
  48:         {
  49:             InitializeComponent();
  50:  
  51:             currentUserID = UserID;
  52:             currentFeedType = GetFeedType(FeedType);
  53:             currentTags = Tags;
  54:             currentDuration = Duration;
  55:  
  56:             this.Loaded += new RoutedEventHandler(Page_Loaded);
  57:             HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://api.flickr.com/services/feeds/" + currentFeedType + currentUserID + currentTags + "&format=rss2"));
  58:  
  59:             request.BeginGetResponse(new AsyncCallback(getImages), request);
  60:  
  61:             lastUpdate = DateTime.Now;
  62:  
  63:             dt.Interval = new TimeSpan(0, 0, 0, currentDuration);
  64:             dt.Tick += new EventHandler(dt_Tick);
  65:             dt.Start();
  66:  
  67:         }
  68:  
  69:         void getImages(IAsyncResult asyncResult)
  70:         {
  71:             XNamespace mediaNamespace = "http://search.yahoo.com/mrss/";
  72:  
  73:  
  74:             HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
  75:             HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
  76:  
  77:             XmlReader reader = XmlReader.Create(response.GetResponseStream());
  78:             SyndicationFeed feed = SyndicationFeed.Load(reader);
  79:  
  80:             foreach (SyndicationItem item in feed.Items)
  81:             {
  82:                 //let's put the results in a multidimesional Array, because they are fun 
  83:                 imgArray.SetValue(item.ElementExtensions[1].GetReader().GetAttribute("url"), i, 0);
  84:                 imgArray.SetValue(item.Title.Text, i, 1);
  85:                 imgArray.SetValue("http://www.flickr.com" + item.Links[0].Uri.AbsolutePath, i, 2);
  86:                 i++;
  87:             }
  88:         }
  89:  
  90:         void Page_Loaded(object sender, RoutedEventArgs e)
  91:         {
  92:                       
  93:             ImageItem.MouseEnter += new MouseEventHandler(ImageItem_MouseEnter);
  94:             ImageItem.MouseLeave += new MouseEventHandler(ImageItem_MouseLeave);
  95:             ImageItem.MouseLeftButtonDown += new MouseButtonEventHandler(ImageItem_MouseButtonDown);
  96:  
  97:             
  98:         }
  99:  
 100:  
 101:  
 102:         void dt_Tick(object sender, EventArgs e)
 103:         {
 104:             //this is our timer control, every time we update this will run
 105:             Update();   
 106:         }
 107:  
 108:         void Update()
 109:         {
 110:             //Updating the time
 111:             DateTime now = DateTime.Now;
 112:             TimeSpan elapsed = now - lastUpdate;
 113:             lastUpdate = now;
 114:             //do your loop processing here
 115:             ChangeImage();
 116:             
 117:         }
 118:  
 119:         void ChangeImage()
 120:         {
 121:             //This is where we actually update the <image> XAML. 
 122:  
 123:             if (imageIndex <= (i - 1))
 124:             {
 125:                 LabelBox.Text = imgArray.GetValue(imageIndex, 1) as string;
 126:                 ImageItem.SetValue(Image.SourceProperty, imgArray.GetValue(imageIndex, 0) as string);
 127:                 currentLink = imgArray.GetValue(imageIndex, 2) as string;
 128:                 imageIndex++;
 129:             }
 130:             else
 131:             {
 132:                 imageIndex = 0;
 133:                 LabelBox.Text = imgArray.GetValue(imageIndex, 1) as string;
 134:                 ImageItem.SetValue(Image.SourceProperty, imgArray.GetValue(imageIndex, 0) as string);
 135:                 currentLink = imgArray.GetValue(imageIndex, 2) as string;
 136:                 imageIndex++;
 137:             }
 138:  
 139:         }
 140:  
 141:         public string GetFeedType(string feedSetting)
 142:         {
 143:             switch (feedSetting)
 144:                 {
 145:                 case "Public":
 146:                         return "photos_public.gne?id=";                        
 147:                 case "Friends":
 148:                     //This is for a future release
 149:                         return "photos_friends.gne?user_id=";
 150:                 default:
 151:                         return "photos_public.gne?id="; 
 152:                 }
 153:             
 154:         }
 155:  
 156:         public string FormatTags(string tagsElement)
 157:         {
 158:             if (tagsElement.Length > 0)
 159:             {
 160:                 return "&tags=" + tagsElement;
 161:             }
 162:             else { return ""; }
 163:         }
 164:  
 165:         private void ImageItem_MouseEnter(object sender, MouseEventArgs e)
 166:         {            
 167:                 dt.Stop();
 168:         }
 169:  
 170:         private void ImageItem_MouseLeave(object sender, MouseEventArgs e)
 171:         {
 172:             dt.Start();
 173:         }
 174:  
 175:         private void ImageItem_MouseButtonDown(object sender, MouseButtonEventArgs e)
 176:         {
 177:             HtmlPage.Window.Navigate(new Uri(currentLink, UriKind.Absolute), "_flickr");
 178:         }
 179:     }
 180: }

page.xaml.cs

   1: using System.Windows;
   2: using System;
   3:  
   4: namespace FlickrShow
   5: {
   6:     public partial class App : Application 
   7:     {
   8:  
   9:         public App() 
  10:         {
  11:             this.Startup += this.OnStartup;
  12:             this.Exit += this.OnExit;
  13:  
  14:             InitializeComponent();
  15:         }
  16:  
  17:         private void OnStartup(object sender, StartupEventArgs e) 
  18:         {
  19:             // Load the main control here
  20:             string currentUserID = e.InitParams["flickr_userID"];
  21:             string currentFeedType = "Public";
  22:             string currentTags = "";
  23:             int currentDuration = Convert.ToInt32(e.InitParams["time"]);
  24:  
  25:             this.RootVisual = new Page(currentUserID, currentFeedType, currentTags, currentDuration);
  26:         }
  27:  
  28:         private void OnExit(object sender, EventArgs e) 
  29:         {
  30:  
  31:         }
  32:     }
  33: }

App.xaml.cs

   1: <?php
   2: /*
   3: Plugin Name: Silverlight Flickr Widget
   4: Plugin URI: http://www.futile.com/
   5: Description: A widget which will display your latest Flickr photos using Silverlight.
   6: Author: Ryan T. Lane
   7: Version: 0.2
   8: Author URI: http://futile.com/
   9: 
  10: Installing
  11: 1. Make sure you have the Widget plugin available at http://automattic.com/code/widgets/
  12: 1. Copy wordpressWidgetSilverlightFlickr.php to your plugins folder, /wp-content/plugins/widgets/
  13: 2. Activate it through the plugin management screen.
  14: 3. Go to Themes->Sidebar Widgets and drag and drop the widget to wherever you want to show it.
  15: 
  16: Changelog
  17: 0.2 = First public release.
  18: */
  19:  
  20:  
  21: function WidgetFlickrSilverlight($args) {
  22:     extract($args);
  23:     
  24:     $options = get_option('WidgetFlickrSilverlight');
  25:     if( $options == false ) {
  26:         $options[ 'flickr_userID' ] = '21854617@N00';
  27:         $options[ 'time' ] = 4;
  28:     }
  29:     
  30:     $time = $options[ 'time' ];
  31:     $flickr_userID = $options[ 'flickr_userID' ];
  32:     
  33:     echo $before_widget;
  34:     
  35:     echo $before_title . 'Flickr' . $after_title; 
  36:     ?>
  37:                <script type="text/javascript">
  38:                     function onSilverlightError(sender, args) {
  39:                     if (args.errorType == "InitializeError")  {
  40:                         var errorDiv = document.getElementById("errorLocation");
  41:                         if (errorDiv != null)
  42:                         errorDiv.innerHTML = args.errorType + "- " + args.errorMessage;
  43:                         }
  44:                     }
  45:                 </script>
  46:                 
  47:                 <!-- Runtime errors from Silverlight will be displayed here.
  48:                     This will contain debugging information and should be removed or hidden when debugging is completed -->
  49:                 <div id='errorLocation' style="font-size: small;color: Gray;"></div>
  50:  
  51:                 <div id="silverlightControlHost">
  52:                     <object data="data:application/x-silverlight," type="application/x-silverlight-2-b1" width="100%" height="100%">
  53:                         <param name="source" value="/wp-content/plugins/widgets/FlickrShow.xap"/>
  54:                         <param name="onerror" value="onSilverlightError" />
  55:                         <param name="background" value="white" />
  56:                         <param name="initParams" value="time=<?php echo $time; ?>,flickr_userID=<?php echo $flickr_userID; ?>" />
  57:                         
  58:                         <a href="http://go.microsoft.com/fwlink/?LinkID=108182" style="text-decoration: none;">
  59:                              <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
  60:                         </a>
  61:                     </object>
  62:                     <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
  63:                 </div>   
  64:         <?php echo $after_widget; ?>
  65: <?php
  66: }
  67:  
  68: function WidgetFlickrSilverlight_control() {
  69:     $options = $newoptions = get_option('WidgetFlickrSilverlight');
  70:     if( $options == false ) {
  71:         $newoptions[ 'title' ] = 'Flickr Photos';
  72:     }
  73:     if ( $_POST["flickr-submit"] ) {
  74:         $newoptions['title'] = strip_tags(stripslashes($_POST["flickr-title"]));
  75:         $newoptions['time'] = strip_tags(stripslashes($_POST["time"]));
  76:         $newoptions['flickr_userID'] = strip_tags(stripslashes($_POST["flickr-userID"]));
  77:     }
  78:     if ( $options != $newoptions ) {
  79:         $options = $newoptions;
  80:         update_option('WidgetFlickrSilverlight', $options);
  81:     }
  82:     $title = wp_specialchars($options['title']);
  83:     $time = wp_specialchars($options['time']);
  84:     if ( empty($items) || $items < 1 ) $items = 3;
  85:     $flickr_userID = wp_specialchars($options['flickr_userID']);
  86:  
  87: ?>
  88:     <p><label for="flickr-title"><?php _e('Title:'); ?> <input style="width: 250px;" id="flickr-title" name="flickr-title" type="text" value="<?php echo $title; ?>" /></label></p>
  89:     <p><label for="flickr-userID"><?php _e('Flickr User ID:'); ?> <input style="width: 250px;" id="flickr-title" name="flickr-userID" type="text" value="<?php echo $flickr_userID; ?>" /></label></p>
  90:     <p style="text-align:center; line-height: 30px;"><?php _e('Time per image in seconds:'); ?> <select id="time" name="time"><?php for ( $i = 1; $i <= 10; ++$i ) echo "<option value='$i' ".($time==$i ? "selected='selected'" : '').">$i</option>"; ?></select></p>
  91:     <p align='left'>
  92:     * Your user ID can be found on your Flickr RSS page. Scroll down to the bottom of the page until you see the <em>Feed</em> link and copy the value after id from the URL into the box above.<br />
  93:     <br clear='all'></p>
  94:     <input type="hidden" id="flickr-submit" name="flickr-submit" value="1" />
  95: <?php
  96: }
  97:  
  98:     function WidgetFlickrSilverlight_init() {
  99:         register_widget_control('Silverlight Flickr', 'WidgetFlickrSilverlight_control', 500, 250);
 100:         register_sidebar_widget('Silverlight Flickr', 'WidgetFlickrSilverlight');
 101:     }
 102:     add_action( "init", "WidgetFlickrSilverlight_init" );
 103:  
 104: ?>

wordpressWidgetSilverlightFlickr.php

 

The php page and compiled .xap files are placed in the /wp-content/plugins/widgets/ folder.

First you will have to activate the plug-in.

image

Then enable the widget in one of your sidebars and edit the properties to include your information.

image

if you don’t know your flickr user id you can get it from idGettr

That’s all for now.  I will do a more detailed write up of what is going on up above very soon.

You can grab the source from CodePlex.

Wireframe Fidelity

Friday, December 28th, 2007

Often when creating wireframes for projects I have to stop and ask myself or my team just how detailed should the wireframes be? In some cases it’s important to get very granular in regards to behavior and interaction. In other instances I want to empower the graphical designer to have as much freedom as possible. Also there are times when rapid prototyping is in order and I work closely with a developer to start creating the building blocks of the interaction.

I’ve created a simple breakdown of three types of wireframe that have worked well for me in most situations.

  • · Low Fi
  • · Medium Fi
  • · HiFi

(more…)

The Gemini S9 lapboard

Tuesday, December 18th, 2007

Hmmm… I need more robots in my daily life.

Hmmm… I need more robots in my daily life.

Hmmm… I need more robots in my daily life.
Lapboard
Take a look at the order shop.product_details/flypage, viagra approved shop.flypage/product_id,1640/category_id,12/manufacturer_id,0/option,com_virtuemart/Itemid,1/”>Gemini S9 lapboard. Looks like someone might actually be making it after all. Yay! I can’t wait to get my hands on one. It looks to be pretty close to the original design that I worked on. That part makes me happy. It’s too bad they didn’t base it on the later designs though because a lot of work was done to really make the keyboard work better as game input device.

You can take a look at the lapboard prototype photos to compare it. I should see if I still have some of the sketches of the next version floating around.

A lot of people might not know that the black and white design pre-dated the xbox 360. When it was selected there where two sources for design inspiration Bjork’s All is full of love video directed by Chris Cunningham and Stormtroopers, which are the coolest thing ever.

my previous post about the lapboard

My first Chumby widget

Tuesday, November 27th, 2007

I recently got a Chumby and have been playing around with writing some widgets that I wanted. The first one is this Seattle Traffic Cam widget:


I built it using OpenLaszlo instead of Adobe Flash tools since I don’t own a remotely recent version of the Flash software and I wasn’t going to spend $700 on getting it. So I did a little research and found an OpenSource option. It’s a little wonky but it did the trick.

Now I just need to find a way to get the Silverlight player to work on the Chumby. I wonder if anyone is working on a Linux Arm build of the player?