Archive for category tech

Website Technical Design Principles

I’ve recently become involved in assiting an organisation to add a little bit of technical rigour to their brief for the redesign of their website. As a part of this I’m developing some technical principles to guide the technical requirements. I’ve listed the principles below:

  1. The website shall be developed in such a way as to allow maintenance by persons other than the successful bidder.
  2. The design of the website shall allow future enhancements to take into account changing requirements, technology and standards without requiring a rewrite.
  3. The website shall allow the content to be edited and maintained by the client without the need to engage external parties to do so.
  4. The website shall be accessible to the widest possible audience and shall not prevent access by people with disabilities or access by persons using commonly used technology.
  5. The website shall be designed in such a way as to promote favorable ranking in common search engines.
  6. The website shall be designed to prevent modification of its contents by unauthorised users.

I think these form a pretty good basis for good technical website design.

Tags: ,

1 Comment

Announcing Project Tintagel: A Grails CMS

I would like to announce that I have created a Google code project to start putting together the ideas for the Grails CMS that I have devised. The name of the project is Tintagel. Why Tintagel? Well Tintagel will be loosely based on the ideas in the Drupal CMS. As the story goes when Dries Buytaert was choosing the domain name for his CMS project he mistyped the word dorp which is Dutch for village and ended up with drop.org which later became Drupal (see the Drupal history for the full story). Tintagel is based on the Grails framework and the village most associated with the legend of the Holy Grail is Tintagel in Corwall UK.

I am definitely looking for help on this project as the scope of the ideas I have is much greater than the time I have available to work on it so if you have the time to help drop me a note in the comments.

Tags: , ,

1 Comment

First Thoughts On a Grails CMS Object Model

I’ve been thinking of writing a Grails based CMS that will be loosely based on Drupal. The main aim will be to have a very clean MVC separation and to add features using Grails plugins. To that end I have been thinking about an object model for the site which I have drawn below:

A Template is a layout of regions. Each theme will have a number of templates (which may be only one) A region can have an existence apart from a template so a region on a particular template is called a Template region. Each template region has a context and can have 0 or more blocks to display content. The blocks use the context to decide what to display. A page is an instance of a template with a number of region instances. Each region instance can have a mode such as view or edit.

I haven’t yet decided which parts of this object model will not be represented in the database but rather in template files as tag parameters.

Tags: , , ,

2 Comments

Grails and Netbeans: How do I Put Domain Classes in Packages?

I downloaded NetBeans to work on my open source project in Grails and one of the first things I noticed is that the Grails plugin doesn’t support creating domain classes in packages. This seems a little bit weird to me and it has left me wondering if I should copy the classes manually into package folders and add the import statements or whether I should give up and have them in the default package. The plugin seems to recognise domain classes in packages just fine but it won’t let you crete them through the wizard. Weird.

Tags:

1 Comment

Oracle Coherence: An Interesting Beast

I attended a seminar yesterday that was all about the Oracle Coherence product. What is Coherence? In short Coherence is a scalable, distributed object cache with added functionality to provide filtering, triggers and updates. There is also the capability to write objects from the cache to a backing database store using Hibernate or JPA. The scaling and fault tolerance are particularly impressive with each cache object having an easily determined location meaning no single points of failure for a registry server and little, if any, performance degradation when servers are added.

I foresee Coherence being useful for applications that need to scale significantly and that need to use an in memory cache to speed performance.

The programming model, though, is more problematic. Basic cache access is achieved through a Map interface where objects are associated with keys. Added to this are methods to listen to events, filter the cache and update it. The API for these operations reminded me a lot of Groovy closures and their operations on collection classes. The issue comes with object relationships. The API, as far as I can see, makes no provision for the storing of relationships between objects in the cache. This means that domain objects stored in the cache need to be aware of how to obtain related objects from the cache. Serialization methods need to know what the serialization boundaries between objects are and how to save related objects. No doubt there would be ways to encapsulate this access into a framework to remove the dependencies from the domain objects but be aware that this is a very different kettle of fish from the ease and convenience that we are used to from Hibernate and JPA.

