Update 4: The massive job cuts that GM is undertaking as it closes five plants in North America have infuriated politicians in Ontario and the US who will be stuck grappling with the consequences of how to help thousands of soon-to-be unemployed blue-collar (and white collar) workers. As they have vowed to fight the cuts, autoworkers unions in both countries have raised questions about whether firing thousands of workers violates the terms of the 2009 Treasury funded bailout that saved the "Big Three" US carmakers from bankruptcy.
Now, one former Obama official has weighed in: Steve Rattner, who led Obama's auto task force, which helped organize and oversee the bailouts, said he doesn't believe they do. It was always the Obama Administration's intention that GM and its peers run their businesses responsibly, including implementing meaningful cost-cutting measures to adjust for changes in their business environment.
"I don't think these violate the 2009 agreement, in part because we always made clear that GM should be free to run its business in the ordinary course," Steve Rattner, former chief of President Obama's auto task force, says in an email.
"The passage of more than nine years is an important factor – there has been much change in the auto world over that period and it's important for GM to be free to adjust its business accordingly," he added.
As a reminder, the federal government took over GM and Chrysler in March 2009, fired GM CEO Rick Wagoner and forced Chrysler to merge with Fiat before distributing nearly $100 billion in subsidies that eventually left US taxpayers with a $10.2 billion loss.
The bailout ended on December 18, 2014, when the Treasury Department sold its last remaining shares of Ally Financial, formerly known as General Motors Acceptance Corporation, which it had bought for $17.2 billion during the depths of the crisis to infuse cash into the failing GM subsidiary. The Treasury Department sold the shares for $19.6 billion, earning a tidy $2.4 billion profit that wasn't nearly enough to offset the losses on GM and Chrysler.
Circling back to the present day, GM workers at the plants slated for closure walked off the job on Monday after the company formally announced the cutbacks.
It used to be that "what's good for the country is good for General Motors, and vice versa." As any of these workers would tell you, that's clearly no longer the case.
Update 3: In case you were wondering why GM would be doing this amid 'the greatest recovery' of all time and global synchronized growth; this chart should help!!
Update 2: The cutbacks announced by GM Monday morning were more severe than most analysts expected – and were certainly steeper than leaked reports published late Sunday and early Monday had suggested.
After GM shares were halted pending news following a 2%+ jump after the open, Barra revealed that the company would shutter 7 plants (5 in North America and 2 international) after 2019, fire 15% of its salaried workforce and shift hiring priorities to more tech workers in a cost-cutting drive intended to save the company some $6 billion by the end of 2020 ($4.5 billion will come from cost savings, $1.5 billion from lower capital spending). As GM seeks more workers with "different skills", it also plans to shift its investment focus toward electric and autonomous vehicles.
Canadian Prime Minister Justin Trudeau has expressed "deep disappointment" at GM's decision to close its plant in Oshawa, Ontario. He reportedly spoke with Barra over the weekend.
The company's shares ripped higher after the trading halt ended, climbing 7.6% in their strongest one-day jump since Oct. 31, when the company announced some of its cost cutting plans and said it expected EPS for 2018 toward the high end of its guidance.
1. Oshawa Assembly in Oshawa, Ontario, Canada.
2. Detroit-Hamtramck Assembly in Detroit.
3. Lordstown Assembly in Warren, Ohio.
4. Baltimore Operations in White Marsh, Maryland.
5. Warren Transmission Operations in Warren, Michigan.
6/7. In addition to the previously announced closure of the assembly plant in Gunsan, Korea, GM will cease the operations of two additional plants outside North America by the end of 2019.
Barra said the cutbacks are a response to sagging car sales in domestic and international markets (sedan sales have floundered while pickup truck sales remain robust) and the impact of Trump's trade war. The steel tariffs alone have already cost GM some $1 billion this year, the company said.
"We are taking this action now while the company and the economy are strong to keep ahead of changing market conditions," Barra said during a conference call with reporters.
The firm will cut 15% of its salaried workforce, including a 25% reduction in the number of executives to streamline decision making. All told, the company is expected to cut nearly 15,000 salaried and hourly jobs. The company last month offered buyouts to 18,000 last month to try and reduce headcount.
The UAW, the union that represents most of GM's hourly labor force in the US, says it will do everything it can to resist GM's plans. Canada's innovation minister Navdeep Bains also decried GM's plans.
The company's white collar workers number roughly 54,000 in North America, according to WSJ, which speculated that most of the job cuts would come from GM's bloated product-development division.
General Motors will accelerate its transformation for the future, building on the comprehensive strategy it laid out in 2015 to strengthen its core business, capitalize on the future of personal mobility and drive significant cost efficiencies.
Transforming product development – GM is evolving its global product development workforce and processes to drive world-class levels of engineering in advanced technologies, and to improve quality and speed to market. Resources allocated to electric and autonomous vehicle programs will double in the next two years.
Update 1: Former Nissan Chairman Carlos Ghosn is locked up in a Tokyo jail cell, but GM CEO Mary Barra is apparently channeling the spirit of the auto executive nicknamed "Le Cost Killer".
GM shares climbed 0.6% at the open after the company announced production cutbacks that were larger than initially reported. In addition to shuttering the Oshawa plant, the company is also planning to halt production at its Warren Transmission plant in Michigan, as well as another plant in Ohio (in addition to the closure in Oshawa). The company also plans to stop selling some of the company's least popular models.
Lagging sales had already forced GM to cut production to one shift at its Hamtramck Assembly plant in Detroit and its Lordstown, Ohio, assembly plant. According to Reuters, the company is weighing whether to end production of the Chevrolet Volt hybrid, Buick LaCrosse, Cadillac CT6, Cadillac XTS, Chevrolet Impala and Chevrolet Sonic after 2020, amid a broader shift toward fully electric and autonomous vehicles.
General Motors Co will significantly cut car production in North America and stop building some low-selling car models, and was expected to announce significant planned reductions to its North American salaried, executive workforce, sources said on Monday.
The plants – Lordstown Assembly in Ohio, Detroit-Hamtramck Assembly and Oshawa Assembly – all build slow-selling cars.
The issue will be addressed in talks with the United Auto Workers union next year. GM Chief Executive Mary Barra made calls early on Monday to disclose the plans, the sources said.
The company is expected to officially announce its latest round of 'cost cutting' measures on Monday.
With car sales in the US and China locked in a precipitous slowdown that is only expected to worsen, GM on Monday announced the closure of one of its oldest Canadian plants as the company hopes to move more production to Mexico and (hopefully) bolster its lagging shares, Reuters reported. The company's plant in Oshawa, Ontario – the plant in question – produces slow-selling Chevrolet Impala and Cadillac XTS sedans, while also completing final assembly of the better-selling Chevy Silverado and Sierra pickup trucks, which are shipped from Indiana.
The outcry from the union and local officials is already causing political pressure on GM to mount after the carmaker accepted billions of dollars in subsidies from the Canadian and US governments after filing for bankruptcy nearly a decade ago. But the company must weigh these considerations against the demands of Wall Street analysts, who believe that GM has too many plants in North America. Signaling the start of the car maker's latest cost-cutting initiative, the company said on Oct. 31 that about 18,000 of its 50,000 salaried employees in North America would soon be eligible for buyouts.
Two sources told Bloomberg that the announcement of the plant's closure is expected on Monday.
The closure is not unexpected. In a message to employees last month, GM CEO Mary Barra cited the stagnant share price as a reason for tougher restructuring measures.
Unifor, the Canadian autoworkers union that represents the plant's employees, told Bloomberg that it has been told there is no car production planned at the factory beyond next year, raising the prospect of talks to preserve jobs. Unifor National President Jerry Dias said back in April that the Oshawa complex had been slated for closure in June of this year. But he added that one top GM Canada executive had vowed that it wouldn't close on his watch.
"We have been informed that, as of now, there is no product allocated to the Oshawa assembly plant past December 2019," Unifor said in a written statement Sunday night. "Unifor does not accept this announcement and is immediately calling on GM to live up to the spirit" of a contract agreement reached in 2016, the union said.
The survival of the factory was a key issue in the automaker's 2016 labor talks with Unifor, the union that represents tens of thousands of autoworkers in Canada. As part of that settlement, GM had agreed to spend some C$400 million ($302 million) in the Oshawa operations, Bloomberg News reported at the time. The union hailed the agreement as part of an effort to stem the loss of jobs to Mexico.
During its latest earnings call, GM CEO Mary Barra said at the New York Times DealBook conference earlier this month that the company had negative cash flow for the first nine months of the year and it needed to cut costs, according to the Detroit News.
Canadian lawmakers said they're fighting to keep the plant open because thousands of jobs are on the line.
Oshawa Mayor John Henry told CBC that he hopes the planned closure is "just a rumor", and that he had not spoken to anyone from GM. According to the carmaker's website, the Assembly plant in Oshawa employs roughly 2,800 workers – down from ten times that number in the early 1980s. Production at the plant began in November 1953.
"It's going to affect the province, it's going to affect the region…the auto industry's been a big part of the province of Ontario for over 100 years," Henry said.
As the CBC pointed out, the Oshawa plant was a talking point during the negotiations for Trump's USMCA (Nafta 2.0) deal. "Every time we have a problem…I hold up a photo of the Chevy Impala," Trump once said about the negotiations.
In a tweet, one conservative Canadian lawmaker lamented the news of the closure.
And while this closure would certainly be bad news for Canada, the situation could always get worse – particularly if Congress refuses to pass Trump's USMCA trade deal, raising the possibility that the US, Canada and Mexico would revert to WTO rules, potentially throwing GM's foreign North American operations into chaos.
What the best solution for North American workers?
This entry was posted in Economy and tagged Auto Industry, General Motors, GM on November 26, 2018 by Bone Fish.


