Scrum in 10 minutes:
December 11th, 2008I just watched this Scrum explanation video; A great summary of the basic concepts of Scrum.
Thanks to Hamids at http://shipsoftwareontime.com/ for creating this video.
I just watched this Scrum explanation video; A great summary of the basic concepts of Scrum.
Thanks to Hamids at http://shipsoftwareontime.com/ for creating this video.
As avid readers will know, I am a fan of jQuery. There are lots of plugins to ease development, but one thing I haven’t been able to find is a date time picker. Yes, the UI plugin contains a date picker, but no time component.
This won’t do, so I made one!
It is a fork of Dynarch.com’s (LGPL) DHTML Calendar v1.0, which ceased LGPL development in 2005. I have used this widget successfully in many projects, and a colleague wanted a jQuery datetime picker. So I present to you:
The demonstration page explains its usage (super easy). The initial codebase (0.1) is little more then a jQuery wrapper, but the underlying code is well structured, so modification is not too hard. The original code is written in an older javscript style, and I hope to improve that as well as fix a few bugs.
Why not give it a try, and start submitting those issues; if its in use, I have a reason to continue developing it.
Google has built a system that hosts the most popular Javascript libraries on their vast network. This means developers can link to Googles’ hosted libraries, saving bandwidth (at Googles’ expense)
Here is the page explaining: http://code.google.com/apis/ajaxlibs/documentation/
<script src="http://www.google.com/jsapi"></script>
<script>google.load("jquery", "1.2.6");</script>
Here is the list of available libraries as of todays posting:
name: jquery
versions: 1.2.3, 1.2.6name: jqueryui
versions: 1.5.2name: prototype
versions: 1.6.0.2, 1.6.0.3name: scriptaculous
versions: 1.8.1, 1.8.2name: mootools
versions: 1.11, 1.2.1name: dojo
versions: 1.1.1, 1.2.0name: swfobject
versions: 2.1name: yui
versions: 2.6.0
Thanks, Google.
Update 11/12/2008:
There is an inconvenience using the google.load(…) method. As this needs to evaluate, request and load, you can’t (reliably) use jQuery(document).ready(…). Google provide their own callback; google.setOnLoadCallback(…).
While the callback is good, it means that the google.load(…) technique is not a straightforward replacement, you also need to convert your jQuery(document).ready(…) methods. As jQuery chains these, I sometimes have more then one declaration on a page.
For example, a JSP might server-side include a couple of widgets, each of which “bootstrap” from their own jQuery(document).ready(…) method. While its not hard to change, it still takes time, and breaks the drop-in-replacement endorsement.
Thankfully, Google also allow you to link straight to their hosted versions. The documentation link above lists all the library URLs; here is the jQuery code:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
Using this technique, you can still take advantage of the system. In particular:
Thanks to this article for pointing out this option.
Last week I attended JAOO 2008 in Aarhus, Denmark (Java And Object Orientation). The conference was well organized, and covered a wide range of topics. It was great to be able to listen to many opinions on the future of software development, as well as what is being done today.
I attended 18 talks in all, and there were a few major themes that recurred.
There are a few talks that really interested me, and I’ll cover them here.
I really enjoyed this talk, although I noticed that the project name was misleading. The mistakes were not to do with the architecture itself, but with the edges of a project that can get neglected or forgotten. Never-the-less, it made for a great laundry list of issues to make sure all your projects have an answer for. Indeed, Eoin himself noted in the summary for the talk
“In this talk I’ll share some of the pitfalls that I’ve encountered in my experience as a software architect and in doing do, hopefully make sure that you avoid making just the same mistakes on your projects.”
So, here is my summary of the 10:
I know in the past that I have neglected some of these non-functional and tangential considerations; the implication from this speech is that Software Architects must manage many more areas then just the functional development and tool choice. For me it reinforces how architects must work very closely with Project Managers and clients to architect a complete and robust solution.
So how do we get proper 2-way communication between a browser and a server using HTTP? Classically this functionality, known as Comet programming, has been achieved with some sneaky emulation techniques. These include server polling, holding long-term HTTP connections and using hidden iframes. The existing solutions have costs, however. Polling adds lots of unneeded requests to a server, and holding connections open causes many open connections for the server as user count rises. Kaazing has taken a commendable approach to solving this limitation of HTTP.
First off, they contributed the WebSockets section to the HTML5 standard. This specifies a JavaScript API and DOM tag (<eventsource>) to open a new connection, allowing bi-directional communication. This connection uses the standard HTTP protocol, and actually changes the wire protocol from HTTP to WS after the connection is open. This means that connection can be open through proxies and firewalls without needing admins to open the network for this communication.
This means that there is a standardized way to code proper bi directional communication without thinking about the (tricky) details.
This is great, but HTML5 isn’t yet finalized: so how do we get browsers to support this? Its a chicken and egg problem - you need browser support before you use a feature, and you need a feature to be used to encourage browsers to support it. Kaazing has taken an approach that really resonated with me; I like to call it fake it till you make it.
Kaazing has a script that checks for existing WebSocket support, and if not there, it adds Kaazings implementation of the API. This means that developers can code using the standardized API before the browser has native support! Kaazing actually has multiple implementations of WebSockets, and their insertion script picks the best implementation for the clients browser. If a client has Flash installed, this is used as a bridge. If there is no Flash, Sliverlight or other bridge with proper socket support, it will have to default back to an implementation using long connections or polling.
This means that the solution works for everyone, even the 1% who don’t have Flash or similar installed. Now instead of polling or long connections of every customer, you only need to use this old tecqnique for 1% of your clients - much easier to deal with. Jonas mentioned that one browser already has native support for this API in one of their nightly builds (Maybe the newest Firefox? Opera? Can remember sorry).
Of course, you need a server that knows how to handle the protocol upgrade - this is Kaazings’ commercial offering: Kaazing gateway. In fact, their product can be used to allow any TCP traffic to be routed over HTTP, allowing the same proxy/firewall benefits for RIA and client-server software. The gateway can simply expose a normal network socket and any TCP content can be transmitted over the open connection. Much better then making your software have to make lots of HTTP requests, and the server needing to convert, package and send back each request in a textual format.
update: Look at http://orbited.org/ and/or http://js.io/ for other implementations of WebSockets.
The concept that really resonated with me is the fake it till you (they) make it approach. I have seen this a few times already in the browser space, such as in these projects:
A standardized approach to Comet programming is great; a solution to browsers’ chicken and egg adoption issue is even better!
The Lively Kernel is a project from Sun laboratories. It is an environment coded completely in JavaScript and SVG. It is not a production ready tool, but an interesting research project. The environment is designed for visual element creation, cloning and enlivening via scripting. The environment allows the end user to add scripting to any visual element and modify any existing one.
I don’t have much else to say about it - it works in all good browsers, and the tutorial demonstrates its features and concepts well.
Of interest to me is the idea that SVG could be used to develop richer applications that still use standards (ECMA, SVG in this case). UI design can be freed up with SVG, and good libraries would make an SVG based UI easy to develop. Coupling SVG with WebSockets would allow you do develop pixel perfect RIAs that could rival solutions such as Flex; I think these are the 2 major areas that traditional websites suffer in comparison.
Going in, I knew this was a sponsored talk. I was expecting lots of PR and marketing fluff, but I was pleasantly surprised. Yes, Azul make high end Java appliances (more on them later) but the talk was about real-life Java garbage collection. I’m not going to cover it here as you can find better information elsewhere, but we covered stuff like concurrent, parallel garbage collection and fragmentation of the heap.
In this discussion, we were lead to an important conclusion: Java sometimes needs to pause execution (phrased: stop the world) to garbage collect and defragment the heap. High volume and high performance systems simply cannot afford this pause, and its frustrating even for regular Java systems. You can increase the heap size but this only delays the problem AND makes the pause longer. Larger heap == larger defragment time.
Azuls’ hardware gives the JVM garbage collector hardware mechanisms to work in realtime in parallel, giving your processes 100% cpu time with no stop the world interruptions. Oh, and did I mention that you can have heap sizes of > 500Gb ?!!
Their hardware is the CPU/memory equivalent of NAS; you have a regular server running a tweaked version of Sun Java. This version is a wrapper JVM which delegates all its work to the JVM running on the Azul CPU. As far as the regular server knows, it is a completely standard JVM. (albeit a very fast one with an abnormally large heap!)
The Azul hardware ships with many cores, and the CPU/memory can be logically divided into multiple JVM backends. I didn’t inquire into pricing, but I imagine that a box with 54×16 CPUs and 768GB of memory is going to cost a bit. Still, a very nice piece of hardware, and a good discussion on the art of garbage collection. Azul systems, you are welcome to send me some sample hardware so I can play more and do a better writeup…
These summaries are for some of the sessions I enjoyed, but there were many more interesting talks: Google Chrome and its JavaScript engine, the OpenSocial API, Googles’ App Engine, JRuby and others. I really enjoyed the talks, but also being able to socialize with so many different (smart) people means that its hard not to have an interesting time.
On one hand, conferences like this are really humbling. Listening to knowledged talks on so many subjects makes me feel like a fool only scratching the surface, and makes me appreciate how much more there is to learn. On the other hand, the whole experience is so inspiring! I suppose I’m inspired to continue scratching…
I have talked about PE before, but this is a interesting approach to ensure that the browser supports your enhancements - test for support!
http://www.alistapart.com/articles/testdriven
It tests specific CSS support by injecting DOM elements then measuring the injected element to see if it renders correctly. It then stores a cookie with the results of the support, so this test need only run on the first visit. It will switch to “enhanced” stylesheets, and your PE script should apply enhancements only where support is available.
It also supports extension for testing specific cases, if you use a technique that is not covered in the core tests.
On an unrelated note, congratulations to WebKit for achieving full Acid3 compliance!
Google let the cat out of the bag a few days early: They accidentally announced their secret project to build a new browser experience. It is open source (though the initial release is for Windows: Linux and Mac promised soon) so ideas (and code) can be shared between different browser implementations.
They have a few great ideas that, if implemented well, could be very good.
I welcome another player into the browser market, and am very excited to try it out. I do, however, have a few concerns:
You can read the (leaked) comic explaining its features in a clear and smart way. I expect Google were planning to announce it with more then just this comic, but it got out early and forced their hand. Perhaps this is why there is no Linux/Mac port yet? Here is the link, anyway:
http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html
This is the project homepage, with the Windows beta available for download: http://www.google.com/chrome/?hl=en
SSH keys allow you to login via SSH without needing to type your password in each time. Here is a quick summary of what you need to do:
sudo apt-get install openssh-client
install with update for ensuring the newest version.
ssh-keygen -t dsa -f ~/.ssh/id_dsa
~/.ssh/ as id_dsa.pub (public) and id_dsa (private)ssh-copy-id, to make this easy. From the local machine:
ssh-copy-id -i ~/.ssh/id_dsa.pub user@target.com
~/.ssh/authorized_keys on the target system.
scp ~/.ssh/id_dsa.pub user@target.com:~/
ssh user@target.com
~/.ssh/authorized_keys exists. If not create a new (empty) file and set its permissions:
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
rm ~/id_dsa.pub
This quick post is only to link to the presentation I recently did on jQuery.
Unfortunately you don’t get my explanation of the examples, but hopefully they are obvious. Any questions welcome.
Update: I recently stumbled on this great HOWTO for creating your own plugins - very easy!
During a recent conversation with a colleague at work, positive mention of my Linux Evangelism was made. I had never though about this, but I suppose its somewhat right. I do talk passionately about GNU/Linux, and Kubuntu is my current flavor. I think its a great way to learn more about your hardware, and gives you complete control of your system. For those of you who I have turned on to Linux, check this site for equivalent apps:
http://linuxappfinder.com/alternatives
For example; for Adobe Photoshop; it has these recomendtations:
Handy for those people who are just making the switch and don’t know the ecosystem of software very well. Otherwise, Wine can run many windows applications….
As I blogged about previously, I have a few complaints about Adobe Flash. One of the big problems that affect me (and all Linux users), has been fixed in the new v10 beta. Here is the announcement from the official Flash-Linux blog:
http://blogs.adobe.com/penguin.swf/2008/07/turkish_localization_also_wmod.html
They have finally implemented Wmode, so HTML elements can display over the top of flash - it now respects z-index correctly. No more dropdown menus hidden by the flash banner below. Here is an example of the problem taken from http://pathe.nl/:
My current workaround for sites like this is to use adblocker to remove offending Flash elements. Even though I’d prefer not to need Flash, its great to see Linux support gaining momentum. As mentioned in the announcement, it helps ” … bring Linux web browsing up to ~2002 standards.”
Unfortunately, its Firefox 3+ only, and I haven’t yet made the switch…
Update: They have also published the SWF file spec, so search engines etc. can read (and index) their content - another of my Flash grumbles…
Update 2: The Firefox guys are working towards support for the WHATWG video and audio elements (i.e. a <video> tag ), making one of the biggest use cases (video - you tube etc.) have some competition from within standard. Also, note the domain of the FF dev guy; .nz !
http://www.bluishcoder.co.nz/2008/07/video-and-audio-element-patch-has.html