All in all Coherence seems like an interesting addition to the Architect’s toolkit that may just be the right choice for interesting performance and scaling challenges.

Tags: , , , , ,

No Comments

Why Sermon Podcasting Fails

The guys over at Geeks and God have a new podcast series up on podcasting and one of the episodes deals with sermon podcasts. One of the issues I have with Christian podcasting is that I can never find the good stuff. There are thousands of churches out there that are just putting their sermon audio out there as a podcast and the Geeks and God guys explain very well why this isn’t very effective, basically because the podcasts aren’t very targeted and don’t really work for people who don’t have a connection to the church involved. Thus they are ineffective as outreach tools.

Churches doing or considering podcasting would do well to have a listen to this, I think it has some good insights.

No Comments

9 Killer Features I Want in a Task Tracker

OK I give up. There are a bunch of features I have been carrying around in my head for a killer task tracking application for a while now, hoping one day to be able to implement it. I now realise that I am unlikely to ever get the time to develop this software and that I really want these features now so here they are, free for anyone to implement. If you want to give me credit or even some renumeration then I’m not going to say no but that is not a requirement for using these ideas. Here is my list:

  1. Predecessors and Successors. Mostly what I want is to reduce my list of outstanding tasks to only those that I can work on at the moment so the whole list doesn’t freak me out so much. By filtering out tasks that have unfulfilled prerequisites I can reduce the list to those tasks that I need to get done so as to allow the successor tasks to be achieved.
  2. The ability to split tasks. Often when doing GTD you realise that the task you have set down is not granular enough and that you need to split it into sub tasks in order to make them next actions. I want the ability to easily split a task and for all of the predecessor and successor information with other tasks to adjust accordingly.
  3. Resources Rather than Contexts. GTD, because it was envisaged for paper based tracking systems, allows tasks to be placed into a single context, the idea being that you look at all of the tasks that can be done in any context you are in and do those. This is a way of reducing the task list. I find that I have tasks that can be done in multiple contexts. I can make phone calls anywhere I have a phone which is everywhere these days, not just in a specific context. In thinking about this I realised that tasks depend on resources and that contexts have resources available. Resources can be something you will need to do a task, such as a phone or an internet connection; a person; a specific place or something less tangible such as work time or personal time. Contexts have a set of resources associated with them. It is the match between resources required and resources available that determines what tasks you can do in a context. For example on the bus on the way in to work I have a phone, personal time and an iPod but I don’t have a privacy resource. Resources could be modeled using tags but there would need to be a way to filter for tasks containing multiple tags to represent the contexts.
  4. Task Urgency Value. GTD abhors the use of task priority to determine which tasks to do next but it also introduces the idea of a tickler file for tasks that need to be done on certain days. This doesn’t allow enough flexibility for me because I have some tasks that have a hard date and some tasks that can be more flexible. For example I have a meeting every Monday that I need to have prepared for by that date but if it has been more than a week since I have vacuumed my floors one more day won’t hurt too much. My idea is this: introduce a task urgency value which gets calculated based on the date when something ought to be done and how hard that date is. Urgency should be calculated using some sort of mathematical function like an exponential function so that the closer the date the higher the urgency gets. Urgency would increase slower for softer target dates and faster for harder target dates. In this way tasks that need doing first would automatically bubble to the top.
  5. Task Templates. In life there are situations that occur that will cause the same set of tasks to occur over and over again. For example my checklist for things I need to bring to my life group meeting. I would like the ability to have that list of tasks to be added to my task contexts automatically using a template prepared earlier. This would save me time and make sure that everything is covered.
  6. Repeating Tasks. I want the ability to have a task or a group of tasks via a template repeat. For example tasks around the house need to be done periodically so if I have cleaned the bathroom for this week then I want a new task to remind me to it again in a week’s time. Fly Lady has built a business on this very concept. The new task shouldn’t be added until the first task is completed. Ideally this should be combined with task urgency values to allow some flexibility as to when tasks are completed. Update: There is an application called Sciral Consistency that does this. it doesn’t integrate with anything (such as RememberTheMilk) but they are on the right track.
  7. Add Tasks From Everywhere. I want to be able to add tasks from everywhere and have them pop up in a holding area ready for me to review and categorise them. I want to be able to tag sites in del.icio.us with special tags to remind me to follow up (RSS?). I want to be able to SMS, email and IM tasks (Imified?). I want to be able to add tasks somehow from my phone and my PDA.
  8. Get Task Lists From Everywhere. I want to be able to get my task list from any device I have, my PDA, my phone and any PC I happen to be on.
  9. Wait List Tasks. I want to be able to delegate a task to someone and have it disappear from my active task lists but I then want it to pop up again to remind me to follow up that person automatically. A threshold based on task urgency value might be appropriate or, more simply, a number of days before a due date.

