Wednesday, 20 February 2019

3 Reasons why Angular 6 is the Future of Enterprise-Scale Web Applications

Ask any front-end developer today and they’ll tell you React is all the hotness. React can work on the web, your mobile device, your watch, and eventually your hair dryer, fridge, and internet-connected T-shirt. While I like working with React just as much as the next front-end developer, I also have a pretty long history with Angular.
After picking it up in 2012, Angular was the first framework to give me a taste of what a JavaScript framework even is. Now that Angular 6 is out and all the chaos regarding the name change and framework change is behind us, I’m convinced that for large-scale web applications, Angular is not only the best solution, but the only scalable one that can be used no matter how large you foresee your application becoming.
React still has a place for smaller and mid-sized applications. In fact, in that category it outshines Angular because of its cross-platform portability through React Native and also its ease of use as a framework with a shorter learning curve. However, scalability challenges occur much sooner with React than with Angular. Most recently (and famously), Airbnb chose to sunset React Native because of (among other issues) the difficulty with refactoring React code, along with the relatively steep learning curve and boilerplate involved with Redux.
Honestly, if you think the learning curve with Redux is steep, the learning curve with Angular is even steeper. So in that respect, there isn’t a large advantage in using Angular. However, good programmers are known for focusing on long-term thinking as opposed to short-term. In the long run, once you get past the steep learning curve, here are a few ways that Angular 6 notably outshines and outperforms React.js, and why it’s worth learning despite how long it takes to pick up.

1. Slick Tooling

Like many languages and frameworks Google makes, Angular also has really slick tooling. Want to scaffold out a component? The Angular CLI makes it very easy to pinpoint exactly the folder you want to put it in, which module it should be imported into, and a basic unit test for making sure it renders properly. A karma test runner, a styling language of your choice, and now even adding custom templating languages like Pug is very easy to do with Angular 6. Being able to use Pug so easily reminds me of the good old days when I first started with the Angular.js Fullstack Generator. Ah, good times.
Angular 6 also adds two very important superpowers to the CLI: Schematics and Libraries. Schematics allow you to reduce your boilerplate code to a custom schematic that you can create for your own modules and components. Meanwhile, the new library generator makes it much easier to contribute open-source modules. Without it, I would still be largely working on closed-source projects rather than go through the hassle of making specific components very reusable and open-sourced. If it weren’t for the Angular 6 CLI and the convenience it provides, many developers like me who have their plates full already writing code for more than 60 hours per week, would probably not contribute to open source.
Finally, when you use Angular and Typescript with a good text editor like Visual Studio Code, your code gains magical abilities to automatically enter your thoughts and figure out which variable you are trying to use, automatically import it, and use it. You also get the ability to auto-complete your classes with their attached methods that you didn’t even know existed, import modules that you didn’t know were included, and just have to read documentation much less frequently because everything you need to read is right next to your code inside your editor.

2. Type Safety that Leads to Easier Refactoring

