I have an intent to patch an AfterTheDeadline server solution, either independently or with my students, depending on what they determine is next for them.

AfterTheDeadline clients, for OpenOffice, for example, check grammar, style, spelling. It's a much more comprehensive tool than Microsoft offers. (Incidentally, I usually instruct students to turn grammar checking off in MS products because the efficacy just isn't there; with AfterTheDeadline, my tests suggest the result are really quite helpful.)

AfterTheDeadline uses an open server on the web by default; however, it may be configured to use a local server. Custom rules can be created to accommodated the style guidelines of a particular organization. Clients for other application can be created with the help of very strong documentation and community support so AfterTheDeadline clients.

I'm after feedback at this point: Is this a good candidate for a patch? I want to make a good time investment, whether for my team or myself.

I'm spoiled by fantastic feedback - have at it :)

Rik Goldman

Liraz Siri's picture

JedMeister mentioned spellchecking as one of the missing features on the website and I've had that on my todo list for a while now but alas all of the solutions I looked at were disappointing in some way.

Afterthedeadline looks much more powerful, and I love that it does more than just simple spell checking. According to the documentation it should integrate well with the website's WYSIWYG CKeditor. Also, I skimmed the technical paper and it looks like there is quite of bit of sophisticated technology behind the grammar and styling analysis.

The only trouble with Afterthedeadline is that it is a bit of a resource hog. But this actually makes it a good candidate for an appliance as it would make sense to run it on its own and allocate resources as required.

Great find!

Jeremy Davis's picture

Jokes aside, I think it's well worthy of a patch. It's probably not going to be a high volume download but invaluable tool from what I can see! Looks good!

Liraz Siri's picture

I've integrated AtD (after the deadline) with the website via the CKeditor plugin. You'll notice it's the first button now. It's a pretty neat service. It does more than just spell checking, though I am thinking about turning off the more advanced bits. Take it for a spin and tell me what you think.

On a side note, implementing this was a bit harder than I initially supposed due to an incompatibility with the newer version of CKeditor we've been using. Fortunately I managed to debug the issue with Chrome's excellent built-in developer tools.

Update: OK, this was premature. There are a few showstopper bugs, so I'm rolling back.

Jeremy Davis's picture

I must admit that I had a quick look at it (before you disabled it again) and it didn't seem to work at all. The button looked sort of grayed out and did nothing when I pressed it, even when I had obvious spelling mistakes in the text box. Looking forward to when you have the bugs ironed out. :)

Jeremy Davis's picture

So no ideas how it could be fixed. Perhaps contact the developers and speak with them. If you get it working I'm sure others would be interested so let us know.

I am excited that you gave it a try and got it doing something, but I'm obviously disappointed - not really in the software, but rather that you put your time into it just to find out the software wasn't up to the task. I hope something valuable comes from the experience after all.

Excellent to hear. Thank you for the feedback! I'm really pleased that it may potentially already be helpful.

The resources it wants are a concern to me. I don't know that I actually have the resources to deploy it in the writing lab as soon as I'd like. Next academic year we'll build specifically for it; but to justify it, I'll nevertheless need to allocate resources to see how our community will work with it. In the meantime, we can test our dev env with this patch.

Looking forward to sharing,


Davey Vest's picture

 I made an attempt to take some notes toward making a patch for After the Deadline. I made some progress, but ultimately could not make it work. I would appreciate any feedback or help.

  I am a beginner with bash scripting, so if I've made some very basic blunder, please remember that I am only a few weeks past "Hello, World!" here.

 I began with a Turnkey Appliance with Lamp Stack, and started an install ofl sun- java6-jre.

#: Append the repository needed to install sun-java6-jre

echo -e "deb http://archive.canonical.com/ubuntu lucid partner" >> /etc/apt/sources.list.d/sources.list

 At this point, if I apt-get sun-java6-jre, the process stops. I had a choice of attempting to use openjdk-6-jre, or to find a way to force the process through. I dug up this-



#: Force accept sun-java6-* EULA
debconf-set-selections << END
sun-java6-jre shared/accepted-sun-dlj-v1-1 boolean true
#: Update apt-get from /etc/apt/sources.list.d/sources.list
apt-get update
#: Install Java with apt-get
apt-get install sun-java6-jre -y
#: Confirm installation using java -version:
java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-bo4)

Next, I downloaded the .tgz for After the Deadline distribution using wget, and placed it into the /tmp/ directory

#:Download After the Deadline distro, store in /tmp/
wget http://www.polishmywriting.com/download/atd_distribution081310.tgz -O /tmp/atd_distribution081310.tgz

I decided to extract the archive to it's own directory, '/etc/adt/'

#: Extract atd distro and create a directory /etc/atd/
tar xvzf /tmp/atd_distribution081310.tgz -C /etc/

By default, After the Deadline is configured to listen on a local loopback from the same machine ( In order to be able to access it on the Lamp srever, I had the option of configuring Apache or Nginx to proxy to it (according to the install notes), or editing the /etc/atd/run-lowmem.sh and changing the -Dbind.interface property.

 Since I wasn't sure how to set up the proxy, I chose to edit run-lowmem.sh (The server I'd set up only had the resources for the low memory version). I tried first to delete the -Dbind.interface property, but once I finished, it didn't seem to work, so I did:


ifconfig Eth0

 and noted my Eth0 ip address, then I edited /etc/atd/run-lowmem.sh

nano etc/atd/run-lowmem.sh

