text:
Sport | April 22, 2021 | 0 | by Chloe Meakins
By Chloe Meakins
Mandurah Magic versing the Rockingham Flames in the WA State Basketball League. Photo credit: Kez's Creations
WA's state basketball league rivals Mandurah Magic and the Rockingham Flames will go head to head in Rockingham this Friday for the Coast Cup.
Both the women's and men's teams will play at the Mike Barnett Sports Complex starting off with the ladies' match at 6.30pm.
All eyes will be on Ricky "Amazing" Grace's son and rising star Jerami Grace after he scored 100 per cent in free throw goals during Mandurah Magic's match against South West Slammers last week.
Incoming Rockingham Flames Women's Coach Tom Knowles says the game on Friday is expected to be fast and physical because of the competitiveness between both Peel teams.
"We have a huge advantage as the game is at our home ground, the Magics have been our competition for years but it also depends on the crowd," Mr Knowles says.
"Rockingham creates the best atmosphere in the league, exciting the crowd et cetera and that'll definitely help motivate the players to perform even better."
SLAM! Magic's Akau Deng showing off his skills against the Flames. Photo Credit: Kez's Creations
Mandurah Magic's Senior Men's' Coach Aaron Trahair says the Flames are a tough team to beat as they are currently third in the season's ladder, having beat the Cockburn Cougars during round one last Friday.
"We watched the Flames game from last week and have implemented new strategies that'll take away their strengths and hopefully win us the game," Mr Trahair says.
The Coast Cup is an annual competition supported by West Coast Radio's Coast FM that both local teams play to score the winning cup.
This is the first time the Coast Cup will be played in the revamped WA state basketball league, NBL1 West which comes under the east-coast's NBL1 banner.
Mr Trahair says this change isn't like anything WA and its players have experienced before, creating new possibilities and improving the overall state basketball experience.
"We're under the new NBL1 banner which is exciting for the players more than anything." Mr Trahair says.
"The exposure they get from social media and the exposure I've seen since week one is amazing,"
"It's a real pathway for players to get to the NBL."
New scoreboard screens have been installed, entertainment for crowds, an increase in food options and prizes have been added to make the experience on Friday better for the crowd.
The Perth butcher who cooked sausages fit for a Prince
Government asks veterans for help in Royal Commission


Its party time whenever the Jumbo Jamboree rolls into town! This clever little elephant on wheels will roll merrily along playing a happy tune, with toddlers following in his wake to get a better look at all his lively colours. But Jumbo has an extra trick up his trunk. Pull him apart into seven pieces and you have an orchestra on your hands! His trunk is a trumpet, his matching ears rattle, there are pan pipes, a xylophone and more!Children will love discovering these hidden surprises and experimenting with music and rhythm. And when its time for the band to move on, theres a matching game you can play.
Parts like the trunk and the ears clip on to colour-coded connectors, while stripes on the back help line up the remaining parts in the right sequence. Jumbos Jamboree develops memory (he is an elephant, after all) and helps refine motor skills as your little one works out how to piece together the different pieces for a really satisfying end result. The tune that sounds as he rolls along and the music the children can play with the instruments all make for a journey of discovery and creativity. The TOMY Jumbos Jamboree is suitable for ages 12 months and over.


A book I'm really fond of right now is Fashioning the Bourgeoisie:A History of Clothing in the Nineteenth Century by Philippe Perrot, translated by Richard Bienvenu.
When department stores like Le Bon Marché first opened their doors in mid-nineteenth-century Paris, shoppers were offered more than racks of ready-made frock coats and crinolines. They were given the chance to acquire a lifestyle as well–that of the bourgeoisie. Wearing proper clothing encouraged proper behavior, went the prevailing belief.
As opposed to many fashion history books, this one offers not just timelines on when skirts became wider, but tries to explain the meaning of it, the meaning of fashion both in the nineteenth century as well as in contemporary society, and researches issues such as the lack of colour in mens suits since the 1790s. It's quite academic, (actually, I found it in the university library) and it's great to see a more serious, scientific approach to Victorian fashion history.
The book contains a lot of interesting images and fun anecdotes, which I will post about soon. Did you know for example that buying secondhand clothes was already in use in the eighteenth century? And buying something, wearing it to a party, and returning it to the warehouse the next morning was a known occurence in the nineteenth century, as well as people who stole things compulsively, and men who visited warehouses in order to sniff women's clothes and steal their handkerchiefs?
I've read about women shoplifters in the Victorian era. Zola's Au Bonheur des Dames deals with a shoplifter overwhelmed by the Bon Marché, she can't help but steal! It's actually rather interesting to note that with the rise of cheap items and a plethora of choices in shopping, people felt more compelled to steal.
Evangeline: I think the book actually quotes Zola on that, that's funny! Yes, it seems the big warehouses really did do something to a woman's psyche, making her steal useless of cheap items just for the sake of it.
Thanks for the tip on this book — could be very useful for my dissertation.


Thanks for replying to my last query.
To pay 0 tax on my income , i need to claim deductions of 45,000 under section 80c.
To do that i am investing 30,000 in ELSS and 15,000 in PPF.
I have invested 2,000 in each of the following ELSS Schemes.
I will further invest 4000 more in each of these , total of 30000.
Do you thing this is a good balance of ELSS Funds and currect number of funds for investing 30,000.
You have the right mix of ELSS funds and you can continue to not only stay invested in these but also add more of the same.
You can however consider adding DSPML Tax Saver Fund which is more into Large Caps and could add stability to your portfolio.
Your exposure to Mid Cap and Small Cap is more through ELSS funds and not via Diversified Equity Funds, which means an automatic lock-in of 3 years, which should reward you by the end of lock-in term. And also, age being on your side, you need not at worry on this front. Your open-ended funds investment are in 3 Very Very Good Funds, which you can encash anytime without too much of a bruising.
Carry on without a worry and full of confidence.


text:
The Surging Invasion of Illegals
The threat at hand - and what Trump has to do.
Lloyd Billingsley
When President Trump got word of another "caravan" heading for the United States, he told a group of black conservatives, "I called up the military." Some 5,800 troops arrived to back up the Border Patrol and National Guard units. The troops strung up miles of barbed wire but that did not deter the "migrants," from mounting what some Mexicans called an "invasion." The troops will soon be heading home but the military can still offer strategic lessons in border enforcement.
Last year, Mexican Nationals Hugo Mejia and Rodrigo Nuñez showed up at Travis Air Force Base, near Fairfield, California. Travis is home to with a fleet of C-5, KC-10 and C-17 aircraft and more than 25,000 people live and work on the base. As a matter of security and common sense, anyone entering Travis must pass through security screening.
Mejia and Nuñez came with a crew to work on a hospital, but when base security scanned the Mexicans' identification it came back false. As it turned out, both were deported in 2001 but re-entered the U.S. illegally. Nuñez was also deported in 2003 and again illegally entered the United States. This should confirm that US border policy is a complete bust. The case also proved educational on the default description of illegals as "undocumented."
Mejia and Nuñez, or whatever their real names, carried false documents, and identity theft is a hardly a victimless crime. When base authorities called in ICE, Mejia conducted his interview in Spanish, after more than a decade in the United States. That should cast doubt on the claim that Mexicans are assimilating to American culture and learning English in the manner of past legal immigrants.
The Travis case also dispels the notion that illegals do not take American jobs. Work on federal projects demands a "prevailing wage," always interpreted as union scale. So, Mejia and Nuñez were going to be well paid, and the drywall installers were not performing tasks that American workers shun.
In similar style, Mexican national Diana Montelongo is one of 5,000 false-documented educators in California schools. That might surprise legitimate American citizens and legal immigrants who are looking for teaching jobs.
The average salary of California teachers is more than $70,000 and California law, the 1996 Proposition 209, forbids racial and ethnic preferences in state education and employment. So, some educrat violated state law to give a job to a foreign national who is not even supposed to be in the United States, like Mejia and Nuñez.
When Travis officials summoned ICE the usual suspects sprang into action. The Centro Legal de la Raza predictably decried an arrest "for the crime of being undocumented." Marin County Democrat Mark Levin, co-author of sanctuary legislation, decried "the vindictiveness of the Trump administration." That administration, and all federal and state government officials, would do well to heed the lessons.
Document fraud and identity theft are serious crimes, so no government official at any level should ever accept fake documents. Had Travis security officials allowed false-documented illegals on the base, they surely would have been punished severely. Acceptance of fake documents should be cause for dismissal.
As Mejia, Nuñez and Montelongo confirm, illegals do take high-paying jobs that Americans want. So, penalties should also apply to those who give preference to illegals over legitimate citizens and legal immigrants. This is particularly important in government.
If Mejia and Nuñez had attempted to jump the fence at Travis Air Force Base they would have received a painful surprise. Last December, five people, including a burglary suspect, attempted to crash the main gate but base police arrested them swiftly. No report shows that those arrested were immediately released.
Any Air Force security official who knowingly allowed unauthorized intruders onto the base would face immediate arrest. Any commander who authorized a breach of the base would be staring down the barrel of a court martial. So would any Pentagon official who authorized false-documented illegals onto any base for any reason.
Any commander who set up a "sanctuary" section of the base for illegals, and arranged for them to get jobs, financial and medical benefits, would also face court martial. Likewise, it would not go well with any military judge who attempted to justify a sanctuary policy. Outside the base, it doesn't work that way.
Thousands of illegals, including criminals, breach the border every month with little difficulty. Many are caught and released. Many deportees enter illegally again, and many of those are violent criminals like cop-killer Luis Bracamontes. Politicians set up sanctuary cities and states that protect violent criminals and give illegals a host of benefits, including state jobs.
To stem the surging invasion of illegals, the president should expand use of the military and deploy the kind of practices on display at Travis Air Force Base. The only people who get onto that base are the ones officials want to be there. The United States should likewise establish merit-based immigration and only allow entry to those who respect American law.
About Lloyd Billingsley
Lloyd Billingsley is the author of Barack 'em Up: A Literary Investigation and, most recently, Sexual Terrorist, about the Golden State Killer. Lloyd's work has appeared in City Journal, the Wall Street Journal, Washington Times, California Globe, and many other publications. Bill of Writes: Dispatches from the Political Correctness Battlefield is a collection of his journalism. His crime books include A Shut and Open Case, about a double murder in Davis, California.

