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:
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:
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:
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.
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
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)
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.
Read manuals Read all the info given within the application Understand all the symbols in icons Read messages that pop-up
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.
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:
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:
Labels:
image analysis,
neuroscience,
open source,
software
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:
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:
Labels:
funny,
music,
thrilingly beautiful,
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,"
"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.
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:
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
Sunday, October 31, 2010
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:
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)
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
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.
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.
Labels:
ajax,
CORS,
REST,
Software as a service,
technology,
web3.0
Sunday, October 3, 2010
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)
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
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:
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:
Labels:
music,
REM,
springsteen,
sting,
thrilingly beautiful,
U2
Tuesday, August 17, 2010
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:
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:
Here are the slides:
Java script - Programming Languages course
View more presentations from yoavrubin.
Wednesday, May 26, 2010
Saturday, May 22, 2010
Software development methodologies - how it really works
Here is a short list, you will not regret reading the comments...
Subscribe to:
Posts (Atom)