text:
use std::{
    borrow::Borrow,
    collections::{BTreeMap, HashMap, HashSet},
    sync::{
        atomic::{AtomicU64, Ordering::SeqCst},
        Arc,
    },
};

use js_int::{int, uint};
use ruma_common::{
    event_id,
    events::{
        pdu::{EventHash, Pdu, RoomV3Pdu},
        room::{
            join_rules::{JoinRule, RoomJoinRulesEventContent},
            member::{MembershipState, RoomMemberEventContent},
        },
        RoomEventType,
    },
    room_id, user_id, EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, RoomId, RoomVersionId,
    UserId,
};
use serde_json::{
    json,
    value::{to_raw_value as to_raw_json_value, RawValue as RawJsonValue},
};
use tracing::info;

use crate::{auth_types_for_event, Error, Event, EventTypeExt, Result, StateMap};

pub use event::PduEvent;

static SERVER_TIMESTAMP: AtomicU64 = AtomicU64::new(0);

pub fn do_check(
    events: &[Arc<PduEvent>],
    edges: Vec<Vec<OwnedEventId>>,
    expected_state_ids: Vec<OwnedEventId>,
) {
    // To activate logging use `RUST_LOG=debug cargo t`

    let init_events = INITIAL_EVENTS();

    let mut store = TestStore(
        init_events
            .values()
            .chain(events)
            .map(|ev| (ev.event_id().to_owned(), ev.clone()))
            .collect(),
    );

    // This will be lexi_topo_sorted for resolution
    let mut graph = HashMap::new();
    // This is the same as in `resolve` event_id -> OriginalStateEvent
    let mut fake_event_map = HashMap::new();

    // Create the DB of events that led up to this point
    // TODO maybe clean up some of these clones it is just tests but...
    for ev in init_events.values().chain(events) {
        graph.insert(ev.event_id().to_owned(), HashSet::new());
        fake_event_map.insert(ev.event_id().to_owned(), ev.clone());
    }

    for pair in INITIAL_EDGES().windows(2) {
        if let [a, b] = &pair {
            graph.entry(a.to_owned()).or_insert_with(HashSet::new).insert(b.clone());
        }
    }

    for edge_list in edges {
        for pair in edge_list.windows(2) {
            if let [a, b] = &pair {
                graph.entry(a.to_owned()).or_insert_with(HashSet::new).insert(b.clone());
            }
        }
    }

    // event_id -> PduEvent
    let mut event_map: HashMap<OwnedEventId, Arc<PduEvent>> = HashMap::new();
    // event_id -> StateMap<OwnedEventId>
    let mut state_at_event: HashMap<OwnedEventId, StateMap<OwnedEventId>> = HashMap::new();

    // Resolve the current state and add it to the state_at_event map then continue
    // on in "time"
    for node in crate::lexicographical_topological_sort(&graph, |_id| {
        Ok((int!(0), MilliSecondsSinceUnixEpoch(uint!(0))))
    })
    .unwrap()
    {
        let fake_event = fake_event_map.get(&node).unwrap();
        let event_id = fake_event.event_id().to_owned();

        let prev_events = graph.get(&node).unwrap();

        let state_before: StateMap<OwnedEventId> = if prev_events.is_empty() {
            HashMap::new()
        } else if prev_events.len() == 1 {
            state_at_event.get(prev_events.iter().next().unwrap()).unwrap().clone()
        } else {
            let state_sets =
                prev_events.iter().filter_map(|k| state_at_event.get(k)).collect::<Vec<_>>();

            info!(
                "{:#?}",
                state_sets
                    .iter()
                    .map(|map| map
                        .iter()
                        .map(|((ty, key), id)| format!("(({ty}{key:?}), {id})"))
                        .collect::<Vec<_>>())
                    .collect::<Vec<_>>()
            );

            let auth_chain_sets = state_sets
                .iter()
                .map(|map| {
                    store.auth_event_ids(room_id(), map.values().cloned().collect()).unwrap()
                })
                .collect();

            let resolved = crate::resolve(&RoomVersionId::V6, state_sets, auth_chain_sets, |id| {
                event_map.get(id).map(Arc::clone)
            });
            match resolved {
                Ok(state) => state,
                Err(e) => panic!("resolution for {node} failed: {e}"),
            }
        };

        let mut state_after = state_before.clone();

        let ty = fake_event.event_type();
        let key = fake_event.state_key().unwrap();
        state_after.insert(ty.with_state_key(key), event_id.to_owned());

        let auth_types = auth_types_for_event(
            fake_event.event_type(),
            fake_event.sender(),
            fake_event.state_key(),
            fake_event.content(),
        )
        .unwrap();

        let mut auth_events = vec![];
        for key in auth_types {
            if state_before.contains_key(&key) {
                auth_events.push(state_before[&key].clone());
            }
        }

        // TODO The event is just remade, adding the auth_events and prev_events here
        // the `to_pdu_event` was split into `init` and the fn below, could be better
        let e = fake_event;
        let ev_id = e.event_id();
        let event = to_pdu_event(
            e.event_id().as_str(),
            e.sender(),
            e.event_type().clone(),
            e.state_key(),
            e.content().to_owned(),
            &auth_events,
            &prev_events.iter().cloned().collect::<Vec<_>>(),
        );

        // We have to update our store, an actual user of this lib would
        // be giving us state from a DB.
        store.0.insert(ev_id.to_owned(), event.clone());

        state_at_event.insert(node, state_after);
        event_map.insert(event_id.to_owned(), Arc::clone(store.0.get(ev_id).unwrap()));
    }

    let mut expected_state = StateMap::new();
    for node in expected_state_ids {
        let ev = event_map.get(&node).unwrap_or_else(|| {
            panic!(
                "{node} not found in {:?}",
                event_map.keys().map(ToString::to_string).collect::<Vec<_>>()
            )
        });

        let key = ev.event_type().with_state_key(ev.state_key().unwrap());

        expected_state.insert(key, node);
    }

    let start_state = state_at_event.get(event_id!("$START:foo")).unwrap();

    let end_state = state_at_event
        .get(event_id!("$END:foo"))
        .unwrap()
        .iter()
        .filter(|(k, v)| {
            expected_state.contains_key(k)
                || start_state.get(k) != Some(*v)
                // Filter out the dummy messages events.
                // These act as points in time where there should be a known state to
                // test against.
                && **k != ("m.room.message".into(), "dummy".to_owned())
        })
        .map(|(k, v)| (k.clone(), v.clone()))
        .collect::<StateMap<OwnedEventId>>();

    assert_eq!(expected_state, end_state);
}

