Binder jet 3D printing (BJ3DP), a non-beam based, additive manufacturing (AM) method, refers to the technology in which powdered material is deposited layer-by-layer and selectively joined in each layer with binder and then densified through sintering or infiltration. Binder jetting of metals holds distinctive promise among AM technologies due to its fast, low-cost manufacturing; stress-free structures with complex internal and external geometries; and the isotropic properties of the final parts. Also, by taking advantage of traditional powder metallurgy, BJ3DP machines can produce prototypes of metal parts in which material properties and surface finish are similar to those achieved with metal injection molding or traditional powder metallurgy. Therefore, a comprehensive overview of the fundamental science of metallurgical structure after sintering and post heat-treatment steps are provided in this work to understand the microstructural evolution and properties of BJ3DP parts. Further, to determine the effects of the BJ3DP process on metallurgical properties, an empirical framework to describe the role of particle size, morphology and powder size distribution, and sintering followed by a post heat-treatment is discussed. With the growth of AM and the need for post-processing in BJ3DP parts, an understanding of the microstructural evolution is necessary, and in this work sintering steps and mechanisms are explained and aligned with the BJ3DP process.
Nickel-based alloy 625 was BJ3DP from water- and gas-atomized powders for a detailed comparative study on densification behavior, microstructural evolution and mechanical properties in terms of hardness, tensile strength and fatigue life. Then, gas-atomized alloy 625 powders of three different powder size distributions were printed and sintered in order to extend existing knowledge of sintering of alloy 625 to binder jetted parts. Sintering was evaluated in the context of microstructural evolution, using grain and pore intercept length, pore separation, surface area per unit volume and number of pore sections per unit area. The results suggest that particle size distribution is a determining factor for densification kinetic and final microstructure, if printing parameters such as layer thickness, binder saturation and drying time are similar.


text:
import expect = require('expect.js');

import {
  IKernel
} from 'jupyter-js-services';

import {
  DisposableDelegate, IDisposable
} from 'phosphor/lib/core/disposable';

import {
  Widget
} from 'phosphor/lib/ui/widget';

import {
  ABCWidgetFactory, Base64ModelFactory, DocumentRegistry,
  IDocumentModel, IDocumentContext, IWidgetExtension, TextModelFactory
} from '../../../lib/docregistry';

class WidgetFactory extends ABCWidgetFactory<Widget, IDocumentModel> {

  createNew(context: IDocumentContext<IDocumentModel>, kernel?: IKernel.IModel): Widget {
    return new Widget();
  }
}

class WidgetExtension implements IWidgetExtension<Widget, IDocumentModel> {

   createNew(widget: Widget, context: IDocumentContext<IDocumentModel>): IDisposable {
     return new DisposableDelegate(null);
   }
}

