Hassan Elhassan

Front End Web Developer

BrowserStack Makes it Easy to Test Your Website in Multiple Browsers

BrowserStack makes it easy test your website on multiple browsers more efficiently in a variety of browsers including Safarbrowserstacki, Google Chrome, Android and Firefox and mobile devices—all at once!

Web developer tools are built in to the application to make de-bugging really easy and quick.
No more buying multiple devices to test your sites, with BrowserStack you can test a site in an hour compared to several hours. And the best part—you don’t need to install anything!

Learn more about BrowserStack

Kevin VanEvery

Technical Sales Consultant

New WordPress Themes are More Than Beautiful

WordPress calls its 2014 theme a “beautiful magazine theme” and here at Matrix Group, we have to agree. We implement WordPress for many clients, not just for blogs, but also for microsites, campaign sites and publication sites. Here’s our review of the latest and greatest from WordPress.

The best way to look at this is side by side and WordPress keeps demo sites available for their default themes, so let’s take a look.

 

WordPress 2013

 
Twenty Fourteen Home page viewTwenty Fourteen Phone View
The very first thing you’ll notice is pictures!  The 2013 theme looks positively old fashioned, with what has become a very stale image header and then a very plain text over white background content area.  Now look at 2014.  The first thing you see is pictures.  Beautiful, large pictures in high contrast against the black background.  This is what a modern theme looks like.  Audiences react better to images and images really do sell your content.  
 
Where the display really separates itself is when you load it up on your phone.  You can simulate a phone display by shrinking the width of your browser window, or just load up the above link on your phone.  
 
Now, both themes have responsive designs, but you see some immediate differences.  The 2013 theme is just a clean display of the desktop display, but the 2014 theme uses the featured highlight images as big buttons that are easy to see and, more importantly, easy to click.  Using the whole image as the link to the post improves usability for people trying to click small links on small phones.  
 
These changes make the theme more modern, but when you look at it, what really ties this theme together is all the little details.  It’s hard to put your finger on what exactly makes this theme so much nicer and that’s because it’s not one thing, it’s a bunch of little things.
  • Navigation – the new theme puts all the navigation options on the left side, stacking them vertically to allow for as much room as is necessary to add  categories, and links to archives and popular content.  At the same time, it still supports additional utility navigation for pages across the top right of the header.
  • Right rail widgets – widgets have always been a popular part of the WordPress software, allowing a user to put dynamic content anywhere on the page, but the new theme adds a level of polish and emphasis to those elements with helpful iconography and stylized display
  • Footer – the footer adds a lot of utility, expanding out the navigation, tags, and any other widgets you want to add in the available space.
This theme is a huge upgrade over a series of relatively uninspired annual offerings from 2010 – 2013 and I hope people take notice of the updates to the most popular blog software available today.
 
What do you think of the new WP theme?  What theme do you use on your blog?

Summer Intern

The Psychology of Web Response Times

Hi!  I’m David Reich, and I’ve been interning at Matrix Group for the summer. I’ll be writing a post summarizing my experience here before I leave, but I’ve still got a bit more time, so today I’m posting some slightly more technical content. clock close up

One of the most interesting things I did for my internship was research. A few times, I was assigned to study and summarize certain aspects of web development.  This meant I got to learn about both my research topics and, just as usefully, how to write professionally.

Recently, I did some research about design and psychology of response times in application development. Not just web app development, either – the principles that apply to Matrix Group’s products are just as applicable to other types of interaction between humans and systems like games, telephones, or even conversations.

Temporal Cognition: how long is too long?

When interacting with a well-designed piece of software, the user enters into a ‘conversational’ mode with it. Users receive useful responses just as quickly as in a verbal interaction, and feel just powerful as when manipulating physical tools. The application moves at the same speed they do, and never interrupts their thought processes, so they can reach a productive state of ‘flow’.

That’s for a well-designed application. What, then, is the quantitative difference between software that works with the user and software that breaks their concentration? In 1993, Jakob Nielsen described three boundaries that separate the two. George Miller, 25 years before, went into greater detail with a similar conclusion. In the context of user-interface design, that research might seem ancient, but in psychology it isn’t. People today have the same temporal cognition that they did forty years ago. Miller’s research isn’t outdated; it’s categorical.

First Boundary

Nielsen’s first boundary lies at 0.1 seconds.

A tenth of a second: this is time that it should take for a character to appear on the screen after being typed, for a checkbox to become selected, or for a short table to sort itself at the user’s request.  When it takes less than a tenth of a second for the user’s command to be executed, the user feels like they’re in direct control of the software – as direct as flipping a light switch or turning a doorknob.  People won’t even register waiting times of less than 0.1 seconds.  If an application takes half a second to run a JavaScript function, though, users will perceive the computer taking control.