redpajama_set_name: RedPajamaCommonCrawl


Solid couch, if probably not the most comfortable thing to sleep on. We can understand why Lin's looking for his own place...though if he really wants to feed the hype machine, he should probably keep staying at his brother's place so everyone can rave about how success isn't changing him and how he's staying humble. Well, that and keep on scoring 20-plus points a night. Easier said than done.


text:
Q: For each loop prints array as well as array values I have a for each loop in a wordpress site that outputs content for use in structured data. This mostly works fine, but I am seeing the actual array being output as well as the values values from it.
So I have the following:
"@context" : "http://schema.org",
"@type": ["ItemList", "events"],
"name": "<?php the_title(); ?>",
"url": "<?php echo $current_url ?>",
"itemListElement": [
$args = array(
        'numberposts'       => -1,
        'post_type'         => 'events',
        'post_status'       => 'publish',
        'orderby'           => 'date',
        'order'             => 'DESC',
        'meta_query' => array(
            array(
                'key' => 'event_end_date',
                'compare' => '>=',
                'value' => $today
            )
        ),
        'meta_key' => 'event_start_date'
    );
    $myposts = get_posts($args);
    foreach ($myposts as $mypost) {
        $args[] =
        '{
            "@type": "ListItem",
            "item": {
                "@type": "Event",
                "name": "' . get_the_title($mypost->ID) . '",
                "location": "' . get_field( 'event_address', $mypost->ID) . '",
                "startDate": "' . get_field( 'event_start_date', $mypost->ID ) . '",
                "endDate": "' . get_field( 'event_end_date', $mypost->ID ) . '",
                "description": "' . get_the_excerpt($mypost->ID) . '"
            }
        }';
    }
    echo implode( ', ', $args );

And this outputs:
"@context" : "http://schema.org",
"@type": ["ItemList", "events"],
"name": "Forthcoming Shows",
"url": "http://localhost/forthcoming-shows/",
"itemListElement": [
-1, events, publish, date, DESC, Array, event_start_date, {  // this should be just the curly brace
    "@type": "ListItem",
    "item": {
        "@type": "Event",
        "name": "name here",
        "location": "this is the address",
        "startDate": "25/06/2020",
        "endDate": "25/06/2020",
        "description": "some description"
    }
}, {
    "@type": "Event",
        "name": "Another event",
        "location": "an address",
        "startDate": "25/06/2020",
        "endDate": "25/06/2020",
        "description": "some description"
    }
}]

Why am I gettng the array printing above the results?
I am also gettng an error message "Notice:  Array to string conversion in ... on line 214. Which refers to the echo implode line. Not entirely sure if thats related.

A: The first key of the array it's:
$args = array(
        'numberposts'       => -1,
        'post_type'         => 'events',
        'post_status'       => 'publish',
        'orderby'           => 'date',
        'order'             => 'DESC',
        'meta_query' => array(
            array(
                'key' => 'event_end_date',
                'compare' => '>=',
                'value' => $today
            )
        ),
        'meta_key' => 'event_start_date'
    );

So, when you do the implode, the "meta_query" key as an array.
That's why it shows you an array when you print it. If you want to convert that array into a string, you could do a json_encode of it (before the implode):
        'meta_query' => json_encode(array(
            array(
                'key' => 'event_end_date',
                'compare' => '>=',
                'value' => $today
            )
        )),

That depending on what you want to do with that array.You have to solve the nesting yourself.

EDIT: (based on comments)
You have an array of associative arrays on meta_query. So, that gonna print an array of objects. If you want to delete the two levels of the array, you can do it:
$args = array(
        'numberposts'       => -1,
        'post_type'         => 'events',
        'post_status'       => 'publish',
        'orderby'           => 'date',
        'order'             => 'DESC',
        'meta_query' => json_encode(
            array(
                'key' => 'event_end_date',
                'compare' => '>=',
                'value' => $today
            )
        ),
        'meta_key' => 'event_start_date'
    );

This will gonna to print a json object. If you expect to print an object of objects, then you would have to include the array inside in an associative array:
$args = array(
        'numberposts'       => -1,
        'post_type'         => 'events',
        'post_status'       => 'publish',
        'orderby'           => 'date',
        'order'             => 'DESC',
        'meta_query' => json_encode(array(
            'mykey' => array(
                'key' => 'event_end_date',
                'compare' => '>=',
                'value' => $today
            )
        )),
        'meta_key' => 'event_start_date'
    );

But it all depends on what you want to do with that array...

redpajama_set_name: RedPajamaStackExchange