Typescript was my first statically typed OOP Language. There, I said it. Like many JavaScript developers, my background was not in formal Computer Science. My first Computer Science course was a Python class on Coursera. Naturally, Python isn’t statically typed either, and I liked it that way. Once I got comfortable with debugging, I felt very nimble in writing code that just worked in Python, especially for scripting and CSV reading.
Well, turns out that with JavaScript, something that “just works” in one situation often requires careful pre-planning and design beforehand to make sure it will also work in future situations as requirements change and products become more complex. Almost every JavaScript developer makes this mistake of underestimating future changes to code at some point. Regardless, as I continued to dive deeper into JavaScript and became more proficient with React and Redux, I definitely appreciated the effort by the community to provide not only best practices for UI elements, but also state management. That’s probably the single best characteristic about React: the thriving developer community.
However, as I would refactor my react code, I’d often be stuck about when to return a reference to a method versus a function that returns that method versus calling that method in my class outright. For example, imagine we have a parent App Component calling a Child.
import React, {Component} from 'react';
import Child from './child';
export default class App extends Component {
  handleClick(event) {
    console.log('Child clicked from ' + event.target.value); 
  }
  render() {
    return (
      <Child onClick={this.handleClick} />
    )
  }
}
In these cases, event will be undefined because we aren’t explicitly bubbling it up from the Child component. However, we can replace the line
<Child onClick={this.handleClick} /> with
<Child onClick={(event) => this.handleClick(event)}
and things would magically seem to work. Oh, except for binding ‘this’ to the handleClick method (eh, small detail). In the child, we would need to specifically reference the parent callback attached to props, so if the child was a simple button, it might look something like
export default const Child = (props) => {
  return (
    <button onClick={props.onClick}>Default text</button>
  );
}
In order to handle situations like this, react used to come bundled with a handy library called… prop-types (now a separate install). In other words, react also acknowledged the importance of having types in your code to make things more sane and sort out subtle differences like these. However, unlike in React, types are a first-class construct in Angular with Typescript. Might as well bite the bullet and start adding types to our JavaScript code (especially for enterprise-scale apps).
At first it seemed tedious trying to learn Typescript and Angular at the same time, and definitely added to the learning curve of a new framework (yes, despite Angular being on version 6, it’s still a much newer framework than React since it’s nothing like Angular 1). However, after a few months of becoming familiar with the project you work with and easing into the not-quite-JS syntax going through a strict compiler, the ease of refactoring existing code is worth the trouble of adding types many times over because types only need to be added once, whereas refactoring is an ongoing process that occurs continuously over several years.

3. Built-in Data Streaming

Another pain point that new Angular developers face is that promises no longer seem to be first class citizens. What?!? No promises?!? Shocking. You can still use promises if you really want, but Angular installs RxJS for us, which is an asynchronous programming library that favors Observables over promises. At first it took some time to wrap my head around Observables, and I’m not sure I’ve fully unlocked their capabilities still.
The main difference is that whereas promises allow us to listen to asynchronous data once, Observables allow us to continue listening for new data and make changes automatically as the data changes. Observables are also very easy to pass around and run several data-formatting operations on without even receiving the data.
With Angular 6, RxJS also received a big update and seems to be following Angular’s semantic versioning now. More importantly, RxJS 6 allows RxJS to be used in any JavaScript environment, with or without Angular. After transitioning to Observables and away from promises, I’m convinced they give any software developer much more flexibility around dealing with Asynchronous code.
Streams are a very natural way to think about data flow, whereas promises felt a bit out of place and felt like they were not powerful enough to handle more real-time functionality like notifications, instant changes based on user actions, among other things. Compound that with the large scale of enterprise applications where, often, two large modules need some bridge to communicate specific pieces of information with each other. RxJS, when used properly and thoughtfully, allows you to build strong, durable bridges across different modules of your Angular application.

Conclusion

Built-in data streaming, type safety, and a modular CLI are hallmarks of what makes Angular such an opinionated framework. However, considering that this is the framework that helps even the largest of technology companies manage their enterprise applications, combined with a commitment from Google to introduce no more breaking changes, now is a better time than ever to learn Angular. Be warned, there is at least a few months of learning involved before you feel proficient enough to start building non-static content, but it’s worth it. When I think about how painless it was to upgrade Angular versions versus how painful it is to upgrade React dependencies, that alone makes the switch more productive for me.

Wednesday, 13 February 2019

The Ultimate List of Open Source DevOps Tools

Behat

Website • Wikipedia
Behat — a php framework for autotesting your business expectations. Behat is an open source Behavior-Driven Development framework for PHP. It is a tool…

Watir

Website • Wikipedia
Watir is an open-source cross-platform web application testing tool. It is most reliable and flexible automation tool of Ruby libraries for web browsers…

Yarn

Website • Wikipedia
Yarn is a package manager for your code. It allows you to use and share code with other developers from around the world. Yarn does this quickly, securely,…

NUnit

