Life at Calcey

University of Moratuwa undergraduates speak out about their Industrial Internship experience at Calcey

Software development companies in Sri Lanka

Chamara Amarathunga and Himanka Sandaruwan are two Undergraduates from the University of Moratuwa’s prestigious IT faculty, who joined Calcey as Industrial Interns on April 01st this year. I caught up with them at teatime last Friday, to find out how they were getting along.

Himanka and Chamara in conversation with Manjula, who is their Mentor

Ruwan: So guys, what is the nature of the Industrial Internship program at UOM IT? Tell me a bit about what expectations you have to meet during the Internship period.

Chamara: The Industrial Internship program at UOM IT is a 6-month (24-week) long exercise where the faculty expects students to have the experience of working in a real-life software development environment. We are expected to gain a sound understanding about industry standards, technologies and development methodologies, and reuse the practical knowledge that we gain from this experience during our final academic year and beyond. We have to submit a written report of our experiences and are graded for this exercise based on the feedback given by our employer.

Ruwan: So what was your first impression working for a company as a trainee? Was it frightening? Challenging?

Himanka: Frankly speaking, the first few minutes were somewhat scary. But when we got introduced to the staff, my apprehension disappeared. Everyone we spoke to welcomed us warmly. Manjula, who is our mentor, gave us immense support towards understanding the ongoing projects and the technologies we would use. After these explanations, we felt really happy that we got the chance to work as interns at Calcey.

Ruwan: What sort of projects are you working on presently? Tell us about the technologies and the business requirements that you have been dealing with to date.

Himanka: At the beginning of our internship, we were assigned to a project of an R&D nature. The requirement was to develop an employee time tracking system for Calcey, with the Python programming language. Employees enrolled into the system are able to log time for the tasks that they have been assigned. That was the core functionality, but the app also consisted of an admin dashboard with many more supporting functionalities. This project served as our training for Python-based app development.

Chamara: We got lucky thereafter, because we both got to apply our knowledge of Python/django to a consulting project for a prestigious US client. Our team had to develop a mobile video portal for an Ivy League university’s leadership training program. This project also gave us the chance to working with cloud-based resources. We contributed to the successful completion of the mobile web portal, and are now engaged in some routine maintenance work for the desktop portal of the same academic program, which is implemented in Cold Fusion.

Himanka: Also Ruwan we are currently doing some research on implementing Shibboleth/SAML authentication for the same university’s mobile video portal. They want to allow users to access both mobile and desktop portals using multiple Identity Providers.

Ruwan: Wow sounds interesting work. So how do you find Calcey from the perspective of mentorship? Did you have enough guidance and support to achieve your goals? Who helped you and how?

Himanka: We had ample guidance from everyone concerned, especially from Manjula. He always motivates us and guides us to accomplish the tasks we are assigned, and we really appreciate his efforts in putting us on right path at work. Our Project Lead Rasika, and our Chief Software Architect Chamindu gave superb support and guidance when it came to project or technological issues.

Ruwan: So guys, what did you learn from your Calcey experience so far? What stuck in your minds…Chamara?

Chamara: We learnt a lot from the experience that we had so far; we were able to learn new technologies and programming languages like Python and the django framework, wired to cloud resources like Amazon S3 bucket. Also we improved our communication and teamwork. We got plenty of experience working with version controlling systems like GitHub. Most importantly, we learned what its like to help a customer achieve their business goals.

Ruwan: When do you complete your Internship program? What will happen thereafter?

Chamara: We will be finishing our internship program end of September. Thereafter we will be taking a short vacation [smiles] and get back to our final year studies.

Ruwan: Great! So what is your career objective once you finish your degree? Would you consider working at Calcey again?

Himanka: Once I complete my degree I want to work in a reputed organization within Sri Lanka. Calcey Technologies is definitely on the top of my wish list. After a period of industrial experience, I’d like to go abroad to further my postgraduate education.

Chamara: [Smiling] Yes, Calcey will always be my first choice too.

Ruwan: Lovely! Thanks, Chamara and Himanka for taking the time to speak to me. I wish you both the very best of luck in your future!

Life at Calcey

Calcey helps CompareNetworks to upgrade their B2B product marketplace platform to facilitate User Reviews

Software development companies in Sri Lanka