text:
Blurblogs
satadru's blurblog
Biomedical Engineer, Medical Student, Lincoln Democrat
15442 stories
What Adding Luxury Housing Does to Rents Elsewhere
Saturday January 18th, 2020 at 11:12 PM
CityLab | All Articles
2 Comments and 3 Shares
There's a fierce argument about housing affordability and supply that's raging in the urbanist community. The big question: Does building "luxury" (or market rate) housing in wealthy neighborhoods free up more housing for everyone? Advocates in the "Yes In My Backyard" (YIMBY) movement say it does; others are more skeptical.
The market-rate-skeptic's view, as captured in Richard Florida's write-up of a new paper by Andrés Rodríguez-Pose and Michael Storper, paints a picture like this: Allowing new market-rate housing citywide will only result in high-end units in already-expensive neighborhoods. At best, developers may win big as the wealthy enjoy new homes. At worst, it could exacerbate segregation in wealthy neighborhoods and displacement in low-income neighborhoods.
The pro-market-rate position, championed by YIMBYs, is more optimistic: This view would concede that, though it's true that new market-rate units will be expensive given the current scarcity of housing, new units will ease up demand for existing housing. Through a process known as filtering, this older housing gradually becomes more affordable to middle- and low-income households. This will ultimately mitigate displacement risk in more vulnerable communities.
A new working paper by economist Evan Mast of the W.E. Upjohn Institute for Employment Research may help move the ball on this issue. Mast's work suggests that even expensive new units in wealthy areas help relieve pressure on rents across the market, including in less-affluent neighborhoods. And that process doesn't need to take years to unfold.
Until now, the argument for filtering has played out in the long run: Given a steady supply of new housing, older homes and apartments gradually grow more affordable, and households of all income levels gradually move into better housing. But many North American cities are in the grips of an urgent affordability crisis right now: Promises based on "the long run" can feel like cold comfort. What about the short run?
Mast looked at 802 new multifamily developments across 12 central cities, from the "Texas doughnuts" of Dallas to luxury high-rises in New York City. Using commercial address data, he found out the moving history of the residents of these new units. The first round of moves are roughly what you might expect: Approximately 70 percent came from nearby neighborhoods with above-average incomes, with the remaining 30 percent moving from below-average neighborhoods. These aren't exactly inspiring results for activists focused on helping households at the bottom of the market.
But when a household moves into a new unit, they initiate a kind of housing musical chairs by vacating their existing unit. A second household then moves into that unit, in turn vacating a third unit. For each new market-rate building, Mast follows this trail of movers back through six moves, tracking where residents are moving from, a process he calls the migration chain. By the sixth link of this chain, Mast finds that approximately half of the movers are moving out of census tracts with below-median incomes. As many as 20 percent of movers are coming from the poorest tracts in the city.
These findings suggest that housing markets aren't nearly as segregated as some might fear, if you work your way down the migration chain far enough. His model suggests that for every 100 luxury units built in wealthier neighborhoods, as many as 48 households in moderate-income neighborhoods are able to move into housing that better suits their needs, vacating an existing unit in the process. Somewhere between 10 and 20 of these households are coming from among the city's lowest-income neighborhoods, vacating units and reducing demand where housing is most likely to be affordable for working families.
This suggests that even pricey new units could free up a lot of existing housing. Accounting for possibilities like units sitting vacant, out-of-town movers filling the units, or units being used as second homes/pied-a-terres/safe deposit boxes in the sky, Mast's model still indicates that for every 100 new market-rate units built, approximately 65 equivalent units are created by movers vacating existing units. If the migration chain is as robust as this paper finds it to be, as much as half of theses newly vacated units could be in low- and moderate-income neighborhoods. This new supply, combined with less demand, could play a major role in easing pressure on rents in the short run.
No one paper is likely to settle a debate this contentious, but if further research vindicates Mast's findings, his model could have serious implications for housing policy. For starters, the case against allowing new market-rate housing in high-income neighborhoods would be considerably weakened. And, as Daniel Herriges points out over on Strong Towns, it could also call into question well-meaning policies that suppress the construction of new housing, such as inclusionary zoning.
That doesn't mean we can expect an end to Great Housing Supply Debate of 2019: It's clear that deeper issues divide the urbanism community. But in the meantime, we can recognize Mast's work for what it is: a glimmer of empiricism that helps pierce an increasingly dense fog of ideological theory.
Read the whole story
mareino
I'll be the first to admit, a 100-to-65 ratio wouldn't be great for a government investment project. But for private capital that's not even trying to invest in the needs of the working class and poor, this is about as good as it gets.
satadru
If you haven't seen it yet...
'A Very Stable Genius' book excerpt: Inside Trump's stunning tirade against generals
Friday January 17th, 2020 at 1:32 PM
1 Comment and 2 Shares
Hanging prominently on one of the walls is The Peacemakers, a painting that depicts an 1865 Civil War strategy session with President Abraham Lincoln and his three service chiefs — Lieutenant General Ulysses S. Grant, Major General William Tecumseh Sherman, and Rear Admiral David Dixon Porter. One hundred fifty-two years after Lincoln hatched plans to preserve the Union, President Trump's advisers staged an intervention inside the Tank to try to preserve the world order.
By that point, six months into his administration, Secretary of Defense Jim Mattis, Director of the National Economic Council Gary Cohn, and Secretary of State Rex Tillerson had grown alarmed by gaping holes in Trump's knowledge of history, especially the key alliances forged following World War II. Trump had dismissed allies as worthless, cozied up to authoritarian regimes in Russia and elsewhere, and advocated withdrawing troops from strategic outposts and active theaters alike.
Trump organized his unorthodox worldview under the simplistic banner of "America First," but Mattis, Tillerson, and Cohn feared his proposals were rash, barely considered, and a danger to America's superpower standing. They also felt that many of Trump's impulsive ideas stemmed from his lack of familiarity with U.S. history and, even, where countries were located. To have a useful discussion with him, the trio agreed, they had to create a basic knowledge, a shared language.
So on July 20, 2017, Mattis invited Trump to the Tank for what he, Tillerson, and Cohn had carefully organized as a tailored tutorial. What happened inside the Tank that day crystallized the commander in chief's berating, derisive and dismissive manner, foreshadowing decisions such as the one earlier this month that brought the United States to the brink of war with Iran. The Tank meeting was a turning point in Trump's presidency. Rather than getting him to appreciate America's traditional role and alliances, Trump began to tune out and eventually push away the experts who believed their duty was to protect the country by restraining his more dangerous impulses.
The episode has been documented numerous times, but subsequent reporting reveals a more complete picture of the moment and the chilling effect Trump's comments and hostility had on the nation's military and national security leadership.
Just before 10 a.m. on a scorching summer Thursday, Trump arrived at the Pentagon. He stepped out of his motorcade, walked along a corridor with portraits honoring former chairmen of the Joint Chiefs, and stepped inside the Tank. The uniformed officers greeted their commander in chief. Chairman of the Joint Chiefs General Joseph F. Dunford Jr. sat in the seat of honor midway down the table, because this was his room, and Trump sat at the head of the table facing a projection screen. Mattis and the newly confirmed deputy defense secretary, Patrick Shanahan, sat to the president's left, with Vice President Pence and Tillerson to his right. Down the table sat the leaders of the military branches, along with Cohn and Treasury Secretary Steven Mnuchin. White House chief strategist Stephen K. Bannon was in the outer ring of chairs with other staff, taking his seat just behind Mattis and directly in Trump's line of sight.
Mattis, Cohn, and Tillerson and their aides decided to use maps, graphics, and charts to tutor the president, figuring they would help keep him from getting bored. Mattis opened with a slide show punctuated by lots of dollar signs. Mattis devised a strategy to use terms the impatient president, schooled in real estate, would appreciate to impress upon him the value of U.S. investments abroad. He sought to explain why U.S. troops were deployed in so many regions and why America's safety hinged on a complex web of trade deals, alliances, and bases across the globe.
An opening line flashed on the screen, setting the tone: "The post-war international rules-based order is the greatest gift of the greatest generation." Mattis then gave a 20-minute briefing on the power of the NATO alliance to stabilize Europe and keep the United States safe. Bannon thought to himself, "Not good. Trump is not going to like that one bit." The internationalist language Mattis was using was a trigger for Trump.
"Oh, baby, this is going to be f---ing wild," Bannon thought. "If you stood up and threatened to shoot [Trump], he couldn't say 'postwar rules-based international order.' It's just not the way he thinks."
For the next 90 minutes, Mattis, Tillerson, and Cohn took turns trying to emphasize their points, pointing to their charts and diagrams. They showed where U.S. personnel were positioned, at military bases, CIA stations, and embassies, and how U.S. deployments fended off the threats of terror cells, nuclear blasts, and destabilizing enemies in places including Afghanistan, Iran, Iraq, the Korea Peninsula, and Syria. Cohn spoke for about 20 minutes about the value of free trade with America's allies, emphasizing how he saw each trade agreement working together as part of an overall structure to solidify U.S. economic and national security.
Trump appeared peeved by the schoolhouse vibe but also allergic to the dynamic of his advisers talking at him. His ricocheting attention span led him to repeatedly interrupt the lesson. He heard an adviser say a word or phrase and then seized on that to interject with his take. For instance, the word "base" prompted him to launch in to say how "crazy" and "stupid" it was to pay for bases in some countries.
Trump's first complaint was to repeat what he had vented about to his national security adviser months earlier: South Korea should pay for a $10 billion missile defense system that the United States built for it. The system was designed to shoot down any short- and medium-range ballistic missiles from North Korea to protect South Korea and American troops stationed there. But Trump argued that the South Koreans should pay for it, proposing that the administration pull U.S. troops out of the region or bill the South Koreans for their protection.
"We should charge them rent," Trump said of South Korea. "We should make them pay for our soldiers. We should make money off of everything."
Trump proceeded to explain that NATO, too, was worthless. U.S. generals were letting the allied member countries get away with murder, he said, and they owed the United States a lot of money after not living up to their promise of paying their dues.
"They're in arrears," Trump said, reverting to the language of real estate. He lifted both his arms at his sides in frustration. Then he scolded top officials for the untold millions of dollars he believed they had let slip through their fingers by allowing allies to avoid their obligations.
"We are owed money you haven't been collecting!" Trump told them. "You would totally go bankrupt if you had to run your own business."
Mattis wasn't trying to convince the president of anything, only to explain and provide facts. Now things were devolving quickly. The general tried to calmly explain to the president that he was not quite right. The NATO allies didn't owe the United States back rent, he said. The truth was more complicated. NATO had a nonbinding goal that members should pay at least 2 percent of their gross domestic product on their defenses. Only five of the countries currently met that goal, but it wasn't as if they were shorting the United States on the bill.
More broadly, Mattis argued, the NATO alliance was not serving only to protect western Europe. It protected America, too. "This is what keeps us safe," Mattis said. Cohn tried to explain to Trump that he needed to see the value of the trade deals. "These are commitments that help keep us safe," Cohn said.
Bannon interjected. "Stop, stop, stop," he said. "All you guys talk about all these great things, they're all our partners, I want you to name me now one country and one company that's going to have his back."
Trump then repeated a threat he'd made countless times before. He wanted out of the Iran nuclear deal that President Obama had struck in 2015, which called for Iran to reduce its uranium stockpile and cut its nuclear program.
"It's the worst deal in history!" Trump declared.
"Well, actually . . .," Tillerson interjected.
"I don't want to hear it," Trump said, cutting off the secretary of state before he could explain some of the benefits of the agreement. "They're cheating. They're building. We're getting out of it. I keep telling you, I keep giving you time, and you keep delaying me. I want out of it."
Before they could debate the Iran deal, Trump erupted to revive another frequent complaint: the war in Afghanistan, which was now America's longest war. He demanded an explanation for why the United States hadn't won in Afghanistan yet, now 16 years after the nation began fighting there in the wake of the 9/11 terrorist attacks. Trump unleashed his disdain, calling Afghanistan a "loser war." That phrase hung in the air and disgusted not only the military leaders at the table but also the men and women in uniform sitting along the back wall behind their principals. They all were sworn to obey their commander in chief's commands, and here he was calling the war they had been fighting a loser war.
"You're all losers," Trump said. "You don't know how to win anymore."
Trump questioned why the United States couldn't get some oil as payment for the troops stationed in the Persian Gulf. "We spent $7 trillion; they're ripping us off," Trump boomed. "Where is the f---ing oil?"
Trump seemed to be speaking up for the voters who elected him, and several attendees thought they heard Bannon in Trump's words. Bannon had been trying to persuade Trump to withdraw forces by telling him, "The American people are saying we can't spend a trillion dollars a year on this. We just can't. It's going to bankrupt us."
"And not just that, the deplorables don't want their kids in the South China Sea at the 38th parallel or in Syria, in Afghanistan, in perpetuity," Bannon would add, invoking Hillary Clinton's infamous "basket of deplorables" reference to Trump supporters.
Trump mused about removing General John Nicholson, the U.S. commander in charge of troops in Afghanistan. "I don't think he knows how to win," the president said, impugning Nicholson, who was not present at the meeting.
Dunford tried to come to Nicholson's defense, but the mild-mannered general struggled to convey his points to the irascible president.
"Mr. President, that's just not . . .," Dunford started. "We've been under different orders."
Dunford sought to explain that he hadn't been charged with annihilating the enemy in Afghanistan but was instead following a strategy started by the Obama administration to gradually reduce the military presence in the country in hopes of training locals to maintain a stable government so that eventually the United States could pull out. Trump shot back in more plain language.
"I want to win," he said. "We don't win any wars anymore . . . We spend $7 trillion, everybody else got the oil and we're not winning anymore."
Trump by now was in one of his rages. He was so angry that he wasn't taking many breaths. All morning, he had been coarse and cavalier, but the next several things he bellowed went beyond that description. They stunned nearly everyone in the room, and some vowed that they would never repeat them. Indeed, they have not been reported until now.
"I wouldn't go to war with you people," Trump told the assembled brass.
Addressing the room, the commander in chief barked, "You're a bunch of dopes and babies."
For a president known for verbiage he euphemistically called "locker room talk," this was the gravest insult he could have delivered to these people, in this sacred space. The flag officers in the room were shocked. Some staff began looking down at their papers, rearranging folders, almost wishing themselves out of the room. A few considered walking out. They tried not to reveal their revulsion on their faces, but questions raced through their minds. "How does the commander in chief say that?" one thought. "What would our worst adversaries think if they knew he said this?"
This was a president who had been labeled a "draft dodger" for avoiding service in the Vietnam War under questionable circumstances. Trump was a young man born of privilege and in seemingly perfect health: six feet two inches with a muscular build and a flawless medical record. He played several sports, including football. Then, in 1968 at age 22, he obtained a diagnosis of bone spurs in his heels that exempted him from military service just as the United States was drafting men his age to fulfill massive troop deployments to Vietnam.
Tillerson in particular was stunned by Trump's diatribe and began visibly seething. For too many minutes, others in the room noticed, he had been staring straight, dumbfounded, at Mattis, who was speechless, his head bowed down toward the table. Tillerson thought to himself, "Gosh darn it, Jim, say something. Why aren't you saying something?"
But, as he would later tell close aides, Tillerson realized in that moment that Mattis was genetically a Marine, unable to talk back to his commander in chief, no matter what nonsense came out of his mouth.
The more perplexing silence was from Pence, a leader who should have been able to stand up to Trump. Instead, one attendee thought, "He's sitting there frozen like a statue. Why doesn't he stop the president?" Another recalled the vice president was "a wax museum guy." From the start of the meeting, Pence looked as if he wanted to escape and put an end to the president's torrent. Surely, he disagreed with Trump's characterization of military leaders as "dopes and babies," considering his son, Michael, was a Marine first lieutenant then training for his naval aviator wings. But some surmised Pence feared getting crosswise with Trump. "A total deer in the headlights," recalled a third attendee.
Others at the table noticed Trump's stream of venom had taken an emotional toll. So many people in that room had gone to war and risked their lives for their country, and now they were being dressed down by a president who had not. They felt sick to their stomachs. Tillerson told others he thought he saw a woman in the room silently crying. He was furious and decided he couldn't stand it another minute. His voice broke into Trump's tirade, this one about trying to make money off U.S. troops.
"No, that's just wrong," the secretary of state said. "Mr. President, you're totally wrong. None of that is true."
Tillerson's father and uncle had both been combat veterans, and he was deeply proud of their service.
"The men and women who put on a uniform don't do it to become soldiers of fortune," Tillerson said. "That's not why they put on a uniform and go out and die . . . They do it to protect our freedom."
There was silence in the Tank. Several military officers in the room were grateful to the secretary of state for defending them when no one else would. The meeting soon ended and Trump walked out, saying goodbye to a group of servicemen lining the corridor as he made his way to his motorcade waiting outside. Mattis, Tillerson, and Cohn were deflated. Standing in the hall with a small cluster of people he trusted, Tillerson finally let down his guard.
"He's a f---ing moron," the secretary of state said of the president.
The plan by Mattis, Tillerson, and Cohn to train the president to appreciate the internationalist view had clearly backfired.
"We were starting to get out on the wrong path, and we really needed to have a course correction and needed to educate, to teach, to help him understand the reason and basis for a lot of these things," said one senior official involved in the planning. "We needed to change how he thinks about this, to course correct. Everybody was on board, 100 percent agreed with that sentiment. [But] they were dismayed and in shock when not only did it not have the intended effect, but he dug in his heels and pushed it even further on the spectrum, further solidifying his views."
A few days later, Pence's national security adviser, Andrea Thompson, a retired Army colonel who had served in Afghanistan and Iraq, reached out to thank Tillerson for speaking up on behalf of the military and the public servants who had been in the Tank. By September 2017, she would leave the White House and join Tillerson at Foggy Bottom as undersecretary of state for arms control and international security affairs.
The Tank meeting had so thoroughly shocked the conscience of military leaders that they tried to keep it a secret. At the Aspen Security Forum two days later, longtime NBC News correspondent Andrea Mitchell asked Dunford how Trump had interacted during the Tank meeting. The Joint Chiefs chairman misleadingly described the meeting, skipping over the fireworks.
"He asked a lot of hard questions, and the one thing he does is question some fundamental assumptions that we make as military leaders — and he will come in and question those," Dunford told Mitchell on July 22. "It's a pretty energetic and an interactive dialogue."
One victim of the Tank meeting was Trump's relationship with Tillerson, which forever after was strained. The secretary of state came to see it as the beginning of the end. It would only worsen when news that Tillerson had called Trump a "moron" was first reported in October 2017 by NBC News.
Trump once again gathered his generals and top diplomats in December 2017 for a meeting as part of the administration's ongoing strategy talks about troop deployments in Afghanistan in the Situation Room, a secure meeting room on the ground floor of the West Wing. Trump didn't like the Situation Room as much as the Pentagon's Tank, because he didn't think it had enough gravitas. It just wasn't impressive.
But there Trump was, struggling to come up with a new Afghanistan policy and frustrated that so many U.S. forces were deployed in so many places around the world. The conversation began to tilt in the same direction as it had in the Tank back in July.
"All these countries need to start paying us for the troops we are sending to their countries. We need to be making a profit," Trump said. "We could turn a profit on this."
Dunford tried to explain to the president once again, gently, that troops deployed in these regions provided stability there, which helped make America safer. Another officer chimed in that charging other countries for U.S. soldiers would be against the law.
"But it just wasn't working," one former Trump aide recalled. "Nothing worked."
Following the Tank meeting, Tillerson had told his aides that he would never silently tolerate such demeaning talk from Trump about making money off the deployments of U.S. soldiers. Tillerson's father, at the age of 17, had committed to enlist in the Navy on his next birthday, wanting so much to serve his country in World War II. His great-uncle was a career officer in the Navy as well. Both men had been on his mind, Tillerson told aides, when Trump unleashed his tirade in the Tank and again when he repeated those points in the Situation Room in December.
"We need to get our money back," Trump told his assembled advisers.
That was it. Tillerson stood up. But when he did so, he turned his back to the president and faced the flag officers and the rest of the aides in the room. He didn't want a repeat of the scene in the Tank.
"I've never put on a uniform, but I know this," Tillerson said. "Every person who has put on a uniform, the people in this room, they don't do it to make a buck. They did it for their country, to protect us. I want everyone to be clear about how much we as a country value their service."
Tillerson's rebuke made Trump angry. He got a little red in the face. But the president decided not to engage Tillerson at that moment. He would wait to take him on another day.
Later that evening, after 8:00, Tillerson was working in his office at the State Department's Foggy Bottom headquarters, preparing for the next day. The phone rang. It was Dunford. The Joint Chiefs chairman's voice was unsteady with emotion. Dunford had much earlier joked with Tillerson that in past administrations the secretaries of state and Defense Department leaders wouldn't be caught dead walking on the same side of the street, for their rivalry was that fierce. But now, as both men served Trump, they were brothers joined against what they saw as disrespect for service members. Dunford thanked Tillerson for standing up for them in the Situation Room.
"You took the body blows for us," Dunford said. "Punch after punch. Thank you. I will never forget it."
Tillerson, Dunford, and Mattis would not take those body blows for much longer. They failed to rein in Trump's impulses or to break through what they regarded as the president's stubborn, even dangerous insistence that he knew best. Piece by piece, the guardrails that had hemmed in the chaos of Trump's presidency crumpled.
In March 2018, Trump abruptly fired Tillerson while the secretary of state was halfway across the globe on a sensitive diplomatic mission to Africa to ease tensions caused by Trump's demeaning insults about African countries. Trump gave Tillerson no rationale for his firing, and afterward acted as if they were buddies, inviting him to come by the Oval Office to take a picture and have the president sign it. Tillerson never went.
Mattis continued serving as the defense secretary, but the president's sudden decision in December 2018 to withdraw troops from Syria and abandon America's Kurdish allies there — one the president soon reversed, only to remake 10 months later — inspired him to resign. Mattis saw Trump's desired withdrawal as an assault on a soldier's code. "He began to feel like he was becoming complicit," recalled one of the secretary's confidants.
The media interpretation of Mattis' resignation letter as a scathing rebuke of Trump's worldview brought the president's anger to a boiling point. Trump decided to remove Mattis two months ahead of the secretary's chosen departure date. His treatment of Mattis upset the secretary's staff. They decided to arrange the biggest clap out they could. The event was a tradition for all departing secretaries. They wanted a line of Pentagon personnel that stretched for a mile applauding Mattis as he left for the last time. It was going to be "yuge," staffers joked, borrowing from Trump's glossary.
But Mattis would not allow it.
"No, we are not doing that," he told his aides. "You don't understand the president. I work with him. You don't know him like I do. He will take it out on Shanahan and Dunford."
Dunford stayed on until September 2019, retiring at the conclusion of his four-year term as chairman of the Joint Chiefs of Staff. One of Dunford's first public acts after leaving office was to defend a military officer attacked by Trump, Army Lieutenant Colonel Alexander Vindman, a National Security Council official who testified in the House impeachment inquiry about his worries over Trump's conduct with Ukraine. Trump dismissed Vindman as a "Never Trumper," but Dunford stepped forward to praise the Purple Heart recipient as "a professional, competent, patriotic, and loyal officer. He has made an extraordinary contribution to the security of our nation."
By then, however, Trump had become a president entirely unrestrained. He had replaced his raft of seasoned advisers with a cast of enablers who executed his orders and engaged his obsessions. They saw their mission as telling the president yes.
J F C
HarlandCorbin
Sounds like someone should have one of those shock collars on the neck of el presidente. Strong enough to knock him out. God knows, he probably wouldn't even notice after coming to again.
acdha
Russian Premier Resigns, as Putin Calls for Constitutional Overhaul
Wednesday January 15th, 2020 at 9:58 AM
MOSCOW — Prime Minister Dmitri A. Medvedev of Russia abruptly resigned on Wednesday, shortly after his political patron, President Vladimir V. Putin, sent the country's political elite into a swirl of speculation with proposals for sweeping constitutional changes that could extend his hold on power for many years.
Mr. Medvedev's cabinet also resigned.
In a statement issued by the Russian news agency Tass, Mr. Medvedev, a lawyer who has known Mr. Putin since they worked together in St. Petersburg in the 1990s, linked the unexpected resignations to an overhaul put forward earlier on Wednesday by Mr. Putin.
Mr. Putin proposed amending the Russian Constitution to expand the powers of Parliament and a body called the State Council, which currently carries little weight.
Mr. Medvedev said those moves would "introduce significant changes" to "the balance of power" between the executive, the legislature and the judiciary. Mr. Putin named him as deputy head of the Kremlin Security Council, a powerful body that includes defense and security officials.
It was not immediately clear whether the resignations signaled a rift at the top of Russia's hierarchy or were part of a coordinated but as-yet-unclear plan by Mr. Putin to reshape the political system that has been in place with only minor adjustments since the early 1990s.
Mr. Putin described the proposed constitutional changes in his annual state of the nation address as an effort to enhance democracy. They would be the first major overhaul of Russia's political system since 1993, when the country's first democratically elected president, Boris N. Yeltsin, sent tanks into the center of Moscow to subdue a rebellious legislature and then ordered a referendum to endorse a new constitution.
Mr. Putin, on a roll abroad but becalmed at home by Russia's stagnant economy, has a long record of wrong-footing friends and foes, and he has ensured that he has remained the arbiter on all important decisions in Russia since Mr. Yeltsin resigned on Dec 31, 1999.
The Constitution limits a president to two consecutive terms, meaning that without a change, Mr. Putin would have to step down in 2024.
The last time Mr. Putin faced the two-term limit, in 2008, Mr. Medvedev was elected president. Mr. Putin became prime minister, though he remained the real power in the government, and he returned to the presidency in 2012, when Mr. Medvedev became prime minister.
Mr. Putin, who has hinted at staying in power beyond 2024, could be planning a similar move, becoming the prime minister at the helm of a newly empowered Parliament, or head of the state council. But he offered few details on Wednesday about how governing power would be redistributed and gave no hint of his own plans.
When Mr. Medvedev held the presidency, he and his patron were not always in sync, to the annoyance of Mr. Putin, who undid several of his measures.
In particular, Mr. Putin was angry that Mr. Medvedev had declined to use a United Nations veto in 2011 to block airstrikes against Libya, attacks that helped topple the government of Col. Muammar el-Qaddafi.
Labor Dept. Rule to Curb Lawsuits by Franchise Workers
Sunday January 12th, 2020 at 9:53 PM
Workers could have more difficulty suing large companies for wrongdoing by contractors or franchisees under a rule announced on Sunday by the Labor Department.
Under the rule, which will take effect in March, employees of a fast-food franchise like a McDonald's restaurant, for example, may struggle to win a legal claim against the parent company if a franchisee violates minimum-wage and overtime laws.
"This final rule furthers President Trump's successful, governmentwide effort to address regulations that hinder the American economy and to promote economic growth," Secretary of Labor Eugene Scalia said in a statement.
The rule, which the department proposed last April, fleshes out its position on a concept known as joint employment. It effectively replaces a more labor-friendly Obama-era approach that the Trump administration withdrew in 2017, one of several departures from the previous administration in the area of employment and labor law.
After the rule takes effect, it could limit the ability of millions of workers to recover wages they are owed.
The contractors and franchisees that directly employ workers often have limited resources to pay legal penalties and settlements, making the large upstream companies with whom these employers have a relationship a more practical target.
"This resolution provides much-needed clarity for the 733,000 franchise establishments across America," said Robert Cresanti, the president and chief executive of the International Franchise Association, an industry group.
Advocates for worker have criticized the rule, arguing that it provides a road map of sorts for employers seeking to avoid liability for harmful practices.
Under the new rule, whether a company like McDonald's is a joint employer and could be held liable for violations committed by a franchisee hinges on four factors: whether it hires and fires employees of the franchisee; whether it supervises the employees and controls their schedules; whether it determines their pay; and whether it manages their employment records.
A company would typically have to meet some or all of these criteria to be considered a joint employer.
By contrast, under the approach set out by Barack Obama's Labor Department, a broader set of "economic realities" dictated whether the company should be considered a joint employer — among them, the degree of dependence of workers on the upstream company. For example, a company could be considered a joint employer of a contractor's employees if it provided facilities and equipment for the workers, and if the workers were easy to replace, even if the company didn't supervise the workers or hire and fire them.
Catherine Ruckelshaus, the general counsel of the National Employment Law Project, a worker advocacy group, said that the department's new rule essentially offers guidance to the courts, which courts aren't bound to follow. But, she added, the rule could still have significant practical impact because "many workers and employers and courts follow D.O.L. guidance."
The department's new rule is in line with a similar proposal by the National Labor Relations Board from 2018 that seeks to make it more difficult for employees of franchisees and contractors to hold parent companies liable for labor law violations, like firing workers because they are trying to unionize.
Under a ruling the labor board handed down during the Obama administration, a company could be considered a joint employer of workers at a contractor or franchisee if it exercised indirect control over them, not just direct control. But under the rule that the board proposed in 2018, the form of control would have to be "substantial, direct and immediate" for the company to be considered a joint employer. That would make it significantly less likely that large companies would be found liable.
The labor board is expected to finalize its own rule in the coming weeks.
Elections matter, etc...
Never-before-seen virus may be behind mystery outbreak in China
Wednesday January 8th, 2020 at 6:56 PM
A mysterious outbreak of viral pneumonia linked to a wild-animal market in the Chinese city of Wuhan may be caused by a never-before-seen virus, according to preliminary reports.
Officials in neighboring areas, meanwhile, are screening travelers for symptoms and planning quarantine zones to try to prevent any potential spread of the mystery disease.
As of Sunday, January 5, Wuhan Municipal Health Commission reported a total of 59 cases, including seven critically ill patients. There have been no reported deaths.
Those sickened are being held in isolation in medical facilities in Wuhan. Their main symptom is fever, according to the World Health Organization. But some patients have also experienced trouble breathing, and chest X-rays have shown invasive lesions in both lungs.
Though Wuhan health officials are closely monitoring 163 people who had close contact with those sickened, there's no evidence so far that the illness is spreading from person-to-person. No medical staff members have become ill in the outbreak, either. Those are both promising signs for containing the outbreak and stamping out the disease.
Wuhan officials report that the outbreak erupted in the latter half of December. Among the cases identified so far, the earliest onset of symptoms was pinned to December 12 and the latest illness began December 29.
Survey data collected during that window indicated that some patients with the mysterious pneumonia were working at the Wuhan South China Seafood City. The market sold seafood but also chickens, bats, marmots, and other wild animals. According to The Washington Post, it was a 1,000-booth bazaar that state media reports labeled as "filthy and messy."
Officials shut down the market January 1 and reported that it has been thoroughly sanitized.
Shadow of SARS
Such markets are notorious for helping spawn and spread disease. They often cram humans together with a variety of live animals, which may tote their own menageries of pathogens. Such close quarters, meat preparation, and poor hygienic conditions in the markets offer viruses an inordinate number of opportunities to recombine with each other, mutate, and leap to new species, including humans.
After the 2003 SARS outbreak, for instance, SARS-like viruses were found in masked palm civets and raccoon dogs sold for food in live-animal street markets in southern China, where the virus first emerged. Later, researchers also found the viruses circulating in China's horseshoe bat populations.
The outbreak of SARS (Severe Acute Respiratory Syndrome) in humans sparked panic as it spread to more than two dozen countries. It ultimately sickened over 8,000 people worldwide, killing 774.
Determined to keep such an outbreak from spreading like that again, regions near Wuhan are stepping up precautions amid the mystery illnesses. Hong Kong, for instance, has granted authorities quarantine powers for suspected cases, and residents there are stocking up on protective face masks and gowns. Thailand is screening airline passengers arriving from Wuhan, and authorities in Vietnam are tightening health checks at border gates.
Meanwhile, experts in Wuhan are working to figure out exactly what is causing the outbreak. Officials on Sunday said that "respiratory pathogens such as influenza, avian influenza, adenovirus, infectious atypical pneumonia (SARS), and the Middle East Respiratory Syndrome (MERS) have been excluded. Pathogen identification and cause tracing are still underway."
Virus más fina
This morning, January 8, The Wall Street Journal reported that Chinese scientists had identified a novel coronavirus in samples taken from one patient. The virus subsequently matched samples taken from some—but not all—other cases. The report was based on unnamed sources said to be familiar with the health investigation.
Coronaviruses are a species of virus named for the halo-like (corona) appearance they have under a microscope. Species members are known to cause common, mild-to-moderate respiratory infections in humans as well as rare, severe infections. SARS and MERS are both caused by coronaviruses. The species also causes respiratory, gastrointestinal, liver, and neurologic disease in animals, such as cats, dogs, mice, and birds, according to the Centers for Disease Control and Prevention.
According to the WSJ, the coronavirus found during the current outbreak was similar to SARS-precursor viruses found in bats. But the report notes that Wuhan investigators haven't concluded that the novel virus is behind the outbreak.
Regardless of the cause, health experts in China are optimistic that the outbreak will be contained and that response efforts will be better than they were during the SARS outbreak. Xu Jianguo, a former top Chinese public health official, noted to The Washington Post in a report today that "More than a decade has passed. It's impossible for something like SARS to happen again."
If I wanted to find a way to get pathogens to cross from species to species this is how I would make it happen: "The market sold seafood but also chickens, bats, marmots, and other wild animals."
New York Governor vetoes bill that would have made electric scooters legal
Saturday December 28th, 2019 at 2:18 PM
On Thursday, New York Governor Andrew Cuomo vetoed a widely supported bill that would have legalized electric bicycles and scooters. The bill was the result of extensive negotiations and compromises that sought to balance a set of competing interests. But in vetoing the bill, Cuomo cited an interest that he felt hadn't been properly considered: public safety, specifically the lack of a helmet requirement.
By waiting until the end of the year to veto the bill, Cuomo has left the legislature without an opportunity to override this veto, meaning the whole process will have to start again next year.
The whole situation has been extremely complex due to the number of technologies and constituencies involved. On the tech front, there are several types of vehicles, including the pedal-assist e-bikes
we test rode
earlier this year. These require the user to pedal before the motor will act and are typically limited to speeds of just under 30mph. Separately, there are electric bikes where the motor will operate without the user doing anything other than operating a throttle, which have become favorites of the legions of food delivery people in New York City.
Technically, however, the latter are motorized vehicles, and therefore subject to vehicle registration rules—or they would be, if the state's vehicle registration rules allowed that. This has enabled the police to fine delivery riders at will, leading to accusations that the lack of policy was anti-immigrant and/or a form of class warfare.
Finally, there are scooters and related items like motorized skateboards and balance boards, which also fall into the motorized vehicle category. Here, the push for legalization came largely from the scooter rental companies. But a feature central to their business model—store the scooters in public spaces—raised fears of chaos on the already crowded New York City sidewalks. These would also compete with the popular citi-bike program that rolled out with heavy government support.
In addition to the question of what you can ride, there's the issue of where you can ride it. New York City has put a lot of effort into producing space for bicyclists to ride free of the dangers provided by motorized vehicles, putting in physically separated bike lanes on streets, in parks, and across many of the city's iconic bridges. In the absence of any rules, these lanes have become free-for-alls, leaving bicyclists dodging powered vehicles that could travel well in excess of 20 miles an hour uphill.
Balancing all of these complications probably explains why the legalization process has been so slow in the Empire State. But this year, the legislature managed to forge a number of compromises. All of the vehicles would be legalized without requiring state registration. Electric scooter rentals would be prohibited in Manhattan; access to the remaining markets in the state was enough to get the rental companies on board. And, while electric vehicles would be allowed in most bike lanes, they'd be kept off the popular loop around the Manhattan waterfront.
Food deliveries would occur without incident.
But nearby Elizabeth New Jersey had legalized scooters earlier in the year, only to see a rider killed in a collision with a tow truck shortly after. That may have helped motivate Cuomo's demand for mandatory helmet use to be included with any bill. (The state mandates helmets for bicyclists under the age of 14.) The relatively high speeds achievable on some bikes and scooters would provide further motivation.
Still, that doesn't explain Cuomo's decision to hold his veto until after it was too late for the legislature to modify the bill during this year's legislative session. Due to the wide support it achieved (it passed the state Senate by a 56-5 vote) and the number of constituencies interested in seeing something pass, it will almost certainly be back in 2020.
Clearly this is a failure of the NY legislative process if the governor can veto bills at the last minute where a veto isn't possible. What a laughing stock the separation of powers is in NY state.
Next Page of Stories


