C++ in brief
Object oriented programming
The programming language of C++ has been on the market for a long time, but it is still very popular. Since its introduction, many new languages have been invented, but none has been able to surpass the potential of the C++ language. The C++ language belongs to the low-level languages and therefore, it is possible to use it to write applications which do not need much computer memory very quickly. It is currently experiencing a revival, going through a new standardisation, joining the modern languages and latest trends in the area of programming languages.
Visual Studio 2015
Visual Studio 2015
To be able to write a source code on a high quality level and quickly, you need good development tools. In the beginning, our development focused mainly on Windows and for that, the optimal development environment appeared to be Visual Studion. We started with the version of 6.0 and gradually, we moved to the current version of Visual Studio 2015. The advantage of Visual Studio is the integration of several programming languages into one tool. We are currently using the XCode 7 on the MAC OS platform. However, other tools like AQTime, VTune and others are necessary to write good codes. At developing our products, we use the C++ standard libraries (STD, STL, BOOST etc.) and various specialised libraries (ZLIB, LIBJPEG, LIBPNG, LIBTIFF, FREETYPE and many others). We try to use multi-platform libraries for easier future development using other platforms.
Our knowledge
Our knowledge
Most of us are developers and our primary programming language is C++. Knowing the basic C++ standard libraries is crucial to us. The PDF specification is very detailed. Thus, many of us specialise in certain areas. In addition, a part of the developers focuses on areas outside the PDF format, like user interface, connection to various DMSs or integration of our products to other programs (like plugins in Internet browsers). Next to the developers, our team consists also of specialists, focusing on installations and testing, as well as taking care of specifications and task managing. Many of us master also other programming languages except the C++ (like java, C# etc.). Our team is able to cover the whole project from its beginning to the delivery of the final version. This way, you do not need to hire any other teams to get a professional product.
GIT and team work
GIT and team work
Working in a team means that the team needs to be managed efficiently and you need to share a source code. In the beginnings, we used own source code sharing systems. As the team grew, we needed to make that more efficient. We started using a CVS system on own server and later, we moved to a professional base, implementing the GIT system in 2012. At present, we use GITHUB to share the source code with our programmers and the building systems. We use JIRA and Confluence to manage and monitor our tasks. The system logs all the tasks, as well as flaws in our apps. The tasks are being assigned to the responsible persons automatically, allowing us to keep track on the whole development and use of manpower and resources of the team. We have been using the Bamboo system to build up the final product. Since 2016, we have started using the Jenkins system.
Modern C++
Modern, quick, efficient, robust, and optimal. This is how you could describe a code written using the latest standards of the C++ language. The new C++ 11 standard returned the C++ to the modern, quick and efficient languages. The C++ 14 standard only supported this, adding its optimality and robustness. Currently, the C++ 17 standard is being prepared, adding new features and bringing the modern C++ back to the top.
Cross-platform
Despite the fact that our product of Nitro Pro is being sold mainly for the operating system of Windows, the library working with the PDF document is compatible with various platforms. The library can be used for Windows, MAC, and iOS. We are also preparing versions for Android and Linux. The library was written in the C++ language and is accessible via the HFT (host function table). This allows us to replace a feature easily, depending on the architecture. The library may be linked statically and dynamically, based on the requirements of the customer.
Used libraries
We use several third-party libraries at our work. Except the standard C++ library, we also use the boost and Qt libraries, as well as the operating system libraries to create an optimal code. Moreover, the PDF standard refers to many other algorithms and standards. Therefore, we also use specialised libraries, like zLib, FreeType, Anti-Grain Geometry (AGG), OpenSSL, and many others.
Testing
The best tester is the customer. Nevertheless, it is always necessary to test the product to deliver it at the expected quality level. Testing is being performed at various levels, from basic testing by the developer, through testing by an internal or external team of testers, to integration tests. We use unit tests, case tests, automatic tests, regression tests, and third-party testing. We use also other tools, like VTune, AQTime, JIRA, Bugsplat, and others.