Website • Wikipedia
NUnit is a unit-testing framework for all .Net languages. Initially ported from JUnit, the current production release, version 3.0, has been completely…

Supergiant

Website • Wikipedia
Supergiant is an open source container management platform built on top of Kubernetes. Use Supergiant to deploy Kubernetes on multiple clouds in minutes.…

Redis

Website • Wikipedia
Redis is a data structure server. It is open-source, networked, in-memory, and stores keys with optional durability.

SoapUI

Website • Wikipedia
SoapUI is an open-source web service testing application for service-oriented architectures (SOA) and representational state transfers (REST). Its functionality…

Taiga.io

Website • Wikipedia
Taiga is a project management platform for agile developers & designers and project managers who want a beautiful tool that makes work truly enjoyable.…

Mattermost

Website • Wikipedia
Mattermost is an open source, self-hosted Slack-alternative. Mattermost is: Slack-compatible, not Slack-limited – Mattermost features rival Slack features,…

ProductionMap

Website • Wikipedia
ProductionMap is an open source integrated platform for workflow development and execution for DevOps. ProductionMap allows DevOps to develop and execute…

Rancher

Website • Wikipedia
Rancher is a complete, open source platform for deploying and managing containers in production. It includes commercially-supported distributions of Kubernetes,…

Fluentd

Website • Wikipedia
Fluentd tries to structure data as JSON as much as possible: this allows Fluentd to unify all facets of processing log data: collecting, filtering, buffering,…

Rocket.Chat

Website • Wikipedia
Rocket.Chat is an active project for a self-hosted open-source alternative to Slack. The platform allows chat, file sharing, video conferencing, helpdesk…

Invoke

Website • Wikipedia
Invoke is a Python (2.6+ and 3.3+) task execution tool & library, drawing inspiration from various sources to arrive at a powerful & clean feature set. Like…

inspectIT

Website • Wikipedia
inspectIT is an open-source Application Performance Management solution for monitoring and analyzing Java(EE) applications. The Java agent turns on the…

(R)?ex

