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 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.
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.
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.
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.
ArgilDX used browse.js in their security software once the performance benefits were shown and the browser coverage was found to be sufficient.
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.
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.
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).
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.
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.
Blog written.
Developers report facing the same issue to GCC team on bug created.
Blog user Spencer M gets coverage with toolchain v6 and this port.
Blog user Franck V needs the port for sw4stm32 toolchain.
Blog user Aparna needs the port for Sourcery Codebench Version 2015.17-26.
Akhil Francis tries to use toolchain v10. Consults on email. Gets coverage with v5 and this port.
Blog user Ron Molan tries to use toolchain v9. Gets coverage with v5 and this port.
Blog user Shravan tries to use high toolchain version. Gets coverage with v5 and this port.
Blog user Hinterleitner Florian tries to use high toolchain version. Gets coverage with v5 and this port.
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.
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.
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.
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.
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.
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.
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.
Sphinx search team verified the working from their end and recognised this module by including it in their Third Party Plugins Wiki.
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.
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.
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.
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.
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.
Our answer to the Quora question What are some good open source text summarizers? promoting our rewrite is the 2nd most upvoted answer.
The repository has 36 stars from the developer community.
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.
ArgilDX used Setu in their security software after looking at the details of the at par performance, and simpler, focused feature set.
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.
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 PerformanceFirst 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.
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.
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.
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.
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.
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.
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.
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.
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.