The tech press (example) is reporting that Adobe is developing some kind of cut-down version of Adobe Photoshop
that will be delivered as a browser instead of desktop application. As you might expect, since these articles are generally aimed at people who are technically-aware but not necessarily programmers, most of these articles focus on what they see as the big picture. I might sum them up:-
- Adobe’s new offering will be software-as-a-service
- It will have reduced functionality compared to the desktop version of Photoshop
- It will be free and supported by advertising
And some of the obvious big picture questions:
- Will customers like the software-a-service model?
- Will graphics professionals want to use the online version?
But as a programmer, while those types of questions are intriguing, they aren’t the real issue that is bugging me.
My question is this: How is it going to work?
Now if you were to ask the stereotypical non-programming IT manager (sort of the like the pointy-haired guy in the Dilbert Books
), he would probably tell you that is just some tedious "implementation detail", that Adobe’s super-smart programmers are sure to solve. In other words, they wouldn’t think that it’s not the kind of thing that these big picture articles need to cover.
But here’s the thing: I’m not just asking this question out of idle curiosity. I’m also asking it because sometimes the answers to these "implementation details" have huge implications. They set the parameters of what is possible, and therefore can give you some very strong hint abouts what type of product will be emerging.
So let’s think about it for a moment. In the old days of the web, you had to press a submit button or click a link to send info back to server. Now, of course, we’ve moved forward, and most serious applications which run in a browser are generally Ajax (Asynchronous JavaScript and XML) based. In Ajax applications, there is usually a fair amount of intelligence running within the browser (for example to generate a sophisticated user interface), and data is sent back to the server (which of course includes its only logic too), as the name implies, asynchronously, i.e. without the user having to take some special action.
I would think it’s almost certain that the online version of Photoshop will be based on Ajax. It’s the current vogue technology for web applications. It’s probably the technology that will help produce the most interactive user interface, which is of course very important for a graphics program. And Adobe have already developed some experience with it.
So how might an Ajax-ed Photoshop work. I can see three main alternatives:
- The master copy of the image is always stored on the server. The user’s browser simply contains the code for displaying the current image, and the user interface for manipulating it. Whenever the user chooses a graphic operation that changes the image, the server makes the changes to its master copy, and user’s browser’s is updated.
- The master copy of the image is initially stored on the server. The user’s browser downloads the image. When the user chooses a graphic operation that changes the image, the changes are made within the browser copy, and at some point the server is updated with the new version of the image from the user’s browser.
- The master copy of the image is initially stored on the server. The user’s browser downloads the image. When the user chooses a graphic operation that changes the image, the changes are made on the client and its screen updated, and the server is told to do the same operations to its master copy of the image.
These options are not in fact mutually exclusive. For example, one option could be used for some graphic operations, and another option for other graphics operations. However, the program would be simpler to develop, if one method, ideally the first one (which is the simplest in terms of coding) were used throughout.
So Adobe could just use method 1, problem solved, right?
Sorry, wrong. One of the really cool things about Photoshop, is that it includes a highly interactive user interface. For example, if you want to brighten or sharpen an image, you can fiddle with a slider and see your image start changing immediately. If Adobe simply relied on method 1, the system would probably be too slow even for people with super-fast internet connections: every little nudge of the slider would result in a request to the server, and a new image being sent back.
Unfortunately methods 2 or 3, apart from the additional complexity they add, also have some problematic issues. The biggest issue here is whether JavaScript would be up to the job required for it to do image processing calculations on large images. For example, adjusting an entire image’s appearance may require several calculations per pixel, and therefore a 1000X1000 pixel would require millions of calculations. Could JavaScript do this (say) once per second in response to the user moving a slider in the GUI? While Adobe undoubtedly has some very clever programmers, and of course PC hardware is getting better and better all the time, I’m skeptical about whether this type of problem can be solved in the short-term.
So my predictions (okay guesses) are:
- The online version of Photoshop will be implemented as an Ajax application
- The interactivity of the user interface will be significantly reduced as compared to the desktop version (this is in addition to functionality that Adobe chooses to omit for whatever reason)
If you’re a programmer, you’ve probably read this far, and even if you don’t agree with every step in my chain of logic, you’re probably thinking to yourself: "Why is he pointing out the obvious?".
My answer: What’s obvious to you and me, doesn’t appear to be obvious to much of the tech press. Additionally, these "obvious" facts, also give an indication of the likely answers to some of the big picture questions raised in the press.
- Will graphics professionals want to use the online version? My prediction: No, because it will lose all sorts of interactivity (as well as probably whatever functionality Adobe omits) as compared to the desktop version.
Update:
I’ve got lots of comments here saying that Adobe will probably use Flash and Flex (Flex being a bunch of technologies that allow better Internet applications using Flash). Perhaps they will, although I still suspect there will be some Ajax involvement in the user interface.
People who know considerably more about the subject than I do, tell me that Flash can manipulate bitmaps rather better JavaScript. No doubt they are right. Is it good enough to quickly manipulate a large image taken with digital camera? I don’t know - it’s possible that it could be - or failing that, Adobe, which owns Flash, could improve it until it is.
But even if they use Flash and Flex, and even if Flash is able to manipulate large images quickly enough, it still leaves the question of how they are going to deal with sending bitmaps back and forth between server and client. Which leads us back to the methods 1, 2 and 3 which I talked about in the article. Of course with a more powerful browser application, methods 2 and 3 become more practical… potentially allowing a more interactive user interface… but will it be as interactive as the desktop Photoshop, given current Internet speeds and all the round-trips required?