describe('docregistry/registry', () => {

  describe('DocumentRegistry', () => {

    let registry: DocumentRegistry;

    beforeEach(() => {
      registry = new DocumentRegistry();
    });

    afterEach(() => {
      registry.dispose();
    });

    describe('#isDisposed', () => {

      it('should get whether the registry has been disposed', () => {
        expect(registry.isDisposed).to.be(false);
        registry.dispose();
        expect(registry.isDisposed).to.be(true);
      });

      it('should be read-only', () => {
        expect(() => { registry.isDisposed = false; }).to.throwError();
      });

    });

    describe('#dispose()', () => {

      it('should dispose of the resources held by the registry', () => {
        registry.addFileType({ name: 'notebook', extension: '.ipynb' });
        registry.dispose();
        expect(registry.isDisposed).to.be(true);
      });

      it('should be safe to call multiple times', () => {
        registry.dispose();
        registry.dispose();
        expect(registry.isDisposed).to.be(true);
      });

    });

    describe('#addWidgetFactory()', () => {

      it('should add the widget factory to the registry', () => {
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: [],
          displayName: 'foo',
          modelName: 'bar'
        });
        expect(registry.getWidgetFactory('foo')).to.be(factory);
        expect(registry.getWidgetFactory('FOO')).to.be(factory);
      });

      it('should be a no-op if the `displayName` is already registered', () => {
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: [],
          displayName: 'foo',
          modelName: 'bar'
        });
        let disposable = registry.addWidgetFactory(new WidgetFactory(), {
          fileExtensions: [],
          displayName: 'foo',
          modelName: 'bar'
        });
        disposable.dispose();
        expect(registry.getWidgetFactory('foo')).to.be(factory);
      });

      it('should become the global default if `*` is given as a defaultFor', () => {
        registry.addModelFactory(new TextModelFactory());
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: ['*'],
          displayName: 'foo',
          modelName: 'text'
        });
        expect(registry.defaultWidgetFactory('*')).to.be('foo');
      });

      it('should override an existing global default', () => {
        registry.addModelFactory(new TextModelFactory());
        registry.addWidgetFactory(new WidgetFactory(), {
          fileExtensions: ['*'],
          defaultFor: ['.*'],
          displayName: 'foo',
          modelName: 'text'
        });
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: ['*'],
          defaultFor: ['*'],
          displayName: 'bar',
          modelName: 'text'
        });
        expect(registry.defaultWidgetFactory('*')).to.be('bar');
      });

      it('should override an existing extension default', () => {
        registry.addModelFactory(new TextModelFactory());
        registry.addWidgetFactory(new WidgetFactory(), {
          fileExtensions: ['.txt'],
          displayName: 'foo',
          modelName: 'text'
        });
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.txt'],
          displayName: 'bar',
          modelName: 'text'
        });
        expect(registry.defaultWidgetFactory('.txt')).to.be('foo');
      });

      it('should be removed from the registry when disposed', () => {
        registry.addModelFactory(new TextModelFactory());
        let factory = new WidgetFactory();
        let disposable = registry.addWidgetFactory(factory, {
          fileExtensions: ['.txt'],
          displayName: 'bar',
          modelName: 'text'
        });
        disposable.dispose();
        expect(registry.getWidgetFactory('bar')).to.be(void 0);
      });

    });

    describe('#addModelFactory()', () => {

      it('should add the model factory to the registry', () => {
        let factory = new TextModelFactory();
        registry.addModelFactory(factory);
        expect(registry.listModelFactories()).to.eql(['text']);
      });

      it('should be a no-op a factory with the given `name` is already registered', () => {
        let factory = new TextModelFactory();
        registry.addModelFactory(factory);
        let disposable = registry.addModelFactory(new TextModelFactory());
        disposable.dispose();
        expect(registry.listModelFactories()).to.eql(['text']);
      });

      it('should be a no-op if the same factory is already registered', () => {
        let factory = new TextModelFactory();
        registry.addModelFactory(factory);
        let disposable = registry.addModelFactory(factory);
        disposable.dispose();
        expect(registry.listModelFactories()).to.eql(['text']);
      });

      it('should be removed from the registry when disposed', () => {
        let factory = new TextModelFactory();
        let disposable = registry.addModelFactory(factory);
        disposable.dispose();
        expect(registry.listModelFactories()).to.eql([]);
      });

    });

    describe('#addWidgetExtension()', () => {

      it('should add a widget extension to the registry', () => {
        let extension = new WidgetExtension();
        registry.addWidgetExtension('foo', extension);
        expect(registry.getWidgetExtensions('foo')).to.eql([extension]);
      });

      it('should be a no-op if the extension is already registered for a given widget factory', () => {
        let extension = new WidgetExtension();
        registry.addWidgetExtension('foo', extension);
        let disposable = registry.addWidgetExtension('foo', extension);
        disposable.dispose();
        expect(registry.getWidgetExtensions('foo')).to.eql([extension]);
      });

      it('should be removed from the registry when disposed', () => {
        let extension = new WidgetExtension();
        let disposable = registry.addWidgetExtension('foo', extension);
        disposable.dispose();
        expect(registry.getWidgetExtensions('foo')).to.eql([]);
      });

    });

    describe('#addFileType()', () => {

      it('should add a file type to the document registry', () => {
        let fileType = { name: 'notebook', extension: '.ipynb' };
        registry.addFileType(fileType);
        expect(registry.listFileTypes()).to.eql([fileType]);
      });

      it('should be removed from the registry when disposed', () => {
        let fileType = { name: 'notebook', extension: '.ipynb' };
        let disposable = registry.addFileType(fileType);
        disposable.dispose();
        expect(registry.listFileTypes()).to.eql([]);
      });

      it('should be a no-op if a file type of the same name is registered', () => {
        let fileType = { name: 'notebook', extension: '.ipynb' };
        registry.addFileType(fileType);
        let disposable = registry.addFileType(fileType);
        disposable.dispose();
        expect(registry.listFileTypes()).to.eql([fileType]);
      });

    });

    describe('#addCreator()', () => {

      it('should add a file type to the document registry', () => {
        let creator = { name: 'notebook', fileType: 'notebook' };
        registry.addCreator(creator);
        expect(registry.listCreators()).to.eql([creator]);
      });

      it('should be removed from the registry when disposed', () => {
        let creator = { name: 'notebook', fileType: 'notebook' };
        let disposable = registry.addCreator(creator);
        disposable.dispose();
        expect(registry.listCreators()).to.eql([]);
      });

      it('should add after a named creator if given', () => {
        let creators = [
          { name: 'Python Notebook', fileType: 'notebook' },
          { name: 'R Notebook', fileType: 'notebook' },
          { name: 'Shell Notebook', fileType: 'notebook' }
        ];
        registry.addCreator(creators[0]);
        registry.addCreator(creators[1]);
        registry.addCreator(creators[2], creators[1].name);
        expect(registry.listCreators()).to.eql([ creators[0], creators[2], creators[1]]);
      });

      it('should be a no-op if a file type of the same name is registered', () => {
        let creator = { name: 'notebook', fileType: 'notebook' };
        registry.addCreator(creator);
        let disposable = registry.addCreator(creator);
        disposable.dispose();
        expect(registry.listCreators()).to.eql([creator]);
      });

    });

    describe('#listWidgetFactories()', () => {

      it('should list the names of the valid registered widget factories', () => {
        expect(registry.listWidgetFactories()).to.eql([]);
        registry.addModelFactory(new TextModelFactory());
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.foo'],
          displayName: 'Foo',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.foo'],
          displayName: 'Bar',
          modelName: 'text'
        });
        expect(registry.listWidgetFactories('.foo')).to.eql(['Foo', 'Bar']);
      });

      it('should not list a factory whose model is not registered', () => {
        registry.addWidgetFactory(new WidgetFactory(), {
          fileExtensions: ['.bar'],
          displayName: 'Bar',
          modelName: 'text'
        });
        expect(registry.listWidgetFactories()).to.eql([]);
      });

      it('should select the factory for a given extension', () => {
        registry.addModelFactory(new TextModelFactory());
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.foo'],
          displayName: 'Foo',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.bar'],
          displayName: 'Bar',
          modelName: 'text'
        });
        expect(registry.listWidgetFactories('.foo')).to.eql(['Foo']);
      });

      it('should respect the priority order', () => {
        registry.addModelFactory(new TextModelFactory());
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.txt'],
          displayName: 'Foo',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.txt'],
          defaultFor: ['.txt'],
          displayName: 'Bar',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['*'],
          displayName: 'Buzz',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['*'],
          defaultFor: ['*'],
          displayName: 'Fizz',
          modelName: 'text'
        });
        expect(registry.listWidgetFactories('.txt')).to.eql(['Bar', 'Fizz', 'Foo', 'Buzz']);
      });

    });

    describe('#defaultWidgetFactory()', () => {

      it('should get the default widget factory for a given extension', () => {
        registry.addModelFactory(new TextModelFactory());
        let factory = new WidgetFactory();
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.txt'],
          displayName: 'Foo',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['.txt'],
          defaultFor: ['.txt'],
          displayName: 'Bar',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['*'],
          displayName: 'Buzz',
          modelName: 'text'
        });
        registry.addWidgetFactory(factory, {
          fileExtensions: ['*'],
          defaultFor: ['*'],
          displayName: 'Fizz',
          modelName: 'text'
        });
        expect(registry.defaultWidgetFactory('.txt')).to.be('Bar');
        expect(registry.defaultWidgetFactory()).to.be('Fizz');
      });

    });

    describe('#listModelFactories()', () => {

      it('should list the currently registered model factories', () => {
        expect(registry.listModelFactories()).to.eql([]);
        registry.addModelFactory(new TextModelFactory());
        registry.addModelFactory(new Base64ModelFactory());
        expect(registry.listModelFactories()).to.eql(['text', 'base64']);
      });

    });

    describe('#listFileTypes()', () => {

      it('should list the registered file types', () => {
        expect(registry.listFileTypes()).to.eql([]);
        let fileTypes = [
          { name: 'notebook', extension: '.ipynb' },
          { name: 'python', extension: '.py' }
        ];
        registry.addFileType(fileTypes[0]);
        registry.addFileType(fileTypes[1]);
        expect(registry.listFileTypes()).to.eql(fileTypes);
      });

    });

    describe('#listCreators()', () => {

      it('should list the registered file creators', () => {
        expect(registry.listCreators()).to.eql([]);
        let creators = [
          { name: 'Python Notebook', fileType: 'notebook' },
          { name: 'R Notebook', fileType: 'notebook' },
          { name: 'Shell Notebook', fileType: 'notebook' }
        ];
        registry.addCreator(creators[0]);
        registry.addCreator(creators[1]);
        registry.addCreator(creators[2]);
        expect(registry.listCreators()).to.eql(creators);
      });

    });

    describe('#getFileType()', () => {

      it('should get a file type by name', () => {
        let fileTypes = [
          { name: 'notebook', extension: '.ipynb' },
          { name: 'python', extension: '.py' }
        ];
        registry.addFileType(fileTypes[0]);
        registry.addFileType(fileTypes[1]);
        expect(registry.getFileType('notebook')).to.be(fileTypes[0]);
        expect(registry.getFileType('python')).to.be(fileTypes[1]);
        expect(registry.getFileType('r')).to.be(void 0);
      });
    });

    describe('#getCreator()', () => {

      it('should get a creator by name', () => {
        let creators = [
          { name: 'Python Notebook', fileType: 'notebook' },
          { name: 'R Notebook', fileType: 'notebook' },
          { name: 'Shell Notebook', fileType: 'notebook' }
        ];
        registry.addCreator(creators[0]);
        registry.addCreator(creators[1]);
        registry.addCreator(creators[2]);
        expect(registry.getCreator('Python Notebook')).to.be(creators[0]);
        expect(registry.getCreator('r notebook')).to.be(creators[1]);
        expect(registry.getCreator('shell Notebook')).to.be(creators[2]);
        expect(registry.getCreator('foo')).to.be(void 0);
      });

    });

    describe('#getKernelPreference()', () => {

      it('should get a kernel preference', () => {
        registry.addModelFactory(new TextModelFactory());
        registry.addWidgetFactory(new WidgetFactory(), {
          fileExtensions: ['.txt'],
          displayName: 'foo',
          modelName: 'text'
        });
        registry.addWidgetFactory(new WidgetFactory(), {
          fileExtensions: ['.py'],
          displayName: 'bar',
          modelName: 'text',
          canStartKernel: true,
          preferKernel: true
        });

        let pref = registry.getKernelPreference('.c', 'foo');
        expect(pref.language).to.be('clike');
        expect(pref.preferKernel).to.be(false);
        expect(pref.canStartKernel).to.be(false);

        pref = registry.getKernelPreference('.py', 'bar');
        expect(pref.language).to.be('python');
        expect(pref.preferKernel).to.be(true);
        expect(pref.canStartKernel).to.be(true);

        pref = registry.getKernelPreference('.py', 'baz');
        expect(pref).to.be(void 0);
      });

    });

    describe('#getModelFactoryFor()', () => {

      it('should get a registered model factory for a given widget name', () => {
        let mFactory = new TextModelFactory();
        registry.addModelFactory(mFactory);
        registry.addWidgetFactory(new WidgetFactory(), {
          fileExtensions: ['.txt'],
          displayName: 'foo',
          modelName: 'text'
        });
        expect(registry.getModelFactoryFor('foo')).to.be(mFactory);
        expect(registry.getModelFactoryFor('FOO')).to.be(mFactory);
        expect(registry.getModelFactoryFor('text')).to.be(void 0);
      });

    });

    describe('#getWidgetFactory()', () => {

      it('should get a widget factory by name', () => {
        registry.addModelFactory(new TextModelFactory());
        let foo = new WidgetFactory();
        registry.addWidgetFactory(foo, {
          fileExtensions: ['*'],
          defaultFor: ['.*'],
          displayName: 'foo',
          modelName: 'text'
        });
        let bar = new WidgetFactory();
        registry.addWidgetFactory(bar, {
          fileExtensions: ['*'],
          defaultFor: ['*'],
          displayName: 'bar',
          modelName: 'text'
        });
        expect(registry.getWidgetFactory('foo')).to.be(foo);
        expect(registry.getWidgetFactory('Foo')).to.be(foo);
        expect(registry.getWidgetFactory('bar')).to.be(bar);
        expect(registry.getWidgetFactory('baz')).to.be(void 0);
      });

    });

    describe('#getWidgetExtensions()', () => {

      it('should get the registered extensions for a given widget', () => {
        let foo = new WidgetExtension();
        let bar = new WidgetExtension();
        registry.addWidgetExtension('fizz', foo);
        registry.addWidgetExtension('fizz', bar);
        registry.addWidgetExtension('buzz', foo);
        expect(registry.getWidgetExtensions('fizz')).to.eql([foo, bar]);
        expect(registry.getWidgetExtensions('buzz')).to.eql([foo]);
        expect(registry.getWidgetExtensions('baz')).to.eql([]);
      });

    });

  });

});

redpajama_set_name: RedPajamaGithub


