What Is Feature Hiding?

Question
What is feature hiding?

Answer
Feature hiding is the practice of toggling or disabling of a feature. The feature may be part of an application, but the users cannot access it or use it. Sometimes code is released in an imperfect way; sometimes there is insufficient confidence to make the feature visible and accessible, but to remove the feature from a release would require too much work. Feature hiding is an aspect of incremental development used to keep a codebase deployable. A future release may unhide (or toggle on) the feature. The term is used in the book Continuous Delivery (on pages 405 and 415).

Feature hiding is related to canary releases. A canary release is one that is released to a subset of users (e.g., via a single pod in a multi-pod application or a single server in a cluster of servers). This way it can be tested in production. If it introduces a problem (e.g., fails regressive testing), the problem(s) should be limited by the nature of its release. To dark release code, feature hiding may be a way to do it.

What Is a Container in I.T.?

Problem scenario
In computing, you have heard of containers. There are many types. Where can you find a disambiguation of containers?

Answers

For SQL Server
In SQL Server for over 10 years, there have been "Foreach Loop Containers". It is a built-in control flow for SQL Server Integration Services. To read more see this Microsoft page.

For Apache Web Server
In Apache Web Server, a container is a portion of configuration code. Filesystem Containers look like this:

<Directory "/var/web/dir1">
    Options +Indexes
</Directory>

(The above was taken from https://httpd.apache.org/docs/2.4/sections.html.)

For Python
Python's built-in containers include dict, list, set, and tuple. according to https://docs.python.org/3/library/collections.html. The previous link explains the different "container datatypes" also known as collections that are commonly used in Python.

For Emulation like Docker, LXC, rkt
In modern computing, emulation containers such as Docker are exceedingly popular. This type of container is a portion of an operating system isolated (via cgroups and namespaces) from other portions of the operating system. In some cases a container's runtime engine is not the same as its host; in these cases it is not a portion of the underlying operating system but an emulation of another operating system. Microsoft defines a container as follows "A standard package of software—known as a container—bundles an application’s code together with the related configuration files and libraries, and with the dependencies required for the app to run." (Taken from https://azure.microsoft.com/en-us/overview/what-is-a-container/#overview.)

Docker defines a container as "A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another." (Taken from https://www.docker.com/resources/what-container.)

A container empowers immutable infrastructure, dependency management, and rapid development and testing while potentially reducing licensing costs (as virtual servers would require additional licenses). LXC, LXD (newer than LXC), and rkt are other types of containers.

See also:
What is the Difference between a Data Structure Container and a Virtual Environment Container?

What is the Apache Web Server Container?

Is There a Large Print Edition of Atlas Shrugged by Ayn Rand?

Problem scenario
You would like a larger font edition of Atlas Shrugged (a fictional book that involves technology). Is there an option?

Solution
Maybe. There is a smaller edition (width and height) that is roughly ~4.2" X ~6.8"; if this is the size you bought, you would prefer the Centennial Edition that is ~6.1" X ~9.1" version at Amazon or Barnes & Noble. The number of pages in these two different versions are roughly the same. The difference is the size (~4.2" X ~6.8" vs ~6.1" X ~9.1") of the pages and the size of the font. Bigger pages facilitate bigger font. The biggest version we know of is here.

How Do You Install GraphQL for Python?

Problem scenario
You want to install GraphQL for Python in Linux. What should you do?

Solution

  1. Install pip3 and venv. (If you need assistance with pip3, see this posting. If you need assistance with venv, see this posting.)
  2. Run these commands:
python3 -m venv to_test
cd to_test
source bin/activate
pip3 install graphql-python
pip3 install flask ariadne flask-sqlalchemy flask-cors

What is Pipelinization in Technology/Computing?

Question
In I.T. what is pipelinization?

Answer / Disambiguation
The configuration, creation, or execution of a repeatable process that involves a series of stages with a start and finish. Another definition of pipelinization would be making a procedure into a controlled stream (for reproducibility for parallel and independent development or parallel and increased throughput of the original process). A final definition would be adopting a manual or automated process by developing a sequence of substeps for a [batch] job to incrementally pass through. The pipeline could be a cyclic (a circular process) or acyclic (uni-directional) graph.

The three pipelinizations below refer to pipelines; none of those pipelines are operating system pipes (that convey output from one process to another process). The pipelines below are uni-directional.

Pipelinization for the CI/CD pipeline:
It is the transformation of a process into a pipeline. A pipeline is a sequence of operations usually across multiple servers or pods to build, compile, test, and release software code. It can be managed by a tool such as Jenkins, GitLab, TravisCI, CircleCI, Bamboo, Azure DevOps, AWS tools such as CodeBuild & CodePipeline, or others. A pipeline can be triggered automatically based on an event (a certain time of day or code being checked into a repository) or run manually.

Pipelines can create infrastructure (e.g., with Terraform), virtual networks, send automated messages, perform QA tests, and release software to multiple environments including production.

Pipelinization for an ETL process:
The implementation of a repeatable extract-transform-load (ETL) process. An ETL pipeline is a process where data is taken from one format (e.g. such as a .csv file), cleansed or modified so it can be inserted into a database table, and finally injected into the database table. Some database loads happen in an ad hoc way. To create a configuration or a platform for the integration of this loading of data into a database such that it happens on a regular basis or from a manually triggering is the pipelinization of an ETL process.

Pipelinization for programming a given processor:
Pipelinization is the utilization of parallel processing -- sending instructions to a CPU in a way that maximizes the efficiency and overall capabilities of the CPU itself. Pipelining is the sophisticated programmatic design of sending of instructions to a CPU for parallel computations to leverage superior memory of a computer. CPU registers have faster memory than the CPU's cache which is better than RAM (1). The slowest memory is that of virtual memory (saved to disk) (1). Swapping or paging is the I/O activity that happens in virtual memory.

Citation
(1) https://www.elprocus.com/memory-hierarchy-in-computer-architecture/
For processing, "[p]ipelining is a method to obtain high efficiency for processes inside computers." (Page 2 of The Art of High Performance Computing for Computational Science.)


See also this Quora question and answer.

Is It a Best/Recommended Practice to Update a Server Application when Clients/Apps May Not Be Compatible with the Version?

Problem scenario
Some updates are essential for security. In some situations a patch to an OS or an application may cause some clients to have problems connecting to the server. The ramifications could apply to middleware or other applications. Is it a best/recommended practice to push an update to a server's OS or application when other clients or smart phone apps will not be able to be compatible?

Answer
It is not clear. Here is one example where "best practices" are not compatible:

TechRepublic says it is a best practice to tolerate system incompatibilities (#8 here). On the other hand, a well-respected website betterprogramming.pub, that gives advice to programmers, recommends eliminating incompatible versions by forcing updates.

From a pragmatic perspective in an enterprise environment, managers wrestle with problems like this. There may not be two options that are clear cut. Forbes uses phrases like "the right security controls" as a best practice. It is a safe bet to use the Goldilicks approach as a "best practice." With qualifiers and specific context, "best practices" can have applicability.