text:
import {inspect} from 'util';

import {tsSourceMapBug29300Fixed} from '../../src/ngtsc/util/src/ts_source_map_bug_29300';

import {NgtscTestEnvironment} from './env';
import {SegmentMapping, getMappedSegments} from './sourcemap_utils';

describe('template source-mapping', () => {
  let env !: NgtscTestEnvironment;

  beforeEach(() => { env = NgtscTestEnvironment.setup(); });

  describe('Inline templates', () => {
    describe('(element creation)', () => {
      it('should map simple element with content', () => {
        const mappings = compileAndMap('
Heading 1
');
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementStart(0, "h1")', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: 'Heading 1', generated: 'i0.Δtext(1, "Heading 1")', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });

      it('should map void element', () => {
        const mappings = compileAndMap('
');
        expect(mappings).toContain(
            {source: '
', generated: 'i0.Δelement(0, "hr")', sourceUrl: '../test.ts'});
      });
    });

    describe('(interpolations)', () => {
      it('should map a mix of interpolated and static content', () => {
        const mappings = compileAndMap('
Hello {{ name }}
');
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementStart(0, "h3")', sourceUrl: '../test.ts'});
        expect(mappings).toContain({
          source: 'Hello {{ name }}',
          generated: 'i0.ΔtextBinding(1, i0.Δinterpolation1("Hello ", ctx.name, ""))',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });

      it('should map a complex interpolated expression', () => {
        const mappings = compileAndMap('
{{ greeting + " " + name }}
');
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementStart(0, "h2")', sourceUrl: '../test.ts'});
        expect(mappings).toContain({
          source: '{{ greeting + " " + name }}',
          generated:
              'i0.ΔtextBinding(1, i0.Δinterpolation1("", ((ctx.greeting + " ") + ctx.name), ""))',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });

      it('should map interpolated properties', () => {
        const mappings = compileAndMap('

');
        expect(mappings).toContain({
          source: '

',
          generated: 'i0.Δelement(0, "div", _c0)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain({
          source: 'id="{{name}}"',
          generated: 'i0.ΔpropertyInterpolate("id", ctx.name)',
          sourceUrl: '../test.ts'
        });
      });

      it('should map interpolation with pipe', () => {
        const mappings = compileAndMap('
{{200.3 | percent : 2 }}
');
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementStart(0, "div")', sourceUrl: '../test.ts'});
        expect(mappings).toContain({
          source: '{{200.3 | percent : 2 }}',
          generated:
              'i0.ΔtextBinding(1, i0.Δinterpolation1("", i0.ΔpipeBind2(2, 1, 200.3, 2), ""))',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });
    });

    describe('(property bindings)', () => {
      it('should map a simple input binding expression', () => {
        const mappings = compileAndMap('

');
        expect(mappings).toContain({
          source: '

',
          generated: 'i0.Δelement(0, "div", _c0)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain({
          source: '[attr]="name"',
          generated: 'i0.Δproperty("attr", ctx.name)',
          sourceUrl: '../test.ts'
        });
      });

      it('should map a complex input binding expression', () => {
        const mappings = compileAndMap('

');

        expect(mappings).toContain({
          source: '

',
          generated: 'i0.Δelement(0, "div", _c0)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain({
          source: '[attr]="greeting + name"',
          generated: 'i0.Δproperty("attr", (ctx.greeting + ctx.name))',
          sourceUrl: '../test.ts'
        });
      });

      it('should map a longhand input binding expression', () => {
        const mappings = compileAndMap('

');
        expect(mappings).toContain({
          source: '

',
          generated: 'i0.Δelement(0, "div", _c0)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain({
          source: 'bind-attr="name"',
          generated: 'i0.Δproperty("attr", ctx.name)',
          sourceUrl: '../test.ts'
        });
      });

      it('should map a simple output binding expression', () => {
        const mappings = compileAndMap('<button (click)="doSomething()">Do it</button>');
        expect(mappings).toContain({
          source: '<button (click)="doSomething()">',
          generated: 'i0.ΔelementStart(0, "button", _c0)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: 'Do it', generated: 'i0.Δtext(1, "Do it")', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: 'doSomething()', generated: 'ctx.doSomething()', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: '</button>', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });

      it('should map a complex output binding expression', () => {
        const mappings =
            compileAndMap(`<button (click)="items.push('item' + items.length)">Add Item</button>`);
        expect(mappings).toContain({
          source: `<button (click)="items.push('item' + items.length)">`,
          generated: 'i0.ΔelementStart(0, "button", _c0)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: 'Add Item', generated: 'i0.Δtext(1, "Add Item")', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: 'items.push(', generated: 'ctx.items.push((', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: `'item' `, generated: `"item"`, sourceUrl: '../test.ts'});
        expect(mappings).toContain({
          source: '+ items.length)',
          generated: ' + ctx.items.length))',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: '</button>', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });

      it('should map a longhand output binding expression', () => {
        const mappings = compileAndMap('<button on-click="doSomething()">Do it</button>');
        expect(mappings).toContain({
          source: '<button on-click="doSomething()">',
          generated: 'i0.ΔelementStart(0, "button", _c0)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: 'Do it', generated: 'i0.Δtext(1, "Do it")', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: 'doSomething()', generated: 'ctx.doSomething()', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: '</button>', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });

      it('should map a two-way binding expression', () => {
        const mappings = compileAndMap('Name: <input [(ngModel)]="name">');
        expect(mappings).toContain({
          source: '<input [(ngModel)]="name">',
          generated: 'i0.ΔelementStart(1, "input", _c0)',
          sourceUrl: '../test.ts'
        });
        // TODO: improve mappings here
        expect(mappings).toContain({
          source: '[(ngModel)]="name"',
          generated:
              'i0.Δlistener("ngModelChange", function TestCmp_Template_input_ngModelChange_1_listener($event) { return ctx.name = $event; })',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain({
          source: '<input [(ngModel)]="name">',
          generated: 'i0.ΔelementEnd()',
          sourceUrl: '../test.ts'
        });
      });

      it('should map a longhand two-way binding expression', () => {
        const mappings = compileAndMap('Name: <input bindon-ngModel="name">');
        expect(mappings).toContain({
          source: '<input bindon-ngModel="name">',
          generated: 'i0.ΔelementStart(1, "input", _c0)',
          sourceUrl: '../test.ts'
        });
        // TODO: improve mappings here
        expect(mappings).toContain({
          source: 'bindon-ngModel="name"',
          generated:
              'i0.Δlistener("ngModelChange", function TestCmp_Template_input_ngModelChange_1_listener($event) { return ctx.name = $event; })',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain({
          source: '<input bindon-ngModel="name">',
          generated: 'i0.ΔelementEnd()',
          sourceUrl: '../test.ts'
        });
      });

      it('should map a class input binding', () => {
        const mappings = compileAndMap('
Message
');
        expect(mappings).toContain({
          source: '
',
          generated: 'i0.ΔelementStart(0, "div")',
          sourceUrl: '../test.ts'
        });

        // TODO: Add better mappings for binding

        expect(mappings).toContain(
            {source: 'Message', generated: 'i0.Δtext(1, "Message")', sourceUrl: '../test.ts'});

        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });
    });

    describe('(structural directives)', () => {
      it('should map *ngIf scenario', () => {
        const mappings = compileAndMap('
{{ name }}
');

        expect(mappings).toContain({
          source: '
',
          generated: 'i0.ΔelementStart(0, "div")',
          sourceUrl: '../test.ts'
        });

        // TODO - map the bindings better

        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});

        // TODO: the `ctx_r...` appears to be dependent upon previous tests!!!

        // expect(mappings).toContain({
        //   source: '{{ name }}',
        //   generated: 'i0.ΔtextBinding(1, i0.Δinterpolation1("", ctx_r0.name, ""))',
        //   sourceUrl: '../test.ts'
        // });
      });

      it('should map ng-template [ngIf] scenario', () => {
        const mappings = compileAndMap(
            `<ng-template [ngIf]="showMessage()">\n` +
            `  <div>{{ name }}</div>\n` +
            `  <hr>\n` +
            `</ng-template>`);

        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementStart(0, "div")', sourceUrl: '../test.ts'});

        // TODO - map the bindings better

        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});

        // TODO: the `ctx_r...` appears to be dependent upon previous tests!!!

        // expect(mappings).toContain({
        //   source: '{{ name }}',
        //   generated: 'i0.ΔtextBinding(1, i0.Δinterpolation1("", ctx_r0.name, ""))',
        //   sourceUrl: '../test.ts'
        // });
      });

      it('should map *ngFor scenario', () => {
        const mappings = compileAndMap(
            '
{{ item }}
');

        expect(mappings).toContain({
          source: '
',
          generated: 'i0.ΔelementStart(0, "div")',
          sourceUrl: '../test.ts'
        });

        // TODO - map the bindings better

        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});

      });

      it('should map ng-template [ngFor] scenario', () => {
        const mappings =
            compileAndMap(`<ng-template ngFor [ngForOf]="items" let-item>{{ item }}</ng-template>`);

        // TODO - map the bindings better
      });
    });

    describe('(content projection)', () => {
      it('should map default and selected projection', () => {
        const mappings = compileAndMap(
            `<h3><ng-content select="title"></ng-content></h3>\n` +
            `<div><ng-content></ng-content></div>`);

        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementStart(0, "h3")', sourceUrl: '../test.ts'});
        expect(mappings).toContain({
          source: '<ng-content select="title">',
          generated: 'i0.Δprojection(1, 1)',
          sourceUrl: '../test.ts'
        });
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementStart(2, "div")', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: '<ng-content>', generated: 'i0.Δprojection(3)', sourceUrl: '../test.ts'});
        expect(mappings).toContain(
            {source: '
', generated: 'i0.ΔelementEnd()', sourceUrl: '../test.ts'});
      });
    });

    it('should create (simple string) inline template source-mapping', () => {
      const mappings = compileAndMap('
this is a test

{{ 1 + 2 }}
');

      // Creation mode
      expect(mappings).toContain(
          {generated: 'i0.ΔelementStart(0, "div")', source: '
', sourceUrl: '../test.ts'});
      expect(mappings).toContain({
        generated: 'i0.Δtext(1, "this is a test")',
        source: 'this is a test',
        sourceUrl: '../test.ts'
      });
      expect(mappings).toContain(
          {generated: 'i0.ΔelementEnd()', source: '
', sourceUrl: '../test.ts'});
      expect(mappings).toContain(
          {generated: 'i0.ΔelementStart(2, "div")', source: '
', sourceUrl: '../test.ts'});
      expect(mappings).toContain(
          {generated: 'i0.Δtext(3)', source: '{{ 1 + 2 }}', sourceUrl: '../test.ts'});
      expect(mappings).toContain(
          {generated: 'i0.ΔelementEnd()', source: '
', sourceUrl: '../test.ts'});

      // Update mode
      expect(mappings).toContain({
        generated: 'i0.ΔtextBinding(3, i0.Δinterpolation1("", (1 + 2), ""))',
        source: '{{ 1 + 2 }}',
        sourceUrl: '../test.ts'
      });
    });

    it('should create (simple backtick string) inline template source-mapping', () => {
      const mappings = compileAndMap('
this is a test

{{ 1 + 2 }}
');

      // Creation mode
      expect(mappings).toContain(
          {generated: 'i0.ΔelementStart(0, "div")', source: '
', sourceUrl: '../test.ts'});
      expect(mappings).toContain({
        generated: 'i0.Δtext(1, "this is a test")',
        source: 'this is a test',
        sourceUrl: '../test.ts'
      });
      expect(mappings).toContain(
          {generated: 'i0.ΔelementEnd()', source: '
', sourceUrl: '../test.ts'});
      expect(mappings).toContain(
          {generated: 'i0.ΔelementStart(2, "div")', source: '
', sourceUrl: '../test.ts'});
      expect(mappings).toContain(
          {generated: 'i0.Δtext(3)', source: '{{ 1 + 2 }}', sourceUrl: '../test.ts'});
      expect(mappings).toContain(
          {generated: 'i0.ΔelementEnd()', source: '
', sourceUrl: '../test.ts'});

      // Update mode
      expect(mappings).toContain({
        generated: 'i0.ΔtextBinding(3, i0.Δinterpolation1("", (1 + 2), ""))',
        source: '{{ 1 + 2 }}',
        sourceUrl: '../test.ts'
      });
    });

    it('should create correct inline template source-mapping when the source contains escape sequences',
       () => {
         // Note that the escaped double quotes, which need un-escaping to be parsed correctly.
         const mappings = compileAndMap('
this is a test
');

         expect(mappings).toContain({
           generated: 'i0.ΔelementStart(0, "div", _c0)',
           source: '
',
           sourceUrl: '../test.ts'
         });

         const c2Mapping =
             mappings.find(mapping => /var _c0 = \[1, "some-class"\];/.test(mapping.generated));
         expect(c2Mapping).toBeDefined();
       });
  });

  if (tsSourceMapBug29300Fixed()) {
    describe('External templates (where TS supports source-mapping)', () => {
      it('should create external template source-mapping', () => {
        const mappings =
            compileAndMap('
this is a test

{{ 1 + 2 }}
', './dir/test.html');

        // Creation mode
        expect(mappings).toContain({
          generated: 'i0.ΔelementStart(0, "div")',
          source: '
',
          sourceUrl: '../dir/test.html'
        });
        expect(mappings).toContain({
          generated: 'i0.Δtext(1, "this is a test")',
          source: 'this is a test',
          sourceUrl: '../dir/test.html'
        });
        expect(mappings).toContain(
            {generated: 'i0.ΔelementEnd()', source: '
', sourceUrl: '../dir/test.html'});
        expect(mappings).toContain({
          generated: 'i0.ΔelementStart(2, "div")',
          source: '
',
          sourceUrl: '../dir/test.html'
        });
        expect(mappings).toContain(
            {generated: 'i0.Δtext(3)', source: '{{ 1 + 2 }}', sourceUrl: '../dir/test.html'});
        expect(mappings).toContain(
            {generated: 'i0.ΔelementEnd()', source: '
', sourceUrl: '../dir/test.html'});

        // Update mode
        expect(mappings).toContain({
          generated: 'i0.ΔtextBinding(3, i0.Δinterpolation1("", (1 + 2), ""))',
          source: '{{ 1 + 2 }}',
          sourceUrl: '../dir/test.html'
        });
      });

      it('should create correct mappings when templateUrl is in a different rootDir', () => {
        const mappings = compileAndMap(
            '
this is a test

{{ 1 + 2 }}
', 'extraRootDir/test.html');

        // Creation mode
        expect(mappings).toContain({
          generated: 'i0.ΔelementStart(0, "div")',
          source: '
',
          sourceUrl: '../extraRootDir/test.html'
        });
        expect(mappings).toContain({
          generated: 'i0.Δtext(1, "this is a test")',
          source: 'this is a test',
          sourceUrl: '../extraRootDir/test.html'
        });
        expect(mappings).toContain({
          generated: 'i0.ΔelementEnd()',
          source: '
',
          sourceUrl: '../extraRootDir/test.html'
        });
        expect(mappings).toContain({
          generated: 'i0.ΔelementStart(2, "div")',
          source: '
',
          sourceUrl: '../extraRootDir/test.html'
        });
        expect(mappings).toContain({
          generated: 'i0.Δtext(3)',
          source: '{{ 1 + 2 }}',
          sourceUrl: '../extraRootDir/test.html'
        });
        expect(mappings).toContain({
          generated: 'i0.ΔelementEnd()',
          source: '
',
          sourceUrl: '../extraRootDir/test.html'
        });

        // Update mode
        expect(mappings).toContain({
          generated: 'i0.ΔtextBinding(3, i0.Δinterpolation1("", (1 + 2), ""))',
          source: '{{ 1 + 2 }}',
          sourceUrl: '../extraRootDir/test.html'
        });
      });
    });
  }

  function compileAndMap(template: string, templateUrl: string | null = null) {
    const templateConfig = templateUrl ? `templateUrl: '${templateUrl}'` :
                                         ('template: `' + template.replace(/`/g, '\\`') + '`');
    env.tsconfig({sourceMap: true});
    env.write('test.ts', `
        import {Component} from '@angular/core';

        @Component({
          selector: 'test-cmp',
          ${templateConfig}
        })
        export class TestCmp {}
    `);
    if (templateUrl) {
      env.write(templateUrl, template);
    }
    env.driveMain();
    return getMappedSegments(env, 'test.js');
  }

  /**
   * Helper function for debugging failed mappings.
   * This lays out the segment mappings in the console to make it easier to compare.
   */
  function dumpMappings(mappings: SegmentMapping[]) {
    mappings.forEach(map => {
      // tslint:disable-next-line:no-console
      console.log(
          padValue(map.sourceUrl, 20, 0) + ' : ' + padValue(inspect(map.source), 100, 23) + ' : ' +
          inspect(map.generated));
    });
    function padValue(value: string, max: number, start: number) {
      const padding = value.length > max ? ('\n' +
                                            ' '.repeat(max + start)) :
                                           ' '.repeat(max - value.length);
      return value + padding;
    }
  }
});

redpajama_set_name: RedPajamaGithub


text:
Q: Call a method after __construct in finished Basically I have a method which I need to run when the constructor is finished (the method is called persist() and it simply saves a key which was generated during the constructor into the session). It seems simple enough, and it works - at the end of __construct I make the call to $this->persist().
The problem is that this class is subclassed many times. This causes two issues.
One, that I must remember to make the call to persist() at the end of every single subclass's __construct method. Not a huge issue but it doesn't feel very OOP, I feel like I could be dealing with this in the parent class some how and that this would be better.
Two, if a subclass is subclassed (which it is), and the __construct methods chained (i.e. parent::__construct called), the persist() method will be getting fired multiple times, once for each time the class has been subclassed. It only needs to be called once, when all construction is complete. In this scenario it doesn't really break anything because when the persist method is called for the 2nd, 3rd time etc., it simply overwrites what was persisted before. But that isn't the point, because I just feel like there must be a better way and that there are scenarios out there that would not allow for the method to be called multiple times.
Is a factory method which constructs the object and then makes the call to persist on it the only way? I can go down this route but I am just wondering if there is a way to do it without, so that the method from the parent is always called after construction.
Here is some example code:
session_start();
is(!isset($_SESSION["Component"])) $_SESSION["Component"] = [];

abstract Class Component
{
    private $id;
    protected $key;

    function __construct($id = NULL)
    {
        $this->id = $id;
        $this->key = [];
        $this->key["something"] = "SomeValue";
        $this->persist(); // First call
    }

    protected function persist()
    {
        if($this->id !== NULL) $_SESSION["Component"][$this->id] = $this->key;
    }
}

Class SomeComponent extends Component
{
    function __construct($id = NULL)
    {
        parent::__construct($id);
        $this->key["something-else"] = "SomeOtherValue";
        $this->persist(); // Second call
    }
}

Class SomeSpecialistComponent extends SomeComponent
{
    function __construct($id = NULL, $key = [])
    {
        parent::__construct($id);
        $this->key = array_merge($this->key, $key);
        $this->persist(); // Third call
    }
}

$my_component = new SomeSpecialistComponent(1, ["example" => true]);

A: Only trick I found to get something similar (except I wanted to execute things before and not after) is using a parent class with an abstract method as a new constructor :
abstract class RequireThings {

    public function __construct() {
        $this->constructAndPersist();
        $this->persist();
    }

    abstract function constructAndPersist();

    // You could also set this function in your children classes by the way.
    public function persist() {
        echo ' Then I persist!';
    }

}

class UsingPersist extends RequireThings {

    public function constructAndPersist() {
        echo 'I do my things first.';
    }

}

$class = new UsingPersist();

Would output :
I do my things first. Then I persist!
If I got your problem right, it should be enough to avoid problems you are facing.
The main downside of this solution is that you have to use a new function which is supposed to be your new constructor for this type of classes. That's why I set the __constructPersist as  abstract, it forces the behavior as wanted.

A: I would argue in favor of the factory method, mostly because you're doing real work in the constructor.  Remove the call where work is being done in the constructors ($this->persist) and place it in the factory:
class ComponentFactory
{
    const SOME_COMPONENT = 'component';
    const SOME_SPECIALIST_COMPONENT = 'specialist_component';

    public static function make($type, $id, $key = null)
    {
        switch($type) {
            case self::SOME_COMPONENT:
                $component = new SomeComponent($id);
                break;
            case self::SOME_SPECIALIST_COMPONENT:
                $component = new SomeSpecialistComponent($id, $key);
                break;
        }

        $component->persist();
        return $component;
    }
}

$component = ComponentFactory::make(ComponentFactory::SOME_COMPONENT, 42);
$specialist = ComponentFactory::make(
    ComponentFactory::SOME_SPECIALIST_COMPONENT,
    43,
    [
        'something' => 'SomeValue',
        'something-else' => 'SomeOtherValue',
    ]
);

According to Miško Hevery (author of AngularJS and agile coach at Google) these are the warning signs of doing too much work in the constructor:

*

*new keyword in a constructor or at field declaration

*Static method calls in a constructor or at field declaration

*Anything more than field assignment in constructors

*Object not fully initialized after the constructor finishes (watch
  out for initialize methods)

*Control flow (conditional or looping logic) in a constructor

*CL does complex object graph construction inside a constructor
  rather than using a factory or builder

*Adding or using an initialization block

A: just create another function that you'll call before $this->persist and override that in your subclasses instead of the constructor

redpajama_set_name: RedPajamaStackExchange


text:
Wall Street Journal Versus Germany, Science and Common Sense
Germans, who invented environmentalism in the early 1800's are simply recognizing the current evidence: Roundup causes cancer.
Wall Street Journal spins this for their cronies, changing the subject from Roundup to GMO seeds, as if there were a difference. It also says the regulatory rubber-stamping of destructive agribusiness practices proves "good science", and the export of monopoly agribusiness practices reflects "free-markets" and "free-trade".
NOTE: post originally appeared on WSJ.com August 27, 2015
Berlin threatens a U.S.-Europe trade pact by rejecting GMO food.
So much for Europe's efforts to put the junk science surrounding genetically modified (GMO) food to rest. Berlin last week signaled it will prohibit cultivation of GMO crops in Germany, even if the crops have been approved by EU scientific bodies and despite an attempt by Brussels to legalize them.
Berlin is using an opt-out option granted by the EU to member states in April. European Commission President Jean-Claude Juncker moved to keep GMO foods generally legal in the EU, but he bowed to green pressure to allow individual states to prohibit EU-approved GMOs in response to concerns that "are usually not based on science but on other considerations." That means politically driven consumer opposition or agricultural protectionism.
Sure enough, neither environmentalists nor German politicians have come up with a justification for Berlin's looming ban other than, well, because. Supporters cheer the move as an expression of "food democracy" in a country where opposition to GMOs is widespread and the government faced intense pressure to ban them.
Since a scientific basis for such a ban doesn't exist, organizations such as Friends of the Earth Germany now resort to promoting "organic" food as an alternative to GMO crops that they say increase pesticide use and endanger human health. As a Friends of the Earth director told the website Common Dreams, Berlin's ban promotes "sustainable, resilient organic food production that doesn't perpetuate the overuse of toxic herbicides."
Back in reality, EU scientific and food-safety authorities have repeatedly cleared various GMO crops for human and animal consumption. The process often takes months to complete, and in 95% of cases EU regulators ask producers for more evidence before greenlighting GMOs, so it's hardly a rubber stamp.
This would merely be so much environmental backwardness, except that the opt-out rule makes negotiating the Transatlantic Trade and Investment Partnership with America that much more difficult. Once concluded, the U.S.-Europe trade pact would generate an estimated €120 billion in European gross domestic product, but American agricultural producers might rightly be wary of a GMO regulatory patchwork across the Continent. If Europeans miss out on the jobs, growth and cheaper products that come with free trade, they'll have the green lobby to blame.
The Rest of the Story:
When the agrochemical companies acquired the seed companies, something prohibited by antitrust law, their promise was that if the rules were relaxed, drought-resistant cereals and insect-resistant fruit would result from the capital and research strength of the acquiring agrochemical giants. This was bait and switch: GMO research has turned out to be mostly a driver for agrochemical poison sales.
Glyphosate (Roundup) was invented as an industrial de-scalent which removed rust and minerals from steam vessels. It was later discovered to be toxic to plants. Eventually, Monsanto acquired the patents and developed it as a broad-based herbicide, and, patented it as an antibiotic.
Today most crops grown from GMO seeds require the application of Roundup at least twice while being grown, and often a third time as a desiccant to cause defoliation which makes seed harvesting more "efficient". Most of our food, and other crops like cotton, are now being grown with the integrated use of Roundup and other deadly poisons. The latest addition is 2, 4-D, a primary component of Agent Orange which was responsible for 2 million birth defects in Vietnam. 60,000 Americans Vets get disability payments and 70,000 more have claims pending from exposure to this chemical, the use of which EPA-FDA has approved without testing.
There is abundant, mounting evidence on the residual effects of glysophate in food, soil and water, including that Roundup causes cancer. That is why the Europeans don't want it.It is dishonest to maintain that GMOs are wholesome while disregarding the poisoning of croplands and consumers by the chemicals required to grow GMO crops. As when the tobacco companies and the media that ran their ads insisted smoking was safe long after they knew better, Wall Street Journal says that GMO food is harmless, averting its eyes from the health hazards of chemicals associated with GMOs.
And, the Journal also ignores the social and economic damage being done to farmers and ranchers by the agribusiness monopolies, and the harm done to the Third World by dumping subsidized GMO feed at prices below their cost of production, thereby undermining pastoral and agrarian communities.
As a subsidiary of a media giant, the Journal defends corporate concentrations. The neocons – former liberals now camouflaged in pinstripes – dignify their anti-free market and anti-scientific actions with rhetoric laced with empirically hollow "free market" and "scientific" buzzwords. Like all statists from the so-called left or the right, they like and trust "Big". So, if the monopolies, or their government counterparts like FDA or EPA say GMOs are safe, they sincerely believe it must be true.
Beavers in Arizona Deserts
December 8, 2022 Chris Gill
Book Review: Man, Cattle and Veld by Johann Zietsman

redpajama_set_name: RedPajamaCommonCrawl


I dropped into this sale on the way to buy groceries. The driveway was pretty packed - never a good sign for deals on a Sunday. Sure enough, everything priced was overpriced. I asked about these next two and was pleasantly surprised.
I bought this game when it was new for $50 and it looks like eBay will still ask $18ish for it. This one is for my niece though.
Remember those seeds from a week ago? I think a red begonia surrounded by white cascading flowes would be lovely!
I planted a seed in one of my pots last week but darned if I remember wether its a sunflower or a pumpkin! Anything planted in the ground was pulled up by pesky squirrels and rabbits so I resorted to this elevated pot. I think its a sunflower.
Here are the begonias I mentioned before chilling on our stoop. I'd waterred them, then moved them so they're rather muddy. The next waterring will handle that - its the great outdoors after all!
Apparently they like excessive sun and not being waterred. Done and done. Those lovely white pots I bought last year don't have drainage holes (drats) and retain heat so the begonias love them.


text:
Meet Peter
Peter's Record
S E R V I N G T A X P A Y E R S P R O T E C T I N G F A M I L I E S S A V I N G M O N E Y PETER FRANCHOT, MARYLAND'S COMPTROLLER
Comptroller Peter Franchot
They just don't get it – and they never will, so it seems.
As much as the intrepid Jake Weissmann, the formidable Alex...
A Miner Detail: The 2019 Annapolis Session Winners and Losers [EXCERPT]
WBOC 16: Md. Comptroller Berates Wicomico Co. Executive, Claims 'Economic Sabotage' of National Folk Festival
SALISBURY, Md.- The Maryland Comptroller's Office is claiming Wicomico County Executive Bob Culver attempted "economic sabotage" to the National Folk Festival a mere two weeks before it was to take place.
It began with an Aug. 27 letter that Culver, a Republican, sent to Maryland Senate President Thomas V. Mike Miller. In the letter, Culver said his appointed local Board of License Commissioners were not consulted at all about beer and wine licenses for the folk festival, and claimed what the comptroller of Maryland did was illegal.
But in a five-page letter to Culver dated Sept. 13, Len Foxwell, a Democrat and the Maryland comptroller's chief of staff, said the comptroller's office was not made aware of Culver's "surreptitious" letter to Miller. Foxwell said the idea of those licenses being illegal is simply not true.
"If you will indulge my personal observation, I would suggest that, rather than engaging in mock outrage that the comptroller acted without the blessing of your political cronies, you should be personally embarrassed that we needed to be called in the first place," Foxwell wrote Culver.
Foxwell added, "At no point have I seen a chief executive of a local government conduct official business in such an unprofessional manner."
Foxwell also made note of the letter's timing, shortly before 150,000 people came to Salisbury for the National Folk Festival, which was held Sept. 6-8.
"To send a letter of this nature less than two weeks before the festival, with the willingness and intent to severely disrupt what so many people had worked so hard to build, is nothing less than a gesture of economic sabotage against those very people who have trusted in your leadership," Foxwell wrote.
However, Culver said this was not about the National Folk Festival. He said that instead, it was about being fair to all alcohol licenses.
"What's to stop any other place from letting people walk around outside with alcohol?" Culver told WBOC. "What Peter Franchot did was issue a festival license for what are supposed to be nonprofit Maryland beer and wine festivals. This was not that."
Salisbury Area Chamber of Commerce CEO Bill Chambers was copied on Foxwell's letter. Chambers said actions like this tend to bring negative attention to a growing Salisbury economy. In a statement to WBOC, Chambers said, "We need to move forward as a community when it comes to the growth of business in Salisbury, not stifle it."
Culver told WBOC he will speak publicly on Monday about this conflict, adding there is much more to his story.
Click here to read letters:
http://www.wboc.com/story/41046550/md-comptroller-berates-wico-executive-claims-economic-sabotage-of-national-folk-festival
The exchange opened questions of the executive's intentions regarding the festival that projected about $20 million in total impact for area economy in 2018 and brought more than 150,000 attendees to Salisbury this year.
According to a graphic released after the event, more than half of gross sales from National Folk Festival came from beer and wine sales this year.
It also highlights a trend of animosity apparent between the city and county levels of government — from lawsuits to independent firefighters and now alcohol permits.
State Delegate Carl Anderton, R-38B Wicomico, for one was in shock on Friday that this dialogue happened.
"I'm blown away by it," the Republican lawmaker said with a pause. "It's just more of the same petty political stuff. ... Imagine if it had worked and those permits were lost? If that part's gone — it would have been catastrophic."
But Culver said people are jumping to conclusions on his intentions.
"We were not trying to stop the festival," the executive said in a news conference Monday afternoon. "I never asked to shut the festival down or tried to put a stop to it."
Issues brewing with alcohol permits
Roughly two weeks before the festival, Culver sent his letter to the Democrat Senate president asserting Comptroller Peter Franchot broke the law in granting the alcohol licenses — also citing concern the local Board of License Commissioners in Wicomico County was "totally circumvented."
Culver said the licenses were in violation of Maryland's Article 2B, not being a nonprofit beer or wine festival to specifically promote Maryland products, and that areas where alcohol could be served should have been limited to "confined areas" to ensure public safety.
Salisbury Mayor Jake Day said the event, hosted by the 501(c)(3) nonprofit National Council for the Traditional Arts, went through appropriate channels to obtain the permits — a process independent of the county's board.
Get the Storm Watch newsletter in your inbox.
Latest news updates during the emergency.
The mayor also said the weekend saw no alcohol related incidents or violations.
The Maryland Code's Alcoholic Beverages section 1-304, referenced by the comptroller's office, states "the Comptroller may delegate authority under this article and provisions of the Tax — General Article relating to alcoholic beverages to the Division Director to issue or refuse to issue licenses and permits."
Franchot approved this year's licenses, just as he did a year before.
For Culver, this isn't the first time he expressed issue with the licensing.
He said letters as well as phone calls were directed to the comptroller's office in 2018, where the board echoed similar complaints of legality.
The comptroller's office said it responded in 2018 to Culver's inquiry, stating the staff "worked to address each of (his) concerns."
The executive said he decided this year to reach out to "the next highest elected official that could possibly help," though it's not clear what the senate president could have done to affect the situation
Culver said he hoped and still hopes to sit down with Franchot and discuss the permitting, and he repeated multiple times in the conference Monday he had no intention of bringing the festival to a halt.
A dialogue should have started following reaching out to the comptroller in 2018, according to Wayne Strausburg, director of administration in the county executive's office.
"We've had a year since then," he said. "That never happened. I've said this before on other issues. We're better than this. And if we're not, we should be."
Speaking on behalf of the comptroller's office, chief of staff Len Foxwell sent a response to the executive Friday.
"In this letter — which was forwarded to our office at our request on Sept. 12 — you expressed specific displeasure with the nonprofit beer and wine festival permits," Foxwell wrote.
"Given that you raised the issue in your private correspondence with Senate President Miller, allow me to respond to your charge that we 'circumvented' the Board of License Commissioners," he continued. "Like you, we were quite surprised that the Comptroller of Maryland was called upon to exercise our lawful duties in the first place."
Knowing the magnitude of the festival and its economic impact "cannot be overstated," Foxwell said his office took great care in reviewing the city's applications, including a site visit by senior officials to the grounds.
The county maintains its own board for approving such licenses — Culver's own aide A. Kaye Kenney a chairwoman — yet both years the city applied with the Comptroller's office for the necessary permits.
Day said rumors had been circling that permits for the festival in 2018 might be blocked, so the call was made to approach it through the comptroller.
The mayor also said applications are filed with the comptroller for Friday events each month in the city, as well as the Autumn Wine Festival, which is under Wicomico County jurisdiction, without issue.
"We serve beer and wine every month," Day said. "Why didn't he oppose?"
Richard Duvall, attorney for the state-appointed Wicomico County Board of License Commissioners, said these licenses are different than what the comptroller issued for the festival.
Duvall said the permit issued was intended for a nonprofit event "where the primary purpose of the sale of the alcohol is the promotion of Maryland, either wine or beer."
Day touched on that idea before the news conference, noting brands like Evo Lot 3 among other local names were featured at the festival.
Amid differing interpretations of recent events, the letters sparked assumptions across Facebook and other platforms — as many thought the goal was sinister.
"To send a letter of this nature less than two weeks before the Festival ..." Foxwell wrote, "is nothing less than a gesture of economic sabotage against those very
people who have trusted in your leadership."
An apparent trend in animosity
In one way or another, it seems Salisbury and Wicomico County have never particularly gotten along.
Day said he knew coming into his role as mayor there had been "decades of tension between city and county."
Anderton said it's an "unhidden fact" the senate president and comptroller Franchot do not get along, and he said the Day-Culver relationship isn't much different.
And it comes at both sides.
The city and the county executive have been found at odds on multiple subjects — such as the splitting of volunteer fire Station 13 in 2017 and the territory it would inhabit, city-county tax bills, as well as independent projects such as marathons or the National Folk Festival.
In spring 2018, Wicomico County sued its neighbors in the Government Office Building over an air conditioning system.
The differences pre-dated Day or Culver's elections, and as city and county administration were set to meet and discuss the bill, the county executive moved to seek $354,673 from the city via Wicomico County Circuit Court, as previously reported by Delmarva Now.
Day and Culver have agreed on some subjects, though, eventually coming to a long-needed Fire Services Agreement in 2017 as well as other initiatives.
"I have no problem with Jake," Culver said, having been out-and-about festival weekend this year. "I have no problem with the festival. ... As far as Jake's enthusiasm and drive for improving Salisbury — I'm all for it."
But as the mayor sees it, the latest instance exceeds the trend.
"So is it all connected to sort of that pattern of county-city?" Day said. "You know, I don't think it's connected because if you look ... it's an anomaly, right? It is a disproportionate response."
The future of alcohol sale at Folk Fest
Culver hopes change can come to the permitting process.
"We need to come together," he said.
Anderton expressed concern with bad precedent.
"Human pride is a fragile thing," he said, hoping the executive's letter doesn't cause future problems for the county. "It can be your natural instinct to hold a grudge."
Just a few hundred feet down the hall from each other, the question remains as to whether the city will now approach the comptroller earlier or apply through the county board come next summer.
"If the concern is public safety, look no further than the event having no public safety incidents, no alcohol violations, no violations of the state permits," Day said, defending the festival. "I mean, don't those things matter? Doesn't that evidence matter?"
Salisbury is set to host the festival for one more year, and then the city looks to continue hosting its own take on the national festival as the years continue.
"It's not something I am going to waste much time thinking about, you know, as I lay my head in bed," Day said of Culver's assertions. "I will go about doing all the other things that we have to do."
https://www.delmarvanow.com/story/news/local/maryland/2019/09/16/national-folk-festival-part-wicomico-salisbury-feud-bob-culver-jake-day-peter-franchot-mike-miller/2339978001/
MyEasternShore.com: Franchot calls for halt to bridge project
The Daily Record: Franchot calls on Hogan to speed up compensation plan for exonerees
Washington Post: Maryland transportation chief apologizes for hours-long backups at Bay Bridge
Maryland Matters: Revenue Estimates Tick Up for Current Fiscal Year
WJZ 13 CBS: Post-Labor Day School Start Adds Millions To Economy, Study Says
The Baltimore Sun: Franchot did a cool job lobbying for millions in state spending on temporary school air conditioning
The Enquirer Gazette Spotlight: Illegal tax preparer sentenced on three counts


The survey also revealed that 40 per cent of respondents feel their accommodation to be of satisfactory value, while only 10 per cent believed their accommodation to be either "quite or very good value for money," showing that the majority of students are underwhelmed with their living quarters and the price of rent.
This poll comes after the demolition of far less expensive accommodation (less than £100 a week compared to current average of over £130), such as Roberts Way and Butler Hall. The demolition of the less expensive accommodation has resulted in the lowest cost of on-campus accommodation currently being Telford Court, which currently costs over £5,250 for an academic year.
Research conducted by Trident Media has also revealed that the average rent costs for on-campus accommodation is over £6,000 for an entire renting period (including deposit).
The same research also concluded that a student from an average two-in-work parent background (£40,000 to £45,000 household income per year) pays at least 100 per cent of their maintenance loan towards rent and deposit to pay for the average cost of a room.
Trident Media approached the University of Hertfordshire but, at the time of publication, they did not make comment.
Hertfordshire Students' Union are currently running their Campus Costs campaign, which is targeted at reducing the student costs on campus, including accommodation costs.
Many students are clearly unhappy with how much they have to pay for their rent, Hertfordshire Students' Union has recognised this by launching their Campus Costs campaign to act as a voice for students struggling with the cost of university living.


On Saturday 1st October 2011 a group of DDAS members were treated to a private viewing of a copy of John Flamsteed's Atlas Coelestis at the Derby Museum and Art Gallery. Sir John Flamsteed was England's first Astronomer Royal and was born in Denby, Derbyshire and attended Derby School. He eventually went to Jesus College in Cambridge but his knowledge of astronomy was gained through his own studies rather than any formal training. In 1675 he was invited by Charles II to be 'The King's Astronomical Observator'. A year later the Royal Observatory in Greenwich was founded and it was from there that Flamsteed compiled a catalogue of over 3000 star positions and magnitudes. The Atlas Coelestis is based on this catalogue and was published posthumously in 1729. The Derby Museum holds a copy of the second edition of Atlas Coelestis, published in 1753.
The DDAS was invited by Jane Hardstaff from Derby Museum and Art Gallery in recognition of our involvement in their 'Astronomical: The Beauty of a Thousand Stars' exhibition, which opened on 3rd September 2011. The Society provided information for a timeline of discoveries and developments in astronomy since the invention of the telescope and a short piece on Flamsteed, his work as the first Astronomer Royal at Greenwich and how his Atlas Coelestis came about. The exhibition also has some details on the DDAS, our meeting programme and a brief history of our own Flamsteed Observatory. It runs until April 2012.
Here is a selection of some of the pages and constellations seen in the Atlas. Photographs taken by Mike Lancaster with kind permission of Derby Museum.
Derby Museum conservator Matt Edwards prepares to turn the pages of the Atlas for us.
The title pages of the Atlas with a portrait of Johannes Flamsteedius Derbiensis.
The dedication. The Atlas was published posthumously by Flamsteed's widow Margaret and James Hodgson.
Aries, the Ram. Interestingly this appears first in the Atlas, and as the Ram is a symbol of the city of Derby through the legend of the Derby Ram one wonders if this is not a coincidence? A more likely explanation is that this page of the Atlas contains the First Point of Aries (actually in Pisces), which defines the zero point for Right Ascension (the celestial equivalent of longitude).
The Atlas contains a few 'obsolete' constellations which are no longer recognised by the world body of astronomy, the International Astronomical Union (IAU). The 88 modern and officially recognised constellations and their boundaries were ratified by the IAU in 1922. One such example of a former constellation is Antinous. This was created by the Roman Emperor Hadrian in 132 AD in memory of a beautiful youth who legend has it perished while saving Hadrian from drowning in the Nile. Antinous lies just below Aquila the Eagle, and is in fact being carried in the talons of the celestial bird. The stars that made up Antinous are now part of Aquila.
Another obsolete constellation is Anser, The Goose. Here we can see that Vulpecula, The Fox, is carrying off Anser in its jaws. Today the stars of Anser are now part of Vulpecula but the brightest star in The Fox, Alpha Vulpeculae, has retained the name Anser. Note also the small constellation of Sagitta, the Arrow, whizzing by below Vulpecula.
Canis Major, The Great Dog. Note the spelling of Sirius as Syrius. One wonders if the face of Canis Major seen here is actually a caricature of someone?
Hydra, The Sea Serpent, accompanied by Corvus, The Crow, Crater, The Cup and Sextans, The Sextant.
The familiar stars of The Plough are a little hard to make out in this depiction of Ursa Major, The Great Bear. Note the Hunting Dogs of Canes Venatici at the heel of Ursa Major.
Ophiucus, The Serpent Bearer, carries Serpens, The Serpent in his arms.
The last plate in the Atlas shows the constellations of the southern hemisphere.
DDAS members view the Atlas.
DDAS members with the Atlas Coelestis.


The DraftAngleAnalysis command visually evaluates surface draft-angle using false-color analysis.
Draft angle is often used to design injection-molded parts that must eject from molds.
In the Draft Angle dialog box, set the angle for the color display.
Adjust the density of the mesh if the level of detail is not fine enough.
The draft angle depends on the z-axis direction of the construction plane that is in the active viewport when the command starts.
If the surface direction (Dir) is the same direction as the construction plane z-direction, the draft angle is 90 degrees.
If the surface direction (Dir) is perpendicular to the construction plane z-direction, the draft angle is 0 degrees.
If the surface direction (Dir) is the opposite to the construction plane z-direction, the draft angle is ‑90 degrees.
If you set the minimum and maximum angle to the same value, all portions of the surface that exceed the angle will be red.
Change the construction plane before using DraftAngleAnalysis to define any direction as the reference direction.
The DraftAngleAnalysisOff command turns off draft angle analysis.
The DraftAnglePoint command places a point object at a surface's draft angle break location.
Select a surface near the draft point, and press Enter.
One way to find locations on the surface close to the desired draft angle is to turn on DraftAngleAnlaysis. Set the upper and lower limits to bracket the desired angle closely. For example, if the angle is 5, set the limits to 4.9 and 5.1.
Use a dense analysis mesh. Points can then be picked along the strip dividing the red from the blue parts of the surface. The points will be on the break line.
The angle in world coordinates of a line tangent to the surface at the draft angle point.
The direction of the part ejection in world coordinates.
Restricts the point placement to an edge.


text:
What's true and what's false about California's exhaust noise law
ClassicCars.com February 1, 2019 Comment Now!
The automotive world gave a stir this month when some California motorists began getting fined for having an exhaust system that was too loud.
Rumors about the law and its effect on the sale of aftermarket exhausts worried some in the industry, but the Special Equipment Market Association — better known as SEMA — is working to assuage some of the concerns.
In a news release, the organization said the law concerning exhaust noise louder than 95 decibels was put into place in May of 1998, meaning it has been around for more than 20 years.
What changed recently was the passage of California Assembly Bill 1824. The bill, signed into law last year by then-Gov. Jerry Brown, requires police officers issue an immediate fine for a violation instead of a 30-day notice to correct the issue.
Some automotive blogs claimed the fines levied against violators have been in the $1,000 range. However, SEMA said the base fine for a first-time conviction is much lower: $25 with a total fee of $193.
Christian Robinson, who heads SEMA's political action committee, said motorists have the right to fight the fine in court if they can prove the exhaust is under the 95-decibel mark.
"You still have due process under the law in California to demonstrate you're in compliance with the law using an objective test," he said Friday.
Motorists accused of violating the noise law can get a certificate of compliance from the SEMA-sponsored California Bureau of Automotive Repair that shows the exhaust is not louder than 95 decibels and use it to fight the fine in court. The exhaust test costs $108.
Additionally, the tweak to the law did not make it illegal to add aftermarket exhaust systems to vehicles.
"The sale and installation of an aftermarket exhaust system remains legal in California so long as it does not exceed a sound level of 95 decibels," SEMA said in the release.
Note: This story has been revised. The original version said the ticket can be corrected and the fine avoided, which is untrue. Instead, motorists have the option to fight the fine in court.
2019 Audi Q8, 2019 Mercedes-Benz G-Class, 2019 Chevy Camaro ZL1 1LE: The Week In Reverse
2019 Mercedes-Benz G-Class, "Fast 9," 2020 Subaru Legacy: Today's Car News
1990 Chevy Corvette ZR-1, 2020 Subaru Legacy, 2019 Dodge Challenger: This Week's Top Photos
Two-door SCG Boot off-roader due in May, four-door coming next year for $287,500
ClassicCars.com - Contributor
We review the '19 CT6, show you a modern Yenko Camaro, and a new Acura... The Week In Reverse July 12, 2019


This is the best extension cord for your generator to connect with home appliance and electric power tools.
The cable can be used indoor/outdoor for all weather and season, it is also with the water resistance, much safer for emergency and extreme weather using.
The big gauge and pure copper can avoid the cable getting overheating from long-time use. It is a useful and reliable emergency extension cord for your generator.
If you found any problem of our cable email us:brand@rockpals.
To effectively use a generator, you have to pick the right generator power cord. Or Not, you will risk damaging your generator and the appliance you will be using. Rockpals 10' 30-Amp L14-30 Generator Power Cord for up to 7,500-Watt Generators splits 250V across two legs that supplies 125V across four standard household receptacles with one cable, which generator side connection is NEMA L14-30P twist lock prong cord and output side receptacles is NEMA L14-30R Receptacles. It is used for generators, portable appliances,small motors and associated machinery. Besides, STW listed generator power cord is built well, which is not only highly praised for its durability and flexibility, but also be much safer using this cord during a power outage. So it is the ideal choice for you to choose it.
18-Month Warranty Since Purchase Date And Lift time Friendly Customer Service.


text:
layout: post
authors: ["The 2017 Steering Committee"]
title: "Summary of the 2017 Software Carpentry Steering Committee Retreat "
date: 2017-05-31
time: "10:00:00"
category: ["Steering Committee", "Community", "Instructor Training"]
---

The Software Carpentry Steering Committee met in person on June 7-8 in Davis, California.   The committee members have unique journeys that brought them through the community to having a seat on the steering committee. Importantly, we have a unified vision for the future of the Software Carpentry Foundation and the roles of the steering committee. Below is a brief summary of the motions passes and detailed description of the five key areas over which the Steering Committee will continue to provide oversight.

Below, we 1) summarize the motions that were passed at the meeting, 2) describe the five key areas over which the Steering Committee provides oversight, and 3) provide a timeline for implementing our goals.

## Summary of motions passed at retreat

- The Steering Committee has created a board-designated operating reserve ($80,000, equivalent to one quarter's worth of budget) to provide an assurance of financial solvency
- The Steering Committee empowers the trainer group to move forward with open instructor training events to non-member affiliated individuals
- The Steering Committee empowers staff to perform tasks in their areas of focus while the Steering Committee retains oversight in the key areas of community, instructor training, curriculum, finances, and hiring staff

## Areas with Steering Committee oversight

#### Community
We value the involvement of everyone in our community - learners, instructors, hosts, developers, maintainers, committee members, staff, partners, advocates, trainers, organizers, sponsors, advisors, and helpers. We are committed to creating a friendly and respectful place for learning, teaching and contributing. We will continue to support the Code of Conduct, which is at the heart of our community. Our mission is to continue growing and supporting a diverse and inclusive community. To that end, we have empowered a new Director of Community Engagement to accomplish this mission.

#### Instructor training
We are committed to creating a community of practice around instruction. As we train new instructors and instructor trainers, we must also continue to support their professional development through a community of practice. We have empowered the Director of Instructor Training to expand the instructor training program to accommodate the needs of our community. Our strategic plan is to identify new instructor trainees and provide training opportunities while simultaneously working to grow our capacity to offer mentoring and other support to those new instructors.

#### Curriculum
The Software Carpentry lessons and workshops are the vehicle through which we teach best practices for scientific computing. Our curriculum evolves over time for many reasons, including changes in the needs of learners and turnover of lesson contributors. Part of our strategic plan is to support community involvement with lesson archival, lesson releases, lesson maintaince, lesson development, and other tasks related to curriculum.

#### Finances
The Software Carpentry Foundation is financially responsible for the organization. The Steering Committee will continue to govern the financial model and budget. We have designated a financial reserve to promote healthy and fiscally responsible operations.

#### Hiring staff
To achieve our mission, the steering committee will oversee the process of creating staff positions. We will evaluate the extent to which senior staff are carrying the strategic initiatives.  Senior staff will be responsible for evaluating junior staff members.

## Timeline for implementing our goals

#### Immediate concerns (now-six months)
- Resolve issues with Windows Installer
- Reconcile and resolve restructuring with Data Carpentry
- Identify immediate concerns for lesson development and maintenance (with an eye towards a restructured Carpentries)
- Create a curated list of resources for learners to continue building skills following workshops
- Connect with members and community organizers, to develop local/regional communities

#### Medium term (6-18 months)
- Populating the map (in terms of workshops, instructors, members) with an emphasis on diversity
- Create feedback loops for improving lessons, including lesson templates
- Local community building
- Assess inclusiveness of online communities

#### Long term (18+ months)
- Focus on communities of practice (for learners, instructors, trainers)
- Solidify pathways of involvement for community members, associated with a mastery rubric of skills
- Improve methods of documenting and recognizing contributions to the community (e.g., badging)


text:
City Elections
David H. Bieter
Candidate for Mayor
Bio provided by candidate
Dave Bieter is a son of Boise, born and raised in the city's North End by his parents Eloise and Pat. His mother knew English as a second language, learning Basque as a child, the native tongue of her parents. Eloise passed on a love of the Basque culture on to Dave, who learned to speak Basque and Spanish as well. Dave takes great pride in being the only Basque speaking mayor in the United States.
Dave is a graduate of Bishop Kelly High School, as well as The College of St. Thomas in St. Paul, Minnesota, where he earned a degree, cum laude, in International Studies. After spending several cold winters in Minnesota, Dave returned to Idaho in pursuit of a law degree which he earned from the University of Idaho in Moscow.
Dave has always sought to be a public servant and began that life with the Ada County Prosecutor's Office and then as Civil Counsel to Bonner County in North Idaho — his first introductions into local government. He later returned to Boise and opened a private practice in Boise focusing on municipal law.
After a tragic car accident in which both his parents passed away, Dave was appointed to fill his father's seat in the Idaho Legislature, representing the same neighborhood he called home as a child. Dave was elected to his father's District 19 House seat in 2000 and 2002 by overwhelming margins.
Five years in the legislature later, Dave took his passion for municipal government to a new level. He announced his candidacy in the early months of 2003 with a vision to make Boise the most livable city in the country.
In November of 2003, Dave was elected the 54th mayor of Boise, fulfilling his childhood dream.
Dave continues to be grateful for the support he's received from his neighbors who elected him again in 2007, 2011, and 2015 making him the longest-serving mayor in Boise's 150-year history.
By his side through the elections and in life has been his wife Julia and their daughter.
Mayor - 30-Day Post Run-Off Report
Mayor - 30-Day Post-General Report
Mayor - 48 Hour Report - General Election
Mayor - 48 Hour Report - Run-Off Election
Mayor - 7 Day Pre-General Report
Mayor - 7-Day Pre-Run-Off Report
Mayor - Declaration of Candidacy
Mayor - October 10th Pre-General Report
Mayor - Annual Report
Mayor - Certification of Treasurer
Send a Message to City Clerk
Please fill out the form and a representative from the city will be in touch with you.
Please Note: We are currently working on a system update so that we can better serve you. This may result in longer wait times than normal. We apologize for this inconvenience, and thank you for your patience as we work to provide better service.


text:
Gloria Steinem-speak
by Ammu Joseph
"Biology isn't destiny, and it isn't a free pass either." Gloria Steinem, 72, journalist, author and glamorous grande dame of global feminism has clearly not lost her well-known talent for aphorisms.
This quotable quote was one of many in a recent, hard-hitting article in which she debunked the notion that "feminists back every woman, regardless of how she behaves", listing a number of "women who are in trouble" for whom she has little sympathy. Chief among them is Condoleezza Rice. According to Steinem, "As United States President George W. Bush's hired gun for foreign policy, she's been working for a guy who is opposed overwhelmingly by African American women and men voters, and by a majority of all women voters. Many white men are giving up on him, too... I don't care that she's going down with a sinking ship... She has gone from a Presidential 'mention' to an unmentionable on the coattails of the boss she chose."
"I believe that women have the right to be wrong, with no double standard of criticism," Steinem explained, "But when we have the power to make a choice, we also have responsibility." That article was an exclusive written for the Women's Media Center, a New York based not-for-profit foundation set up in 2004 by Steinem, Jane Fonda and Robin Morgan, which now counts among its directors and advisors several leading US journalists, media women and academics.
Steinem is clear about the need for such an institution even now, even though - by her own admission - "there is no shortage of terrific women writers, editors, journalists and scholars". According to her, while a lot more women are now employed in the media, thanks to the women's movement, they are still rare at decision-making levels. "We got as far as tokenism," she says, "but nothing much has changed for a decade." Significantly, she points out, only about a third of news items in the US - in print, broadcast, and Internet combined -- cite any female source at all.
In fact, she says, "After the terrorist attack of September 11, the number of female authorities interviewed on TV plummeted, even though the heads of all the relevant Congressional committees were women, and even though the only US prosecutor to successfully prosecute a case of foreign terrorism within the country was a woman. Instead, TV producers dug up retired generals who knew very little, all because terrorism is 'hard news' and women are relegated to 'soft news.' How gendered is that?!"
The disparity persists in media management, too. According to Steinem, "Women are fewer than 10 per cent of board members of major media companies, and only three per cent of so-called 'clout' titles - positions with the power to set budgets and make news decisions... So you can see why we started the Women's Media Center!" Another new media organisation she is involved with is Greenstone Media, the first women-owned radio network in the US, launched in September 2006 to meet "the unserved need on radio for innovative, topical, relevant and entertaining programming of particular interest to women" and to
"build the leading brand for women's talk programming".
According to Steinem, it was women radio professionals who saw the window of opportunity for a new kind of programming that is "entertaining and informative, respects its callers, and creates the feeling of an on-air community". This approach is reflected in Greenstone's promotional slogans: 'This is a lecture-free zone'; 'Respect spoken here'; and 'As edgy as you can get with the kids in the car'.
"During these past couple of years, I've learned that radio is the most democratic medium," says Steinem. "It doesn't demand literacy or expensive equipment or even electricity... Radio can lessen power differences that computers and the Internet sometimes only increase."
She is currently in the process of adding another book to the list of bestsellers she has written over the years. Titled 'Road to the Heart: America As if Everyone Mattered', it is about her experience of over 30 years on the road as a feminist organiser. "The ironic truth of this on-the-road book is that I've been on the road too much to write it," she says. "I began it nine years ago and still have two-thirds to go." She describes the book as part on-the-road, part memoir: "I want to show how much more diverse the United States is than the media phrase 'the American people' would have you believe. I also hope to encourage more people to become organisers. Mass media and the Internet delude us into thinking we don't need to be in a room together - but we do. Nothing takes the place of listening to each other's voices, seeing each other's faces."
This is a lesson she says she learnt in India during her first visit 50 years ago. During that period, which she describes as "crucial and transforming", she got a taste of Gandhian activism accompanying Vinobha Bhave's followers to villages affected by caste violence. She still values the radical advice she received from her padayatra (travelling on foot) team leader: If you want people to listen to you, you have to listen to them. If you hope people will change how they live, you have to know how they live. If you want people to see you, you have to sit down with them eye-to-eye. "Most of us have a few events that divide our lives into 'before' and 'after,'" she wrote in her book, 'Moving Beyond Words'. "This was one for me."
Commenting on persistent efforts - by the media and others - to bury the women's movement and devalue, if not debilitate, its contributions and gains, she says: "It makes no more sense to say 'post-feminism' than to say 'post-democracy'. We haven't achieved either...The author Erica Jong once counted and discovered that Time magazine alone has declared the women's movement dead 27 times. Anti-equality folks first said that feminism was against nature and unnecessary. Now they say it used to be necessary, but it's not anymore. It's just the current form of resistance."
According to her, "The good news is that American feminism used to be three crazy women in New York; now a third of the country self-identify as feminists." She has a longitudinal view of the struggle for gender equality. The 19th and early 20th century wave of feminism lasted more than a century, she points out. It took that long to alter the status of women from the equivalent of chattel and legal possessions to being acknowledged as human beings and citizens in many countries. "That wave earned women a legal identity; this wave is striving for legal equality. We're about 30 or 40 years into this one, so we probably have at least 60 or 70 years to go. Then there will probably be other waves before we finally have cultures that don't determine human futures by the single difference of sex or race or ethnicity, but assume shared humanity and individual uniqueness."
Steinem is due in India later in February at the invitation of Women's World India. She will be speaking at public events during the forthcoming South Asian Women Writers' Colloquium in Delhi and the 5th Annual Meeting of the Network of Women in Media, India, in Bangalore.
More by : Ammu Joseph


text:
Mon Oct 04 2021
Calls: Applied Linguistics/Germany
From: Robin Meyer <robin.meyerunil.ch>
Subject: Language Pedagogy of Modern and Ancient Languages of Asia
Full Title: Language Pedagogy of Modern and Ancient Languages of Asia
Location: Free University Berlin, Germany
Contact Person: Robin Meyer
Web Site: https://bit.ly/DOT-pedagogy
Linguistic Field(s): Applied Linguistics
Our knowledge and understanding of ancient cultures rely almost exclusively on written documents; equally, we can fully comprehend even modern cultures only with sufficient command of their language(s). For this and many other reasons, the teaching of modern and ancient languages is a fundamental and necessary endeavour, and a worthwhile subject of study and debate.
The teaching of ancient, medieval, and pre-modern languages at university-level is frequently undertaken by colleagues from all sub-disciplines with varying degrees of training in language pedagogy. Equally, not all pedagogically trained teachers of modern languages or native speakers are familiar to the same extent with the history of the language they teach and speak.
Under the auspices of the Deutscher Orientalistentag (https://dot2022.de), we wish to bring together teachers of Asian languages from all time periods. Our goal is to provide a forum in which new and innovative solutions to well-known problems of teaching Asian languages can be discussed, practical as well as theoretical issues be analysed, and different experiences be compared. We hope that all participants will profit from the presentations and ensuing discussions by taking away ideas which may be implemented in their teaching practice.
What follows represents a list of sample questions, which could be addressed; other ideas are very welcome:
- Which methodological approaches used in teaching spoken languages could be adapted for use in languages no longer spoken?
- How can we most effectively introduce students familiar with an ancient language to its modern daughter language – and vice versa?
- In what way can we actively use phylogenetic relationships to teach students with knowledge of one language a closely related one?
- How can we use knowledge of Latin or Greek which students retain from school in order to teach them other (ancient) Indo-European languages?
- What is the best way of teaching students languages which differ fundamentally in their structure from the student's mother tongue(s)?
- What technological advances and research projects are there which might be of interest for language teachers?
Papers may be delivered in German or English, and we plan to make presentations via Zoom available for those unable to attend the DOT in person.
We invite abstracts of no more than 250 words for 20-minute presentations (followed by 10 minutes of discussion). The deadline is 23h59 CET on November 30, 2021. Please send your abstracts in pdf-format to antonia.ruppellmu.de. We will inform those whose proposals were accepted by mid-December, so that they have time to sign up for the DOT at the early-bird rate.


If I was one that exercised mendacity in my daily life I think I would be compelled to hoodwink myself from the view of others. I tend to overlook the untrustworthiness of others by their deceptions, therefore, my faith in them is deluded beyond repair. Harm from a falsehood of another has eventually hurt me in more ways than I could possibly recap in a short brief of words. In trusting someone to do right and not be deceptive you form a bond with them as a friend when in fact they have no intention of being a friend. Eventually, you will see a pattern building around their actions that will give rise to alert you that the walls are cracking around on this friendship and are about to fall to the ground. When a person tells little lies on a regular time frame you will notice a change in their attitude and personality giving ways to alert you not to believe what you hear or even see. Some people are destined to lie, a mendacity personality. Friendship is not an overnight event, longevity is the key to getting to know someone for better or worse, not as in the vows of marriage but in life as it is.


Many people experience a change in voice quality as they age. This condition is known as aging voice and can sometimes affect a person's communication or social interactions. If the condition is frustrating or limiting, possible treatments exist that might reduce symptoms of aging voice.
Someone who may be experiencing aging voice might exhibit symptoms, such as pitch changes, breathy speech, or a weakened voice. The breathy aspect is caused by the escape of air, and the weakened quality is the result of less vibrations in the vocal cords. Some people may find that they are out of breath or slightly fatigued when participating in a conversation because of the effort they put in to being adequately heard.
Aging voice is relatively normal and is the result of the thinning of the vocal cords. However, some changes in voice may be an indication or symptom of other conditions. In some cases of dementia, for example, the nerve function in the area of the vocal cords may be damaged, limiting the ability to produce voice. Other causes may include certain laryngeal cancers or paralysis of the vocal cords. Regardless of the possible cause, a weakened or changed voice should be examined by a laryngologist in order to determine what the diagnosis is and for an appropriate treatment.
Several treatment options are available for aging voice. Ranging from noninvasive to surgical, the option that may resolve voice issues depends on the cause of the condition as well as individual patient needs.
The least invasive option for improving voice quality is through voice therapy. A voice therapist teaches exercises and techniques that may produce positive effects on the voice. This process doesn't involve surgery or any actual physical changes to the vocal cords, and the patient is free to practice whenever and wherever.
A second treatment involves the injection of a material similar to collagen into the vocal cords. This option is considered outpatient. The idea is to create bulk win the thinned areas. If bulkier vocal cords are achieved, then vibrations may be stronger, which could remedy a weakened voice.
Thyroplasty involves a surgical approach. In the procedure, the vocal cords are repositioned for optimal vibration. The close proximity of the vocal cords should improve a weakened voice and restore some of the normal pitch.
Though voice changes later in life can be a normal part of aging, the condition should be evaluated by a professional. This allows the physician to indicate a treatment that could improve voice quality. If symptoms, including breathiness or a weakened voice, are present, an examination may be in order to rule out something more serious. Whether the diagnosis is aging voice or a different health issue, treatment can begin.
Maintaining vocal health is a part of managing everyday activities. From talking with friends and family to interacting with a healthcare provider, speech contributes to effective communication. Experiencing aging voice isn't something that must be accepted without action. Treatments exist and could help restore better functioning vocal cords.


text:
Alaska Airlines and Horizon Air announce details of aid expected under the CARES Act
Alaska Airlines and Horizon Air agreed to general terms today with the U.S. Treasury regarding their participation in the Payroll Support Program (PSP) under the Coronavirus Aid, Relief and Economic Security (CARES) Act. The airlines are currently working through the detailed agreements necessary before the Treasury will disburse funds and expect to finalize those agreements later this week.
"We are grateful for and humbled by this support," said Brad Tilden, Alaska Air Group's Chairman and CEO. "This aid will bring immediate and sorely needed liquidity to the airline industry and will enable all airlines – including Alaska – to continue serving our customers and to keep our people at work, while we adjust to an extraordinary reduction in demand. All of us at Alaska want to express our deep appreciation to President Trump and Vice President Pence, to Secretaries Mnuchin and Chao, to those working at the department of the Treasury, and to all members of Congress – especially members from Alaska, Washington, Oregon, California, and other key states we serve. These leaders have worked around the clock to support the aviation workforce and our nation's critical transportation infrastructure."
The program will provide Alaska and Horizon with a total of $992 million, to be used exclusively for the cost of employee payroll and benefits. The funding is expected to cover about 70% of budgeted costs through Sept. 30, 2020, and was based on similar costs reported by the airlines for the period of April through September 2019.
"Our employees are tremendous, serving our guests and running a safe and reliable operation every day," said Tilden. "They've continued to do so through this crisis, to safely fly those who need to travel, deliver critical groceries, supplies, and other cargo across our network, including remote parts of Alaska. This federal support enables us to take care of them through a time of near-zero revenue. They have faced challenges before and come out stronger. And we have every expectation that we will do so again this time."
Of the $992 million in funding to be disbursed under the PSP, $267 million will be in the form of a loan and must be repaid to the government. Additionally, the Treasury will receive the right to buy 847,000 non-voting shares of Alaska Air Group at a price of $31.61/share.
Under this program, Alaska also agreed to additional conditions such as no involuntary furloughs or changes to rates of pay through Sept. 30, 2020, continued suspension of dividends and share repurchases until Sept. 30, 2021, limits on executive compensation through March 24, 2022, and continuation of service as reasonable and practicable under a Department of Transportation rule.
Alaska and Horizon also communicated to the Treasury their intent to apply for $1.128 billion in federal loans through a separate program authorized under the CARES Act. This process is still ongoing. Funds loaned to Alaska and Horizon through this program will support short-term liquidity needs and must be paid back in full.


This Ferrari sets the record of the highest automobile ever sold at auction, anywhere. It was estimated to go over $60,000,000 but it seems the only other bidder backed out. It was a most interesting and drawn out no reserve bidding where bids were for a time were increasing at rather small increments between a phone bidder and a bidder on the floor. The bidding went on for a while and was a real show. This was certainly a main event of this years Monterey auctions.
The Ferrari 250 GT 'Omologato' needs little introduction as the most iconic, most habitable, street-useable, race-winning, World Championship-winning – and simply gorgeous – closed two-seat Coupe car from the world-famous Maranello factory. The GTO was developed to contest the 1962 3-litre class FIA GT World Championship series of classical endurance racing events. Selective production at Maranello and in the Scaglietti body plant in Modena ran on through the 1963 FIA GT World Championship and – sure enough – the Ferrari 250 GTO won the World title both seasons in succession.
Overall, the Ferrari factory manufactured 39 cars which may be considered within the rarefied 'GTO' family. Four of the core group of 35 cars with 1962-63 style bodywork were later converted into lower, flatter, longer-nosed GTO/64 body form. So 31 of the 250GTO/62-63 series have survived, of which only 28 cars have the 3-litre V12 engine as true '250'GTOs, and three 4-litre V12 engines as '330'GTOs. Here we offer the 17th of the 3-litre true 250GTOs, first completed and campaigned right at the end of the 1962 International race season, and then as rebuilt fresh and ready for a new ownership, and a resumed career, in 1963.


text:
Q: How to prevent re-render child component when dispatch redux in it to render parent component? I have child component and it has a button to dispatch redux a variable to use in parent component.
But I want to still open child component when I click on the button.
Child Component
    const ServoActionFill = (e, jammerSelected) => {

        dispatch({
            type: "HIGHLIGHT_TARGET",
            data: {
                uniqueId: "546546644",
            },
        });

    }

    return

        {showPopup == true && target != null && subPopupServo == true &&

 disp("servo")}>
                <PieMenu
                    radius="130px"
                    centerRadius="70px"
                    centerX={info.containerPoint.x}
                    centerY={info.containerPoint.y}
                >
                    {/* Contents */}
                    {jammerList.activeJammers.map(x =>
                        //StatusName.forEach(y =>
                          //  y == x.latinName ?
                            <Slice onMouseOver={(e) => ServoActionFill(e, x)} backgroundColor="#6b22f3">
{x.latinName}
</Slice>
                    )}

                </PieMenu>

        }

Parent Component

const handlePropChange = (prevProps, nextProps) => {

    let returnState = true;
    // filter targets based on types
    if (nextProps.HIGHLIGHT_TARGET) {
        filterTargetsBasedOnTypes(nextProps.targetTypeHiddenInfo);
    }

};

const LeafletMap = React.memo(({ highlightedTarget }) => {

    const [viewport, setViewport] = React.useState(DEFAULT_VIEWPORT)
    const { props: { mapUrl } } = useTheme();

    return (
        <>
            <TextField
                classes={{ root: "target-search" }}
                placeholder="Search Target"
                title="searching target based on its id"
                variant="filled"
                type="search"
                onChange={searchTargetHandler}
                onKeyPress={(e) => {
                    if (e.key === 'Enter')
                        searchTargetBtnHandler()
                }}
                InputProps={{
                    classes: {
                        input: "py-2 text-black non-opacity",
                    },
                    endAdornment: <IconButton
                        className="p-0"
                        onClick={searchTargetBtnHandler}
                    >
                        <AiOutlineSearch />
                    </IconButton>
                }}

            />
        </>
    );
}, handlePropChange);

const mapStateToProps = state => {
    return {
        highlightedTarget: state.BaseReducers.highlightedTarget,

    };
};

export default connect(mapStateToProps)(LeafletMap);

When dispatch fire in Child component (Highlight_Target), Parent re-render by redux. But I want hold open Child component. Any solution?