We Bowe To Open Source

Open Source software and community are the lifeline for many a business for getting their digital presence built and operated at a low and affordable cost while having reliable business continuity. Teams that provide services using open source components find it easy and convenient to gain and use experience of building software using them.

We at Pi Axis have contributed to Open Source community as a mark of our gratitude.

Browse .js

Working

Browse.js is a software library that provides various JavaScript APIs which abstract differences in behaviour across various web browsers and their versions. These APIs enable developers to execute DOM manipulation, AJAX operations including multipart forms and other operations smoothly.

Maintenance

Challenges Won

  • Old Browsers Support

    Unit tests written using prevalent (2017-18) Mocha 3 and Jasmine 2 did not work on old browsers like Internet Explorer 6 and Android 1.5 System Browser for several APIs.

    Scavenging took us to find and use Jasmine 1.3 (2013) to make unit tests work across all APIs.

  • No Suitable Test Runner

    There was no test runner available that could support testing requirements of all APIs; collect, parse and present tests results; and help with code coverage.

    Our own tests runner, cross browser tests runner, was written.

Tech Used

Browser Support

  • Chrome
    15+
  • Firefox
    3, 3.6, 4+
  • IE
    6-11
  • Opera
    10.6+
  • Safari
    4+
  • Android
    1.5+
  • iOS Safari
    3.0+
  • Edge
    13-15
  • Yandex
    14.12

What It Took?

  • Build Minutes

    11700+
  • Successful Builds

    67
  • Total Builds

    153

Performance Edge

Browse.js outperforms major similar libraries viz. jquery, mootools and prototype.

Run append APIs (equivalent across the libraries) per library using the buttons. 180,000 calls are made and the number of appends done/ms are shown.

Compare All APIs

Use by Clients

  • ArgilDX

    ArgilDX used browse.js in their security software once the performance benefits were shown and the browser coverage was found to be sufficient.

Gcov Pluggable Port

Relevant Since 2016

Getting code coverage using GNU ARM toolchain 5-2016-q3-update and Eclipse IDE hangs. This repository includes optimally stripped portions from GCC code including a fix for the hang. The code is plugged into an embedded project, replacing the corresponding parts of the toolchain at runtime. With this, code coverage works as required.

Tech Used

Project Complexity

  • Unchartered Waters

    Understanding the gcc code portions related to coverage and stripping out required portions was without any help, especially because such work is not a usual porting work creating a reusable component. The output is useful only in this particular context.

  • Identifying Cause

    The hang should not be there; but it is. A fresh, independent and uninhibited look at the runtime behaviour was needed to understand that an intended single linked list for loop was operating on a circular linked list to cause hangs (3 of them).

Recognition

  • Erich Styger

    The hang was observed when trying to use the code coverage process described in Erich's blog. After reporting the problem and the solution, he acknowledged and linked the port repository in his blog.

  • Google Search Ranking

    The blog is in top 5 results for google search "code coverage with gnu arm", and in top 3 results for google search "code coverage not working using gnu arm toolchain", right up with Erich's original blog.

Continued Relevance

5 Nov 2016

Blog written.

May-Sep 2017

Developers report facing the same issue to GCC team on bug created.

Aug-Sep 2018

Blog user Spencer M gets coverage with toolchain v6 and this port.

9 Oct 2019

Blog user Franck V needs the port for sw4stm32 toolchain.

Feb 2020

Blog user Aparna needs the port for Sourcery Codebench Version 2015.17-26.

Mar-Apr 2021

Akhil Francis tries to use toolchain v10. Consults on email. Gets coverage with v5 and this port.

25 May 2021

Blog user Ron Molan tries to use toolchain v9. Gets coverage with v5 and this port.

Dec 2021-Mar 2022

Blog user Shravan tries to use high toolchain version. Gets coverage with v5 and this port.

29 Jun 2022

Blog user Hinterleitner Florian tries to use high toolchain version. Gets coverage with v5 and this port.

Cross Browser Tests Runner

Needs Maintenance

Cross Browser Tests Runner helps with running unit and integration tests for JavaScript code. It includes interfaces and tools to make it simpler to work with Browserstack, Saucelabs and Crossbrowsertesting. It can be used to test locally, too. It can be used to run tests on multiple browsers on any of the three platforms in parallel, subject to platform-specific limits.

Maintenance

What It Took?

  • Build Minutes

    16000+
  • Successful Builds

    50+
  • Total Builds

    197

Platform Support

  • MacOS
    node 4,8
  • Windows
    node 4,8
  • Ubuntu
    node 4,8

Challenges Won

  • Complex Software

    Abstracting cross-browser testing platforms involved making bleeding edge tech work; solving unknown and undocumented issues; working with lots of tech details; and making complex async flow work using Bluebird.

  • Long CI Builds

    Mature CI builds took 6-8 hours per operating system. Appveyor, used for Windows CI, was bleeding edge. Jobs within a CI build would fail, and there was no restart-the-job option.