Because of the B2B nature of the online marketplaces hosted by CompareNetworks inc. (CN), the need for enabling user reviews for products had remained a lower-priority item in the product roadmap. However, CN recently called Calcey into action to help develop this important feature addition, and the functionality was made available to all business verticals serviced by the CN Marketplace platform in the beginning of June-2013.

CN hosts B2B product marketplaces for leading product vendors that operate in the biotechnology space, such as Biocompare, dental compare and American Laboratory.

Site administrators can now design custom user review forms and make them available in the public website. Users can complete a review against a product of his or her choice. A user can support his or her review comments with a gallery of attached images, related to the products that are being reviewed. Site administrators can also define multiple parameters for rating a product, such as its durability and efficiency. Users can star rate the product (range 1~5) for such pre-defined parameters, as well as provide an overall rating. These ratings are displayed against the respective products in various sections of the public website such as in search results.

All submitted user reviews are automatically converted into a neat article format and published alongside the products. Interestingly, site administers can choose to reward product reviewers with online gift vouchers at their discretion, thus encouraging a healthy dialogue between the target users of these B2B marketplaces and the vendors of these products.

This mini-project was a .NET Framework-based development effort, which ran for about three months duration in total inclusive of extensive functional and performance testing prior to release.

Opinion

Kurately, making sense out of your twitter mess

Software development companies in Sri Lanka

For those of us who are Twitter fanatics, it can get hard sometimes to wade through the vast tangle of tweets and Web links that splash on our Timeline, and pick out snippets of information that match our current personal interests. Zeroing in on interesting tidbits is especially difficult when we are on the move. Kurately is an iPad Twitter client designed to address just this problem –  staying attuned to interesting content and filtering out the noise on Twitter.

Simply, Kurately allows you to shortlist your Timeline for specific Tweeps of your choice, and swipe through any Web links and images tweeted by these folks in a convenient, magazine-style view.

There are just four views in the app. The default view after signing in is the News Feed. This is where we see the Tweets of the Tweeps we have shortlisted as interesting to us.

Then there is a Web View for viewing the Web pages referenced in these Tweets, which is displayed when we tap any particular Web link in a Tweet.

We also have a Magazine View for easy browsing of all the Web pages referenced in the News Feed, magazine style, where one can swipe back and forth through the Web content.

Finally, there is the Manage Tweeps View, where we can actually shortlist the Tweeps.

Kurately is the perfect Twitter client to keep tabs on your favorite news channels or simply to keep in closer touch with select friends.

Kurately was launched on the App Store this week (Jun-16).

If you haven’t already done it, download Kurately to your iPad right now!

Download Kurately!

Life at Calcey

Calcey Sri Lanka annual trip 2013, a fun filled experience

Calcey

The big day had finally arrived –  for our annual Company Trip. It was the morning of March 30th, a Saturday, and about 50 of us had gathered outside office. We were bubbling with excitement as we got into the bus. We had brought with us a few guitars, and even a bongo drum! Our due destination was Bentota Beach Hotel, where we planned to stay the night.

We set off around 8.00 AM, and started singing within a few minutes of settling in our seats. There were plenty of snacks, soft drinks and a few beers that were passed around to help us loosen our vocal chords. We sang mostly old Bila songs and played classical Sinhala tunes along the way, such as “Surangani” and “Udarata Kandukaraya”. We reached Bentota Beach just about noon.

After we settled into our rooms, we went straight for lunch, which was well prepared. Some of us hit the pool thereafter, while the rest of us including myself explored the hotel and its surroundings, which had a fabulous Spa, a Gym, and a Badminton court.

We all met up at 3.00 PM and hitched a boat ride on the Bentota Ganga (river), infamous for its scenery and its wildlife. We went among the mangrove trees and into the swamp, and observed many water birds. The highlight of this excursion was the sighting of a baby crocodile, which we were allowed to touch! It was one of those surreal moments in my life. After a couple of hours on the river, we returned to the Hotel.

Around 5.00 PM we all changed into sports attire and played games. Some of us teamed up for beach football, while others played badminton.

Bentota Beach Hotel is a spacious place, ideal for games and recreational activities. Their service throughout our stay was good. As the sun began to set, we stepped into the Indian Ocean and some of us even swam. The current was strong, but we stayed very close to the shore and enjoyed the feel of the waves on our feet.