Second Boundary

The second boundary is at 1 second according to Nielsen, but 2 seconds by Miller. In either case, it’s the point at which the user is in danger of losing their productive sense of flow. When the user is forced to wait for less than 2 seconds, they’ll notice a delay, but it probably won’t feel unnecessary or distracting. For delays between 0.1 and 2 seconds, a progress indicator is unnecessary, and might even be distracting.

Third Boundary

Neilsen and Miller also disagree over the time of the third boundary. Nielsen puts it at 10 seconds, and Miller at 15. This third boundary is the point when the user loses focus on the application and shifts their attention to something else. It should be avoided whenever possible. Times in between the second and third boundaries – between 2 and 10 seconds – should have some sort of progress indicator.  A spinning cursor is appropriate for times in the lower end of that range. For times above 10 seconds, assume that the user’s focus on their task has been lost, and that they’ll need to reorient themselves when they return to the application. A progress bar that either estimates the percentage of completed processing or provides some feedback about the current task is vital. Waiting times of longer than 10 seconds should only be used when the user has just completed some task, and the user should be allowed to return at their own convenience.

Key Landmarks

Those three boundaries – 0.1, 1, and 10 seconds – are the key landmarks of responsiveness for web applications. I would attribute Nielsen and Miller’s disagreement over precise numbers to the vagueness and context-dependency of the entire question. Nielsen’s numbers, powers of ten, are prettier and easier to remember, but Miller’s may be more psychologically accurate.

A lot of this sounds very academic and theoretical, but it could be meaningful for success of a web-based business: according to WebPerformanceToday.com, 57% of consumers say that they’re likely to abandon a page if it takes more than three seconds to load.

Sources:

Do you agree with these studies? How long do you wait for a task/web page to complete or load?

Rich Frangiamore

Systems Admin

Testing Tools: Free IE tools from Microsoft

modernie

Great news for developers and testers everywhere. Recently, on Microsoft’s Modern.IE site (which houses tools and resources for IE devs), the company released free, pre-built, fully functional virtual machines (VMs) specifically built for testing Internet Explorer.

You can download several different VMs, each with various versions of Windows OS (from Vista to 8) and various versions of IE (from 7 to 10). These are fully functional installations of Windows (not emulators) and are optimized for speed. One caveat, each instance is restricted with a time limit (within a single session).

There are versions prepared for Windows, OSX, and Linux, via VMware Player, VMware Fusion, and VirtualBox, respectively.

What testing resources do you love?

James Wood

Programmer

Random result from query

Recently, I was upgrading some code and we needed to pull a random result from a table. Not thinking about the SQL server version I went ahead and created a query using common table expression (CTE).

It looked like this (the real query has proper column and table names!)

WITH cte AS
(
    SELECT TOP 1 id FROM table ORDER BY NEWID()
)
SELECT
	table.id,
	table.id2,
	table.column1,
	table.column2,
	table.column3,
	table.column4,
	table2.column1
FROM
	cte
INNER JOIN
	table
ON
	table.id = cte.id
INNER JOIN
	table2
ON
	table2.id = table.id2

Super, I thought. It works great on our development server and boy is the code a lot simpler than before.

I moved it live and it didn’t work. We had SQL 2000 on live and CTE wasn’t introduced until 2005…

…So back to the old code. But surely I could improve on the old code and looping through result. Yes, I could :)


<cfquery datasource="datasource" name="qryRange">
	SELECT
		id
	FROM
		table
</cfquery>

<cfset listIds = valueList(qryRange.id) />
<cfset randNum = RandRange(1, listLen(listIds)) />
<cfset selectID = listGetAt(listIds,randNum) />

<cfquery datasource="datasource" name="returnQuery">
	SELECT
		table.id,
		table.id2,
		table.column1,
		table.column2,
		table.column3,
		table.column4,
		table2.column1
	FROM
		table
	INNER JOIN
		table2
	ON
		table2.id = table.id2
	WHERE
		table.id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#selectID#" />
</cfquery>

The main areas that I improved was that before, it was just using the record count of the number of records returned from the query and getting a random number from 1 to the record count and looping until it go to that ID.

Problems happen if something has been deleted from the table and there isn’t an ID for the random number. Also, it wouldn’t ever select a result if the ID was a number larger than the number of records in the table.

Once we upgrade to a newer SQL I’ll use the better code, but for now this is a vast improvement.

Hope this helps someone.