Any or all of these ideas could be implemented independently although some of them obviously have synergies between them.

So how about it? Can anyone pick these features up and run with them?

For more information I can be contacted either via the comments or via the temporary email address (20 emails only) taskideas.20.yellek@spamgourmet.com.

No Comments

Review: HiTask.com

HiTask

Category: Tool / service

Topic: productivity

Year created: 2007

Overall rating: 4 out of 5
Content rating: 4 out of 5
Design rating: 4 out of 5
Navigation rating: 5 out of 5

I’ve been using HiTask for a couple of months now on my quest to find the perfect Getting Things Done (GTD) application. Given that I have yet to really implement GTD in my life you might take my comments with a grain of salt but hopefully I can give you enough information to help you decide if you want to give it a go.

If you are familiar with GTD you will recall that for day to day operation GTD uses the concepts of projects, next actions and contexts. HiTask supports next actions (called tasks) and projects directly, allowing you to group tasks into projects. Contexts are supported through allowing items to be tagged, each tag being a context. In order to view items in a single context you can filter items into those belonging to a single tag. GTD also addresses the concept of next actions due on a given date by introducing the concept of a tickler file with folders for each day of the month. HiTask supports start and end dates and times for each item.

HiTask also has extra features which extend the basic GTD functionality. In addition to tasks you can also add meetings, reminders, notes and birthdays as items, all of these items being taggable as well as having dates assigned. Meetings can be created as recurring. On the left of the page there is a calendar view of all tasks and items due that day. Items can be assigned to different color groups.

HiTask supports collaboration by by allowing items to be assigned to other people. People can be invited to join as teammates but in order to see all tasks in a workgroup (as opposed to just your items) at least one premium account is required. Workgroup size is limited to 3 users in the free edition. Other limitations of the free edition include a maximum of 100 items and 25 proijects. Premium accounts are USD15 per year.

One of the areas where HiTask really shines is in its support for open standards and integration. I use the iCal integration to mirror my HiTask items and recurring meetings onto my Google Calendar. I still haven’t managed to crack the ultimate calendar synchronization by getting my Outlook calendar synched into Google (Plaxo promises but is not delivering at present) but having a view of HiTask on Google calendar is nice. You can also get an RSS view of your items which lets you see your own or other items in a feed reader such as Google Reader.

One of the big issues with services like this is obtaining your data back if you want to move it somewhere else. HiTask offers a CSV export facility which at least allows you to get a copy but it might be difficult to import somewhere else. I don’t know if there is an open standard for task data to use so I suppose that CSV is a good default.
Those are the features but what about the user interface? I find the HiTask user interface easy to use and well thought through. There are a number of nice AJAX touches like being able to drag and drop items into projects and onto the calendar to set their due dates and times. Items can be grouped by project, color, date and user with categories being able to be expanded to show the items in each one.