We returned to the hotel around 6.45 PM and a small group including myself went to the Spa. This experience was truly relaxing…
Dinner was served around 8.00 PM and was a truly sumptuous affaire. There were many cooking stations with grilled fish, vegetables, meat items, pasta, noodles and a variety of seafood dishes. There were also Indian cooking stations, which served Chapati, Naan and suchlike.
Immediately after dinner we went to the hotel bar to try out the cocktails. There was a very nice dance group that was performing, which complemented the party atmosphere. The bar was entirely ours after 10.00 PM and we requested songs, and began to dance! We literally danced till we dropped, well passed midnight.

Most of us headed for bed around 1.00 PM, but a few of the guys stayed up till even later, playing poker and relating amusing stories.
The following morning we went for a swim in the sea before breakfast. Breakfast was again another gorgeous meal, where we had a variety of items to choose from, ranging from Sri Lankan foods like Halapa, Lavariya and so forth, to Waffles and Pancakes. After breakfast, we played one last round of badminton. We climbed into the bus around 11.00 AM and headed back home.

It was a truly fun filled trip, with many interesting and sometimes amusing incidents to fill our memories with, and talk about in office for months to come.

Opinion

PurePlay contracts Calcey for software development services

IT companies in Sri Lanka

PurePlay, a leading online gaming company headquartered in San Francisco and with data centers in Utah, has engaged Calcey Technologies to provide software development services on a long-term basis. PurePlay delivers gamers a complete Virtual Currency gambling experience, gifting prizes to winners via a subscription-based revenue model. Calcey will help to re-engineer and extend PurePlay’s core platform for Poker and Slot Games. PurePlay’s online games have over seven million subscribers and the underlying technology platform is Java based.

PurePlay’s CTO visited Calcey’s offshore development center in Colombo last week, to assist in the setup of the development environment and to train the engineering team in the product’s features and underlying code. He is a Silicon Valley veteran having worked for several leading technology firms in the past, like go2net and Dini Group.

The PurePlay platform is built using a fusion of technologies including a Spring enterprise application framework, a JSP/Tapestry presentation layer, a Hivemind service layer and an Oracle database. PurePlay has adopted Scrum as their agile development methodology. Calcey will deploy a startup team of five engineers and commence the first Sprint of work for PurePlay this week.

UX

Web designing for a good user experience

IT companies in Sri Lanka

Web designing is not only about creating a clean code-base and sharp graphics, or having bug free functionality, or even fulfilling the owner’s strategic objectives. These are essential requirements in a web design, but even the most sophisticated technology or the best-written content won’t hit the nail on the head, if the user experience is not consistent, cohesive and stress-free.

Creating such a user experience is not a trivial job, and involves addressing many issues such as usability, brand identity, information architecture and interaction design. Web user experience development, from strategy and requirements through information architecture and visual design is a process that needs input from the client, creative designers, end-users and software developers. These stakeholders might have different perspectives and expectations about the website.

Client expectations when designing and implementing a website is usually more about delivering the message to the maximum possible number of users. To be more specific, the website would:

  • Show as much information as possible
  • Attract users
  • Look great aesthetically (not just another website, but be THE website)

The users’ perspective when visiting a website may be drastically different when compared to the site owners, such as:

  • Grab some data (easy scanning through the pages)
  • Pleasant (good contrast and no harsh distractions)
  • Simple
  • Easy navigation

The challenge for designers is to come up with a website that addresses both these perspectives. This is why the concept of website direction  – Whiteboarding the concept and making adjustments to address the concerns of all stakeholders, including sample end users  –  is a key part of the web development process. The Whiteboarding process must be kicked off immediately after a clear set of written goals for the website are provided by the client.