The history I have lived through as well as the distant past.
My final reenlistment in 2008 – I would be out of the Army less than a year later.
A question I used to get asked a lot was "why did you join the army?" Over the years my answer has evolved into a succinct one liner: I didn't have a lot of options and the army seemed like the best thing to do at the time. However, this is only a small part of the truth. The real answer is a bit more complex than my default response.
In February 2002, I decided to move out of my parent's house in the middle of the night after a verbal altercation with my step-dad. I was 18 years old and thought I knew everything I needed to know about the real world. Within the course of the following month I bounced around from one friend's couch to another, quit my job, and dropped out of high school. That final point was a sticking point for me since I had a perfect GPA and, by all accounts, was on a fast track to a four year degree. My life was falling apart before I really got it started.
Some time in March I found myself in my best friend's house with her then husband and his family. The days were short and the nights were long as I tried to figure out what I was going to do next. How was I going to support myself? What could be done about my destroyed education? Why had I taken such a menial dispute with my step-dad so seriously? Had I ruined my life?
Work a dead end job while working to get my GED and hope to make it through community college within the next 5 years.
Get my GED and apply to the local police academy with fingers crossed.
Get my GED, join the army, serve the minimum number of required years, walkaway with the GI Bill, and forget it ever happened.
That same night I talked it over with a small group of friends. This resulted in the immediate dismissal of the police academy since I would have to arrest all of them for a variety of charges. The appeal of working a dead end job never sat well with me so I crossed that off the list. This left the Army. This left an organization I had protested against throughout my rebellious teenage years for a number of reasons.
The next day, I went to the local recruiting station in Midland, Texas. The attacks of 9/11 were very fresh in everyone's minds and the war in Afghanistan was still being fought primarily by irregular forces supplied by Special Forces and the CIA. Recruiters were hard pressed to meet their quotas but the graduating class of 2002 hadn't finished high school yet so the recruiters were under pressure. I walked into the office dressed in all black, wallet chain, and spiked hair – likely the picture of a problem child. Three pairs of eyes quickly settled on me and almost immediately rolled into the back of their owner's heads.
"How can I help you?" one of them asked without standing up.
"Yeah, where do I sign?" was my slightly enthusiastic response.
Three grown men nearly climbed over their desks to be the first to reach me, apparently Midland wasn't supplying them with enough interested bodies to meet their quotas.
"Come here son," said a gruff voice from the back of the office. The Sergeant First Class in charge of the recruiting office was standing in front of the only closed room in the space.
I grinned (as I often did back then) and headed back to the mid-30 something man holding his office's door open. The room was cramped, but I took a seat without it being offered. Arrogance masked as confidence. I knew I needed the Army as much as it needed me at that moment, but it didn't deflate my ego one bit.
"What's wrong with you?" the SFC asked.
He simply nodded, picked up the phone, and scheduled an appointment for me with a local charter school. At no cost to me, the charter school evaluated my school records and determined what would be needed for them to issue me a diploma. Within a week I had graduated from high school.
Throughout the recruiting process I maintained that I would only go in as infantry. At the Military Entrance Processing Station (MEPS), the officer in charge of my first contract offered me an Intelligence Analyst Military Occupational Specialty (MOS) with a signing bonus, secret clearance, duty station of choice, and 4 year contract, but I stuck to my guns. If I was going to serve in the Army, I was going to fight. I was going to do the most difficult job in the entire organization to prove to myself and others that I could do it. Pride stood in the way of what would have been a more beneficial job once I gout out of the Army.
In the end, I got what I wanted: a 3-year contract as an 11X (unassigned infantry MOS – assignment occurs during One Station Unit Training OSUT) with no duty station of choice, clearance, or signing bonus. I couldn't be happier at the time. I was proud that I stuck to my guns for the job I thought I wanted. I stuck it to the man!
However, my mindset had yet to change towards the Army as an organization. I was convinced I would serve my 3 years, get out, and forget it ever happened. Remember, this was a year before Operation Iraqi Freedom began so the chances of seeing combat were minimal at best.
Fast forward one year and I am soon to be promoted to PFC (E-3, Private First Class) while stationed in Korea. I would soon earn my Expert Infantryman's Badge (EIB) and was the model of a young soldier. It was likely that people thought I was born in the uniform since I never seemed to take it off.
Sometime in Basic Training I decided I liked the Army. It was structured, disciplined, rigid yet flexible, and rewarded results instead of effort. The core functions of the infantry job made sense to me (close with the enemy and destroy them) and I found I was fairly good at all of them. I was hooked and happy for it.
I ended up accomplishing two of the three goals in my first three years in the Army and letting go of the dream for Sniper School over the next few years. Once I experienced combat it was all I felt I needed in my life – but that's a series of posts for later.
I reveled in the physical pain of the training. I longed for the mental and emotional roller coaster of training and, later, combat. I was able to push myself without boundaries. I was pushed to the edge by my leadership and fellow soldiers. Everyday was a challenge. Everyday proved I could do more than the day before.
Over the years in the wet woods of Korea, dry desert of Iraq, and army-friendly Clarksville, my opinions of the Army changed. I loved the Army. I loved the infantry. I loved the experience I gained at such a young age. I loved the soldiers I was responsible for training and leading into combat. There was nothing more important than the soldiers I led – nothing.
I learned and experienced the brotherhood of the Army infantry. I lived for it.
Six years was shorter than I intended to stay in the service, but it was long enough to know I will likely never find anything else that is as fulfilling as the Army was for me.
Did you serve in the military? Why did you join? Why did you stay in or get out? Leave it all in the comments and don't forget to like, share, and follow this blog!
In pursuit of accomplishing my goals for the year, I took a little walk around downtown Albuquerque. I took a quick look at the building my dad worked in during the '80s and '90s, looked at the playground equipment they are installing on the Plaza, and a historic placard affixed to the Galleria building. It got me thinking about how things change in so few years while still triggering memories of otherwise forgotten times.
I, like everyone else, cannot foresee the future so the title of this post is a bit of an assumption. The optimist in me says I am still less than halfway through the total number of years I will be alive. However, as I have learned in the first 34 years, there is no guarantee this will end up being true. Morbid, right? I like to think of it as more practical than pessimistic.
Thinking in these terms reminds me to be thankful for the time I have had and to live each day with purpose. I don't buy into the concept of "living each day as if it were my last" since this would inevitably lead to some bad decisions worth avoiding. Living with purpose means a majority of my actions are driving towards identified goals and objectives. My Goals for 2018 have been documented on this blog and I am working on a new page for my Bucket List (so check back often to see it). This is how I guide my actions in a purposeful manner, I recommend a similar approach for everyone!
Today is my 34th birthday (as mentioned in the post immediately prior to this one) and I want to take a moment to reflect on my life thus far. I have not followed a "normal" or "safe" path through life. Many people would look at the overview of my life and say, "wow, that sounds <insert exciting adjective>". For me, it has merely been my life.
September 11, 2001 – This date has defined the part of my generation born in the 1980s. Many of us joined the military and served our country in response to the attacks that occurred on this day. It will likely be regarded by historians as the defining moment of the 21st century – at least, until the next high-profile, conflict initiating event in the world.
The Wars in Iraq and Afghanistan – In response to the attacks on 9/11/2001, the United States, under the leadership of President George W. Bush, declared war against Afghanistan (the home of the Taliban government that provided safe haven to Al Qaeda, the group responsible for the attacks) and, later, Iraq.
Revelations of the False Pretenses for Declaring War on Iraq – This was not a defining moment necessarily, but it opened the eyes of a patriotic generation. The guise of Weapons of Mass Destruction (WMD) and affiliation (or complacency) with Al Qaeda were burned down years into a war that I participated in.
The Election of the First Black President – The election of President Barack Hussein Obama (and his subsequent reelection) shocked the world for all the wrong reasons. He was a freshman congressman with limited national experience, but a wealth of good judgement and a high intelligence in conjunction with a charming personality and great rhetoric led to his historic win over John McCain, a Vietnam Veteran, POW, and seasoned political figure.
The Great Recession – Right about the time I was booted out of the Army (for being gay), the US economy crashed causing high unemployment and a lack of opportunities for the masses. It took years for this to be corrected (and some would say we are still working on pulling ourselves up) but shone a light on the house of cards that was the housing market – similar to the .com bubble that burst in 1999 and 2000.
The Technology Revolution – Many will say this revolution started prior to my birth, but it sure culminated from the 1990s to present. Smart phones, augmented reality, virtual reality, genetic engineering, leaps and bounds of forward momentum on personal computing devices, wearable smart tech, social media platforms, online existence, etc. all came to fruition in the past 15 years. It has truly been an incredible time to be alive.
Don't Ask, Don't Tell Put in Place and Subsequently Repealed (a little too late) – This is more of a personal historic moment for me given the impact on my life that DADT ended up playing. I was a part of the thousands of Army personnel discharged under this policy. It took away one of the lives I thought I was supposed to have – serving in an Army that I would have gladly given my life for many times over.
Obviously, I could go on and on listing the historic moments that happened in my life so far, but those are the ones that stand out to me while I write this post. I think it says a lot about me that these are the items that highlight themselves. Conflict and challenge, loss and love, evolution of the way we live.
My goals this year are my purpose through my 34th year of life. I will work everyday to accomplish or surpass these goals.
What historic events do you remember being influential in your life? Did these events guide you down an unexpected path? Do you think you have seen your last major historical event?
I have lived in Albuquerque, New Mexico for the past 6 years – having returned to the Land of Enchantment after a 12 year hiatus – and have been doing a disservice to myself ever since. On only a handful of occasions, I have packed a backpack and laced up the hiking boots to tackle an easy to intermediate trail within 20 miles of the city. Most of my focus has been the Embudo Trail in Cibola National Forest along the westside of the Sandia Mountains which act as the eastern border of Albuquerque. The trail connects with a system of trails that lead to the Crest (one of my goals this year) and is challenging while providing beautiful panoramic views of the city.
However, on the opposite side of the city is the smaller (but not small) Petroglyph National Monument. When people think of the West Side of Albuquerque, they immediately conjure images of cookie-cutter sub-divisions, new construction, and wide open expanses of desert. Many of us who live on the east side of the river (you know, real Albuquerque) do our best to not make the journey to the West Side without good reason. Well, I found out today that Petroglyph National Monument is a damn good reason!
I was out doing a favor for a friend who lives on the West Side and decided to stop in at one of the shorter trails known as Rinconada Canyon. This is a short 2.2 mile loop which features over 300 petroglyphs ranging in age from 3,000 to 300 years old. The canyon is quiet despite having higher than I normally enjoy foot traffic. On a cool winter day like today, the wind howls through the canyon, smacking you in the face as you venture in and propelling you out at the halfway point.
There are educational placards dotting the first half of the trail, but you don't need these to understand the historical significance of this imagery. Whether it was the ancient Pueblo people marking trade routes or Spaniards documenting their presence in the canyon with their sheep, the fact that these images still exist today is awe inspiring. We now live in a world of digital imprints and documentation – however, the nature of this digital storage is that it will decay much faster than a stone or piece of wood thus being lost forever. In 100 years, this blog will likely have left no permanent impact; it will be a blink in the history of mankind and forgotten without prejudice.
If you find yourself in Albuquerque, on the West Side of the river, plug Rinconda Canyon into your phone's navigation app and take a break from the modern world. Take your time on the trail and think about the lives that the people who left their mark on the landscape led. Can we, despite our technology and modern conveniences, learn anything from these people? Will you make such an impact on the world?
Where have you been recently that made you stop and wonder about the world we live in today? Share your experiences in the comments!


