Security concepts are very important at line of professional Application Development in enterprise scope. Cryptography helps us to achieve Integrity and Confidentiality as 2 of 3 main Security principles. Protocols needs us to encrypt and decrypt important data, specific content have to be signed and verified. For decades we used RSA, OpenSSL [https://www.openssl.org/] as general-purpose cryptography library and its wrappers. On the other hand, OpenSSL is not so easy to work with. It needs both some level of understanding cryptography and its approaches as a whole and pure implementation aspects of OpenSSL, as well. For now, we have much better approaches. Easy to use, but strong at line of cryptography and implementation.
Daniel J. Bernstein (with colleagues) released NaCl library [https://nacl.cr.yp.to/] several years ago. It’s pronounced “slat”. The main goal was to bring easy-to-use solution for software developers, who need just-work cryptography in their projects. Simplicity is the key point of the interface of the framework. On the other hand, it covers all duties of cryptography library and provides all common routines: hashing, public-key encryption, signing and authenticated encryption. E.g., authenticated encryption is an algorithm including 3 steps mixed in one of 3 ways. NaCl provide single interface crypto_box, which is done everything in one step. Such approach is much safer. Developer can’t break something in the flow. Main implementation of the library is in C, C++ and python. C version can be used in embedded Application Development. It doesn’t depend on dynamic memory allocation. There are several implementations of the same function.
This month we created REST service as a project. Technical requirements were to use Hapi.js architecture [http://hapijs.com] to implement a solution. It’s a better alternative for well-known express framework. The problem with express is its simplicity in design. One of the goals of its authors was to make it as simple as possible. But in real life it’s not a criteria. You have to spend a lot of time to configure all components you need for your application. E.g., getting raw HTTP request content needs particular middleware attached into some point of HTTP request/response chain. That’s why a lot of teams and projects choose something more robust. Hapi provides very good balance between simplicity and power.
Beyond express framework
Hapi was created by Walmart software development team to hold under control their black-friday storm. By the way, this fact shows us one more time that node.js platform has both high performance and robust Application Development approaches.
A lot of cool technologies are coming from non-web world to Web Application Development. One of the most excited examples is WebGL [https://www.khronos.org/webgl/]. It’s a free web standard to use low-level 3D graphics right on the page via canvas element. It’s based on OpenGL ES 2.0 and has similar development approaches. To test if your web browser supports WebGL just go to http://get.webgl.org/. Almost all modern browsers and platforms support WebGL. It doesn’t need special plugin like Flash player or Unity.
Vim [http://www.openvim.com/] is a successor of the ancient vi text editor, which was created as primary UNIX visual text editor several decades ago when computers were really big and expensive. Despite such a great age, Vim is still a very popular and useful tool in Software Application Development and DevOps. Both console and GUI versions are available for all operating systems and platforms. It’s included into any standard installation set of Linux/UNIX family system. Because of its plain nature, our programmers can use Vim as both regular text editor installed and runned locally and opened in remote shell via Internet with effective workflow even in case of slow network connection.
In brief, Vim has 2 main modes: to navigate a cursor throw the text and to enter the text into place marked by the cursor. This would be the most terrible barrier between you and Vim. Don’t fight it. Just accept this approach and move on.
Every modern software development stack has one or more well-known common libraries which is not a part of the language core. On the other hand, such general purpose package extends standard set of methods and data structures to professional level of software development. E.g., STL for C++ world. Apache Commons [https://commons.apache.org] is one of the most useful set of general libraries in Java Development. A lot of other packages and frameworks are based on them. In case of new project, Iflexion developers, first of all, to look at Guava [https://code.google.com/p/guava-libraries] — a modern professional implementation of common methods.
Guava is done by Google, freely distributed and supported by Internet giant. They even claim Guava usage in their own projects as a standard. There are 3 main programming languages are used in Google: Java, C++ and Python. Guava is based on Java 6. That makes it useful in legacy projects implemented in terms of Java 6 and needed to support this version. E.g., strings join may be done in Java 8 as String.join(“, “, strings) or by Guava Joiner.on(“, “).join(strings). Guava modules are created with design patterns in mind. There are builders, factory methods, adapters, etc. Guava available via maven/gradle. E.g., for gradle:
ES6 new features
A web surfing by the browser is the most valuable way Media Content Distribution provided around the World. Technically, this process is based on HTTP networking protocol. Actually, HTTP is treated as protocol of Internet. The industry is always in motion at line of new features and challenges, so HTTP protocol is waiting for its new second version. For now, HTTP/2 [https://github.com/http2/http2-spec] is approved by its creators and going to be accepted and published as RFC standard. HTTP/2 release will have huge impact on direction of many networking techniques and implementation approaches. It would be first sufficient change in Media Content Distribution since HTTP/1.1 release in 1999.
HTTP/2 is based on Google’s SPDY protocol. As you can see, there is one more Google’s technology appears modern enough to be used as standard of future. HTTP/2 is a binary protocol instead of text HTTP/1.1. There is much better performance produced by changes in architecture: header compression, multiplexing requests, requests priorities, proactive push-responses from servers side. It supports IPv4, IPv6 and NAT. There are modern security approaches. Firefox and Chrome already have HTTP/2 support in special mode. To test new protocol you need to install HTTP/2 server. There are several server side implementations by Akamai, Google, Twitter and open source.
There are several powerful technological stacks available to create any kind of web application from a set of microservices with REST API to huge enterprise solutions. They a based on appropriate programming language as a platform, like Java, C#.NET, Python, PHP, etc. All those web development platforms are completely separated. They are rather linked and even much more than you ever imagine. Trends are popular in one platform found their mirror in another and vice versa. That’s mostly because of enthusiastic activity of multi-platforms software developers. E.g., a lot of Java Development packages and approaches are converted into their C#.NET clones almost one-to-one with adding a .NET suffix.
Another example of multi-platform web development approach is micro frameworks. These are very light MVC frameworks that provides basic web application functionality out of the box. On the other hand, they need minimal code and development efforts as a whole to implement and launch ready to use application. PHP has Slim, Limonade, Lumen, Flight, Silex. Sinatra is the most popular Ruby micro-framework. Flask is for Python stack. For Java Development there is a Spark [http://sparkjava.com/].
Nowadays, there is no so huge hype around cloud computing as it was several years ago. On the other hand, cloud development is a robust part of IT industry with its own history and trends. For now, Software as a Service is not just about launching the code in the cloud and scale it in real time. Most Cloud users deploy code weekly or even daily, there are questions on Testing/QA processes, Production/Deployment workflows and more strong software security approaches. Elasticity of cloud structure the key factor to implement Big Data project in the cloud, as well as, storage, analytics and batch processing application. Large companies want more control on their Software as a Service solutions. They can build their own cloud infrastructure based on one of open source solutions. Small teams rather use well-known public clouds.
Cloud development principles
A lot of projects are moving to the cloud these days. Developers face a common set of challenges. There are basic principles to achieve the best results. Document architecture and deployment infrastructure. Designed solution should be highly cohesive and loosely coupled.
In 2014 was released first officially stable version 1.0 of the Meteor [http://www.meteor.com] most cool web application framework nowadays. Software developer have been using a lot of web application development frameworks and libraries in development and production for 10+ years. Why Meteor is so excited? It’s not one more platform in a row or new pure marketing buzzword. It’s rather a new approach to the construction of the project. This technology provides to Iflexion a new quality of Web Application Development process.