AnnouncementsEvents

Calcey meets students at the Faculty of Computer Science, University of Moratuwa

Faculty of Computer Science, University of Moratuwa

Friday 23rd June was the day for students from Moratuwa University’s Faculty of Computer Science & Engineering to meet representatives from Sri Lanka’s leading Software Companies. Students anticipating their Industrial Internship –  a compulsory six-month stint in the third academic year, working for a reputed software company –  get this opportunity every year, to “meet the companies” that may hire them, and ask them questions about the experience they might have if they got selected as an Intern.

Eranjan Punchihewa (Senior Software Engineer), Ruwan Rajapakse (Head of Professional Services), Dilshan Amadoru (Senior Software Engineer) and myself (Technical Manager) represented Calcey at this event. We presented our company profile to the students, and showcased a brief example of the sort of technical challenge we often face in our projects in this case we explained how we had to build a JavaScript to Native iOS bridge, to invoke native iOS functions such as sending an email, whilst using an HTML5 app on an iPad.

There weren’t many questions during the presentation itself, but students came up and spoke to us after the session, and declared interest in working as Interns for our company. We were very pleased with their response, and look forward to delivering on our commitment to the Moratuwa CSE Internship program in the coming months.
Interns at Calcey will:

  • Learn in some depth the use of at least one programming language, such as Objective-C, Python, Java or C#
  • Put the engineering concepts we study in a school like design patterns into practical use
  • Use at least two popular development frameworks that bring architectural patterns and best practices to language implementation, such as Cocoa Touch, Android, Django or ASP.NET MVC or suchlike
  • Gain a thorough experience in a collaborative software development environment, configured for source control, dependency management and continuous integration
  • Gain experience working together with others to build stuff, through Scrum methodology and intelligent, commonsense negotiation
  • Participate in code reviews and receive critical feedback about the quality of one’s designs and code
  • Participate in software design sessions and understand how to persist data across different platforms and environments
  • Meet and speak to US/EU-based clients (if the opportunity arises)

I also encourage other private campuses that haven’t adopted this Industrial Internship strategy to consider it as an experience that enriches the academic advancement and career prospects of their student population. Knowing about software engineering concepts in an academic setting is one thing, being able to relate to these concepts in a practical sense is another…

How to

Web developers – learn how to create your first modern front-end project with Yeoman, Bower and Gulp

Custom software development in Sri Lanka

Let us look at creating a modern Web front-end project using Yeoman, Bower and Gulp. These tools help you to boost your development productivity by automating tasks such as setting up your project structure, managing dependencies and setting up your development environment. They also aid in routine activities such as building your project, analyzing its code for errors and minifying the code.

In order to leverage Yeoman, Bower and Gulp, we would need node.js installed. These tools come as node packages that we have to acquire using npm (Node Package Manager). npm is part of node.js and is installed when you install node.js.
Creating the project structure with Yeoman

Yeoman helps to create boilerplate project structures with basic code snippets, development and runtime dependencies, and a build tool that can handle Sass & Minification. All of the dependencies and tools are configured at the time of creating the project structure so that the project is ready to go after creation.

Yeoman can generate several types of web apps including Angular, WordPress and Cordova-based applications, by choosing the Yeoman plug-ins or generators. Depending on the generator you have used with Yeoman, the project structure, tools and dependencies may differ.

Steps to Generate the Web App

  1. Install Yeomannpm install -g yo
  2. Install the official Yeoman web app generator which sets up Gulp as the build toolnpm install -g generator-gulp-webapp
  3. Create a directory and navigate to the directory from your terminal before issuing the following command.yo gulp-webapp

You will now be provided with a nice command-line interface where you can use the arrow keys and spacebar to select and deselect the options for installing Sass, bootstrap and modernizr.

Once you select your preferences, hit enter to begin the download of the required tools and dependencies. If there are any front-end dependencies such as jQuery, those will also be installed using Bower in this step.
Finally, Yeoman will generate the following project structure.

Overview of the Project Structure

Root Directory – /
This has all the tool configuration files for npm, jsHint, git, Bower and gulp.