then replaced -Dbind.interface=  with -Dbind.interface=[ip address from eth0]. I cobbled together a bash script to automate this, but it has not been tested:

#: Parse ifconfig for ip address and saves in $IP
IP=`ifconfig  | grep 'inet addr:'| grep -v '' | cut -d: -f2 | awk '{ print $1}'`
#: Change loopback ip to $IP
sed -i 's||$IP|' /etc/atd/run-lowmem.sh

 And, it seems, this does just as well-

sed -i 's|||' /etc/atd/run-lowmem.sh

 I'm assuming that '' translates to the default. Not quite clear on the proper way to handle this- should I be assigning a specific ip, or leaving it as defaut?

In this case, I made -Dbind.interface= the ip address assigned to eth0,and used port 1049 (I did not see any reason to change it).

#:Start AtD service.
cd /etc/atd/

 The AtD getting started page suggests using this in a web browser as a teast:

Even after altering the ip address, it would not work.

The easiest other test I could find was to install the Firefox extension for AtD from  http://atdfirefox.wordpress.com/ . Then, I set the extension to use my server by editing the about:config page, and changed the value for "extensions.afterthedeadline.proofreadServer"
to the external ip address of AtD, server, port 1049.

 I have had no luck with it. I attempted to use it with LibreOffice, and the process simply froze.
Any advice?

Jeremy Davis's picture

Can you ping the server? Can you connect to the machine with your web browser (without the /atd and the port - should get the default TKL LAMP page)?

If no to both then I'd do some more network troubleshooting.

If yes to both, double check your AtD config. Also worth checking that your server is listening on the appropriate port. Perhaps for the purpose of testing try hard coding the IP of the machine your connecting from in run-lowmem.sh (instead of or You could try commenting out the bind.interface property altogether too.

Davey Vest's picture

Those are all great ideas, and I really appreciate the prompt reply. I need to do some studying on networking, and definitely start from the ground up- manually inserting amy ip address, pinging the server and so on to find the problem.

 I think the first thing I will do is to see how the 'official' AtD server acts, and make sure there isn't something on my machine that is sabatoging me, then go from there.

 I'll give it another go this evening, after I've stepped away for a few hours and can maybe have a fresh look. It could be something incredibly simple that I have overlooked. I'll go through the set up one step at a time, and report any useful findings.

And thanks again for the feedback.

Jeremy Davis's picture

One other thing... You are obviously getting internet access on your appliance. Where is te appliance installed (ie VirtualBox? Bare metal?) Because if it's in Virtual Box it could be as simple as changing the networking. By default in VBox it's set to NAT which is fine for outgoing requests, but you'll need to change it to 'Bridged' (or 'Host only') to be able to connect to it from somewhere else.

Let me know how you go.

Davey Vest's picture

Great question about the server. I've actually got it running on a Turnkey Server here linked to an Amazon EC2 account, or at least I did. don't want to run the server 24/7...  $0.09 an hour can add up eventually.

It did occur to me that part of my difficulty may be trying to run it with such low resources, since the AtD website recomends at leat a 2 core machine with 4GB RAM.

In anycase, it does, I managed to stumble upon a wordpress blog with some way more specific instructions. Actually, I don't know how I missed it, since it was linked on the download page. Doh!  I was really thinking inside out with the ip binding. AtD, according to this guide:

"After the Deadline will listen on port 1049 of your localhost. For security reasons it only accepts connections from you can edit run.sh and change -Dbind.interface= to reflect the external IP address of your server."

I was using the internal ip addresses, and the answer is so obvious. Don't know how I got on the wrong path. With any luck I should have it up and running in the morning,  and I'll share the results.

Jeremy Davis's picture

Sounds like you've had a breakthrough. I was assuming that the IP was the computer that was connecting to it, rather than the listening address. Sounds like you may have a better shot now. Good luck.

Davey Vest's picture

 Well, I am sorry to say that after a long night trying to impliment this solution ... looking for other answers... not liking those answers... staring at tumblr for long moments...looking for new answers, going to Rik for answers, etc., I have decided I'll probably have to step back from this one for a little bit, due to other obligations. Hopefully, I will have some other interesting things  to post about in the meantime, and I will be getting back to this when possible.

 Thanks, Rik, Jeremy, you guys are great encouragement.

Jeremy Davis's picture

I can relate to that. Actually it's the story of my patching career! I've only ever completed one to date. Many of the patches I start are out of interest, or to test some software. More often than not I get stuck, side-tracked or decide that the software doesn't actually do what I want anyway. I have so many unfinished projects it's not funny. Hopefully I'll get back to it soon and tidy up some of my lose ends. We'll see...

Two suggestions when you look to take this up again. I had more success sun-java6-bin.

After resolving those java errors we were seeing, I was able to get a clear look at the IP problem. My suspicion is that the amazon instance you were using might not have been using elastic IP. I might try putting this together in a virtual machine and seeing if the symptoms are the same. If not, I'm guessing amazon's magic ip doings are causing some confusion.

What do the rest of you think?

This wasn't the case before. Using your build notes, with three alterations, I've got clients connecting to ATD when served from a VM.

-Swap Sun-java6-jre with sun-java6-bin (java errors go away)

-remove the ip setting from the executable run script.

-Move atd to /usr/bin/atd (for the sake of the startup service).

I wasn't able to get atd started as a service however. It does start, but then can't find any of its java meat. I tried adding a variable to the run script to define the atd folder, but that didn't work. More experimentation needed.

Add new comment