for an ultra-wet splash of color.
Apply Glazed Lips with the brush applicator first by painting the lips with just a small amount of gloss, then fully load the applicator to fill inside of the lips.
A highly-pigmented lip-gloss for an ultra-wet, yet long-lasting splash of color that combines transparency and intensity. A mega-shiny gloss to bring out your lips to the fullest, both as a covering shade, but also as a mere stain.
Glazed Lips are made from plant seed oils that hydrate, as well as Tocotrienol (a powerful antioxidant and component of Vitamin E), Vitamin C, and Omegas 3 and 6.
Ingredients: Hydrogenated Polydecene, Polybutene, Microcrystalline Wax / Cire Microcristalline / Cera Microcristallina, Bis‐Diglyceryl Polyacyladipate‐2, Diethylhexyl Adipate, Hydrogenated Styrene/Isoprene Copolymer, Caprylic/Capric Triglyceride, Stearalkonium Bentonite, Prunus Domestica Seed Extract, Propylene Carbonate, Caprylyl Glycol, Phenoxyethanol, Hexylene Glycol, Entaerythrityl Tetra‐Di‐Tbutyl Hydroxyhydrocinnamate, Dicalcium Phosphate.


text:
Q: Do all docker images have minimal OS? I am trying to learn Docker and for that referring to online materials. I came to know that there is official hub of images which we can pull, and run a container.
The repos are available at https://hub.docker.com/ , part of screen shot:

In this diagram we can see the official images of ubuntu, httpd, mysql (and so on).
My question is:
Do all these images have "minimal OS" on which they run. For example, if we consider httpd image, does it have the needed OS on which it runs?

A: Most images are based on a distribution as you can see it in their Dockerfiles. Except for the distribution images themselves. They have a different base-image, which is called scratch.
You can review the images they are based on when you visit the project's page on DockerHub, for example https://hub.docker.com/_/httpd/
Their Dockerfiles are referenced and you can review them by clicking on them, e.g. the first tag "2.2" refers to this file. The first line in the Dockerfile is FROM debian:jessie and shows, that it is based on a Debian image.
It is widely used to have a separated tag with the postfix -alpine in it to indicate, that alpine linux is used, which is a much smaller base-image than the Debian image. This leads to a smaller image of the httpd image, because the base-image is much smaller.

A: The whole idea is that the whole image is completely stand-alone running on hardware/virtualization layer. And thus (the pro:) also cannot be influenced by anything else than that is part of the image.
Every image contains an complete os. Special docker made OS's come with a few mega bytes: for example linux Alpine which is an OS with 8 megabytes!
But bigger OS like ubuntu/windows can be a few gigabytes. Both have their advantages since docker cuts an image up in layers so when you use anbase image twice (FROM command, see N20 Answers) then you will only download this layer once.
Smaller OS has the pro of only needing to download a few megabytes. but for every (linux) Library you want to use, you will have to download & include yourself. This custom made layer then is only used in your own image and thus is not re-used in other images and thus creates a customer extra download layer & megabytes people will have to download to run your image.
If you want to make an image from nothing you can start your dockerfile with:
FROM scratch

But this is not advised, unless you really know what your are doing and/or you are hobbying around.

A: From my understanding images are built in a layered architecture from a parent image. So we have a parent image and then the changes for this image is one more layer above parent image. If you see dockerfile for an image you can see something like this
FROM node:6.11.5

This node:6.11.5 is a parent image for our current image.
If you check dockerfile of parent images you will find they are somewhere in the hierarchy follow from base image.
This base image is basically an OS without kernel but has only userland software based on the different linux distributions(eg, centos, debian). So all the images uses the host OS kernel. Hence, you cannot install a Windows container on a Linux host or vice-versa.
So basically all images are layered changes on the base image which is an OS without kernel.
Please find below links for further information:
https://serverfault.com/questions/755607/why-do-we-use-a-os-base-image-with-docker-if-containers-have-no-guest-os
https://blog.risingstack.com/operating-system-containers-vs-application-containers/
If you need to create a base image you can see the steps here.
https://docs.docker.com/develop/develop-images/baseimages/
Please correct me if i am wrong.

A: Here's the answer: "Containers," in all their many forms, are an illusion!"
Every process that is "running in a container" is, in fact, running directly on the host operating system.  But it is "wearing rose-colored glasses."  It thinks that it knows what its user-id is ... but it doesn't. ♂  It thinks it knows what the network looks like.  What the filesystem looks like. ... ... ...
And, it can afford to think that way, because nothing that it is able to see would tell it otherwise.
... But, nothing that it sees is actually the physical truth.
"Containerization" allows us to achieve the essential technical requirement – total isolation – at very-considerably less cost than "virtualization."  The running processes see what they need to see, and so "they need be none the wiser."  Meanwhile, the host operating system, which is aware of the actual truth, can very-efficiently support them: it just has to maintain the illusion.  The very-expensive "virtual machine" software layer is completely gone.  The only "OS" that actually exists is the host.

A: I think a lot of these answers miss the point. Explaining what you can or may do does not answer the question: do all docker images need an OS?
After a bit of digging, the answer is no.
https://docs.docker.com/develop/develop-images/baseimages/
FROM scratch
ADD hello /
CMD ["/hello"]

There's no OS defined in this Dockerfile. Only a precompiled binary hello world app
Also here
https://hub.docker.com/_/scratch
Also in this question:
https://serverfault.com/questions/755607/why-do-we-use-a-os-base-image-with-docker-if-containers-have-no-guest-os
An answerer makes this statement:

why do we base the container on an OS image? Because you'd want to use some commands like (apt, ls, cd, pwd).

So often the OS is just included because you might want to use some bundled low level tools or SSH into it to do some things.

redpajama_set_name: RedPajamaStackExchange


text:
Ireland almost twice as entrepreneurial as EU
Entrepreneurship is alive and kicking in Ireland, according to the IMI/IDA Ireland Report on Innovation and the Irish Manager, which shows that entrepreneurs starting businesses account for a total of 4.3pc of the entire population.
In comparison, 2.7pc of the European Union population fit into this category and 2.9pc of the UK, as was detailed in the report launched today by Minister for Enterprise, Trade and Innovation, Batt O'Keeffe TD.
The Innovation and the Irish Manager report found that at 9pc, the rate of established entrepreneurs in Ireland is one of the highest across the OECD (Organisation for Economic Co-operation and Development).
The report also looked into the effect of entrepreneurism on both indigenous and multinational companies in terms of economic stimulation as well as the kind of environment that breeds entrepreneurs.
"Interestingly, half of all entrepreneurs in Ireland have, at one point, worked for a multinational company," said O'Keeffe.
"Entrepreneurs stimulate innovation and transformation in established companies, including multinationals."
The report not only looked at the economic repercussions of a strongly entrepreneurial country but also the individual traits of the Irish entrepreneur.
Apparently, the research found that the Irish entrepreneur has an ability "to handle complexity and ambiguity" and is strongly people-oriented, finds personal inspiration through innovation and is more likely to be individualistic and self-reliant than his or her international peers.
Related: IDA Ireland, entrepreneurs
Standard Access wins US patent for its building manager tech
'Making mistakes is part of the start-up journey – accept them, learn from them'
The lightbulb moment that led to mental health app KeepAppy

redpajama_set_name: RedPajamaCommonCrawl


text:
Vinnik Has Good Chance to be Extradited to Russia, Wants to Cooperate - Lawyer
© AP Photo / Giannis Papanikos
https://sputniknews.com/europe/201805261064834336-extradition-vinnik-greece-assassination-attempt/
ATHENS (Sputnik) - An attempt to kill Russian national Alexander Vinnik, suspected of money laundering in the United States, has been prepared because of the possibility of his extradition to Moscow, Vinnik's lawyer said in an interview with Sputnik.
"We can analyze the reasons [behind the assassination attempt] by different ways. Alexander has told 'I know too much and a lot of people in Russia would be embarrassed if I am back home.' It is likely that this attempted murder has been prepared taking into account the opportunity of his return to the country. No one has believed in it before," Timofey Musatov said, answering a question about the reasons behind the planned assassination.
© REUTERS / Alexandros Avramidis
Greece Violates Treaty With Russia by Extraditing Vinnik to US - Civic Chamber
The lawyer also claimed, that Vinnik had prepared a statement, which contained information harmful to both the Russian investigation and Alexander. "There are people, who do not want him to return to Russia and wish him death," Musatov said, adding that the defense made a lot of efforts to ensure that Vinnik won't be extradited to the US, but would stand trial in Russia, as he wanted to cooperate.
READ MORE: US Intelligence Continues to Seek Russian National Vinnik's Extradition — Source
"He said the following: I want, in any circumstances, that my activities or my crimes are investigated in Russia. If I am guilty, I must be punished. I will cooperate with the investigation. I want to be in Russia under any circumstances, "- quoted the lawyer the words of Vinnik.
Earlier in May, a source familiar with the matter told Sputnik that the Greek law enforcement agencies had uncovered a plan to kill the Russian citizen.
Vinnik was detained in Greece in July 2017 after the United States accused him of laundering between $4 billion and $9 billion on a bitcoin trading platform. He faces up to 55 years in prison in the United States if convicted
US Intelligence Continues to Seek Russian National Vinnik's Extradition - Source
Greek Police Uncover Plan to Kill Russian National Arrested in Greece - Source
Extradition, Alexander Vinnik, Russia, Greece
21:43Libya's GNA 'Cautiously Optimistic' About Haftar's LNA Honouring Berlin Agreements - Leader
21:37'Hidden Piece of the Past': Digital Tech Reveals the Finale of the Legendary Escape From Alcatraz
21:36Seven People Detained in France on Suspicions of Plotting Terror Attack - Reports