Development Directory – /app
All development is done in this folder, where you keep your custom HTML files, your CSS in the styles directory, your js files in the script directory and images in an uncompiled or non-minified state. All the third-party libraries should go under bower_components dir with a separate directory for each library. We will look at how to manage third-party libraries like jQuery and Bootstrap using Bower in the next section.

Distribution Directory – /dist
This is where all the files that are ready to be deployed to your web server are, once you do a build with Gulp. If you cannot see this on your directory structure, executing gulp without any arguments while in the root directory would create this directory and place HTML, images and concatenated, minified JS & CSS files.

NPM Dependency Directory – /node_modules
Contains the node modules required for various tools such as Bower and Gulp. Contents of this directory are ignored on the .gitignore file, hence it will not be committed to your repo. Developers who use your repo need to explicitly execute the npm install from the root folder to get these node modules before building the app. The required npm modules are listed on package.json. The default package.json that is created by the Yeoman gulp-web app generator looks like this.

[cc escaped=”true” lang=”javascript” file=”2014/06/blog-code-1.js”][/cc]

Unit Test Directory – /test
Any unit tests that we write using any front-end tests frameworks like Mocha or Jasmine should go under this dir. The gulp web app generator for Yeoman comes by default with the mocha test framework. You can switch to Jasmine test framework when executing the gulp-web app generator with yo. For example: yo gulp-webapp –test-framework=jasmine

Committing Code

After you create the project structure, you would need to commit your code to git so that others can start development. If you take a look at your .gitignore file in your root directory, it already has a few directories ignored including node_modules and bower_components; hence these will not go into your repo. This will keep your repo size down, to contain only the code you write for the web app.

Cloning and Building a Project

When one of your team members shares with you a similar project structure, there are a few steps you need to take before building the project. As your team member has already created the structure, you would not need Yeoman in your development environment to build the project. Instead what you will need are node.js, bower and gulp.
Once you have node.js installed you can install bower and gulp with the following commands.
bower – npm install -g bower
gulp – npm install -g gulp
As you know the cloned code base still does not have the required node modules stated in package.json for the tools to work, specially gulp.
To download node modules – npm install
After you install Bower, now you can download the front-end dependencies stated in bower.json.
To download bower components – bower install
That would download bower components and place them in /app/bower_components   dir.
Finally, when everything is in place, you can execute gulp to build your cloned project.

Managing front-end dependencies using Bower

Bower is a package manager similar to npm, Maven or NuGet but is specifically built to manage the dependencies of a front-end project. This can include packages containing JavaScript, images and CSS. Twitter and the open-source community maintain Bower and the packages.
The web app dependencies required for the project are stored on the bower.json file similar to the following, which has the package name and required version.
[cc escaped=”true” lang=”javascript” file=”2014/06/blog-code-2.js”][/cc]

Here are a few useful Bower commands.

  • Search the Bower registry for a plugin. In this example, it will show all the packages related to angular-ui. [cc]bower search angular-ui[/cc]
  • Install the Bower plugin and modify bower.json accordingly. [cc]bower install angular-ui –save[/cc]
  • Crosscheck the packages mentioned on bower.json against the
    installed bower packages to check their status. This shows whether the packages are installed and whether there are updates to them. [cc]bower list[/cc]
  • Update a package to the latest version. [cc]bower update angular-ui[/cc]

Building the project with Gulp

Gulp is a build system such as ant, which is built on top of node.js and is especially useful when building web app projects. Gulp depends on a set of gulp plugins that you can install using npm, to carry out a set of housekeeping tasks.
Gulp can automate many parts of your web app build system including the following.

  • Compiling SASS files to CSS files.
  • Run JSHint to find errors.
  • Concatenate and minify JS and CSS files.
  • Compress image files.
  • Deploy the web app to a built-in webserver and live-reload the browser when a change happens to any of the files in /app directory.
  • Deploy your production-ready web app to production servers.
  • Run unit tests.

One of the advantages of using a tool like Yeoman to generate your web app is that you would get the build system pre-configured with all the tasks and plugins in place. Gulp plugins are managed as npm modules and can be installed using the npm install command

To install the JSHint gulp plugin manually and add it to package.json as a dev dependency, we can use:
[cc]npm install gulp-jshint –save-dev[/cc]