text:
Q: Saving a new Base URL to a test suite I created a test suite that has 57 different tests in it for one of my environments. Now, I would like to implement the test suite to 10 other nearly identical environments. I have already done a dry run in the second environment and it runs well, the issue is that I need to go through and manually change the base url for each individual test every time I open the suite.
Ideally, Id like to have "Environment 1 test suite", "Environment 2 test suite", etc. When I click on a test suite, it opens the tests with the base url for the corresponding environment. I tried saving the modified suite. I tried saving the individual copies of the test cases. I cant figure out how to get the new copy of test cases to stop reverting to the original base url when I close and reopen the suite.

A: You should use a properties file. Provide the URL in a variable and then use this variable to set the Base URL in your scripts.
To add a properties file, create a text file such as TestData.js containing your base URL:
baseUrl="http://www.boogiesite.com"

Now add this file to Selenium IDE using IDE > Options > Options >  General tab > Selenium IDE Extensions > browse and select file TestData.js.
Reference:
http://selftechy.com/2011/06/30/parameterization-of-tests-in-selenium-ide
A similar previous SO question provides more answers:
selenium IDE - how can I change the Base URL for all my tests in one go

redpajama_set_name: RedPajamaStackExchange


text:
function testTwoWayVideoStreaming(test, bot1, bot2, bot3) {
  var answersCount = 0;
  var statsCollector;

  test.wait([
      createBotPeerConnectionsWithLocalStream.bind(bot1),
      createBotPeerConnectionsWithLocalStream.bind(bot2),
      createBotPeerConnectionsWithLocalStream.bind(bot3)],
    onPeerConnectionCreated);

  // done() callback is called with list of peers as argument.
  function createBotPeerConnectionsWithLocalStream(done) {
    var peerConnections = [];

    this.getUserMedia({video:true, audio:true},
        onUserMediaSuccess.bind(this), test.fail);

    function onUserMediaSuccess(stream) {
      test.log("User has granted access to local media.");
      this.showStream(stream.id, true, true);

      test.createTurnConfig(onTurnConfig.bind(this), test.fail);

      function onTurnConfig(config) {
        this.createPeerConnection(config, addStream.bind(this),
            test.fail);
        this.createPeerConnection(config, addStream.bind(this),
            test.fail);
      }

      function addStream(pc) {
        pc.addStream(stream);
        pc.addEventListener('addstream', onAddStream.bind(this));

        peerConnections.push(pc);
        if(peerConnections.length == 2)
          done(peerConnections);
      }
    }
  }

  function onPeerConnectionCreated(peerConnections1,
      peerConnections2, peerConnections3) {
    test.log("RTC Peers created.");

    // Bot1 and Bot2
    establichCall(peerConnections1[0], peerConnections2[1]);
    // Bot2 and Bot3
    establichCall(peerConnections2[0], peerConnections3[1]);
    // Bot3 and Bot1
    establichCall(peerConnections3[0], peerConnections1[1]);
  }

  function establichCall(pc1, pc2) {
    pc1.addEventListener('icecandidate', onIceCandidate.bind(pc2));
    pc2.addEventListener('icecandidate', onIceCandidate.bind(pc1));

    createOfferAndAnswer(pc1, pc2);
  }

  function onAddStream(event) {
    test.log("On Add stream.");
    this.showStream(event.stream.id, true, false);
  }

  function onIceCandidate(event) {
    if(event.candidate) {
      this.addIceCandidate(event.candidate,
         onAddIceCandidateSuccess, test.fail);
    };

    function onAddIceCandidateSuccess() {
      test.log("Candidate added successfully");
    };
  }

  function createOfferAndAnswer(pc1, pc2) {
    test.log("Creating offer.");
    pc1.createOffer(gotOffer, test.fail);

    function gotOffer(offer) {
      test.log("Got offer");
      pc1.setLocalDescription(offer, onSetSessionDescriptionSuccess, test.fail);
      pc2.setRemoteDescription(offer, onSetSessionDescriptionSuccess,
          test.fail);
      test.log("Creating answer");
      pc2.createAnswer(gotAnswer, test.fail);
    }

    function gotAnswer(answer) {
      test.log("Got answer");
      pc2.setLocalDescription(answer, onSetSessionDescriptionSuccess,
          test.fail);
      pc1.setRemoteDescription(answer, onSetSessionDescriptionSuccess,
          test.fail);

      answersCount++;
      if(answersCount == 3) {
        // SetTimeout used because creating the three answers will very fast
        // and test will success and the vm will be closed before establishing
        // the calls.
        setTimeout(function() {
            test.done();
          }, 5000);
      }
    }

    function onSetSessionDescriptionSuccess() {
      test.log("Set session description success.");
    }
  }
}

registerBotTest('threeBotsVideoConference/android+android+chrome',
                testTwoWayVideoStreaming, ['android-chrome', 'android-chrome',
                'chrome']);
registerBotTest('threeBotsVideoConference/chrome-chrome-chrome',
                testTwoWayVideoStreaming, ['chrome', 'chrome', 'chrome']);
registerBotTest('threeBotsVideoConference/android-android-android',
                testTwoWayVideoStreaming, ['android-chrome', 'android-chrome',
                'android-chrome']);

redpajama_set_name: RedPajamaGithub