A given functionality or content could possibly be presented to users in a hundred ways, and be accepted by them as a  “good”  experience. However it is possible to abstract atleast a few general principles for website design, based on numerous “usability testing” exercises conducted within the industry. Here are ten such important principles:

  1. Speed. The Website or page must appear to the user within a maximum of five seconds through reasonable Internet access (ideally less). There is nothing worse that a user could experience, than waiting for a website to load. Since loading speed is related to page-size, pages must be as lightweight as possible. We must avoid that 2 MB home page at all costs, even with today’s high-speed Internet connections.
  2. Simplicity. Present the core idea in a manner that the users could grasp it in the least possible time. Most usability experts say that if a given Web Page’s idea or functional purpose doesn’t register after five seconds, its poorly designed. It doesn’t mean the details could be read in five seconds, nor does it mean that any fields or user actions to be taken must be completed in five seconds. It just means we must “get it” in five seconds or less; for e.g. “this Website is about a social media marketing tool” or”this page is where I unsubscribe from my services, I have to give the service provider a reason for it”  etc.
  3. Focus. Present the idea or functionality in an uncluttered way, with a focus on the core message or function. Lots of white space is fine, especially when we are dealing with functionality. Google pioneered this concept with their legendary home page. Even when we want to provide the user with a multimedia experience, we must keep it clean. For example, having two or more scrolling images within the same screen-view, or littering the website with advertisements that are not demarcated as such, can be most confusing to the user.
  4. Readability. Whenever we present textual information, we must keep it as succinct as possible. There is a whole school of advice on how to write for websites. In addition to the simple writing style they all advocate, we must make the paragraph width smaller for lengthy texts (so the eye doesn’t tire when scanning). Contrast must be good (beware of those fancy background colors and textures). Paragraph spacing must be adequate so the text doesn’t look clumped. Over the years, typography  –  the presentation and arrangement of text –  has been considered a critical success factor in web design.
  5. Resolution-robust layout. There are a host of screen resolutions out there, and one must ensure that the web pages appear readable and pleasantly laid out to all these users. This does not mean that we design separate style sheets to cater to a dozen resolutions. It just means we should pick a minimum resolution (say 1024 X 768 pixels) and make sure that the site looks good in this resolution, and in any other resolution reasonably higher than this. Layouts must not be broken or look minute because of a higher resolution. One customary way of ensuring the latter is to have liquid layouts. In any case, all critical content should be above the fold –  an imaginary line at the bottom of a screen with the minimum supported resolution. The purpose that the website represents, for example, should be apparent above the fold, within a few seconds.
  6. Coherence. This simply means that the collection of styles applied throughout the website must be the same, and each style applied for similar purposes. If there are two types of paragraphs, then all page content must use these paragraph templates. The color scheme, font scheme, input field and labeling scheme etc must be consistent throughout. Also, the way we perform different functions must be consistent. If field validation messages are displayed just below the field, then it should be so in every field in the website.
  7. Accessibility. Depending on the website’s business goals, it must be made accessible to as many users as possible. Cross platform testing, cross-browser testing and loading custom style sheets for targeted mobile devices are the commonest measures that one can take to ensure accessibility.
  8. Navigability. This means that we must have a uniform way to navigate throughout the website, without functional complexity (e.g. “tree views”) or the presence of multiple navigation areas. The ideal website would have a simple link-based navigation, perhaps within a common header. Complex dynamic navigation (cascading menus and flash pop-ups) should be avoided, unless for very particular reasons.
  9. Searchability. This simply means that your site is properly tagged and ready for search engines and for textual search. Page headers, meta-tags, resource links and paragraph headings must reflect the search criteria of the target users. For example, the heading for this article is “web designing for a good user experience”. It is likely that the article would show up if the words “web designing” and “user experience” was to be searched on Google. If the title were “good design tips” , it is unlikely that someone searching for user experience or website design would end up seeing it.
  10. Interactive. The concept of promoting interactive websites was a key component of the “Web 2.0 revolution” some years ago. Technologies like Ajax frameworks emerged to handle the problem of posting little bits of server-side content to th
    e browser screen based on user actions, without refreshing the entire page and thus distracting the user. Anything ranging from enabling your website’s content to be posted on social media, to implementing an online chat function to support your business goals, would be advocated.

A concluding remark; people visit a Website to gain information or to perform a task (a function). Making sure we provide just this, and nothing more thatwould confuse the user, is the goal of user experience design. We could display our artistic skills in moderation, as we don’t make website designs today to merely showcase the artistic prowess of the designer, unless art has some special value to the core purpose of the website itself. What we do (or aught to do) is to capture the target audience by giving them exactly what they seek. A good website design is one that has as little design as possible, where the UI is clean, simple and unobtrusive.

Life at Calcey

Calcey helps Compare Networks develop an interactive mobile sales and marketing tool

IT companies in Sri Lanka

Compare Networks, Inc. (CN) has engaged Calcey Technologies to help them develop an interactive mobile sales and marketing tool, which they are deploying to blue-chip enterprises across the US that have a large, mobile sales force in operation.