The following depicts the script task defined by Yeoman in gulp.json.
[cc escaped=”true” lang=”javascript” file=”2014/06/blog-code-3.js”][/cc]

The gulp.json file placed by the Yeoman gulp generator has a few predefined sets of tasks.

  • styles – Compile SASS files copy to the styles folder
  • scripts – Runs JSHint on all JS files
  • HTML – Runs tasks styles, and script as sub-tasks and copies html files to dist directory
  • images – Optimizes images and copies them to dist directory
  • fonts – Copies font files to dist directory
  • clean – Cleans the dist directory
  • build – Runs html, images, fonts, extras subtasks
  • default – Tasks that runs gulp without any arguments. Consists of running clean and building tasks
  • serve – Serves the web app using a built-in web server
  • watch – Serves the web app using a built-in webserver and live reloads the browser whenever a change occurs in any of the source codes

I hope the above tips were of use when creating your first front-end project.

Life at CalceyOpinion

Calcey bolsters its engineering efficiency through Test Automation

Test Automation is an old idea dating back to the 1970s and 80s, when software developers attempted to reduce the need for manual retesting of progressive releases of a software product, by running a script that tries to match expected outcomes with the actual ones. As the Lead Tester for Calce’s QA Engineering team, I consider Test Automation as an important efficiency strategy for our clients.

One nagging myth to dispel about Test Automation is that it is not an automatic way of doing a tester’s job! Instead, it’s just a way of extending a tester’s reach of what they do in their minds –  which is to conceptualize the functionality and exception pathways in a given software product from the point of view of an end user. Automation allows testers to focus on new functionality and exceptions, thus improving engineering efficiency in incremental product development initiatives that span a significant period of time. The codification of test cases in an imperative language also encourages superior testing diligence –  in that one is forced to minutely consider all the test scenarios when scripting a given test case.

Testers still have their work cut out when maintaining an automated test suite for a growing software product. They must carefully think through the functional changes and exception scenarios, and codify them during every development sprint. This activity ideally ought to replace the need for writing manual test cases on Excel spreadsheets, but in practice, all test scenarios might not be scriptable due to the inherent limitations in available test automation frameworks, so a certain percentage of manual test coverage will likely remain.

We at Calcey strongly believe that testing, whether automated or manual, requires human ingenuity to be effective. We consider automation as an important weapon in our quality assurance arsenal. As such, we leverage the following test automation technologies in our ongoing product development efforts:

  1. Selenium Web Driver with Gallio Automation Platform
  2. Selenium Web Driver with Robot Framework
  3. Selenium Web Driver with Cucumber Framework

As you can see, Selenium Web Driver is the test automation server of choice for all our projects. It is the server component that actually performs the GUI actions of the application by directly invoking the Browser automation API commands. It is the workhorse demon or “phantom tester” . The scripting language and execution frameworks used vary depending on the technologies with which the product is developed. Test cases written in Visual Studio/C# can be run with the Gallio Test Runner, which works seamlessly with Selenium Web Driver. Our preferred Test Runner for Python/Django projects is the Robot Framework, which has an easy-to-use tabular test-data syntax and a keyword-driven testing approach.

A cucumber is a tool for running automated acceptance tests written in behavior-driven development (BDD) style. BDD is a popular Agile testing method that describes test scenarios in plain natural language. This means that the “tests” (which are plain text feature descriptions) are typically written before any imperative language scripting, and placed into “feature files”. Cucumber then interprets these tests into a specified programming language (such as Ruby, Java or . NET).

Calcey also uses Jenkins as its Continuous Integration tool, working in conjunction with test automation. Jenkins is our preferred open-source tool to perform CI. The basic functionality of Jenkins is to monitor a version control system and to start and monitor a build system if changes occur. Jenkins monitors the whole build process and provides reports and notifications to alert maintainers of successes or failures. We set up a scheduler in Jenkins to read the committed regression test scripts from GIT (our code repository), which runs the scripts, evaluates the results and shows them in our Jenkins dashboard. With every release, we run regression suites to ensure the new functionalities don’t break existing ones. The QA team monitors the results and reports any failed scenarios as bugs on JIRA.