What don’t I like? Well I sometimes want the ability to view items that have two or more specific tags and HiTask only allows me one tag filtering. I also want some sort of ability to view only those items that I have to do next and not those items that are waiting on a next action. This would reduce the clutter when I am trying to decide what to do next. I also find that I have both work and personal projects going and that sometimes I want to only see the work projects but I can’t tag or filter projects.

My concusion: HiTask is a solid performer which offers enough to implement GTD online although there are still some things for the development team to work on.

Tags: HiTask productivity task web20 gtd

No Comments

ZoHo Chat: Why does it Exist?

I just had a quick look at the Zoho Chat application and I can’t for the life of me think what it might be useful for. I’m generally a fan of Zoho applications, Zoho Creator is fabulous, but the chat application seems less than useful.

The major flaw is that it doesn’t interoperate with any other chat services. I have ID’s on Yahoo, ICQ, AIM and MSN because of various groups of friends but I don’t see the value in asking someone to join Zoho Chat just so they can talk to me. Zoho chat is just too obscure to generate a relevant critical mass of users to chat with.

Zoho chat does offer the possibility of adding a chat widget to a web site which the aforementioned chat services do not but if you compare that to Meebo and the MeeboMe Widget it doesn’t really stack up. Meebo does interoperate with all of the popular chat services and offers a lot more features than Zoho chat.

The only redeeming feature of Zoho chat is possible future integration with the Zoho online office suite. Users collaborating on a document being able to use instant messaging to communicate from within the document would be an advantage but only a limited one.

All in all just go straight to Meebo rather than using Zoho Chat.

No Comments

Joel Spolsky Forgets Google GWT

Joel Spolsky has an interesting piece up over at Joel on Software comparing the development of the web with the development of computer software from mainframes to PC’s. It’s an interesting article and well worth a read. One of the points he makes is about how a new web framework is needed to iron out the differences between the browsers and remove incompatibility problems from the minds of web developers:

Somebody is going to write a compelling SDK that you can use to make powerful Ajax applications with common user interface elements that work together. And whichever SDK wins the most developer mindshare will have the same kind of competitive stronghold as Microsoft had with their Windows API.

Great idea. Except that Google has already done such a thing. It’s called Google Web Toolkit and it is available now. Sure it’s early days for GWT but it offers exactly the sorts of capabilities that Joel is talking about:

Google Web Toolkit (GWT) is an open source Java software development framework that makes writing AJAX applications like Google Maps and Gmail easy for developers who don’t speak browser quirks as a second language. Writing dynamic web applications today is a tedious and error-prone process; you spend 90% of your time working around subtle incompatibilities between web browsers and platforms, and JavaScript’s lack of modularity makes sharing, testing, and reusing AJAX components difficult and fragile.

GWT lets you avoid many of these headaches while offering your users the same dynamic, standards-compliant experience. You write your front end in the Java programming language, and the GWT compiler converts your Java classes to browser-compliant JavaScript and HTML.

So when Joel uses Google as his example of a company that is going to be blindsided by the new web application framework:

But then, while you’re sitting on your googlechair in the googleplex sipping googleccinos and feeling smuggy smug smug smug, new versions of the browsers come out that support cached, compiled JavaScript. And suddenly NewSDK is really fast.

And while you’re not paying attention, everybody starts writing NewSDK apps, and they’re really good, and suddenly businesses ONLY want NewSDK apps, and all those old-school Plain Ajax apps look pathetic and won’t cut and paste and mash and sync and play drums nicely with one another. And Gmail becomes a legacy. The WordPerfect of Email. And you’ll tell your children how excited you were to get 2GB to store email, and they’ll laugh at you. Their nail polish has more than 2GB.

I think that he misses the point. Google isn’t going to be blindsided by the new web framework, it’s developing the new web framework. It’s GWT and it’s here now.

Update: Joel Spolsky has replied to the many people who emailed him about his post suggesting web frameworks, stating his criteria for one of them to be his “NewSDK”. The reply is in the middle of his Princeton, Philadelphia and Boston Trip Report (3rd last paragraph)

No Comments