text:
Stay up-to-date with DIFC's response to Covid-19
Embedded Finance MENA
28 Feb 2023 - 02 Mar 2023, 8:00 am - 3:30 pm
We know that a supportive business environment is key to helping your company thrive. Learn more about what DIFC has to offer, from easy set-up processes to an enabling infrastructure and a variety of office spaces.
Starting a Business in DIFC
Operating in DIFC
Areas of Business
DIFC Family Wealth Centre
DIFC Academy
DIFC Innovation Hub
Types of Spaces
Jefferies Receives Licence to Operate its Middle East Business from DIFC
The CEBC Annual Summit
31 Jan 2023, 8:00 am - 5:00 pm
Shangri La Hotel - Dubai
The DIFC is more than just a world-class financial centre. Explore the district beyond the office, from a carefully curated collection of retailers, to a diverse range of art galleries and some of the city's best restaurants.
Surprisingly DIFC
Gate Avenue
Gate District
Gate Village
Sustainability takes centre stage for DIFC's 14th edition of Art Nights
Download our DIFC Connect App
Stay up to date with the latest news, announcements and insights from across the Centre by visiting our Newsroom.
Dubai International Financial Centre (DIFC) is one of the world's most advanced financial centres, and the leading financial hub for the Middle East, Africa and South Asia (MEASA), which comprises 72 countries with an approximate population of 3 billion and a nominal GDP of US$ 8 trillion.
The DIFC District
DIFC Boards
DIFC Management Team
Our Path to COP28
DSFWG
Public Register
Log-in now to access a number of services available to our clients and visitors at the click of a button.
client portal retail portal
venue booking visitor parking
Explore the world-class ecosystem that will help your business thrive and grow.
Learn more about the robust legal and regulatory framework that provides a safe and secure platform to DIFC's clients.
Join the global finance community to advance the industry's approach to climate and ESG principles through our Path to COP28 initiative.
More than shopping, DIFC is about games and winning too. Come to the Centre and be surprised.
Celebrate success with a business lunch or dinner with family at some of Dubai's best restaurants in DIFC.
DIFC Welcomes the…
DIFC Welcomes the Region's First Legal Chambers from the UK, Outer Temple
Press Release 07 Nov 2016 12:00 pm
First of its kind barristers' chambers in the region will solidify the reputation of DIFC as a specialist hub for international business transactions, dispute resolution and contract enforcement through DIFC Courts
Vote of confidence in the independent legal architecture of DIFC
Move will encourage growth of bespoke new legal services products
Dubai-UAE: 7 November 2016 – Dubai International Financial Centre (DIFC), the leading financial hub for the Middle East, Africa and South Asia region, has today announced the opening of the first specialist barristers' chambers in the region. The move demonstrates the confidence in the international legal structures of DIFC.
Outer Temple Chambers (OTC), from London, UK, is a leading set of expert, global barristers (lawyers who practise in international and English common law courts and arbitral tribunals). They are specialists in commercial litigation and arbitration, company and employment law-multinational and cross-border law, regulatory issues, Islamic Finance and wealth management, and work in the world's leading courts, including in DIFC Courts. Their services will benefit the entire regional business community, regardless of whether or not businesses are registered in DIFC, as long as they wish to use the DIFC Courts.
There are many specialist court lawyers and barristers already practising English common law in DIFC Courts, including OTC barristers. They have historically been called on when companies or individuals need representation in Court or on a highly technical legal, niche, issue.
The new Chambers will bring together multiple experts along with a body of legal knowledge, service offerings and knowledge transfer schemes for the benefit of the entire legal profession in the region.
DIFC already hosts more than 1,500 firms and 21,000 professionals, and is home to 56 law firms, mainly solicitors handling commercial transactional law.
This new move from OTC builds on that by providing them, as well as the wider Dubai legal community, with recourse to highly technical and world-leading legal opinion and representation in a court system which is now on a par with the rest of the world.
H.E. Essa Kazim, Governor of DIFC, stated: "Having Outer Temple Chambers opening in DIFC is a testament to the credibility of the Centre's regulatory and legal infrastructure. To date, no chambers exist in the region with such a wealth of specialist expertise. This will help in driving the growth of the legal services sector as well as increase the attractiveness of DIFC as a place to both do, and resolve business."
Andrew Spink, QC (Queen's Counsel), Head of Chambers and Vice-Chair of the Commercial Bar Association, said: "We are delighted to be a part of DIFC, which is paving the way for so many international businesses to operate successfully and securely and to grow in this part of the world. There are enormous and exciting opportunities and of course some challenges involved in developing DIFC as a regional hub. We are looking forward to contributing to the success of this process, not just by providing sound legal expertise, but also by helping to train the next generation of aspiring lawyers for the benefit of the whole sector."
OTC is also exploring options for the training and development of barristers and other legal specialists from the Emirati community who can practise international standard law in the UAE's local court system after training and experience in the UK and in DIFC.
DWIC
08 Mar 2023, - 09 Mar 2023, 8:00 am - 5:00 pm
The Ritz-Carlton DIFC
Press Release - Outer Temple Chambers joins DIFC - Arabic
Press Release - Outer Temple Chambers joins DIFC - English
Rapyd brings the future of fintech to Dubai: First Israeli company on the road to be regulated in UAE
DIFC Announces Proposed Amendments to the DIFC Prescribed Company Regulations for Consultation
Experience unique, futuristic, digital artworks at the 13th edition of DIFC Art Nights
DIFC Connect App
Download for ios Download for ios
Scan the QR code for
Download for android Download for android
Online Data Protection Policy
Quality Management Policy
Photoshoot Request
Copyright © 2023 DIFC. ALL RIGHTS RESERVED.
We will keep you informed on the items that matter to you most.
More than a world-class financial centre, DIFC is also a vibrant community of retail and lifestyle. Sign up to our mailing list and we will keep you informed on the items that matter to you most.
Do you work in the DIFC?


text:
package org.mifos.application.fees.struts.actionforms;

import java.util.Locale;

import junit.framework.Assert;

import org.apache.struts.action.ActionErrors;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mifos.framework.TestUtils;

public class FeeActionFormTest {
    Locale locale = TestUtils.ukLocale();
    FeeActionForm form;

    @Before
    public void setUp() {
        form = new FeeActionForm();
    }

    @After
    public void tearDown() {
        form = null;
    }

    @Test
    public void testIsAmountValidWithNonNumberString() {
        form.setAmount("aaa");
        Assert.assertFalse(isAmountValid(form));
    }

    @Test
    public void testIsAmountValidWithValidString() {
        form.setAmount("2.5");
        Assert.assertTrue(isAmountValid(form));
    }

    @Test
    public void testIsAmountValidWithTooMuchPrecision() {
        form.setAmount("2.12345");
        Assert.assertFalse(isAmountValid(form));
    }

    @Test
    public void testIsAmountValidWithZero() {
        form.setAmount("0.0");
        Assert.assertFalse(isAmountValid(form));
    }

    @Test
    public void testIsAmountValidWithTooLargeANumber() {
        form.setAmount("12345678.5");
        Assert.assertFalse(isAmountValid(form));
    }

    private boolean isAmountValid(FeeActionForm form) {
        ActionErrors errors = new ActionErrors();
        form.validateAmount(errors, locale);
        return errors.size() == 0;
    }
}

redpajama_set_name: RedPajamaGithub


text:
using System;
using System.Collections.Generic;
using System.Linq;
using static TsActivexGen.TSParameterType;
using static System.Environment;
using static System.Linq.Enumerable;
using System.Text.RegularExpressions;
using static System.Globalization.NumberStyles;

namespace TsActivexGen {
    public static class Functions {
        public static KeyValuePair<TKey, TValue> KVP<TKey, TValue>(TKey key, TValue value) => new KeyValuePair<TKey, TValue>(key, value);

        public static string RelativeName(string absoluteType, string withinNamespace) {
            if (IsLiteralTypeName(absoluteType)) { return absoluteType; }

            if (absoluteType.Contains("<")) {
                //currently, TSInterfaceDescription.Extends is a HashSet<string>, which means it might contain generic types within the string
                //we're not expecting any interface should extend from a generic types
                throw new NotImplementedException("Parse string as generic type");
            }

            var typeParts = absoluteType.Split('.');
            if (typeParts.Length <= 1) { return absoluteType; }
            var nsParts = withinNamespace.Split('.');
            var finalParts = typeParts.SkipWhile((x, i) => i < nsParts.Length && x == nsParts[i]).ToList();
            if (finalParts.Intersect(nsParts).Any()) { return absoluteType; }  //e.g. com.sun.star.inspection.XPropertyHandler within namespace com.sun.star.form.inspection, will otherwise resolve to form.inspection
            return finalParts.Joined(".");
        }
        public static (string @namespace, string name) SplitName(string typename, string delimiter = ".") {
            if (IsLiteralTypeName(typename)) { return ("", typename); }
            switch (typename.LastIndexOf(delimiter)) {
                case int x when x < 0:
                    return ("", typename);
                case int x when x == 0:
                    return ("", typename.Substring(1));
                case int x:
                    return (typename.Substring(0, x), typename.Substring(x + 1));
            }
        }
        public static bool IsLiteralTypeName(string typename) {
            if (typename.IsNullOrEmpty()) { return false; }
            if (typename.In(new[] { "true", "false", "null", "undefined" }, StringComparison.Ordinal)) { return true; }
            var firstChar = typename[0];
            if (char.IsLetter(firstChar) || firstChar == '_') { return false; }
            return true;
        }
        public static string MakeNamespace(string part1, string part2) {
            if (part1.IsNullOrEmpty() || part2.IsNullOrEmpty()) {
                return part1 + part2;
            } else {
                return $"{part1}.{part2}";
            }
        }

        public static string GetTypeString(ITSType type, string ns, bool asConstraint = false) {
            string ret = null;

            switch (type) {
                case TSSimpleType x when x.FullName == "Array":
                    ret = "[]";
                    break;
                case TSSimpleType x:
                    ret = RelativeName(x.FullName, ns);
                    break;
                case TSTupleType x:
                    ret = $"[{x.Members.Joined(", ", y => GetTypeString(y, ns))}]";
                    break;
                case TSObjectType x:
                    var joined = x.Members.JoinedKVP((key, val) => {
                        var @readonly = val.@readonly ? "readonly " : "";
                        if (key.Contains(".")) { key = $"'{key}'"; }
                        return $"{@readonly}{key}: {GetTypeString(val.type, ns)}";
                    }, ", ");
                    ret = $"{{{joined}}}";
                    break;
                case TSFunctionType x:
                    ret = $"({x.FunctionDescription.Parameters.Joined(", ", y => GetParameterString(y, ns))}) => {GetTypeString(x.FunctionDescription.ReturnType, ns)}";
                    break;
                case TSComposedType x:
                    ret = x.Parts.Select(y => GetTypeString(y, ns)).OrderBy(y => y).Joined($" {x.Operator} ");
                    break;
                case TSGenericType x when x.Name == "Array" && x.Parameters.Count == 1 && (x.Parameters.Single() is TSSimpleType || x.Parameters.Single() is TSPlaceholder):
                    var prm = x.Parameters.Single();
                    ret = $"{GetTypeString(prm, ns)}[]";
                    break;
                case TSGenericType x:
                    ret = $"{x.Name}<{x.Parameters.Joined(", ", y => GetTypeString(y, ns))}>";
                    break;
                case TSPlaceholder x:
                    var @default = "";
                    var extends = "";
                    if (asConstraint) {
                        if (x.Default != null) { @default = $" = {GetTypeString(x.Default, ns)}"; }
                        if (x.Extends != null) { extends = $" extends {GetTypeString(x.Extends, ns)}"; }
                    }
                    ret = $"{x.Name}{extends}{@default}";
                    break;
                case TSKeyOf x:
                    ret = $"keyof {GetTypeString(x.Operand, ns)}";
                    break;
                case TSLookup x:
                    ret = $"{GetTypeString(x.Type, ns)}[{x.Accessor}]";
                    break;
                default:
                    if (type != null) { throw new NotImplementedException(); }
                    break;
            }

            return ret;
        }

        public static string GetParameterString(KeyValuePair<string, TSParameterDescription> x, string ns) {
            var name = x.Key;
            var parameterDescription = x.Value;
            if (parameterDescription.ParameterType == Rest) {
                name = "..." + name;
            } else if (parameterDescription.ParameterType == Optional) {
                name += "?";
            }
            return $"{name}: {GetTypeString(parameterDescription.Type, ns)}";
        }

        public static string NewLines(int count) => Repeat(NewLine, count).Joined("");

        public static (string first, string rest) FirstPathPart(string path, string delimiter = ".") {
            if (path.IsNullOrEmpty()) { return ("", ""); }
            var parts = path.Split(new[] { delimiter }, StringSplitOptions.None);
            return (parts[0], parts.Skip(1).Joined(delimiter));
        }

        //TODO currently handles generic and simple types, not other type combinations e.g. intersection, union types
        //TODO handle array types as well
        public static ITSType ParseTypeName(string typename, Dictionary<string, ITSType> mapping = null) {
            if (typename.IsNullOrEmpty()) { return TSSimpleType.Void; }

            var root = new SimpleTreeNode<ITSType>();
            var currentNode = root;

            for (var currentPos = 0; currentPos < typename.Length; currentPos++) {
                switch (typename[currentPos]) {
                    case '&':
                    case '|':
                        throw new NotImplementedException("Intersection / union types not implemented");
                    case var c when char.IsWhiteSpace(c):
                    case '.': //ignore initial period; other periods will be handled together with the identifier
                        continue;
                    case var c when char.IsLetter(c) || c == '_':
                        var j = currentPos + 1;
                        for (; j < typename.Length; j++) {
                            var nextChar = typename[j];
                            if (char.IsLetter(nextChar) || nextChar.In("0123456789_.")) { continue; }
                            break;
                        }
                        var identifier = typename.Substring(currentPos, j - currentPos);
                        if (mapping != null && mapping.TryGetValue(identifier, out var result)) {
                            currentNode.Data = result;
                        } else {
                            currentNode.Data = (TSSimpleType)identifier;
                        }
                        currentPos = j - 1; //because the for loop will advance currentPos
                        break;
                    case '<':
                        if (currentNode.Data == null) { throw new NullReferenceException(); }
                        currentNode.Data = new TSGenericType() { Name = (currentNode.Data as TSSimpleType).FullName };
                        currentNode = currentNode.AddChild((ITSType)(TSSimpleType)"");
                        break;
                    case '>':
                        if (currentNode.Parent.Data is TSPlaceholder) {
                            currentNode = currentNode.Parent<ITSType, SimpleTreeNode<ITSType>>().Parent<ITSType, SimpleTreeNode<ITSType>>();
                        } else {
                            currentNode = currentNode.Parent<ITSType, SimpleTreeNode<ITSType>>();
                        }
                        break;
                    case ',':
                        currentNode = currentNode.AddSibling<ITSType, SimpleTreeNode<ITSType>>((TSSimpleType)"");
                        break;
                    case '=':
                        var placeholder = new TSPlaceholder() { Name = (currentNode.Data as TSSimpleType).FullName };
                        currentNode.Data = placeholder;
                        currentNode = currentNode.AddChild((ITSType)(TSSimpleType)"");
                        break;
                    default:
                        throw new NotImplementedException();
                }
            }

            fillNode(root);
            root.Descendants<ITSType, SimpleTreeNode<ITSType>>().ForEach(fillNode);
            return root.Data;

            void fillNode(SimpleTreeNode<ITSType> node) {
                switch (node.Data) {
                    case TSSimpleType x:
                        break;
                    case TSGenericType x:
                        node.Children.Select(y => y.Data).AddRangeTo(x.Parameters);
                        break;
                    case TSPlaceholder x:
                        x.Default = node.Children.Single().Data;
                        break;
                    default:
                        throw new NotImplementedException();
                }
            }
        }

        public static T IIFE<T>(Func<T> generator) => generator();

        /// <summary>Generates a string representation of literal values</summary>
        public static string AsString(object value) {
            var t = value.GetType().UnderlyingIfNullable();
            if (t == typeof(string)) {
                return $"\'{(value as string).Replace("'", "\\'")}\'";
            } else if (t.IsNumeric()) {
                return $"{value}";
            } else if (t == typeof(bool)) {
                return (bool)value ? "true" : "false";
            } else if (t==typeof(DateTime)) {
                return ((DateTime)value).ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
            }
            throw new Exception($"Unable to generate string representation of value '{value}' of type '{t.Name}'");
        }

        private static Regex reHex = new Regex("(-)?(0x)?(.+)");
        public static long ParseLong(string s) {
            if (!s.ContainsAny('x', 'X', '&')) { return long.Parse(s); }
            if (s.Contains(".")) { throw new InvalidOperationException("Use parseDecimal"); }
            var groups = reHex.Match(s).Groups.Cast<Group>().ToList();
            var ret = long.Parse(groups[3].Value, HexNumber);
            if (groups[1].Success) { ret = -ret; }
            return ret;
        }
        public static decimal ParseDecimal(string s) {
            if (!s.ContainsAny('x', 'X', '&')) { return decimal.Parse(s); }
            var groups = reHex.Match(s).Groups.Cast<Group>().ToList();
            decimal ret;
            if (s.Contains(".")) {
                if (groups[2].Success) { throw new InvalidOperationException("No hex together with decimal"); }
                ret = decimal.Parse(groups[3].Value);
            } else {
                ret = long.Parse(groups[3].Value, HexNumber);
            }
            if (groups[1].Success) { ret = -ret; }
            return ret;
        }

        public static ITSType MappedType(ITSType t, Func<ITSType, ITSType> mapper) {
            switch (t) {
                case TSSimpleType x:
                case TSPlaceholder y:
                    break;

                case TSGenericType x:
                    for (int i = 0; i < x.Parameters.Count; i++) {
                        x.Parameters[i] = mapper(x.Parameters[i]);
                    }
                    break;
                case TSComposedType x:
                    for (int i = 0; i < x.Parts.Count; i++) {
                        var toAdd = x.Parts.Select(mapper).ToList();
                        x.Parts.Clear();
                        toAdd.AddRangeTo(x.Parts);
                    }
                    break;
                case TSTupleType x:
                    for (int i = 0; i < x.Members.Count; i++) {
                        x.Members[i] = mapper(x.Members[i]);
                    }
                    break;
                case TSObjectType x:
                    x.Members.ForEachKVP((name, t2) => {
                        x.Members[name] = (mapper(t2.type), t2.@readonly);
                    });
                    break;
                case TSFunctionType x:
                    var m = x.FunctionDescription;
                    m.ReturnType = mapper(m.ReturnType);
                    for (int i = 0; i < m.Parameters.Count; i++) {
                        var (name, p) = m.Parameters[i];
                        p.Type = mapper(p.Type);
                    }
                    break;
                default:
                    throw new NotImplementedException();
            }
            return mapper(t);
        }

        public static IEnumerable<T> WrappedSequence<T>(T item) => Repeat(item, 1);

        public static TreeNodeVM<TData> CreateTreeNode<TData>(TData data, TreeNodeVM<TData> parent = null) => new TreeNodeVM<TData>(data) { Parent=parent };
    }
}


text:
typedef struct _PussInterface	PussInterface;

#ifdef _PUSS_IMPLEMENT
	#define _LUAPROXY_NOT_USE_SYMBOL_MACROS
#else
	extern PussInterface*			__puss_iface__;

	#define	__lua_proxy_sym__(sym)	(*(__puss_iface__->lua_proxy.sym))

	#define puss_interface_check(L,IFace)			(IFace*)((*(__puss_iface__->interface_check))((L), #IFace))
	#define puss_interface_register(L,name,iface)	(*(__puss_iface__->interface_register))((L),(name),(iface))
	#define puss_push_consts_table(L)				(*(__puss_iface__->push_consts_table))((L))
#endif

#include "luaproxy.h"

PUSS_DECLS_BEGIN

struct _PussInterface {
	struct LuaProxy	lua_proxy;

	void* (*interface_check)(lua_State* L, const char* name);
	void  (*interface_register)(lua_State* L, const char* name, void* iface);
	void  (*push_consts_table)(lua_State* L);
};

#ifdef _WIN32
	#define PUSS_PLUGIN_EXPORT	PUSS_EXTERN_C __declspec(dllexport)
#else
	#define PUSS_PLUGIN_EXPORT	PUSS_EXTERN_C __attribute__ ((visibility("default")))
#endif

// puss plugin usage :
//   local plugin = puss.require(plugin_name)
//
// puss plugin implements example :
//   struct SomeIFace {
//      void* (*foo)(int, const char*);
//   };
//
//   static struct SomeIFace some_iface = { foo };
//
//   PussInterface* __puss_iface__ = NULL;
//
//   PUSS_PLUGIN_EXPORT int __puss_plugin_init__(lua_State* L, PussInterface* puss) {
//     __puss_iface__ = puss;
//     puss_interface_register(L, "SomeIFace", &some_iface); // register C interface
//     luaL_newlib(L, some_methods); // lua interface
//     reutrn 1;
//   }
//
typedef int (*PussPluginInit)(lua_State* L, PussInterface* puss);

PUSS_DECLS_END

#endif//_INC_PUSS_LUA_PLUGIN_H_


text:
Video: Navy Test-Fires Electromagnetic Railgun
By The Maritime Executive 2017-03-27 13:01:35
The U.S. Navy Office of Naval Research has released new video of a test of BAE Systems' electromagnetic railgun, a hypervelocity weapon that has a maximum range exceeding 100 miles.
The advanced system uses a massive pulse of electrical power to accelerate a sliding conductive armature down two parallel rails. The armature contains a slug, which breaks free of its sabot upon exiting the weapon at muzzle velocities of up to 4,500 miles per hour (6,600 feet per second). It is a kinetic energy weapon, and the projectile carries no explosive warhead. The Navy envisions its use in naval surface fire support, land strikes, ship defense and surface warfare. Previous announcements from ONR have suggested a potential role in ballistic missile defense as well.
Unlike laser energy weapons, the railgun features over-the-horizon surface strike capability thanks to its projectile's ballistic flight path. It also offers a key benefit for safety and survivability: with no explosive propellants or warheads, its ammunition magazines are not vulnerable to detonation in the event of a shipboard casualty or an enemy strike. In addition, its rounds are smaller than traditional shells, allowing a vessel to carry more ammunition in the same amount of space. And at $25,000 per round, firing it off is much less costly than expending a Tomahawk or SM-2 missile.
The railgun's energy requirements are part of the rationale behind the integrated electrical systems on the futuristic Zumwalt class destroyers. This complex ships' service system can divert electricity from the main engines to power the vessel's weapons at will, and the third vessel in the class may receive a railgun instead of one of its two 155mm cannon.
General Atomics was developing a competing railgun design, but BAE Systems' model was selected for the project's second phase. General Atomics is privately funding its own research and test efforts for a land-based version, in coordination with the Army.
The Office of Naval Research says that its railgun technology is now moving towards the acquisition stage, but there are still several key "research opportunities," including better thermal management for the gun's slender launch rails; extending the service life of the equipment; developing high-strength dielectric structural materials; and reducing the size of associated power systems and control electronics. Experts say that the limited durability of a railgun's rails under the stress of repeated firing is an especially serious challenge for the technology.
MarEx Podcast
IN THE KNOW Podcast 10: Jaakko Eskola, President & CEO of Wärtsilä
By The Maritime Executive
IN THE KNOW Podcast 9: World Congress on Maritime Heritage
IN THE KNOW Podcast 8: Tom Crowley on LNG as a Marine Fuel
IN THE KNOW Podcast 7: Planning for Real-World Cyber Threats
IN THE KNOW Podcast 6: USMMA at 75
By Paul Benecki
IN THE KNOW Podcast 5: Changing Weather
© Copyright 2019 The Maritime Executive, LLC. All rights reserved.


.NET Interview Questions: - Mention object pooling in .NET?
This is the most practical oriented .Net Interview Questions which may be asked during the Interview by the Interviewer.
COM+ reduces overhead by not creating object from scratch. So in COM+ when object is activated it's activated, from pool and when it has deactivated it's pushed back to the pool. Object pooling is configures by using the "ObjectPoolingAttribute" to the class.
Note:- When a class is marked with object pooling attribute it can not be inherited.
' Method contents go here.
Above is a sample code, which has the "Object Pooling" attribute defined. Below is a sample code, which uses the class.
Above is a sample code, which uses the object pooled object. Note the Dispose Object () This ensures its safe return to the object pool.
From more on author's blog related to Dotnet interview questions and answers click and visit.


text:
Saldanha zone investments to create 300 jobs
Cape Town - The Saldanha Bay Industrial Development Zone (IDZ) is drawing strong international interest with several lease agreements signed and a surge of global oil and gas companies negotiating joint ventures with South African firms.
Alan Winde, Western Cape Minister of Finance, Economic Development and Tourism, said the Saldanha Bay IDZ, which was officially launched late last year, was off to a good start.
"The Saldanha Bay IDZ licensing company has signed six lease agreements with international and South African oil and gas companies. These include firms specialising in oilfield services, oil rig operations, logistics operators, ship repair, engineering and market support," said Winde.
Final negotiations for lease agreements are taking place between the licensing company, two international oil field service companies and a South African rig repair firm.
"In some of the most exciting developments, the licensing company is in talks with an international consortium to develop a rig module building facility," said Winde.
"We are also aware of a R200m investment by a global oil servicing company which is set to create 300 jobs.
"Several leading international companies are increasing their staff numbers in their South African companies."
Details on individual companies are bound by non-disclosure agreements and cannot be released at this stage.
Winde said the Western Cape government has invested R25m over a five-year period in the process of creating the IDZ.
"This is the culmination of years of collaboration between all spheres of government and the Saldanha Bay community. The IDZ has the potential to become one of the most important levers for jobs and economic growth for the Western Cape," he said.
"Early indications are that it will indeed be a major catalyst for foreign direct investment and increased employment opportunities for our residents in the medium to long term."
alan windesaldanhaoil and gaseconomy


At Custom Promotional Products, we are in tune with the trends and can add creativity, innovation and imagination to your program.
We have access to research resources that allow us to offer thousands of ideas to help build brand awareness. Custom Promotional can provide you with products for marketing and incentive programs, tradeshow give-aways, golf tournaments or safety programs...anytime you require swag, gifts, awards, or any other promotional product solutions - whether a USB flashdrive, shirt, pen, mug, notebook, lapel pin, stress reliever, hat or golf ball - please contact us.
Our dedication, passion and service are what make us stand out!


text:
Q: What is the opt in the __asm grammar and how can semi-colons be used as comments without autoformatting? What is the meaning of opt in the grammar for invoking the inline assembler with __asm keyword?  Is it trying to say the ending semi-colons are optional?
Semi-colons are usually used as comments in assembly.  I find when I'm not using any semi-colons in my assembly-instruction-list, after typing one for a comment Visual Studio will do very strange autoformatting of the assembly instructions that I cannot seem to disable or make sense of.
Grammar
asm-block:
    __asm assembly-instruction ;opt
    __asm { assembly-instruction-list } ;opt

assembly-instruction-list:
    assembly-instruction ;opt
    assembly-instruction ; assembly-instruction-list ;opt

Source: https://learn.microsoft.com/en-us/cpp/assembler/inline/asm