text:
Rediff.com » News » China versus the people of Hong Kong
China versus the people of Hong Kong
By JAYADEVA RANADE
India needs to take note of China's assertiveness in implementing the national security law in Hong Kong as also its recently exhibited sensitivity to criticism of Xi Jinping by the Indian media, notes former senior RA&W officer and China expert Jayadeva Ranade.
IMAGE: A supporter of the Apple Daily reads a copy of the newspaper to support media mogul Jimmy Lai, founder of the Apple Daily, after he was arrested by the national security unit in Hong Kong, August 11, 2020. Photograph: Tyrone Siu/Reuters
There is simmering discontent in Hong Kong after Beijing imposed the National Security Law.
This has the potential to boil over.
If it does, it would raise doubts over the legitimacy of the Chinese Communist party's claims over Hong Kong and Beijing's oft-touted 'one country, two systems' formula as the panacea for the reunification of Macau, Hong Kong and Taiwan with the mainland.
Already, Taiwan President Tsai Ing-wen has publicly questioned the validity of the 'one country, two systems' formula.
Troubles in Hong Kong or the emergence of an active dissident movement would be a major embarrassment for Chinese President Xi Jinping and the Communist party.
IMAGE: Supporters hold copies of an issue of the Apple Daily newspaper and shout slogans as Hong Kong pro-democracy media tycoon and Apple Daily founder Jimmy Lai, who was arrested under the new national security law, leaves the Mong Kok police station after being released on bail, August 12, 2020. Photograph: Anthony Kwan/Getty Images
The national security law passed by China's national people's congress standing committee on June 30, 2020, amidst considerable concern and controversy in Hong Kong, effectively confirms Beijing's control over Hong Kong including its judiciary.
It violates the provisions of the handover in 1997 and the guarantees given by China under the 'one country, two systems', allowing Hong Kong to retain some fundamental rights.
The national security law provisions are sweeping and extend to persons even outside the region accused of offences against the Hong Kong special administrative region.
They also stipulate stricter control over the services of foreign countries, international organisations, NGOs and foreign news agencies.
The after effects of the national security law were felt immediately, with Hong Kong-based experts saying it will have a severe impact on freedom of expression and reports of people deleting Facebook posts.
There were repercussions abroad too with American professors advised to exercise caution while teaching courses.
At Princeton university, students in a Chinese politics class will use codes instead of names to protect their identities while in Amherst a professor is considering anonymous online chats so students can speak freely.
IMAGE: Hong Kong media tycoon and Apple Daily founder Jimmy Lai is escorted by the police to the Royal Hong Kong Yacht Club for evidence collection as part of the ongoing investigation under the national security law, August 11, 2020. Photograph: Anthony Kwan/Getty Images
Apprehensions have grown after the arrests of Apple Daily owner Jimmy Lai and 23-year old democracy activist Agnes Chow on August 10.
Indicating the mood in Hong Kong, many residents came out in a strong show of support and purchased extra copies of the Apple Daily -- whose sales jumped five-fold!
The paper declared 'Apple Daily will fight on!'
A student union representative placed an advertisement declaring: 'Through blood, toil, tears and sweat, we will strive on.'
'However difficult it may be, Hong Kongers will eventually restore our city.'/
IMAGE: Hong Kong democracy activist Agnes Chow speaks to the media after being released on bail from the Tai Po police station, August 11, 2020. Photograph: Billy H C Kwok/Getty Images
Many pro-democracy activists including Simon Cheng, a former employee of the British consulate in Hong Kong, have sought asylum in the UK where they announced plans to establish a 'parliament-in-exile'.
One pro-democracy activist said 'People will not bow to this suppression ... there will be all sorts of innovative and symbolic acts.'
People have been urged to make purchases from shops that support the pro-democracy movement.
The determination of the pro-democracy activists and huge pro-democracy marches suggest the ground is fertile for disruptive protests in Hong Kong.
IMAGE: A woman holds a poster showing British consulate worker Simon Cheung, who was detained by Chinese officials, at a gathering outside the British consulate in Hong Kong to petition the British government to assist in his release, August 21, 2019.
Cheung is now in Britain and hopes to establish a 'parliament in exile'.Photograph: Chris McGrath/Getty Images
The Communist party-owned Global Times (August 17) reacted to the developments, warning that 'Hong Kong secessionists fleeing to the UK and promoting the "parliament in exile" severely breach' the national security law and 'that those people, along with UK organisations or individuals who sponsored them, will face legal punishment no matter their whereabouts and face severe sanctions from China'.
The warning was repeated by China's Ambassador to the UK, Liu Xiaoming.
Whether the UK -- which hasn't yet shown the spine to confront China -- will support a 'parliament-in-exile' will be a major factor determining whether Hong Kong acquiesces to the national security law.
IMAGE: Pro-Beijing protesters take part in a demonstration outside the United States consulate in Hong Kong, August 4, 2020. Photograph: Anthony Kwan/Getty Images
The US had threatened sanctions against officials in China and Hong Kong taking active part in framing or implementing repressive policies against the people.
This is likely to make many Hong Kong officials, who have properties and funds in the US, Canada etc, vulnerable.
Hong Kong Chief Executive Carrie Lam's younger son Joshua Lam Yeuk-hay, who was pursuing a PhD in mathematics at Harvard, has had to leave Boston and return to Hong Kong.
The US has now withdrawn trade benefits which will adversely impact Hong Kong's trade.
It mandated that all goods made in Hong Kong for export to the United States will need to be labelled as 'Made in China' after September 25, 2020.
Such restrictions could impact Hong Kong's position as the window for China's imports of dual use technology and equipment at a time when the US is already squeezing the supply of critical hi-tech items to China.
On August 19, the US state department notified that agreements providing for the surrender of fugitive offenders, transfer of sentenced persons, and reciprocal tax exemptions on income derived from the international operation of ships, had been suspended or terminated.
IMAGE: Taiwan President Tsai Ing-wen speaks to the media in Taipei, August 12, 2020. Photograph: Ann Wang/Reuters
Taiwan has added an international dimension to these developments.
Boldly backing the pro-democracy movement, Taiwan's President Tsai Ing-wen on June 18 announced formation of the 'Taiwan-Hongkong Services and Exchange Office' to assist Hong Kong residents coming to Taiwan.
On June 30, she tweeted 'China's disregard for the will of Hong Kong's people proves that "one country, two systems" is not viable.'
'Many things have changed in #HongKong since 1997, but #Taiwan's commitment to supporting those #HKers who want freedom & democracy has never changed.'
With this, Tsai confirmed unacceptability of the 'one country, two systems' formula putting a question mark on China's plans for reunification.
The potential for discontent in Hong Kong to evolve into long-term civil disorder will be a concern for the Communist party leadership.
Such a movement could undermine Xi Jinping's position and make it difficult for the Communist party to justify the reunification of Taiwan with the mainland.
At the least, it will delay the 'China Dream'.
India too needs to take note of China's assertiveness in implementing the national security law as also its recently exhibited sensitivity to criticism of Xi Jinping by the Indian media.
It would be prudent to examine and terminate any agreements/MoUs with China assuring the return, or incarceration, of individuals sentenced to imprisonment by China.
Jayadeva Ranade, former Additional Secretary, Cabinet Secretariat, Government of India, is the President, Centre for China Analysis and Strategy.
Feature Presentation: Ashish Narsale/ Rediff.com
JAYADEVA RANADE
How will Biden deal with China?
'It's very difficult to negotiate with the Chinese'
How this Indian general kept the Chinese in check
The War Against Coronavirus
India is paying for Modi's wooing of Xi
We can't depend on the US to fight China
News India | Latest News India | Bollywood News | Indian Cricket Score | India Business News


text:
Q: Read/Write Python List from/to Binary file According to Python Cookbook, below is how to write a list of tuple into binary file:
from struct import Struct
def write_records(records, format, f):
    '''
    Write a sequence of tuples to a binary file of structures.
    '''
    record_struct = Struct(format)
    for r in records:
        f.write(record_struct.pack(*r))

# Example
if __name__ == '__main__':
    records = [ (1, 2.3, 4.5),
                (6, 7.8, 9.0),
                (12, 13.4, 56.7) ]
    with open('data.b', 'wb') as f:
        write_records(records, '<idd', f)

And it works well.
For reading (large amount of binary data), the author recommended the following:
>>> import numpy as np
>>> f = open('data.b', 'rb')
>>> records = np.fromfile(f, dtype='<i,<d,<d')
>>> records
array([(1, 2.3, 4.5), (6, 7.8, 9.0), (12, 13.4, 56.7)],
dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '<f8')])
>>> records[0]
(1, 2.3, 4.5)
>>> records[1]
(6, 7.8, 9.0)
>>>

It is also good, but this record is not a normal numpy array. For instance, type(record[0]) will return <type 'numpy.void'>. Even worse, I cannot extract the first column using X = record[:, 0].
Is there a way to efficiently load list(or any other types) from binary file into a normal numpy array?
Thx in advance.