text:
SoCal Tournament Day 1 results: Stanford fall to UCSB, Cal loses to UC Irvine
The 2012 SoCal Tournament had three upsets, with two of them being major upsets with Cal and Stanford falling.
By Jeremy Mauss@JeremyMauss Sep 30, 2012, 1:50am EDT
Share All sharing options for: SoCal Tournament Day 1 results: Stanford fall to UCSB, Cal loses to UC Irvine
Alexander Hassenstein - Getty Images
Day 1 of the SoCal Tournament is in the books and there were a trio of upsets on Saturday. The first minor upset was when No. 14 ranked Air Force Falcons were able to upset No. 12 UC Davis 12-11 in the second round. The other upsets was when No. 6 Santa Barbara Gauchos who were able to defeat No. 3 ranked Stanford Cardinal 12-9. The final upset of the day was when No. 5 UC irvine was able to take down No. 4 Cal 13-11.
The most surprising upset was Irvine defeated Cal, mostly because Cal had been playing so well of late. They crushed Air Force 22-4 earlier in the day, and nearly upset USC last week.
Here are the results for Saturday, with Sunday's schedule below.
Dos Pueblos High School
UCSB Campus Pool
USC 15, St. Francis 4
UCLA 17, Santa Clara 3
9:20 a.m. Pacific 11, Long Beach St. 10
Results Game 6
Pepperdine 12, LMU 7
10:40 a.m. Cal 22, Air Force 4
Stanford 13, Princeton 6
12:00 p.m. UC Irvine 13, UC Davis 6
12:00 p.m. UCSB 15, UC San Diego 8
1:40 p.m. Long Beach St. 12, St. Francis 4
Results Game 13
1:40 p.m. LMU 16, Santa Clara 9
3:00 p.m. USC 9, Pacific 4
UCLA 14, Pepperdine 7
4:20 p.m. Air Force 12, UC Davis 11
4:20 p.m. UC San Diego 10, Princeton 5
5:40 p.m. UC Irvine 13, Cal 11
5:40 p.m. Stanford 9, UCSB 12
Sunday, Sept. 30
Pacific vs. Cal
St. Francis vs. UC Davis
9:20 a.m. Pepperdine vs. Stanford
9:20 a.m. Santa Clara vs. Princeton
10:40 a.m. USC vs. UC Irvine
10:40 a.m. Long Beach St. vs. Air Force
12:00 p.m. UCLA vs. UCSB
12:00 p.m. LMU vs. UC San Diego
1:40 p.m. Loser #21 vs. Loser #22
3:00 p.m. Winner #21 vs. Winner #22
2012 SoCal water polo tournament: USC defeats UCSB to claim championship
SoCal tournament results
SoCal Tournament Day 1 results
No. 5 UC Irvine Defeats No. 4 Cal, 13-11


We are a venture fund with founders at heart.
We like early. Like, early early. Pre-seed, Seed, and Series A.
We invest in founders with passion and heart, building tech-driven, industry-shaping businesses all over the Pacific Northwest. We are founders who have built market-defining companies ourselves. We are addicted to helping other exceptional founders do the same.


text:
Home » News » Shi'ites: US, CDHR condemn use of 'maximum force'
Shi'ites: US, CDHR condemn use of 'maximum force'
ABUJA — Reactions yesterday trailed the bloody clashes between members of the Islamic Movement of Nigeria, IMN, and security agencies, as the United States Government, Chief Mike Ozekhome, SAN, and Committee for Defence of Human Rights, CDHR, flayed the use of maximum force on the sect.
Buhari will give assent to Electoral Act Amendment Bill –Rep Dukku
INJURED—Some of those injured in the Shi'ites/Police clash in Kano, yesterday.
The reactions came as 130 arrested members of the sect were arraigned before an Abuja Chief Magistrate Court sitting at Wuse, Zone 2, Abuja by the Nigeria Police Force.
Anxiety as NHRC probes rights' abuse by SARS
This is even as the Inspector-General of Police, Ibrahim Idris, described the IMN as a non-Islamic organization.
Amnesty International had on Wednesday, also criticised the use of maximum force on the sect members by the military and police which it claimed led to the death of 45 of the sect members.
US reacts
Reacting yesterday in a statement issued by the US Embassy in Abuja, the US government expressed concern at the the number of deaths that resulted from the clashes between the sect and the security forces in Abuja.
"We urge government of Nigeria to conduct a thorough investigation of the events and to take appropriate action to hold accountable those responsible for violations of Nigerian law. We urge restraint on all sides,'' the terse statement read.
It's rights violation, says Ozekhome
Also reacting, Chief Mike Ozekhome, SAN, said: "What the government is doing to the Shi'ites by killing those who participated in peaceful protest in Kaduna and Abuja for merely protesting, which is their constitutional rights under the 1999 constitution, amount to breach of their constitutional rights and calculated pogrom.
"These are people who are not armed, going for peaceful protest like what the likes of Charley Boy and the rest have been doing. That is an act of barbarism. Soldiers are trained to kill not to quell riot. ''Military are called in a situation where the situation cannot be controlled. The police who are trained to quell riots are not even allowed or permitted to kill under section 214 and 215 of the constitution. So the killing is, indeed, malfeasance.
"Like what the Amnesty International has said, the government and the military are to be held responsible. These same soldiers are not able to quell the killings by herdsmen in Adamawa, Plateau, Enugu, Benue etc are now killing those who engaged in peaceful protest."
In his reaction, President of Committee for Defence of Human Rights, CDHR, Malachy Ugwumadu, said no one could discountenance the view of Amnesty International, on the ground that whoever killed another person unlawfully should be held accountable.
''It is consequential for any violent behaviour or infraction of our laws and in line with the rule of law, must hold people accountable. Having said that, every Nigerian, under Chapter 4 of the Constitution and other relevant sections, have rights to freely assemble and associate.
"Section 45 under same chapter 4 says that such right can be taken away in such circumstances when you infringe on the same constitution.
"I condemn in totality any form of killing and violence by any group, which should not also be accommodated under any democratic set up like ours, which is capable of causing breach of peace,'' he said.
Police arraign 130 Shi'ites; court grants them bail
Meanwhile, the Nigeria Police Force yesterday arraigned 130 members of the Islamic Movement of Nigeria, IMN, also known as Shi'ites, before an Abuja Chief Magistrate Court sitting at Wuse Zone 2.
The defendants were among 400 persons arrested after a two-day violent clash between protesting Shi'ites and security agencies within the Federal Capital Territory, a development that reportedly resulted in the death of no fewer than 30 persons.
Among those brought before the Magistrate's Court for trial were eleven women, some of whom are nursing mothers.
The accused persons were split and docked before five separate magistrates, though they were charged with the same offence.
Specifically, the Police, in the First Information Report it lodged before the court, alleged that the defendants committed a joint act, "by joining or continuing in unlawful assembly, knowing it has been commanded to disperse, disturbance of public peace, rioting and causing hurt".
They were said to have by their actions, committed criminal offences contrary to section 79, 104, 113, 106 and 242 of the Penal Code.
Police alleged that on October 30, "at about 1400hrs, at different part of FCT and its environs, following a tip-of that some group of persons were rioting, disturbing public peace and blocking vehicular movement.
"Immediately, a team of Police men, led by Assistant Commissioner of Police in charge of Operation, FCT Command, Abuja, ACP Valentine Olumesi, arrived at the scene and met you whose names appeared overleap, riotously gathered and blocking vehicular movements and you were ordered to disperse peacefully and you refused and started throwing stones at the Police officers and other members of the public and, thereby, caused them bodily harm.
"You are, thereby, reasonably suspected to have committed the above mentioned offences".
All the defendants pleaded not guilty to the charge read and interpreted to them in Hausa, even as they were granted bail by all the Magistrates that took their plea.
Magistrates grant them bail ranging from N500,000, N200,000, N50,000
However, the magistrates differed on the bail terms.
In her ruling, Magistrate Elizabeth Jones-Woni, who recorded plea of 30 of the defendants, granted them bail to the tune of N500,000 each, adding that they should provide three persons to stand surety for all of them.
Similarly, Magistrate Musa Ibrahim Jibbo who was assigned the case involving 35 of the arrested Shi'ites members, gave them bail in the sum of N200,000 each with one surety in like sum.
However, Magistrates Njideka Duru, who took plea of 35 defendants, and Lateef Abolaji, who heard plea of 30 others, allowed them on bail to the tune of N50,000 each.
Arraignment of the Shi'ite women was stalled owing to the absence of Magistrate Musa Eneye who was assigned to take their plea.
Meantime, while deciding the merit of a bail request by counsel to the defendants docked before him, Magistrate Abolaji, held that Police failed to adduce convincing evidence why they should be allowed to remain in detention pending their trial.
He dismissed an objection Police raised through its lawyer, Mr. Edwin Ochai.
Magistrate Abolaji held that all the FIR Police lodged against the defendants contained bailable offences, adding that the argument that the Shi'ite members were not resident in the FCT, was not enough ground to deny them bail.
"On the whole, the ground for objecting to this bail application is not established," he held.
Aside directing the defendants to pay N50,000 each with one surety in like sum, the Magistrate ordered that each of them must depose to an affidavit to keep peace and be of good behaviour while on bail.
He further ordered that the sureties must be resident in the FCT with traceable addresses of residence and places of work.
The sureties were also ordered to deposit either their national identity cards, voters' cards, drivers' licenses or their international passports.
The case was subsequently adjourned till December 5 for trial.
Shi'ites not Islamic sect, says IGP Idris
Also yesterday, the Inspector General of Police, Ibrahim Idris, said that contrary to beliefs in some quarters that the Islamic Movement of Nigeria, IMN, was as an Islamic organization, the reverse was the case.
Idris said the movement, otherwise known as Shi'ite, had nothing in common with Islam, adding that the sect's activities as witnessed in recent past showed it was not an Islamic one.
The IGP said he had already constituted a committee, made up of the United Nations, the ECOWAS among others, to destroy all the recovered arms in police custody before the 2019 general elections.
Besides, he also said the 26,000 ammunition recovered during mop-up operations, will be destroyed.
Speaking while briefing Commissioners of Police, CPs and officers above, at the Force Headquarters, Abuja, the police boss charged police personnel to brace up to the security challenges posed the country by some outlawed groups as the Shi'ites.
He urged the public to, henceforth, refer to the protesters as "El-Zakzaky group", warning that all legitimate strategies will be adopted to ensure threats to security were contained.
Idris maintained that no death had been recorded from the Police clash with the IMN members, owing to the minimum force strategy so far adopted.
"These are people that have planned to bring problem of security all over. The strategy adopted by the Police is the best approach. I think it is something that is commendable", Idris said.
Idris particularly said as the 2019 general elections draw nearer, officers and men of the force must be proactive in intelligence gathering so as to timely detect and nip in the bud security challenges before they snowball into bigger problems for the country to handle.
While hailing the handling of the Shi'ites challenge by officers and men of the Force, he noted that in spite of the development, the Shi'ites were still Nigerians.
"We didn't lose any life within the Police. What we do is that, where you have a lot of violent response, we use smoke. I think that's the maximum we use. And I think, so far, most of them that constituted themselves a security risk to the general well-being of the country, were arrested.
"I think it is very important for the response of the police to be measured. As I said earlier, these are also Nigerians, we have to employ every method, to make sure we tackle their threats with minimum force.
Meanwhile, a committee set up to recover illegally-acquired firearms across the country, is set to destroy a total of 10,000 of the items.
Also, 26,000 ammunition and other prohibited weapons mopped-up during the operations, will be destroyed.
The IGP, who made the disclosure, said: "I have set up a committee, headed by the Deputy Inspector General of Police, Department of Operations, comprising the United Nations' organs, ECOWAS and the Presidential Committee on the Prohibition of Small Arms and Light Weapons (PRESCOM) and other critical stakeholders for the destruction before the 2019 elections of about 10, 000 illegal arms and prohibited weapons and above 26, 000 illegal ammunition recovered in the mop up operations of illegal firearms and prohibited weapons currently ongoing throughout the country".
In a related development, Idris said the Force had ensured that political parties held their primaries under an atmosphere of peace.
He, has, therefore, charged officers and policemen to ensure that the feat was replicated during the 2019 general elections,
How DCP, 7 others died as Shi'ites protest turns bloody in Abuja
In "Babes & Babies"
El-Zakzaky : 7 feared dead as Shi'ites, security agents clash
In "Headlines"
Abuja protests: NHRC asks FG to dialogue with El-Zakzaky's group