The core concept of the base product is fairly simple. It has a web-based content management portal for product managers to upload and organize their multimedia promotional content. This content is then synced with the iPads of the field sales staff, who show the material to potential clients. The actual finished product has many nifty features to address the needs of the domain, such as the ability to deliver HTML5 apps as a content type that could be distributed to the sales staff.

CompareNetworks’ Product Director Jason Roy visited our development centre in Colombo in late January, to monitor a release for an important fortune 500 clients. We spent many hours with Jason resolving last-minute technical issues, and thereafter took some time out to discuss the base product’s roadmap for the rest of the year.

Left to Right: Jason Roy, Chamindu Munasinghe, Asela Indika, Mangala Karunaratne
The product release to CN’s first enterprise client Shofu was a big success. Shofu’s representative had this to say in their first official communication about the app’s rollout: “The app was a huge hit…the demo [to our sales staff] went perfectly and the response could not have been better!”

Jason also spent time discussing the strategic aspect of the partnership between Calcey and CN with our CEO Mangala Karunaratne. We are CompareNetworks’ principal software development partner, enjoying a seven-year relationship with CN for executing a multitude of engineering projects.

Jason is an experienced User Interface/User Interaction Developer and a dynamic Product Director, with unique abilities in both engineering and management. We benefited immensely from his visit, and our team is excited about helping with the development of the new roadmap features. The technologies involved are principally iOS/Objective-C and the .NET Framework.

Opinion

As in all other professions, ethical conduct in software development is a must

IT companies in Sri Lanka

As part of my degree coursework back in 2002, I had to write a whitepaper that outlined the commonsense principles behind ethical conduct within the sphere of IT, as affairs stood at that time. A recent conversation I had about the ethical conduct of software engineers prompted me to revisit that old paper, and try to extend the principles that I had outlined in it, to address the ethical issues that may arise when developing software applications. I’d like to highlight the underlying principles that ought to govern the good conduct of software engineers, for the benefit of newbies to this noble profession.

Whilst some folks might put forward issues such as violation of privacy, infringement of ownership rights or plain malicious intent (such as developing viruses) on top of their list of ethical concerns facing software developers, I’d like to begin with the issue of professional integrity as a developer. Basically, a software developer must be committed to building a safe, useful, reliable and secure piece of software. This means that one must:

  • Not build malware unless it is for the explicit purpose of testing the security of an application in a controlled environment
  • Have a rational use case for the application being developed; it must not be a piece of junk
  • Test the software thoroughly and be committed to fixing defects in it
  • Ensure to the best of one’s ability, that any information stored within the application should available only to those who are authorized to view it, as per the business use case
  • Learn and follow recognized engineering practices in the industry, with respect to the architecture, design, coding, testing and distribution of the software. In other words, one must be a craftsman and not a hacker
  • Be confident that the application’s business use case doesn’t violate any law of the land, civil or criminal. Building a piece of software that facilitates a Ponzi scheme would be an example of unethical conduct
  • Report to the client or the employer promptly if in one’s opinion, a project is likely to fail, to prove too expensive, to violate intellectual property law, or otherwise to be problematic

A developer who fails to adopt the above guiding principles into his code of conduct would end up being “unprofessional”  by today’s standards.

Let us now consider the issue of respecting the intellectual property rights of others. The parameters of this issue have been debated for many years, sometimes with winning arguments emerging from the flipside such as students in developing countries being unable to afford software development tools due to the absence of pricing structures catering to their poor economic conditions. However this conflict seems largely behind us now because big companies building popular propriety development tools (such as Microsoft) have created special pricing mechanisms to address the issue of global affordability and affordability for students. Also the vast open source development movement sprang about to address this very problem; and today we can say that, at least in principle, any developer can choose a toolset for building powerful, robust applications at zero infrastructure cost. Therefore the ethical principles behind respect for IP rights become even more morally binding, such as:

  • Acknowledging borrowed IP that is being used as subcomponents of your application. This is particularly true for some free or open source apps, frameworks or code snippets. The providers of such software usually state the requirements for acknowledgement of their IP rights
  • Adhering to the detailed parameters of licensing agreements of all software at all times. We should not exploit loopholes that allow us to gain access to the working tools, and then exceed parameters that the provider has stipulated but which he is unable to control, such as limits on concurrent database access. The providers have presumably decided on a fair business model for the software tools they peddle based on their operating costs, so we must not cheat them
  • Helping those who have helped us, such as submitting honest reviews about the software subcomponents we have leveraged. This again is particularly true for open source frameworks; actively participate in ironing out issues in them and campaign for their progress
  • Having clear licensing agreements for all applications we develop, and ensuring they are read by users when they install or sign up for your product