Many of our clients like CompareNetworks, Westfield Malls and Stanford University have benefitted significantly from the cost efficiencies brought about through Test Automation. Test automation is our recommended strategy for reducing QA bandwidth bottlenecks in complex product development projects, where the product evolves continuously over several months or years. Also, Test Automation offers a challenge and an alternative to manual testing, making the lives of QA Engineers a whole lot more interesting!

Life at Calcey

Calcey helps Stanford University build a responsive "Leadership in Focus" Website

Stanford University

Calcey –  a San Francisco-based software development company –  has been maintaining the website for Stanford University’s Graduate School of Business “Leadership in Focus” program since August 2010. The need arose late in 2013 for building a new website, which would provide a seamless user experience for this portal when viewed through both desktops and smartphones. Calcey rose to the occasion to help Stanford University develop the new desktop and mobile device-friendly (responsive) website, which went live in February 2014 (see: www.leadershipinfocus.net).

The business requirement for the new website was to improve the user experience. The mobile view has a simplified user experience and supports a wide range of popular smartphones, web browsers and operating systems such as Safari on iPhone or Chrome on Android devices.

While creating the new website there was an opportunity to replace the former legacy ColdFusion-based technology. After due consideration, Calcey chose to develop the new website’s features using the Python programming language, in combination with the Django web framework. This choice of technology helped Calcey deliver the project within a few months. The website is hosted on the Amazon Web Services (AWS) cloud and connected to a common MySQL backend. Calcey also bridged the website with SSO technology for one of the Leadership Program’s key clients.

Stanford University’s Graduate School of Business “Leadership in Focus” program is an exclusive training program focused on developing the leadership skills of corporate executives and other mature learners who seek advice from the best leaders in the world.

Susan Feland, Director of Online Leadership Programs at Stanford GSB, was delighted with the final outcome:    “I am thrilled with the work your team has done for me.  The team has been great to work with and you have been very responsive to our needs and focused on delivering great work.  I know that single-sign-on integration was also quite difficult, but the users are now thrilled that we were able to launch on time and that everything works. Thank you for such professional work!  It is a pleasure to work with the Calcey team!”

Interviews

Interview with Andy Miller, Silicon Valley CTO working with Calcey

Andy Miller

Digit IT Magazine recently met up with Andy Miller, the Chief Technology Officer of CompareNetworks, at Calcey premises in Colombo, Sri Lanka. They asked Andy for details about CompareNetwork’s relationship with Calcey, as well as his general opinion about offshoring with a Sri Lankan IT company.

Digit IT Magazine: Thank you for giving us this opportunity to speak with you, Andy. What is it that CompareNetworks focus on?

Andy Miller: Our business is a collection of websites and mobile applications that focus on highly technical marketplaces like Life Science, Dental, and Ophthalmology. These are our marketplaces where websites bring buyers and sellers together. We also produce mobile applications that serve a variety of purposes from sales productivity, all the way to end-user training in the same marketplaces that our websites serve.

Digit IT Magazine: Why have you selected Calcey? How did the partnership begin with them?

Andy Miller: Oh, I guess, partially by chance, CompareNetworks, one of our other co-founders knew the founder of Calcey, Mangala. We started with some very small projects with Calcey back in 2005, and it just grew from there, we found great success in our early projects that were very much focused on content and developing content for our websites. And we moved from that into engineering, and slowly over a period of time transitioned our engineering firm in-house to fully here at Calcey.

Digit IT Magazine: What were the reasons for not hiring talent from Silicon Valley itself to execute the projects?

Andy Miller: So right now it’s actually very difficult to hire engineering talent in silicon valley, we are competing with companies like Apple and Google for top engineering talent, and for a small company like ours, it’s very time-consuming and expensive to find and retain engineering talent.

Digit IT Magazine: How has the partnership with Calcey been? How effective are they?

Andy Miller: Our partnership has been great with Calcey. We started off with content development and moved into engineering very quickly, and one of the strengths that we recognized very early in working with Calcey was Calce’s ability to not only follow the instructions that we were providing but to also understand our business and make day-to-day decisions based on their deep understanding of our business needs.

Digit IT Magazine: Your “ImSmart” app has been named the fastest-growing product in CompareNetworks history. Tell us about it.