#[allow(clippy::exhaustive_structs)]
pub struct TestStore<E: Event>(pub HashMap<OwnedEventId, Arc<E>>);

impl<E: Event> TestStore<E> {
    pub fn get_event(&self, _: &RoomId, event_id: &EventId) -> Result<Arc<E>> {
        self.0
            .get(event_id)
            .map(Arc::clone)
            .ok_or_else(|| Error::NotFound(format!("{event_id} not found")))
    }

    /// Returns a Vec of the related auth events to the given `event`.
    pub fn auth_event_ids(
        &self,
        room_id: &RoomId,
        event_ids: Vec<E::Id>,
    ) -> Result<HashSet<E::Id>> {
        let mut result = HashSet::new();
        let mut stack = event_ids;

        // DFS for auth event chain
        while let Some(ev_id) = stack.pop() {
            if result.contains(&ev_id) {
                continue;
            }

            result.insert(ev_id.clone());

            let event = self.get_event(room_id, ev_id.borrow())?;

            stack.extend(event.auth_events().map(ToOwned::to_owned));
        }

        Ok(result)
    }
}

// A StateStore implementation for testing
#[allow(clippy::type_complexity)]
impl TestStore<PduEvent> {
    pub fn set_up(
        &mut self,
    ) -> (StateMap<OwnedEventId>, StateMap<OwnedEventId>, StateMap<OwnedEventId>) {
        let create_event = to_pdu_event::<&EventId>(
            "CREATE",
            alice(),
            RoomEventType::RoomCreate,
            Some(""),
            to_raw_json_value(&json!({ "creator": alice() })).unwrap(),
            &[],
            &[],
        );
        let cre = create_event.event_id().to_owned();
        self.0.insert(cre.clone(), Arc::clone(&create_event));

        let alice_mem = to_pdu_event(
            "IMA",
            alice(),
            RoomEventType::RoomMember,
            Some(alice().as_str()),
            member_content_join(),
            &[cre.clone()],
            &[cre.clone()],
        );
        self.0.insert(alice_mem.event_id().to_owned(), Arc::clone(&alice_mem));

        let join_rules = to_pdu_event(
            "IJR",
            alice(),
            RoomEventType::RoomJoinRules,
            Some(""),
            to_raw_json_value(&RoomJoinRulesEventContent::new(JoinRule::Public)).unwrap(),
            &[cre.clone(), alice_mem.event_id().to_owned()],
            &[alice_mem.event_id().to_owned()],
        );
        self.0.insert(join_rules.event_id().to_owned(), join_rules.clone());

        // Bob and Charlie join at the same time, so there is a fork
        // this will be represented in the state_sets when we resolve
        let bob_mem = to_pdu_event(
            "IMB",
            bob(),
            RoomEventType::RoomMember,
            Some(bob().as_str()),
            member_content_join(),
            &[cre.clone(), join_rules.event_id().to_owned()],
            &[join_rules.event_id().to_owned()],
        );
        self.0.insert(bob_mem.event_id().to_owned(), bob_mem.clone());

        let charlie_mem = to_pdu_event(
            "IMC",
            charlie(),
            RoomEventType::RoomMember,
            Some(charlie().as_str()),
            member_content_join(),
            &[cre, join_rules.event_id().to_owned()],
            &[join_rules.event_id().to_owned()],
        );
        self.0.insert(charlie_mem.event_id().to_owned(), charlie_mem.clone());

        let state_at_bob = [&create_event, &alice_mem, &join_rules, &bob_mem]
            .iter()
            .map(|e| {
                (e.event_type().with_state_key(e.state_key().unwrap()), e.event_id().to_owned())
            })
            .collect::<StateMap<_>>();

        let state_at_charlie = [&create_event, &alice_mem, &join_rules, &charlie_mem]
            .iter()
            .map(|e| {
                (e.event_type().with_state_key(e.state_key().unwrap()), e.event_id().to_owned())
            })
            .collect::<StateMap<_>>();

        let expected = [&create_event, &alice_mem, &join_rules, &bob_mem, &charlie_mem]
            .iter()
            .map(|e| {
                (e.event_type().with_state_key(e.state_key().unwrap()), e.event_id().to_owned())
            })
            .collect::<StateMap<_>>();

        (state_at_bob, state_at_charlie, expected)
    }
}

pub fn event_id(id: &str) -> OwnedEventId {
    if id.contains('$') {
        return id.try_into().unwrap();
    }

    format!("${id}:foo").try_into().unwrap()
}

pub fn alice() -> &'static UserId {
    user_id!("@alice:foo")
}

pub fn bob() -> &'static UserId {
    user_id!("@bob:foo")
}

pub fn charlie() -> &'static UserId {
    user_id!("@charlie:foo")
}

pub fn ella() -> &'static UserId {
    user_id!("@ella:foo")
}

pub fn zara() -> &'static UserId {
    user_id!("@zara:foo")
}

pub fn room_id() -> &'static RoomId {
    room_id!("!test:foo")
}

pub fn member_content_ban() -> Box<RawJsonValue> {
    to_raw_json_value(&RoomMemberEventContent::new(MembershipState::Ban)).unwrap()
}

pub fn member_content_join() -> Box<RawJsonValue> {
    to_raw_json_value(&RoomMemberEventContent::new(MembershipState::Join)).unwrap()
}

pub fn to_init_pdu_event(
    id: &str,
    sender: &UserId,
    ev_type: RoomEventType,
    state_key: Option<&str>,
    content: Box<RawJsonValue>,
) -> Arc<PduEvent> {
    let ts = SERVER_TIMESTAMP.fetch_add(1, SeqCst);
    let id = if id.contains('$') { id.to_owned() } else { format!("${id}:foo") };

    let state_key = state_key.map(ToOwned::to_owned);
    Arc::new(PduEvent {
        event_id: id.try_into().unwrap(),
        rest: Pdu::RoomV3Pdu(RoomV3Pdu {
            room_id: room_id().to_owned(),
            sender: sender.to_owned(),
            origin_server_ts: MilliSecondsSinceUnixEpoch(ts.try_into().unwrap()),
            state_key,
            kind: ev_type,
            content,
            redacts: None,
            unsigned: BTreeMap::new(),
            auth_events: vec![],
            prev_events: vec![],
            depth: uint!(0),
            hashes: EventHash::new("".to_owned()),
            signatures: BTreeMap::new(),
        }),
    })
}

