There was DockerCon US 2016 in June in Seattle [http://2016.dockercon.com]. Docker community grows from year to year, and this is the largest Docker-centric event. There are a lot of news announced during the sessions, plenty of use-cases described, talks about success stories from enterprise level projects to middle-size Software as a Service solutions.
There was announced new version of Docker 1.12. It should be released in several weeks. There will be built-in Orchestration and Docker Swarm.
Orchestration is a set of duties for installing, updating and maintaining your infrastructure during lifetime of the application. It doesn’t seem a problem in case of several servers, but if you have more systems to hold under control in your Software as a Service project, then it would not be so easy. Orchestration have to be useful and simple. To achieve both of those goals, the orchestration is built-in into new Docker version.
Docker Swarm is a technology to install and maintain a cluster for Docker. Several systems may be joined together and treated as the saem Docker container. There are Swarm manager and worker nodes. They are communicating in secured way via TLS transparently for software developers. We can use docker CLI to create a swarm:
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.
Nowadays, almost all applications are asynchronous multi layer systems linked together via events scheme. One module of the system subscribes on events produced by another part. It’s regular Listener pattern. We have been designed and implemented a lot of applications in this way, but all of them are placed in the middle layer or UI side. It would be nice to have similar functionality on the data layer of persistent storage. Redis [http://redis.io/] as a Database Development system provides Listener approach out of the box. But Redis is in-memory key-value storage. It’s used rather as cache. There is RethinkDB database [https://www.rethinkdb.com/] supported Listener pattern and used as clustered document storage like MongoDB.
RethinkDB is open-source. There are installation packages available for all major platforms. On the other hand, it would be better to use docker container:
docker run -d -P –name rethink1 rethinkdb
RethinkDB has out of the box sharding and replication clustering. You can configure a cluster via Web UI administration console. Last one can be used for monitoring, as well.
Microservices architecture [http://martinfowler.com/articles/microservices.html] is a mature robust Web Application Development approach are widely used among all web development platforms. It allows easy integration, deployment and horizontal scaling for VPS, pure cloud or dedicated hosting.
Generally, there would be several application instances runned on the same system or separated machines. User may connect or send request to any of front-end server and that transaction may be processed by any of instance of the next layer. That looks ok till we receive another request of the same user, which involves the result of previous transaction or an object specified for this case and this user. It’s called the state. And if it holds the state on specific instance, then the request have to be routed to that instance to be processed. Another approach is to share the state among all instances we have in the cluster. Both cases needs additional efforts for design, implementation and support. JWT provides a solution for this problem.
Layout as a problem
At design point of view, any web site needs some sort of layout. It’s a mandatory Web Development aspect for even very basic HTML content like landing pages. Modern web picture have to be splitted into logical parts in terms of some structure. The problem is the nature of the web. 30 years ago, when the web was actually invented, a page was treated as pure top-to-bottom flow of a text content and images. That was original layout only. A lot of technologies have been applied since that time. E.g., pure HTML tables, floating div elements. Most of them look like hacks. Keep in mind, there were outstanding features and behaviour of specific browsers and their versions. Yes, I’m talking about dark times of IE6. The situation became even worse because we had to support wide range of mobile devices in responsive way. To solve all these problems there are a lot of grid system implementations available as standalone libraries or complete Web Development frameworks. E.g., Bootstrap [http://getbootstrap.com], Foundation [http://foundation.zurb.com].
Flexbox as a standard solution
Flexbox [https://css-tricks.com/snippets/css/a-guide-to-flexbox/] is not just one more solution, but rather a standard that solve layout problem on basic level. It would be better to have it initially at the beginning of Web Development epoch. W3C is going to add Flexbox to its official standards soon. Technically, it’s not a library but just a set of CSS3 properties to layout DOM elements. There are 3 versions of Flexbox properties set: old, tweener and new.
What is the criteria for professional software developer? One of the best answers to this question is “to be smart and get things done” [http://www.joelonsoftware.com/items/2007/06/05.html]. On the other hand, emotional intelligence is very important. Software developers should be in contact with all stakeholders of the project, like clients, UI/UX designers, testers and even other developers. There are pretty specific forms of communication in Application Development as a process. It should be effective at line of share knowledge, catch problems, prioritize features to implement.
Share the document
In case of remote collaboration, first of all, it needs to have ability to work on the same documents and artifacts. Google Docs is a set of online office applications, that may be treated as substitution to standalone MS Office package. It allows view and edit formatted documents and spreadsheets remotely by distributed teams online with adding comments to appropriate places in the document.
Share the desktop
The most effective way to describe a bug or case is to reproduce it visually. There is no problem to look at screen if 2 or even more persons are in the same office place. It’s not so easy to provide demo remotely. In this case developers use online screen sharing tool. There is well-known GUI tool Chrome Remote Desktop [https://chrome.google.com/webstore/search/remote%20desktop] by Google. It’s implemented in the form of browser extension, so it’s available for all platforms. It’s very similar to Windows Remote Desktop. Windows Remote Desktop was designed a lot of years ago for remote access to Windows Servers and PC’s, but Chrome extension is for online screen sharing among 2 users. Skype messenger also provides this functionality. It’s possible both to view a remote display and grab keyboard or mouse input.
Bitcoin [http://www.investopedia.com/terms/b/bitcoin.asp] cryptocurrency has being used widely around the world for already several years. First of all, let’s accept that it’s both robust technology and mature implementation. It’s going to be more important in our life as new tool coming to substitute old good bank accounts, wires and credit cards. Besides, blockchain [http://www.investopedia.com/terms/b/blockchain.asp] technology, that is an important part of bitcoin system, potentially provides solutions for plenty of problems beyond E-commerce an financial transactions, based on the same general principles as bitcoin — decentralization and privacy.
The main goal of any currency system is to providing ability to exchange or transfer money from one account (or wallet) to another. Bitcoin schema is based on transactions as well. E.g., Alice is going to send 5 BTC to Bob. The transaction in this case consists of 3 main parts:
● Bob as destination of the transaction
● 5 BTC amount of transferred money
● Source of the money where Alice was received it from. E.g., Dale sent Alice 5 BTC.
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.
From plain static to LAMP and back to static
A lot of years ago CERN engineers invent Word Wide Web technology as a linked set of plain text documents with links to each other and special formatting for visualization. Ancient Content Management was just an editing of static files on the disk. Times changed. We passed several huge revolutions in Web Development and Content Management. LAMP stack and its similar analogies based on other platforms were like standard for decades. We hold data and other content in relation database with SQL interface to access it. The pages have been treated as HTML content generated dynamically on server side by some engine implemented in a programming language with appropriate library or framework. All parts of this scheme have been re-designed or re-invented from time to time. Some of them even several times. There was a lot of hype about Web 2.0. For making development process more robust and performance of solution better, we started to use solution appropriate for specific task or project, e.g., MongoDB instead of MySQL, MVC instead of mess of code. One of such method is to present web site as a set of pure static web pages without any dynamic logic on server side, absolutely.
Generate static content offline
Main idea of such approach is to have a project with sources like data, html templates or includable parts and containers to wrap all those elements together and configure navigation between pages. On another hand, we need a tool or even several utilities to build the project into destination representation of static web site. First time, our team experienced such technology in the Fitness project for very famous Top 50 public Web Portal 10 years ago.
Nowadays, nobody code raw CSS3 in real-world HTML5 Applications Development. Huge amount of monotonic repeated code is too hard to create and support. Usually, one of CSS preprocessors are used to implement CSS3 styles in more elegant way. LESS [http://lesscss.org/] is one of such approaches. It doesn’t need to spend a lot of time to start using it. Try online tool [http://lesscss.org/less-preview] to process LESS into CSS code.
First of all, LESS is pre-processor of special syntax into CSS code. Besides, CSS code is a correct LESS code as well. You can start porting your existing pure CCS3 project into LESS just by a copy-paste action. When we mark some section or module with specified CSS class we are going to format and style not just wrapper but all its inside components as well. LESS helps us in this most used case by its nested syntax. E.g., LESS code: