Kotrotsos.com

Hey, i'm a maker, designer, developer, tinkerer and hacker dad of 2 beautiful girls. You can find me on Twitter @kotrotsos and mlabs

2 things UX experts can learn from the movie Saw.

Media_httpfarm4static_bhpij

1. The way to play the jigsaw instruction tapes are always labeled clearly.

2. The rules of the game are very simple and always straightforward (eg. poke out eye- get key)

Bonus: Playing the game successfully brings great reward...usually.  

U can follow me on Twitter @kotrotsos

Please- follow me on Twitter- I tend ramble with a greater frequency there. :) @kotrotsos

Media_http30mediatumb_dzgmc

Keep your email address safe from spambots by copying it to the clipboard

I was thinking about some way's to show your email address on your site- without the possibility that spambots would be able to harvest them- or at least, make it very hard for them to do so.

One idea that stuck was placing the email address on the clipboard, and making it available to paste into the recipient field of an email client. So I cobbled together a proof of concept between 2 cappuccino's- that does just that, place an email address onto the clipboard after clicking a link.

 

It's not pretty- but it was not meant to be. I used ZeroClipboard cause I found out that doing this [copy something] is really hard to do cross browser.

Anyhoo...Here is an example page, it is ready to run-however one caveat. If you run this locally-you need to give Flash explicit access (yes it uses a small Flash script) to some secure part. It's not hard, just enter the page as an exception when it shows the warning dialog to you. 

 

Sexy element creation with jQuery

How's this for sexy?. Paste this into your HTML file.

Now you can attach events directly to the declaration.

Poor mans jQuery element inspector.

In case you do not have access to Firebug or any other quick element inspector- I have created a very quick and very dirty Javascript only element inspector- well actually Javascript and jQuery. You need to have access to your own code though. Just past this here snippet anywhere in html file and the title of your document will show the ID and the CLASS of any element you are hovering over. CSS (add this to give the element you are hovering over some style)
.m0 { outline:solid red 1px; }
Javascript (Omit the script tags if you are placing this outside your HTML)
$(document).ready(function(){
    $("*").hover(
      function () {
        var c = $(this).attr('class');
        $(this).addClass('m0');
        document.title = "ID: " + $(this).attr('id') + " CLASS:" + c;
      }, 
      function () { 
        $(this).removeClass('m0');
      }
    );        
  });
Like I said, it is very quick- and probably too dirty to touch. Let me know if this works- or not or if you can make this shorter. say; tweet sized. update: Changed border: property into outline: so the border width does not play a role in the layout.

Apple you are breaking my heart.

Apple's gem of the moment, the Mac App Store is (Once more) showcasing it's ongoing struggles (presumably) with it's UX team. I deduce this from not only the doubtful effectiveness of it's icon (again- but hardly relevant) but the positioning of tool bar elements (again- relevant)
Media_httpkotrotsosco_hjbfq
I know- as was the case with the Icon (capital I) , Steve will probably not agree. But, come on...
Media_httpkotrotsosco_yfqbs
Proximity suggests that these two groups (or is it one group) belong together. However- they can't be more different. From left to right [close] [minimize] [maximize] [back] [forward] The first 3 perform window type operations (the most annoying kind) and the last 2 navigational functions. I am not sure what Apple is trying to prepare us for, smaller screen real estate? Is Apple doing away with window chrome (not Chrome) all together? No doubt we will see- but in the mean time- you are breaking my heart Apple. Update: Better like this? Let's here it.
Media_httpkotrotsosco_gwycb

Easy EJS

I have recently took up the Embedded Javascript jQuery plugin again. It is a templating engine for javascript. (here) It is also part of the javascriptMVC framework. However I was not happy with the way you call the render function everytime you need to render a view.

$('header').html(new EJS({url: "templates/header"}).render());

So I developed my own solution where you only need to add a classname of 'view' to an element. And if you name your templates according to convention- it should render out the template. (in this case header.ejs)

<div id="header" class="view"></div>

You can also override the template name like so

<div id="header" class="view myheader"></div>

Just append the template name to the classname. Here is the code- you need references to jQuery and EJS for this to work. Just have the script execute right after page load.

function render_views()
{
    var Views = []; var templatePath = "templates/"
 
    // Find me some elements with a view class attached
    $('.view').each(function() {
          var arg;
          var id = $(this).attr("id");
 
          // See if there is a template overide present- split the
          // class into an array.
          arg = $(this).attr("class").split(" ");
          var customView;
 
          // So only the second value becomes the argument to overide- 
          // I see an error in my assumptions though. Can you see it? will fix
          // that sometimes. (hint: what if you have more then one class 
      //                  definitions per element?)
 
          if (arg.length > 1) 
             customView = arg[1]; 
 
          // Keep Strings Neat By Using Variables (tm)
          var elementid = "#" + id;
          var template = templatePath + id;
 
          if (customView != null)  
            template = templatePath + customView;
 
      // Perform view rendering
          $(elementid).html(new EJS({url: template}).render());
    });
}

Zen Basecamp

Media_httpwwwcrunchba_zsqvk

When working, I usually have one or two Basecamp projects open (or as much as possible)

I don't use any third party notification tools or anything- I just like working directly on the site itself. But- I don't like to right column, header and footer to be visible while I am doing alot of to-do stuff for instance.

So- I created this bookmarklet, just add the following link to your bookmarks or bookmark toolbar or whatever, and whenever you visit a Basecamp project- click on it...and only the stuff that matters most will remain visible. (reload, and you will have the normal view again)

Zen Basecamp

Like something that is real

I am drafting up some mockups for IRL Like (or something cheezy). You can stick this onto anything 'likeable' and people can shoot the QR code or follow the bit.ly shorturl to -like it.

Like

Conversations on IM. Rant

Media_httpuploadwikim_bhibj
Image via Wikipedia
Something has been bugging me for a while now. People that read this- and feel somehow spoken to- yes this is for you. When we discuss something on IM. We are in a conversation together. Don't go out- do something else, join someone elses conversation. It is so incredibly NOT polite!. I am talking to you- I expect at some point shortly after my peep to get a response from you. Not 5 minutes later, not 10 minutes later. I am waiting for your response! If you are busy- say you are busy- we will talk later. Imagine if we talk on the phone and I keep constantly shifting my attention to other people, delay a response by minutes or pretent I am going to say something- but then I don't.. I hate the 'is typing...' feature now because of you. It's like you are opening your mouth, but not saying anything! If we schedule a conference on gtalk, that doesn't mean you can just be late- not introduce yourself. And wonder of without excusing yourself. It's not polite, it's f#cking annoying! You are wasting everyones time. When you are going- say you are going. Change your status to gone atleast- or be polite, and say goodbye. IM IS communication people. Treat it like so and show some manners.
Media_httpimgzemantac_pfvdy