Cool stuff is around guys. Here I am going to reveal some of the best parkour shoes for parkour training, casual and sports activities. Sports and outdoor stuff is awesome in this concrete age. Parkour shoes are made for parkour training and the guys who are in touch with sports would know this.
Mankind is civilized now and tends to develop recreational places, fitness clubs and activities for a healthy life and environment along with other developments. Sports is one of these sorts of creations. Without shoe sports and hanging around does not sound good.
The purpose of this post is to know the inside story of parkour shoes by reviewing it and a complete buyer guide with all information one should need to know about sneakers.
Extreme Parkour necessitates complete body power, stability, and flexibility- the gear that you use must reveal this notion. The section below provides complete research and reviews on the top 10 parkour shoes that are available online or otherwise.
A thorough analysis of a complete range of product has been done to facilitate the user who is looking for the shoes, just check the details required to match your needs.
elasticity and damp adhesive friction.
Extremely sensitive to the numerous needs, XS TREK it is equally good for tracking to be used as a sports shoe or even for indoor undertakings.
It gives prime stability of pull and stability at the same time being open on to the erratic ground. It is planned for constancy and comfort.
Let's know it in detail..!
Most of the users are very positive towards Vibram Men's KSO Evo Cross-Training Shoe Polyester Fabric. that is the reason Vibram's this parkour shoes pair is included in the list of top 10 parkour shoes.
Those who have a problem with the flat foot have the views regarding these pairs of best parkour shoes that they have absolutely sensed the conversion even while performing a simple task or even just walking.
People with fat foot have told that going to the gym has become easy for them as they don't permit barefoot so now these are the best parkour shoes and a must have for them.
As these shoes have the firm bottom grip they are so good and can be easily used in water.
The American Parkour sneakers are in particular designed for the committed Parkour enthusiast be it one of your family member or you. They offer an excessive mixture of power and stability, enabling the wearer to give their best performance without any uncertainty.
It took the company two complete years to develop this shoe, it is claimed to be the best designed Parkour shoe till now. It loudly asserts and declares to deliver the excitement and pleasure on the first trial.
The Take Flight 1.0 has unbelievable padding, great changing over, and the best pull that is ever been provided or sensed on a Parkour or for that matter any brands multipurpose working out shoes.
The wearer will feel the pleasure and comfort the time of the first trial. This Take Flight 1.0 is actually somewhat exceptional. The company claims to own the product so much that they are ready to take them back if you don't like it, a 100% no inquiries refund is offered. A nice experience I had with these shoes.
It is seen the lowermost holding layer inclines to detach out when the shoe is being used frequently. This generally happens after 3-4 months of continuous usage.
The following qualities make them the most desirable, extreme cushioning; lightweight, overall elasticity, remarkable hold, very breathable, comfortable, strongly recommended for support wear, also for athletic and daily use.
There is some problem in size which can be solved either by trying them properly or you may get a size larger than the actual one.
These shoes are created and planned explicitly for apex Parkour, it cartels comfort of padding along with litheness, flexibility, and control to contribute for the topmost point of accuracy!
The shoe features nettop and a detachable inner sole giving an extra option to the user they can alter the amount of cushioning. It has an underlying sole as well that will give support to the foot in any situation.
These are the best to choose from the minimalist designs of cool Parkour, its rubber sole is helpful in gripping and absorbing jolts so that a person can run longer interval of time more comfortable, you will be able to feel the ground underneath, it provides support against vibrating ankles and knees.
The Merrell Men's Vapor Glove 2 Trail Running Shoes are designed and suggested for accuracy jumps and handrails contributed by the effective gripping of the soles.
Those who are interested in high jumps or take big drops, the gentle type of sustenance and padding is required is truly provided by these shoes and that too very precisely. They are available in two different colors to match your taste.
The shoe is a perfect example of a simple minimalist sense and sensitivity to them. Suitable for casual and gym wear. Introduction of some more colors which can add choices for the customers.
People who use them for even 16 hours said that were so comfortable even on the day one of the use.
Durability is a slight issue with these shoes; they are getting small whole if used regularly and constantly for running purposes, which makes them worthy of replacement a bit quickly, told a customer who was still happy with the performance of the shoe.
An important info I must share here!!
They appeared a little shapeless with the passage of time but despite the fact they lasted a little extended, he said she that the last pair she kept on wearing till they took holes in the soles. She is again looking forward to enjoying her current pair. I have run about 220 miles in my one pair and have worn no other footwear for the last five weeks. I have run a full marathon and a half marathon in this shoe. Another user said that he is been running regularly on the street and into less light track running. And even in the hot and humid weather, the shoes retain shape well.
He also reported the wearing off although starts a little early maybe let's say in 5 days of continuous use a few changes have appeared. But the soles are even now in good condition.
A marathon runner and excessive user reported that even though he is been running a lot in the pair of these shoes and even using a mix of hot and damp streets and trails both but the comfort and ease provided by the shoe is unmatchable, he feel much relaxed and effortless running with them. Although extensive usage had made holes in the sides still the shoe is usable and working properly.
The durable canvas material used in the making of evolve Cruzer Approach shoes make it easy to use with and without socks, the rubber sole is accompanied with remembrance foam inside the sole lining which has moisture soaking microfiber.
These shoes are intended to provide comfort and style with ease. They also give you an option to either use the lace of the shoe on the upper side or you may slide it on by hiding in the heel. It provides dual possibilities.
If the requirement is hanging the shoes to a harness or backpack you may clip them with a heel pull tab provided to keep the shoes safe when they are not being used.
In running they are slender, which can be a drawback and definitely not too suitable for people with wide feet. They are available in quite a few color combinations which make them more appealing.
Reviewed in detail for know it more!
The shoes are Comfortable, attractively manufactured. They can use them with or without socks; they feel a lot relaxed even without a sock. The fencing makes one feel at ease without socks, can get the status of most wanted stuff in the shoe category.
An outstanding class of the material used makes the canvas is durable and of superior quality which can last for a few years with regular use.
Most customers are enjoying the back hoops are as they add up to a pleasant feature. The light weight of the shoe makes it easy to pack in any backpack. If preferred the heel reverses and bends down making it possible for using it as a slipper.
The rubber toe jumbo is the greatest desirable feature, even though a bumper near heal would also be appreciated but really enjoying the crafty dual tongue design reported a customer.
Some complaints were also reported the heel of the shoe is slightly tapered. There should have been additional space below the heel for sideways movements and heel assaults. The shoe finishes stroppy in the back except if the heel is placed this biggest criticism of the shoe, according to a customer.
there is not adequate breath-ability in these shoes. Assume that the feet will sweat in these shoes after even a slight excursion.
The performance of the shoe definitely goes down when they get wet; even they feel is very changed when wet. They become loose, like moist cardboard.
Evolv Men's Cruzer Approach Shoe is dainty climbing shoes; therefore they provide a close fitting that feels slightly tight on the foot. Therefore it is advisable to order a size bigger than the original size. A half or one size up with giving you comfort if you want to wiggle around the roads.
Know Obstacles designs shoes explicitly with Parkour, free running are designed while keeping sportspersons in consideration.
It is important to understand that these shoes are created after investigating the specific needs and fit to cater to such perplexing requirements.
The three different styles of shoes those are presently available with differences in padding, footstep, and toe box. The present line deals three levels of cushion, three levels of breathability, three diverse grips, and three different toe box sizes.
With all requirements, the company is proud to offer products for whether a beginner level or a professional level. So no matter if you are a tracker, free runner, tracer, ninja warrior or a versatile instructor we offer something that fulfills your needs.
The best parkour shoes product is famous as GEN3 which is a modernized version of the classic styles. The design on the top is simple, toe box, and repairs cup rigidity of the best-selling Gen 2.
Two chief alarms from Gen2 critics. The bulkiness of sole is removed excluding additional EVA that prolonged broader than the sole and the upper, causing in a new modern look that is not as much of a customary "running shoe". Second, and most prominently, the old KO step is substituted with extra sturdy one that will not wear off as rapidly and spreads all the way from toe to heel.
The Faas 500 V4s from PUMA makes sure that you use all the lightweight equipment. These lightweight best parkour shoes are premeditated for running and working out with a bit of padding and an intertwined network on the top.
The strong padding is good to provide a person with extra backing and safety without so that you run without any fear of falling or slipping.
A 4mm heel-to-toe drop supports to place the thread regularly. A FAAS foam dampening middle sole tops an Ever track+ rubber outer sole.
These shoes are accessible in many colors even with touches of yellow for people who enjoy brightness. A protected toe, slender fit, and low outline benefit you to accomplish the unsurpassed as a replacement for facing any trouble in the stride.
Generally, this is a imperturbable contemporary shoe for a assortment of uses.
If you are looking for a pair of cool Best Parkour shoes at an affordable price. There is no way we will let you down!
Coming in two colors and distinguished design, these Kung-Fu shoes are most suitable for the people who are into Chinese martial arts. These low prices canvas is good for Parkour customers.
A canvas material top with a cotton coating arranges for a breathable and flexible shoe. The vulcanized rubber midsole has a nitrile rubber outsole for strong and fall resistant grip.
The outsole spreads out all over the sides of the shoe to safeguard the feet and the material of the top. The material of the lower sole is kept thin enough so that it can provide a decent feel of the trail underneath you.
The simple style is not compromising on the area of padding, and the canvas material is going to expand a little with use forming a seamless frame in the area of each foot.
They have that respectable look that you can wear them as daily wear best parkour shoes, they bid an inordinate blend of a budgeted, articulated design, and modish appearance an unadulterated example extreme Parkour.
The DOUBLESTAR MR sneakers provide decent clutch, many users said they have provided steady hold even when have been used in rain and damp places. Reported to be comfortable, offer a tight fit to the foot. Good value for money as they proved to be an excellent choice for gamers.
These shoes have a splendid appearance couple with a virtuous design, most suitable for people who like to have less weight on feet and still stay sheltered from the components and exceptional grip.
The nonstop usage will cause warning out speedily but at the given price it's worth the money, in fact, extra, according to many customers.
The shoes are designed as standard running shoes with the addition of open spaces in the sole for the passage of water an air through them. The outside area is formed by cloth-like fabric which styles like a sneaker while wearing them. The major shortcoming of this shoe is the cloth fabric used takes time to get dry. It doesn't let the feet get dry as well. They become heavy while you swimming as well. These shoes are also recommended for a long time frame as they are lightweight.
The user got them for a fixed price, was of correct size so the problem of correct fit was not there. He found them extra lightweight and stretchy and far more relaxed compared to other sneakers he had. The spongy insoles they had been excellent to be used in water. They are easily usable in the pool, or on the beach, even in the sea water, you can expertly walk in them.
According to another user, they were sufficiently relaxed and comfortable even after wearing them for long hours in and out of the water with no grievances. They dried quite speedily. It is better to leave them out the door in sun after using.
They can be cleaned and washed quickly; the style and look of gym shoe with laces for extra style make them cool to look at. The bottommost sole has upright grip. the customer even puts them on for trivial mountain hiking, to the waterfall, horse riding, and jet-ski. Shoes lasted to the exploitation and sheltered the feet.
The Onitsuka Tiger ultimate 81 is the biggest selection of the mechanical runners since the 80's; it still offers dual tone Eva midsole and elastic TPU heel to deal greater sustenance and cushioning. The improved steadiness in the shoe is formed by the transformed outer sole scheming, giving the runner with optimum traction and shock immersion.
Since long Onitsuka Tiger has created fashionable sports products stirred by the Japanese standards of workmanship and devotion to features. From side to side of the dexterities, Onitsuka Tiger carries alongside East and West, and establishes the notion of "Made of Japan." more vivid.
A boy who is using and wearing these shoes for more than a decade says that the style has continually inspired him. He said for a person who is into a lot of walking they are best.
For people who are continuously walking for the whole day, these provide comfort and ease, while at the same time they are likely to break down somewhat faster.
The rubber on the heel and ball of the foot goes out quicker if use too much for the whole day, the fabric gets torn and the toes pop out for sure. This makes them a little pricey.
Another customer exclaimed that he is been using his favorite brand for the past 15 years or completely, he said it made him a little worried about receiving the Onitsuka Tiger ultimate 81.
The reviews persuade me too much he said which made him try them. The shoes appear pronounced, the texture is eccentric, but the sole came out too quickly. Apart from durability shoe is the really good choice for anyone looking for state of art Japanese technology.
Some of us are not comfortable tying and untying those laces all the time if want to stay hassle free. The Vivobarefoot Motus Cross Fit shoe structures a Velcro strap in place of the laces, to keep your irritation free and saving you the trouble of stopping and retying those lose laces ever now and then.
The shoe is ideal for people with broad feet as it has extra wide sole are so you are saved from the discomfort of tightening from the front.
In this shoe as well net material is used this is breathable and stretchable. The rubber soles are strong, non-marking with a toe guard that offers adhesion without feeling rigid. The flat-fit sole is perfect for shoeless running. The rubber sole spreads up the inside arch for improved arch care.
Multiple colors are available to suit the choice. The Velcro belt is very helpful in supporting the shoe's fitting in the area of the arch of the foot to ensure the shoes fit more easily and steadily when it is being used by the wearer. The pebbled sole also contributes a really fast grip does matter the way you stop.
People think that the new versions are improved and more comfortable. The previous edition had a criticism of being less durable while these new ones seem to be more durable.
The new ones appear to be superiorly manufactured. The texture is also improved; they are suitable for numerous mechanical foot grounds as well. For instance, martial arts rehearsal and executing chore required a lot of body weight ever-changing, these are altered than regular sneakers.
Helpful in continuous movement work, provide a platform and keep the foot centrally on the higher level making the movement easy and faster with cushioning and the design also permits the foot to spool from sole to sides. The land can be felt as they are lightweight which supports the smoothness as well as the aid route. They are breathable making foot swing in all directions without getting slipped.
It is recommended for people looking for something in the budget which can perform multi-tasks and still remain intact.
With so many Parkour shoes available for sale How to select a good men sport or outdoor shoes or simply the best parkour shoes?
Here is the answer to all the queries!!!!
We have tried to find out the answer to all your queries for the Parkour shoes. Below is a complete analysis of all the products with the review based on customer's feedback and user analysis?
Good quality jogging shoes, which should be having following characteristics, they must be comprised of cushioning, elasticity, regulator, and firmness in the heel stand zone, along with agility and upright grip.
Three major types of exercise shoes, Running, exercise, and walking. This comprises shoes for hiking, jogging, workout and walking.
The remaining questions are answered in the ultimate buyer's guide section of this review.
Comfort is the priority in walking shoes, must be shock absorbent, smooth pace, and a sole type that supports the possible work of the foot all over the time.
Comprises shoes used for leisure actions such as hunting, fishing, and boating.
Consist of shoes for tennis, basketball, and volleyball. Most court sports necessitate the body to move forward, backward and side-to-side.
Wide toe box for people who are into hiking, or at a job that requires major walking around or if you get swelling on the feet when you walk and more such wide-ranging problem a wide toe box type shoe is recommended.
Here is the catch!!!! These shoes allow the toes to expand naturally; simulating the mode the foot is designed to walk. This original elegance of walking will recover your steadiness and equilibrium, so it will also diminish the probabilities of any harm.
Additionally, these shoes offer an extra treat of comfort and liberate the suffering due to foot inflammation and additional foot complications.
Rubber sole Parkour ensure soft rubber soles with little rubber nubs for power and gripping. Mostly high-end brands like NIKE and Addidas are also using rubber sole as it is more comfortable and provides good grip. The rubber sole is also absorbing more sweat when compared to leather sole. It's easier to carry for the whole day.
Sizes there are all sorts of sizes available. A shoe size is a suggestion of the suitable size of a shoe for an individual. There shoe-size systems used internationally are diverse and numerous.
Let's know it in depth now!!
KNOW OBSTACLE's Gen 3 free running is best Parkour shoes and they are an excellent choice for individuals who want a wide toe box.
Best shoes with the insoles that are comprehensively padded they hold walkways and roadways nicely. A customer said that "I like how I can feel the ground that I am walking on, especially on uneven grass and terrain." Lastly, Parkour shoelaces are not unreasonably long and remain knotted throughout the free running and walking. As the extreme Parkour features are widely essential, the price someone has to pay for Parkour classes is very reasonable and affordable.
Why select a certain brand in best parkour shoes?
The basic notion in selecting any brand is durability so it lasts longer and the economic value that it provides. Basically, cost and benefit analysis of the available products in the market.
If there is any promotion going on and if that promotion is worth considering always look for available options and advertisement when you require making a purchase.
Which one is to be selected for having a choice of best parkour shoes?
A single brand offers different types and styles in the same category. Which one is to be selected?
Different types of materials and design are recently available in sport's shoes. Examine the shoe inside out before deciding which one to buy. This will aid in selecting a shoe that is suitable for both the foot and the sport.
Distinctive features in the structure give ease while wearing and also prevention from the damage.
As it is obvious that the shoe must fit perfectly in order to work its best Parkour Shoes otherwise they are of no use. Foot complications can be overcome by selecting a shoe company that engages a pedorthist or qualified shoe fitting person.
It's probably very important to select the running shoes on the basis of comfort.
What is comfort is generally misunderstood by many runners, especially beginners? The latest research in the British Journal of Sports Medicine approves the comfort screens as the most important device a runner should consider while selecting shoes.
Two fresh standards are recommended to expose the relationship amongst footwear and damage. These two standards are favorable movement path and the comfort filter.
It is recommended that a runner spontaneously chooses a comfortable product using their individual comfort filter that permits them to keep on in the desired movement trail.
Shoes with multiple soles stick together come off in lumps, therefore, it is always better to choose a sole that has a single layer it will be the best option in terms of effectiveness.
The layered soles also have the problem that certain separate slices of rubber will scratch off while some will halt on, revealing the padded area which might from side to side very rapidly go off and offer little grip. People don't endorse such shoes generally.
The arch in a foot is the bent area found in the inner side of each foot. The depth and size of the arch differ. As both, the arches must be of the identical size and shape on each foot.
While selecting shoes it is important to check out arches properly, as they are the security apparatus for accomplishing the stoppage accurately.
Occasionally it happens that when we stop suddenly on the brink the feet slide frontward, the arch of the shoe can descent the heels and the verge of the touchdown inclines to padlock the feet arch.
There is an omission to the regulation and that is at the time of using a shoe having thin soles the flexibility and sensitivity that the shoe provides enables us to use the natural arch of the foot for welfare.
Always be careful to elude shoes with tough plastic in the arches, which may be a reason of slipping when hiking, if by chance you land on a metallic surface wearing these hard plastic arches it may be a reason of you slipping.
The material of the rubber sole is also very important to check. As it also affects the life and its capacity to grasp. If it's made up of soft Softer materials are likely to give away more grips but garb down more rapidly. While the harder materials are long-lasting, the grip they offer is unproductive sometimes which may cause the fall.
If you are born with a silver spoon. Then you have the capacity of spending on the best shoes in the world. You might be such a fortunate soul probably your priority will be comfort and style and not durability. For the general public durability and price are the two most important factors. A person prudently makes a choice of expenditure on a shoe.
A person involved in extensive working out will definitely use and discard shoes quickly. Therefore it's impractical to go for a costly shoe which can work slightly longer than an inexpensive one.
From where should the purchase be made for best parkour shoes?
This question is the last one to answer after all the above research and selection of the product to buy. A decision to whether one should buy online or from a convenient store etc.
Every shoe store has different size measurement, try on a shoe to be confirmed on the fit.
Feet are largest when you conclude the work out check out the shoe at this time.
Wear the socks that you generally use while exercising.
Better to choose the size when your foot is of maximum length.
A much-desired feature is the weight of the shoe. If possible the shoe should not have weight otherwise it will give resistance while running.
The lesser the weight possible will keep you going throughout the day as it provides ease and comfort. Usually, an extra added weight will hamper the natural movement. And free working of the, so lesser the weight of shoe more will it help in training throughout the day.
Regardless of what certain people might have confidence in. The fact that a dense sole should not be used in Atlanta Parkour. The fact is thick sole is sometimes very helpful in stimulating depressed performance.
Thick soles don't let you interact with the surroundings as they generally have a deficiency of warmth and precision. This absence of precision permits selected individuals to make an effort for certain moves they have not even prepared for.
The thin sole in the best parkour shoes gives clearly experience in landing impact. It is very essential in improving. As it empowers you to continue to correcting procedure as well as to escape damage.
A detailed analysis of the best Parkour shoes available above. It can help the user to make a decision based on the overall survey. I have tried to jot down all that is required to know about the best parkour shoes. This would make it easy for anyone who wants to know before making a purchase.
Apart from a few problems in the lasting for a long time. The shoes are generally comfortable and provide extra ease and relaxed running experience. They can be a good choice especially if you want to keep the foot hassle-free and relaxed.
If anyone wants to share or add up some information for improvement or any suggestions. Please fill out our contact form to reach us or write a comment below.