Another interesting aspect to ethical conduct in software development is the fair management of projects, to cater to the best interest of all parties concerned; namely the client, the developer(s) and the organization that employs their services for profit. This issue is mainly present in service companies that employ large teams of software developers to build applications for clients rapidly. Some of the recognized fair management practices include:

  • A pragmatic estimation of the effort involved and delivery schedule, and an honest communication of the same to the client
  • Close collaboration between the client and the developers, and ensuring transparency on both sides such as technical difficulties or changes in user expectations
  • Monitoring of the ongoing effort and correcting capacity inadequacies proactively. Whilst enterprise software development is sometimes tedious and may require overtime effort from developers, the long-term goal of a ethical project manager would be to match client expectations with available capacity, and ensure the developers enjoy a work-life balance
  • Develop a firm opinion about the risks and issues arising in a development project, based on investigation and past experience, and take action to mitigate the problems at hand. In other words, an ethical project manager would have a “backbone” to make decisions and influence people
  • Ensure that whilst team communication can be assertive or relaxed based on the situation at hand, it always remains professional and follows all norms of the communication decency

There are many other ethical issues that we may face as software engineers, please see below some interesting references that cover this topic more thoroughly.

When we set standards for a profession, we draw a line on the sand between the acceptable and the unacceptable, which sets the stage for greater respect and higher compensation. I invite you all to choose the higher standard.

References:
Computer Ethics Institute:http://computerethicsinstitute.org/
Communication Decency Act: http://en.wikipedia.org/wiki/Communications_Decency_Act
Software Engineering Code of Ethics and Professional Practice:
http://www.acm.org/about/se-code

Opinion

Django, for better performing websites with rapid development

Software development companies in Sri Lanka

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.Django lets the developers build deep, dynamic, interesting sites in an extremely short time. The framework is designed to let the developer focus on the fun, interesting parts of the job while easing the pain of the repetitive bits. In doing so, it provides high-level abstractions of common Web development patterns, shortcuts for frequent programming tasks, and clear conventions on how to solve problems. At the same time, Django tries to stay out of the way, letting the developer work outside the scope of the framework as needed.

Django is usually called an MVC framework, and justifiably so. It is very heavily influenced by classical MVC and it’s even possible to argue that Django improves the architectural pattern. In Django, the three core layers are the Model, the View, and the Template. A key advantage of such an approach is that components are loosely coupled.

Having come to know of the interesting features of Django, we recently worked on a pilot product development project, called Xaffo, which had demanding needs for a web framework. Xaffo, a cloud-based social media monitoring tool,allows users to analyze the popularity of their brands among leading social networks.

Why we decided that Xaffo needs a web framework like Django
Xaffo basically deals with large chunks of social media analysis data shuttled between different web services, with huge task lists in the background that requires higher performance and scalability.The Xaffo prototype was initially built on Google App Engine and therefore in Python,and keeping the python code was also an essential part in our decision-making.

Meeting performance expectations when handling large sets of data was the challenge where features of Django became relevant and interesting. Handling large number of tasks in the background, Celery (explained below) came in handy to support Django to dynamically add or remove workers to handle the tasks.

On account of handling large sets of data, Django makes a better pair with MongoDB, which brings out easy database connectivity with high performance.

Xaffo is hosted behind nginx web server with uWSGI for high performance and static and dynamic content serving.The combination of this hosting environment and Django proved optimal. Xaffo is hosted on Amazon EC2 achieving the scalability where Django becomes the perfect web framework to match all these components.

Django made it easy to achieve tedious tasks that Xaffo demanded, with its appealing features such as,

  • Object Relational Mapping
  • Template System
  • URL Resolver
  • Forms
  • Admin Site

In addition to the aforementioned features of Django, Xaffo relies largely on Django’s modularity.
We used several 3rd party Django packages, such as:

  1. Celery
  2. MongoEngine
  3. Flower