Andy Miller: So the “ImSmart” app started actually as an internal concept, an app that we were going to use for our own sales team, that was a productivity tool for them to manage their marketing assets. So, we developed it for our sales team to use for their own productivity, to store PDF files or any other materials that they might use in the field.

We quickly realized that a tool like this could easily be used for any of our customers as well, as our existing customers for our websites. So we began to develop a pilot project for one of our customers, again a sales productivity tool to manage marketing assets for their sales team, and it took off from there.

Digit IT Magazine: Traveling from the US to Sri Lanka, how are you finding it, enjoy the time spent here.

Andy Miller: I love coming here; I love seeing Colombo and eating spicy food and it’s a treat to visit and also to work with this great team of people. I’ve really come to build relationships with the people here at Calcey and I really enjoy working with them.

Digit IT Magazine: Any words for other Tech companies in Silicon Valley to work with companies in Sri Lanka?

Andy Miller: I would encourage anybody to work with a company like Calcey here in Colombo. We’ve had great success, it’s been very efficient for us to get the work done that we need to get done, and I’ve no regrets at all it’s been a great experience.

Opinion

Conforming to JPA 2.1 for persistence, a practical experience

Custom software development in Sri Lanka

Calcey is currently engaged in the challenging task of overhauling the persistence layer of the software platform for a leading multi-player gaming company based in Silicon Valley. The client’s Java-based software infrastructure is a complex blend of different technologies such as Spring Framework, JSP, Tapestry, HiveMind, Hibernate, Oracle, MySQL and PostgreSQL. The versions of some of these frameworks used are deprecated and have been targeted for gradual replacement by the client. Discussions took place on how to maintain the platform tiers independent and flexible for different technologies. There was particular concern about the persistence layer of this platform, which had been wired using outdated Hibernate 3.1 technology.

The Hibernate framework is used for mapping object-oriented entities with a relational database. Being open-source software, Hibernate has its advantages and disadvantages. The main disadvantages of Hibernate are:

  1. It is an open-source solution framework and often goes through model revamps. Upgrading from an older version of Hibernate to a newer one can prove to be very difficult owing to the frequent changes in hibernate-specific APIs.
  2. Switching from the Hibernate persistence framework to another alternative is time-consuming, due to its proprietary query language and annotations.
  3. The custom implementations of certain Hibernate features like caching introspection are not mature and are possibly earmarked for deprecation.
  4. It is the industry standard today for the ORM layer to be unbounded by a specific technology.

After all, keeping one’s application layers simple, independent and swappable is an architectural principle that an organization would aspire to have. So a goal was set for Calcey to migrate the existing JPA incompatible ORM layer to meet the JPA 2.1 standard. The migration would ensure that the ORM layer was independent of Hibernate-specific class libraries, thus enabling easy configuration of different ORM technologies such as Eclipse Link or MyBATIS.

Migrating from one ORM to another can be a simple task once JPA is implemented, as is demonstrated below:

The Calcey team did a preliminary assessment of the interfacing points in the code base (with the ORM layer) and decided to initially migrate from Hibernate 3.1 to Hibernate 3.5 (Hibernate 3.1 which does not meet the complete JPA standards and is buggy). Thereafter, the team stepped into refactoring the code in earnest –  a time-consuming task due to the many data calling points within the other architectural layers of the system, often occurring from different frameworks such as Tapistry and HiveMind.

A team of two developers and a tester are dedicated to this project, which happens to be my first project management assignment at Calcey. We have scoped out the requisite changes over a somewhat longer period of time, to manage the regular feature implementation requests in parallel to this important refactoring exercise. Calcey hopes to complete this refactor in the coming three months.

Life at Calcey

Calcey helps ease the pain in kids who have cancer

Calcey

Calcey Technologies has made a commitment to help Kids with Cancer in the Maharagama Cancer Hospital, where any employee of Calcey can volunteer and contribute to this valuable cause along with the company.

Cancer is a deadly disease, which can inflict great pain to its victims if it reaches the terminal stage. When little kids get cancer the resulting human suffering is immense because both the child as well as its loved ones undergo psychological and physical trauma. Early diagnosis and treatment is the only way to alleviate this suffering in children with cancer.