pub fn to_pdu_event<S>(
    id: &str,
    sender: &UserId,
    ev_type: RoomEventType,
    state_key: Option<&str>,
    content: Box<RawJsonValue>,
    auth_events: &[S],
    prev_events: &[S],
) -> Arc<PduEvent>
where
    S: AsRef<str>,
{
    let ts = SERVER_TIMESTAMP.fetch_add(1, SeqCst);
    let id = if id.contains('$') { id.to_owned() } else { format!("${id}:foo") };
    let auth_events = auth_events.iter().map(AsRef::as_ref).map(event_id).collect::<Vec<_>>();
    let prev_events = prev_events.iter().map(AsRef::as_ref).map(event_id).collect::<Vec<_>>();

    let state_key = state_key.map(ToOwned::to_owned);
    Arc::new(PduEvent {
        event_id: id.try_into().unwrap(),
        rest: Pdu::RoomV3Pdu(RoomV3Pdu {
            room_id: room_id().to_owned(),
            sender: sender.to_owned(),
            origin_server_ts: MilliSecondsSinceUnixEpoch(ts.try_into().unwrap()),
            state_key,
            kind: ev_type,
            content,
            redacts: None,
            unsigned: BTreeMap::new(),
            auth_events,
            prev_events,
            depth: uint!(0),
            hashes: EventHash::new("".to_owned()),
            signatures: BTreeMap::new(),
        }),
    })
}

// all graphs start with these input events
#[allow(non_snake_case)]
pub fn INITIAL_EVENTS() -> HashMap<OwnedEventId, Arc<PduEvent>> {
    vec![
        to_pdu_event::<&EventId>(
            "CREATE",
            alice(),
            RoomEventType::RoomCreate,
            Some(""),
            to_raw_json_value(&json!({ "creator": alice() })).unwrap(),
            &[],
            &[],
        ),
        to_pdu_event(
            "IMA",
            alice(),
            RoomEventType::RoomMember,
            Some(alice().as_str()),
            member_content_join(),
            &["CREATE"],
            &["CREATE"],
        ),
        to_pdu_event(
            "IPOWER",
            alice(),
            RoomEventType::RoomPowerLevels,
            Some(""),
            to_raw_json_value(&json!({ "users": { alice(): 100 } })).unwrap(),
            &["CREATE", "IMA"],
            &["IMA"],
        ),
        to_pdu_event(
            "IJR",
            alice(),
            RoomEventType::RoomJoinRules,
            Some(""),
            to_raw_json_value(&RoomJoinRulesEventContent::new(JoinRule::Public)).unwrap(),
            &["CREATE", "IMA", "IPOWER"],
            &["IPOWER"],
        ),
        to_pdu_event(
            "IMB",
            bob(),
            RoomEventType::RoomMember,
            Some(bob().as_str()),
            member_content_join(),
            &["CREATE", "IJR", "IPOWER"],
            &["IJR"],
        ),
        to_pdu_event(
            "IMC",
            charlie(),
            RoomEventType::RoomMember,
            Some(charlie().as_str()),
            member_content_join(),
            &["CREATE", "IJR", "IPOWER"],
            &["IMB"],
        ),
        to_pdu_event::<&EventId>(
            "START",
            charlie(),
            RoomEventType::RoomMessage,
            Some("dummy"),
            to_raw_json_value(&json!({})).unwrap(),
            &[],
            &[],
        ),
        to_pdu_event::<&EventId>(
            "END",
            charlie(),
            RoomEventType::RoomMessage,
            Some("dummy"),
            to_raw_json_value(&json!({})).unwrap(),
            &[],
            &[],
        ),
    ]
    .into_iter()
    .map(|ev| (ev.event_id().to_owned(), ev))
    .collect()
}

// all graphs start with these input events
#[allow(non_snake_case)]
pub fn INITIAL_EVENTS_CREATE_ROOM() -> HashMap<OwnedEventId, Arc<PduEvent>> {
    vec![to_pdu_event::<&EventId>(
        "CREATE",
        alice(),
        RoomEventType::RoomCreate,
        Some(""),
        to_raw_json_value(&json!({ "creator": alice() })).unwrap(),
        &[],
        &[],
    )]
    .into_iter()
    .map(|ev| (ev.event_id().to_owned(), ev))
    .collect()
}

#[allow(non_snake_case)]
pub fn INITIAL_EDGES() -> Vec<OwnedEventId> {
    vec!["START", "IMC", "IMB", "IJR", "IPOWER", "IMA", "CREATE"]
        .into_iter()
        .map(event_id)
        .collect::<Vec<_>>()
}

pub mod event {
    use ruma_common::{
        events::{pdu::Pdu, RoomEventType},
        MilliSecondsSinceUnixEpoch, OwnedEventId, RoomId, UserId,
    };
    use serde::{Deserialize, Serialize};
    use serde_json::value::RawValue as RawJsonValue;

    use crate::Event;

    impl Event for PduEvent {
        type Id = OwnedEventId;

        fn event_id(&self) -> &Self::Id {
            &self.event_id
        }