Celery is an asynchronous task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.The execution units, called tasks, are executed concurrently on a single or multiple worker servers using multiprocessing, Eventlet, or gevent. Tasks can be executed asynchronously (in the background) or synchronously (wait until ready).Celery is used in production systems to process millions of tasks a day.

Celery is used with Xaffo to manage the periodic tasks that are executed to fetch and calculate data gathered from various social network APIs. RabbitMQ is used as the message broker.

MongoEngine is an object document mapper for Django, which is very similar to Django’s own ORM. This enables developers who are already familiar with the Django ORM to interact with MongoDB without having to go through a whole new API documentation.
Celery Flower is a tool used with Xaffo to monitor the periodic tasks executed by Celery. This tool provides a web interface with information such as task progress, graphs and statistics.

To wind up, Xaffo was a successful project with Django, proving to us that Django web framework is highly suitable for projects that require higher performance,scalability, and high load of backend processing with large chunks of data.Its also a RAD framework in this context, and facilitates meeting tough deadlines.

Django takes away the tedious tasks of the development environment and makes it easier to build better web apps more quickly with less code. We at Calcey recommend it wholeheartedly!

More info:
Django – http://www.djangoproject.com
MongoDB – http://mongoengine.org/
Celery –http://celeryproject.org/
Flower – http://docs.celeryproject.org/en/latest/userguide/monitoring.html#flower-real-time-celery-web-monito
RabbitMQ- http://www.rabbitmq.com/features.html

Life at CalceyOpinion

Calcey Technologies adopts a domain-driven design approach

Calcey

Domain-Driven Design (DDD) is an object-oriented approach to designing software based on the business domain, its elements and behaviours, and the relationships between them. It aims to build software systems that are a realization of the underlying business domain, by defining a domain model1 expressed in the language of business domain experts.

The core idea is that the business domain stakeholders and the technical team must communicate in a ubiquitous language. A domain model can be viewed as a framework from which different solutions can then be rationalized. For example, the domain might be retail, and three different solutions sitting on the domain model for retail sales might be:

  1. An online store for the general public.
  2. An order processing system for the store’s staff.
  3. A special offers app for mobile devices, that notifies customers about offers based on proximity to the store.

The domain model will be defined with the assistance of experts in the retail business, where certain “fundamental” concepts in the retail trade will be built into the model as entities, value objects and aggregates. These entities will reside within a domain layer in the conceptual architecture of the overall system, to be leveraged by upper layers that render end-user functionality.

We recently adopted a domain-driven design approach to build an app for the centralized distribution and control of Multimedia Marketing Content to Sales Staff. The business domain is one of marketing content management, and we sought our client’s expertise in this field to help build a generic domain model.

In marketing content management, the basic concept is that there are market segments (aka business units), and marketing content is associated with these segments. The actual content can be folders or multimedia content items. In domain-driven design, your objective is to create a model of the domain. You need to identify what are the items (entities) you need to accomplish the desired functionalities of your application. You need to identify the relationships among different entities and how they interact among themselves. You need to find if the business goal of your client is achievable using your domain model. You do not need to know how and where the data of your domain will persist or even if the data do need to persist while you do the model of the domain.

This ignorance about your persistence medium will make your domain model free from any coupling with the persistence layer of the application. This will eventually separate the concerns of persistence and its communication mechanism from your domain model. As a result, your application will be free from coupling with any data store and will be very easily unit testable.

Of course, in a real application, you do need to have a database. But your domain model will have no knowledge about that. All it will know is the existence of a “repository”  that will eventually manage your application’s persistence concerns.

I hope I was able to provide a teeny insight into what DDD is about. Eric Evans popularized the DDD approach by presenting this concept in “Domain-Driven Design: Tackling Complexity in the Heart of Software”. I strongly recommend this excellent book to all budding software architects. Here is a diagram from Evans’ work, describing the key patterns involved.

Let us part with this thought; imagine, once your code becomes readable to those familiar with the business domain, both peer review and knowledge transfer would become a whole lot easier.

  1. Domain-driven architectural style (definition by Microsoft): http://msdn.microsoft.com/en-us/library/ee658117.aspx#DomainModelStyle
  2. Domain-driven design by Eric Evans: http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
  3. A quick refresher on DDD: http://www.codeproject.com/Articles/339725/Domain-Driven-Design-Clear-Your-Concepts-Before-Yo