text:
BBCNEWS (BBC News)
Outside Source : BBCNEWS : July 20, 2017 9:00pm-9:31pm BST
Jul 20, 2017 07/17
been lots of arrests as well. the bbc's gary o'donoghue was in the press briefing andi o'donoghue was in the press briefing and i spoke to him earlier. that have been a few arrests. the guy who ran alpha bay which have been a few arrests. the guy who ran alphabay which was shut down on the 5th ofjuly, he was a canadian living in thailand, and he was arrested, but it seems that he committed suicide a week later while in custody in thailand. there is a bit of a mystery there. the other people in terms of hansa, some arrests were made in the netherlands and germany as well in relation to the european side of it. there is some discussion about alphabay and some discussion about alphabay and some people who work for that in the us getting arrested. i think they are particularly focusing on finding the service, and they have done that, and closing them down and closing down this trade, because of course, jeff sessions was very explicit about this, he said americans have died as a result of buying opioids like heroin and artificial opioids on this alphabay website. he named some names. i
been lots of arrests as well. the bbc's gary o'donoghue was in the press briefing andi o'donoghue was in the press briefing and i spoke to him earlier. that have been a few arrests. the guy who ran alpha bay which have been a few arrests. the guy who ran alphabay which was shut down on the 5th ofjuly, he was a canadian living in thailand, and he was arrested, but it seems that he committed suicide a week later while in custody in thailand. there is a bit of a mystery there. the other people...
Outside Source : BBCNEWS : April 17, 2017 9:00pm-9:31pm BST
, he insisted, no—one will be able to stop it. john sudworth, bbc news, pyongyang. gary o'donoghue is in washington and talked me through the options available to the us. the options are limited. there is a carrier group off the coast that the vice president standing high ball and the north koreans across the demilitarised zone, a lot of rhetoric coming out of donald trump. there is a lot of noise and show of force, but what can they actually do? if they strike north korea, the most likely outcome is that those artillery batteries embedded in the hills and mountains north of the borderjust 30 miles hills and mountains north of the border just 30 miles from hills and mountains north of the borderjust 30 miles from seoul could hit 10 million people, cause enormous devastation. that doesn't seem like a good outcome. what they are hoping for, what they are relying on, is a change of heart by china, a new attitude in beijing thatis china, a new attitude in beijing that is prepared to put real economic and political pressure on the north koreans. china is the only country that north korea l
, he insisted, no—one will be able to stop it. john sudworth, bbc news, pyongyang. gary o'donoghue is in washington and talked me through the options available to the us. the options are limited. there is a carrier group off the coast that the vice president standing high ball and the north koreans across the demilitarised zone, a lot of rhetoric coming out of donald trump. there is a lot of noise and show of force, but what can they actually do? if they strike north korea, the most likely...
Outside Source : BBCNEWS : May 9, 2017 9:00pm-9:31pm BST
May 9, 2017 05/17
real. the americans and their response is intriguing. let's speak to gary o'donoghue. why have the americans change their mind? they're getting a stark message from commanders on the ground. general nicholson saying earlier this year effectively there is a stalemate in afghanistan between the afghan forces and the taliban. that he needed several thousand more troops to train, advise and assist the 350,000 strong afghan army, to push the taliban back. it has about one third of the country, controlling directly, or has significant influence. battles over the northern city, taken influence. battles over the northern city, ta ken back influence. battles over the northern city, taken back and forward. reports of controlling a highway in the north—east of the country, a very significant rate. the americans believe if few extra thousand will make a difference. also asking nato to send a few extra thousand as well. of course, may not be soon enough for the fighting season, in full flow at the moment. we are expecting some sort of deal towards the end of the month, when nato meeting in br
real. the americans and their response is intriguing. let's speak to gary o'donoghue. why have the americans change their mind? they're getting a stark message from commanders on the ground. general nicholson saying earlier this year effectively there is a stalemate in afghanistan between the afghan forces and the taliban. that he needed several thousand more troops to train, advise and assist the 350,000 strong afghan army, to push the taliban back. it has about one third of the country,...
Outside Source : BBCNEWS : August 23, 2017 9:00pm-9:31pm BST
president. here is gary o'donoghue in washington. i don't think he will lose sleep over this in particular. it is not taking aim at him personally. it's very careful in its wording about the us administration and identifying and investigating, exception. i am sure they would agree with pretty much every word of that, but it is an indication of the international concern about the way things are going here in america and the ongoing issue around charlottesville. and the ongoing issue around cha rlottesville. and you the ongoing issue around charlottesville. and you are right about this day in, day out vacillation, if you like. you cannot tell what kind of donald trump you're going to get. we saw it last week over charlottesville you're going to get. we saw it last week over cha rlottesville on you're going to get. we saw it last week over charlottesville on the monday, when we had that very carefully orchestrated speech, where he condemned the kkk and specifically called them out, etc. and then tuesday, completely going off piste and reigniting the whole issue all over again. he's doing his
president. here is gary o'donoghue in washington. i don't think he will lose sleep over this in particular. it is not taking aim at him personally. it's very careful in its wording about the us administration and identifying and investigating, exception. i am sure they would agree with pretty much every word of that, but it is an indication of the international concern about the way things are going here in america and the ongoing issue around charlottesville. and the ongoing issue around cha...
Outside Source : BBCNEWS : August 21, 2017 9:30pm-10:01pm BST
deaths since 2001, 301000. gary o'donoghue of the bbc in washington reported on the options president trump faces. the options are, from total withdrawal of american forces, some it of them in afghanistan, bring them all home, adding another a000 or so to traditional at the afghan army, that's taken some heavy losses in the fight against the taliban. possibly using private contractors to do some of that so that some of the american troops can come home. soa the american troops can come home. so a variety of options on the table, i think the most likely one is an additional introduction of troops, which of course donald trump said should happen before he became a candidate, before he became president. that he would not be the only president to change mind on this, president obama did the same kind of reversal and this is america's all, ros, 16 years and counting. whether you are watching in the uk or elsewhere you will see that address from president trump on the bbc. to south asia, where flooding is causing humanitarian crisis. it is estimated that over 750 people have already died an
deaths since 2001, 301000. gary o'donoghue of the bbc in washington reported on the options president trump faces. the options are, from total withdrawal of american forces, some it of them in afghanistan, bring them all home, adding another a000 or so to traditional at the afghan army, that's taken some heavy losses in the fight against the taliban. possibly using private contractors to do some of that so that some of the american troops can come home. soa the american troops can come home....
Outside Source : BBCNEWS : January 26, 2017 6:00pm-6:51pm GMT
in the bbc's gary o'donoghue live in philadelphia. gary, give us the context of the speech that donald trump is about to make. what you have got gathered here in philadelphia is all the senior members of the republican party inside congress, the house of representatives and the senate, all here to listen to donald trump's legislative agenda, how he plans to handle things like health care reform, what his plans are for the tax code, and of course he will be coming here to ask them for money for that mexican wall. they know that they will have to stump up money upfront to start to build that wall. they have agreed to do that, they think it could be up to $15 billion, a lot of estimates say it could be more than that, no real clear plan apart from some generalisations from republicans here orfrom the generalisations from republicans here or from the president about how the american taxpayer is going to get their cash back, and what we know is the mexicans are insisting they will not pay for that wall. and gary, just quickly runners through the schedule of events relating to the sch
in the bbc's gary o'donoghue live in philadelphia. gary, give us the context of the speech that donald trump is about to make. what you have got gathered here in philadelphia is all the senior members of the republican party inside congress, the house of representatives and the senate, all here to listen to donald trump's legislative agenda, how he plans to handle things like health care reform, what his plans are for the tax code, and of course he will be coming here to ask them for money...


I came across an interdisciplinary seminar on the Jewish Roots of Eastern Christian Mysticism which could prove to be interesting. It links to heaps of resources including previously published and unpublished scholarly articles, electronic publications, lectures, reviews and critical responses to these materials. I haven't had time to digest it all yet though. If you want to check it out see here.