Why This Tool?

  • Jasmine 1.3 Support

    No test runner tool supported collecting Jasmine 1.3 test data from browser and parsing it for CI display and computing test status. This was needed for testing Browse.js.

  • Code Coverage

    No test runner tool supported collecting code coverage data created out of Istanbul instrumentation of JavaScript code running in a browser. This was needed for code coverage of Browse.js.

  • Maximum Parallel Runs

    No runner tool abstracted Browserstack, Saucelabs and Crossbrowsertesting. Needed for easily running tests on these platform, and also to maximise number of parallel test runs, towards faster CI builds.

Tech Used

Sphinx Nginx Module

Working

This is an Nginx upstream module for Sphinx search server v2. It enables an Nginx based web application to perform searches with the Sphinx search server using non-blocking I/O. This helps achieving a system that can handle higher incoming traffic by eliminating blocked I/O which would be the case with Sphinx search PHP, Python or other language connectors.

Tech Used

Recognition

  • Sphinx Search

    Sphinx search team verified the working from their end and recognised this module by including it in their Third Party Plugins Wiki.

  • Nginx Developers Community

    The module has been forked by the Github nginx-modules community as the de facto one for Sphinx search. The repository has 40 stars from the Nginx developer community members.

Project Complexity

  • Understanding Nginx

    There was lack of proper documentation on Ngnix upstream modules. And there are no comments in Nginx code. Understanding of the architecture and hooks of the Nginx upstream modules was achieved with self-study, debugging and without any help.

  • Implementation

    There is not enough documentation about Sphinx search C++ server's binary protocol that it implements using socket I/O. The Nginx upstream module architecture does not guide or interface target service's protocol and behaviour on socket I/O.

    The upstream module's hooks gluing Nginx and Sphinx search were made to work using debugging and tuning them based on the findings.

English Text Summarizer

Working

For an idea that involved summarizing media articles, an open source summarizer called OTS (Open Text Summarizer) was used and was rewritten for higher summarizing performance. The gain in performance was between 4x and 8x.

Tech Used

Project Complexity

  • Rewrite For Performance

    The original source was intended for research validation. The data structure design was minimal and not towards performance. C language and its compiler specific mean optimisation techniques were used that needed a rewrite of the software.

Recognition

Setu

Discontinued

Setu was written as a simpler, lean and focused alternative to Angular. Main reasons were complexity of design and opaqueness of flow of Angular that also involves a steep learning curve. An extra requirement was of to do more in abstracting and working with backends.

Tech Used

Use by Clients

  • ArgilDX

    ArgilDX used Setu in their security software after looking at the details of the at par performance, and simpler, focused feature set.

Why Discontinued?

Pi Axis has gradually moved into working on things that involve cross-platform development. We use Flutter that extends React ideas. Effort on building Setu further at this point is currently unaffordable for us.

Performance

Setu performs at par with Angular, and does better than knockout. Performance of template rendering of large loops is considered for comparing.

Live performance comparison of loop rendering done by Setu, Knockout, Angular and Vue is available. Use the button below.

Compare Performance

Challenges Won

  • Performance

    First build of Setu made the browser hang! JavaScript runtime environment is the least forgiving to any extravaganza of code and flow. This was the learning after the journey to get at par performance was achieved.

Contribs To Community

We have contributed to third party open source software with fixes and improvements. We also maintain few which the owners ceased to and use in our work.

CPP Libface

Duckduckgo's autocomplete server for fast as-you-type suggestions was unmaintained and unstable. Fixed instability issues and made changes to allow production size data handling.

Picked up as fast autocomplete was a major requirement. Own fork maintained as maintenance of original repository is abandoned.

CLEditor

This HTML textarea WYSIWYG editing support tool was unmaintained and unstable. Fixed the issues, upgraded, and used in our work.

Picked up due to CLEditor being the only WYSIWYG editing tool with MIT license. Own fork maintained as maintenance of original repository is abandoned.

Codecov

Contributed with addition of support for uploading code coverage data from Windows environment CI. This was a new feature added to codecov's coverage upload tool.

Taken up as maintainers did not have this on priority.

Cassandra Python Driver

Contributed fix for a crash encountered while working with UserDataType type CQL entities. It was a functional bug.

Crash observed while developing a Django Cassandra backend.

Browserstack Runner

Contributed fix for inconsistent crashing in Travis CI build for a test that used browserstack-runner tool. Bug in code caused instability.

Crash observed while developing browsejs.

Valums File Uploader

Contributed with addition of support for controlling number of images to be uploaded, implemented in a backward-compatible way.

Taken up due to no priority support by maintainers.

Browserstack Runner

Contributed with addition of support for reporting test data created using Jasmine 1.3 to browsestack-runner. This was an enhancement.

Tool did not support Jasmine 1.3.