I am working on a browser application, called Direction+. I am trying to enforce the MVC pattern in order to achieve better code manageability. Basically, it is all about separating concerns.
View
All presentation goes into HTML code. Better no HTML code generated in JavaScript. Furthermore, style is separated into CSS. For the concern of performance, CSS could be embedded into HTML to save a pair of request and response.
Model
The states should be kept in JavaScript structs, objects or variables. HTML markups SHOULD NOT be used to store any state other than user input. Using HTML markup for non-user-input state, for instance, a hidden field in form, is a necessary communication mechanism between browser and web server, but not necessary in a browser application.
By keeping all states in JavaScript, it can be assured to only have a single copy of state in a centralised place and the HTML view is purely a presentation of the state.
Controller
Business logic is implemented in JavaScript. A minimal set of code, which are basically event handlers, are embedded into HTML, as entry points into the business logic.
JavaScript should be written in an object-oriented style.
Monday, April 27, 2009
Wednesday, April 22, 2009
Override Tomcat Session Cookie
Tomcat uses HTTP cookie to track browser sessions. By default Tomcat 5.5 generates session cookies without an expiration date (Expires=...), like:
Set-Cookie: JSESSIONID=A39F8F3623D20EF9E66D309E298E87E0; Path=/
using Cookie.setMaxAge(-1).
Without an expiration date, this cookie should be deleted by the browser when it is closed, which is what IE7 does. Thus, even the session has a lifetime, say 12 hours, at the Tomcat side, if the browser was restarted, the session would be lost.
Firefox keeps the session cookie when it restarts.
I use the following code to override this behavior:
// after users log in
// HttpServletResponse response
response.setHeader("Set-Cookie", "JSESSIONID=" + request.getSession().getId()
+ "; Expires=" + getCookieExpiresFormat().formatByAge(age)
+ "; Path=/");
It generates something like
Set-Cookie: JSESSIONID=A39F8F3623D20EF9E66D309E298E87E0; Expires=Thu, 22-Apr-2010 20:07:56 GMT; Path=/
Thus the session can be kept live for any time period even when browser restarted.
Set-Cookie: JSESSIONID=A39F8F3623D20EF9E66D309E298E87E0; Path=/
using Cookie.setMaxAge(-1).
Without an expiration date, this cookie should be deleted by the browser when it is closed, which is what IE7 does. Thus, even the session has a lifetime, say 12 hours, at the Tomcat side, if the browser was restarted, the session would be lost.
Firefox keeps the session cookie when it restarts.
I use the following code to override this behavior:
// after users log in
// HttpServletResponse response
response.setHeader("Set-Cookie", "JSESSIONID=" + request.getSession().getId()
+ "; Expires=" + getCookieExpiresFormat().formatByAge(age)
+ "; Path=/");
It generates something like
Set-Cookie: JSESSIONID=A39F8F3623D20EF9E66D309E298E87E0; Expires=Thu, 22-Apr-2010 20:07:56 GMT; Path=/
Thus the session can be kept live for any time period even when browser restarted.
Tuesday, April 21, 2009
JavaScript and Multi-Threading
Several internet sources, such as this, suggest that JavaScript in browser, runs in a single thread that is also responsible for updating browser UI; and JavaScript code is triggered by events. If this is true, it is not a surprise to see why AJAX has to be asynchronous, otherwise network IO will block the browser UI, i.e., make the UI irresponsible.
There were/are several activities to make JavaScript multi-threaded. For instance, the popular JavaScript toolkit Dojo has some support for multi-threading. And there is even a paper talking about multi-threading in JavaScript.
JavaScript now really becomes a serious programming language. Not only there are a lot of libraries/frameworks available so that programmers do not need to write everything from scratch, but also there are a very good programming support, such as profiling (YUI), unit testing (YUI), logging (YUI), debugging (Venkman for Firefox and for Microsoft Script Editor for IE).
There were/are several activities to make JavaScript multi-threaded. For instance, the popular JavaScript toolkit Dojo has some support for multi-threading. And there is even a paper talking about multi-threading in JavaScript.
JavaScript now really becomes a serious programming language. Not only there are a lot of libraries/frameworks available so that programmers do not need to write everything from scratch, but also there are a very good programming support, such as profiling (YUI), unit testing (YUI), logging (YUI), debugging (Venkman for Firefox and for Microsoft Script Editor for IE).
Monday, April 20, 2009
Browser Application
I am working on a browser application, which I already made some good progress and will put online after it is refactored in object oriented JavaScript.
What I called browser application should have the following three characteristics.
What I called browser application should have the following three characteristics.
- A browser application's runtime environment consists of a web browser and internet only. So if you can surf the net, you can run it. Of course nothing prevents it from being deployed on a web server for people to access. Note. in that case, the web server is not required to have any extra support except static HTTP hosting.
- A browser application uses AJAX to provide functionalities. With so many powerful AJAX APIs around on the internet, a browser application can have some amazing functionalities.
- A browser application can easily be a rich internet application given that now JavaScript, as well as other client side technologies, have already become so rich in terms of presentation capability.
Monday, April 06, 2009
Check Java Thread CPU Usage
Today I came across a question: if an application occupies 100% CPU time, and its source code is extremely large so that reading its source code to find what is going on may not be an option; what should we do to find out the problem?
Let's assume the application is written in Java.
First, we can use jstack combined with jps to print out threads' stack trace, which gives us a good idea about which methods are being executed.
We can also use jconsole with some plugin to display threads' CPU usage. The jconsole plugin is based on JTop (
Let's assume the application is written in Java.
First, we can use jstack combined with jps to print out threads' stack trace, which gives us a good idea about which methods are being executed.
We can also use jconsole with some plugin to display threads' CPU usage. The jconsole plugin is based on JTop (
/demo/management/JTop).
Add to Version Control before Commit
I am using Eclipse 3.4.2 Ganymede plus Subversive 0.7.7. If I try to commit some newly added files, i.e., they are not under subversion control yet, Eclipse simply becomes irresponsive.
New files MUST be added into version control first, before they can be committed.
New files MUST be added into version control first, before they can be committed.
Subscribe to:
Posts (Atom)