Road ahead for draftrack

Road_ahead
I have been thinking about it for some time as I get overwhelmed by my day job. I plan to reengage in developping draftrack and plan to make it an open source intranet tool where people will be able to plug applications that share a common base of user and rights management to perform the tasks required by the application.

And to better show what the application does, I will start a small server based on amazon EC2 free stack to show what it can do.

Hope I will be able to stick to spending more time adding functionality to the app and creating a community around it (I think this will be the most difficult task). Let's roll.

Enable HTTPS for apache on Zend server community edition

After fighting for 3 hours on internet and not finding anything, I managed to make it work by myself. So may be usefull for you to know how to do.

SO for unabling https/ssl on the apache zend server community edition, you just need to

  • open the /etc/apache2/httpd.conf  file,
  • write the line LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so in the file
  • on the virtual host file ( probably located in /etc/apache2/sites-enabled/000-default  you need to activate the ssl by putting the lines
  • <VirtualHost *:443>       
  •         SSLEngine on
  •         SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
  •         SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
  • </VirtualHost>
  • And you restart the apache server sudo /usr/local/zend/bin/apachectl restart

That's it, you should be able to access the website in HTTPS mode (very popular mean recently with the firesheep thing)

 

API key management

4587413_2b807d6379.jpg
Happy birthday flickr!!! by caterina

I think one of the main reason why flickr has been successful is that they were a dream for developers to use. They provide all their data as API and this generated a tremendous use of the application. The quality of the documentation is also incredible with each API is well explicated and easy to play with via a web form.
I really want draftrack to be as open and as good as flickr in term of API management and I am currently working on creating the same sort of self service interface to create new API keys and test the different APIs via web forms. In order to make it as good as possible, I am currently studying all the functionality flickr offers to the API developers and try to mimick the best features. It is a difficult task and it takes time to put in place but I hope at the end I will have as successful a community as flickr as.
After that, I think I will start making videos showing what is inside draftrack and after that, I will have at some point to have an hosted version so people can go around and kick the tires (but it takes some money to have a good demonstrator online (around 100 dollars per month on amazon S3) and I don t want to waste money showing something that doesn't do anything).

Stay tuned

Asynchronous processes on draftrack

4605722512_7eb00bb309.jpg
infinite loop by commondream

I am currently working on implementing asynchronous processes in draftrack. Aim of asynchronous processes are to increase the response speed of a web application by relieving the page generation from non mandatory computation (I don t understand what I just wrote so let s take an example). For example on twitter, when you post a message, a lot of actions need to be taken (with example timie it takes to perform the action):
  • Save the message (200ms)
  • Publish the message to the followers (up to several seconds if lot of followers (lates take 1000ms))
  • Make the message searchable (200ms)
Issue with this is that it takes a lot of time to perform all the actions. So if you wait all the processes to be finished to return an answer to the client, it may take a lot of time (here 1400ms). And it also burden the servers because you must scale to handle the pick amount of received message. Aim of asynchronous is to differentiate the actions that need to be perform while the user is waiting from processes that can wait a little longer. To take back the twitter example:
  • Save the message (must be done will the user is waiting)
  • Publish the message to the followers (can wait)
  • Make the message searchable (can wait)
So instead of waiting 1400ms, the user only waits 200ms to have the message returned and other processes are done aside, this creating a lot of gains:
  • The user has a faster response time
  • You need less servers because these non mandatory actions can be queued and wait a server to be free in order being processed
  • Easier to process issues as long as the mandatory steps have been accomplished in a good manner (you can retry the asynchronous functionality as long as needed)
So I implemented on draftrack: 2 ways to perform asynchronous process.
  • Via a queue where system can post actions to be performed and these actions are called asynchronously after each page generation
  • Via a cron lookalike where system post actions that need to be performed from time to time (like cleaning temporary data, improving lucene indexes, generating stats....)
Limitations where that I want the asynchronous process to run on the web server and do not force user to run other things like daemons or cron job.

To perform the asynchronous call I use a controller plugin that calls the asynchronous service access point after the end of the user page generation.

You can find the plugin here. The only thing it does is calling the page /asynchronous/message/process/ without the user noticing it (using curl  without waiting for the answer start /b curl '.$websiteURL.$baseURL.'/asynchronous/message/process/)

the asynchronous module then checks in a Zend_Queue if there is a message waiting to be processed. If yes, the service access point is called and the calling module can then perform its asynchronous service. Publishing a service to the queue is as simple as calling the queue you can find an example on the status module here line 47 and 48.

If there is no message to process, the system checks if there is a cron job to perform. Creating a new cronjob is as simple as calling via a webservice. The most difficult in cron being able to calculate the next time a job should be run (details available on the cronjob class).

With these 2 tools, it is possible to have a very efficient system that put aside non critical computing for later (limitation being that if you don t have that many page viewed by the users then the asynchronous does not perform correctly).

I hate do not reply emails

4036087411_a5e2fdaae2.jpg
You Are Not Allowed To Take Photos Here!! by troyholden

I think it is stupid to send an email to a client to warn him (be it a notification, advertisement,...) where the reply to is set  donotreply@test.com. The company is loosing a possible interaction with the customer that could provide some good insight (like the email is badly formatted on the mail reader or ask a question). It also give the feeling that the company is not interested in a 2 way interaction but just want to push information down customer throat.
I don t think there is any security reason that force the company to put the do not reply instead of a contact@company.com but maybe I am wrong.

Search feature on draftrack

698692268_b31d429272.jpg

I just added a search feature on draftrack (staring with the status module). To do that, I used zend search lucene that is a really good open source search engine technology. To improve the efficiency of the search, I added a Stemming Analyzer whose aim is to remove useless words and simplify words (for example removing plurals) so you search means more things.

I am always impress with all the work people put in open source projects and the fact it has become so easy to develop some nice tools using all the ground work done by others.

I have been stalled for a few weeks due to my real work but I hope I will be able to have more time to develop the hundreds of features I have in mind for draftrack.

List of features for draftrack


I just publish 2 pages I will use as a sort of roadmap for draftrack.

The first one called Draftrack features to be developped list will list the different features I plan to implement in draftrack. Once the feature is implemented, the feature will move to Draftrack features list where I list things that are already developed. Time to time, I will pick a feature in the list and implement it a bit the way SCRUM works.

If you have ideas of features or would like to help, please contact me at cyril.bele {a} draftrack.com  and we can see together what could be done.

I will probably need also a page where I will list the things I need to implement for the community. First things I will need to do is:

  • Create a forum (I saw one where you just need to put one line of javascript, will probably test this solution).
  • A welcome page that would list the features.
  • Some videos showing a bit what is done and where the project is going.
  • A way for people to test the application (I would just need a server with sqlite but don t have one at hand right now)

Preview Draftrack GUI

Essai_draftrack

Preview Draftack FE GUI

I have been working on the draftrack Front end GUI this evening to make it nicer than it currently is. This is a paintshop preview, thing I usually do before creating the HTML file (and it usually looks worse once HTMLized). I want the GUI to be sleek and do not go in the way of the user. Here are the different parts of the GUI:
  • On the left is a repository of all the applications that are available. For the currently used one, options to navigate the module
  • On the top left, the 4 favorite apps of the user he/she can select
  • A breadcrumb below the logo to keep track of user location in the module
  • A proeminent Search bar available on all the pages.

The display of the different statuses of the user are real (they already look like that, I just copy pasted). I would like it to be the center of the communications the user has with other people/projects, more details later.

I will try to write the HTML this week-end. Please give me your point of view if any.