Sadly, the very treatment procedures themselves are painful and hard for a little kid to endure. Chemo treatment requires the little ones to endure regular hypodermic injections over long periods of time. Getting a sharp needle stuck into one’s veins daily is not fun for a child. Often the veins are not visibly on the surface of the skin, and doctors have to make several attempts to successfully inject the medicine.
There is a neat solution to ease the pain caused by a regime of injections, called a “Port” 1. This Port will last for a year and a half, or until the end of the treatment regime, and thereby help the kids go through it with less pain. However, most of the parents of child cancer victims cannot afford this solution.

The employees of Calcey Technologies, along with its Directors have made a commitment to help minimize the suffering of children during their chemo experience, by donating two Ports per month. Their monthly contributions support buying Ports for kids in the Maharagama Cancer Kids ward, through the “Cancer Care Association”  –  a Not For Profit organization that is committed to Cancer Care. The Cancer Care Association has already taken the initiative to negotiate with an Austrian supplier to provide Ports for a specially discounted price (the Original price being $500, the discounted price is $200 or approximately LKR 23000).

Each Calcey employee has given their explicit consent to deduct a certain amount of money from their monthly salary, and the Company tops up the balance to meet the cost of two ports, and honour its commitment for Cancer Kids. Even though the contribution that a single employee makes is relatively small, the Calcey commitment helps minimize the suffering in children, which is truly commendable.
References:

1. The Port: http://en.wikipedia.org/wiki/Port_(medical)
(Image Courtesy Wikipedia: http://en.wikipedia.org/wiki/File:PAC_met_Gripper_erin.JPG)

Life at Calcey

Calcey team has an evening of fun, "Paduru Party" style

Calcey

Friday Dec-06th ushered in a fun event at Calcey, with the entire staff participating in an evening of song and dance. The theme of the event was that of the locally popular “Paduru Party” –  a musical get-together where folks sit on mats and sing together in harmony.

A hired 3-person band provided the background music, while Calcey employees took turns as lead vocalists. Old Sinhala classical favourites such as W. D. Amaradeva’s Aradhana, Milton Perera’s Thawa Supun Sandak and Annesley Malawana’s Mango Kalu Nande were big hits at the event.

Plenty of eats and drinks were on offer to fuel the enthusiasm of the budding artists, and the folks loosened up as the evening progressed. This was a memorable event for all at Calcey.

Announcements

Scrazzl.com partners with Calcey to develop cloud-based apps

IT companies in Sri Lanka

Scrazzl.com has decided to partner with Calcey Technologies to implement their core product development needs. Scrazzl.com is a high-potential startup in the bioscience product information dissemination space, which CompareNetworks acquired in July 2013. Scrazzel.com is headquartered in Dublin, Ireland.

The core user story of Scrazzl.com is for researchers to be able to search for bioscience products such as antibodies, obtain product listings and vendor information, and have them intelligently matched with research papers that sight their use. Scrazzl.com also acts as a behind the scenes syndication partner for other bioscience product search platforms, by providing them with an API that delivers research material and product/vendor activity for a given search string.

Scrazzl.com is coded using the PHP language and the Zend development Framework. The application is deployed on the Amazon EC2 cloud, and the backend data is functionally distributed across My SQL and Mongo DB. Apache Solr is leveraged for speedy article search.

Calcey has deployed a full-time software engineering team inclusive of considerable architectural and testing bandwidth to help materialize the development roadmap for this innovative product. Calcey’s representatives visited the Scrazzl.com office in Dublin in August this year for knowledge transfer purposes, and development of new features and improvements to the platform is now in full swing.

Announcements

imSMART, the Fastest Growing Product in CompareNetworks’ History

IT companies in Sri Lanka

As the leading software development partner of CompareNetworks, we are delighted to see imSmart unveiled to the corporate world: http://www.marketwired.com/press-release/CompareNetworks-Inc-Unveils-imSMART-the-Interactive-Mobile-Sales-and-Marketing-Tool-1841292.html

Calcey is proud to be a technical contributor to the development of this product that is showing great potential, and wishes CompareNetworks every success with broad-basing its user base!