User Experience

At CodeFreeze this year, I went to the User Experience (UX).  They went through things that I have picked up from our UX team but it ended up providing valuable reminders.

One such idea is that on our team we can do user experience testing during requirements, prototype and final stages of development.  Persona’s are necessary, of course, during all stages of development. It is key to understand your customer and how they end up using the system.

Here are a list of things to think about and general tips when going to a customer site to do user testing:

  • Look at the users cube, cheat sheets, etc.
  • Users will often say and do things differently
  • Record their interactions with others
  • How often do they use the software?  all day? occasionally?
  • Who conducts the test?  Business as well as ux team members.  Business / Developers can also be great observers.

Cognitive Walkthrough

  • Take a story and go through it as if you were this person.
  • Getting context around what the person is, what they are doing, etc.
  • Quote: “Take a user to the edge of the cliff and then watch them step off.  Let the user struggle a bit and then come back and ask questions later.”
  • Question you can ask when the user is struggling: Do you see anything else that would help you?

IndexedDB vs. WebSQL

At this point, it sounds like IndexedDB will be more highly adopted then WebSQL.

Mark West did a nice overview. I summarized a his comparison slides below:

WebSQL
• A real, relational db implementation on the client (SQLite)
• Data can be highly structured, and JOIN enables quick, ad-hoc access
• Big conceptual overhead (SQL)
• Not very JavaScripty, browser support is poor, and the spec has been more or less abandoned.

IndexedDB
• Sits between full-on SQL and unstructured key-value pairs in “localStorage”
• Values are stored as structured JavaScript objects, and an indexing system facilitates filtering and lookup.
• Asynchronous, with moderately granular locking
• Joining normalized data is a completely manual process

“The working group is designing this API so it could be wrapped by JavaScript libraries; for instance, there’s plenty of room for a CouchDB-style API on top of our IndexedDB implementation. It would also be very possible to build a SQL-based API on top of IndexedDB (such as WebDatabase).” – Arun Ranganathan, Firefox Developer

Code Comparisons: http://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/.

Mysqld Fails to Start

When I ran mysqld I would get:

> 090127 10:00:30 InnoDB: Operating system error number 13 in a file
> operation.
> InnoDB: The error means mysqld does not have the access rights to
> InnoDB: the directory.
> InnoDB: File name ./ibdata1
> InnoDB: File operation call: ‘open’.
> InnoDB: Cannot continue operation.

Finally I looked in /etc/mysql/my.cnf and figured out that my bind-address needed to be updated. So took about an hour to figure that one out. It would be best if I could just leave it to localhost for the bind_address but I can not do that right now.

For others where it is not the bind_address it could be number of other things. I started reading through this thread: http://lists.mysql.com/mysql/216042.  It was very helpful to think through the scenarios.

Hudson Modify Environment Variables Properties

Myself and another have been trying to figure out how to modify the environment variables programmaticly using groovy in Hudson. After a little of tinkering we were able to do it.

1
2
3
4
5
6
7
def hudson = hudson.model.Hudson.instance
def globalProps = hudson.globalNodeProperties
def props = globalProps.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
for (prop in props) {
    prop.envVars.put("TEST_ENV", "WORKS")
}
hudson.save() //This is needed in order to persist the change

Then if you want to expand this for the slaves:

1
2
3
4
5
6
7
8
9
10
11
12
def slaves = hudson.model.Hudson.instance.getNodes()
for (slave in slaves) {
    println "-----------------------"
    println slave.name
    println "-----------------------"

    def props = slave.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
    for (prop in props) {
        prop.envVars.put("TEST_ENV", "WORKS")
    }
    //SAVE
}

Comcast Download/Upload Speed

I was considering doing a CLEAR plan which says it averages around 3-6 Mbps download speed. Not quite as fast as I would want. My guess is that the CLEAR plan does not truly ever reach 6 Mbps.

Think I will stick with Comcast for a while…
Comcast Speedtest

Developing Simple

Make everything as simple as possible, but not simpler.

- Albert Einstein

Thought this could easily be applied to software engineering.  It also goes along with the KISS (Keep It Simple Stupid) principle.  It also says that sometimes trying to make things simple can be to complex.  There is a line that we walk when developing software.  By trying to become to creative in making a design simple, sometimes it can be to complex!  I like to expand his quote and say, “Make it as simple as possible, but not simpler then possible”.

Semantic Web

I have to admit, when I first heard about this I thought it was kind of crazy and impossible to think information could really be captured via html markup and other types of semantic writing.  If you want to learn about the broader idea of the semantic web you can read an article posted by smashing magazine.

Apparently Google is going to start investing in this idea, at least in buying a company that is investing in this idea :-)

Google just purchased Metaweb. Now that Google acquired Metaweb, they have really bought access to an impressive database of web entities. What are entities?  Metaweb calls entities a word that is a person, place or thing.  One entity can have many different types of names or different names referring to the same entity.  For example, you could refer to my current employer in a number of ways:  PTC, Parametric Technology Corporation, Parametric Technology, etc.  What metaweb does is realize that everyone is talking about the same thing!  They take this ever expanding database and open it up to the world with access to capture and access the entities.

Why does that matter?  You will have to read into it a bit more but it is searching not just words like Google but the meta information which gives context to the words.  This helps in numerous different ways.  It allows for more direct SEO, searching, ability to pull in information from other places, etc.