Recently, I was involved in a number of projects that used Scrum. Just in case you don’t know, Scrum is an agile software development methodology intended to improve communication among team members. When using Scrum, each project has a backlog that contains all the goals and tasks that need to be accomplished. Team members start off with a sprint planning session. During this session, team members pull tasks from the backlog and put them into a so called sprint. Generally, sprints last 2 or 4 weeks and in this time, team members are committed to finish the tasks within the sprint. The most attractive part about Scrum is its daily meeting/stand up feature, in which team members (actually stand up) and answer 3 questions; (1) What was done yesterday? (2) What’s going to be done today? (3) What barriers are faced, if any?
A few days ago, it hit me, ‘Hey, why don’t I modify Scrum a little bit so that it can be applied to my personal life?’ Since then, I started researching previous experiences that used Scrum in different domains. Surprisingly, I found many altered uses of Scrum, which encouraged me to pursue my idea. For example, Michael Hicks and Jeffrey S. Foster, two computer science professors in University of Maryland, adapted Scrum to manage their research groups, rather than traditional software development; their modified version is called SCRAM.
This past Monday, I started jotting down my backlog, which will definitely continue to be modified and improved over time. I also decided to conform to the following scheme for my personalized SCRUM:
- Each sprint should be completed within 1 week.
- Sprint planning should occur every Sunday evening.
- My daily stand up (comedy session??) should be conducted every night before I go to bed.
I have been applying this personalized Scrum for a few days now, and it’s been going pretty well, thus far. I’ll post an update in a few months describing my critiques and thoughts.
Please share your thoughts!!!
Mailtrust held their hackathon number 6, which is the first for me. It was pretty exciting to pickup any project that you wanna work on, and try to finish it all from design to delivery in one day. My project was to create a generic notification API that can send alerts to email, jabber IM, or sms.
Since I have been working with ActiveMQ for over a month now, I decided to use it to queue the alerts. All alerts are described in an XML file.
This XML file is passed to our API which parses the file, and queues a number of alerts based on its priority to different ActiveMQ queues. Then, we configured a number of Apache Camel routing rules that would route these alerts from ActiveMQ to different end points, such as jabber and e-mail.
The biggest problem with this XML file is that your e-mail as well as your jabber passwords are stored in plain text, which can be solved very easily. Just FYI
.
The project is written in Java, however, we implemented a php interface to it. Any other language can easily implement an interface to our API if it only parses the XML alerts document.
At Mailtrust, they tend to use ActiveMQ as their Universal Messaging System (UMS). That was the first time for me to start reading about messaging systems and the distributed handling of messages. This post is not about comparing ActiveMQ to other distributed messaging systems. However, ActiveMQ is an open source message broker that is written in Java; It supports communication over a number of protocols such as Stomp and OpenWire; and it is pretty cool
.
In this post, I am not going to dig into the details of their implementation. However, I’d like to mention that there is a good opportunity for freelance developers to enhance ActiveMQ by implementing a number of features.
Here is a scenario that highlights one of the most important concerns about ActiveMQ. A producer P1 sends a number of messages to two brokers (B1 and B2). There are two consumers on these two brokers respectively (C1 and C2). Ideally, if the producer sends 50 messages, then each consumer should receive 25 messages. With the right configurations and the approperiate dispatching algorithm, you can do this with the current version of ActiveMQ. If C2 processed only 10 of the 25, then there would be 15 messages pending in the queue. However, if C2 died after processing the 10th message, the pending 15 messages would remain at B2 and they won’t be forwarded to B1.
There are different ways of implementing this feature into the current source code of ActiveMQ. Aside from the details of how the code works, I am more interested in how we can separate our implementation from the source code of ActiveMQ. In other words, I don’t want our implementation to be affected by releasing a new version of ActiveMQ. In fact, I want our implementation to be pluggable to any version of ActiveMQ.
This is a typical separation of concerns problem. The good news is that there are several ways to do that. The bad news is that every method has its own pros and cons. For now, we think that we might want to use AspectJ as well as DRIVEL to embed our code into ActiveMQ.
Share your thoughts.
Yesterday I attended a very interesting Tech Talk at Mailtrust about semantic web. Manu Sporny introduced the idea behind semantic web and compared between Microformats and RDFa. Here are some thoughts and ideas inspired by the talk.
Manu demonstrated the importance of implementing semantic web from several perspectives. Surprisingly, he stressed the lack of interest from the community. Specifically, there isn’t enough participation to fully enable semantic web. I think that there is pretty good explanation to why this is the case.
Researchers try to find the technique to be used in order to describe the data on the web. Users, on the other hand, apply this technique and start implementing data descriptions. However, users face two obvious problems:
- Describing data is a tedious and time consuming task.
- Users face a lot of arguments about the accuracy of the description they provide.
Manu gave an interesting example of real-life scenario. In his business, he wanted to describe a song title using semantic web. He mentioned that it took them five and half months to solve the argument about tagging the title of the song using the word “title” or “audio-title”.
The good news is that there is a pretty interesting infrastructure that web developers and authors can start using. With that said, I think that the community needs to see killer applications that motivate them to do the hardwork of data description. The following ideas are pretty simple and intuitive, but they might lead to a combination of ideas to be the killer application.
- I believe that authors might be interested in tools to help them create their pages (editors, validation tools, plug-ins to existing IDEs, …etc.)
- Web browsers need more powerful ways to make use of these semantics. For example, fuzzbot does a good job on parsing the documents and so forth. However, more interesting tools can be driven from the use of the semantic information. Maybe, automatic synchronization of objects (event’s information online and your copy in your calendar).
- For hardcore programmers and/or researchers, can we automate or at least simplify the process of describing meanings? Although that there are several research questions in the area of web semantics, this question is considered crucial to make substantial steps towards practicality.
I am pretty sure that almost all of these ideas are already implemented, but improving is the key to progress. If you are interested to discuss any of these ideas, similar ones, or related ones, please don’t hesitate to contact me. I always like to work on cool stuff with cool people.
Share your thoughts.