        fn room_id(&self) -> &RoomId {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => &ev.room_id,
                Pdu::RoomV3Pdu(ev) => &ev.room_id,
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn sender(&self) -> &UserId {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => &ev.sender,
                Pdu::RoomV3Pdu(ev) => &ev.sender,
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn event_type(&self) -> &RoomEventType {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => &ev.kind,
                Pdu::RoomV3Pdu(ev) => &ev.kind,
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn content(&self) -> &RawJsonValue {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => &ev.content,
                Pdu::RoomV3Pdu(ev) => &ev.content,
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn origin_server_ts(&self) -> MilliSecondsSinceUnixEpoch {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => ev.origin_server_ts,
                Pdu::RoomV3Pdu(ev) => ev.origin_server_ts,
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn state_key(&self) -> Option<&str> {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => ev.state_key.as_deref(),
                Pdu::RoomV3Pdu(ev) => ev.state_key.as_deref(),
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn prev_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_> {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => Box::new(ev.prev_events.iter().map(|(id, _)| id)),
                Pdu::RoomV3Pdu(ev) => Box::new(ev.prev_events.iter()),
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn auth_events(&self) -> Box<dyn DoubleEndedIterator<Item = &Self::Id> + '_> {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => Box::new(ev.auth_events.iter().map(|(id, _)| id)),
                Pdu::RoomV3Pdu(ev) => Box::new(ev.auth_events.iter()),
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }

        fn redacts(&self) -> Option<&Self::Id> {
            match &self.rest {
                Pdu::RoomV1Pdu(ev) => ev.redacts.as_ref(),
                Pdu::RoomV3Pdu(ev) => ev.redacts.as_ref(),
                #[allow(unreachable_patterns)]
                _ => unreachable!("new PDU version"),
            }
        }
    }

    #[derive(Clone, Debug, Deserialize, Serialize)]
    #[allow(clippy::exhaustive_structs)]
    pub struct PduEvent {
        pub event_id: OwnedEventId,
        #[serde(flatten)]
        pub rest: Pdu,
    }
}


I have been right into shawls lately, which is funny because I've never worn one.... But I hope I'll be able to change that if I have one or two that have been made by me and in colours I really love. I've just completed the Critron and now I'm going to make Aurelie! The little wing is a great pattern too. Now I might end up with an addiction to shawl making!!
I never wore shawls until I started making them. Now that the weather has turned to fall I wear one nearly everyday in some fashion or another. I think they make great projects because they can be as simple or complex as you want them to be, and can be done in any yarn, Plus - No seaming!!
I too have been into shawls lately...must be the fall weather!! Love that yarn you are using!!
Fall is my favorite time of year no question! So far I'm quite happy with the yarn. The colors are my go-to faves!
Nice colours. Enjoy the shawl making.
Going up has its advantages too.
Thanks Mistea. I'm not sure that I've discovered the going up advantage, but I'm always open to new experiences!
As for reading - I always enjoy my time with books, even if the story turns out to be a dud!
No wonder the shawls tied, they were both really pretty (and look like fun to make). I'm really looking forward to seeing it grow!
I know the shawls really were very similar - that's why I get so stuck picking! So far I'm feeling good about Little Wing. Fingers crossed that it's smooth sailing now that I'm past the point (tip).
So far the Amazing yarn is living up to it's name!
I used a Fsc for the first time in my chevron lace cardigan. Once I found a good set of instructions (in the back of Crochet! Today Magazine) it was easy going. I think it does produce a nice edge that is fine on it's own without further embellishment. As for counting those long chains - I use lots of stitch markers and can still run into trouble at the end!


text:
The Classical Composers Database
Why register on Musicalics?
When you register on Musicalics.com, you will be able to subscribe to the monthly newsletter. You will also be able to edit pages on the site or add new content, depending on your wishes.
Are you a composer?
When you are (representing) a composer, and you are already listed on this site, then let me know. I will give you an account with permissions to control the content on your composer and composition pages.
You can open an account here. If you already have an account: log in here
Composers: alphabetical
Female composers
Composers timeline
Composers today
Composers tomorrow
Composer calendar
Composers this year
Composers next year
MusicAtlas places near you
Home » Composers born today » Composers born today
Composers born today
Thiago Schäfer (1997) 22 years ago
Yan Mikirtumov (1974) 45 years ago
Laurence Dresner (1955) 64 years ago
David Froom (1951) 68 years ago
Thomas Albert (1948) 71 years ago
Ron Nelson (1929) 90 years ago
Helmut Bornefeld (1906) 113 years ago
Mervyn Vicars (1905) 114 years ago
Renato Parodi (1900) 119 years ago
Charles Louis Seeger (1886) 133 years ago
Manolis Kalomiris (1883) 136 years ago
Lieven Duvosel (1877) 142 years ago
Joseph Jongen (1873) 146 years ago
Simon van Milligen (1849) 170 years ago
Louise Heritte (1841) 178 years ago
Wilfrid d' Indy (1821) 198 years ago
Maria Szymanowska (1789) 230 years ago
Jan Evangelista Antonin Kozeluh (1738) 281 years ago
Giuseppe Valentini (1681) 338 years ago
Andrei Beliaev (1979) 41 years ago
Iiro Rantala (1970) 50 years ago
Adrian Borza (1967) 53 years ago
Al Benner (1955) 65 years ago
Stan Grill (1953) 67 years ago
Composers death today
Günther Andergassen (2016) 4 years ago
Thomas Christian David (2006) 14 years ago
Reinier van der Velden (1993) 27 years ago
Fred Lohse (1987) 33 years ago
Richard Franko Goldman (1980) 40 years ago
Premieres today
Wolfgang Amadeus Mozart (1787) 233 years ago
Giuseppe Verdi (1853) 167 years ago
Camille Saint-Saëns (1873) 147 years ago
Jules Massenet (1884) 136 years ago
Georges Auric (1924) 96 years ago
Nikolai Yakovlevich Miaskovsky 1881 –1950
Friday, December 6, 2019 - 16:16
Monday, November 25, 2019 - 12:06
Wednesday, November 13, 2019 - 15:55
Monday, November 4, 2019 - 10:58

redpajama_set_name: RedPajamaCommonCrawl


Geekbench and Antutu Benchmark Explained: Why You Shouldn't Care?
Geekbench and Antutu Benchmark Explained: Why You Shouldn't Care?
IT'S LIKE JUDGING THE CAMERA WITH THE MEGAPIXELS, MORE MEGAPIXELS MEANS A BETTER CAMERA!
Snapdragon 8150 Antutu score leaked on the Chinese website Weibo and controversy started there. Some of the guys told me that Antutu is not trusted, it gives fake results and many more comments. Because first-time Snapdragon processor beats the Apple's processor. Which is really great but calling it fake isn't good just because one processor beats another.
Antutu benchmark app does various tasks to give you a final result. It provides the real-time performance by doing the various task in the device.
CPU Test: Processors are designed to math very quickly. The benchmark result counted by taking a test of the device by assigning it task and time. For example, They might see how much data it can compress in a given time period or how fast it can do a specific task. The more tasks it can get through the higher number it receives.
GPU Test: GPU performance tests the graphic of the device. Suppose if you're playing a game then it tests what is the best graphics your phone can play. How long your device can run a game or render the 2D/3D graphics without dropping a frame. The longer and higher graphics it can play, the higher the score it gets.
Memory Management: Memory management is an important parameter to score in benchmark at least in Antutu. Antutu checks how is the RAM management of the device and gives the score accordingly.
UX is divided into two sub-scores — Multitask and Runtime. The Multitask score represents how well the device can multitask, so a multi-core CPU will help here. The Runtime score represents how well Android's Dalvik runtime runs apps.
Geekbench score is divided into Single Core score and Multi-Core score. Geekbench tests the performance of the device by performing 4 tasks Assigned – Subsection Weight Cryptography -5%, Integer- 45%, Floating Point- 30%, Memory 20%.
Crypto workloads measure the crypto instruction performance of your computer by performing cryptography tasks that make heavy use of crypto instructions. While not all software uses crypto instructions, the software that does can benefit enormously from it.
Integer workloads measure the integer instruction performance of your computer by performing processor-intensive tasks that make heavy use of integer instructions. All software makes heavy use of integer instructions, meaning a high integer score indicates good overall performance.
Floating Point Floating point workloads measure floating point performance by performing a variety of processor-intensive tasks that make heavy use of floating-point operations. While almost all software makes use of floating point instructions, floating point performance is especially important in video games, digital content creation, and high-performance computing applications.
Memory workloads measure memory latency and bandwidth. Software working with large data structures (e.g., digital content creation) or with referential data structures (e.g., databases, web browsers) rely on good memory performance to keep the processor busy.
Battery Score: Geekbench 4 battery scores measure the battery life of a device when running processor-intensive applications. It provides a consistent workload to the device and generates a Geekbench score by evaluating the amount of work that it is able to do while the battery is discharging and the amount of time it takes for the battery to discharge.
Different tasks that measure the real-time performance. Better the performance higher will be the results. Geekbench also counts the battery life performance in their test.
Why This Benchmark Doesn't Matter?
It's like judging the camera with the Megapixels, more megapixels means a better camera!
The real-life performance matters the most. I have seen the device which got the highest benchmark loss to the other (check out comparison videos on youtube). So, At the end of the day, the real-life performance matters the most.
Now, Don't share a Gary Explains video of Speed test are flaws. Well, Each and everything he said in that video is right but why does it matter to me? I want faster speed that's what I am getting. Developers using different apps, different codes, different platforms, different size, and all that stuff doesn't matter to the end consumers. All that matters is the speed that's what end consumer want.


text:
The truth about e-cigarettes
Vaping is still very new, compared to tobacco, so should we be wary about encouraging smokers to switch?
By Jason Goodyer
30th September, 2019 at 12:00
San Francisco recently became the first US city to ban sales of e-cigarettes, citing the fact that the long-term health effects of vaping are still unknown and that there seems to be an upswing in young vapers. However, some people believe this decision may turn former smokers who now vape back onto traditional tobacco products. Professor John Britton, director of the UK Centre for Tobacco & Alcohol Studies at the University of Nottingham, explains.
What do you make of San Francisco's recent decision to ban the sales of e-cigarettes?
It's not something that's happening anywhere else in the world. I think the USA generally and San Francisco particularly is getting into something of a moral panic. What they have had, over the last year, is a big increase in the use of a particular product which delivers very high amounts of nicotine. It looks like a USB stick and you charge it like a USB stick. So, quite a novelty product.
And that hasn't been a problem until last year's data came out, because smoking prevalence rates have been falling in children in America just as they have in the UK, but the 2018 figures had a slight uptake with a big increase in vaping, and so that has been interpreted as a sign that vaping is producing a whole new generation of nicotine addicts. And on that basis they've banned it.
Read more about addiction:
Is addiction on the rise?
What causes addiction?
Will this prove effective?
I think it's a gross overreaction, but the USA does have a problem in that it has never endorsed the use of electronic cigarettes as a way of quitting smoking in the way that we have in the UK, and it has never prohibited advertising [e-cigarettes] to children, and the brand in question has been advertised strongly on social media to young people.
So, in effect, you get what you ask for and that's what's happened. But the solution of banning the sale of e-cigarettes strikes me as being utterly unenforceable, as you just go out of the city to buy them, so how do you then achieve anything? The problem is advertising nicotine products to children and selling them to children, not the fact that these products are harmful to society as a whole.
People mention that the flavours of e-cigarettes, like mango or cherry, for example, make them more appealing to children.
There may be some truth in that, but it's also true that most smokers – and I've never been a regular smoker, so I find this hard to believe – say that they find the sensation of inhaling nicotine vapour quite difficult to cope with. And the flavour makes all the difference for many vapers between being able to use the product.
So, again, it's important not to throw the baby out with the bathwater. You can ban flavours, and protect children, but then you stop hundreds and thousands of smokers from successfully transitioning to something that's going to prolong their life.
In the UK, The NHS actually recommends switching to e-cigarettes if you want to stop or cut down on smoking tobacco.
Yes, the most effective way to quit smoking is to use nicotine replacement therapy, and electronic cigarettes. There was a trial published in the world's leading medical journal, which happens to be an American one, the New England Journal Of Medicine, showed that in a randomised trial in the UK, people in smoking cessation services who are allocated to e-cigarettes in addition to conventional nicotine replacement therapy are about twice as likely to quit. And they are effective quitting agents, so we should be promoting them.
It also helps that e-cigarettes gives a similar sensation to traditional tobacco products…
Most smokers want to quit smoking. All smokers know that it's harmful but they find it difficult to find something that is an effective substitute to smoking. You need decent amounts of nicotine to be delivered, which most nicotine replacement therapies alone don't do, and you also need to have the essential behaviour stimulation, like sharing cigarettes with friends.
You can go out with other people and smoke and vape and you're not ostracised. You don't go out with a group of smokers and stick a nicotine patch on your arm and say 'hey, that seems cool, we're sharing nicotine together'. It looks stupid.
Using e-cigarettes isn't without risk though, is it? What does the current research say?
They aren't new. They've been around for 15 years; they've been in widespread use in the UK for about seven years. There's been no appreciable reported adverse effects, with use by millions of people. So, if that was a drug, you'd be pretty confident that there are no major adverse short-term effects.
Long-term, because you're inhaling a hot vapour which has got foreign materials in it into your lungs, it is likely that there will be some lung damage from it. But, if you look at the levels of these things, you will see that the levels are a fraction of those of tobacco smoke. So on the one hand, it's completely barmy, for you or I as non-smoking, non-nicotine users, to start using e-cigarettes. But if you're a smoker, it's a no-brainer. You should switch.
But they contain nicotine, So isn't that going to cause damage to your cardiovascular system, etc?
No, it isn't. If you look at the general physiological profile of effects of nicotine on the body, it's on a par with caffeine. So, you have maybe 80 per cent of the British population being addicted to caffeine. I've had discussions with people telling me how electronic cigarettes are harmful because they contain nicotine, while drinking coffee.
Follow Science Focus on Twitter, Facebook, Instagram and Flipboard
Jason Goodyer
Commissioning editor, BBC Science Focus
Jason is the commissioning editor of BBC Science Focus magazine. He has a MSc in Physics.
Growing up poor can affect your DNA as well as your health
Why does grapefruit juice have an impact on drugs?
Why is it so difficult to make a contraceptive pill for men?
Troubleshoot | How to get the best night's sleep
Getting under your skin | The surprising life of our largest organ
Do different medicines work for everyone?
Reality Check | Is CBD oil a miracle cure or snake oil?
Cannabis oil: what is it and can it really be made into medicine?


text:
icon-careers Careers
icon-location Dallas, TX
17 Search Results Found
You searched for: "catering"
Bristol Bar & Grill
Bristol Bar & Grill takes you on a journey with Chef Allain Vervil and his culinary team who have locally inspired cuisine featuring fresh local ingredients. The menu has something for everyone; enjoy regional favorites like the Crowne Rib eye steak. Featuring as well, international flavors like the Caribbean jerk pork and South Latin American Red fish Ceviche. Don't miss their daily Breakfast buffet, and their select lunch menu 7 days a week. Bristol Bar & grill offers a variety of local beer and cocktails with classic favorites where friends and family can come out wine dine & enjoy spirits. Located across the main lobby of the Crowne Plaza Hotel.
Chamberlain's Fish Market Grill
One of America's leading chefs, Richard Chamberlain is the owner of Chamberlain's Fish Market Grill, one of Dallas' Premier Seafood Restaurants. It has a warm and cozy San Francisco style décor. Great for romantic dinners! Try the succulent Sea Bass, Wild Alaskan Halibut, Oak Plank Alaskan Salmon or the infamous Peanut Butter Pie! Four private dining rooms for 10 to 55 people. Open seven days a week!
Chamberlain's Steak & Chop House
Considered one of America's leading chefs, Richard is the owner of Chamberlain's Steak and Chophouse in Dallas – named one of Bon Appetit's top new restaurants shortly after opening in 1993. Since then, both he and the restaurant have garnered stellar reviews and accolades from premier publications such as Gourmet and Zagat Guide. Richard followed this success by opening the award-winning Fish Market Grill in Dallas. Consistently recognized by the world's top restaurant and dining publications, Chef Chamberlain's awards include: "One of America's Top Tables," from Gourmet "One of America's Top Restaurants," from Zagat Guide "Award of Excellence," from Wine Spectator
The Chef's Table in the Doubletree by Hilton Galleria is our newly renovated restaurant and features the cuisine of Chef Alberto Medina. His signature items are from delicious steaks and seafood to mouth watering angus hamburgers. He is also known for his chocolate creme brulee. The Chef's table is the perfect retreat to have that one of a kind meal experience.
Cindi's NY Deli (Campbell)
Cindi's New York Deli and Bakery, now with five locations, is a favorite among Dallasites looking for the authentic flavors of New York.
Our menu boasts an array of delicious selections, offering everything from pancakes to omelettes, knishes to cheese blintzes, and nova lox and eggs to migas. We also offer appetizing sandwiches, including New York Ruebens, Philadelphia cheese steaks, tuna melts, egg salad, and pastrami sandwiches. On top of that, we have a great selection of comfort foods including chicken and dumplings, Matzo ball soup, and hearty stews. Our bakery bakes fresh bagels, rye breads, Challahs, pastries, and custom cakes daily. Breakfast is served all day. We have weekly specials available weekdays. And, we also cater!
Cindi's NY Deli (Carrollton)
Cindi's NY Deli (Central)
Cindi's New York Deli and Bakery, now with five locations, is a favorite among Dallasites looking for the authentic flavors of New York. Our menu boasts an array of delicious selections, offering everything from pancakes to omelettes, knishes to cheese blintzes, and nova lox and eggs to migas. We also offer appetizing sandwiches, including New York Ruebens, Philadelphia cheese steaks, tuna melts, egg salad, and pastrami sandwiches. On top of that, we have a great selection of comfort foods including chicken and dumplings, Matzo ball soup, and hearty stews. Our bakery bakes fresh bagels, rye breads, Challahs, pastries, and custom cakes daily. Breakfast is served all day. We have weekly specials available weekdays. And, we also cater!
Cindi's NY Deli (Downtown)
Cindi's NY Deli (Forest)
From the streets of Mexico City, Tijuana, and Monterrey - authentic cuisine made its way north of the border. Relocating to the streets of Art Deco Los Angeles, Mexican diners found their place and Americans got a new taste. We have replicated that same diner feel, food, and social color at El Famoso. Our guests are transported to a time and place through the food offering, decor, and festive atmosphere that is being rediscovered in Dallas.
Fleming's Steakhouse (Plano)
Your Plano Fleming's is located at the Legacy Tower in Plano on the southeast corner of the Dallas North Tollway at Legacy Drive. Whether you're celebrating, dining at lunch with business clients or want a night out with friends, we have created the perfect ambiance with a menu filled with your favorites and a local chef's table that changes with the season, or whenever we feel inspired by our ingredients. Our bar is always open and our wine manager has curated a wide selection of locally selected wines, hand-crafted cocktails and spirits. Need a more private space? Our Private Dining Director is at your service.
III Forks Prime Steakhouse
III Forks is a restaurant that has recreated the grandiose lifestyle experienced by Texans who believed fine dining was a perfect combination of great food, great service, and great atmosphere. With 25,000 square feet of elegant dining, III Forks can accommodate intimate parties as well as gatherings for large groups. III Forks serves the ultimate in Texas French Cuisine with imaginative salads, only USDA Prime steaks, fresh seafood, homemade desserts, and an acclaimed wine list.
Lavendou Bistro Provençal
A visit to Lavendou is a retreat into the French countryside - a place where life is savored as much as the food. The decor is warm and welcoming. Its cozy blue and yellow color scheme, filled with hand screened Pierre Deux fabrics, is the perfect setting in which to lose yourself.
Lavendou is thoroughly French, from the inviting decor to the gracious service and authentic cuisine. But don't expect it to be pretentious. Owner Pascal Cayet is dedicated to providing service that is friendly and efficient. And you will find Lavendou's menu to be deliciously approachable. Serving the lighter fare of Southern France, Lavendou offers many items to tempt your taste buds.
MoMo's (Preston Hollow)
Bon Appetito! We are proud of our friendly atmosphere and as your host, it is our responsibility to make you as happy as possible. Like a friendly neighborhood trattoria you might find in Naples or Venice, MoMo's serves fare passed down through generations. Our point of reference will always and constantly remain: Quality and authenticity, remembering above all else that our customer is always first and foremost our guest. Welcome to MoMo's!
Olivella's By SMU
Going to a game at SMU or to the Bush Library? Did you know that a little slice of Italy is just across the street from campus near the corner of McFarlin and Hillcrest? Olivella's Neo PIzza Napoletana, started by the 3rd oldest pizza family from Naples, Italy is tucked just behind Goff's at 3406 McFarlin, and is one of only a handful of pizzerias in the world that serves two very distinct original styles of pizza: Southern Italian (Neapolitan) and Northern Italian (Roman). We bake our bread daily in our wood-burning ovens and make our cheese in-house as well. Our recipes are traditional and authentic, passed down from the 3rd oldest pizza family in Naples, Italy. Find out why the Observer picked us Best Pizza in Dallas, USAToday picked us Best Pizza in Texas, and Rachael Ray said, "Most incredible pizza you'll ever eat!"
Olivella's Lakewood
We are conveniently located at Mockingbird and Abrams. So when you are heading to or from the lake, stop by our beautiful, cool-misted patio for a pitcher of our old family Sangria recipe. We have eye-popping specials on our Sangria, daily.
Olivella's is also one of only a handful of pizzerias in the world that serves two very distinct original styles of pizza: Southern Italian (Neapolitan) and Northern Italian (Roman).
We bake our bread daily in our wood-burning ovens and make our cheese in-house as well. Our recipes are traditional and authentic, passed down from the 3rd oldest pizza family in Naples, Italy. Find out why the Observer picked us Best Pizza in Dallas, USATODAY picked us Best Pizza in Texas, and Rachael Ray said, "Most incredible pizza you'll ever eat!".
Our Restaurant & Lounge can be best described as a "Gastro Pub," a charming facility that features innovative food that is familiar to your palette and a warm, welcoming ambiance. Although we are not creating our own brews, we do feature simple, fresh ingredients, of which some are sourced from Texas farmers; the menu highlights dishes that satisfy and entice. Enjoy a variety of shared plates, entrees and desserts, from a style of cuisine that resembles "comfort" food.
Akron/Canton, OH
Arizona Wineries, AZ
Mass Ave, IN
Phoenix Metro, AZ
Prescott, AZ
Sandhills, NC
Sanibel & Captiva Island, FL
Contact Us Publishers Refer a Friend Updates
Stay up-to-date with the AmericasCuisine Newsletter
© AmericasCuisine 2000-2021. All Rights Reserved. Terms of Agreement. Privacy Policy.


WebCL 1.0 supports OpenCL 1.1 Embedded Profile functionality and can also be layered over any conformant OpenCL 1.1 or OpenCL 1.2 implementation. The final WebCL 1.0 specification and links to prototype open source implementations, reference materials, conformance tests and demos are available for immediate download at: https://www.khronos.org/webcl.
"By making parallel computing accessible to millions of Web developers, WebCL enables innovative new online services whose high computational requirements would have previously made them unfeasible," said Tomi Aarnio, Editor of the WebCL specification and a principal researcher at Nokia Research Center.
•	An open source OpenCL to WebCL Kernel Translator to enable rapid porting of native OpenCL applications to WebCL.
The WebCL 1.0 specification is the result of significant and thoughtful feedback from the Web community based on the public working draft and the Khronos WebCL Working Group, including; Adobe, AMD, Aptina, ARM, Google, Imagination Technologies, Mozilla, Intel, Nokia, NVIDIA, Opera Software, Samsung, and Qualcomm.
"WebCL is an important step in the evolution of the Web as a platform. Nokia is excited to support its commercial adoption by developers and platform vendors, helping to make robust and secure WebCL implementations widely available," said Jari Alvinen, director of Web & Internet Technologies in Nokia's CTO organization.
Attendees at the San Francisco Game Developer Conference are invited to attend the Khronos presentation "WebCL: A Developers Overview" taking place at 3:00pm on Thursday 20th in the Khronos private meeting room (#262 on the West Mezzanine Level). Space is limited and is available on a first-come first served basis. Full details of this and other Khronos developer sessions at: http://bit.ly/gdc2014.
The WebCL working group at Khronos expects to update the WebCL Adopter's Program to provide extensive conformance tests for WebCL implementations within six months, enabling implementers of the specification to gain access to Conformance Tests to ensure that conformant WebCL implementations provide a reliable, cross-platform browser experience.


Today, the Government has announced it is pulling the plug on support for the development of small scale solar PV projects (both feed-in and export tariffs).
4. Solar PV makes financial sense without the need for subsidies and therefore can be developed on many commercial properties post March-2019.
If you need further information on roof-top solar installation, please do not hesitate to contact Anthony Maguire: am@longevity.co.uk.


text:
https://apnews.com/article/556d2c6870c249a68b0a7e484d18367c
Scientists in Italy fertilize 7 northern white rhino eggs
By ANDREA FOAAugust 26, 2019 GMT
Researcher Paola Turini works at the Avantea laboratory during the inseminating of eggs from the last two remaining female of northern white rhinos with frozen sperm from two rhino bulls of the same species, in Cremona, Italy, Sunday, Aug. 25, 2019. The northern white rhino is on the verge of extinction but Sunday's operation raises hopes that they'll survive. (AP Photo/Antonio Calanni)
CREMONA, Italy (AP) — Silvia Colleoni's hand holding a syringe was trembling as she injected liquid into a micro pipette to facilitate the aspiration of sperm that had been removed and later frozen from one of the last then-living male northern white rhinos on Earth.
Her nervousness in the Avantea laboratory in northern Italy on Sunday was understandable. Whether the artificial fertilization of eggs taken from the last two living females succeeds could determine whether the species has a future, or is doomed to end.
"It does create a little emotion," Colleoni said, reflecting in a phone interview the day after the fertilization procedures that could result in as many as seven embryos.
"After it was over, I was calm, but it's a manual task, any error, any slipping, if it falls, will result in irreparable damage."
The Associated Press was granted exclusive access to the laboratory to film the procedure being carried out on Sunday.
Eggs that were removed last week in Kenya from the last two female northern white rhinos, Najin and Fatu, were fertilized in the lab with frozen sperm from two now-dead males. It will be about 10 days before it is known whether the eggs have become embryos, the Italian assisted-breeding company said Monday.
Wildlife experts and veterinarians are hoping that the species can reproduce via a surrogate mother rhino, since neither Najin nor Fatu can carry a pregnancy.
On Tuesday, Colleoni predicted that "there will be more tension, more emotion," when she peers through a microscope to see if the fertilized eggs start dividing, in two, then four, then more cells.
She recounted how, using joysticks, she guided the fertilization process. "It takes so much concentration, a lot of attention," Colleoni said. To facilitate success, an electronic impulse is also sent to the eggs.
"We expect some of them will develop into an embryo," Cesare Galli, a founder of Avantea and an expert in animal cloning, said after the procedures were carried out.
The ultimate goal is to create a herd of at least five animals that could be returned to their natural habit in Africa. That could take decades.
Avantea said that only seven of 10 eggs extracted last week from the females in Kenya were suitable for use in the artificial insemination process Sunday.
Galli said that the sperm used came from two northern white bulls, named Suni and Saut, who had been living in a zoo in the Czech Republic. The sperm of both now-dead males were used to enhance chances of reproductive success, especially since Suni is the half-sibling of Najin. In addition, Saut's sperm was difficult to work with, the company said.
Galli, a founder of the company, said that to improve chances for a species' continuation, it is better not to wait to "get to the last two individuals before you use this technology."
The last living male was a 45-year-year-old named Sudan, who gained fame in 2017 with his listing as "The Most Eligible Bachelor in the World" on the Tinder dating app in a fundraising effort. Sudan was euthanized after age-related complications.
Galli said that Sudan's sperm was still in Kenya, raising the possibility that in any future attempts to create more embryos, scientists might seek the transfer of Sudan's sperm for that purpose.
Decades of poaching decimated the northern white rhino's numbers.
Sudan was the last of his kind to be born in the wild, in the country he was named after.
Other rhinos — the southern white rhino and the black rhino — are also prey for poachers, who kill them for their horns to supply illegal markets in parts of Asia.
The efforts to save the northern white rhino species have been led by the Leibniz Institute for Zoo and Wildlife Research in Germany, Avantea, the Dvur Kralove Zoo in Czech Republic, the Ol Pejeta Conservancy in Kenya and the Kenya Wildlife Service.


text:
Q: MYSQL "Column count doesn't match value count at row 1" I'm getting the title error when attempting to execute the following:
       sInsertInto = "INSERT INTO 5why (date, op_id, serial, why1, why2, why3, why4, why5, root_cause, lessons) VALUES (" + _
    "'" + f_date + "', " + _
    "'eccross', " + _
    " '" + f_partnum + "', " + _
    " '" + f_first + "', " + _
    " '" + f_second + "', " + _
    " '" + f_third + "', " + _
    " '" + f_fourth + "', " + _
    " '" + f_fifth + "', " + _
    " '" + f_root + "'" + _
    " '" + f_lessons + "'" + _
    ")"

The value count should be fine here; but its not for whatever reason and I cannot get this error to resolve.

A: You seem to be missing a comma, specifically after the f_root line.  I would think this would be a syntax error due to the two strings 'f_root' 'f_lessons', but I guess not.

Your query is vulnerable to injection.  You should be using parameterized queries with prepared statements.  Depending upon the variable values, this may also be the problem.

redpajama_set_name: RedPajamaStackExchange


text:
Pope sets up way to fire bishops for botching child abuse cases
(NOTE: We will believe it when we see his policy in action- not one second before…)
DW.com | Darko Janjevic (AP, AFP, Reuters)
The pope urged bishops to pay special care to protecting the "weakest among their flock" in a decree published on Saturday.
In the letter, Pope Francis announced new procedures to fire high-ranking priests "for serious reasons."
"I intend to specify that among these so-called 'serious reasons' is the negligence of bishops in the exercise of their functions, especially in cases of sexual abuse of minors or vulnerable adults," Francis wrote in a letter titled "motu proprio" ("on his own impulse" in Latin).
Under the new regulation, the Vatican would start investigating a bishop if there is "serious evidence" that the bishop was negligent in handling abuse. The Church would also inform the cleric and allow him to defend himself. Once the probe is complete, the Vatican can remove the bishop or ask him to resign within 15 days.
Any decision to fire a bishop must be approved by the pope, who would be assisted by a team of legal advisors.
Moving abusers around
Child abuse scandals have been hitting the Catholic Church for decades, with many bishops coming under fire for allegedly protecting guilty priests. Representatives of abuse victims have accused the Church of preferring to move the priests from one parish to another instead of punishing them and reporting the crimes.
After taking over the Holy See, Pope Francis vowed zero tolerance on abuse and a crackdown on cover-ups. Last year, he proposed a special tribunal to hear negligence cases. However, the tribunal proposal faced a host of legal and bureaucratic obstacles, prompting Francis to instead streamline the procedure and expand on pre-existing regulations with the Saturday decree.
Victims criticize new rules
Commenting on the decree, victims' groups said they were "extraordinarily skeptical" that the procedure would lead to a wave of bishops losing their jobs.
"Instead of just sacking bad bishops, or turning over abuse records to law enforcement, the Vatican is setting up yet another untested, internal church 'process' to purportedly deal with bishops who ignore or conceal child sex crimes," said David Clohessy, director of the Survivors Network of those Abused by Priests.
"A 'process' is helpful only if it's used often enough to deter wrongdoing. We doubt this one will be," he added.
Global News, SOL Reform permalink
← New York State Assembly plans new legislation to help child-sex abuse victims
To understand Pa. battle over clergy sex-abuse victims law, look to Delaware →


Yesterday was the official World Card Making Day, and I had a Christmas Card workshop where 6 ladies came along and made 10 cards each, being 5 of 2 designs. There were some variations using different stamps and colours to colour in the images. We had a ball!
Thanks for your comment, I've uploaded the cards I made for WCD, and would love to see what you did if you can upload??
((HUGS)) - talk to you soon, isn't SU the best? On the hunt now for a new CM consult.. wish me luck!


text:
Reinsurers fail to block liability
Posted: 15th April 2013
Reinsurers have failed in a High Court bid to avoid potential liability for a $28 million claim in respect of a crude oil storage tank in Kuwait that was damaged after settling on unsure foundations. The court rejected the reinsurers' plea that insurers had admitted liability and negotiated a settlement of the claim without obtaining their prior approval, as required by the reinsurance contract.
The contract was subject to a claims control clause (CCC) that required the insurers to notify the reinsurers promptly of any potential loss, to keep them fully informed of the progress of any claim and not to reach any settlement or compromise, or make any admission of liability, without the reinsurers' prior approval.
The reinsurers argued that they had, in breach of the CCC, been excluded from the insurers' negotiations with the ultimate insured, that liability had been admitted 'on numerous occasions' during such negotiations and that the claim had been settled or compromised without the reinsurers' prior approval.
Rejecting those arguments, the court noted that the insurers' negotiations with the insured had been conducted on a 'no prejudice' basis as to liability. On the evidence, there had been no admission of liability, nor had there been a binding settlement or compromise. There had also been no concluded agreement in respect of the quantum of the claim.
The ruling means that, if settlement terms are not agreed, the dispute will go forward to a full hearing, at which a judge will decide the extent, if any, of the reinsurers' liability under the contract.
Apprentice winner loses unfair dismissal claim
'Greek yoghurt' must be made in Greece
Firemen entitled to 2.5% rise
Guidance on human rights in planning cases
No sale !
Baggage handler compensated for broken back
Party host not liable for catastrophic injuries
Court writes statutory will for dementia victim
Consumer Insurance Act
Equality Act lacuna