India's key stock market index has fallen more than 3.5 percent because of concerns about rising inflation and political instability.
Mumbai's Sensex index lost 500 points Tuesday to close at 12,962, its lowest in more than a year.
Indian banks were among the hardest hit in the sell-off, including State Bank of India, which lost 7.8 percent, and ICICI Bank, which declined 6.5 percent.
The surging price of crude oil worldwide has added to concerns about India's inflation rate, which is at a 13-year high. In June, the Indian government raised the price of gasoline and diesel fuel to help state oil companies stay profitable.
Analysts say tensions between India's ruling coalition and the communist parties over a proposed nuclear pact with the United States also contributed to Tuesday's stock sell-off. The communist parties have threatened to withdraw support for the ruling coalition and force early elections if the pact is passed.
Some information for this report was provided by AFP, AP and Bloomberg.


text:
Q: Output the difference of totals on columns 3 and 5 in Angular Is there any way I can get the difference of the totals on column 3 and the last column?

Plastic Calculator Form Version 2.0

To date,
        # of people who pledged
        Earthlings have pledged to reduce
           their single-use plastic waste from
          {{ test.approve | sumByColumn: 'amount' }}
           Items per year to
          {{ test.approve | sumByColumn5: 'amount' }}
        .
        That's a reduction of
        {{ test.approve | sumByColumn4: 'reducedTotal' }}
         per year!  Do your part.  Make a pledge!

          Single-Use Plastic Items
          Enter the Number You Use Per Week
          The Number You Use Per Year is:
          How Many Less Can You Use Per Week?
          Your Reduced Usage Per Year Would Be:

           {{ x.name }}
           <input class="qty form-control" type="number"
                      ng-model="x.number" ng-change="sumByColumn3()" min="0"
                      restrict-to="[0-9]"/>

           {{ x.number*x.amount }}
           <input class="qty form-control" type="number"
                      ng-model="x.reducedAmount" ng-change="sumByColumn2()"
                      min="0" restrict-to="[0-9]"/>

           {{ x.reducedAmount*x.reducedTotal }}

          TOTALS
          {{ test.approve | sumByColumn3: 'number' }}
          {{ test.approve | sumByColumn: 'amount' }}
          {{ test.approve | sumByColumn2: 'reducedAmount' }}
          {{ test.approve | sumByColumn4: 'reducedTotal' }}

      <form>

            Name
            <input type="text" class="form-control" id="full-name"
                   placeholder="Enter Full Name">

            Email
            <input type="email" class="form-control" id="email-address"
                   aria-describedby="emailHelp" placeholder="Enter email">

          <button type="submit" class="btn btn-primary" style="margin-top:25px">
            Submit
          </button>

      </form>

Also, is there a way I can make the form cumulate the total in column 3 when the user hits submit? In other words, in the sentence where it says:
single-use plastic waste from

  {{ test.approve | sumByColumn: 'amount' }}
 Items per year

would add up the totals each time a user fills out the form.
Here's the full code - https://codepen.io/tampham/pen/RzqLQV
As for getting the difference, here's what I tried so far.
filter('sumByColumn5', function () {
    return function (collection, column) {
      var total = 0;

      collection.forEach(function (item) {
        total += (item.amount-item.reducedTotal);
      });

      return total;
    };
})

Any suggestions would be much help, thanks!

A: You already have the following lines that calculate the totals of column 3 and 5
{{(test.approve | sumByColumn: 'amount') }}
{{(test.approve | sumByColumn4: 'reducedTotal')}}

I think the the easiest solution for you is to get difference between these two using the follwing.
{{(test.approve | sumByColumn: 'amount') - (test.approve | sumByColumn4: 'reducedTotal')}}

Demo