Using Views API to add custom schemas, programmatically add your custom tables to the Views UI in Drupal

I have spent quite a while trying to find the correct place to read documentation for the Views module and how to programmatically add your custom tables in Drupal, one incorrect phrase in your Google query and you end up going in circles. The best place to start, when you’re looking for more than just a guide to using the UI is here – http://views-help.doc.logrus.com/help/views/api-tables

Drupal select list default value form

As the link I’m about to provide testifies to, this is a problem I was banging my head on my desk for, for quite some time. It’s something that should be SERIOUSLY simple, yet…. it’s not.

So how to get a default value for a select box?

Don’t use ‘#default_value’, use ‘#value’. Yes it’s that simple.

Thanks to the following website for this!

http://www.givegoodweb.com/post/132/drupal-select-list-default_value

Send variables from a Views rewrite link to hook_menu in Drupal

How to send variables from a View (Views module) in Drupal to an instance of hook_menu was causing me an unnecessary amount of time to figure out. I assumed that I would need to supply the wildcard in the hook_menu $items[] entry, this was part of my confusion. The second was that I would need to add a trailing slash ‘/’ in the rewrite results section of the Views link (to do this – visit the Views area

http://drupal.dev/admin/structure/views

Go down to ‘Fields’ and click on the field that you are using as a link.

(note: for some reason you may have to manually change the order to get other variables from the View to be passable as ‘tokens’ (this usually seems to mean moving your linking field down below the others you want to make use of)

Open the ‘Rewrite Results’ panel and head down to ‘Replacement Patterns’ there you’ll see that using [uid] == User: Uid. This means you can provide a ‘Link Path’ (back up a little way on the form) which has the variables you have taken from your Views setup (before I get onto how to write this out, take note of the following).

Then assuming you have a hook_menu implementation that has an item value…

$items['foo/bar']

where your hook_menu location is essentially being recognised as

'http://yourwebsite.com/foo/bar'

Do not try and provide a location that makes use of the URL with the attached _GET (the variables you set above. I started trying to use /foo/bar/%, then /foo/bar% before I realised that actually to hook_menu that URL I just want the plain /foo/bar, not mentioning any wildcards for any _GET variables at all.

Now when you use your ‘Link Path’ from the Views UI you can write

 foo/bar?userID=[uid]

In order to make use of the _GET variable when the hook_menu fires and triggers your callbacks…

$items['foo/bar'] = array(

    'title' => 'foobar',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('foo_form'),
    'access callback' => 'user_access', //don't worry about these if you're not used to permissions etc.
    'access arguments' => array('access foo_form'), //... and this one!
    'type' => MENU_NORMAL_ITEM,
    'weight' => -1,
);

 

you should be able to have your callback (in the same file, if you’re not used to putting them in different ones yet)
that has the following (or something similar) that will give you that variable…

/**
* Page callback.
*/
function foo_form($form, &$form_state) {

    $uid = $_GET['userID'];

    //etc. etc....

Eclipse 57% XDebug loading issue

note: If you have previously had a working version of Eclipse and XDebug and you’ve recently had this issue – jump to the bottom of the article.

If you’re using XAMPP – delete it (I have had many a problem with it), then install WAMP/ WampServer (if you’re on Windows).

Once you’ve done that and you selected the XDebug settings in the WAMP installation, you’ve setup virtual hosts as you want and that’s working, you’ve created a customised debug configuration specifying Xdebug over Zend etc. and everything seems to be setup EXACTLY as it should and yet you’re not seeing any variables, you’re not getting a Debug perspective shift, then head on over to your PHP.ini – left click the WampServer icon, then hover over PHP to see a shortcut, or follow the file extension, something like…

C:\wamp\bin\apache\apache2.2.22\bin

 

then you need to make sure you add the following lines

 

    xdebug.remote_enable = on
    xdebug.profiler_enable = off
    xdebug.profiler_enable_trigger = off
    xdebug.profiler_output_name = cachegrind.out.%t.%p
    xdebug.profiler_output_dir = "c:/wamp/tmp"
    xdebug.remote_handler = dbgp
    xdebug.remote_host = 127.0.0.1
    xdebug.remote_port = 9000

 

 

UPDATE:

As of around March/ April/ May 2013 there seems to have been some issues in Java updates – version 1.7.0_21

To check your Java version go to Start, type "cmd", press return. Once the command prompt is open type "java -version"

This stack overflow post on Java, Eclipse and the 57% percent XDebug issue seems to be really on-the-money, for this most recent issue. My fix was simply to uninstall (through the usual Windows add/remove programs) the Java listed and visit Oracle’s Java archive to download a previous version (For me this meant choosing Java SE 7,  Java SE Runtime Environment 7u15, and then ‘Windows x86 Offline’ (30.05MB) | jre-7u15-windows-i586.exe) although you do have to sign up you can remove yourself from Oracle’s mailing list by following their link (disingenuously described as a button) in the footer of the registration page after you’ve finished signing up.

Mass Effect: The back, exit, square and circle mapping predicament in video game control learnability

I’ve owned every generation of PlayStation consoles, so I guess it’s fair to say I like them. What I don’t like is bizarre mapping. For some reason in the original Mass Effect game they decided to make the ‘Galaxy Map’ contravene PlayStation conventions.

When playing video games, controllers are usually quite set into a context of use that is determined top-down, every now and then though you get strange choices that developers have made. The circle button has widely been used as a ‘back’ button for many years now and when you compare this to web browsers, smartphones, and tablets you have an ability to control your hierarchical position in the information architecture or menu system etc. When using the Galaxy Map* though, circle becomes ‘exit’ and you end up leaving it, rather than going back a stage in the hierarchy that the Galaxy Map provides in zooming in and out. In this situation, ‘square’ zooms us in, but the opposite button, ‘circle’ does not zoom us out (or take us ‘back’). ‘Back’ has become ‘exit’ and exit has an extremely strong power over us in user interface use. We each fall into a subconscious process that should mean technology is merely an enabler of our desire to achieve something. When we are thrown out of our cognitive flow we are disturbed and we immediately become aware that actually we are being used by the menu, not the other way around. Technology is not something that we should have to feel like we are using. As Matt Saunders from Citrix said at a recent seminar, is for it to “just work” – no smoke and mirrors, no instruction manuals – we use it not the other way around. This is clearly a bug-bear for me and one that demonstrates the power of learnability.

Learnability has a lot in common with memorability and wider conventions in the context of the device use – it makes no sense to try and impose a new system into a context of use that so many people will have become so familiar with for so long and that works. Part of the reason why Microsoft’s Ribbon interface heralded praise and criticism alike is that it was a true sea-change in a program that many millions of people have become familiar with for many years. Every day I hear criticism in the office of the Ribbon and yet every week I find it speeds up my report writing. Revolution here seems a necessary step for Microsoft to have taken. But something as minimal as a back button in a video game should not require me to re-write my subconscious processes – especially when the point of a video game is to immerse oneself.

*It’s worth pointing out that Mass Effect 2 and 3 both do not have this problem – and that part of my bug-bear experience is that I (as many other PlayStation owners will have) played Mass Effect 2 and 3 first.

Can’t login to Drupal after moving from a server to development, development to server, or just moving Drupal around at all using WAMP/ WampServer?

All of the recommendations and guides on the internet are great (takes a couple of hours to implement all the changes they suggest) but when you’re ABSOLUTELY sure that you’ve fixed everything and all the phpMyAdmin root@localhost problems, the MySQL user accounts, the Drupal settings.php, the virtual host problems and STILL YOU CAN’T LOGIN TO THE DRUPAL ADMIN PANEL…….

enable rewrite_module for Apache…..

Man this has given me such a headache over the last few weeks of moving developments around.

Since my post title is specific to Wamp I’m assuming you’re looking for a Wamp solution…

  • Left click the Wamp icon in the system tray
  • Hover over Apache
  • Hover over Apache Modules (just extended – probably to the left)
  • Click the caret/ down arrow until you get to ‘r’
  • ‘tick’ “rewrite_module”

I’m afraid if that hasn’t worked (after a once-more-for-luck ‘Restart All Services’) then your search continues my friend… good luck.

How to store and add extra information about Drupal’s users

Intro

I find Drupal to be a brilliant yet frustrating CMS. There are so many simple things I have wanted to do in my time learning Drupal, yet some fairly simple beginner Drupal questions like ‘how do I store extra information about a user, for example when they register?’ become frustrating.

Drupal is more than a blogging system, so it’s understandable that these sort of questions are asked – fortunately Drupal developers (seem to be) a helpful and accomodating bunch, and most of your frustrating issues have likely been answered.

Solution

In short, go to

Drupal > Administration > Configuration > People … ‘MANAGE FIELDS’ tab

which is likely to be a URL like

localhost/admin/config/people

There you can find tabs on the top right of the active window (not the first place I looked, that’s for sure) greyed out one should be ‘MANAGE FIELDS’. There you’ll find fields to fill that are similar to something from phpMyAdmin, similar because they are used in the database storage.

Once you’ve set them up, if you go to your Drupal database you’ll see that you’ll have a new table field_data_field_foo where foo is the field you would have just created.

There’s a bunch of interesting and flexible things that you can do from there, but that’s another story…

PHP function array_search() working with if, while conditions

The problem

Our array

$foo

has at index

 [0]

the value

1010 (an int).

As below…

$foo = array(1010, 1011, 1012, 1013);

But I was not getting a result in the function…

array_search()

This wasn’t immediately obvious as I was not searching for the first index in my first search. But when you consider the following PHP, it will not break at the first condition test and echo.

if (array_search(1010, $foo)) {
    echo '1010';
}
if (array_search(2010, $foo)) {
 echo '2010';
}
if (array_search(3010, $foo)) {
 echo '3010';
}
if (array_search(4010, $foo)) {
 echo '4010';
}

The solution

This seems to be because it will return 0 (the index’s value) but the if condition takes that as meaning FALSE so the solution is to add an explicit part that says if not FALSE in value and type, but makes no mention of returning 0 as an int. See below…

$foo = array(1185, 1196, 1206, 1209, 1210, 1215, 1217, 1218, 1222, 1235);

if (array_search(1185, $foo) !== FALSE) {

    echo '1185';
}

Recommended resources:

http://uk3.php.net/manual/en/function.array-search.php

Xampp not working properly? Try WampServer to fix all those virtual host configuration and installation problems

From XAMPP to WampServer or why I changed

A little PHP development is fine, but when one starts to get ahead and using more complex processes and perhaps working on more than one site at a time – we start to need more in our development environment.

I have been a user of XAMPP ever since I first started using PHP. I found the simplicity was a cure for all those long and hard-to-follow tutorials about Apache and MySQL installation etc.

My, how things have changed.

I decided that enough was enough and instead of trying to deal with the headaches of various error messages and half-explanations on various forums about trying to setup virtual hosts on XAMPP, I was going to throw in the towel and try something else. Cue WampServer.

WampServer was one of those one-click installations that I was hoping for. Aside from the minor hiccup of having to install a Microsoft C++ Distributable (common on most systems, but not on mine as I’d recently reinstalled my OS) there were no problems at all with just getting it up and running. But, I have to say, there were still one or two issues with setting up the virtual hosts. However it is worth the temporary headache!

I’ve yet to pluck up enough courage to setup XDebugger though.

Recommended Resources

http://viralpatel.net/blogs/how-to-setup-multiple-virtual-hosts-in-wamp/

http://cesaric.com/?p=255

http://www.kristengrote.com/blog/articles/how-to-set-up-virtual-hosts-using-wamp

 

PHP is Valuable, Drupal is Interesting, but Learning Curves can be Steep

Drupal is a beast, it is a content management system (CMS) that deals with open-source  communities (that’s not to say others don’t) which leads me to often paraphrase Apple’s marketing drive “There’s a module for that”. It does however have an extremely steep learning curve (more of a learning cliff if I’m honest). So whilst adopting a CMS is seemingly commonplace now, if you’re not that knowledgeable about PHP or general computer science and programming principles I advise taking things very slow and I advise you to expect a very stop-start learning experience.

Helpful resources

I recommend a book or two, as well as a browser loaded with Drupal-based resources. Embrace the video-tutorials and do not be afraid to have a cheat sheet or two handy (recommendations to come).

If all you are doing is looking to style (‘theme’) a pre-existing back-end or just automate the back-end by downloading someone else’s setup then you may be able to avoid the hardcore end of coding but for any big project it is likely there will be some code noodling where existing modules miss all that you desire.

Drupal’s documentation

Drupal has been maligned in web-spheres from time to time for its documentation. I have noticed Drupal requesting volunteers to get it in good-shape but to be honest I find the search feature located at Drupal’s API Reference very helpful, especially when you compare it to MySQL’s. Often the custom modules will vary in the quality and depth of documentation, it’s not always an accessible place – especially for those without the experience of using version control and understanding code by reading through it. But don’t give up – there are plenty of forums with people raising the kind of query you may end up having.

Don’t hide from Drupal and PHP

It can give you an extremely rewarding learning experience, whilst shielding you from the hardcore Drupal core working. It can help you to learn computer science principles and it’s never a bad thing to absorb other group’s practices. After graduating with a Java background and styling regular and relatively easily predictable HTML (PHP created or otherwise) it became apparent that, really, why would a business want to take a slow path writing everything themselves when they can rely on secure and effective open-source code that will be able to be auto-update-able whenever there are bugs etc. discovered. Don’t fear the future, don’t fear a dumbing-down of web development, adopt the agile approach or the lean approach, or whatever approach you want to use to approach it. Go with it.

Is Hiding Functionality the Worst Case of Bad UX and Usability? Looking at Twitter and Gmail on Android

Two of my most used Android apps – Twitter and Gmail – have both hidden major functionality from me. Both of these apps have made me very frustrated with them for not letting me do things in my process which I can do elsewhere.

Twitter

With Twitter this is getting right to the top, first tweet – the most recent tweet. Sometimes I’m not interested in my Twitter stream on my phone and don’t check it for a week or so. When I come back to my Twitter app I find there are hundreds of tweets to scroll through and the most usable scroll feature on Android (‘Music’ in the stock Android apps) has one of those bigger scroll blocks that you can quickly scan through at far faster pace, short-cutting to a different letter in the alphabet. So I try and use that. It doesn’t work. I spent many, many months not really caring too much about something so unimportant as my Twitter stream and getting frustrated at how long it takes to gesture-scroll up to the top.

But wait…

Turns out that when I stopped, turned off auto-pilot and looked at it I realised that maybe I could press ‘home’. Sure enough it took me to the first tweet.

Twitter hiding functionality

Pressing ‘home’ should take me home, right? Wrong. Pressing ‘home’ takes me to the newest content, the top of the tree in temporal terms. ‘Home’ should be somewhere near the beginning, the first, the bottom, you know – home? That’s what it means to me anyway. Home is a homepage, an index page, a landing page – not a node in a stream. Tsst tsst, don’t hide such a useful feature by trying to be too clever with your IA, UX, whatever – just geez, I don’t mind reading a few extra words if it means I don’t go months, months and a few more months without realising I can do what I’m getting frustrated about doing.

Don’t be too clever for your own good!

 

Gmail

Now I think I’m actually quite liberal with my frustration towards Gmail, far more developers and designers seem to have a true hatred for Gmail, although that might just be Google’s web-app version (which, incidentally, is terrible for accessibility of icons – talk about generic, ambiguous shapes that mean nothing to a lot of seasoned web surfers).

I assumed (again) for months and months that I could not see my sent items. That it just wasn’t possible in the Android Gmail app. Who wants to waste time Googling how to do something so basic as seeing your sent items? Well I didn’t, and as a result Gmail has cost me time. As Gmail seems to combine emails from a person, with the same ‘re:’ (say if they’ve replied a few times to you, but you’ve not read it since they’ve sent another reply) I would check that. Only it then puts my sent item in that conversation. But if there wasn’t a conversation in the first place then I couldn’t see what had been sent based on my mental model of this frustrating Android app.

Gmail hiding functionality

So Gmail has done a similar sort of thing. The block housing the word ‘inbox’ has no affordance that underneath lurks key functionality. There I can find my Outbox, Sent Items etc. Really there isn’t much use for email at all if there is not automation of the basic functionality of outboxes and the like (something the core Android ‘Email’ app clearly does include). So frustrating!

Don’t try and be too smart about it. Keep it simple stupid!

 

In summary

What is the point in building something big and powerful in functionality, only being ‘too clever’ with your UX and hiding it from your users? I can’t see one.

Topic Barring Spoiler Prevention on Social Network Sites like Twitter, Facebook and Google+

In all seriousness, I think SNSs like Facebook, Google+ and Twitter could do with a topic barring service.

How many times have you searched for information on a film, book, or game and on page-one of the search results had a brash spoiler flash in front of you? Recently, I’ve not found this to be as common a problem, the top results are optimised for search engines and often come from the top sites, like The Internet Movie Database. IMDb has a strong spoiler-avoiding ethos, and many other sites with forums have the blacked-out spoiler feature, describable as basically an explicit opt-in to those spoilers before you can read them.

Social networks are an exception to this however, not least because often user’s must surely have their most relevant ‘friends’ appearing in their news feeds, Twitter streams on TweetDeck etc., giving them no-click access to information based on a person. The trouble with that, in this context, is just that – indiscriminate access to everything a ‘friend’ posts. Since Facebook is constantly updating its features, and redesigning – or re-imagining – existing features, why should users have to experience spoilers? One seemingly short, simple and oh-so-sweet feature would be an ‘avoid this’ spoiler filter, which you can set to last up until you have seen, read or played the corresponding film, book or game. What’s more, this would be linkable to a range of services through context-awareness, possibly increasing participation through ease of use, and providing developers with the chance to link into money-making possibilities. I’m sure ‘Acme Cinemas’, ‘Acme Publishers’ or ‘Acme Games’ as well as various marketing firms and teams would love the chance to collect further data from social network services. I imagine it would also supply an extra avenue of personal information that next-generation social analytics can devour.

In the past two (ish) years I’ve had the following ruined: Predators, Mass Effect 3, The Walking Dead, and within a day – Prometheus. When I was a kid, someone told me something fairly crucial about a main character in Final Fantasy 7 when I’d already spent an obscene amount of time playing it. (I actually just removed a spoiler then, see how easy it is!)

Let’s just say, I really, really hate spoilers. Facebook, Twitter, Google – I implore you, develop them away!

Why Would a Computer Science Student Hate a Tablet Computer?

I can’t say this is true of all computer science students, because it’s definitely not. However, among my peers are computer science students who have often, over the last three years, regarded tablet computers with derision. In one forum on emerging technologies, the tablet discussion turned, fairly quickly, towards not-on-my-desk-ism, a sort of NIMBYism for nerds – I say that in an loving way, of course. The discourse was largely negative with opinions like: “tablets are just for people who think it’s cool to use a lump of plastic to go on Facebook”, “why would people use a tablet when they can use a netbook?”, and “tablets are just fashionable, soon they’ll disappear because they’re useless”.

Fortunately these students are more into their hardware than their blue-sky thinking, so are more likely to be found knee-deep in cable than post-it notes and scribbles. But I was one of only a few other computer science undergraduates whom freely spoke of seeing the value and future of tablets and mobile computing devices, beyond the fad and the vogue of the marketing. I don’t own a tablet, let me just point that out now, not because I dislike them, but because I can’t afford the high-spec types I desire.

Maybe it’s because those computer science students are at home in that which they can see, solder, plug-in etc. and actually it’s just the way things are. Maybe it’s because ‘doing computing’ is still often considered to be based around a desk, a laptop/PC, a mouse, and a keyboard.

I think actually it’s more a point around the division between work and play. Tablets are very much marketed around play or leisure. They are are presented as great vehicles for being an end-user, responding to the opportunities other development teams have afforded us, worked on behind the curtains of e.g. Google Play and Apple’s App Store. In comparison, laptops give the physical controls of keys and a mouse (if you plug one in, of course) that enable programming, coding, and similar. Giving an ability to hold, touch and feel physical objects and feel in control, rather than make gestures and type on flat, touch-screen keyboards. I have been on the bus a number of times, thinking how good it would be to be able to code on my phone only to find the apps I’ve downloaded have a nightmarish user experience when I’m being bounced around on the top-deck, like a piece of popcorn. Maybe what I need is (*cough*) features (*cough*) that would enable me to pull API style code lines with ease, maybe even pseudo-code converters or something like that (just a thought). I can’t imagine how many times I’ve written ‘margin:auto;’ in the last few years, or even System.out.println(“If you’re reading this, it worked!”);. Forty five minutes to an hour is a great amount of time to disappear into the world of code and markup and forget you’re surrounded by screaming sixth form students. Maybe what the conservative computer science student needs is to be more aware of the apps that would really help them, like AIDE or DroidEdit Pro on Android. It’s probably a matter of pricing and wider processing constraints though – how far could you take this before processing capacities are reached? I don’t know. (Helpful I know xD ). Most students aren’t exactly rolling in money, but there are plenty of computer science students out there who have to make bus journeys every day, why not fill that unproductive time with some code-noodling on a tablet?

If tablets are truly the future – not just in sales, but in displacing the usage of laptops – then it would probably be a good idea for the engineers and computer scientists out there to learn to use them as a tool, and for development teams to afford increased efficiency for mobile[1] developers.

[1] as in developers whom move, not developers of mobile apps [2]

[2] although, they could obviously be both… ;)

Current Web Browsers, Fitts’ Law, Tabs and Infinitely Deep Screen Edges

This is not a post about infinite scrolling, where a user may continually scroll to find continually loading content without following pagination links. This is a post about the current form of web browsers and their hit or miss mouse traversal in opening tabs, selecting tabs, and tab positioning against (or away from) screen edges. Screen edges have the massive advantage of being infinitely deep (often referred to as infinitely wide, but since we’re specifically talking about tabs, we’re referencing the height so ‘deep’ is used generically). If you ‘throw’ your mouse at the tab, you absolutely cannot go past the edge of the screen.

So to set the scene, a UX special, Fitts’ Law: the time required to rapidly move to a target area is a function of the distance to the target and the size of the target (from Wikipedia’s definition). This has high relevance to pointer movement, but less relevance to touch-screens and gestural manipulation. I’m therefore interested to see whether UI styles move away from this over the next few years with Windows 8 and the permeation of the in vogue mobile UI-patterns on tablets.

For me, hearing of Fitts’ Law made me think of muscle memory (i.e. “practice makes perfect”), for the guitarists and trumpeters out there this makes sense. The more you practice, the tighter your finger and palm accuracy, and the tighter your embouchure, leading to more efficient technique. So when one limits the muscle memory in mouse movement to one direction without the need to apply the breaks, surely this is a far more efficient form for the tabs in web browsers to take? Not least with the ‘bitty’, fast consumption of web content, chat bars and notifications that prevail nowadays. Fast simple movement certainly appeals to me, my trackball mouse, and my extended desktop.

So, let’s look at the browsers.

IE9–we’ll start here since MS have been spending who-knows-how-much on their marketing campaign. Nope, sorry, you’re not cutting my mustard. Though you are not the lead culprit, you have given me a sufficiently large gravel trap to run-off into, just watch Formula One to see where I’m heading with that analogy. This run-off forces me to focus a little more on hitting the tab. Something that becomes a bug-bear when I’m working on complicated and resource hungry projects with dozens of tabs open.

IE9 tab structure

IE9 tab structure

Chrome–nice, I don’t like your toying with my privacy but you’ve enabled me to hit the wall and be at my target. ‘+1′ for allowing me to run all the way to the left and still open a tab (I could be tight here and ‘-1′ for still letting me hit the overarching window options, but I’ll let that slide with your pretty logo giving me a mental buffer).

Chrome tab structure

Chrome tab structure

Firefox–I do like you. It’s been some time since I first installed you (but significantly less time since you last got me to reopen for updates) so I can’t remember if you forced me to work out your ‘double click in the dead space of my window’ feature to remove the padding strip. However in doing so you have given me two options. Double click the dead space to make Firefox’s spacing look like IE9, double click again to make Firefox return to the Chrome-like spacing. Nice, but possibly ever so slightly precarious for my (highly informal) test, given that one slip of my direction and an extra ‘click’ if I was unfamiliar with conventions might shunt your spacing and make me lose my place. Overall though that’s unfairly pedantic. I do like Firefox, still.

Firefox tab structure

Firefox tab structure

Opera–the ‘underdog’ of major web browsers. It shows me I can move all the way to the top and thereby reduce my actions to one movement. But oh how teasing it is, its one or two pixel padding at the top stops me from being able to open a tab from the very top of the window. I still like the application though, not least because of the highly quick feature of opening a new tab by clicking anywhere in the dead-space of the tab bar, +2!   ;)

Opera tab structure

Opera tab structure

Safari–I find your design for tab access terrible. After moving my mouse to the top of the screen in a linear fashion, I have to move back down to the fourth level of your controls (including the OS window and a bookmark bar opened by default). This may be different on a Mac but I can’t afford one so I can’t really comment based on secondary image sources on the web. To top that off, how can it be that more efficient to hide the new tab option behind a generic icon in a part of the window I wouldn’t naturally look at? Maybe that’s just me based on what I’ve become so used to, but finding an icon that looks like an office document page, hovering over it to be told “display a menu for the current page” (the contents? The Safari settings?) then selecting “New Tab CTRL + T” is a little much with today’s quick and snappy web consumption.

Safari tab structure (default)

Safari tab structure (default)

 

Safari tab structure (full screen view)

Safari tab structure (full screen view)

“I don’t want to be ” + Apple or MS or Google

So why the difference? Marketing, branding, “I don’t want to be ” + Apple or MS or Google?

Well, in trying to avoid provoking fanboy(sic)ism, I’ll avoid platform bashing. IE9 aligns with the modern Aero functions of Windows so one could argue for the need to be able to grip the Window to manually snap it with the mouse. Since most laptops are pre-indoctrinated with a Windows key, I’m not sure this is an entirely efficient use of the space. Perhaps a caret with IE9 options to the right of a solid looking image to grip and manually snap would be a solution? Just a thought.

Maybe because I never (have been able to afford to) purchase Apple products I don’t see the appeal of the visual distinction, but why would the design give a double backhander and make me aim for a target that essentially seems to float, whilst also shrinking the target size? This seems to infringe on Fitts’ law. What’s more, this is coming from a platform that is famed for appealing to Fitts’ Law in their overall OS design.

 

Related reading:

Fitts’ Law by Ashley Towers at Usability Friction: http://usabilityfriction.com/2010/06/07/fitts-law/

Top 10 Usability Highs of Mac OS by Juul Coolen at Smashing Magazine (point 6): http://www.smashingmagazine.com/2008/08/12/top-10-usability-highs-of-the-mac-os/

Fitts’ Law at the Interaction-Design.org encyclopedia: http://www.interaction-design.org/encyclopedia/fitts_law.html

 

“It’s only one colour… that’s a lot of money for only one colour”

Based on tweets I seem to read daily, I can’t help but wonder if this is an inadvertent satire of that which exists in the pro client/ designer world…

 

Sheldon: “It’s only one colour.”

Penny: “Yeah, so?”

Sheldon: “That’s a lot of money for only one colour.”

(The Big Bang Theory: Series 3 Episode 18 – “The Pants Alternative”)

 

Flow in Battlefield 3: Interruptions and Bug-Bears

One of the methods I use to clear my head is to play Battlefield 3 (some see it as bizarre, perhaps it is when you experience the amount of flaming some people get up to).

It’s not that bizarre however when you consider the state of ‘flow’ that you can immerse yourself in. Flow is the process which Mihaly Csikszentmihaly describes in his book: ‘Flow’. It is the state of being in optimal experience and engaged fully with one’s activity and experiencing joy as a result. It’s something I realised long ago from mountain biking but came to define a few years ago when I was talking with a lecturer about Rovio’s Angry Birds and its addictive qualities. If you are interested in flow in video games I recommend you see the link at the bottom of the page by Jenova Chen co-founder of ‘Thatgamecompany’ who are behind the recent, critically acclaimed, ‘Journey’ that came out this year on the PS3.

Battlefield 3

When I am in this state of ‘flow’ playing Battlefield 3 (BF3), time disappears and my brain is utterly captivated. However when the introduction of a bug-bear is made, problems with repetitions on certain sequences of actions are quickly compounded. BF3 seems to have a strange issue with selecting a weapon/ customizing a weapon/ spawning in. It seems, and I can’t put my finger on where specifically it is at the moment (not having my PS3 with me) to be a problem with pressing a certain key, or pressing a set of keys, in a certain order. This leads to a result that I was not intending, causing me to suddenly become very aware of the fact that I am not immersed, instead I am holding a gamepad on a chair in my living room.

Why does this happen? Gamepads are reliant on muscle memory and you don’t think about pressing ‘square’ you just press that button which does that action and consciously you’re unaware of it. So why then is there this strange conflict? Is it simply an oversight? For example, you get killed, you want to get back in on the ‘action’ as quickly as possible so you fly through your button pressing as you did when you first start the game. You change your weapon, the button does something else, before you realise what you’ve done you spawn in and you get the big, slow, heavy, disabling sniper rifle instead of a nifty little quick gun. It may be that recent updates seem to be attempting an algorithmic prediction, perhaps it’s just the last gun you used depending on whether you are/were attacking/defending and therefore have access to the other team’s arsenal, maybe it’s something or nothing at all. Hand on heart I don’t know. They have offered a nimble grid of weapons that actually took me the better part of four or five months to notice and since then has proven very useful for the quick selection, by pressing circle. However I still find myself stumbling on the ‘square’ here ‘x’ there situation. Maybe it’s just me!

It messes with my ‘flow’ and my UX fundamentals and twists my expectations and feeling of control, no longer do I feel an ‘expert’.

Battlefield 3 is a great multiplayer though, truly, and as much as Dice havn’t made a flawless game, they’ve made a darn tootingly good one! Or something…

See: ‘Flow in Games’ for Jenova Chen’s “Flow in Games” thesis.