Sunday, December 19, 2010

Innovation vs Programming

Seems that being able to think of something new became more important then actually executing it around the time I started my undergraduate studies, see it here.

Thursday, December 16, 2010

Usability from a neuroscience perspective

There are many definitions to usability, I will not try to create one myself, but to explain how I see it.

Whenever users needs to do a specific task with a certain application, they are facing two problems:

  • What to do - this is defined by the user (or for the user by someone else)
  • How do I do it - this is defined by the application developer
In order to solve these problems, the user needs to allocate mental resources. Better usability results in less allocation of mental resources to deal with the second problem.


Basically, usability is about reducing the users' mental burden by providing good answer to the how problem, and thus allowing them to to concentrate on the what problem.

I've used the term "mental resources", so here's a short, not complete list of mental resources ordered by the cost of using them - from the cheapest to the most expensive:

  • Memory:
    • Mechanical - from climbing stairs without thinking about it to typing our thoughts without looking at the keyboard
    • Emotional  - what we feel about things
    • Intellectual - processes in solving problems that we already used and don't need to develop
  • Learning - the process in which we transform something that we don't understand to something that we do
  • Problem solving and creativity - the process in which we're getting from point A to point B,  without initially knowing the way (or even whether point B exists)

Just to illustrate how much energy our brain needs, it is enough to point that during sleep, one third of the body's needed energy is required by the brain. Now think how much energy the brain needs when you are active, receiving constant stimulation from the environment,  remembering  things, and also trying to be focused and do your job.

Thinking is hard and consumes a lot of energy, and we can expect users (as well as any other person) to try to reduce the thinking effort.
Therefore users don't:

  • Read manuals
  • Read all the info given within the application
  • Understand all the symbols in icons
  • Read messages that pop-up
Understanding that each and every call that we do in UI design, affects the price that the users pay in terms of mental resources allocation, is the first step towards having much better and usable applications, and this is what this post is all about.

Saturday, December 11, 2010

Going open source

During my M.Sc. studies I've developed an image analysis and data mining software in Matlab.
This software received as its input a set of XYT images of a neuronal network alongside various parameters from the experiment in which these images were taken.
At that stage it allowed the user to do various image manipulations and eventually mark the location of neurons on it.
Once neurons are marked the software extracted the activity pattern of each neuron and mined all the activities of the imaged neurons to find activity patterns of the neuronal network.


I've now decided to keep that software alive and open sourced it. The link to the repository is: http://code.google.com/p/neural-networks-image-analyzer/

Any contribution is welcome.


BTW - an XYT image is an image that is built from repetitive imaging of the same line (think of video as a repetitive imaging of a plane, then an XYT image is the same, but just a single line within the plane is being imaged), here's an example of such an image:


Which originated from the yellow line in this image:

Tuesday, December 7, 2010

Speaking out the music

Speaking the song, not singing it, is something that only few can do right.

Here's William Shatner doing the "Common People" in a way that can be described as brilliantly accurate:



Here's another, an older one, that shows that William Shatner's ability to provide this kind of unique interpretation to a song is not new:



Another, not a song, but still brilliantly accurate performance of William Shatner:

Sunday, November 21, 2010

Internal contradiction

That's what Rudy Gay had to say after he shot a buzzer bitter while being guarded by LeBron James:
"I don't care if James Naismith was guarding me, which would be scary because he's dead,"

Monday, November 15, 2010

Re-using Java

The first programming language I worked with as a professional was Java. It seems to me as an excellent language to start learning real software development (as oppose to learn how to program, for which c is my language of choice).
It teaches you to think also on the architecture of the software (as it is reflected in the package structure). It forces you to understand various design patterns (some of which comes along with the language). It introduces you to the need of working with frameworks (the large set of Java packages, as well as external libraries), and on top that, the rigid typing with the tough compiler are just like two good parents that show you the where are the limits and does not allow you to cross them. I've worked with Java for about 6 years, and learned a lot from it.

Time had passed and I started another project, in which I had to develop in JavaScript. At first, I just wrote Java code in JavaScript (the fact that I worked with the Dojo toolkit made it really easy). Then, I started to learn the difference between the languages, I started to see the power that JavaScript gives you, was overwhelmed by the breaking of almost any limit that Java had taught me. I got to a point where I write JavaScript code in JavaScript,  use its flexibility and its dynamic nature, as well as the various brilliant programming concepts within it.
I crossed the limits that Java taught me, and allowed myself to do so based on the belief that I'll know when to stop and what lines not to cross.
It is so much easier to write software in JavaScript if you know what you are doing (especially how does your code is really read by the machine).
It is much easier to make a big mess too, this must alway be in mind - no parents, you can run freely, nobody will prevent you from failing and falling.

A short while ago I had some free time on my hands, and wanted to learn something new, so I developed a small android application.
In Java.
Initially I thought that it would be just like riding a bicycle, but it turned out to be more like riding a rusty old bicycle, where you cannot almost turn the wheel, all that with one hand tied behind the back.
The package structure is still there, as well as the rich set of libraries and Java packages. BUT, the rigid type system and the compiler are not a directing parents any more, they are more like a bureaucratic figure that forces you to do what you don't want (in order for him to approve your request).
The no dynamic nature make no sense now, sometimes I wanted to polity ask the compiler to move aside and just trust me - I know what I am doing.
It is so burdensome to write software in Java.