Ethel Letitia Cornell papers, 1906-1964.
Correspondence, articles, reports, proceedings of meetings, bibliographies, manuscripts, certificates, diplomas, drawings, and other items.
Materials pertaining to Cornell's career as a psychologist with the New York State Education Department.
Psychologist, New York State Education Department.
Correspondence, articles, reports, proceedings of meetings, bibliographies, and other items pertaining to intelligence testing and the nature of intelligence, exceptional children, growth studies, the characteristics of high school students, language usage of high school students, early secondary education in New York State, mental health, the certification and role of the school psychologist, the New York State Psychological Intern Training Program, the American Psychological Association, and the New York State and American Associations of Applied Psychology, and to related topics. Also, Miss Cornell's examination books and notes from courses at Cornell (1911-1914) and Columbia University (1915-1917); her creative writing and other non-scientific manuscripts (ca. 1906-1910); certificates and diplomas (11 items, 1906-1948); and various blocks and drawings used in psychological testing.
American Association for Applied Psychology.
New York State Association for Applied Psychology.
Ethel Letitia Cornell papers, #2545. Division of Rare and Manuscript Collections, Cornell University Library.
3 wooden file boxes with the names of individuals and various subject headings in psychology.
A wooden box of blocks with different colors for "block designs."
A wooden box of blocks for cube construction.
Two envelopes containing wooden shapes, no title.
13 small folders containing drawings for "Picture Arrangement," "Design for Memory," and "Block Designs" tests.
4 sheets of University of State of New York "Education Measurement Performance Scale," blanks. Also Cornell-Coxe Performance Ability Scale, Individual Record Blank.
Personal Correspondence - re: E.L.C.'s retirement and other items ( ).
Manuscripts by E.L.C. (teenage and earlier)--stories, plays, and other items.
Copies of Surveys by E.L.C. including "Facts Concerning the Birth and Reproduction Rates in the U.S. and N.Y.S. with Comments on Their Implication for Education" (E.L.C. and Ruth Wood Gavian, 1942, 31 pp. mimeographed), and various surveys in New York State Schools of pupil ability and achievement, 2 folders.
Speeches, book reviews, articles, bibliographies, and notes by E.L.C. pertaining to psychologists, student characteristics, reading ability, the psychological facilities in schools, and other subjects, 3 folders.
A list of publications by E.L.C. (carbon and original typescripts, 10 pp.).
Miscellaneous--Various miscellaneous items such as poems, a contract for Cornell, Coxe and Orleans' Rating Test Scale for School Habits, material re: E.L.C.'s inclusion in American Women of, an eulogium for E.L.C. in The N.Y.S. Psychologist (16:1, p. 6) and other printed and miscellaneous items.
New York Psychological Intern Training Program - Correspondence, and material pertaining to conferences on this subject and to the qualifications of the interns, 2 folders.
NYSPA Bulletin, Joint Council Newsletter, NYS Psychologist, N.Y. Board of Examiners on Psychology, By-Laws, and related items.
Notes on General Psychology and Neurology and other subjects (n.d.).
The Psychologist and the School. Correspondence, reports, case studies, articles, and proceedings of meetings pertaining to certification requirements for school psychologists, the work of the school psychologist, and related topics, 15 folders.
Conference on Democratic Processes (Schenectady) - description of the conference, reports, and related items.
"Plan for the Evaluation of the Empire State FM School of the Air Radio Program" (by Barbara D. Lacombe, Jane C. Saunders and E.L.C.
Exceptional Children - abstracts, bibliographies, and correspondence. (Original and carbon typescripts and handwritten, 4 folders.
Growth studies and characteristics of H.S. Pupils - material relating to the Harvard Growth Studies, the tasks of early secondary education, longitudinal studies of individual development, the characteristics of high school pupils. Correspondence, notes, and relevant items, 7 folders.
Studies on Social and Economic Trends, Personal and Family Living, Elementary and Early Secondary Education. Typed, mimeographed, and handwritten items, including notes, related to these studies, 4 folders.
"Free Language Usage of H.S. Pupils" - charts, notes, and data on errors, 5 folders.
Language Fact, Tests and Scoring (n.d.).
Linguistic Relations Completion Test - Test blanks, scoring keys, tabulations of results, and related items (n.d.), 2 folders.


We knew plastic ban was coming!
The chairman of Wisynco Group William Mahfood's characterisation of Minister Daryl Vaz's pronouncements on the possible ban on plastics and Styrofoam as knee-jerk is preposterous.
He does admit that the country is in a crisis, but is one of the very first to criticise the impending move.
One can understand Mahfood's position based on the fact that his company is one of the largest manufacturers of plastics and as such it would be extremely impacting on him. It is, however, incumbent on the Government to do all that is necessary to prevent the decay of the environment by way of pollution.
I am very mindful that the transition to use more biodegradable products can be costly, especially for the smaller business owners, but the process has to begin and the longer we wait, the more costly it will become. Furthermore, the cost will be incomparable to the long-term benefits associated with this move.
Interestingly, this way forward has been bandied about for years now and many companies, such as Island Grill, started phasing out plastics and Styrofoam. So it shouldn't be greeted with absurdity by some big corporations only watching their bottom line.
The Government, like all of us, have a civic responsibility to take care of our environment and, in return, it will take care of us. So with care and thoughtfulness, much like the touted ban on sugary drinks in schools, the Government should proceed, but cautiously ensuring all factors are considered.


During the German occupation of France, railway workers help the Resistance effort by doing everything in their power to outwit the Nazis. They smuggle Jews in the water tanks of their steam engines, cut power lines, and blow up trains carrying military reinforcements to the front lines. The penalty for sabotage is death by firing squad, et still these men persist.
Clément used documentary footage from a 1943 short about rail workers and expanded it into this thrilling docudrama, merging actors and scripted dialogue with actual Resistance fighters and railway employees. The result is astonishing cinema vérité and a vital piece of living history, as we experience a "fly on the wall" perspective of life under Nazi rule. This was the first major film about the French Resistance, paying tribute to these brave souls who were off the battlefield, but still willing to fight for their freedom and their country.


text:
Q: Hibernate EntityManager with getSessionFactoryGetCurrentSession() I changed my application to work with Hibernate EntityManager (from Hibernate session),
but i have some old codes (i can not change those codes) that used in below code:
getSessionFactory().getCurrentSession() .
i have bean of sessionFactory so the code above supposed to work but in runtime i have
HibernateException("No Session found for current thread") ,even the code above was executed in transaction block.
FYI: I checked the transaction resources (in debug mode) and with key EntityManagerFactory, session exist but not under SessionFactory key

A: I suggest you to do this (seems hacky, but with legacy code, it's sometimes required)
This solution use Spring TransactionSynchronizationManager and Hibernate 4, but can be adapted to other Hibernate version.
Here is the idea: using a custom implementation of CurrentSessionContext in your SessionFactoryBean, and this custom implementation will search in the transactional resources for the entity manager of the current transaction; when it is found simply calling the code posted by IIla to get the hibernate Session.
To do it :
1.Define the property hibernate.current_session_context_class in hibernateProperties:
<bean id="sessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    ...
    <property name="hibernateProperties">
        <props>
            ...
            <prop key="hibernate.current_session_context_class">
                com.example.jpa.HibernateSessionInEntityManager
            </prop>
        </props>
    </property>
</bean>

<!-- for completness : here are the other relevant beans -->

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.example.jpa.validator"/>
</bean>

<bean id="transactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="dataSource" ref="dataSource" />
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

2.Implement your custom CurrentSessionContext : HibernateSessionInEntityManager.java
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.context.spi.CurrentSessionContext;
import org.hibernate.ejb.EntityManagerImpl;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.springframework.orm.jpa.EntityManagerHolder;
import org.springframework.transaction.support.TransactionSynchronizationManager;

import javax.persistence.EntityManager;
import java.util.Map;

public class HibernateSessionInEntityManager implements CurrentSessionContext {

    public HibernateSessionInEntityManager() {
    }

    public HibernateSessionInEntityManager(SessionFactory sessionFactory) {
    }

    public HibernateSessionInEntityManager(SessionFactoryImplementor sessionFactory) {
    }

    public Session currentSession() throws HibernateException {
        Map<Object, Object> resourceMap = TransactionSynchronizationManager.getResourceMap();
        for(Object v:resourceMap.values()){
            if(v instanceof EntityManagerHolder){
                return getSessionFromEM(((EntityManagerHolder)v).getEntityManager());
            }
        }
        return null;
    }

    private static Session getSessionFromEM(final EntityManager entityManager)
    {
        final Object emDelegate = entityManager.getDelegate();
        if (emDelegate instanceof EntityManagerImpl)
        {
            return ((EntityManagerImpl) emDelegate).getSession();
        }
        else if (emDelegate instanceof Session)
        {
            return (Session) emDelegate;
        }
        throw new HibernateException("No Session found");
    }
 }

Note all those constructors: Hibernate-4 needs the one with SessionFactoryImplementor and I think Hibernate-3 needs the one with SessionFactory. (The no-args constructor is probably not required)
3.Here a simple test case to validate that it works
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:ApplicationContext.xml" })
public class HibernateSessionInEntityManagerTest {

    @Autowired
    public SessionFactory sessionFactory;

    @Test
    @Transactional
    public void testGetHibernateSession(){
        Session session = sessionFactory.getCurrentSession();
        Assert.assertNotNull(session);
    }
}

I hope it will help. (BTW: nice question)
Important remark: if you have multiple EntityManagerFactoryBean be carrefull to choose the good one when looking into the transactionnal resources. (i.e. for instance look at the persistenceUnitName of the associated entityManagerFactory)

A: Shorter implementation of the "getSessionFromEM" method:
    private static Session getSessionFromEM(final EntityManager entityManager){
    return entityManager.unwrap(Session.class);
}

redpajama_set_name: RedPajamaStackExchange


text:
JUSTIFICATION FOR ISRAELI RACISM AND APARTHEID
July 29, 2016 at 12:18	(Apartheid, Irony, Israel's Shame, Racism)
First read THIS post from yesterday
"In Arab culture, it is customary to bring lunch or dinner to the pool and when, usually, when it's crowded, mess is left behind. My Jewish residents don't make a mess and don't leave trash behind."
Aftermath of a Palestinian picnic
Did Israel Lawmaker Just Call for Swimming Pool Apartheid?
An Israeli mayor from the Galilee apologized for causing offense by saying that he does not want Arabs to use swimming pools of predominantly-Jewish towns and cities.
Speaking on the Kol Rega radio station Thursday, Motti Dotan, head of the Lower Galilee Regional Council, said: "I don't hate Arabs, but I don't want them at my pools. I don't go to their pools, either."
His statement, published prominently by Haaretz and other media, provoked outrage and accusations of racism against Dotan, a member of the Likud party and a board member of the Foundation for the Benefit of Holocaust Victims in Israel.
In Thursday's radio interview, he ascribed his opinion to "cultural differences" and not racism. He cited different dress norms. In an interview for 103FM, he said: "I apologize if anyone was offended by what I said."
Dotan noted that no Jews swim at an Arab-owned private pool near Kibbutz Beit Rimon, one of several Jewish communities and towns represented by his council. Neighboring Arab towns and villages are represented by a different regional council. But he also said "no one checks bathers at the entrance" to pools and that Arabs are free to enter any of them.
In the 103FM interview, he said Arab bathers tend to leave a mess behind them.
"In Arab culture, it is customary to bring lunch or dinner to the pool and when, usually, when it's crowded, mess is left behind. My Jewish residents don't make a mess and don't leave trash behind," he said.
"If [Arabs] would behave according to our norms, then I'd have no problem. But that doesn't happen, so I generalize," he said in the Kol Rega injterview. "When Jewish men and women will feel comfortable in an Arab town, then I will be happy to have them over. But until that happens, I don't want them."
Yousef Jabareen a Knesset member with the Joint Arab List party slammed Dotan's comments, telling Haaretz: "In addition to being morally unacceptable, they constitute a criminal offense, and I am contacting the attorney general to open a criminal investigation."
In a statement, the Abraham Fund Initiatives, a nonprofit that promotes coexistence between Israeli Jews and Arabs, quipped: "Motti Dotan .., isn't a racist. He simply doesn't want dirty Arabs in his pool. For his part, he promises not to go to 'their' pools (the imaginary pools existing in all of the Arab communities in the Lower Galilee)."
In April, a right-wing Knesset member was slammed for saying Arab and Jewish mothers in Israel's maternity wards should be placed in separate rooms. In a Twitter post, Bezalel Smotrich of the Jewish Home party said, "It's natural that my wife wouldn't want to lie down [in a bed] next to a woman who just gave birth to a baby who might want to murder her baby twenty years from now."
Smotrich added that "Arabs are my enemies and that's why I don't enjoy being next to them."
Soon after their posting, the tweets were criticized by party leader Naftali Bennett.
The leader of a local Israeli government council said Thursday that he doesn't want to see Arabs using public swimming pools in his locality.
"I don't hate Arabs, but I don't want them at my pools," Lower Galilee Regional Council head Motti Dotanhe told a radio station. "I don't go to their pools, either."

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Accordion with nested sublevels My colleague did a single-level accordion for our internal web, which I'd like to develop into a multi-level accordion (I'd like 3 levels in the final version). I tried adding a sublevel to the accordion by making a new css-part ('questionv3') and expanding the if-statement in the js to inherit that as well.
However, the nested content is not properly displayed when I run the code. I sense that my approach with adding divs in divs is not working.
Any suggestions on how I can make this Work? Your help would be greatly appreciated.
Link to the codepen: http://codepen.io/discoking1986/pen/amaZYw
var dhtmlgoodies_slideSpeed = 50; // Higher value = faster
var dhtmlgoodies_timer = 5; // Lower value = faster

var objectIdToSlideDown = false;
var dhtmlgoodies_activeId = false;
var dhtmlgoodies_slideInProgress = false;
var dhtmlgoodies_slideInProgress = false;
var dhtmlgoodies_expandMultiple = true; // true if you want to be able to have multiple items expanded at the same time.

function showHideContent(e,inputId)
{
 if(dhtmlgoodies_slideInProgress)return;
 dhtmlgoodies_slideInProgress = true;
 if(!inputId)inputId = this.id;
 inputId = inputId + '';
 var numericId = inputId.replace(/[^0-9]/g,'');
 var answerDiv = document.getElementById('dhtmlgoodies_a' + numericId);

 objectIdToSlideDown = false;

 if(!answerDiv.style.display || answerDiv.style.display=='none'){
  if(dhtmlgoodies_activeId &&  dhtmlgoodies_activeId!=numericId && !dhtmlgoodies_expandMultiple){
   objectIdToSlideDown = numericId;
   slideContent(dhtmlgoodies_activeId,(dhtmlgoodies_slideSpeed*-1));
  }else{

   answerDiv.style.display='block';
   answerDiv.style.visibility = 'visible';

   slideContent(numericId,dhtmlgoodies_slideSpeed);
  }
 }else{
  slideContent(numericId,(dhtmlgoodies_slideSpeed*-1));
  dhtmlgoodies_activeId = false;
 }
}
function slideContent(inputId,direction)
{

 var obj =document.getElementById('dhtmlgoodies_a' + inputId);
 var contentObj = document.getElementById('dhtmlgoodies_ac' + inputId);
 height = obj.clientHeight;
 if(height==0)height = obj.offsetHeight;
 height = height + direction;
 rerunFunction = true;
 if(height>contentObj.offsetHeight){
  height = contentObj.offsetHeight;
  rerunFunction = false;
 }
 if(height<=1){
  height = 1;
  rerunFunction = false;
 }

 obj.style.height = height + 'px';
 var topPos = height - contentObj.offsetHeight;
 if(topPos>0)topPos=0;
 contentObj.style.top = topPos + 'px';
 if(rerunFunction){
  setTimeout('slideContent(' + inputId + ',' + direction + ')',dhtmlgoodies_timer);
 }else{
  if(height<=1){
   obj.style.display='none';
   if(objectIdToSlideDown && objectIdToSlideDown!=inputId){
    document.getElementById('dhtmlgoodies_a' + objectIdToSlideDown).style.display='block';
    document.getElementById('dhtmlgoodies_a' + objectIdToSlideDown).style.visibility='visible';
    slideContent(objectIdToSlideDown,dhtmlgoodies_slideSpeed);
   }else{
    dhtmlgoodies_slideInProgress = false;
   }
  }else{
   dhtmlgoodies_activeId = inputId;
   dhtmlgoodies_slideInProgress = false;
  }
 }
}

function initShowHideDivs()
{
 var divs = document.getElementsByTagName('DIV');
 var divCounter = 1;
 for(var no=0;no<divs.length;no++){
  if(divs[no].className=='questionV2'|| divs[no].className=='questionV3'){
   divs[no].onclick = showHideContent;
   divs[no].id = 'dhtmlgoodies_q'+divCounter;
   var answer = divs[no].nextSibling;
   while(answer && answer.tagName!='DIV'){
    answer = answer.nextSibling;
   }
   answer.id = 'dhtmlgoodies_a'+divCounter;
   contentDiv = answer.getElementsByTagName('DIV')[0];
   contentDiv.style.top = 0 - contentDiv.offsetHeight + 'px';
   contentDiv.className='answer_content';
   contentDiv.id = 'dhtmlgoodies_ac' + divCounter;
   answer.style.display='none';
   answer.style.height='1px';
   divCounter++;
  }
 }
}
window.onload = initShowHideDivs;

@charset "utf-8";
   .questionV2{ /* Styling question */
    /* Start layout CSS */
    width:432px;
    border:1px solid #46743c;
    font-size:11px;
    font-weight:bold;
    margin-bottom:0px;
    margin-top:4px;
    margin-left:0px;
    margin-right:0px;
    padding-top:10px;
    padding-bottom:10px;
    padding-left:20px;
    padding-right:10px;
    color:white;
    background-color: #77966c;
    position:relative;
    /* End layout CSS */
    overflow:hidden;
    cursor: pointer;
    }
.questionV3{    /* Styling question */
    /* Start layout CSS */
    width:380px;
    border:1px solid #46743c;
    font-size:11px;
    font-weight:bold;
    margin-bottom:0px;
    margin-top:4px;
    margin-left:0px;
    margin-right:0px;
    padding-top:10px;
    padding-bottom:10px;
    padding-left:20px;
    padding-right:10px;
    color:white;
    background-color: #6dbc4a;
    position:relative;
    /* End layout CSS */
    overflow:hidden;
    cursor: pointer;
    }
    .answer{    /* Parent box of slide down content */
    /* Start layout CSS */
    margin:0px;
    padding-bottom:10px;
    padding-left:0px;
    padding-right:0px;
    padding-top:10px;
    width:464px;
    /* End layout CSS */
    visibility:hidden;
    height:0px;
    overflow:hidden;
    position:relative;
    border-top: none;
    }
    .answer_content{    /* Content that is slided down */
    /* Start layout CSS */
    margin-left:0px;
    margin-right:0px;
    padding-right:0px;
    padding-bottom:0px;
    padding-left:0px;
    padding-top:0px;
    position:relative;
    width:464px;
    /* End layout CSS */
    }

Level 1

Some text goes here

Sub-level 1

Some text goes here

Level 2

Some text goes here

Sub-level 2

Some text goes here


text:
Texas Supreme Court Decides in Favor of Employers on Issue of First Impression
Matthew S. Veech
In Waffle House v. Williams, the Texas Supreme Court was presented with an issue of first impression relating to the exclusivity provision of the Texas Commission on Human Rights Act (TCHRA). In Waffle House, the employee prevailed at trial on her claims of sexual harassment and negligent supervision and retention. The trial court entered judgment on the negligence claims under an election of remedies because the employee was able to avoid the TCHRA's statutory cap on damages.
After the Court of Appeals affirmed that judgment, the Texas Supreme Court granted petition to consider several issues, including an issue of first impression: "may a plaintiff recover negligence damages for harassment covered by the TCHRA?" In its June 11, 2010 opinion, the Texas Supreme Court recognized that the TCHRA is preemptive in nature, and as such, the Court held that the plaintiff could not recover on her negligence claims when the complained-of negligence is intertwined with the complained-of harassment. In its opinion, the Court stated:
The root of [the employee's] negligence claim is that Waffle House kept around a known harasser, but this claim does not arise from separate, non-harassment conduct; it is premised on the same conduct that the TCHRA deems unlawful.
As the complained-of acts constitute actionable harassment under the TCHRA, they cannot moonlight as the basis for a negligence claim, a claim that presents far different standards, procedures, elements, defenses, and remedies. It is untenable that the Legislature would craft an elaborate anti-harassment regime so easily circumvented.
The court's opinion is an obvious victory for employers. The opinion is particularly significant to employers when faced with employment discrimination, harassment or retaliation lawsuits that also assert claims of negligent hiring or negligent retention.


'Lend a Hand' combines two former Nove Onlus' initiatives – 'Migrants in Training', supporting asylum seekers, and 'Lend a Hand to an Italian', dedicated to vulnerable Italian families and individuals. This new project actually aims to offer training and job opportunities to vulnerable people of any nationality who need to achieve or to recover economic independence.
The project started in January 2019 by providing a professional course to train 12 beneficiaries of eight different nationalities (Burkina Faso, Guinea, Italy, Ivory Coast, Mali, Morocco, Nigeria and Perú) as sous-chefs. The course is held by the 'Il Faro, di Susanna Agnelli' Foundation, a training center that has a very strong background in this field. At the end of the training, the beneficiaries are given paid internships, which greatly broaden their employment prospects, allowing them to build on the skills acquired and to test them in a professional environment, as well as to expose them to potential employers.


text:
The Raptors Aren't Ready For The Bucks
May 14, 2019 , at 6:10 PM
This week, Hot Takedown evaluates the NBA and NHL conference finals, and our Rabbit Hole tracks the players who made the most rosters over their careers.
Filed under Hot Takedown
More: Apple Podcasts | ESPN App | RSS
On this week's episode of Hot Takedown, we evaluate the NBA and NHL conference finals. Despite the celebration of Kawhi Leonard's historic buzzer-beater to put the Raptors into the Eastern Conference finals, Toronto head coach Nick Nurse thinks the Raptors need to get better before facing the Milwaukee Bucks. We look at how our projections compare with the Vegas betting markets in anticipation of this matchup and the Golden State-Portland series.
In the NHL, the Stanley Cup playoffs have been full of upsets, with all four No. 1 seeds knocked out in the first round. In the West, San Jose and St. Louis are tied at 1-1, but in the East, the Carolina Hurricanes find themselves down 0-2 to the high-flying Boston Bruins. In a season full of surprises, can we really count Carolina out? Rob Reese of the NHL Fantasy on Ice podcast seems to think so.
Finally, our Rabbit Hole of the Week is inspired by baseball's Edwin Jackson, who is expected to suit up Wednesday for his MLB-record 14th team. We dig in to which other players, regardless of sport, have made the most rosters over their careers.
What we're looking at this week:
Our NBA prediction model might surprise some Milwaukee fans.
Will this be the year the St. Louis Blues stop disappointing their fans?
Edwin Jackson sets a record.
Grace Lynch is the former producer of Hot Takedown. @gracelynch08
Sara Ziegler is the sports editor at FiveThirtyEight. @saramziegler
Geoff Foster is the former sports editor of FiveThirtyEight. @gwfost
FiveThirtyEight Podcasts (1048 posts) Hot Takedown (289) NBA Playoffs (236) Toronto Raptors (82) Milwaukee Bucks (64)


text:
Newcastle United are not good enough in the final third, admits Georginio Wijnaldum
It's 402 minutes since Newcastle last scored a Premier League goal and Georginio Wijnaldum, the man who scored it is desperate to put things right
Lee RyderChief Newcastle United Writer
Georginio Wijnaldum of Newcastle United celebrates scoring their second goal with Papiss Cisse (Image: 2015 Getty Images)
Get the latest NUFC updates, transfer and takeover news straight to your inbox for FREE by signing up to our newsletter
Gini Winjaldum did not need to be reminded about Newcastle United's Premier League goal drought ahead of the clash with Watford at St James' Park.
The Dutch international was the last man to score for the Magpies in the top flight over a month ago when he headed home from Gabriel Obertan's cross against Southampton.
Newcastle have since gone 402 Premier League minutes without finding the net, and former PSV Eindhoven star Wijnaldum says that sorry statistic must change against the Hornets.
Wijnaldum told the Chronicle: "It seems like a long time ago, because it was a long time ago!
"We have to fight hard and make more goals and chances.
"If we don't start doing this we can't win games.
"In the final third we know we have to create more because two goals in five games is not a lot."
The Dutchman was happy to face up to a poor show at West Ham on Monday night and offer an explanation to fans.
Would you keep Papiss Cisse up front for the Watford game?
Wijnaldum feels that while Newcastle are still looking for their first win, there was a dip in performance compared to previous games.
Looking back on the 2-0 loss, Wijnaldum said: "We didn't start well in the first half and after it they got the early goal.
"After that we put ourselves in a better position but did not create a lot of chances.
"We created a few, but compared to previous games we know we need to create more. We didn't score and from the first half that is the only thing we were disappointed about.
"The second half was not good overall.
"We began the second half by conceding a goal.
"After that we didn't do enough to fix it."
Newcastle have won their last three games at St James' Park against Watford and are 6/4 favourites to add to that with William Hill.
Wijnaldum is looking forward to a chance of putting things right on home soil, he said: "It's a quick turnaround because we only played on Monday.
"We have to go back to the way we were playing.
"It was an off day. The good thing with the Premier League is that there are so many games.
"You can quickly show how good you are."
Wijnaldum also had words for the Newcastle fans after making a tough journey to London for the Monday-night game against the Hammers.
More than 2,200 fans turned out at Upton Park, and Wijnaldum is keen to make things up to them against Watford.
He said: "I have been really impressed. We must give them something back now.
"They have supported us from the beginning and the away games too.
"When we look over to the away fans it's always full so we know what we have to do for them."
Newcastle United FC TakeoverNewcastle United news LIVE - New takeover claim; Latest on Steve Bruce's futureAll of the latest Newcastle United news, views and updates in one place
The BeIN Sports statement that hints at a breakthrough as Newcastle takeover observers watch on
Newcastle United FC TakeoverThe Newcastle United takeover will likely rest on whether there's a resolution in the BeIN Sports saga
Steve Bruce sack odds change as Eddie Howe tipped to be next Newcastle United manager
Newcastle United FCChelsea manager Frank Lampard has replaced Newcastle United boss Steve Bruce as the bookmaker's favourite to be the next Premier League manager to lose their job
Eddie Howe has already told Newcastle's Mike Ashley what he wants to hear
Newcastle United FCSteve Bruce is under pressure at St James' Park, and former Bournemouth boss Howe is currently available
Newcastle United FC Transfer News'Sitting in a big chateau' - Jean-Alain Boumsong revelations may surprise Newcastle United fansNewcastle United completed the signing of Jean-Alain Boumsong in the January transfer window back in 2005 and ChronicleLive has looked back on the £8m deal
Newcastle United owner Mike Ashley makes January investment for Frasers Group
Newcastle United FCNewcastle United are expecting a quiet January transfer window, but Mike Ashley's Frasers Group have increased their investment in Hugo Boss
Lee Johnson has called on Sunderland to invest in the pitch at the Stadium of Light
Lee JohnsonSunderland boss Lee Johnson says the club's pitches are in need of an upgrade if the team is to play a passing game
BBC commentator fears for Newcastle but makes a passionate defence of fans and club's history
Newcastle United FCJonathan Pearce said he fears for Newcastle United and tipped for a survival fight
Warning after scammers claiming to be HSBC staff ask for personal details
County DurhamPolice are reminding people banks will not ask for your PIN, password or bank account details


After the Great Recession a decade ago, Congress passed the Dodd-Frank Wall Street Reform and Consumer Protection Act of 2010. Even then, some lawmakers thought the bill went too far, unintentionally punishing small lenders like our neighborhood credit unions.
As time has passed, it's become clear that the regulations imposed by Dodd-Frank were flawed. The law sees no distinction between the Wall Street banks responsible for the recession and the Main Street credit unions that were not.
Exempts financial institutions with less than $10 billion in assets from some rules entirely, most notably the so-called Volcker Rule, which bans banks from making some forms of speculative trades.
Requires the Federal Reserve to take institution size into account when crafting regulations, rather than "one size fits all" regulations as critics contend the Fed has been doing for the past decade.
We thank our senators for their support of South Carolina credit unions, and thank our state senators for showing their support for a stronger state charter.


sand crusher machine in india. Inquiry ... PCL Sand Making Machine,Jaw Crusher,Impact Crusher,Mineral Production Line is the Main Products of Engineering Co.,Ltd.
Your successful business will benefits from zenith portable crusher. The stone crusher machine is widely applied in mining, ... Artificial Sand Making Machine In India.
This page is about sand crusher machine india, click here to get more infomation about sand crusher machine india.


text:
Max Planck School of Cognition Materials Science PhD Projects, Programs & Scholarships
We have 0 Max Planck School of Cognition Materials Science PhD Projects, Programs & Scholarships
Max Planck School of Cognition
All Biological & Medical Sciences (1) Physical Sciences (1)
All Australian National University (3)Cardiff University (1)Coventry University (1)Deakin University (10)Durham University (11)European School of Molecular Medicine (SEMM) (1)Ghent University (1)Hector Fellow Academy (1)Heriot-Watt University (10)Imperial College London (2)Italian Institute of Technology (2)Karlsruhe Institute of Technology (1)KAUST (1)Lancaster University (2)Loughborough University (4)MaREI Centre for Marine and Renewable Energy (1)Massey University (1)Max Planck School Matter to Life (1)Max Planck Society (1)Newcastle University (10)Northumbria University (12)Norwegian University of Science and Technology (3)Nottingham Trent University (1)Politecnico di Torino (1)Queen Mary University of London (9)Technical University of Braunschweig (1)The University of Manchester (44)University College London (6)University of Aveiro (1)University of Bath (3)University of Birmingham (1)University of Bristol (8)University of Canterbury (2)University of Dundee (1)University of Edinburgh (2)University of Exeter (2)University of Glasgow (4)University of Heidelberg (1)University of Kassel (1)University of Leeds (16)University of Liverpool (3)University of Nottingham (3)University of Otago (1)University of Oxford (5)University of Sheffield (18)University of South Australia (2)University of St Andrews (3)University of Strathclyde (3)University of Surrey (4)University of the West of England, Bristol (1)University of the West of Scotland (1)University of Warwick (4)University of York (1)UNSW Canberra (1)UNSW Sydney (1)Victoria University of Wellington (3)West Virginia University (1)Xi'an Jiaotong-Liverpool University (1)
Sort by Relevance PhD Type Institution Department


This mobile marketing infographic does a good job at disseminating the information into easy to read bits (USA Today) and uses bright colors against a neutral gray background to help those colors pop even more. While the infographic is a bit longer and thinner than I would like, you have to give full credit for utilizing that thin space very productively. Easy to read text and large numbers make a quick can possible, without having to read every word. You want more information, slow down and look again. In a hurry? A quick scan tells you how plentiful mobile devices are – 4 billion – and how many ways people use their smartphones to socialize (twitter, facebook, youtube, etc.). Basic people objects are used skillfully and a touch of humor has been added without distracting from the data on mobile marketing. A particularly nice touch is using the "f" in facebook to act as a graph, filling it 1/3 full to show the facebook mobile user base.
The content is fun and the data is believable. I don't think any of the numbers surprise anyone, in fact the very content is probably considered obvious by anyone using a mobile phone, about 4 billion of us. But that is par for the course for most infographics – data you most likely know, but aren't sure about. The data does do something I like especially and that is comparing mobile devices to other forms of entertainment, after all the mobile device is primarily and entertainment device and a secondarily a communication tool nowadays. One number did surprise me…1/2 of all local searches are performed on a mobile device. I wonder if movie listings were removed from that figure, would the numbers drop drastically? Most SEO companies would find this information about local mobile searches very interesting, I would imagine, as would local businesses.
The graphic design reminds me of top 40 music, which I like, in that it doesn't provide anything cutting edge but it has a beat you can dance to. I enjoyed the color scheme and the graphics. Everything meshed well, both colors and graphics) and was designed with a cohesive mindset and that is saying a lot in today's everyone-is-a-designer-world.
Data and facts in this infographic were easy to digest and in line with what I expected for the most part. Very few "Oh, wow?" moments but the topic is fairly popular and well-covered in today's media. Still, the research appears sound and went further than I suspected so a good effort all around.


How do I add a Canned Response?
Navigate to Settings -> Templates -> Canned Responses, click Add.
Type the desired content in the Compose Message box.
Choose which department you want to associate the message with or choose All Departments for a general canned message you wish to use that isn't department specific.
You can view the report of the canned responses, like how many times the response has been used by the operators in Chats and when was the response Last Used.


This is a 0.75 HP Window-type air conditioner with recommended cooling area of up to 13 sq.m.
The lowest price of Carrier Optima Green 0.75 HP (WCARZ008EC) is P14,799 at Lazada, which is 39% less than the cost of Optima Green 0.75 HP (WCARZ008EC) at Lazada (P24,199). The latest price of Carrier Optima Green 0.75 HP (WCARZ008EC) was updated on Apr 15, 2019, 09:23.


text:
About Amyloidosis
AL AmyloidosisHereditary ATTR AmyloidosisWild-Type AmyloidosisOther Types of Amyloidosis
COVID-19 & AmyloidosisNewly DiagnosedFinding SupportTreatment Centers & Clinical TrialsResources
HCPs & Researchers
COVID-19 & AmyloidosisResearch ProgramsHCP EducationResourcesClinical Resource AppIndustry
Participate in ResearchSupport ARCBecome an AdvocateCreate a Tribute or Fundraiser
LeadershipNewsFinancialsCareersContact Us
The Amyloidosis Research Consortium is committed to safeguarding your privacy. This statement explains our online information practices and the choices you can make about the way the information you provide us is collected and used. For easy and direct access, we provide a link to this statement from our home page and all other pages of the site.
The Consortium is the sole owner of and the only organization that uses the information collected on this site. We will not sell, share, or rent this information to others under any circumstances.
This site uses cookies. By using this site, you agree that the Consortium may place cookies on your device and access them when you visit our site. A cookie is a small file of letters and numbers that we put on your computer. The cookies we use aid us in improving our site and your experience by tracking which areas and features of our site are popular, making the site easier to navigate, count visits, and allow a registered user to remain signed in to his/her user profile throughout a visit. We may also use cookies placed on our site by third parties acting on our behalf. If you want to opt out of our cookies, you can delete them and any other cookies that are already on your computer. Please refer to the help and support areas on your Internet browser for instructions on how to locate the file or directory that stores cookies. Some functionalities on our site may be affected if you delete our cookies.
The Consortium collects the following information through our secure online financial-transaction pages: name, address, e-mail address, phone number, and credit card information. This personally identifiable information is used to acknowledge receipt of your donation for tax purposes and to include you on the Consortium's mailing list if you choose to join it.
We care about the security of your transactions and apply industry-standard practices and technologies to safeguard your credit card information. We use high-grade encryption and the secure https protocol to communicate with your browser software, which guards against interception of the credit card information you give us. We also employ several different security techniques to protect your personally identifiable information from unauthorized access by users inside and outside the organization. The web servers for the Consortium are located in a locked, secure environment, and computer systems are maintained in accordance with industry standards to secure information. You should be aware, however, that "perfect security" does not exist on the Internet, and third parties may unlawfully intercept or access transmissions or private communications.
The Consortium provides a separate online form to join our mailing list. The information we collect includes: name, address, e-mail address, and phone number. This information is securely stored internally and accessed only when we correspond with our mailing list periodically during the year, either via e-mail or regular mail.
Please contact us directly by regular mail, email or telephone if at any time you wish to be removed from the mailing list or if you would like to correct or change the personal information you have previously provided.
You will be added to the Amyloidosis Research Consortium's email newsletter list only if you register to receive newsletters via a form or checkbox on the Amyloidosis Research Consortium website. You may opt out of receiving our eNewsletters by clicking on the opt-out link included in every email newsletter we send.
The Consortium's site includes links, some temporary and some permanent, to other websites. We are not responsible for the privacy and security practices of any other website or the nature of the content contained therein.
None of the content and information on the Consortium's website is targeted toward children under 13 years of age. We make every effort possible to ensure that we do not collect or maintain information on our website from those we know to be younger than 16 unless parental consent has been obtained in writing.
In the event that the Consortium decides to alter its privacy policy, the changes will be added directly to this statement. We will, however, always use information in accordance with the version of the privacy policy under which it was originally collected.
If you have specific questions or concerns about the Consortium's privacy policy, please contact us at the following address:
The Amyloidosis Research Consortium
320 Nevada Street, Suite 210
Check out upcoming conferences, webinars and fundraisers
Learn more about ARC's comprehensive diagnostic app
View ARC's library of resources and publications
Get the latest amyloidosis news and research from ARC.
AMYLOIDOSIS RESEARCH CONSORTIUM, INC.
320 Nevada Street, Suite 210 Newton, MA 02460 USA | 617-467-5170
arc@arci.org
ARC is a 501(c)(3) nonprofit organization
Join our email list to stay up to date on the latest Amyloidosis news.
Please Select Patient Caregiver Patient Family/Friend Academic Physician Nurse Pharma ARC Supporter


text:
Home > Latest News > Prince Andrew
Prince Andrew Once Made Awkward Comment About Meghan Markle & Prince Harry's Wedding
Jan. 26 2022, Published 9:16 a.m. ET
Prince Andrew once made an awkward comment about Meghan Markle and Prince Harry's wedding, which occurred a few months before Princess Eugenie and Jack Brooksbank's nuptials.
"It will not be the same as the previous one that was held in May," the duke said. "This is not a public wedding, this is meant to be a family wedding."
"There'll be a few more people than most people have," he added. "There are a few more than Harry had, but that's just the nature of Eugenie and Jack — they've got so many friends that they need a church of that size to fit them all in."
At the time, people thought Andrew was causing drama between the two couples, who are very close. One person wrote, "Throwing some shade there duke lol," while another added, "So seems like a competition for him."
LADY IN RED! KATE MIDDLETON LOOKS GLAMOROUS IN LONG COAT AS SHE ARRIVES AT THE NATIONAL PORTRAIT GALLERY — PHOTOS
It seems like Andrew was always worried that Meghan, 40, and Harry, 37, were hogging all the attention, compared to his daughters, Princess Beatrice and Eugenie.
"He fears that they will be totally side-lined when the Queen dies," a source said.
Now, Andrew has been in hot water, as he was sued by Virginia Roberts in 2021 for allegedly raping her when she was 17 years old.
The dad-of-two has denied any wrongdoing.
More details are coming to light about who Andrew really is — his former maid, Charlotte Briggs, detailed his antics when she worked at the palace.
95 YEARS YOUNG! QUEEN ELIZABETH MARKS A BIG BIRTHDAY MILESTONE — SEE PHOTOS OF HER MAJESTY THROUGHOUT THE YEARS
"But he was a bad apple and behaved like a spoiled brat," she confessed. "Really you weren't actually meant to be seen, you'd just sneak in and do stuff. But he was a bit lazy and he would call down from his office and say, 'Can you send the maid to shut the curtains.' They were literally behind him and massive — from floor to ceiling and as high as a house. But he refused to get up and close them himself. I'd have to get on my evening dress, run up four flights of stairs and he'd be sitting there at his desk right next to them. One night I'd done it all, I walked back into the corridor and he came out screaming, 'Can't you f***ing do anything right?' I'd left a little gap where they met but they were extremely heavy."


text:
Rhus malloryi  is an extinct species of flowering plant in the sumac family Anacardiaceae.  The species is known from fossil leaves found in the early Eocene deposits of northern Washington state, United States.  The species was first described from a series of isolated fossil leaves in shale.  R. malloryi is one of four sumac species to be described from the Klondike Mountain Formation, and forms a hybrid complex with the other three species.

Taxonomy
Rhus malloryi is known from specimens which are recovered from an outcrop of the early Eocene, Ypresian Klondike Mountain Formation in Republic.  The Klondike Mountain Formation preserves an upland temperate flora which was first interpreted as being microthermal, however further study has shown the flora to be more mesothermal in nature.  The plant community preserved in the Klondike Mountain formation is a mixed conifer–broadleaf forest with large pollen elements of birch and golden larch, but also having notable traces of fir, spruce, cypress, and palm.  Fossils of Rhus malloryi, along with fossil Sapindaceae leaves, were first published under the name "Dipteronia americana" by Roland W. Brown in 1935.  The coeval fossil species Rhus mixta is noted to have a more linear shape and distinct secondary vein structure.

The species was described from a type specimen, the holotype leaf, number UWBM 39718, and a group of five paratype specimens.  The holotype and three of the paratypes are currently preserved in the paleobotanical collections of the Burke Museum of Natural History and Culture in Seattle, Washington.  The specimens were studied by paleobotanists Jack A. Wolfe of the United States Geological Survey, Denver office and Wesley C. Wehr of the Burke Museum.  Wolfe and Wehr published their 1987 type description for R. malloryi in the United states Geological Survey Bulletin 1597.  The etymology of the chosen specific name malloryi is in recognition of former chairman of the Burke Museum paleontology collections V. Standish Mallory.  An additional three coeval species,  Rhus boothillensis, Rhus garwellii and Rhus republicensis  were described by Flynn et al in 2019.  They also provided a redescription of Rhus malloryi while noting that the Klondike Mountain Formation preserves a number of Rhus specimens which appear to be hybrids of the named species.

Description
Overall the leaflets of R. malloryi are elliptical to lanceolate, with a symmetrical shape, an asymmetrical base and a short petiolule.  The leaflets have a pinnate vein structure with the secondary veins display a gradually curving, looping structure typical of Anacardiaceae.  The margins of the leaflets are serrated and have the simple teeth are spaced to one tooth per secondary vein loop.   Veinlets from the secondary veins either enter the teeth centrally or enter the sinuses between teeth.  Higher veins in the leaflets tend to thin rapidly or are indistinct, in contrast to the secondary vein structure of Rhus mixta which has stronger secondary veins.

References

†malloryi
Prehistoric angiosperms
Plants described in 1987
Ypresian plants of North America
Extinct flora of North America
Fossil taxa described in 1987
Klondike Mountain Formation

redpajama_set_name: RedPajamaWikipedia


text:
Tag - Zachary Lucky
Folk Roots Radio Episode 468: feat. Del Barber & More New Releases
Folk Roots Radio Episode 464: feat. Lloyd Spiegel & More New Releases
Folk Roots Radio Episode 438: feat. Ariana Gillis & More New Releases
Episode 281: Zachary Lucky
Zachary Lucky – Everywhere A Man Can Be – Folk Roots Radio Interview
Episode 202: Lizzy Hoyt
Episode 200: Mariposa Folk Festival 2015
Mariposa 2014 – Full Line Up Announced
Tagged with Andrea Ramolo, Aoife Scott, Billy Bragg, Clever Hopes, Covid Times, Daniel James McFadyen, Folk Roots Radio, Graham Rorie, Howard Gladstone, Jan Hall, Jeremy Voltz, Josienne Clarke, Kinnie Starr, Kristen Martell, Matt McGinn, Sarah McQuaid, Steve Warner, Tania Joy, Time Well Spent Edition, Zachary Lucky
We have more great new music to share with you on Episode 601 of Folk Roots Radio – some wonderful new songs, and guess what, they were all received within the last few weeks. So stay with us as we check out new releases from Kristen Martell, Josienne Clarke, Steve Warner, Jeremy Voltz, Graham Rorie, Clever Hopes, Daniel James McFadyen, Matt McGinn & Aoife Scott, Andrea Ramolo, Howard Gladstone, Tania Joy, Billy Bragg, Zachary Lucky and Sarah McQuaid. Remember, if you like what you hear on Folk Roots Radio… and want to support the artists… don't just stream their music, BUY their music and then you'll really make a difference to their income during this difficult time, when it's really hard to find live show opportunities. Check out the full playlist below.
Tagged with Caroline Spence, Del Barber, Don Brownrigg, Easy Keeper, Folk Roots Radio, Graham Lindsey, Ian and Sylvia, Jan Hall, Lynne Hanson, Madison Galloway, Susan Gibson, Zachary Lucky
Manitoba singer-songwriter Del Barber joins us on Episode 468 of Folk Roots Radio to chat about his fabulous new Americana flavoured album "Easy Keeper". Easy Keeper may be the best thing Del Barber has ever done, although we are talking about an artist who has already been nominated for two Junos. A fine album, from a performer at the top of his game, and a great interview – we do hope you'll stay with us to check it out. As usual, we wrap up the episode with some more of the latest new releases and this time we include great songs from Zachary Lucky, Ian & Sylvia, Don Brownrigg, Madison Galloway, Graham Lindsey, Caroline Spence, Susan Gibson and Lynne Hanson. Check out the full playlist below.
Tagged with Annie and Rod Capps, Cut and Run, Dale Boyle, Durham County Poets, Elivia Cazzola, Extinction Rebellion, Folk Music Ontario, Folk Roots Radio, I'm With Her, Jan Hall, Jennis, Kae Shelby, Liv Cazzola, Lloyd Spiegel, The Lifers, Zachary Lucky
Australian acoustic blues great Lloyd Spiegel joins us on Episode 464 of Folk Roots Radio for a chat about his music and three live songs. A fantastic live performer, Lloyd Spiegel has been performing his hard-hitting, cutting edge brand of blues for more than 30 years. Lloyd Spiegel released his tenth album, "Cut & Run", earlier this year. It's a great interview – we hope you'll check it out. And as always we wrap up the hour with more new releases, and this time we hear from I'm With Her, Annie & Rod Capps, Zachary Lucky, Dale Boyle, The Lifers, Jennis, Durham County Poets and Kae Shelby. Check out the full playlist below.
Browse archives for April 05, 2019
Tagged with Ariana Gillis, Benjamin Dakota Rogers, Buddy Miller, Còig, Folk Roots Radio, Fresh Breath, Gabrielle Papillon, Jan Hall, Roots North Music Festival, Safe As Houses, Tariq, The Maes, The Maze, Zachary Lucky
Ariana Gillis joins us on Episode 438 of Folk Roots Radio to chat about her upcoming appearance at the 2019 Roots North Music Festival which takes place in Downtown Orillia on Friday April 26 and Saturday April 27. A captivating live performer, Ariana will be sharing the Friday night main stage with two other fabulous songwriters Ron Sexsmith and Rose Cousins. She is also getting ready to release "The Maze", her third full-length album, recorded in Nashville with Buddy Miller. We also check out new music from Tariq, Gabrielle Papillon, The Maes , Safe As Houses, Còig, Zachary Lucky, Benjamin Dakota Rogers and Fresh Breath. Check out the full playlist below.
Tagged with Jim Bryson, Kaia Kater, Lotus Wight, Martha Renaud, Nicolas and The Iceni, Ozere, Ten Strings and a Goat Skin, Whitehorse, Zachary Lucky
Zachary Lucky joins us on this episode to chat about his new album "Everywhere A Man Can Be". We also continue our review of the nominees for the 2016 Canadian Folk Music Awards. This time around we take a look at the nominees for The Oliver Schroer Pushing The Boundaries Award, and, as every year, some great artists and albums have been nominated.
https://folkrootsradio.com/wp-content/uploads/2016/09/FRR-Zachary-Lucky-September-27-2016.mp3
Browse archives for September 27, 2016
Tagged with Aaron Goldstein, Dan Edmonds, Darcy Yates, Everywhere A Man Can Be, Frank Evans, Jay Swinnerton, Julie Fader, Nichol Robertson, Rosalyn Dennett, Taylor Knox, Zachary Lucky
Zachary Lucky is just about to release "Everywhere A Man Can Be", the follow-up to 2013's "The Ballad Of Losing You". And where The Ballad of Losing you was introspective and reflective – focusing on some very personal themes, the new album is outward looking, expansive and optimistic featuring nine new songs written on the road, that name check people and places he visited while touring his last effort. The album features stellar support from pedal steel virtuoso Aaron Goldstein, who also produced, and a band that includes Taylor Knox on drums, Dan Edmonds (Harlan Pepper) on piano, Darcy Yates (Flash Lightnin', Bahamas) on bass, Rosalyn Dennett on fiddle, and Slocan Ramblers' Frank Evans on banjo. Nichol Robertson also guests on guitar, alongside vocalist Julie Fader, and pianist Jay Swinnerton. With a laid-back style that's all his own, "Everywhere A Man Can Be" is clearly a step towards solidifying Zachary's place in the vanguard of Canadian country music. We caught up with Zachary at home in Orillia to chat about the new album. The album release takes place at the Dakota Tavern in Toronto on October 7. For more information visit zacharylucky.com. Music: Zachary Lucky "Can't Say Why", "Everywhere A Man Can Be" and "Lost My Way (Now & Then)" from "Everywhere A Man Can Be" (2016, Self).
Browse archives for June 30, 2015
Tagged with Cris Cuddy, Dan Griffin, Dan Weber, David Ross MacDonald, Frank Sinatra, Fraser and Girard, Garnet Rogers, Ian Foster, Irish Mythen, Jack Tempchin, James Yorkston, John McCutcheon, Johnathan Rice, Lizzy Hoyt, Steve Forbert, Steve Poltz, The Beyman Bros, The Dovetail Trio, The Wailin' Jennys, Zachary Lucky
Episode 202 of Folk Roots Radio featured an interview with Alberta-based vocalist and songwriter Lizzy Hoyt who came into our mobile studio at the Folk Music Ontario Conference this past October to chat about her music and her latest album, the wonderful "New Lady On The Prairie". Lizzy will be appearing at this year's Kingsville Folk Festival from August 7-9 in Kingsville Ontario. As usual we also found time to include a good selection of new music alongside our mystery theme and guilty pleasure.
Tagged with Cheryl Wheeler, Coco Love Alcorn, Dave Crossland, David Rovics, Don Rooke, Fred Hellerman, Gordon Jenkins, Gregory Hoskins, Jim Garland, John McCutcheon, Katie Miller, Kevin Breit, Lee Hays, Lucinda Williams, Luka Bloom, Mariposa Folk Festival, Mark Olson and Gary Louris, Mike Ford, Mike Hill, Murder Murder, Pete Seeger, Pharis and Jason Romero, Rebecca Jenkins, Ronnie Gilbert, Si Kahn, Sue Massek, Tannis Slimmon, The Henrys, The Jayhawks, The Lied To's, The Weavers, Vivian Stanshall, Zachary Lucky
This week's Folk Roots Radio – our 200th edition featured an interview with Mike Hill, Artistic Director at the Mariposa Folk Festival which takes place from July 3-5 in beautiful Tudhope Park on the shores of Lake Couchiching in Orillia. We also talked to Sudbury 'bloodgrass' band Murder Murder – they're an outlaw country bluegrass band that play murder ballads – about their new album "From The Stillhouse" and their upcoming show in Guelph on June 20. We also included a good selection of new music alongside our mystery theme and, as the folk world mourns the passing of Ronnie Gilbert, a special tribute to folk pioneers The Weavers.
Tagged with Ani Difranco, Ariana Gillis, Ariko, AroarA, Aviva, Beth McKean, Birds of Chicago, Carolle Bertrand, Conjunto Chappottín, Craig Cardiff, Dala, Dar Williams, Eileen Laverty Trio, Elephant Revival, Ennis, Feist, Hydra, Ian Tamblyn, JoJo Worthington, Keith Secola, Kim Wempe, Magoo, Maria Dunn, Mariposa Folk Festival, Mike Hill, My Sweet Patootie, Niamh Ní Charra, Pacific Curls, Prufrock Shadowrunner, Red Wanting Blue, Rosanne Cash, Russell deCarle, Sarah Slean, Seryn, Sherry Lawson, Snowblink), Sugar Brown, Tammy Frederick, The Barr Brothers, The BelleRegards, The Carper Family, The Harpoonist and The Axe Murderer, The Imbayakunas, The JD Edwards Band, The Kempencelts, The Kennetts, The Most Loyal, The Paper Kites, Three Little Birds, Tim Chaisson, Todd Crowley's Musical Petting Zoo, Trevor Gordon Hall, Union Duke, Zachary Lucky, Zydeco Loco
The full line-up for this year's Mariposa has been announced. The 54th edition takes place July 4-6, 2014, at Tudhope Park in Orillia. As always, we will be providing full-coverage of the festival before and after the event.


Guelph Lakes provides outstanding service and facilities to host your event from 24 to 144 players. Take advantage of all our amenities; including driving range, practice greens, banquet facilities, carts with windscreens and rain covers, and let our professional staff help you organize your event. Tournament packages start at $41.00/person. For more information, contact Brian Bard via email, tournaments@guelphlakesgolf.ca, or by phone (519) 822-4222.


Okorder.com is a professional Cool Windshield Wipers supplier & manufacturer, offers integrated one-stop services including real-time quoting and online cargo tracking. We are funded by CNBM Group, a Fortune 500 enterprise and the largest Cool Windshield Wipers firm in China.
DYI repair for NEW windshield wiper blades?
Windshield Wipers Dont Turn Off?
Broken Windshield Wiper Question for 2004 Mazda3?


Tweet - "Here we go with Mitt Romney, but so fast! Question will be, is he a Flake? I hope not. Would much prefer that Mitt focus on Border Security and so many other things where he can be helpful. I won big, and he didn't. He should be happy for all Republicans. Be a TEAM player & WIN!"
"Here we go with Mitt Romney, but so fast! Question will be, is he a Flake? I hope not. Would much prefer that Mitt focus on Border Security and so many other things where he can be helpful. I won big, and he didn't. He should be happy for all Republicans. Be a TEAM player & WIN!"


James Fisher's reports, accounts and presentations.
View the Annual Report and Accounts 2018 from James Fisher and Sons plc by clicking the image below or browse our archives. We also have a selection of presentations available for reading or download.
For more information, please speak with an investor relations contact.


text:
Q: Batch File task in windows - Find and replace across multiple files I have to write a batch file which finds and replaces values of version and build with their new values given by the user as an input.
The user initially gives 3 values: Apps, version and build values (the new values).
The search is then made across multiple .property files in a folder. The Apps value is searched across multiple files and wherever there is a match, the version and build of that file will be replaced by the values given by the user.

A: To Find and replace across multiple files easily, use FART!


text:
← BIGFOOT WEEK: Bigfoot vs. D.B. Cooper (2014)
BIGFOOT WEEK: Curse of Bigfoot (1975) →
Strange Nature (2018)
Posted on September 19, 2018 by bandsaboutmovies
For the last twenty years, thousands of deformed frogs have been popping up in Minnesota ponds with some populations having over 70% of their number mutated. After years of testing, the Minnesota Pollution Control Agency came up with plenty of theories for the cause but nothing definite and in 2001, the U.S. Government pulled all further research funding.
This isn't something made up for a movie. It's a true story and it's nowhere near finished, as frog mutations have spread to other states and even India and China.
Strange Nature is a full-length feature film from writer/director James Ojala, who was part of the special effects crew for movies like Thor, Tron: Legacy, Jackals, John Dies at the End and more. It's based on the Minnesota frogs and how they impact the lives of a single mother and her 11-year-old-son who have come back to her hometown.
Kim Sweet (Lisa Sheridan, who has appeared on TV shows like CSI: Miami and Invasion) and her son, Brody, are in town because they've run out of options. And with Chuck (Bruce Bohne, the Snyder Dawn of the Dead), her father, dying of liver cancer, there's a chance for her to reconnect.
They're in town for less than a few moments before mutated frogs start hopping up. The American Patriot organic pesticide plant may be the cause, but just like Jaws, Blood Beach and every other movie mayor ever, Mayor Paulson (Stephen Tobolowsky, Single White Female) squashes every attempt to get the story out. After all, they keep the town alive. The guys who work at the plant — like Sam (former WWE star John Hennigan) don't want to hear a single thing about it, nor does the neighbor whose shed hides furry costumes in a moment of weird humor that takes the movie off the tracks for a bit.
That said — this movie really shines when it comes to the creature effects, like the mutant frogs, puppies, two-headed wolves and more that start to emerge. Maybe it's all of the Bigfoot movies I've been watching, but I enjoyed that this film feels more like a 1970's eco-horror film than a modern movie. Trust me, that's a compliment. It balances real human drama — fitting in at a new school, befriending kids that others make fun of, trying to come back to a place that you thought you escaped, dealing with your life's dream turning on you, going from being cared for by a parent to being their caregiver — with horrific elements well.
Soon, tourists start coming to town to make fun of the townsfolks with their Minnesota – Land of 1,000 Freaks shirts. Even worse, the mutations and child disappearances start to tie together, as do more and more mutant births. And when our heroine gets pregnant — to her son's teacher no less — things go from bad to worse. Add in the fact that babies act like parasites, killing their mothers and this becomes a film that progressively paints its characters into deeper and darker corners.
Hennigan is really good here, as is Dave Mattey, who plays Joseph, who shares a birth defect with his daughter that the townsfolks wrongly take as the reason for their town's issues.
Those that appreciate a decent story — as well as those that love gore — will be equally satisfied with this one.
You can learn more about the movie — which is making its theatrical debut at the Laemmle Glendale in Los Angeles September 22-27 — at the official site.
This entry was posted in Movie reviews and tagged 2018. Bookmark the permalink.


The basics of my AWESOME project is the students an I will select books and began a pilgrimage to destenations through our imaginations, these stories can offer an introduction to a wonderful world of armchair. The children will be engaged in creative lessons and discussions weekly. Ultimately, the students will be asked to make connections between the book and their lives, which will culminate in a final "passport" project. The students will use a page in their "passport" for each country they will also complete a reading strategy used in the classroom as the" country's stamp" example; character and setting from China: Tikki Tikki Tembo or main idea from Austrailia: Possum Magic. We will also enjoy a snack from the books' country. We will also use the map to track our travels.


text:
package controller

import (
	"context"
	"fmt"
	"reflect"
	"testing"
	"time"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/labels"

	batch "k8s.io/api/batch/v1"
	apiv1 "k8s.io/api/core/v1"

	kubeinformers "k8s.io/client-go/informers"
	clientset "k8s.io/client-go/kubernetes"
	batchv1listers "k8s.io/client-go/listers/batch/v1"
	corev1Listers "k8s.io/client-go/listers/core/v1"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/cache"
	"k8s.io/client-go/tools/record"
	"k8s.io/client-go/util/workqueue"

	"github.com/amadeusitgroup/workflow-controller/pkg/api/daemonsetjob"
	dapi "github.com/amadeusitgroup/workflow-controller/pkg/api/daemonsetjob/v1"
	wclient "github.com/amadeusitgroup/workflow-controller/pkg/client"
	dclientset "github.com/amadeusitgroup/workflow-controller/pkg/client/clientset/versioned"
	winformers "github.com/amadeusitgroup/workflow-controller/pkg/client/informers/externalversions"
	dlisters "github.com/amadeusitgroup/workflow-controller/pkg/client/listers/daemonsetjob/v1"
	utiltesting "github.com/amadeusitgroup/workflow-controller/pkg/util/testing"
)

func TestDaemonSetJobController_Run(t *testing.T) {
	restConfig := &rest.Config{Host: "localhost"}

	type fields struct {
		DaemonSetJobClient dclientset.Interface
		KubeClient         clientset.Interface
		DaemonSetJobLister dlisters.DaemonSetJobLister
		DaemonSetJobSynced cache.InformerSynced
		JobLister          batchv1listers.JobLister
		JobSynced          cache.InformerSynced
		JobControl         JobControlInterface
		NodeLister         corev1Listers.NodeLister
		NodeSynced         cache.InformerSynced
		updateHandler      func(*dapi.DaemonSetJob) error
		queue              workqueue.RateLimitingInterface
		Recorder           record.EventRecorder
		config             DaemonSetJobControllerConfig
	}
	tests := []struct {
		name          string
		fields        fields
		keys          []string
		wantErr       bool
		WantErrString string
	}{
		{
			name: "nominal case",
			fields: fields{
				JobSynced:          func() bool { return true },
				DaemonSetJobSynced: func() bool { return true },
				NodeSynced:         func() bool { return true },
			},
			keys:    []string{"default/dsj1", "default/dsj2", "default/dsj3", "default/last"},
			wantErr: false,
		},
		{
			name: "no sync for Job",
			fields: fields{
				JobSynced:          func() bool { return false },
				DaemonSetJobSynced: func() bool { return true },
				NodeSynced:         func() bool { return true },
			},
			keys:          []string{"default/dsj1", "default/dsj2", "default/dsj3", "default/last"},
			wantErr:       true,
			WantErrString: "Timed out waiting for caches to sync",
		},
		{
			name: "no sync for DaemonSetJob",
			fields: fields{
				JobSynced:          func() bool { return true },
				DaemonSetJobSynced: func() bool { return false },
				NodeSynced:         func() bool { return true },
			},
			keys:          []string{"default/dsj1", "default/dsj2", "default/dsj3", "default/last"},
			wantErr:       true,
			WantErrString: "Timed out waiting for caches to sync",
		},
		{
			name: "no sync for Node",
			fields: fields{
				JobSynced:          func() bool { return true },
				DaemonSetJobSynced: func() bool { return true },
				NodeSynced:         func() bool { return false },
			},
			keys:          []string{"default/dsj1", "default/dsj2", "default/dsj3", "default/last"},
			wantErr:       true,
			WantErrString: "Timed out waiting for caches to sync",
		},
		{
			name: "error during sync",
			fields: fields{
				JobSynced:          func() bool { return true },
				DaemonSetJobSynced: func() bool { return true },
				NodeSynced:         func() bool { return true },
			},
			keys:          []string{"default/dsj1", "default/dsj2", "default/error", "default/last"},
			wantErr:       true,
			WantErrString: "DaemonSetJobController.sync - DaemonSetJob default/error not valid",
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			client, err := wclient.NewDaemonSetJobClient(restConfig)
			if err != nil {
				t.Fatalf("%s:%v", tt.name, err)
			}
			kubeClient := clientset.NewForConfigOrDie(restConfig)

			d, _, _ := newDaemonSetJobControllerFromClients(client, kubeClient)
			d.JobSynced = tt.fields.JobSynced
			d.DaemonSetJobSynced = tt.fields.DaemonSetJobSynced
			d.NodeSynced = tt.fields.NodeSynced
			d.syncHandler = func(key string) error {
				if key == "default/last" {
					d.queue.ShutDown()
				} else if key == "default/error" {
					return fmt.Errorf(tt.WantErrString)
				}
				return nil
			}
			for _, k := range tt.keys {
				d.queue.Add(k)
			}

			ctx, cancel := context.WithTimeout(context.Background(), time.Second)
			defer cancel()
			err = d.Run(ctx)
			if (err != nil) != tt.wantErr && err != context.DeadlineExceeded {
				t.Errorf("DaemonSetJobController.Run() error = %v, wantErr %v", err, tt.wantErr)
			}
			if tt.wantErr && err != context.DeadlineExceeded && err.Error() != tt.WantErrString {
				t.Errorf("DaemonSetJobController.Run() error msg: '%s', want err msg: '%s'", err.Error(), tt.WantErrString)
			}
		})
	}
}

func newDaemonSetJobControllerFromClients(daemonsetjobClient dclientset.Interface, kubeClient clientset.Interface) (*DaemonSetJobController, kubeinformers.SharedInformerFactory, winformers.SharedInformerFactory) {
	kubeInformers := kubeinformers.NewSharedInformerFactory(kubeClient, 0)
	workflowInformers := winformers.NewSharedInformerFactory(daemonsetjobClient, 0)
	wc := NewDaemonSetJobController(daemonsetjobClient, kubeClient, kubeInformers, workflowInformers)
	wc.JobControl = &FakeJobControl{}
	wc.JobSynced = func() bool { return true }
	wc.NodeSynced = func() bool { return true }

	return wc, kubeInformers, workflowInformers
}

func Test_updateDaemonSetJobStatusConditions(t *testing.T) {
	now := metav1.Now()
	old := metav1.Now()
	old.Add(-time.Minute)
	type args struct {
		status    *dapi.DaemonSetJobStatus
		now       metav1.Time
		completed bool
		failed    bool
	}
	tests := []struct {
		name       string
		args       args
		wantStatus *dapi.DaemonSetJobStatus
	}{

		{
			name: "new completed condition",
			args: args{
				status: &dapi.DaemonSetJobStatus{
					Conditions: nil,
				},
				now:       now,
				completed: true,
			},
			wantStatus: &dapi.DaemonSetJobStatus{
				Conditions: []dapi.DaemonSetJobCondition{
					newDaemonSetJobStatusCondition(dapi.DaemonSetJobComplete, now, "", ""),
				},
				CompletionTime: &now,
			},
		},
		{
			name: "update completed condition",
			args: args{
				status: &dapi.DaemonSetJobStatus{
					Conditions: []dapi.DaemonSetJobCondition{
						newDaemonSetJobStatusCondition(dapi.DaemonSetJobComplete, old, "", ""),
					},
					CompletionTime: &old,
				},
				now:       now,
				completed: true,
			},
			wantStatus: &dapi.DaemonSetJobStatus{
				Conditions: []dapi.DaemonSetJobCondition{
					{
						Type:               dapi.DaemonSetJobComplete,
						Status:             apiv1.ConditionTrue,
						LastProbeTime:      now,
						LastTransitionTime: old,
					},
				},
				CompletionTime: &old,
			},
		},
		{
			name: "update uncompleted condition",
			args: args{
				status: &dapi.DaemonSetJobStatus{
					Conditions: []dapi.DaemonSetJobCondition{
						{
							Type:               dapi.DaemonSetJobComplete,
							Status:             apiv1.ConditionFalse,
							LastProbeTime:      old,
							LastTransitionTime: old,
						},
					},
				},
				now:       now,
				completed: true,
			},
			wantStatus: &dapi.DaemonSetJobStatus{
				Conditions: []dapi.DaemonSetJobCondition{
					{
						Type:               dapi.DaemonSetJobComplete,
						Status:             apiv1.ConditionTrue,
						LastProbeTime:      now,
						LastTransitionTime: now,
					},
				},
				CompletionTime: &now,
			},
		},
		{
			name: "completed but failed condition",
			args: args{
				status: &dapi.DaemonSetJobStatus{
					Conditions: []dapi.DaemonSetJobCondition{},
				},
				now:       now,
				completed: true,
				failed:    true,
			},
			wantStatus: &dapi.DaemonSetJobStatus{
				Conditions: []dapi.DaemonSetJobCondition{
					{
						Type:               dapi.DaemonSetJobComplete,
						Status:             apiv1.ConditionTrue,
						LastProbeTime:      now,
						LastTransitionTime: now,
					},
					{
						Type:               dapi.DaemonSetJobFailed,
						Status:             apiv1.ConditionTrue,
						LastProbeTime:      now,
						LastTransitionTime: now,
					},
				},
				CompletionTime: &now,
			},
		},
		{
			name: "to not completed but failed condition",
			args: args{
				status: &dapi.DaemonSetJobStatus{
					Conditions: []dapi.DaemonSetJobCondition{
						{
							Type:               dapi.DaemonSetJobComplete,
							Status:             apiv1.ConditionTrue,
							LastProbeTime:      old,
							LastTransitionTime: old,
						},
					},
				},
				now:       now,
				completed: false,
				failed:    true,
			},
			wantStatus: &dapi.DaemonSetJobStatus{
				Conditions: []dapi.DaemonSetJobCondition{
					{
						Type:               dapi.DaemonSetJobComplete,
						Status:             apiv1.ConditionFalse,
						LastProbeTime:      now,
						LastTransitionTime: now,
					},
					{
						Type:               dapi.DaemonSetJobFailed,
						Status:             apiv1.ConditionTrue,
						LastProbeTime:      now,
						LastTransitionTime: now,
					},
				},
				CompletionTime: nil,
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			updateDaemonSetJobStatusConditions(tt.args.status, tt.args.now, tt.args.completed, tt.args.failed)
			if !reflect.DeepEqual(tt.wantStatus, tt.args.status) {
				t.Errorf("status wanted: %#v but got %#v", tt.wantStatus, tt.args.status)
			}
		})
	}
}

func TestDaemonSetJobController_sync(t *testing.T) {
	restConfig := &rest.Config{Host: "localhost"}
	now := &metav1.Time{time.Now()}

	tests := []struct {
		name string
		// test setup
		startTime           *metav1.Time
		deleting            bool
		tweakDaemonSetJob   func(*dapi.DaemonSetJob) *dapi.DaemonSetJob
		customUpdateHandler func(*dapi.DaemonSetJob) error // custom update func
		// jobs setup
		activeJobs    int32
		succeededJobs int32
		failedJobs    int32
		deleteJobs    int32
		hashDeleteJob string
		nbNodes       int32
		// expectations
		wantErr            bool
		wantActiveJobs     int32
		wantSucceededJobs  int32
		wantFailedJobs     int32
		wantCompletionTime bool
	}{

		{
			name:       "daemonsetjob defaulted",
			startTime:  nil,
			deleting:   false,
			activeJobs: 0, succeededJobs: 0, failedJobs: 0,
			customUpdateHandler: func(d *dapi.DaemonSetJob) error {
				if !dapi.IsDaemonSetJobDefaulted(d) {
					return fmt.Errorf("daemonsetjob %q not defaulted", d.Name)
				}
				return nil
			},
		},
		{
			name:       "daemonsetjob validated",
			startTime:  nil,
			deleting:   false,
			activeJobs: 0, succeededJobs: 0, failedJobs: 0,
			customUpdateHandler: func(d *dapi.DaemonSetJob) error {
				errs := dapi.ValidateDaemonSetJob(d)
				if len(errs) > 0 {
					return fmt.Errorf("daemonsetjob %q not valid", d.Name)
				}
				return nil
			},
			tweakDaemonSetJob: func(d *dapi.DaemonSetJob) *dapi.DaemonSetJob {
				return dapi.DefaultDaemonSetJob(d)
			},
		},

		{
			name:       "daemonsetjob jobs running",
			startTime:  now,
			deleting:   false,
			activeJobs: 3, succeededJobs: 0, failedJobs: 0,
			nbNodes: 3,
			tweakDaemonSetJob: func(d *dapi.DaemonSetJob) *dapi.DaemonSetJob {
				return dapi.DefaultDaemonSetJob(d)
			},
			wantActiveJobs: 3,
		},
		{
			name:       "daemonsetjob jobs succeed",
			startTime:  now,
			deleting:   false,
			activeJobs: 0, succeededJobs: 3, failedJobs: 0,
			nbNodes: 3,
			tweakDaemonSetJob: func(d *dapi.DaemonSetJob) *dapi.DaemonSetJob {
				return dapi.DefaultDaemonSetJob(d)
			},
			wantSucceededJobs:  3,
			wantCompletionTime: true,
		},
		{
			name:       "daemonsetjob jobs failed",
			startTime:  now,
			deleting:   false,
			activeJobs: 0, succeededJobs: 0, failedJobs: 3,
			nbNodes: 3,
			tweakDaemonSetJob: func(d *dapi.DaemonSetJob) *dapi.DaemonSetJob {
				return dapi.DefaultDaemonSetJob(d)
			},
			wantFailedJobs:     3,
			wantCompletionTime: true,
		},
		{
			name:       "daemonsetjob jobs not completly done",
			startTime:  now,
			deleting:   false,
			activeJobs: 2, succeededJobs: 1, failedJobs: 0,
			nbNodes: 3,
			tweakDaemonSetJob: func(d *dapi.DaemonSetJob) *dapi.DaemonSetJob {
				return dapi.DefaultDaemonSetJob(d)
			},
			wantActiveJobs:     2,
			wantSucceededJobs:  1,
			wantCompletionTime: false,
		},
		{
			name:       "daemonsetjob missing job",
			startTime:  now,
			deleting:   false,
			activeJobs: 2, succeededJobs: 1, failedJobs: 0,
			nbNodes: 4,
			tweakDaemonSetJob: func(d *dapi.DaemonSetJob) *dapi.DaemonSetJob {
				return dapi.DefaultDaemonSetJob(d)
			},
			wantActiveJobs:     2,
			wantSucceededJobs:  1,
			wantCompletionTime: false,
		},
		{
			name:       "daemonsetjob job to be deleted",
			startTime:  now,
			deleting:   false,
			activeJobs: 2, succeededJobs: 1, failedJobs: 0,
			deleteJobs: 1, hashDeleteJob: "oldHash",
			nbNodes: 3,
			tweakDaemonSetJob: func(d *dapi.DaemonSetJob) *dapi.DaemonSetJob {
				return dapi.DefaultDaemonSetJob(d)
			},
			wantActiveJobs:     2,
			wantSucceededJobs:  1,
			wantCompletionTime: false,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {

			client, err := wclient.NewDaemonSetJobClient(restConfig)
			if err != nil {
				t.Fatalf("%s:%v", tt.name, err)
			}
			kubeClient := clientset.NewForConfigOrDie(restConfig)

			d, kubeInformerFactory, workflowInformerFactory := newDaemonSetJobControllerFromClients(client, kubeClient)

			daemonsetjob := newDaemonSetJob(tt.startTime, nil, 0, 0, 0)
			key, err := cache.MetaNamespaceKeyFunc(daemonsetjob)
			if err != nil {
				t.Fatalf("%s - unable to get key from daemonsetjob:%v", tt.name, err)
			}
			if tt.deleting {
				now := metav1.Now()
				daemonsetjob.DeletionTimestamp = &now
			}
			if tt.tweakDaemonSetJob != nil {
				daemonsetjob = tt.tweakDaemonSetJob(daemonsetjob)
			}
			workflowInformerFactory.Daemonsetjob().V1().DaemonSetJobs().Informer().GetStore().Add(daemonsetjob)

			nodeIndexer := kubeInformerFactory.Core().V1().Nodes().Informer().GetIndexer()
			for _, node := range newNodeList(tt.nbNodes) {
				nodeIndexer.Add(node.DeepCopy())
			}

			nodeSelector := labels.Set{}

			nodes, _ := d.NodeLister.List(nodeSelector.AsSelector())
			t.Logf("Node: %d", len(nodes))

			jobIndexer := kubeInformerFactory.Batch().V1().Jobs().Informer().GetIndexer()
			for _, job := range newDSJJobList(tt.activeJobs, 0, 0, "", daemonsetjob) {
				jobIndexer.Add(job.DeepCopy())
			}
			for _, job := range newDSJJobList(tt.succeededJobs, tt.activeJobs, tt.activeJobs, batch.JobComplete, daemonsetjob) {
				jobIndexer.Add(job.DeepCopy())
			}
			for _, job := range newDSJJobList(tt.failedJobs, tt.activeJobs+tt.succeededJobs, tt.activeJobs+tt.succeededJobs, batch.JobFailed, daemonsetjob) {
				jobIndexer.Add(job.DeepCopy())
			}
			for _, job := range newDSJJobList(tt.deleteJobs, tt.activeJobs+tt.succeededJobs+tt.failedJobs, 1, batch.JobComplete, daemonsetjob) {
				job.Annotations = map[string]string{DaemonSetJobMD5AnnotationKey: tt.hashDeleteJob}
				jobIndexer.Add(job.DeepCopy())
			}

			if tt.customUpdateHandler != nil {
				d.updateHandler = tt.customUpdateHandler
			} else {
				d.updateHandler = func(dsj *dapi.DaemonSetJob) error {
					// update workflow in store only
					if err := workflowInformerFactory.Daemonsetjob().V1().DaemonSetJobs().Informer().GetStore().Update(dsj); err != nil {
						t.Errorf("%s - %v", tt.name, err)
					}
					return nil
				}
			}

			// run sync twice: first time to update workflow steps, second to update status
			if err := d.sync(key); (err != nil) != tt.wantErr {
				t.Errorf("DaemonSetJobController.sync() error = %v, wantErr %v", err, tt.wantErr)
			}
			if err := d.sync(key); (err != nil) != tt.wantErr {
				t.Errorf("DaemonSetJobController.sync() error = %v, wantErr %v", err, tt.wantErr)
			}

			dsj, err := workflowInformerFactory.Daemonsetjob().V1().DaemonSetJobs().Lister().DaemonSetJobs(daemonsetjob.Namespace).Get(daemonsetjob.Name)
			if err != nil {
				t.Errorf("unable to retrieve the daemonsetjob, err:%v", err)
			}
			status := dsj.Status
			t.Logf("status:%v", status)
			if status.Active != tt.wantActiveJobs {
				t.Errorf("Status.Active:%d but want %d", status.Active, tt.wantActiveJobs)
			}
			if status.Failed != tt.wantFailedJobs {
				t.Errorf("Status.Failed:%d but want %d", status.Failed, tt.wantFailedJobs)
			}
			if status.Succeeded != tt.wantSucceededJobs {
				t.Errorf("Status.Succeeded:%d but want %d", status.Succeeded, tt.wantSucceededJobs)
			}
			if tt.wantCompletionTime && status.CompletionTime == nil {
				t.Errorf("Status.CompletionTime == nil, but want != nil")
			}
		})
	}
}

// create count jobs with the given state (Active, Complete, Failed) for the given daemonsetjob
func newDSJJobList(count int32, fromIndex int32, nodeIndex int32, status batch.JobConditionType, daemonsetjob *dapi.DaemonSetJob) []batch.Job {
	var succeededPods, failedPods, activePods int32
	var condition batch.JobCondition
	switch status {
	case batch.JobComplete:
		succeededPods = 1
		condition.Type = batch.JobComplete
		condition.Status = apiv1.ConditionTrue
	case batch.JobFailed:
		failedPods = 1
		condition.Type = batch.JobFailed
		condition.Status = apiv1.ConditionTrue
	default:
		activePods = 1
	}
	jobs := []batch.Job{}

	hash, _ := generateMD5JobSpec(&daemonsetjob.Spec.JobTemplate.Spec)

	for i := fromIndex; i < count+fromIndex; i++ {
		// set step name
		labelset, _ := getJobLabelsSetFromDaemonSetJob(daemonsetjob, daemonsetjob.Spec.JobTemplate)
		labels := map[string]string{}
		for k, v := range labelset {
			labels[k] = v
		}
		// create Job
		newJob := batch.Job{
			ObjectMeta: metav1.ObjectMeta{
				Name:      fmt.Sprintf("%s-%d", daemonsetjob.Name, i),
				Labels:    labels,
				Namespace: daemonsetjob.Namespace,
				SelfLink:  "/apiv1s/extensions/v1beta1/namespaces/default/jobs/job",
			},
			Spec: batch.JobSpec{
				Template: apiv1.PodTemplateSpec{
					Spec: apiv1.PodSpec{
						NodeName: fmt.Sprintf("node-%d", i),
					},
				},
			},
			Status: batch.JobStatus{
				Conditions: []batch.JobCondition{condition},
				Active:     activePods,
				Failed:     failedPods,
				Succeeded:  succeededPods,
			},
		}

		newJob.Annotations = map[string]string{DaemonSetJobMD5AnnotationKey: hash}
		jobs = append(jobs, newJob)
		nodeIndex++
	}
	return jobs
}

func newNodeList(count int32) []apiv1.Node {
	nodes := []apiv1.Node{}
	for i := int32(0); i < count; i++ {
		newNode := apiv1.Node{
			TypeMeta: metav1.TypeMeta{
				APIVersion: "",
				Kind:       "Node",
			},
			ObjectMeta: metav1.ObjectMeta{
				Name:      fmt.Sprintf("node-%d", i),
				Namespace: apiv1.NamespaceDefault,
			},
		}

		nodes = append(nodes, newNode)
	}
	return nodes
}

// utility function to create a basic Workflow with steps
func newDaemonSetJob(startTime *metav1.Time, nodeSelector *metav1.LabelSelector, successed, failed, active int32) *dapi.DaemonSetJob {
	return &dapi.DaemonSetJob{
		TypeMeta: metav1.TypeMeta{
			APIVersion: daemonsetjob.GroupName + "/v1",
			Kind:       "DaemonSetJob",
		},
		ObjectMeta: metav1.ObjectMeta{
			Name:      "mydsj",
			Namespace: apiv1.NamespaceDefault,
		},
		Spec: dapi.DaemonSetJobSpec{
			Selector: &metav1.LabelSelector{
				MatchLabels: map[string]string{
					"daemonsetjob": "example-selector",
				},
			},
			NodeSelector: nodeSelector,
			JobTemplate:  utiltesting.ValidFakeTemplateSpec(),
		},
		Status: dapi.DaemonSetJobStatus{
			StartTime: startTime,
			Succeeded: successed,
			Failed:    failed,
			Active:    active,
		},
	}
}

redpajama_set_name: RedPajamaGithub