Website • Wikipedia
Automate everything, relax anytime. (R)?ex integrates seamlessly into your running environment, is easy to use and extend. easy to learn (it's just plain…

Logscape

Website • Wikipedia
Logscape is a big data analytics tool, which allows you to turn your data into knowledge. Whether it is data generated by your systems or extracted from…

HockeyApp

Website • Wikipedia
HockeyApp is the best way to collect live crash reports, get feedback from your users, distribute your betas, and analyze your test coverage. The world's…

AutoIt

Website • Wikipedia
AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated…

Hygieia

Website • Wikipedia
Hygieia is an OSS Project Sponsored by Capital One which promotes a single, configurable, easy to use dashboard to visualize near real-time status of the…

Cloudify

Website • Wikipedia
Cloudify is an open source cloud orchestration framework. Cloudify allows you to model applications and services and automate their entire life cycle,…

Spinnaker

Website • Wikipedia
Spinnaker is an open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence. It provides two…

CasperJS

Website • Wikipedia
CasperJS allows you to build full navigation scenarios using high-level functions and a straight forward interface to accomplish all sizes of tasks.

Congruit

Website • Wikipedia
Congruit is a lightweight configuration management and automation tool. It is written in Go but works through Bash. It manages shell scripts you created…

Check_MK

Website • Wikipedia
Check_MK is an extension to the Nagios monitoring system that allows creating rule-based configuration using Python and offloading work from the Nagios…

Concourse CI

Website • Wikipedia
Concourse is an open source continuous integration (CI) tool written in Go. Concourse was dreamt up and built while working on the Cloud Foundry project…

Apache Brooklyn

Website • Wikipedia
Apache Brooklyn is an open-source framework for deploying and managing distributed applications by modeling, monitoring, and managing applications via…

Chocolatey

Website • Wikipedia
The sane way to manage software on Windows. Chocolatey builds on technologies you know - unattended installation and PowerShell. Chocolatey works with…

webhook

Website • Wikipedia
webhook is a lightweight configurable tool written in Go, that allows you to easily create HTTP endpoints (hooks) on your server, which you can use to…

Project Kudu

Website • Wikipedia
Kudu is the engine behind git/hg deployments, WebJobs, and various other features in Azure Web Sites. It can also run outside of Azure.

Django

Website • Wikipedia
Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care…

Concordion

Website • Wikipedia
Concordion brings your software delivery team together around living documentation. Implementing a Specification by Example (SBE) / Behaviour Driven Development…

OSSEC

Website • Wikipedia
OSSEC is a free, open-source host-based intrusion detection system (HIDS). It performs log analysis, integrity checking, Windows registry monitoring, rootkit…

Squash TM

Website • Wikipedia
Squash TM is the test repository manager for the open source Squash suite. It manages requirements, test scenarios, and execution campaigns, in a natively…

Squash TA

Website • Wikipedia
Squash TA (Test Automation) is an open source tool for automating functional tests and industrialization of their executions. Compatible with several open…

OWASP Zed Attack Proxy (ZAP)

Website • Wikipedia
The OWASP Zed Attack Proxy (ZAP) is one of the world’s most popular free security tools and is actively maintained by hundreds of international volunteers.…

Prometheus

Website • Wikipedia
Prometheus is an open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting…

Robot Framework

Website • Wikipedia
Robot Framework is a generic test automation framework for acceptance testing and acceptance test-driven development (ATDD). It has easy-to-use tabular…

Nightwatch.js

Website • Wikipedia
Nightwatch.js is an easy to use Node.js based End-to-End (E2E) testing solution for browser based apps and websites. It uses the powerful W3C WebDriver…

Yocto Project Build System

Website • Wikipedia
The Yocto Project is an open source collaboration project that provides templates, tools and methods to help you create custom Linux-based systems for…

Phabricator

Website • Wikipedia
Phabricator is a suite of web-based software development collaboration tools, including the Differential code review tool, the Diffusion repository browser,…

Wekan

Website • Wikipedia
The open-source Trello-like kanban. Features : WIP Limits, List of all your public and private boards, board shortcuts at top of page, Star board, Watch…

Fastlane

Website • Wikipedia
Developer hours saved. Fastlane is the tool to release your iOS and Android app. It handles all tedious tasks, like generating screenshots, dealing with…

Portainer

Website • Wikipedia
Portainer is an open-source lightweight management UI which allows you to easily manage your Docker hosts or swarm clusters.

Open Build Service

Website • Wikipedia
The Open Build Service (OBS) is a generic system to build and distribute packages from sources in an automatic, consistent and reproducible way. It makes…

Webpack

Website • Wikipedia
Webpack is a module bundler for modern JavaScript applications. It takes the dependencies and generates a dependency graph allowing web developers to use…

Sysdig

Website • Wikipedia
Sysdig is open source, system-level exploration: capture system state and activity from a running Linux instance, then save, filter, and analyze. Sysdig…

Spacewalk

Website • Wikipedia
Spacewalk is an open source Linux systems management solution. Spacewalk is the upstream community project from which the Red Hat Satellite product is…

Kismatic Enterprise Toolkit

Website • Wikipedia
Kismatic Enterprise Toolkit (KET) is a set of production-ready defaults and best practice tools for creating enterprise-tuned Kubernetes clusters. KET…

Helm

Website • Wikipedia
Helm helps you manage Kubernetes applications — Helm Charts helps you define, install, and upgrade even the most complex Kubernetes application. Charts…

Karate

Website • Wikipedia
Karate is an open-source web-API test-automation framework that can script calls to HTTP end-points and assert that the JSON or XML responses are as expected.…

xUnit.net

Website • Wikipedia
xUnit.net is a unit testing framework for .NET projects with full support for .NET Core and Xamarin. It is developed under the umbrella of the .NET Foundation…

Cobertura

Website • Wikipedia
Cobertura is a free Java tool that calculates the percentage of code accessed by tests. It can be used to identify which parts of your Java program are…

Nix

Website • Wikipedia
Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. It provides atomic upgrades…

NixOS

Website • Wikipedia
NixOS is a Linux distribution built on top of the Nix package manager, it is completely declarative, its system configurations are reproducible, makes…

NixOps

Website • Wikipedia
NixOps is a tool for deploying sets of NixOS Linux machines, either to real hardware or to virtual machines. It extends NixOS’s declarative approach to…

Disnix

Website • Wikipedia
Disnix is a distributed service deployment toolset built on top of Nix, is extensible, has a declarative distributed systems modeling (including dependencies…

Hydra

Website • Wikipedia
Hydra is a Nix-based continuous build system, that continuously checks out sources of software projects from version management systems to build, test…

Google Test

Website • Wikipedia
Google Test is a unit testing library for the C++ programming language, based on the xUnit architecture. The library is released under the BSD 3-clause…

Kanboard

Website • Wikipedia
Kanboard is a free and open source Kanban project management software. There is no fancy user interface, Kanboard focuses on simplicity and minimalism.…

Tuleap

Website • Wikipedia
Tuleap is a free and Open Source Suite to improve management of software projects and connect with team members. With a single web-based solution, CTO,…

Jenkins X

Website • Wikipedia
Jenkins X extends the Jenkins ecosystem to solve the problem of automating CI/CD in the cloud. Jenkins X adds GitOps and dynamic environment creations…

Cypress.io

Website • Wikipedia
Fast, easy and reliable testing for anything that runs in a browser. An open source, front-end testing tool, built for the modern web. Cypress makes setting…

Weaveworks

Website • Wikipedia
Weave Cloud simplifies deployment, observability, and monitoring for containers and microservices so you can focus on building your application and not…

kops

Website • Wikipedia
kops helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters from the command line. AWS (Amazon Web Services)…

Apache OpenWhisk

Website • Wikipedia
Apache OpenWhisk is a serverless, open-source cloud platform that executes functions in response to events at any scale. With Apache OpenWhisk you can…

TaskBoard

Website • Wikipedia
A Kanban-inspired app for keeping track of things that need to get done. The goal of TaskBoard is to provide a simple and clean interface to a functional…

Netdata

Website • Wikipedia
netdata is a system for distributed real-time performance and health monitoring. It provides unparalleled insights, in real-time, of everything happening…

Icinga 2

Website • Wikipedia
Icinga is an open source monitoring tool. Icinga 2 is the heart of our monitoring platform with a powerful configuration language and REST API. Scale up…

Træfik

Website • Wikipedia
A reverse proxy / load balancer that's easy, dynamic, automatic, fast, full-featured, open source, production proven, provides metrics, and integrates…

Drone.io

Website • Wikipedia
Drone is a Continuous Delivery system built on container technology. Drone uses a simple YAML configuration file, a superset of docker-compose, to define…

Jest

Website • Wikipedia
Jest is used by Facebook to test all JavaScript code including React applications. One of Jest's philosophies is to provide an integrated "zero-configuration"…

Inspec

Website • Wikipedia
InSpec is an open-source testing framework for infrastructure with a human- and machine-readable language for specifying compliance, security and policy…

Gogs

Website • Wikipedia
Gogs is a painless self-hosted Git service, similar to GitHub. Runs anywhere Go can compile for: Windows, Mac, Linux, ARM, etc. Has low minimal requirements…

SonarLint

Website • Wikipedia
SonarLint is an IDE extension - free and open source - that helps you detect and fix quality issues as you write code. Like a spell checker, SonarLint…

BDD-Security

Website • Wikipedia
BDD-Security is a security testing framework that uses natural language in a Given, When, Then Gherkin syntax to describe security requirements as features.

xFramium

Website • Wikipedia
xFramium Automation Toolkit: A complete framework for subject matter experts, QA automation engineers, and developers that accelerates the creation of…

Gitlab Runner

Website • Wikipedia
GitLab Runner is the open source project that is used to run your jobs and send the results back to GitLab. It is used in conjunction with GitLab CI, the…

Bosh

Website • Wikipedia
BOSH is a project that unifies release engineering, deployment, and lifecycle management of small and large-scale cloud software. BOSH can provision and…

node-red

Website • Wikipedia
node-js based, is a workflow editor to easily integrate/wire-together various hardware devices, services, and tools can be run locally, containerized,…

Cake

Website • Wikipedia
Cake is built on top of the Roslyn compiler which enables you to write your build scripts in C#. Cross platform Cake is available on Windows, Linux…

PMD

Website • Wikipedia
PMD is an open source static source code analyzer that reports on issues found within application code. PMD includes built-in rule sets and supports the…

DependencyCheck

Website • Wikipedia
Dependency-Check is a utility that identifies project dependencies and checks if there are any known, publicly disclosed, vulnerabilities. Currently, Java…

Keycloak

Website • Wikipedia
Add authentication to applications and secure services with minimum fuss. No need to deal with storing users or authenticating users. It's all available…

SQL Server Management Studio

Website • Wikipedia
SQL Server Management Studio is a software application launched for the first time with Microsoft SQL Server 2005 that is used to configure, manage and…

Screwdriver

Website • Wikipedia
Screwdriver is an open source build platform designed for Continuous Delivery. Screwdriver is a self-contained, pluggable service to help you build, test,…

MySQL

Website • Wikipedia
MySQL is the world's second most widely used relational database management system (RDBMS) and most widely used open-source RDBMS. It is named after co-founder…

MongoDB

Website • Wikipedia
MongoDB (from humongous) is a cross-platform document-oriented database. Classified as a NoSQL database, MongoDB eschews the traditional table-based relational…

Bosun

Website • Wikipedia
Bosun is an open-source, Go based, MIT licensed, monitoring and alerting system created by Stack Exchange and designed to work with Scollector, OpenTSDB,…

Gauntlt

Website • Wikipedia
Automated Security Testing. Gauntlt provides hooks to a variety of security tools and puts them within reach of security, dev and ops teams to collaborate…

Rational Integration Tester

Website • Wikipedia
IBM Rational Integration Tester is a scripting-free environment for developing tests for service-oriented architecture (SOA) messaging and business process…

PostgreSQL

Website • Wikipedia
PostgreSQL, often simply "Postgres", is an object-relational database management system (ORDBMS) with an emphasis on extensibility and standards-compliance.…

Sahi

Website • Wikipedia
Sahi is an automation and testing tool for web applications coming in an open-source and a proprietary version. The open-source version includes a basic…

Trac

Website • Wikipedia
Trac is an enhanced wiki and issue tracking system for software development projects. Trac uses a minimalistic approach to web-based software project management.…

MariaDB

Website • Wikipedia
MariaDB is a community-developed fork of the MySQL relational database management system intended to remain free under the GNU GPL. Being a fork of a leading…

CMake

Website • Wikipedia
CMake is cross-platform free and open-source software for managing the build process of software using a compiler-independent method. It is designed to…

OrientDB

Website • Wikipedia
OrientDB is an open source NoSQL database management system written in Java. It is a document-based database, but the relationships are managed as in graph…

HBase

Website • Wikipedia
HBase is an open source, non-relational, distributed database modeled after Google's BigTable and written in Java. It is developed as part of Apache Software…

Kallithea

Website • Wikipedia
Kallithea is a free software source code management system that supports two leading version control systems, Mercurial and Git, and has a web interface…

Couchbase

Website • Wikipedia
Couchbase Server, originally known as Membase, is an open-source, distributed (shared-nothing architecture) NoSQL document-oriented database that is optimized…

The best ways to connect to the server using Angular CLI

Everybody who has used  Angular CLI  knows that it is a powerful tool which can take a front-end development job to a completely dif...