Java is great to start with, but it takes you just up to a certain point. And from there, if you do want to expand your abilities, by not just learn new syntax, but rather learn another way of thinking, go with JavaScript, you'll never want to go back.

Friday, November 5, 2010

How cloud computing affects the future of software patents

Brian Prentice blogs with a very high ratio of gems to BS. This time he wrote about the way that the business of software patents will be affected by cloud computing.
The essence of that post is:
  • cloud computing hides most of the software (in a way that does not allows to inspect the software). The only part of the software that is exposed and can be inspected is the user interface (UI)
  • Since that in order to find a software patent infringement, the suspects software must be inspected, the future of software patents business will be in the domain of UI / design related software patents
Very interesting read

Sunday, October 31, 2010

Honest disclosure

I guess that ND stands for "Not really a Doctor"


Thursday, October 28, 2010

Knocking on heaven's door

Music, at its best, allows you to separate between composition and performance. This is what happened with this song.

At the beginning there was Dylan:


Then came Clapton:


It rested for a while, then Guns n' Roses took it to new levels:


Also, noteworthy, Mark Knopfler's version:

Tuesday, October 26, 2010

Go USA

A few americans have holes in their american history knowledge:


My favorite:
Q: Why did Washington crossed the Delawere?
A: To get to the other side  (go to 3:22)

Friday, October 15, 2010

Excellent article on usability

User pathways is an excellent blog that discusses various, non-programming related, topics that are essential for any front-end engineer. Recently great article that discusses usability was added, see here.

Tuesday, October 12, 2010

A slippery slope's beginning


What's next, a restaurant proudly selling a McDonald's big mac?

Friday, October 8, 2010

Web 3.0 - my prediction of how would it be

People have started to talk about web 3.0, ever since the term web 2.0 was coined. I've written before how I define web 2.0, and wrote there about my three pillars idea for technological revolution. Let's try to see how web 3.0 is mapped to this idea.

The first pillar is the technological advance. It seems to me that CORS (Cross Origin Resource Sharing) technology is something that can act as this pillar.

Let me discuss this technology a little, as it is a very new and not really known one.
The dynamics of web interactions is evolving, first there was just a plain request-response mechanism in which browser asked for a page following by the server returning it and no more interaction afterwards. That was web 1.0. Then came the Ajax concept, which removed the "no more interaction afterwards" limit. This allowed ongoing interaction between the client and server. This is web 2.0.
Still,there is a limiting issue here, which is the fact that each page/application is talking only to its own server/domain.
Here enters CORS. The combination of CORS and RESTful server-side architecture allows web applications to be launched from one domain, and from that point communicate with any other server from other domains (and bypass the same origin policy of the browsers), and basically allow multi-domain collaboration without the need to interact with the original server/domain (the application's launch server).

The second pillar, the business model, is yet to evolve. But, I believe that we would witness a new kind of collaboration that would yield new kinds of business models. Sites/domains would provide core expertise and not an entire solution. Think of a domain that just provides storage, another that provide's content and a third one that can provide various visualizations / styles for that content, each has its own expertise which eventually results in better product to the user, and where there are better products, there's money.

As for the third pillar, the platform - my guess is that the combination of PaaS / SaaS (platform/software as a service) with the evolving semantic web may act the platform pillar that would allow the web 3.0 revolution.

Sunday, October 3, 2010

Symbiosis

I noticed it and took this picture (near High park in Toronto).


(click on the photo to see it in larger size)

Monday, September 20, 2010

My dissertation

Finally I've submitted my M.Sc. dissertation.

A short summary of new things I've learned on my own (not courses) during my M.Sc. studies (not in any particular order)

  • Microscopy (especially laser microscopy) and optics
  • Neuroimaging
  • Image analysis
  • Signal processing
  • Statistical analysis and data mining
  • Matlab programming
  • Mechanisms in neural networks
  • Scientific writing
These are not all the subjects I had to learn and use, but they are the main ones.

Wednesday, September 1, 2010

Springsteen & friends

Just when I thought that it is already perfect, here comes Sting and provides his 2 cents to "The River":



Bringing "I still haven't found what I'm looking for" to perfection:



Last but not least - with REM, doing "Born to Run" the way that only veterans can:

Tuesday, August 17, 2010

Not sure what to think about it

really love it or really hate it, one of these two

Thursday, June 24, 2010

Another publication on developerWorks

The article Various client-server communication mechanisms in an Ajax-based web application that I wrote is now published in developerWorks

Here is a list of my previous publications in developerWorks:

A lecture about JavaScript

I was invited to give a lecture about JavaScript in the course "Programming Languages" in the CS faculty of the Technion IIT.

Here are the slides:

Saturday, May 22, 2010

Software development methodologies - how it really works

Here is a short list, you will not regret reading the comments...