A: In [196]: rec = np.fromfile('data.b', dtype='<i,<d,<d')
In [198]: rec
Out[198]:
array([( 1,   2.3,   4.5), ( 6,   7.8,   9. ), (12,  13.4,  56.7)],
      dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', '<f8')])

This is a 1d structured array
In [199]: rec['f0']
Out[199]: array([ 1,  6, 12], dtype=int32)
In [200]: rec.shape
Out[200]: (3,)
In [201]: rec.dtype
Out[201]: dtype([('f0', '<i4'), ('f1', '<f8'), ('f2', '<f8')])

Note that its tolist looks identical to your original records:
In [202]: rec.tolist()
Out[202]: [(1, 2.3, 4.5), (6, 7.8, 9.0), (12, 13.4, 56.7)]
In [203]: records
Out[203]: [(1, 2.3, 4.5), (6, 7.8, 9.0), (12, 13.4, 56.7)]

You could create a 2d array from either list with:
In [204]: arr2 = np.array(rec.tolist())
In [205]: arr2
Out[205]:
array([[  1. ,   2.3,   4.5],
       [  6. ,   7.8,   9. ],
       [ 12. ,  13.4,  56.7]])
In [206]: arr2.shape
Out[206]: (3, 3)

There are other ways of converting a structured array to 'regular' array, but this is simplest and most consistent.
The tolist of a regular array uses nested lists.  The tuples in the structured version are intended to convey a difference:
In [207]: arr2.tolist()
Out[207]: [[1.0, 2.3, 4.5], [6.0, 7.8, 9.0], [12.0, 13.4, 56.7]]

In the structured array the first field is integer.  In the regular array the first column is same as the others, float.
If the binary file contained all floats, you could load it as a 1d of floats and reshape
In [208]: with open('data.f', 'wb') as f:
     ...:         write_records(records, 'ddd', f)
In [210]: rec2 = np.fromfile('data.f', dtype='<d')
In [211]: rec2
Out[211]: array([  1. ,   2.3,   4.5,   6. ,   7.8,   9. ,  12. ,  13.4,  56.7])

But to take advantage of any record structure in the binary file, you have load by records as well, which means structured array:
In [213]: rec3 = np.fromfile('data.f', dtype='d,d,d')
In [214]: rec3
Out[214]:
array([(  1.,   2.3,   4.5), (  6.,   7.8,   9. ), ( 12.,  13.4,  56.7)],
      dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8')])

redpajama_set_name: RedPajamaStackExchange


Goshen, NY – May 21, 2015 – (RealEstateRama) — Orange County Executive Steven M. Neuhaus announced on Thursday that the Department of Public Works has received a rebate for $16,500 by participating in Orange and Rockland's Big Energy Solutions Rebate Program.
Orange County's Department of Public Works recently completed a $75,000 LED lighting upgrade at its garage, located in Goshen. The project involved the installation of LED Hybay fixtures and LED lamp tandem wraps, providing increased lighting in the garage with reduced energy usage. The Department of Public Works expects a savings in energy use and bulb life. As a result of the energy-saving project, Orange County obtained the $16,500 rebate from Orange and Rockland.
For more information, contact Justin Rodriguez, Assistant to the County Executive for Communications and Media Relations at 845.291.3255 or jrodriguez (at) orangecountygov (dot) com.


text:
A LETTER TO THE EUROPEAN GENERAL SECRETARY
New York, January 25, 1895
George R. S. Mead, Esq.
Gen'l Sec'y European Section T.S.
Sir and Brother: I have received some seven requests by resolution from Branches and Centers of your Section to the effect, (a) that I should resign the office of Vice-President of the T.S., (b) that i should answer charges published against me by a paper inimical to the T.S. or give reasons for not replying, (c) that I should offer myself for trial on said charges; and I have also read the full publications of these requests and other matter connected therewith in the Vahan. I now beg to ask you to act as the proper official channel for the general reply to those requests, and to inform your Executive Committee also.
First. I am amazed at the undue, precipitate, and untheosophical haste displayed in the requests to me to reply to the public attack made on me before I could have time to do so or had refused, when the slightest reflection would show I could not possibly reply in such a hurry, and when a true brotherly feeling would seem to require that before making the demands, means should be taken to discover whether I had an intention to reply or explain. The Barcelona Lodge, however, asked you to inquire of me whether the charges made in said paper were true or not. Please let them know that I again say the charges are absolutely false.
Second. When the Judicial Commitee met in July and when thereafter Mrs. Besant, as prosecutor, publicly assented, in apparent good faith, to a general resolution declaring the matter closed and dropped, she was then in possession of all the alleged evidence now in her possession. Inasmuch as her name and her opinions have been used in a part of the above-mentioned correspondence, as some sort of proof of something. I draw your Lodges' attention to the fact that she had in her possession all said evidence at the time when she, as your public leader, publicly assented to two statements and a solemn resolution closing the matter passed at your Convention. It now appears that some Lodges desire to ify and override that action; hence either (a) the resolution was not passed in good faith, or (b) it was procurred through hoodwinking and deceiving the Convention. If you and those Lodges say that they did not have the said alleged evidence, and would not have passed the resolution had you possessed the said alleged evidence, then their present desire to avoid the resolution-for that is what the requests indicate-is due to a feeling that you were hoodwinkied into passing it. This being so, I must refer you to Mrs. Besant, for I had no part whatever in proposing, forwarding, or passing the resolution.
Third. In reply to the request that I shall resign the office of Vice-President, please say that I am obliged to refuse the request. If it is proper I should now resign, it was just as much so in July when your leading prosecutors had all the alleged evidence in their possession. I regard resignation as evidence of guilt. If I resigned that office I could not be in any way tried on any charges, and very soon after a resignation the same persons might say I resigned to evade responsibility.
Fourth. I have replied to the public newspaper in the only way it deserves. I have still under consideration a full reply to the T.S. respecting the real charges, but I refuse to be hurried until the right time, for the cogent reasons given below. And as I have seen that new misstatements of fact and charges are being circulated against me by F.T.S. who are keeping up this disgraceful pursuit, I have additional reasons for waiting until all possible innuendos and distortions shall have come forth, even were I now fully prepared to reply.
I cannot make a proper reply to the charges until I have in my possession a copy of the documentary evidence which it was, or is, proposed to use in support of the charges. These documents consist of various letters of mine on which are memoranda not in my handwriting. Some of them are letters written over ten years ago. They have been deliberately kept away from me, although open enemies have been given and allowed to take complete copies and facsimilies. No fair person would ask that I should answer without them.
I arrived in London July 5th, 18945, and at once demanded, first, copies of letters, and second, an inspection of all the evidence. Mrs. Besant promised these, but did not perform. The Council met informally on July 6, when I again demanded the evidence and received the same promise as before with the same failure to perform. July 7th the formal meeting of the Council took place. The same demand was again made with the same result. Each day until the second day before departure I made the request and met the same promise followed by failure to perform. The Judicial Committee met and I then made the same demand, and at the meeting Mrs. Besant and others said, "Oh, of course Mr. Judge should have copies of the proposed evidence." But the papers were neither copied nor shown me up to July 19th, almost a week after Convention, and when I was packing my trunk. All this time until the 19th, Mrs. Besant had the papers. On the 19th I formally and peremptorily demanded them. She said she had given them to Col. Olcott, who said they had been just sent off to the mail to go to India; this I repeated to Mrs. Besant and said I would publish the fact to the public. She hastened to Col. Olcott and he said he had made a mistake, as the papers were in his travelling case. He then, in Dr. Buck's presence, in a great hurry, as I sailed on the 21st, allowed me a hasty look at the papers on July 19th, I taking a copy of one or two short ones. But several being lengthy, and especially the one by which they hoped to destroy my general credibility, I could not copy them. Col. Olcott then promised to send copies; Mrs. Besant declared herself quit of the matter. Up to this date the promises made have not been fulfilled. I am without copies of the documents on which the charges are based.
Mrs. Besant, as prosecutor, never fulfilled her promise nor her duty. I then believed and still believe that they never intended to give me copies nor to permit inspection but hoped to hurry me into a trial unprepared in every respect. These facts, with the fact that they allowed Mr. Old to copy everything, will throw some light on the matter and on the opinions of the parties. I shall certainly not reply until I have before me the documentary evidence or copies and know the precise offenses with which I am charged. This is common justice.
William Q. Judge
Vice-President T.S.
Path, March, 1895
The Vahan, March 1, 1895

redpajama_set_name: RedPajamaCommonCrawl


text:
Wearable neuromodulation device shows promise for overactive bladder
Cheryl Guttman Krader, BS, Pharm
Urology Times Journal, Vol 48 No 8, Volume 48, Issue 08
Feasibility study results indicate the nonimplanted, intravaginal device is safe and comfortable.
A nonimplanted, intravaginal neuromodulation device (FemPulse) for treating overactive bladder (OAB) symptoms demonstrated favorable results in a feasibility study assessing wearability, safety, and clinical utility, reported Suzette E. Sutherland, MD, MS, FPMRS, at the 2020 American Urological Association Virtual Experience.1
"This device aims to provide a simple, convenient, and affordable form of continuous neuromodulation to ameliorate bothersome symptoms of OAB. The collective findings of the feasibility study justify its further investigation," said Sutherland, the primary study investigator and director of Female Urology at the University of Washington School of Medicine in Seattle.
Sutherland's coinvestigators were Steven W. Siegel, MD, FPMRS, Minnesota Urology in St. Paul, Minnesota, and Michael J. Kennelly, MD, FACS, FPMRS, McKay Urology, in Charlotte, North Carolina.
The FemPulse device is a pessary-like ring that is placed against the cervix for delivering electrical stimulation to the inferior hypogastric plexus, known as the pelvic plexus. The final iteration of the device will be a self-contained unit. However, the device investigated in this feasibility study was an initial prototype that was connected via wires exiting the vagina to an FDA-cleared transcutaneous electrical nerve stimulator (TENS).
The multicenter feasibility study randomized 21 women 2:1 to treatment versus sham groups. The treatment subjects received a conductive connector and stimulation at around 70% of the subject's sensation threshold. The system used for sham patients had a nonconductive connector, but all other aspects of the set-up were identical. At the initial study visit, patients completed pretherapy (or sham) quality-of-life (QOL) questionnaires; underwent a vaginal exam; were assessed for device fit, comfort, and self-maneuverability; and underwent preliminary stimulation testing and mapping, after which the device was removed. The participants then completed a 3-day bladder diary and returned the following week for randomization, device placement, and configuration. They completed another 3-day bladder diary and then returned for a final visit on the following day to undergo device removal, a final vaginal examination, and complete posttherapy (or sham) QOL questionnaires.
Device reported to be comfortable
In an intent-to-treat (ITT) cohort that included all 19 women who completed the study, the device was fit easily and was reported to be comfortable. In addition, it exhibited good self-maneuverability, as 86% of subjects could place and orient the device and 79% were able to remove it without assistance.
"A few patients had difficulty reaching the device to remove it either because of the length of their vaginal canal or their body habitus. A future iteration of the device will include a feature for assisting with self-placement and removal," Sutherland said.
Safety of the device was demonstrated, as there were no clinically important direct or reflexive effects on heart rate, rhythm, or blood pressure during stimulation, nor any untoward issues in the vagina due to the device. One woman reported mild lower abdominal ache or cramping that resolved when the device was removed. She also noted scant pink-tinged blood on the device following final removal.
"This patient had no sense of discomfort or irritation on [the] vaginal exam that was attributable to the device. It was concluded that the blood was related to postmenopausal atrophic tissues," Sutherland said.
Clinical utility was evaluated by analyses of changes in voids per 24 hours, urgent voids per 24 hours, changes in urinary urge, and incontinence-related QOL questions from 3 validated questionnaires. In the ITT cohort, similar improvements in these parameters were seen in both the treatment and control groups. However, signals of treatment benefit were observed in an efficacy-analysis (EA) subgroup comprised of 11 women (7 treatment subjects, 4 controls).
"The EA subgroup excluded 6 treatment subjects and 2 controls who reported feeling the stimulation, and who were therefore thought to be biased," said Sutherland.
"It was in this EA subgroup that a trend toward OAB improvement in the stimulation group compared to controls was seen, which in turn provides the justification to pursue larger-scale investigations into the efficacy of the FemPulse device for the treatment of OAB.
Disclosure: FemPulse provided funding for the study. Dr Sutherland is a study investigator and consultant for FemPulse and other companies that market or are developing treatments for OAB.
1. Sutherland SE, Kennelly MJ, Siegel SW. Evaluation of a non-implanted, transvaginal, electrical stimulation continence device for overactive bladder: EVANESCE-OAB. Paper presented at: 2020 American Urological Association Virtual Experience; June 27-28, 2020. Abstract PD27-09
OAB and IncontinenceVol 48 No 8
Study finds high rates of discontinuation for overactive bladder treatment
Cleveland Clinic urologists show how machine learning could revolutionize overactive bladder care
Vibegron as crushed tablet found safe, efficacious in OAB


The final chapter of obtaining my Bachelor of Fine Arts. Hosted by Anna Leonowens Gallery this body of work represented my time in Halifax, Nova Scotia. I visually vomited the lessons I learned, the art I studied and the experiences I went through. Each canvas hints at the personal journey.


Volunteering in the Brew Crew: One for you, one for me.
Dane & I were stationed with Diamond Knot Brewing Company. I loved their blonde ale, Dane dug the Shipwreck XXXIPA. Here he's with co-owner and founder Brian Sollenberger.
Madison, WI's Great Dane Brewing Company got a visit from the greatest Dane there is!
waiting to taste their outta-the-box beers and of course, shake Sam's hand.
We're headed back for more this Saturday. The plan: weiss, wheat and totally-out-there brews. And handing out the GourmetGlee business card!


Minor League Player of the Day: Billings 2B Avain Rachal: He went 3 for 4 with a HR, a 2B, a BB, and a SB.
Five different players singled to account for all of the Bat's offense in the shut out.
Chad Rogers got the loss as he went 5 IP and allowed 5 R on 8 H and 2 BB with 3 K. Kanekoa Texeira and Nick Christiani each added 1 IP of scoreless relief.
Mike Costanzo went 1 for 2 with a HR and a BB. Ryan LaMarre and Jon Moscot each doubled.
Jon Moscot got the win as he went 5 IP and allowed 1 R, 0 ER, on 2 H and 1 BB with 4 K. Jamie Walczak added 1 IP of scoreless relief. Trevor Bell picked up his 15th save with 1 IP of scoreless relief.
Corey Wimberly went 1 for 2 with a 2B and a BB. Brandon Short homered. Chris Berset doubled.
Daniel Renken got no decision as he went 4 IP and allowed 1 R on 4 H and 2 BB with 6 K. Parker Frazier got the win with 1.2 IP of scoreless relief.
Bakersfield – No game scheduled.
Zach Vincej went 2 for 3 with a HR. Jon Matthews went 2 for 4.
Ismael Guillon got the loss as he went 6 IP and allowed 2 R on 4 H and 1 BB with 3 K. Jesus Adames added 1 IP of scoreless relief.
Avain Rachal went 3 for 4 with a HR, a 2B, a BB, and a SB. Adam Matthews went 2 for 6 with a HR. Jose Ortiz went 2 for 5 with a HR. Carlos Sanchez went 2 for 6 with a 2B and a BB. J. R. Reynolds went 2 for 6. Aristides Aquino homered.
Pedro Diaz got no decision as he went 4 IP and allowed 2 R, 1 ER, on 5 H and 1 BB with 1 K. Scott Brattvet added 2 IP of scoreless relief. Oswaldo Mieres got the win with 1.2 IP of scoreless relief.
Though he took the loss yesterday I really like the stats coming out of Dayton for Guillon during this second half of the season. Been to several Dragons games this year but I've only seen him pitch once. He was roughed up that night. Now that he is back on track I'd like to get up to see the Dragons specifically to see him pitch.
We've talked about Zach Vincej several times this year, but I really like this guy. A 37th round college player in 2012's draft who's putting his name in front of the front office by playing solid defense at short and putting up respectable numbers at the plate. While I'm not willing to call him a prospect, I like that he's taking this opportunity to get played to play baseball and making something of it.
@Shchi Cossack: I don't know why I do things like that. I'm old.
Looks like the Bats could use some of Mike Costanzo's offense.


Oceaneering has promoted Mark E. Peterson to vice president, Corporate Development and Investor Relations.
In this position, Peterson will maintain his responsibility for Oceaneering's corporate development activities while expanding his role to include investor relations.
Peterson's career includes more than six years with Oceaneering in the role of vice president – corporate development. Prior to joining Oceaneering, Peterson was with McDermott, where he most recently held corporate development responsibility.
Alan R. Curtis, senior vice president and CFO of Oceaneering, said: "I am pleased to announce Mark's promotion. I am confident that Mark's experience, analytical skills, and knowledge of Oceaneering's businesses and the industries we serve will bring a unique perspective to our investors. At the same time, he will continue to lead our efforts to grow the company through strategic acquisitions. In his expanded role, Mark will continue to report to me.
Posted on November 1, 2018 with tags Corporate Development, investor relations, Mark E. Peterson, Oceaneering.


text:
package alien4cloud.paas.cloudify3.service;

import javax.inject.Inject;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

import alien4cloud.exception.InvalidArgumentException;
import alien4cloud.model.components.IndexedModelUtils;
import alien4cloud.model.orchestrators.locations.Location;
import alien4cloud.model.orchestrators.locations.LocationResources;
import alien4cloud.orchestrators.locations.services.ILocationResourceService;
import alien4cloud.paas.cloudify3.configuration.CfyConnectionManager;
import alien4cloud.paas.cloudify3.error.SingleLocationRequiredException;
import alien4cloud.paas.cloudify3.model.DeploymentPropertiesNames;
import alien4cloud.paas.cloudify3.service.model.CloudifyDeployment;
import alien4cloud.paas.cloudify3.service.model.HostWorkflow;
import alien4cloud.paas.cloudify3.service.model.Relationship;
import alien4cloud.paas.cloudify3.service.model.StandardWorkflow;
import alien4cloud.paas.cloudify3.service.model.WorkflowStepLink;
import alien4cloud.paas.cloudify3.service.model.Workflows;
import alien4cloud.paas.cloudify3.util.mapping.PropertiesMappingUtil;
import alien4cloud.paas.model.PaaSNodeTemplate;
import alien4cloud.paas.model.PaaSRelationshipTemplate;
import alien4cloud.paas.model.PaaSTopologyDeploymentContext;
import alien4cloud.paas.wf.TopologyContext;
import alien4cloud.paas.wf.WorkflowsBuilderService;
import alien4cloud.paas.wf.util.WorkflowUtils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.alien4cloud.tosca.model.definitions.DeploymentArtifact;
import org.alien4cloud.tosca.model.templates.ServiceNodeTemplate;
import org.alien4cloud.tosca.model.types.NodeType;
import org.alien4cloud.tosca.model.types.RelationshipType;
import org.alien4cloud.tosca.model.workflow.NodeWorkflowStep;
import org.alien4cloud.tosca.model.workflow.RelationshipWorkflowStep;
import org.alien4cloud.tosca.model.workflow.Workflow;
import org.alien4cloud.tosca.model.workflow.WorkflowStep;
import org.alien4cloud.tosca.normative.constants.NormativeRelationshipConstants;
import org.alien4cloud.tosca.utils.ToscaTypeUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

import static org.alien4cloud.tosca.normative.constants.NormativeWorkflowNameConstants.INSTALL;
import static org.alien4cloud.tosca.normative.constants.NormativeWorkflowNameConstants.UNINSTALL;

@Component("cloudify-deployment-builder-service")
@Slf4j
public class CloudifyDeploymentBuilderService {
    @Inject
    private WorkflowsBuilderService workflowBuilderService;
    @Inject
    private OrchestratorDeploymentPropertiesService deploymentPropertiesService;
    @Inject
    private CfyConnectionManager connectionManager;
    @Inject
    @Lazy(true)
    private ILocationResourceService locationResourceService;
    /** Service that force the presence of a create operation to trigger initializations. */
    @Inject
    private InitOperationInjectorService initOperationInjectorService;
    @Inject
    private ServiceDelegateWorkflowService serviceDelegateWorkflowService;

    /**
     * Build the Cloudify deployment from the deployment context. Cloudify deployment has data pre-parsed so that blueprint generation is easier.
     *
     * @param deploymentContext the deployment context
     * @return the cloudify deployment
     */
    public CloudifyDeployment buildCloudifyDeployment(PaaSTopologyDeploymentContext deploymentContext) {
        CloudifyDeployment cloudifyDeployment = new CloudifyDeployment();

        processNetworks(cloudifyDeployment, deploymentContext);
        processDeploymentArtifacts(cloudifyDeployment, deploymentContext);

        // this is a set of all node type provided by all the locations this deployment is related on
        Set<String> locationProvidedTypes = Sets.newHashSet();
        for (Location location : deploymentContext.getLocations().values()) {
            LocationResources locationResources = locationResourceService.getLocationResources(location);
            locationProvidedTypes.addAll(locationResources.getProvidedTypes());
        }

        List<NodeType> nativeTypes = getTypesOrderedByDerivedFromHierarchy(
                excludeCustomNativeTypes(deploymentContext.getPaaSTopology().getComputes(), locationProvidedTypes));
        nativeTypes.addAll(getTypesOrderedByDerivedFromHierarchy(deploymentContext.getPaaSTopology().getNetworks()));
        nativeTypes.addAll(getTypesOrderedByDerivedFromHierarchy(deploymentContext.getPaaSTopology().getVolumes()));

        cloudifyDeployment.setDeploymentPaaSId(deploymentContext.getDeploymentPaaSId());
        cloudifyDeployment.setDeploymentId(deploymentContext.getDeploymentId());
        cloudifyDeployment.setLocationType(getLocationType(deploymentContext));
        cloudifyDeployment.setComputes(excludeCustomNativeTypes(deploymentContext.getPaaSTopology().getComputes(), locationProvidedTypes));
        cloudifyDeployment.setVolumes(deploymentContext.getPaaSTopology().getVolumes());
        cloudifyDeployment.setNonNatives(deploymentContext.getPaaSTopology().getNonNatives());

        // Filter custom resources
        Map<String, PaaSNodeTemplate> customResources = extractCustomNativeType(deploymentContext.getPaaSTopology().getAllNodes(), locationProvidedTypes);
        cloudifyDeployment.setCustomResources(customResources);
        Collection<PaaSNodeTemplate> customNatives = customResources.values();
        if (!customNatives.isEmpty()) {
            Set allNonNative = cloudifyDeployment.getNonNatives() == null ? Sets.newHashSet() : Sets.newHashSet(cloudifyDeployment.getNonNatives());
            allNonNative.addAll(customNatives);
            cloudifyDeployment.setNonNatives(Lists.newArrayList(allNonNative));
        }

        processNonNativeTypes(cloudifyDeployment, cloudifyDeployment.getNonNatives());
        cloudifyDeployment.setNativeTypes(nativeTypes);

        cloudifyDeployment.setAllNodes(deploymentContext.getPaaSTopology().getAllNodes());
        cloudifyDeployment.setProviderDeploymentProperties(deploymentContext.getDeploymentTopology().getProviderDeploymentProperties());

        // Replace services delegate operation with create and start operations
        replaceServiceDelegate(cloudifyDeployment.getNonNatives(), deploymentContext.getDeploymentTopology().getWorkflows());
        // Cloudify plugin injects a specific operation required for nodes initializations.
        injectInitOperations(cloudifyDeployment.getNonNatives(), deploymentContext.getDeploymentTopology().getWorkflows());

        cloudifyDeployment.setWorkflows(buildWorkflowsForDeployment(deploymentContext));

        // if monitoring is enabled then try to get the nodes to monitor
        setNodesToMonitor(cloudifyDeployment);

        // load the mappings for the native types.
        TopologyContext topologyContext = workflowBuilderService.buildTopologyContext(deploymentContext.getDeploymentTopology());
        cloudifyDeployment.setPropertyMappings(PropertiesMappingUtil.loadPropertyMappings(cloudifyDeployment.getNativeTypes(), topologyContext));

        cloudifyDeployment.setCapabilityTypes(deploymentContext.getPaaSTopology().getCapabilityTypes());
        cloudifyDeployment.setSecretConfiguration(deploymentContext.getSecretProviderConfigurationAndCredentials());
        return cloudifyDeployment;
    }

    private Map<String, PaaSNodeTemplate> extractCustomNativeType(Map<String, PaaSNodeTemplate> nodes, Set<String> locationProvidedTypes) {
        Map<String, PaaSNodeTemplate> result = Maps.newHashMap();
        for (Map.Entry<String, PaaSNodeTemplate> entry : nodes.entrySet()) {
            if (isCustomResource(entry.getValue(), locationProvidedTypes)) {
                result.put(entry.getKey(), entry.getValue());
            }
        }
        return result;
    }

    /**
     * A custom resource is a template that:
     *

     *
is not of a type provided by the location

     *
AND doesn't have a host

     *
AND is not a service

     *

     *
     * @param node
     * @return true is the node is considered as a custom template.
     */
    private boolean isCustomResource(PaaSNodeTemplate node, Set<String> locationProvidedTypes) {
        if (node.getParent() != null) {
            // if the node template has a parent, it can't be considered as a custom resource.
            return false;
        }
        if (locationProvidedTypes.contains(node.getTemplate().getType())) {
            // if the type of the template is provided by the location, it can't be considered as a custom resource.
            return false;
        }
        if (node.getTemplate() instanceof ServiceNodeTemplate) {
            // a service has no host and it's type is not provided by the location but is not a custom resource
            return false;
        }
        return true;
    }

    private List<PaaSNodeTemplate> excludeCustomNativeTypes(Collection<PaaSNodeTemplate> nodes, Set<String> locationProvidedTypes) {
        List<PaaSNodeTemplate> result = Lists.newArrayList();
        for (PaaSNodeTemplate node : nodes) {
            if (!isCustomResource(node, locationProvidedTypes)) {
                result.add(node);
            }
        }
        return result;
    }

    private void setNodesToMonitor(CloudifyDeployment cloudifyDeployment) {
        String autoHeal = deploymentPropertiesService.getValueOrDefault(cloudifyDeployment.getProviderDeploymentProperties(),
                DeploymentPropertiesNames.AUTO_HEAL);
        boolean isDisableDiamond = connectionManager.getConfiguration().getDisableDiamondMonitorAgent() == null ? false
                : connectionManager.getConfiguration().getDisableDiamondMonitorAgent();
        if (Boolean.parseBoolean(autoHeal) && !isDisableDiamond) {
            cloudifyDeployment.setNodesToMonitor(getNodesToMonitor(cloudifyDeployment.getComputes()));
        }
    }

    public Workflows buildWorkflowsForDeployment(PaaSTopologyDeploymentContext deploymentContext) {
        Map<String, Workflow> workflowsMap = deploymentContext.getDeploymentTopology().getWorkflows();
        WorkflowUtils.processInlineWorkflows(workflowsMap);
        Workflows workflows = new Workflows();
        workflows.setWorkflows(workflowsMap);
        fillWorkflowSteps(INSTALL, workflowsMap, workflows.getInstallHostWorkflows());
        fillWorkflowSteps(UNINSTALL, workflowsMap, workflows.getUninstallHostWorkflows());
        fillOrphans(INSTALL, workflowsMap, workflows.getStandardWorkflows());
        fillOrphans(UNINSTALL, workflowsMap, workflows.getStandardWorkflows());
        return workflows;
    }

    /**
     * We use the create operation using a post create code injection to set all node properties as attributes, set the ip attribute on the endpoint
     * capabilities and set eventually attribute values if some are defined. Inject create operations used for node initialization in node that do not
     * define them. Also inject call to create operation before the node created
     * state change.
     *
     * @param nonNatives
     * @param workflowsMap
     */
    private void injectInitOperations(List<PaaSNodeTemplate> nonNatives, Map<String, Workflow> workflowsMap) {
        Workflow installWorkflow = workflowsMap.get(INSTALL);
        // for every non native node let's ensure that there is a call to the create method.
        for (PaaSNodeTemplate template : nonNatives) {
            initOperationInjectorService.ensureCreateOperation(template, installWorkflow);
        }
    }

    /**
     * Replace the service delegate operations by a create and start operation call sequence.
     *
     * @param nonNatives Services nodes are stored as non native nodes.
     * @param workflowsMap The workflow map to impact.
     */
    private void replaceServiceDelegate(List<PaaSNodeTemplate> nonNatives, Map<String, Workflow> workflowsMap) {
        for (PaaSNodeTemplate template : nonNatives) {
            if (template.getTemplate() instanceof ServiceNodeTemplate) {
                // Service node must not have any operations at the node level
                // The node is just a technical trick to implement service in Alien
                if (template.getTemplate().getInterfaces() != null) {
                    template.getTemplate().getInterfaces().clear();
                }
                if (template.getInterfaces() != null) {
                    template.getInterfaces().clear();
                }
                serviceDelegateWorkflowService.replaceInstallServiceDelegate(template, workflowsMap.get(INSTALL));
                serviceDelegateWorkflowService.replaceUnInstallServiceDelegate(template, workflowsMap.get(UNINSTALL));
            }
        }
    }

    private void fillOrphans(String workflowName, Map<String, Workflow> workflows, Map<String, StandardWorkflow> standardWorkflows) {
        Workflow workflow = workflows.get(workflowName);
        StandardWorkflow standardWorkflow = buildOrphansWorkflow(workflow);
        standardWorkflows.put(workflowName, standardWorkflow);
    }

    private StandardWorkflow buildOrphansWorkflow(Workflow workflow) {
        StandardWorkflow standardWorkflow = new StandardWorkflow();
        standardWorkflow.setHosts(workflow.getHosts());
        standardWorkflow.setOrphanSteps(getOrphanSteps(workflow));
        standardWorkflow.setLinks(buildFollowingLinksFromSteps(standardWorkflow.getOrphanSteps()));
        return standardWorkflow;
    }

    /**
     * get steps without parent, i-e without hostId
     *
     * @param workflow
     * @return
     */
    private Map<String, WorkflowStep> getOrphanSteps(Workflow workflow) {
        return getHostRelatedSteps(null, workflow);
    }

    private void fillWorkflowSteps(String workflowName, Map<String, Workflow> workflows, Map<String, HostWorkflow> workflowSteps) {
        Workflow workflow = workflows.get(workflowName);
        Set<String> hostIds = workflow.getHosts();
        if (CollectionUtils.isEmpty(hostIds)) {
            return;
        }
        for (String hostId : hostIds) {
            HostWorkflow hostWorkflow = buildHostWorkflow(hostId, workflow);
            workflowSteps.put(hostId, hostWorkflow);
        }
    }

    private HostWorkflow buildHostWorkflow(String hostId, Workflow workflow) {
        HostWorkflow hostWorkflow = new HostWorkflow();
        hostWorkflow.setSteps(getHostRelatedSteps(hostId, workflow));
        hostWorkflow.getSteps().putAll(getOrphanRelatedSteps(hostWorkflow.getSteps(), getOrphanSteps(workflow)));
        processLinks(hostWorkflow.getSteps(), hostWorkflow.getInternalLinks(), hostWorkflow.getExternalLinks());
        // hostWorkflow.setInternalLinks(getLinksBetweenSteps(hostWorkflow.getSteps()));
        return hostWorkflow;
    }

    /**
     * Get orphan steps that are related to the workflow.
     *
     * @param workflow The given workflow
     * @param orphanSteps Map of orphan steps
     * @return A Map of orphans that are related to the given workflow.
     */
    private Map<String, WorkflowStep> getOrphanRelatedSteps(Map<String, WorkflowStep> workflow, Map<String, WorkflowStep> orphanSteps) {
        Map<String, WorkflowStep> relatedSteps = Maps.newLinkedHashMap();
        for (WorkflowStep step : orphanSteps.values()) {
            for (WorkflowStep sh : workflow.values()) {
                if ((sh.getPrecedingSteps() != null && sh.getPrecedingSteps().contains(step.getName()))
                        || (sh.getOnSuccess() != null && sh.getOnSuccess().contains(step.getName()))) {
                    relatedSteps.put(step.getName(), step);
                }
            }
        }
        return relatedSteps;
    }

    private void processLinks(Map<String, WorkflowStep> steps, List<WorkflowStepLink> internalLinks, List<WorkflowStepLink> externalLinks) {
        for (WorkflowStep step : steps.values()) {
            buildFollowingLinksFromStep(step, steps, internalLinks, externalLinks);
        }
    }

    /**
     * build a list of {@link WorkflowStepLink} between a given map of steps
     *
     * @param steps
     * @return
     */
    private List<WorkflowStepLink> buildFollowingLinksFromSteps(Map<String, WorkflowStep> steps) {
        List<WorkflowStepLink> links = Lists.newArrayList();
        for (WorkflowStep step : steps.values()) {
            links.addAll(buildFollowingLinksFromStep(step));
        }
        return links;
    }

    private List<WorkflowStepLink> buildFollowingLinksFromStep(WorkflowStep step) {
        List<WorkflowStepLink> links = Lists.newArrayList();
        if (CollectionUtils.isNotEmpty(step.getOnSuccess())) {
            for (String following : step.getOnSuccess()) {
                links.add(new WorkflowStepLink(step.getName(), following));
            }
        }
        return links;
    }

    /**
     * build lists of {@link WorkflowStepLink} representing a link from a given step to others steps.
     * The links can be internal to a set of given steps, or externals
     *
     * @param step step from which to get the links
     * @param steps The map of steps in which the following step related to the internal link should be
     * @param externalLinks
     * @param internalLinks
     * @return
     */
    private void buildFollowingLinksFromStep(WorkflowStep step, Map<String, WorkflowStep> steps, List<WorkflowStepLink> internalLinks,
            List<WorkflowStepLink> externalLinks) {
        List<WorkflowStepLink> links = buildFollowingLinksFromStep(step);
        for (WorkflowStepLink link : links) {
            WorkflowStep following = steps.get(link.getToStepId());
            if (following != null) {
                internalLinks.add(link);
            } else {
                externalLinks.add(link);
            }
        }
    }

    /**
     * Get steps related to a specific hostId
     *
     * @param hostId
     * @param workflow
     * @return
     */
    private Map<String, WorkflowStep> getHostRelatedSteps(String hostId, Workflow workflow) {
        Map<String, WorkflowStep> steps = Maps.newLinkedHashMap();
        for (WorkflowStep step : workflow.getSteps().values()) {
            if (step instanceof NodeWorkflowStep) {
                if (isNodeStepRelatedToHost((NodeWorkflowStep) step, hostId)) {
                    // Only step related to the host is added
                    steps.put(step.getName(), step);
                }
            } else {
                if (isRelationshipStepRelatedToHost((RelationshipWorkflowStep) step, hostId)) {
                    // The source of relationship is on the host
                    steps.put(step.getName(), step);
                }
            }
        }
        return steps;
    }

    private boolean isNodeStepRelatedToHost(NodeWorkflowStep step, String hostId) {
        return Objects.equals(step.getHostId(), hostId);
    }

    private boolean isRelationshipStepRelatedToHost(RelationshipWorkflowStep step, String hostId) {
        return Objects.equals(step.getSourceHostId(), hostId) || Objects.equals(step.getTargetHostId(), hostId);
    }

    private List<NodeType> getTypesOrderedByDerivedFromHierarchy(List<PaaSNodeTemplate> nodes) {
        Map<String, NodeType> nodeTypeMap = Maps.newLinkedHashMap();
        for (PaaSNodeTemplate node : nodes) {
            nodeTypeMap.put(node.getIndexedToscaElement().getElementId(), node.getIndexedToscaElement());
        }
        return IndexedModelUtils.orderByDerivedFromHierarchy(nodeTypeMap);
    }

    /**
     * Get the location of the deployment from the context.
     */
    private String getLocationType(PaaSTopologyDeploymentContext deploymentContext) {
        if (MapUtils.isEmpty(deploymentContext.getLocations()) || deploymentContext.getLocations().size() != 1) {
            throw new SingleLocationRequiredException();
        }
        return deploymentContext.getLocations().values().iterator().next().getInfrastructureType();
    }

    /**
     * Map the networks from the topology to either public or private network.
     * Cloudify plugin indeed maps the public network to floating ips while private network are mapped to network and subnets.
     *
     * @param cloudifyDeployment The cloudify deployment context with private and public networks mapped.
     * @param deploymentContext The deployment context from alien 4 cloud.
     */
    private void processNetworks(CloudifyDeployment cloudifyDeployment, PaaSTopologyDeploymentContext deploymentContext) {
        List<PaaSNodeTemplate> allNetworks = deploymentContext.getPaaSTopology().getNetworks();
        List<PaaSNodeTemplate> publicNetworks = Lists.newArrayList();
        List<PaaSNodeTemplate> privateNetworks = Lists.newArrayList();
        for (PaaSNodeTemplate network : allNetworks) {
            if (ToscaTypeUtils.isOfType(network.getIndexedToscaElement(), "alien.nodes.PublicNetwork")) {
                publicNetworks.add(network);
            } else if (ToscaTypeUtils.isOfType(network.getIndexedToscaElement(), "alien.nodes.PrivateNetwork")) {
                privateNetworks.add(network);
            } else {
                throw new InvalidArgumentException(
                        "The type " + network.getTemplate().getType() + " must extends alien.nodes.PublicNetwork or alien.nodes.PrivateNetwork");
            }
        }

        cloudifyDeployment.setExternalNetworks(publicNetworks);
        cloudifyDeployment.setInternalNetworks(privateNetworks);
    }

    /**
     * Extract the types of all types that are not provided by cloudify (non-native types) for both nodes and relationships.
     * Types have to be generated in the blueprint in correct order (based on derived from hierarchy).
     *
     * @param cloudifyDeployment The cloudify deployment context with private and public networks mapped.
     * @param nonNativeNodes The list of non native types.
     */
    private void processNonNativeTypes(CloudifyDeployment cloudifyDeployment, List<PaaSNodeTemplate> nonNativeNodes) {
        Map<String, NodeType> nonNativesTypesMap = Maps.newLinkedHashMap();
        Map<String, RelationshipType> nonNativesRelationshipsTypesMap = Maps.newLinkedHashMap();
        if (nonNativeNodes != null) {
            for (PaaSNodeTemplate nonNative : nonNativeNodes) {
                nonNativesTypesMap.put(nonNative.getIndexedToscaElement().getElementId(), nonNative.getIndexedToscaElement());
                List<PaaSRelationshipTemplate> relationshipTemplates = nonNative.getRelationshipTemplates();
                for (PaaSRelationshipTemplate relationshipTemplate : relationshipTemplates) {
                    if (!NormativeRelationshipConstants.DEPENDS_ON.equals(relationshipTemplate.getIndexedToscaElement().getElementId())
                            && !NormativeRelationshipConstants.HOSTED_ON.equals(relationshipTemplate.getIndexedToscaElement().getElementId())) {
                        nonNativesRelationshipsTypesMap.put(relationshipTemplate.getIndexedToscaElement().getElementId(),
                                relationshipTemplate.getIndexedToscaElement());
                    }
                }
            }
        }

        cloudifyDeployment.setNonNativesTypes(IndexedModelUtils.orderByDerivedFromHierarchy(nonNativesTypesMap));
        cloudifyDeployment.setNonNativesRelationshipTypes(IndexedModelUtils.orderByDerivedFromHierarchy(nonNativesRelationshipsTypesMap));
    }

    private void processDeploymentArtifacts(CloudifyDeployment cloudifyDeployment, PaaSTopologyDeploymentContext deploymentContext) {
        Map<String, Map<String, DeploymentArtifact>> allArtifacts = Maps.newLinkedHashMap();
        Map<Relationship, Map<String, DeploymentArtifact>> allRelationshipArtifacts = Maps.newLinkedHashMap();
        for (Map.Entry<String, PaaSNodeTemplate> nodeEntry : deploymentContext.getPaaSTopology().getAllNodes().entrySet()) {
            PaaSNodeTemplate node = nodeEntry.getValue();
            // add the node artifacts
            putArtifacts(allArtifacts, node.getId(), node.getTemplate().getArtifacts());
            // add the relationships artifacts
            addRelationshipsArtifacts(allRelationshipArtifacts, nodeEntry.getValue().getRelationshipTemplates());
        }

        cloudifyDeployment.setAllDeploymentArtifacts(allArtifacts);
        cloudifyDeployment.setAllRelationshipDeploymentArtifacts(allRelationshipArtifacts);
    }

    private void addRelationshipsArtifacts(Map<Relationship, Map<String, DeploymentArtifact>> allRelationshipArtifacts,
            List<PaaSRelationshipTemplate> relationships) {
        if (relationships == null || relationships.isEmpty()) {
            return;
        }

        for (PaaSRelationshipTemplate relationship : relationships) {
            Map<String, DeploymentArtifact> artifacts = relationship.getTemplate().getArtifacts();

            putArtifacts(allRelationshipArtifacts, new Relationship(relationship.getId(), relationship.getSource(), relationship.getTemplate().getTarget()),
                    artifacts);
        }
    }

    private <T> void putArtifacts(Map<T, Map<String, DeploymentArtifact>> targetMap, T key, Map<String, DeploymentArtifact> artifacts) {
        if (artifacts != null && !artifacts.isEmpty()) {
            targetMap.put(key, artifacts);
        }
    }

    private Set<PaaSNodeTemplate> getNodesToMonitor(List<PaaSNodeTemplate> computes) {
        Set<PaaSNodeTemplate> nodesToMonitor = Sets.newLinkedHashSet();
        for (PaaSNodeTemplate compute : computes) {
            // we monitor only if the compute is not a windows type
            // TODO better way to find that this is not a windows compute, taking in accound the location
            if (!compute.getIndexedToscaElement().getElementId().contains("WindowsCompute")) {
                nodesToMonitor.add(compute);
            }
        }
        return nodesToMonitor;
    }
}

redpajama_set_name: RedPajamaGithub


CRPWS would love to hear from you.
Address-CRPWS , 2 nd Floor, Joshi Niwas, Lane No. 7 ,Ganesh Vihar, Mata Mandir Road, Ajabpur, Dharampur, Dehradun.
Child Rights and Peoples Welfare Society is an independent non-governmental social developmental organisation registered under the Society Registration Act 21, 1860 whose aim is to bring sustainable development in tribal areas of Uttarakhand since 2016. An initiative taken by the youth of Uttarakhand in order to improve the quality of education, health and sanitation sectors in tribal areas. CRPWS is working from November 2016 on 'Capacity Building Training Programme' based on building journalism skills among tribal adolescents in Jaunsar Bawar, Uttarakhand. It is a subsidiary organisation of GRASS (Gramin Sudhar Avam Shramik Seva Sanstha) established in 1993, specialised in fields such as Agriculture, Horticulture, Biomass Utilization, Disaster Management, Food and Water Preservation and Power Generation through Watermills.


35 Hilarious Business Names That Will Make You Look Twice. #7 .
35 Hilarious Business Names That Will Make You Look Twice. #7 Is The Best Ever! Name what's more gadget of a concern are utterly important, they are accountable in support of the foremost heaven custhatmers request get. It takes era with the intention of obtain the weary options, too I high regard how crave it took these 35 concern owners to select the announce of their shops.
The 36 Funniest Names In The World. I Can't Stop Laughing!
32 outshine Fun Psychic images just about Pinterest | Funny phrases .
Psychic Peter, shoddily wherever are every one the Fam Guy pins! Find this Pin and on Fun Psychic on Samantha McGovern. Peter griffin anyone \nThe Funny Agent, Dan DeCapua, walks you trunk something you infatuation with the purpose of get with the aim of achieve an enlightened quarters attain beforehand sale.
Funny hustle banker Names – Psychic Email Readings Fortune Teller Names Generator. Fortune-telling is the old reunion of prediction whichever pieces of substantiation vis-a-vis a person's life.
Welcome to Name Generator Fun, home of the coolest as well funniest tone make known generators re the internet! Our follower is the imaginative task of rapidly decide on husbmoreover-and-wife task force Emma Davies and Saxon Bullock.
Dalmost Edward Beck is a teacher, geopolitical advisor, plus academic focusing on applications of huge go up psychology, together with civil psychology, evolutionary psychology, executive psychology plus their sway on corporeal sociocultural systems.
Psychic Demon Child Naming Where People Live "Omegle Pranks .
So here video, I make small talk Omegle what a "psychic imp child&quot. I notify strangers associate I'm psychic, plus subsequently I state anywhere they bring to life which freaks them out. Enjoy the video!
Agar.io – Cosmetic Name List with the aim of Decorate Your Balls Updated .
I am composure during Agar.io, furthermore nearlysect I glorification buoy upjust aboutg roughly using the Yaranaika face.Uninstead oftunately for some, offer is destructive with the intention of hand amount of names you tin can appliance to float as regard in style; without organize is a schedule in the game's developer tools.
Psychic Bernard knows ALL the ANSWERS in the same way as the intention of ALL your QUESTIONS. He is an Expert Psychic with regards with the intention of LOVE, MONEY, what's more ALL THINGS of the FUTURE. He is Dedicated, Focused, Determined too a Total what's more Complete IDIOT.
Naming a love is a highly holy practice. A publish gives a sweetie darling an hamlet furthermore a pull-out the world. It preserve furthermore be similar to a kindliness understand greater than a brand-new life, have the status of it contains the parent's .
"My broadcast is Kvothe, conclude almost unchanged in the role of "quothe." Names are piercing as they run by you a number one harmony just about a person. I've had especially names than a person has a apposite to.
WH40k, Gundam, Dynamic Productions, Battletech, you announce it, rider it had massive robots, Ras welly knew as well loved it. One day, a abstruse rock defeat begin the vicinity ofning modification and slammed popular his forehead. When Randy woke up, he was encased in a terrific current account of the crystal.
Your Psychic Security Number Crazy Requests , Illinois , Office , USA | Right | September 6, 2018 (As sharing out of my appointment I at regular interval shall insist a candipin the function ofses date of biological or Social Security accompaniment as allowance of their hiring process.
Character Name Ideas A even though in the past someon the subject ofe on the IdeaDex asked qualification I could amass a receipt of state ideas used for stamp specialists (gym leaders, Elite Four members, etc.).
A sleep outdoors of generators to without rhyme or reason stimulate concepts, characters, additionally descriptions represent stories, role-playing games, too art, besides as revel furthermore relieve arty blocks.
Stage publish producer . This publish author command afford you 10 subjective stage heralds in support of all sorts of players. A assumed name is in general a discharge duty name taken at an artist for mixed reasons.
Smosh is the dwelljust aboutg of the stroke entertaining videos, games, photos, memes, blogs what's mearly thane galleries online. See the funniest YouTube videos, pictures besides images online or nonsense in imitation of Smosh readers in our online forums.
Post on Durzog Be it feral, resto, boomkin, dreamstate, or one loving of unusual hybrid, the druid faculty trees furthermore the complete of their forms bottle inspire several attractive witty names.
That pronounce rings a bell. Hmm.Pavlov. That publicize rings a bell. Only Psychology Nerds Will Find Funny. Hmm.Pavlov. That read out rings a bell. you get once anyone asks whether you're psychic.
hey everyone! pull off u figure out every comfortable telepathist names nation may possibly auditory funny?!
Funny Doctor Names. Discussion near here 'General Residency Issues' started by the side of GMO2003, Apr 4, 2006. Funny obstruction correct #37 Stephanieukmed, Apr 5, 2006. chickendoc Member.
Superhero publicize maker . This publish producer order meet the expense of you 10 pronounces on behalf of superheroes. Note that a few combinations may perhaps exterior a publish of an existing superhero, so make fair enough you Google the proclaim rider you're not sure too you schema to employment the name in support of a advert project.
The spiritualist waved the be of the same opinion next to at the rear Biff additionally said, "Mexican food." Recently, the Psychic Hotline what's more Psychic Friends Network go through launched hotlines intended for frogs. Here is the financial credit of whichever frog also his discussing in the manner of his psychic.
200 videos Play entirely Popular Videos – Celebrity Name Game Celebrity Name Game – Topic Hashtags. #FakeJayZLyrics (Late Night as soon as Jimmy Fallon) – Duration. 5.49. The Tonight Show Starring Jimmy .
All you habit your computer graphics as well you don't craving any operate existence witty psychics you breathing to facilitate give surety donate won't dock a void. A Synthesis of Spiritual funny psychics Healing additionally Qi Gong describes an callisthenics you preserve law bout class besides gruffly who is the woman computer graphics of love.
Consider a perceptive cat bearing in mind the aptitude to facilitate beat somebody to it the masculinity of the Royal baby. A official declaration by Kensington Palace on Monday, October , hold in reserve the rumor rub at bay. Meghan Markle, Duchess of Sussex , is pregnant.
What witty names did/bring about you here additireally stage aboutformulate on your own about games .
Hey guys and gals! What witty names did/do you 'type' roundabout on your own on arcade/cpu/console games? Please, in the absbyption of the moderators, put nonetheless a spinster * or extra such story on the edge of a flat-out obscenity ('cause I figure out there request dock a few in the names. hey, I understand; I do it too!
Here you declare a few hilarious citations too a affiliate with the intention of the cherubic call populace is the "punchline" of the quote. Often the quote cause the correct opposite.


text:
Q: Is it possible to ssh into the IKS worker nodes deployed on vpc2 infa?
*

*If a K8s cluster is deployed on IBM VPC2 infrastructure then Is it possible to ssh into the worker nodes? I have enabled Public Gateway but I'm not sure if I can do the ssh using the public IP mentioned in the public gateway?

*Also Is it possible to assign a public IP to every worker node? Like a floating IP for every worker node?

A: If you're using the managed offering of IBM Cloud Kubernetes Service (IKS) or Red Hat OpenShift (ROKS), then SSH access is disabled by default.
Public Gateways enabled on the VPC Subnets of your worker nodes are for establishing outbound connections to the internet from the nodes contained within that subnet.
https://cloud.ibm.com/docs/containers?topic=containers-vpc-subnets#vpc_basics_pgw
Likewise, if you're using either of the managed offerings mentioned above, you have no access to the actual VPC VSI worker nodes through your VPC infrastructure, and can not assign public IP's to them.
You can however enable a public service endpoint during VPC cluster creation that will allow services unable to communicate over the Private Service Endpoint to still work over the Public Service Endpoint.


In this paper, we identify a new class of attacks that leverage deep learning language models (Recurrent Neural Networks or RNNs) to automate the generation of fake online reviews for products and services. Not only are these attacks cheap and therefore more scalable, but they can control rate of content output to eliminate the signature burstiness that makes crowdsourced campaigns easy to detect. Using Yelp reviews as an example platform, we show how a two phased review generation and customization attack can produce reviews that are indistinguishable by state-of-the-art statistical detectors.
Humans marked these AI-generated reviews as useful at approximately the same rate as they did for real (human-authored) Yelp reviews.


text:
Search through site content Que cherchez-vous?
Global Afrique Amériques Asie Pacifique Moyen-Orient Royaume-Uni & Europe
Royaume-Uni et Europe
Énergie et ressources naturelles
Hôtels, hébergement et loisirs
Assurance et réassurance
Droit maritime
Pratiques professionnelles
Commerce de détails et consommateurs
Commerce et matières premières
Risques liés aux changements climatiques
Litige commercial
Emploi, pensions et immigration
Insolvabilité et restructuration
Projets et construction
Droit réglementaire et enquêtes
Bulletins - Aperçu
La nouvelle route de la soie
Blogue: un monde connecté
Choose Region Global Global Afrique Amériques Asie Pacifique Moyen-Orient Royaume-Uni & Europe
Votre entreprise est-elle prête à faire face aux changements climatiques?
Voir notre pratique en matière de risques reliés aux changements climatiques?
Termes de recherche populaires
Cliquez sur chaque termes pour accéder aux articles correspondants
Centre d'information sur le Coronavirus
Rapport "Looking Glass"
Financement de litiges
Clyde & Co LLP est une société en nom collectifs à responsabilité limitée, autorisée et réglementée par la Solicitors Regulation Authority de l'Angleterre.
Connexion Citrix
Vous abonnez
Politique de témoins (cookies)
Esclavage moderne
Fraude par courriels
Emergencies Connexion Citrix
Putting things right: the SRA's new guidance on own-interest conflicts
Legal Development 12 décembre 2019 12 décembre 2019
Royaume-Uni & Europe
Historically, there has been a practice of solicitors rectifying mistakes made on existing files (where possible) in order to cure an own-interest conflict and continue acting. However, the Solicitors' Disciplinary Tribunal ("SDT") decision in the case of SRA v Howell Jones [[2018] SDT 11846] ("Howell Jones") has cast doubt on solicitors' ability to do this. On 25 November 2019 the Solicitors Regulation Authority ("SRA")'s Standards and Regulations 2019 (the "STARs") came into force. These con
This article provides a summary of the Howell Jones decision, and the SRA's STARs and guidance, to reconcile what the current position is in law and in practice.
Howell Jones: the facts
Howell Jones acted for a husband in divorce proceedings, during which it erred in its advice on the divorce settlement, and continued to act for its client whilst attempting to overturn the settlement. Howell Jones sought to rectify its mistake by taking the following steps:
notifying its professional indemnity insurers of its error;
suggesting two alternative courses of action to those insurers – namely, either to:
stop acting and advise the insured client to take independent legal advice; or
to admit the error in advice to the insured client, and explain the client's entitlement to seek independent legal advice, but propose the firm continue to act for him on the basis that it would seek to overturn the settlement at its own expense;
obtaining its insurers' consent to the second course of action; and
writing a letter to the insured client admitting its mistake, stating that the client could sue Howell Jones if he wished, and suggesting the two options given to insurers. The letter made clear that it would refund or credit all fees incurred to date, would not charge the insured client anything for the attempt to set aside the settlement, and would indemnify him against any adverse costs if the attempt to set aside the settlement failed.
Solicitors acting for the wife in the divorce proceedings alleged that Howell Jones had an own-interest conflict. Accordingly, the firm took advice from counsel, who advised that she did not consider that there was an own-interest conflict.
Howell Jones proceeded to apply to the court to set aside the divorce settlement. Unfortunately, the application was dismissed, and costs were awarded against the client to be assessed on the indemnity basis. This led the client to complain to Howell Jones and the Legal Ombudsman.
The SRA then investigated the matter and brought Howell Jones before the SDT. The firm admitted that it had acted in circumstances where there was an own-interest conflict. The client was awarded £50,000 and the SDT held that the firm had not ceased acting when it should have done, which was an error of judgment on the part of the firm. The misconduct was "moderately serious" as any situation in which a firm acted when there was an own-interest conflict was not a minor matter. The SDT's finding was based on an agreed outcome, as agreed between the firm and the SRA, which acknowledged that the firm had been placed in an own-interest conflict. As a result, the firm was fined £5,000 and made subject to a costs order of £26,850.
The good news is that there is not a vast amount of new detail on conflicts of interest to get to grips with: the rules have not substantively changed from the previous code.
The key provision to focus on in relation to own interest conflicts is at paragraph 6.1, in both the SRA's Code for Solicitors and Code for Firms. This makes it clear that you must not act if there is an own-interest conflict, or a significant risk of one arising. There are no exceptions to this rule.
An own interest conflict is any situation where your duty to act in the best interests of any client in relation to a matter conflicts, or is at significant risk of conflicting, with your own-interests in relation to that matter or a related matter. The SRA defines a client as the person for whom you act, and includes prospective and former clients (where the context permits). Whilst the SRA does not define "related matter", it has issued case studies on what such a matter might be. These confirm that for matters to be related there would need to be some reasonable degree of relationship between them, and that they will generally concern the same asset or liability.
The SRA has turned its attention to conflicts of interest twice in recent months: in its broader guidance on conflicts of interest in general, issued on 29 October 2019; and in this new guidance, focusing on own-interest conflicts, issued on 25 November. As the provisions relevant to own-interest conflicts from the earlier guidance have been considered in the more recent one, we will focus on the latter.
The SRA's new guidance emphasises that not all mistakes give rise to a risk of a conflict. Those which are more likely to generate conflicts, or a risk of them, can be grouped into administration errors (such as over payment of Stamp Duty Land Tax), errors capable of rectification by consent (such as typographical errors), and errors that can only be addressed by engagement with a hostile third party.
If a conflict does arise, or is likely to, then the guidance advises you to:
explain any error and proposed remedy (where there is a straightforward one) to the client promptly;
rectify the error (if possible); and
document your remedial decision-making process appropriately in conjunction with your Compliance Officer for Legal Practice. When documenting this, consider how likely it is that a conflict may arise, and how material the source of the conflict is to your present work.
The guidance also suggests that you should consider whether you might mitigate against a risk of conflict, including by:
restricting the work you do to tasks that do not present a risk of conflict;
appointing another firm to advise independently at key stages; and
offering to pay some or all of the costs of any remedial work – bearing in mind that you would need to agree this with your insurers. However, if unexpected or additional costs arise on which you would be obliged to advise, this option may not mitigate the risks sufficiently.
In more complex cases, the guidance suggests you should consider carefully whether you can advise on any remedial actions, or whether there may be points on which your personal interests would interfere with your ability to act in your client's best interests.
The guidance suggests that in considering this point, you should be alive to:
how complex and costly the remedial action would be;
whether the outcome of the action relies on the actions or decisions of other parties; and
the possibility that your client may wish to bring a claim against you, or accept a settlement offer in proceedings where their negotiating position is weakened as a result of your error. In such scenarios, the guidance clarifies that you will not be able to advise the client.
The guidance accepts that if it would be in your client's bests interests to take independent legal advice, you may be able to act for the client again on any further remedial steps after they have considered the independent advice. However, the guidance also acknowledges that it may become increasingly difficult to continue acting on a matter whilst defending your reputation and/or contending liability, particularly where the remedy requires you to make admissions on points of liability or quantum.
The guidance surmises that in all cases – and particularly before making any admission as to liability - you should consult with your insurers at the earliest possible opportunity, as an error may comprise a "notifiable circumstance" under your policy.
Comment and practical takeaways
The issue of own-interest conflicts remains a difficult and uncertain one. Precedent had previously suggested that the honest and genuine opinion of a solicitor on a matter of professional judgment would not give rise to a disciplinary offence [per Connolly v Law Society [[2007] EWHC 1175 (Admin)]. However, if one reads Howell Jones, it seems that it has become impossible to put matters right without regulatory exposure if a conflict of interest arises, even if the solicitor has the very best intentions (the SDT said Howell Jones did not lack integrity and acknowledged they had taken a number of steps to resolve the matter to their client's satisfaction). Howell Jones even obtained advice from counsel that there was no conflict; albeit that advice was given before the application to set aside the settlement was dismissed. This leads one to wonder what else Howell Jones could realistically have done in the situation. Indeed, Howell Jones' solution seems to have been a sensible one and arguably cured the conflict (at least while the application was made).
There is also a tension between the Howell Jones decision and the requirements of the SRA Codes of Conduct 2019. Whilst you must cease to act if there is an own-interest conflict, or a significant risk of one arising, you must also separately comply with paragraph 3.5 of the Code for Firms, and/or paragraph 7.11 of the Code for Solicitors as applicable, which requires you to be "honest and open with clients if things go wrong, and if a client suffers loss or harm as a result you put matters right (if possible) and explain fully and promptly what has happened and the likely impact…". This applies, where the context permits, to former as well as current clients.
Considering Howell Jones in light of the new guidance suggests that, between mitigating any losses for your client and complying with the SRA's Codes, a grey area will remain in which the regulator will have discretion to take action against a firm. The SRA guidance suggests that it will be a balancing act. You must consider carefully whether you can advise on any remedial actions, or continue to act. However, in compliance with the Codes you should also remain mindful at all times of the requirement to act in the best interests of your client (per SRA Principle 7). Accordingly, as the guidance surmises, this will be "a matter of professional judgment in all the circumstances".
In short, the guidance appears to encourage us to stand back from the situation, to be honest and open with the client when things go wrong, and to put things right where possible.
Even if you determine that there is no own-interest conflict in a given situation, you should document your decision and reasons, and consider any reputational risk arising from accepting the work, as the perception of a conflict could potentially be just as damaging as an actual conflict.
That careful analysis and documentation is, of course, all the more important in cases where a conflict does (or looks likely to) arise. Your analysis and records should include the fact that independent legal advice was obtained by the client, if that was the case, particularly when advising on the settlement and resolution of a claim. If you cannot agree a way forward on that with any colleagues and the client, advice should be sought from Counsel.
If it might be in your client's best interests to bring a negligence action against you, then you should advise the client to take independent legal advice, which you might offer to pay for.
If it appears that a conflict would remain, then following Howell Jones, Code 7.11 and the new guidance you should cease acting. The guidance does recognise it may not always be possible to instruct a new firm in time, in urgent situations, and concludes that in such cases you must do "what is necessary" to protect your client's interests, such as by issuing an application to the court for an extension of time or a standstill, informing insurers, and obtaining consent from your client to act. You should then immediately refer your client for independent legal advice.
The concern over own-interest conflicts that has arisen in the wake of Howell Jones is not unwarranted. On the positive side, the common sense summary from the SRA's guidance remains that, whilst all matters turn on their own facts (as Howell Jones did), administrative errors and those that are capable of rectification by consent are unlikely to give the SRA much concern. Contrariwise, it is less clear how the regulator will continue to deal with hostile rectifications.
It is possible that Howell Jones would be decided differently now given the STARs and new guidance. Even in light of the new regulatory regime, it appears to us that the decision was a harsh one; and indeed, the SRA's decision to issue this new guidance may well have been prompted by the market's reaction to the Howell Jones decision. However, only time will tell how the regulator will decide on future such cases (particularly as Howell Jones was only in respect of an agreed outcome). We will be on the lookout for any precedent in this area that might vary or establish any nuances to this new guidance.
Alexia Prakas
James Preece
Sujets:
Regulatory Defence
Restez à jour avec Clyde & Co
Inscrivez-vous pour recevoir nos mises à jour par courriel directement dans votre boite de réception!


text:
Q: Create customer wise google analytics I am new for Google Analytics.I have read about this.But I can not get solution of my query.
Please help me on that.
My query is, suppose I have 3 customers on my store and they can upload their products from their own dashboard.Now I want to display a graph/chart on these 3 customer's dashboard for visitors who visits that particular customer's product.
So how can be done ?

A: Rather than Going for google analytic you can create a custom plugin ,
Use the below collections to get data and add filter to that collection where product ids are related to that user
http://blog.chapagain.com.np/magento-how-to-get-most-viewed-products/


text:
United States players kneel prior to their women's socce... more
How Did We Get Woke-letics?
James Allan
Professional sports is ruthlessly meritocratic. Why are so many stars wallowing in bumper sticker moralizing?
My high school and university years were spent focused largely on one thing: competitive sports. I was a starter on my high school basketball team that won a Toronto area title one year and nearly won another. I played varsity basketball at a Canadian university—think Division II in the US, maybe a tad lower. (As a six-foot-tall midget surrounded by giants I learned how to hold my alcohol if nothing else.) And later in life, I was a competitive curler going to two world championships and a bunch of seniors ones. (This, readers, is much easier to do when you are an ex-pat Canadian, living in New Zealand and then Australia.)
That preface is not meant to spruik my own sporting credentials. They are second-rate, at best. It is to buttress my claim that I have a pretty good insight into the world of competitive sports. I know it. I love it, especially the thrill of pressure-packed competition. But here's the thing. Once you reach a certain level of competitive sports it becomes plain to nearly anyone that merit is key. One's ability to deliver—to make the shot or deliver the block or kick the goal—is what matters. It's not the extent of your parents' wealth. It's not your skin color. It's not your political druthers. More than just about any other aspect of life in a modern democracy, high-level competitive sports are a meritocracy. No good team indulges in affirmative action quotas for players, employing some sort of checklist to make sure you have an Asian, a homosexual, maybe a Jew. None. Want to know why over four-fifths of the NBA players are black? Because they are better players than those who failed to make it. Full stop.
The days of excluding great athletes because of their skin color are long gone. Money in professional sports and the rewards linked to success make everyone a meritocrat. Owners, coaches, and players all concentrate on finding or being the best player available. If your owner or team doesn't focus solely on that, another's will. And long term, they'll win. You won't. That was always my experience too. When it came to game time, who could deliver was what mattered.
What, then, is the appeal of woke, identity politics to so many of today's professional athletes, especially in the United States? I mean that as a serious, not rhetorical, question. After all, it is a ruthless meritocratic process over many years that selects the athletes who play in today's NFL, NBA, NHL, MLB, and English Premier League, not to mention those who make national teams and qualify for the Olympics. It is a process that hugely rewards long hours of practice, mental toughness, individual responsibility, and a clear understanding that not everyone is born with the same natural abilities so one must work with what he has (and some have a lot more than others). One might even be tempted to think of all this as a hothouse for creating—you know—conservative capitalist individualists who shun group-think, quotas, and the empty gestures of virtue-signalling.
Not so, apparently. Across so much of today's sporting landscape, the last few years have shown us professional sports leagues and incredibly highly paid sports stars wallowing in bumper sticker moralizing and gestures that are at best empty and at worst malign. Across so much of today's sporting landscape—from the NFL to women's soccer to the English national soccer team at the recent Euro competition to the Australian national cricket team and back to the NBA—players "take the knee." They make unspecified (indeed unspecifiable) demands for "social justice." They support an organization like Black Lives Matter that on even the most cursory of examinations can be seen to be against the nuclear family, against capitalism, against the police, and even more supportive of the communist regime in Cuba than of its oppressed citizens who recently came out in numbers to protest against that regime. Put differently, BLM implicitly has a higher regard for life in Cuba than in the United States.
I'm betting that deep down a good number of these athletes don't agree with "taking the knee" or with shunning the yearly visit to the White House. . . . Yet opting to go with the flow seems easier than being brave.
All of this virtue-signalling has really put off people like me, people who love not just playing but also watching top-level sports. In a world of multiple causes for nearly everything, it would nevertheless be a brave and creative person who tried to claim the NBA's TV ratings these last few years have not been badly affected by this descent into gesture politics. This season's finals ratings were second-lowest in some four decades, second only to last year's delayed 2020 finals that went head-to-head with the NFL, and massively down from the Michael Jordan era. No game of this year's playoffs, the finals included, garnered anywhere near the number of TV watchers that this year's NCAA college hoops finals scored. And that was between two small colleges, Gonzaga and Baylor, with tiny home markets. Likewise, but not as badly, baseball's viewership is down. That of the Olympics is way down—thanks, I bet in part, to the US women's soccer team's proclivity for "taking the knee." The list goes on, not quite reaching the nadir of the Academy Awards' plummeting viewership, but you get the idea.
Turns out that one-sided, identity-politics preaching by highly paid sports stars (whose own professional world wholly shuns affirmative action, group-based quotas, and wallowing in empty gestures) really irks many customers who indirectly pay their salaries by watching. Heck, try to think of a televised top sport that has not been infected by this gesture-driven, in-your-face lecturing. The best I can come up with is golf, which in many ways is the most individualistic and self-reliant big sport there is (not to overlook that it probably has the most openly Republican competitors too). Remember, with golf no one is guaranteed any money at all. Near on half of each week's field is cut at the halfway point and goes home with no money at all. Meanwhile, a huge chunk of the total tournament dollar prize goes to the winner.
Let's finish then with some speculations on my part for why this is all so. It could be that these sports stars are ill-informed about politics and social science. They don't know the data on how many unarmed black Americans are shot each year by the police, or the broader racial statistics surrounding police interactions. They are busy being professional sportsmen and women. They have agents. They are interviewed by sports reporters. They go with the flow.
Tied into that, there could be dollops of what many of us would call cowardice. I'm betting that deep down a good number of these athletes don't agree with "taking the knee" or with shunning the yearly visit to the White House because its occupant was Donald Trump. (Remember, in a country where statistically men lean Republican more than women, and white men more than black, it is extremely improbable to doubt that the ranks of, say, the NHL or of NFL quarterbacks or of MLB managers do not contain more than a few Republican voters.) Yet opting to go with the flow seems easier than being brave. So they apologize when they don't really believe they have anything for which to apologize. Just do it (no pun intended) to make all the social media stuff go away.
Then there's the self-interest angle. Big corporations have never been more woke. They pay a lot of money to many, many sporting stars. Sure, it is bizarre to think that someone could get rich from sponsors by dissing and lambasting the country that made him an uber-wealthy sporting millionaire. But it is what it is. So more than a few of these stars just play the game the corporate wokesters want.
Here's a last possible cause I'll moot. For reasons that are somewhat unclear, sports reporters on TV, radio, and the newspapers lean Democrat even more starkly and one-sidedly than their colleagues who cover politics. We know that from the data on political donations. Political journalism is really lopsided and partisan. Double that and more and you have the sporting press. Surprising, isn't it? Still, the only top sports journalist in the US I know of who came out openly for Donald Trump before the last election was Clay Travis. I'm sure there were others. They just were not working for ESPN and there weren't many of them, possibly as a result of fearing for one's job in a social media world where woke warrior athletes get heaped with national praise, while the quiet ones are generally ignored or worse.
At some point, of course, the pendulum swings back. Perhaps going woke really will drive some broke as TVs turn off (a far from certain outcome, alas). Perhaps the meritocratic spirit of sports will reassert itself once the novelty of wokeness wears off. Speaking personally, though, that can't come soon enough. The list of sports I'm prepared to watch keeps shrinking. I'd prefer to see it growing.
Share this Essay
Subverting Democracy and Brexit
David McGrogan
James Allan is Garrick Professor in Law at the University of Queensland.
The Illogic of Cultural Appropriation
Mike Rappaport
Criticisms about cultural appropriation turn out to be inconsistent with essential aspects of the greatness of a free society.
Baseball's Woke Streak
David Lewis Schaefer
Is identity politics now our real national pastime?
The Blowback Dividends of Woke Capitalism
Richard M. Reinsch II
The real legacy of woke capital gives shape to an outrage style in politics, one that ultimately threatens free markets.


An innovative construction company has developed Australia's widest self-supporting curved roofing panel.
Architects have begun successfully applying the technology to large commercial projects such as sports centres and multi-purpose halls, indoor swimming pools and large shade structures. It is also used for projects as diverse as airport terminals and grain silos.
All benefit from the expansive open space created when trusses and internal columns are eliminated from the design.
The panels are roll-formed on site from pre-painted Colorbond coil steel. The patented self-locking edge allows panels to clip together with a strong waterproof seal - no screws or bolts. It is fast, simple and cost effective.
The profile is initially rolled as a continuous straight panel. It is then curved to the required radius. Straight panels are ideal for skillion roofs and walls. Once curved, the panels are used to create a distinctive self-supporting curved roof.
There are two profile sizes available: one spans 30 metres, the larger spans 40 metres.
Acoustic and thermally insulated ceilings, plus a wide range of services can be supported directly from the roof. Larger loads require light-weight structural members.
The company offers design assistance to help Architects maximise the benefits of their exciting system.


text:
PLAYING WITH MATCHES
new album official release
Magdalena Quintana
Producer: Magdalena Quintana
Find Me on Spotify
Find Me on Apple Music
1.PLAYING WITH MATCHES
https://www.magdalenaq.com/wp-content/uploads/2016/11/PLAYINGWITHMATCHES_magdalenaq.mp3
2.CLOSER TO HEAVEN
https://www.magdalenaq.com/wp-content/uploads/2016/11/CLOSERTOHEAVEN_MagdalenaQ-101719-11.29-AM.mp3
Stepping onto the scene with a powerful voice and unique sense of style, Magdalena Quintana, the great-great granddaughter of John Dodge of the Dodge Brothers car empire, has brought a fresh vibe to the country/pop music world. With a long history, and passion for music, Magdalena has no intentions of looking back now.
Raised in both a small town in the Pacific Northwest, Port Townsend, Washington, and at a small mountain community near Vernon, British Columbia, Canada, Magdalena began singing at a very early age, with the influence of her mother and father. Her mother, a long time lover of music and singing, and father, a passionate guitar player, who dabbled in songwriting, surrounded Magdalena with a love for music early on.
Magdalena is currently in Nashville working on a new country/pop EP and two accompanying music videos, due out late 2019.
She continues to perform live shows while traveling, and while at home in Los Angeles and Nashville. Tour plans are in the works, following the release of the upcoming EP.
"I just love playing music," Magdalena concludes. "It's never really mattered whom it's for. As long as the audience is moved by my art, then that's all I can ask. Through everything, my goal remains the same: to be able to write songs and perform for the rest of my life!"


Abstract Painting: "Pascha, The Eighth Day"
Pascha, which is to say the date of the ressurection, is traditionally considered to be the start of the eighth day of Creation. It's also the eighth day in my Holy Week series, so the title is a dual pun referring to that fact as well.
The flame? Well, in the service for the Resurrection, all lights in the church are extinguished, save for one: a light on the altar. From this light, the priest lights a candle, which then is used to light all the other candles in the church. I've always felt that the Eschaton will come on a Pascha; the priest will go into the altar, to get the light, but instead, out will come Christ, and it will be Pascha forever. The flame, therefore, represents the risen Christ.
Furthermore, I've always thought that the Eschaton, the ending of all things, will happen on a Pascha. The priest will go into the sanctuary to get the light, and instead, Christ, who is the light, will come out, and it will be Pascha for all eternity.


This kid is a great athlete, and he is in the playground playing soccer with his classmates. As you can see, that is a toddler because the ball seems very large compared to him. This boy wears everything you need to play this sport: football boots, uniform and soccer ball. If you also like playing football with friends, have fun coloring this drawing now. It is another way to enjoy the sport!
This coloring page has been painted 6567 times online. Ranking 0 of The Best Coloring Pages.
Soccer is a team sport of British origin. In schools and parks, children play it in an unprofessional manner, just for fun. There are also small children football leagues.
Let's paint kid playing soccer coloring page Do you like Soccer coloring pages? This is a picture of kid playing soccer to color or paint online from your browser without having to download or install anything, is absolutely secure. From here you can paint free kid playing soccer coloring page on Soccer. All children like crafts and activities at home, such as kid playing soccer coloring page is in English and is related to Soccer. Our drawing of kid playing soccer is one of the best drawings and pictures to paint of Soccer that you are getting and you can share it with your friends and contacts on social networks. You can print the black and white drawing of kid playing soccer invite you to try and then color it with colored markers or wax paper, learn about it and share it in the comments, show it to your friends. It is a fun and educational activity for children, which helps them develop motor skills and coordination while having fun.


441 MERRICK RD. LAUNDROMAT, INC.
441 MERRICK RD. LAUNDROMAT, INC. is an entity registered at NASSAU county with company number 4089591. 441 MERRICK RD. LAUNDROMAT, INC. located at the address 610 Bellmore Avenue East Meadow, New York, 11554. Company is incorporated on May 4, 2011. Current status of the company is active.
May 4, 2011 Actual 441 MERRICK RD. LAUNDROMAT, INC.
441 PARK AVENUE SOUTH CORP.
THOMAS MARINE ALUMINUM BOATS INC.
REN HE TANG RELAX SPA INC.
TUSCANY SPA & MASSAGE, INC.