Saturday, July 21, 2018

Improving reachability of Object Storage
Object storage is highly scalable and extremely durable storage for just about any digital format content you want to preserve. Typically used with static resources, it is often used for serving data over the http. With direct access to the data from anywhere over the internet, object storage becomes very popular.
S3 is a popular set of APIs that enables many vendors to provide object storage both on –premise and in the cloud. This set of APIs is widely used in a variety of programming languages. The rate of adoption could, however, be increased by moving upstream into more Software development Kits or SDKs. Popular tools like duplicity and s3cmd already use object storage from command-line but it’s the adoption in various programmability components that leads us to use increased usages of S3.
The erstwhile notion of storing data on disk and file system does not remain promising anymore. With the cloud relying increasingly on Object storage, both private and public cloud is increasingly looking to standardize object storage as the destination for saving their digital content. This stands in line with the expectations that the data should be durable, redundant and highly available in every geographical region.
However, most applications and software products especially those groaning with legacy components have not yet shaken off their dependence on filesystem and local files. For example, configuration is often stored from the local filesystem instead of from an object store. This is primarily because it has been convenient to stash data with the installation and usually on the owners’ computer and there is no solution to running applications remotely with partial installation or footprint on the local computer. It is either all remote deployment as in the case of software as a service or all local installation as in the case of software products on the owner's compute resource. The operating system is also required to be all local to the device with the owner. If it could be made more modular then it can be used with storage in the cloud. In this case it sets a precedent for applications in using installation that is spread out over local and remote.  Most software deployments are also available as a download usually with the help of an uninstaller that downloads in multiple parts but with one request. The same installer then removes the reliance on remote files so that the installation can operate locally.  Setup and deployment happens to be a classical software requirement that is probably most tolerant to performance as long it works.  The standalone file sourcing for setup therefore does not matter whether it is local or remote. If we can get one application, an entire operating system to run without any care for whether it is operating local or remote, we could do with much more object storage.
Applications are already using services that are remote for powering the experience to the users if they are not outright being served from a software as a service. More and more data are saved in the cloud storage. If the compute could make the devices not require as much hardware by moving not just the whole virtual machine but also parts of it, then the compute can be a mere runtime that can be hosted or ported across devices on the personal ecosystem.
 Finally, traditional concerns of personal storage will get eliminated with more adoption of technologies for saving and reading from the cloud instead of local resources.

#codingexercise
Find the number of equality paths in a matrix:
For example we  have 
1 2 
1 3 
as  1, 1,  forwards and backwards 1, 1
We can do this with recursion:
int getCount(int[,] matrix, int [,] dp, int x, int y)
{
  if (dp[x,y] != -1) 
      return dp[x,y];
  int dx = new int []{ 0, 1, -1, 0};
  int dy = new int [] {1 , 0 , 0 , -1};
  int result  = 1; // element by itself
  for (int i = 0; i < dx.count; i++)
  {
     int m = x + dx;
     int n  = y + dy;
     if (isValid(m,n, matrix) && matrix[m,n]  == matrix[x,y]) {
          result += getCount(matrix, dp, m, n);
    }
   }
  dp[x, y] = result;
  return result;


}

No comments:

Post a Comment