text:
[RD] The threat to American Democracy
Thread starter Askthepizzaguy
Askthepizzaguy
Know the Dark Side
Splitting off from the midterm election thread, because this will derail it:
Citations for this stupidity are here
Democrats' risky midterm strategy to elevate election deniers appears to pay off
A risky Democratic strategy to spend millions of dollars on elevating some far-right Republican candidates appeared to pay off on Wednesday, as Democratic nominees defeated them in several races across the country.
Democrats Are Vindicated After Boosting Far-Right GOP Nominees
The controversial strategy of spending millions during the primaries to boost far-right Republicans and election deniers paid off for Democrats with victories Tuesday in a half-dozen competitive races.
https://nymag.com/intelligencer/2022/11/midterm-results-for-election-deniers-supported-by-democrats.html
I can say this, although the outcome of the midterms looks mostly okay, the Democratic party was doing tap dancing on top of dangerously thin ice deliberately supporting the fascist crazies Trump endorsed in their primaries who support throwing out election results entirely on zero evidence, trying to get them through a primary in a year where Democrats are not doing well.
That is the kind of insanely irresponsible stuff that causes the country to actually stop being the Weimar Republic and turn into fascist Germany. You do not support the far right authoritarians who want to destroy democracy over people who are simply incapable of coming up with a plan to govern.
Always support terrible governors over actual fascists. The Democratic party almost played itself into never being able to have power again. That's Russian roulette and the Russian connection isn't metaphorical either.
Every time the Democrats think they can win by throwing support to ever more crazy people in Republican primaries, you get people like Boebert and Greene and Trump instead of someone who is simply awful at governing and bad for the country. Those are the folks who will destroy elections and human rights, not just the economy.
As a student of history I am reminded of how all the parties did not unite against the NSDAP, from the far left to the right wing. They didn't see the danger until it was too late to remove that party from power, and all the other parties were outlawed.
Trumpists are moving to undermine every election and throw out as many ballots as possible especially mail-in ballots from disabled people and people in cities with no transportation, because that demo skews against Republicans. They've gerrymandered the bleep out of the whole country as much as they can, to gain an advantage in representation where they have none in votes. They want to make it harder to vote, and close as many polling stations as possible, and station armed psychopaths outside polling places to intimidate people into not voting, and they tried to overturn the last election using a direct assault on the Capitol.
There is no greater threat to the United States than these fascist thugs who want to make it so your vote literally doesn't matter, and will turn to violence unless they get their way.
Not China, not Russia. None of those people can destroy the USA like a fascist coup here in the USA. It will rip the country apart and I don't mean people peacefully seceding. I mean national guard and police shooting civilians en masse for protesting the regime, until the USA is Russia exactly.
Then the USA and China and Russia will all be in the hands of autocrats and not the people, and there's no way to undo that situation once you get into it. That's the end of the game, and the future of our children is nothing but darkness beyond that point.
There will not be any popular uprising after that, and no way to remove such a regime through a rebellion. That's just the end of your human rights and the entire world becomes a pretty hostile place to exist especially if you live in a democracy that the autocratic regimes want to undermine.
That's the cold war that we're losing, big time. It's the end of human rights, governments respecting human life, and the end of the power of the vote.
That all ends pretty soon. And it ends because people decided hey, we could probably win an election if we secretly fund and support the authoritarian fascist crazies over the incompetents.
That's the absolute dumbest gamble anyone has ever made, and because it worked out this time, the Democratic party will be stupid enough to keep doing it.
And that will blow up in their faces in 2 years, and I weep for the world and my children and yours when they get too cute and pull such a stunt.
They aren't keeping the Senate in 2024 and they're not keeping the White House either, and attacks on our voters will continue, and the Supreme Court will sign off on all of it.
You have nothing left as a line of defense between you and the end of freedom. It's all gone now.
And the Democrats, your only chance of stopping it, are being so stupid as to gamble with that future happening, by supporting extremists over simply stupid. People who believe in absolutely nothing, and think ending the vote, ending your rights, securing absolute authoritarian control, using guns to accomplish this, is all acceptable. Throwing away the Constitution to do so, no problem. That's what the extreme right wing nationalist has been dreaming of for their entire life.
As long as they get power, there's no amount of laws they won't break, no amount of human rights they will not trample. No amount of unethical behavior and destructive behavior they won't engage in, no amount of criminality they won't overlook or pardon, and no amount of partisan control of the courts they will find unacceptable.
One year ago on Quora I posted about how the Republican party under Trump would begin to switch their support for Ukraine within the year, precisely because they do not think, they follow the leader, who praised Putin and said it was a bold move to invade a peaceful neighboring Democracy once again, after having done so repeatedly since the end of the USSR.
Before the 2020 election I predicted that Trump would call for violence specifically aimed at the Capitol.
I said that there would be a move to undo the results through violence and egging on his most insane supporters, meaning NOT people who simply dislike or loathe Democrats, meaning NOT people who are lifelong Republicans, meaning NOT red state people with families who have sane to moderately sane and semi competent government.
Not those people. I mean the people who brand Nazi tattoos on themselves and Don't tread on me and talk about QANON and Flat Earth conspiracies and talk about (insert religious minority group) they claim is evil and controlling the world or all a bunch of terrorists, and lumping non-believers and all liberals in with them as some kind of Axis of evil.
The people who playtime pretend to be a soldier on the weekends with their racist drinking buddies and own 25 automatic weapons. Those people. There are a lot of them, and they absolutely worship Trump and tried to intimidate poll workers and voters this election.
Once Trump's party is back in power you will not be able to rely on the government to prosecute those nuts, nor the police to put a stop to the violence, especially since the police are the group that these people try to join in order to wield authoritarian power in a democracy in the first place, and can't get reliably screened out and fired due to police unions.
It may only be 5 to 10 percent of them, but those are responsible for practically all the racist and authoritarian violence committed by the police, and what happens is good people QUIT such a corrupt force and they keep protecting and hiring crazies like that, with no way to remove them, and no way for the voters to override such policy.
Those people also want their ideological allies to become judges, and Supreme Court justices. Your human rights are things they don't want to ever have to deal with, so putting extremist religious nutters and authoritarian fascists on as justices and judges are how it all ends for us.
From the police to the courts to the polling booth, your right and ability to stop them are being slowly squeezed from you, and it is happening quickly enough that you have noticed this trend throughout the past decade or two. It's happening within your lifetime and it all comes to a head in 2024.
I would love to be wrong here, but the problem with the majority is that most folks do not pay attention. There's family and work and dating and sports teams and movies and video games and much much more interesting things than dry politics. The majority notices and grumbles when suddenly decades of precedent are thrown out and now women have the same rights as a barnyard animal to say no to being forcibly bred and forced by the state to bear offspring against their will.
But even that sudden and depraved loss of human rights is just the beginning, as the deliberate targeting of trans people like my sister continues.
On the chopping block are her rights and her ability to even legally identify or be out in public or use a public restroom or exist in a public school without being harassed and bullied by government policy let alone psychopath kids raised by bigots.
On the chopping block is the ability for disabled people to vote from home. Silencing them so you can cut off their medicare, medicaid, social security, and welfare, and they cannot even show up and vote to stop you.
On the chopping block are the legal precedents that allowed gay people to marry and hold jobs and be protected from discrimination due to government policy.
On the chopping block are decades of precedent that allowed poor people who are already oppressed minorities living in poverty and targeted politically to actually go to college and try to escape the cycle of poverty.
On the chopping block is the ability for an active duty soldier to even cast a ballot that counts, because you can always send people to fight in a war, the poor will be the first to go, and if it's the demographic of poor and female or poor and non-white those votes skew sharply toward not the Republican side. Just deny them their overseas ballots, their mail in ballots. Silence their voices too.
Make it so that the only people who can vote at all are elderly wealthy white folks in the suburbs who can comfortably drive their car to their local church where they will vote, and the white nationalist gun nuts don't actually bother or intimidate those people, and the polling place is close by, and there are no long lines.
Then close hundreds of polling locations, shorten polling hours, cut funding to poll workers, and assign police sparingly so there's no protection for the voter. Make them stand in line.
Criminalize the act of bringing them water for standing in line, make it legal for armed thugs to intimidate them.
Make it so that you can "challenge" the result of an election with absolutely no evidence, no proof, with arguments so poor even Trump appointed judges threw them out without these cases even going to trial. But next time, have election officials who are willing to lie and suggest the election they just oversaw and conducted while being the party friendly to Trump was horribly compromised and therefore a new slate of electors must be hand picked by the officials loyal to Trump.
That's your future.
That's what you're actually up against, is guns pointed at you, elected officials making sure elections stop happening, your rights vanishing, and these crazy fascists coming to power and turning the power of the state on you, specifically its power to gun you down in the street via soldier or police officer, or put you in prison, or execute you.
It will make sense at that point while police have been armed with more and more heavily armed vehicles, riot gear, and so forth. And because the police are on a team and want to keep the peace and most aren't actually political, once they're standing there with riot shields faced off against a mob of angry voters, it won't matter what their political views are.
As soon as those two groups engage in violence every police officer will stand side by side with the most fascist and violent and bloodthirsty among them, for the same reason why civil wars are always bloody.
Once someone attacks your brother, sister, wife, husband, family, it's like gang violence. The hatred and cycle of violence can never stop after that. And it is a fight no one wins.
And it is a fight that will happen as soon as these absolute nutballs throw out the next election and just openly talk about how there was fraud, and never prove it. And just install loyal people at every level and purge the party of the disloyal, as in the Night of Long Knives, redux.
True believers in the GOP and the right wing cause and even those loyal to Trump himself will, as always, find themselves cast aside the moment they are no longer useful (there's a term here I need to avoid using.)
Just like his Vice President and most of his cabinet and much of his own white house staff and Mitch McConnell and anyone, anywhere, who was ever actually trying to give Donald Trump a chance because he was a "member of their party", only to find out he has zero loyalty to anyone but himself.
Just like his supporters who marched on the capitol, killed, and died, were arrested, thrown in jail, and sentenced to years in prison, Trump never cared about any of those people.
Hundreds of people who believed in Trump are in prison because they believed in him over American law, morality, and democracy itself.
They, the true believers, believed they were right to follow this man. All were betrayed.
There is nothing that man is not capable of. If he treats his own supporters like disposable meat sacks, you can imagine what his regime will do to my trans sister, any disabled person, any immigrant or vaguely foreign looking person, any non-believer, any believer of the WRONG KIND, any political opponent, any member of the free press, any government official loyal to the country or the constitution over him, any judge who dares rule against him.
He and his supporters openly encourage and want violence to happen, planned for it to happen, made T-shirts saying which date the violence would happen, planned it out days and weeks ahead of time, and folks like Bannon and Roger Stone, all privy to what kind of sick twisted individual Trump is, talking about how possession is 9/10ths of the law, and how he was going to say he won at any point his numbers looked okay, and ask the counting of ballots be stopped, and then go after anyone who didn't follow his commands exactly, especially in Georgia where he demanded tens of thousands of votes to be "found".
Trump who asked for the violence in the Capitol to happen sat back and watched it happen on TV for hours, hoping his supporters would succeed.
If you think having high gas prices due to the Trump negotiated deal with the Saudis to limit oil production, and the Russia-Ukraine war, and the otherwise good economy causing high demand but low supplies due to global supply chain issues is a bad situation, none of that goes away with Trump in power.
Trump and his ally Putin and the Saudis all caused all of those things. None of those things are things Biden can wish away with magic.
If we are silly enough to endorse Trump and vote him or his allies into power after all they have said, and done, and destroyed, and how many laws they've broken, and how many elections they've tried to undermine, then we will lose democracy forever.
This will absolutely happen and it's not me being a crackpot. It's me being able to see how this stuff has happened over and over again in history, anywhere a democracy has fallen? Other than foreign invasion, this is how it has happened every single time.
Russia and China want nothing more than to pick who is in charge of the USA. Trump wants nothing more than to have absolute power. That is why all his crimes are aimed at achieving that one singular goal.
Because you have seen the violence, seen them on TV openly talk about how Trump will lie about the election before the votes even came in in 2020, seen him harass election workers and judges and Republicans who ran elections that didn't give him what he wanted, because you've seen the fascist militia groups loyal to Trump literally attack the Capitol, because you have seen human rights get undermined by the new radical authoritarian Supreme Court, because you have seen Trump cuddle up with Putin and shake down Ukraine and threaten NATO and cozy up with Kim Jong Un and call for hate and violence against the media, minorities both racial and religious, and ask for elections to be thrown away, and all of that has happened right before your eyes, it shouldn't be a stretch for me to have predicted the Capitol attack on January 6th based on knowledge of history.
It shouldn't be a stretch for me to have predicted the Republican party would turn on Ukraine the moment it was politically convenient.
It shouldn't be a stretch for me to predict further and further voting, human rights, and Constitutional protections will be undermined, and the next election will have an even greater attack on it than the first.
This is not like QANON where there's never any evidence and the predictions are always wrong.
I haven't failed a single prediction since before Trump came to power, on any of these things.
You need to consider my words, and make absolutely sure I am wrong in 2024, using the peaceful, legal, sane method available to you.
You have to vote, and it has to be for anyone who can defeat the extremist wing of the Republican party.
If you fail, the result will be the same as every single other failed democracy that fell to autocrats. The same as the Weimar Republic.
This is not happy news, I don't enjoy writing stuff like this. But if this happens and I said nothing, then I failed to do anything to protect my kids from the events to come.
I need you to stop this dark future, and make me look like a moron.
Because so far, I'm batting 1000. If you want, I can post all my predictions that have come true so far, months or years before they happened.
Take me seriously on this stuff, because I am citing real world events you can prove occurred because there's video of it and Trump allies admitting to it and former Trump allies openly testifying to it.
I am not wrong about this. Which is the worst aspect about it. Only the American voter can make me go from being right about this to being wrong.
I plead with you, if you can vote in the 2024 elections, make me the single wrongest person who ever posted on this site.
I will thank you forever.
I have no idea how much this kind of open acknowledgement of the dire circumstances of our democracy will pass the sniff test of the Mod team here, and if I have crossed some rule, feel free to correct me on it.
However, I want to make it clear, I am pointing out real world events that have happened, and I am pointing to testimony from the perpetrators of this in their own words, you can find with a simple google search. Look for what Bannon said about how Trump would declare he won, see Roger Stone. I heard the Jan 6th Committee testimony that was basically all given by Trump supporting Republicans who were employed by Trump or worked most closely with him.
Those are my citations. This can only ever sound unfamiliar if you do not watch the reputable news and see video of these events.
Nothing I have talked about in this post besides my prediction for the future is something I cannot prove actually happened so far. Ask me to prove it, one by one. I will grab video and put it in front of your face.
Also note, I have called for zero action except legal, peaceful voting. We do not prevent violence by being violent.
We just need to vote intelligently and this all goes away. But we have to vote more intelligently than we have been. And we cannot accept a fascist takeover of our elections, ever.
That's the whole ball game. Everything you like about the USA goes away if you don't draw the line here at our elections being attacked by the biggest liar in the past 80 years.
You have to register, you have to vote, you have to vote en masse. Make sure even after they throw out tons of your ballots the result isn't even close.
Make them have to set boxes and boxes of your votes on fire just to erase the paper trail. Make it REALLY easy to prove they messed with the election when they do.
If you let it be ambiguous, everyone will just go back to work and we will be under a fascist regime from then onward, and the loss of rights and the end of democracy cannot be stopped past that event horizon.
It's a black hole, the only future ever being the destruction of our rights.
Make sure this doesn't happen to my sister, to every gay person, to every religious and racial minority, to everyone who ever dared not vote Republican, to all the Republicans with spines and morals and principles and values who believe in a thing called the truth who ever stood up and said Trump lied.
Do it for all of us. Stop this madness forever by making sure you do not repeat the mistakes of history.
Make sure you stop supporting the election deniers, call your congress critter and make them stop giving those election deniers help. Make sure you vote out every Republican who denies elections, if they are not vocally opposed and are neutral on the matter, they also must be voted out.
That is the solution to the problem. I got the facts, I got the diagnosis, I got the cure.
I just need you to take it seriously enough to vote.
No election-destroyers aligned with the Jan 6th push to end American democracy should ever be in charge of our democracy.
That includes very stupid Democratic officials who think they're so clever that they can cling to power if they support Trump Flat Earthers in Republican primaries.
That's something sane Democrats absolutely have to stop doing.
And sane Republicans for all their bad takes on governing policy are not the enemy and you have to reach out and befriend them and try to convince them that Trump is attacking and will ALWAYS attack Republicans just like them for being insufficiently loyal. Those will be the first to go. Those are the ones that suffer the immediate wrath of Trump, and face the wrath of his more cult-like supporters who view violence and terrorism as a means to an end.
There can be a day where there can be a sane person who votes for a Romney or a McCain again. Those days are done until the Republican party is non-violently purged of this cancer through the power of the vote, in a concerted effort by Republicans Democrats independents to get them out of power.
It can only be done as a coalition of people who only have one thing in common:
We are all people Trump considers his enemy. Someone to either be lied to, or lied about.
Anyone who tells you lies considers you to be an enemy. It is never the act of a loyal friend to lie to you.
No one has lied to all of us more than Donald Trump, and no one has attacked American Democracy more than Donald Trump.
Stand firm, together, and purge this menace with your vote in 2024.
I apologize if this sounds out of character. I like to talk about non-serious things. But there's no topic more serious or more dangerous, and it needs to be said. I will say it.
Congrats on getting to the end of the page. I am putting myself out there, and I expect to be ridiculed or flamed or whatever.
I probably expect the thread to be closed.
But I am being serious and I would ask that the topic remain open, and taken seriously, rather than laughed off.
You can laugh off the QANON people and the Pizzagaters and the Flat Earthers and the Bush Did 9/11 people.
Do not mistake me for one of those. I am a rational human being and the pattern I described is the top news story of every week for the past seven years. I didn't invent it in my imagination, not even a little bit.
Dolbster: "Pizza WoaT"
Reactions: Sommerswerd, Kaitzilla, GenMarshall and 6 others
RobAnybody
fwiw, I was appalled (there's probably a better word for it, but that works) by the news that some Democratic groups supported the MAGA crowd in their primaries. Granted, it kinda worked, but that does not make it OK. But, it was a relatively small # of them. I dug into a bit in an earlier, different thread about the Jan-6th Committee, so this may be out of date, but I'll just quote what I found at the time:
RobAnybody said:
Here's the list of Democrats who funded Republican candidates. No Senators. No one associated with the January 6th Committee.
https://www.washingtonpost.com/politics/interactive/2022/democrat-ad-spending-republican-trump/
"...the Democratic Congressional Campaign Committee has become the latest party entity to aid a Trump-endorsed Republican in a contested primary"
"Democratic gubernatorial candidate and Pennsylvania Attorney General Josh Shapiro..."
"In Maryland, the Democratic Governors Association..."
"In the Illinois Republican primary for governor, incumbent Democratic Gov. J.B. Pritzker..."
"In Colorado's Republican Senate primary, a political action committee called Democratic Colorado..."
So while it's a terrible, underhanded, & likely to backfire tactic & the worst/most hypocritical offenders are the DCCC, it's silly to claim it in any way shape or form discredits the January 6th Committee since they have no overlapping members.
Reactions: El_Machinae
Lexicus
Sovereign State of the Have-Nots
Tl;dr of the op?
An industrial society can afford to be free.
~Karl Polanyi
ı never go medieval on people , ı go orbital on them
~r16
Reactions: AntSou
I'll try the TLDR version, but it's gonna be slightly L, because of all the TL:
- MAGA is an existential danger to the US
- Dems "supporting" their [EDIT: meaning MAGA] candidates to try to win is a terrible idea
- MAGA succeeding is basically a precursor to fascism taking over the US
- If MAGA takes power they will basically subvert future elections
- meaning anything you want to see happen, including future fair elections, will stop happening
- also meaning, no gay rights, no minority rights, basically white supremacy
- violence against anyone who is not MAGA
So vote!
Best I can do to TLDR it. I mean, it's well thought out. It makes a solid case. The TL of it kinda undermines the overall case, though, IMO, just b/c people won't read it. Not that I don't support the sentiment. Seems more cathartic than anything.
Reactions: Sommerswerd, IglooDame and El_Machinae
schlaufuchs
Break My Heart
Holy horsehocky what a wall of text, but playing accelerationist games like this is profoundly stupid. On the first part because we've played this game before and got Trump as a reward, and on the second because the consequence for losing is literally me and people like me dying. I hate that democrats feel they can play games with my life so cavalierly. What a trash party jesus.
Incidentally I've been seeing similar discourse with the results coming out of Florida. A lot of Democrats seeing the state's imminent climate-driven collapse as just desserts for its fascist electeds, as though trans people won't directly die both from the fascists AND the climate collapse.
[21:25] <+Anonymoose> You sure are. Like a cool cat. Cooler, perhaps. I shouldn't get hasty about it, but I'm pretty comfortable in saying that you're as cool as a cool cat, with a standard deviation of .3 cool points.
Reactions: danjuno and Arwon
Re: Florida - what I've seen is the idea that while Florida went... weird, the rest of the country kinda, sorta voted to reject everything the Florida vote represents. So while it's a strange ecosystem unto itself, the rest of the country, kinda, not entirely, but kinda, rejected Florida values. Also, I feel like I need to re-iterate - the Dems who played stupid games with "supporting MAGA candidates ftw!" was really minor. Once is too many, I'll agree, but it was blown out of proportion. [EDIT: meaning, see my above post where I listed out the very, very few instances where that happened - again, I agree that once is too much]
El_Machinae
Colour vision since 2018
Pale Blue Dot youtube=wupToqz1e2g
The emphasis on voting is partially to keep it [RD] I think, but there's also the expressed concern in there that violence will spiral pretty severely and (collateral damage aside) really might not work out as you're hoping. I think there are a few other things people can do that are legal (the OP talks about wooing anyone who won't vote for your team to more importantly vote against MAGA).
(my comment) We kinda know this is true, given that protestors were being manipulated into violence by outside actors whose sole goal was just 'making things worse'. I do think that arranging to vote more than once is essential, where voting where there are fewer voters is more important than when it's diluted. As well, winning a vote from MAGA into not-MAGA will be more important than 'winning' the vote overall. The MAGA won't stop and you can't beat them by winning, you can only beat them by crushing them. Being anti-MAGA is more vital than so many other victories, because any debate just can't happen when there's madman juggling grenades in the room. I've no idea on any real recommendations; everyone is holding their noses at the polling station regardless. As I said, if I lived there, I'd literally send t-shirts to people in gerrymandered regions to wear, with useful political messaging on it.
We need to find important things interesting. Actions prove beliefs.
El_Machinae said:
As I said, if I lived there, I'd literally send t-shirts to people in gerrymandered regions to wear, with useful political messaging on it.
I mean if you're going to engage in symbolic gestures which are ultimately politically meaningless, then you'd be better served finding some trans refugee or transition gofundme's to donate to. At least that way you'd be materially benefiting some of the people in the fascists' crosshairs.
Arwon
Askthepizzaguy said:
Not sure I agree
He wants a shoe horn, the kind with teeth
People should get beat up for statin' their beliefs - TMBG
Reactions: IglooDame
Dunedin, New Zealand
Results are more important imho whatever works.
Since discovering Civ3 I have discovered food, sleep, and work to be largely optional.
I find the Democrats' messaging about the "sanctity of democracy" really falls flat when they then turn around and make mockery of the system by supporting bad (and anti-democratic!) candidates from the other party just so they have a better chance of winning
Reactions: GenMarshall
Thorgalaeg
How a guy who propitiated and possibly orchestated a coup attempt, causing the death of a few and risking a civil war with potentially millions death is not only free, but keeping all his political rights and planning to run for next elections is beyond me. Doesn't USA has the electric chair? I think it is time to dust it off and use it properly for first time.
"If you wait by the river long enough, the bodies of your enemies will float by."
― Thought it was Sun Tzu but it wasn't
Reactions: GoodEnoughForMe, Lexicus and João III
Broken_Erika
Glasgnopolis, Grottland
Thorgalaeg said:
I am not delusional! Now if you'll excuse me, i'm gonna go dance with the purple wombat who's playing show-tunes in my coffee cup!
Kaitzilla
Lord Croissant
America!
Zardnaar said:
Ya, the strategy worked great this time!
Unless Kari Lake squeaks in as governor of Arizona and becomes a Hitler in 20 years, this was a very successful playing-with-fire outcome.
Kaitzilla vs. The World
The Largest Civ 4 Deity playthrough in history!
Wastl
Is it a bad idea to support the more extreme candidate of your opponent in the hope that it gives you a better chance of winning the actual election? Yes, very much so.
But what all of the OP didn't take into consideration, is that these candidates exist because the GOP as a whole is slipping further and further. The entire party as it behaves in public is a threat to the Republic. Having them gain power will just accelerate what they have done over the last few decades: errode state institutions, common sense, and the believe in free and fair elections. Long gone are the days were the majority of Republicans could be consdered "simply incapable of coming up with a plan to govern". The overhwelming majority of them keeps voting not just against public interest but also against democracy itself. They care about their own power, any decency is gone. When Liz Cheney almost looks like the voice of reason, there isn't anything more to be gained from them. The GOP leadership erroded trust in democracy in their attempt to do everything to increase their power. The extremists didn't come along because they suddenly popped into existance, they came along because people like Newt Ginrich or Mitch McConnell - with plenty of help from places like Fox News - pushed the party in that direction until what had been unacceptable was now considered fine. In doing so they created a monster they now cannot control anymore. The alternative to their extreme candidates are people who are either actively trying to sabotage democracy or simply going along with the plan becaue they value their own power more than they value the nation they are supposed to serve.
The main issue with the democrats, is that they a) still haven't realized that you can't strictly adhere to the rules anymore if your opponent has abandoned them and wants to abolish them entirely, and b) are too involved with stupid purity-contests instead of combining their strength against an opponent who undermines democracy.
Reactions: Remorseless1, Lexicus and Narz
IglooDame
Enforcing Rule 34
Igloo, New Hampshire
Dems donating money to MAGA candidates in the primaries was a risky move that appears to have paid off, we'll know if it paid off enough when the Georgia runoff is over. If the GOP takes the Senate and a larger share of a House majority, it doesn't much matter whether the newcomers are MAGA or nonTrumpist, it still sets us up for worse in 2024, whether NH sends Don Bolduc or Chuck Morse (who likely would have beaten Maggie Hassan) to the Senate.
I didn't go to the polls this week as a transgender woman, or a gun owner, or an agnostic, or a privileged older white person, or with any other issue in mind, I went and voted as a citizen of an endangered democracy.
"The great enemy of the truth is very often not the lie - deliberate, contrived and dishonest - but the myth - persistent, persuasive, and unrealistic, like the one saying Epstein killed himself." - JFK
Want to understand more about being transgender? Read the "Gender Dysphoria Bible".
Reactions: Remorseless1, El_Machinae and Yeekim
Useless, useless.
You're a dear.
IglooDame said:
This crap always makes it worse talking with those who casually support Trump over anything else Republican or maybe even Democratic. Because "Why bother? They're literally the same people." It utterly destroys faith in the party if you aren't already righteous and in-party. Or a ruthless human piece counting real dinkum thinkum.
I know that you can do all things, and no purpose of yours can be hindered. I have dealt with great things that I do not understand; things too wonderful for me, which I cannot know. I had heard of you by word of mouth, but now my eye has seen you. Therefore I disown what I have said, and repent in dust and ashes.
Narz
Haverhill, UK
Wastl said:
Yeah in the long run it may have been a good strategy.
Trump gave the party a short term boost but when he dies it will flounder without it's charismatic leader
"The high you climb is always the high you get" - Kottonmouth Kings
Now you're talking
Farm Boy said:
This appears contradictory as written. Wouldn't casual Trump supporters appreciate the Democrats boosting their favored candidates?
Birdjaguar
Joij21
Defeating the Right:Generational Shift?
Remember, Remember (the January 6th edition)
Gori the Grey
danjuno
Why the Left Doesn't Need to Be Woke
Arakhor
Did Malala fund DreamWorks' aggressive expansion in children's television in the UK and threatened the BBC with violence repeatedly?
Geatshead98
The_J


Choosing the right private security guard for your business, Homeowner's Association (HOA), or private property requires practical considerations to protect its assets. It should not be thought of the same as selecting a pizza place. There are many issues you will want to consider, such as training, insurance, uniforms and equipment, and armed or unarmed.
Essential questions that need answers include many of the following: Will the guard be stationary monitoring CCTV, or on patrol? Will the patrol guards use your vehicles or will the private security guard agency supply those as well as uniforms, weapons (when necessary) and equipment? Does the agency do the required background checks and drug testing? Can they provide trained and licensed armed security guards as needed and on short notice? Do they meet or exceed the State of Texas training requirements for armed guards?
These issues should be determined and discussed in a face-to-face meeting after a careful analysis of your security needs is completed by the agency you are considering. A reputable security firm will conduct a free security assessment of your facility. Any agency that attempts to "seal the deal" over the phone should make you cautious.
Movies like "Paul Blart: Mall Cop" may have convinced many of us that you're traveling a rocky road when you hire a private security guard. Real life isn't a movie designed to entertain. Most security guards realize they're not the police, but are professionally trained, know their limitations, and are trained to provide an appropriate response.
Many security firms weed out prospective problems through a thorough background check; however, those that don't leave themselves and those who employ their guards open to civil liability suits. Another decisive juncture in identifying possible future problems is the interview. A pre-employment interview can prune out overzealous potential problems. Security firms want their business to flourish just as you want your business to succeed. But, it is up to the consumer to do their due diligence when deciding on a security firm. They should decline those firms that attempt to pressure them into a rushed decision.
Get the facts, choose a local firm and keep a responsible executive within the organization on speed dial so they can be given the opportunity to correct personnel problems quickly.
Looking for a private security guard or team is not that different from hiring any service provider like a landscaper, caterer, or pool maintenance company. In each case, they might contribute to how the public looks at your business, and you should get reliable references.
Ask other small business owners or HOA directors. Look online for local agencies, start with four and five-star agencies, but don't discount the three-star company without looking further into why they received a three-star rating. If there are only one or two reviews for an agency, it might be the reason for a lower score, especially when there are older reviews; the problem may have been corrected. Likewise, a four or five-star rating may be misleading as well.
In the Houston, TX area you can save yourself a lot of time by considering Western Eagle Security first. They have an excellent reputation for providing private security guards for Houston businesses and offer a free security analysis.
Contact Western Eagle Security by calling (281) 496-6800 or visit their website and use the convenient contact form to set up an appointment for your FREE appraisal today.
Or, send an email to mail@westerneaglesecurity.com with your questions.


Of all of the pets that came and went, though, the two I remember most were the ones Mum and Dad sprung on us when we weren't expecting it. Being a kid, I figured they had stopped somewhere on a whim and picked up the new animal on the way home.
"We always suggest that a family fill in the blank to this question: 'It's most important to me that my dog/cat ...' - not what he looks like, but how he behaves, his interactions with you, how he loves you, does he sit on your lap, or that he doesn't pull on his leash," said Emily Weiss, the vice president for shelter research and development for the American Society for the Prevention of Cruelty to Animals. "It's always love at first sight, but knowing your expectations can help assure that that love at first sight stays a lasting love."
Weiss said research shows that owners and their pets bond best when the owner has a clear idea of what he wants from his pet and keeps that in mind when choosing an animal. The people at the adopting agency, whether it's a shelter or a rescue organisation, know a lot about the animals in their care, Weiss said.
"The first question is why are you looking for a pet and what's important to you about the role they play in your life and what things do you want to do with them," LaFontaine said.
For us, those expectations were more of a hope: We wanted our new cat to bond with our children and be a family pet. Our previous cat was one I'd had for years before I got married or had kids, and she was my cat. When we decided we were ready to adopt again, it was important to us that the animal was not only playful but patient and loving and comfortable with children as well.
Pets are not good impulse purchases, said Chris Miller, a veterinarian with AtlasVet in Washington. Miller once had a client who saw an English bulldog on TV late at night and, on a whim, ordered one from Russia online. When the dog arrived, the man knew nothing about the breed - or dogs - and didn't know where to start.
"The key is to put some thought into it," he said. "Look at your environment and financial status to make sure you have a budget in mind. It doesn't mean you can't have a pet, but take into account what each species or breed brings with it as far as dietary and medical needs and hereditary conditions."
One of my colleagues has had a menagerie of pets over the past few years, including a hamster, guinea pigs and a betta fish. At least half of them were hand-me-downs from neighbours whose kids were tired of them.
It's important to research the type of animal you're considering and to make sure you're getting information from a reputable source, said Gregory Costanzo, a veterinarian with Stahl Exotic Animal Veterinary Service in Fairfax, Va.
"A lot of these [exotic] animals require very different kinds of care," Costanzo said. "They are a separate entity from dogs and cats when it comes to feeding them, the diseases that we can get from them or give them, and appropriate housing or care."
Costanzo suggests making an appointment to talk to a veterinarian before you adopt - possibly one who specialises in the kind of animal you're considering. The vet can advise you on everything from medical care your pet will need to the appropriate diet to what you need to do at home to keep it healthy and happy.
Many rescue organisations offer classes on caring for specific animals, Costanzo said, and that is a great way to familiarise yourself with a breed or species before adopting.
"Watch the behavior of the dog or cat," Weiss said. "If it's choosing to approach your child and engage in a safe way, that's a great sign. Observe the interaction. Do they seem relaxed and comfortable around each other?"
Once you've done the research, created your budget and chosen the right pet, go for it, Miller said, adding that people who own pets are generally healthier and happier than non-pet owners.
"We are naturally drawn to animals, whether it's a rat or a cat or a Great Dane," Miller said. "It's something that is healthy and good for people, animals and the community."


text:
Mike Ricamato
Automaker
Automobile website
Effectenkantoor BV
IHS Automotive
Spyker Cars NV
How New Technology Trends are Shaping the Industrial Sector
Hostess Liquidation Sets Off Online Twinkie Run
Ancient Harappan Civilization a Victim of Climate Change
Saab Story: Swedish Automaker Headed Toward Bankruptcy
Venerable Swedish automaker Saab is unable to pay its employees and is likely headed into bankruptcy. Saab and Zeewolde, Netherlands-based owner Swedish Automobile NV, are in talks to raise cash, the company said. Options include selling and leasing-back the factory in Trollhaettan, Sweden. "There can however be no assurance that these discussions will be successful or that the necessary funding will be obtained," said Swedish Automobile, which was previously known as Spyker Cars NV.
Saab's chances are "slim," according to Martin Crum, an analyst at Amsterdam's Effectenkantoor BV. "The company is still not able to produce cars; that's the main concern. If you don't sell cars, you don't get cash in." The pending property sale "can provide some badly needed liquidity for the short term, but for the longer term they of course need more," Crum said. Saab came close to being a casualty of GM's brand shedding after its government-backed bankruptcy, when it stopped the production of Saturn, Hummer, and Pontiac cars. The Swedish unit was slated to shut down after a group led by Koenigsegg Automotive AB pulled out of talks. Spyker's bid came after GM had already begun to shut down Saab, ultimately paying $74 million in cash and $326 million in preferred shares.
A spokeswoman for Saab admitted that approximately 2,200 office workers, designers and engineers might not be paid as Sweden goes into a holiday. Apologizing for leaving production line staff without paychecks, she said "The last thing we want is to be forced to come with this very sad news the day before a major Swedish holiday. We would not have done this if we were in a situation where we had an alternative." She said Saab was not actively preparing for bankruptcy, but the carmaker is making an eleventh-hour bid for cash by negotiating a sale-and-lease back of its Trollhättan factory with unnamed parties. "(Bankruptcy) is not the scenario that we are working with. We are working very intensively on securing short-term financing to improve the situation of the company, of course to pay our employees and to work with suppliers to get production going again."
Neil King, an analyst at IHS Automotive, said Saab seems to have been left behind by the emerging market boom in nations such as Brazil, China and India. "They suffered as a result of the financial crisis but unlike their peers, they have not capitalized on booming demand for premium cars in the emerging markets." Saab production fell sharply from 123,000 in 2007 to 33,000 in 2010.
Swedes are mourning the waning of the Saab brand, which was established in 1937 and became one of two internationally known Swedish automakers along with Volvo. At present, Saab appears to be on its last leg as there has been no recent talk of a government bailout or rescue plan. Upon hearing the news, one employee said "It is dreadful. Completely unbelievable. I get chest pains," worker Fredrik Almqvist said. "How on earth are we supposed to pay our bills?" "I have worked at the factory and know many who worked there. You should never give up hope, but right now it looks extremely bleak," Veli-Pekka Saikkala, a representative of IF Metall, said.
Writing on the Automobile website, Donny Nordlicht says that Saab appears to have had a bit of a reality check, as its latest press statement says 'There can, however, be no assurance that these discussions will be successful or that the necessary funding will be obtained.' Saab's newfound realistic outlook is not assuaging fears, however. IF Metall is demanding that the automaker pay its members wages, saying it needs to resolve the short-term cash flow issues immediately. If Saab does not pay up, IF Metall has threatened to enter legal proceedings to procure the wages, something that would most likely end only in bankruptcy for the automaker."

redpajama_set_name: RedPajamaCommonCrawl


FONCTIONS: Mosaïque Surface, a fast-growing company, is looking for a Graphic design and Marketing assistant to join its team. The right person for the job will play a major role in the maintenance of the company's public image and in the creation of new visual content.
-Schedule print jobs at the printer.


This course is a prerequisite for Introduction to Computer Applications for students with limited or no previous computer experience. It will focus on the basics of operating a computer, learning the keyboard by touch, and introducing basic computer applications. Recommended for students with less than 20 words a minute.


Join AESP for conferences where our members enjoy top-notch learning and networking. AESP presents a National, Spring and Summer Conference each year.
AESP produces over 20 quality and timely webinars a year, which are exclusively free for members only.
AESP's Resource Library contains a wealth of information on energy efficiency topics. Members can access hundreds of recordings of past webinars, PowerPoints from conferences, back issues of AESP's magazine and more.
Networking is one of the keys to advancement in any position. AESP embraces this belief and offers numerous and inventive ways to network and help build your industry connections.
Geographic Chapters – AESP has geographical chapters located all over the U.S. and Ontario, Canada to serve members at a local level. Chapters organize regular networking events, presentations by guest speakers and much more. Chapters also provide many opportunities to volunteer and take on leadership roles.
Topic Committees – Get involved and join topic committees that are focused on the issues affecting key areas of the industry. Assist with organizing Brown Bag webinars, help shape conference content, write articles and more.
E2E Mentoring Program – Through this program that connects new members in the industry with experienced members, you can benefit by volunteering to be a mentor or a mentee.
In addition to the weekly What's New e-newsletter announcing the latest AESP news, jobs and RFPs, you will also receive our exclusive members-only Strategies e-magazine.


These Fairy Pond Vapor Dice™ are a clear translucent dice injected with a green and blue inky color to create a cloud effect. The swirls of color seep into each die like venomous poison. These Vapor Dice™ are perfect for assassins, illusionists, and for any character needing awesome RPG dice. Each Vapor Dice™ has a unique design, some of the dice may be nearly completely clear and some have a moderate or heavy concentration of swirls inside. Every Kraken Dice set includes our signature velvet dice bag to hold your precious dice.
Love these dice! I'm glad I treated myself.
Perfect for a fae character!
Well, my first roll on the d20 was a natural 20 so they must be good. :) They're just as beautiful in person as they appear online. Shipping during the holiday season was surprisingly fast, too.
Absolutely gorgeous set. The mix of colors work beautifully and it really shines in natural and artificial lighting. Everyone in my group has complimented them.
Love this set! The color is so lovely and they're well balanced!
This was my first set of vapor dice, and I was pleased with them overall. The way the colors swirl inside is exquisite, though some dice lacked enough pigment to look like much. The ones that do have bold color are elegant, and not a single one had any visible air bubbles. I'm glad I decided to branch out from my tendency to look at the fusion dice.
I always receive compliments on how cool the Vapor dice are.
I love the dice they are beautiful and the way they were shipped was excellent this is a great product and a great company.


text:
Danica G. Hays
News Center - Experts
Request a Media Expert
Experts In The News
Request as Media Expert
Request as Speaker
Professor of Counselor Education
Executive Associate Dean, College of Education
Expertise: Domestic violence intervention, Community mental health, Multicultural and social justice considerations, Mental health assessment and diagnosis
Danica G. Hays is professor of counselor education and executive associate dean of the College of Education at UNLV. She earned a doctorate in counselor education and supervision, with an emphasis in multicultural research, from Georgia State University. Her research interests include qualitative methodology, assessment and diagnosis, trauma and gender issues, and multicultural and social justice concerns in counselor preparation and community mental health.
She has published around 100 refereed journal articles and book chapters. She is co-editor of Qualitative Inquiry in Clinical and Educational Settings, Developing Multicultural Counseling Competency: A Systems Approach, and A Counselor's Guide to Career Assessment Instruments. In addition, she is associate and content editor of the American Counseling Association Encyclopedia of Counseling, co-author of Mastering the NCE and CPCE, and author of Assessment in Counseling: A Guide to Psychological Assessment Procedures.
She has extensive leadership history in the Association for Assessment and Research in Counseling and the Association for Counselor Education and Supervision. The American Counseling Association has recognized her nationally for her research and advocacy as a counselor educator.
Ph.D. Counselor Education and Supervision, Georgia State University
M.S. Professional Counseling, Georgia State University
Search For Other Experts On
child development, diversity, education (higher ed), education (preK-12), psychology & human behavior, relationships


Last week, I had the opportunity to present at a webinar titled Creating a Compelling Brand Promise. Thought I would share a couple of the highlights of this event, which was put on by my company, Fusion Marketing Partners.
A Brand = the place your company occupies in a prospect's or customer's mind when he or she thinks about you.
A Brand Promise = what you promise to deliver to your customers when they do business with you. Your job is to make your brand and brand promise the same thing.
Lockheed Martin: We never forget who we are working for.
Ernst & Young: Building a better working world.
FileMaker Software: What's Your Problem?
These companies are so large they can get away with lousy branding. But most of us don't have this luxury. We have to do a good job of creating a value proposition that gives us competitive advantage.
Now let's look at what I consider companies who have very strong and enduring branding promises.
I'm sure you can come up with your own list of good and bad brand statements. But the most important thing you can do is to make sure you have a compelling and differentiated brand. Ready to position your company for greatness? Request your 25 point analysis of your current brand strengths and gaps – plus an action plan to help your brand and company achieve competitive advantage. There are several other events coming up about B2B marketing so feel free to join us.
I had the chance to sit in on your brand promise webinar; you shared lots of good information. At times we bump into companies that struggle with differentiating themselves because they think they'll leave out some prospects. They end up branding themselves for everyone…not a good decision. Thanks. I'll be listening to the next webinar.
Glad to see B2B finally getting on the brand bandwagon, after years banging my head against the wall in Silicon Valley. To put it plaintly, good branding earns you the right to send that email, call that decision maker or be in their mailbox. It provides the "air cover" a b2b player needs for their more tactical lead gen efforts to be successful.
However, as a branding consulting with my own firm now, I must point out that a tagline does not a brand make. You are using taglines as examples of brands: a tagline is merely one of many verbal ways to express a brand. Brand is more fundamental than that and as you say it's the promise you make to customers and what value you deliver. It is expressed not only verbally (through taglines, ad copy or elevator pitches) but visually (logo, design, colors) and experientially (the most important part: do you walk your talk when doing business?).
To judge a brand by merely the tagline is like judging a person by one sock. There is a larger picture. A company may very well have a great brand and brand strategy – and just a really lousy tagline!
Maria, I agree with your points, but just to clarify – I do not think the tagline is used to convey the brand. The brand is what you described. What the tagline is used to convey is the "brand promise" not the "brand. This may seem a subtle distinction, but it is an important one. I firmly believe that customers and prospects are the true owners of the brand, while the company owns the brand promise. Hope this helps.


ShiftLeft™ Inc., an innovator in application-specific cloud security, today announced it has been recognized as a Tech Vendor to Watch in 2018 by Information Week. ShiftLeft was highlighted in the DevSecOps category of emerging IT security technologies in Dark Reading for its fully automated Security-as-a-Service (SECaaS) for detecting and mitigating security vulnerabilities in cloud apps and micro services during build-time and runtime.
ShiftLeft delivers the industry's first fully automated SECaaS for cloud software that understands the security needs of each version of each application, and creates custom security and threat detection for it. With ShiftLeft, organizations can now secure their cloud applications as part of their continuous integration pipeline, rather than merely reacting to threats discovered in production. ShiftLeft identifies vulnerabilities in source code, enabling organizations to either fix them or protect against them in production using ShiftLeft's Microagent.
With ShiftLeft, DevOps teams can track compliance requirements for regulations such as PCI-DSS, HIPAA, and the General Data Protection Regulation (GDPR) for every release; for example, identifying violations such as when a credit card verification code is stored after authorization. Teams can leverage ShiftLeft's pre-defined policies, or define custom dictionaries that suit their business requirements and development practices, to track the flow of sensitive data throughout their infrastructure.
ShiftLeft™ Inc., is an innovator in application-specific cloud security, delivering the industry's first fully automated Security-as-a-Service (SECaaS) solution that understands the unique security needs of each version of each application and creates custom security and threat detection for it. With ShiftLeft, DevOps can make threat detection part of their continuous integration / continuous deployment (CI / CD) process. ShiftLeft's approach allows teams to both protect their applications immediately and enhance the security posture of their code. The company was founded by a team with extensive backgrounds in security and cloud infrastructure who were early innovators of technologies such as sandbox, Next Generation Firewall, Next generation Electronic Payment network and Fraud Modeling, and several open source initiatives. Headquartered in Santa Clara, Calif., ShiftLeft is backed byBain Capital Ventures and Mayfield. For more information, see https://www.shiftleft.io/.


text:
A Blind Legend, the first non-video game, releases on Steam tomorrow
A Blind Legend releases on Steam tomorrow. It is the first ever action adventure game without any video.
A Blind Legend is scheduled for release tomorrow on Steam. It is the first ever action-adventure game where players play without any visuals. The game is played using only audio, as the player takes on the role of Edward Blake, a famous blind knight.
What is A Blind Legend?
A Blind Legend is the first ever action-adventure game which is played entirely using audio and without any visuals whatsoever. The player takes on the role of Edward Blake, a famous blind knight. You are guided by your daughter Louise, as you must find your way and avoid traps that lie within the Kingdom while confronting dangerous enemies.
It is a game which is fully accessible to people who are visually impaired and aims at players eager to experience an immersive sensory experience. It is a hack-and-slash game that uses binaural sound to deliver a 3D soundscape, which helps bring characters and actions vividly to life around the player.
An original and unique experience
A Blind Legend is without a doubt going to be a very original and unique game. It is going to offer players an experience unlike any other. Not only that, but it will help to raise the public awareness of those with visual impairment.
Putting on a pair of headphones, closing your eyes and playing a game that only contains audio is something that will give people the experience of what it is like to be visually impaired. It may not be a game that will appeal to everyone, but nevertheless it is going to be one heck of an experience. It is going to be interesting to see how such a game fairs in the video game market.
What are your thoughts on A Blind Legend? Will you be trying the game out? Let me know in the comments below.
Playing video games for over 23 years, love to write and love everything video game related.
Games A Blind Legend Genres Adventure	Platforms PCMaciOSAndroidWindows Phone	Tags steam release
Source store.steampowered.com
Published Apr. 6th 2016
More A Blind Legend Content
A Blind Legend Game Page
A Blind Legend Articles


Beef Vegetable Soup, with home made stock, an easy Supper Soup for two.
This could also be called 'root vegetable soup'. I know some people are leery of rutabagas, but it really is a key ingredient to this soup. It adds a sweet undertone that's essential to this winter soup. This makes 6 servings.... It freezes well.
Bring the stock to a good boil over medium high heat.
Chop the onion and celery. Add to the soup.
Peel the rutabaga (use a vegetable peeler) and cut into small bite-size pieces. Add to soup.
Peel the carrots, cut in half lengthwise, then slice into 1/8" (.3cm) half circles. Add to soup.
Cut the potatoes roughly the same size as the other vegetables, add to the soup. (I scrub, but don't peel).
To cut cabbage, cut off a large slice next to the core. You'll want about 3 cups, so you may need another slice off the other side. .
When all of the vegetables are in bring it back to a boil, reduce heat, cover and simmer 45 minutes.
While the soup cooks, cut the beef into bite-size pieces and sauté in a nonstick pan until browned.
Heat oil in large pot. Brown the beef very well on all sides over medium high heat, about 20 minutes.
Strain soup and chill at least 4 hours - this allows the fat to congeal on the surface for easy removal.
Once fat is removed, stock can be boiled to reduce and increase strength.


text:
'''
Created on 27 Apr, 2015

@author: artur.mrowca
'''
from uuid import uuid4

'''===============================================================================
    GUI Part
==============================================================================='''

import os
import traceback

from PyQt4 import QtGui, QtCore
from PyQt4.Qt import QWidget, QObject
from PyQt4.QtCore import Qt, QPoint
from PyQt4.QtGui import QHBoxLayout, QVBoxLayout, QDialog, QGridLayout, QScrollArea, \
    QHeaderView, QComboBox, QStackedWidget, QMessageBox, QAction
from api.core.component_factories import ECUFactory, BusFactory
import api
from gui.gui_builder import GBuilder, DragLabel, DragSelection, LineConnection, \
    EnvironmentView
from gui.plugins.settings.abstract_settings_plug import AbstractSettingsPlugin
from tools.ecu_logging import ECULogger
from tools.singleton import Singleton

class CreateSimulationPlugin(AbstractSettingsPlugin):
    '''
    This plugin offers the possibility to create, save and build a simulation
    via a GUI instead of using the API
    '''

    def __init__(self, *args, **kwargs):
        AbstractSettingsPlugin.__init__(self, *args, **kwargs)
        self._SETTINGS = True

    def get_combobox_name(self):
        return "Create Simulation"

    def get_widget(self, parent):
        return CreateSimulationPluginGUI(parent)

class CreateSimulationPluginGUI(QWidget):

    def __init__(self, parent):
        QWidget.__init__(self, parent)
        self.create_widgets(parent)

    def create_widgets(self, parent):

        # Main Layout
        vbox = QtGui.QVBoxLayout()
        self.setLayout(vbox)

        # Label
        vl_left = QVBoxLayout()
        self.top_label = GBuilder().label(parent, "Create a new Simulation or select a existing one from the list", None, None)
        vl_left.addWidget(self.top_label)
        hl_out = QHBoxLayout()
        vbox.addLayout(hl_out)

        # Buttons
        vl_right = QVBoxLayout()
        self.new_button = GBuilder().pushbutton(parent, "New", self._new_hit, os.getcwd() + r'/icons/new.png')
        vl_right.addWidget(self.new_button)
        self.import_button = GBuilder().pushbutton(parent, "Import", self._import_hit, os.getcwd() + r'/icons/import.png')
        vl_right.addWidget(self.import_button)
        self.save_button = GBuilder().pushbutton(parent, "Export", self._save_hit, os.getcwd() + r'/icons/save.png')
        vl_right.addWidget(self.save_button)
        self.build_button = GBuilder().pushbutton(parent, "Build Simulation", self._build_hit, os.getcwd() + r'/icons/build.png', 35, 35)
        self.build_button.setFixedHeight(40)
        vl_right.addWidget(self.build_button)

        # Table
        self.sims_table = GBuilder().table(parent, 5, 2, ["A"], False)
        self.sims_table.horizontalHeader().setResizeMode(1, QHeaderView.Fixed);
        self.sims_table.horizontalHeader().setResizeMode(0, QHeaderView.Stretch);
        self.sims_table.setColumnWidth(1, 32)
#         self.check_buts = GBuilder().add_checkbuttons(self.sims_table, 0, 1)

        self.sims_table.verticalHeader().setDefaultSectionSize(25)
        self.sims_table.verticalHeader().hide()
        self.sims_table.horizontalHeader().hide()
        self.sims_table.setFixedHeight(110)

        vl_left.addWidget(self.sims_table)

        hl_out.addLayout(vl_left)
        hl_out.addLayout(vl_right)

    def _build_hit(self):
        self.build_window = BuildWindow(self)

    def _save_hit(self):
        self.save_window = SaveWindow(self)

    def _new_hit(self):
        self.new_window = NewSimulationWindow(self)

    def _import_hit(self):
        self.import_window = ImportWindow(self)

class NewSimulationWindow(QDialog):

    def __init__(self, parent):
        QDialog.__init__(self, parent)
        self.core = NewSimulationCore(self)
        self.create_widgets(parent)

        self.environments = []
        self.env_wid = {}  # Environment Name to Environment Widget
        self.env_obj = {}  # Environment Name to Environment Objects

        self.exec()

    def create_widgets(self, parent):

        # Layout
        GBuilder().set_props(self, min_sz_x=900, min_sz_y=700)
        self.setWindowTitle("Simulation Configuration")
        self.setFixedHeight(700)
        self.setFixedWidth(1350)
        main_lo = QVBoxLayout()
        self.setLayout(main_lo)

        # Label
        self.desc_label = GBuilder().label(self, "Create a new simulation. Create one or more environments and"\
                                           " fill them with components. Then connect the components.", None, None)
        self.desc_label.setFixedHeight(20)
        main_lo.addWidget(self.desc_label)

        # Horizontal Layout
        hl_1 = QHBoxLayout()
        main_lo.addLayout(hl_1)

        # Groupboxes
        self.components_gb = GBuilder().hand_groupbox(self, "Components", None, None)
        self.components_gb.setFixedWidth(300)
        self.environment_gb = GBuilder().groupbox(self, "Environments", None, None)
        hl_1.addWidget(self.components_gb)
        hl_1.addWidget(self.environment_gb)

        # Components Boxes
        self.comps_layout = QVBoxLayout()
        self.components_gb.setLayout(self.comps_layout)
        self._add_component_boxes()

        # Buttons
        main_lo.addWidget(GBuilder().hor_line(self))
        hl = QHBoxLayout()
        hl.addWidget(GBuilder().label(self, ""))
        ok_but = GBuilder().pushbutton(self, "OK", self._ok_hit)
        ok_but.setFixedWidth(150)
        ok_but.setFixedHeight(25)
        cancel_but = GBuilder().pushbutton(self, "Cancel", self._ok_hit)
        cancel_but.setFixedWidth(150)
        cancel_but.setFixedHeight(25)
        hl.addWidget(ok_but)
        hl.addWidget(cancel_but)
        main_lo.addLayout(hl)

        # Fill Components Boxes
        self._fill_ecu_boxes()
        self._fill_bus_boxes()
        self._fill_others_boxes()

        # Fill environment
        self._fill_environment_box()

        # Style
        self._set_stle()

    def _add_component_boxes(self):

        # ECU Box
        self.ecu_box_wid = QScrollArea()
        wid = QWidget()
        self.ecu_box_wid.setWidget(wid)
        self.ecu_box_wid.setWidgetResizable(True)
        self.ecu_box = QGridLayout()
        wid.setLayout(self.ecu_box)
        self.ecu_box_wid_wid = wid
        self.comps_layout.addWidget(self.ecu_box_wid)

        # Bus Box
        self.bus_box_wid = QScrollArea()
        wid = QWidget()
        self.bus_box_wid.setWidget(wid)
        self.bus_box_wid.setWidgetResizable(True)
        self.bus_box = QGridLayout()
        wid.setLayout(self.bus_box)
        self.bus_box_wid_wid = wid
        self.comps_layout.addWidget(self.bus_box_wid)

        # Others Box
        self.others_box_wid = QScrollArea()
        wid = QWidget()
        self.others_box_wid.setWidget(wid)
        self.others_box_wid.setWidgetResizable(True)
        self.others_box = QGridLayout()
        wid.setLayout(self.others_box)
        self.others_box_wid_wid = wid
        self.comps_layout.addWidget(self.others_box_wid)

    def _fill_ecu_boxes(self):

        # Creatable Objects
        kys = ECUFactory().createable_objects()
        row = 0
        col = 0

        for ky in list(kys):

            # Information gathering
            name = self._load_gui_name(ky, ECUFactory())
            ico = self._load_gui_icon(ky, ECUFactory())

            # New Element per Object
            gb = GBuilder().groupbox(self, name, None, None)
            gb.setFont(QtGui.QFont('SansSerif', 7))
            gb.setFixedHeight(70)
            gb.setFixedWidth(70)
            db = GBuilder().dragbutton(gb, '', self._add_component_boxes, ico, icon_x=45, icon_y=45, size_x=60, size_y=50, pos_x=5, pos_y=15)
            db.set_drop_func(self.core.add_ecu_box_to_env)
            db.set_move_icon_context_acts(self.core.load_context_menu_actions(ky))
            db.ecu_key = ky
            db.setCheckable(True)
            db.setStyleSheet('QPushButton {background-color: #F2F2F2; color: red;border: 0px solid gray;border-radius: 12px;}')

            # Add to Layout
            self.ecu_box.addWidget(gb, row, col, Qt.AlignTop)
            col += 1
            if col == 3:
                row += 1
                col = 0

        # Add Widget
        self.ecu_box.addWidget(QWidget())

    def _fill_bus_boxes(self):

        kys = BusFactory().createable_objects()

        row = 0
        col = 0

        for ky in list(kys):

            # Information gathering
            name = self._load_gui_name(ky, BusFactory())
            ico = self._load_gui_icon(ky, BusFactory())

            # New Element per Object
            gb = GBuilder().groupbox(self, name, None, None)
            gb.setFont(QtGui.QFont('SansSerif', 7))
            gb.setFixedHeight(70)
            gb.setFixedWidth(70)
            db = GBuilder().dragbutton(gb, '', self._add_component_boxes, ico, icon_x=45, icon_y=45, size_x=60, size_y=50, pos_x=5, pos_y=15)
            db.set_drop_func(self.core.add_bus_box_to_env)
            db.set_move_icon_context_acts(self.core.load_context_menu_actions(ky))
            db.ecu_key = ky
            db.setCheckable(True)
            db.setStyleSheet('QPushButton {background-color: #F2F2F2; color: red;border: 0px solid gray;border-radius: 12px;}')

            # Add to Layout
            self.bus_box.addWidget(gb, row, col, Qt.AlignTop)
            col += 1
            if col == 3:
                row += 1
                col = 0

        # Add Widget
        self.bus_box.addWidget(QWidget())

    def _fill_others_boxes(self):
        kys = ECUFactory().createable_objects()

        row = 0
        col = 0

    def _fill_environment_box(self):

        # Main Layout
        main_lo = QVBoxLayout()
        self.environment_gb.setLayout(main_lo)

        # Combobox
        lo, self.env_select_cb, lab = GBuilder().label_combobox(self, "Current Environment:", [], self._env_select_changed)
        hl = QHBoxLayout()
        hl.addLayout(lo)
        but = GBuilder().pushbutton(self, "New", self._new_env_hit)
        but.setFixedWidth(40)
        hl.addWidget(but)
        lab.setFixedWidth(140)
        self.env_select_cb.setFixedHeight(22)
        self.env_select_cb.setFixedWidth(350)
        main_lo.addLayout(hl)

        # Groupbox (to make it look nicer)
        self.content_gb = EnvironmentView(self.environment_gb)
        main_lo.addWidget(self.content_gb)
        self.content_gb.setFixedHeight(550)
        self.content_gb.setFixedWidth(1000)
        self.content_gb.setLayout(lo)

        # QStackedWidget with environments
        self.stacked_env = QStackedWidget()
        lo.addWidget(self.stacked_env)

    def _set_stle(self):

        self.content_gb.setStyleSheet('QGroupBox {background-color: #F2F2F2; color: red; border: 2px solid gray;border-radius: 12px;} EnvironmentView {background-color: #F2F2F2; color: red; border: 2px solid gray;border-radius: 12px;}')

        self.ecu_box_wid_wid.setStyleSheet('QWidget { border: 0.5px solid gray;border-radius: 3px;}')
        self.ecu_box_wid.setStyleSheet('QWidget { border: 0.5px solid gray;border-radius: 3px;}')

        self.bus_box_wid_wid.setStyleSheet('QWidget { border: 0.5px solid gray;border-radius: 3px;}')
        self.bus_box_wid.setStyleSheet('QWidget { border: 0.5px solid gray;border-radius: 3px;}')

        self.others_box_wid_wid.setStyleSheet('QWidget { border: 0.5px solid gray;border-radius: 3px;}')
        self.others_box_wid.setStyleSheet('QWidget { border: 0.5px solid gray;border-radius: 3px;}')

    def _ok_hit(self):

        # 1. Create environments using defined processing methods
        environments_list = NewSimulationCore().run_processes()

        # 2. Save environments via API / Load them via API as well

        self.close()

    def _cancel_hit(self):
        print("Cancel")
        self.close()

    def _new_env_hit(self):

        # Add to list
        nr = len(self.environments)
        self.environments.append("Environment %s" % nr)
        self.env_select_cb.addItem(self.environments[-1])
        self.env_select_cb.setCurrentIndex(nr)

        # Create new Stacked widget entry
        wid = QWidget()
        self.stacked_env.addWidget(wid)
        self.env_wid["Environment %s" % nr] = wid

        lo = QVBoxLayout()

        wid.setLayout(lo)
        self.stacked_env.setCurrentIndex(nr)

    def _env_select_changed(self):
        idx = self.env_select_cb.currentIndex()
        self.stacked_env.setCurrentIndex(idx)
        NewSimulationCore().selected_env = self.env_select_cb.currentText()
        self.content_gb.selected_env = self.env_select_cb.currentText()

        self._show_env(NewSimulationCore().selected_env, NewSimulationCore().env_map)

    def _get_env_elem_by_icon(self, env_elems, move_icon):
        for elem in env_elems:
            if str(elem.move_icon) == str(move_icon):
                return elem
        return None

    def _load_gui_name(self, ky, factory):
        try:
            cls = factory.get_class(ky)
            name = cls.GUI_NAME
        except:
            name = ky
        return name

    def _load_gui_icon(self, ky, factory):
        try:
            cls = factory.get_class(ky)
            name = cls.GUI_ICON
        except:
            name = os.getcwd() + r'/icons/standard_ecu.png'
        return name

    def _show_env(self, selected_env, env_map):

        GBuilder().update_connected(self.content_gb, self.environment_gb.pos(), self.content_gb.pos(), self.content_gb.selected_env)

        # Mainwindow
        for chil in self.children():
            if isinstance(chil, DragLabel):
                try:
                    a = self._get_env_elem_by_icon(env_map[selected_env], chil)

                    if a == None:
                        chil.hide()
                    else:
                        chil.show()
                except:
                    chil.hide()

class ImportWindow(QDialog):

    def __init__(self, parent):
        QDialog.__init__(self, parent)
        self.create_widgets(parent)
        self.exec()

    def create_widgets(self, parent):
        pass

class SaveWindow(QDialog):

    def __init__(self, parent):
        QDialog.__init__(self, parent)
        self.create_widgets(parent)
        self.exec()

    def create_widgets(self, parent):
        pass

class BuildWindow(QDialog):

    def __init__(self, parent):
        QDialog.__init__(self, parent)
        self.create_widgets(parent)
        self.exec()

    def create_widgets(self, parent):
        pass

class AbstractAddPlugin(QWidget):
    ''' this class returns the widget that will be used
        to create a Component that will be added to the environment '''

    def __init__(self, parent):
        QWidget.__init__(self, parent)

    def set_gui(self, mapp):
        ''' set the gui from the map received '''
        raise NotImplementedError("set_gui not implemented ")

    def get_actions(self):
        return

    def get_map(self):
        ''' returns the map that is later used to set this plugin GUI
            again and that is used to run the processors'''
        raise NotImplementedError("get_map not implemented ")

    def preprocess(self, env, mapp):
        ''' Will be called first for each plugin'''
        raise NotImplementedError("preprocess not implemented ")

    def main_process(self, env, mapp):
        ''' Will be called in the middle for each plugin'''
        raise NotImplementedError("main_process not implemented ")

    def postprocess(self, env, mapp):
        ''' Will be called in the end for each plugin'''
        raise NotImplementedError("postprocess not implemented ")

'''===============================================================================
    Implementation Part
==============================================================================='''

class NewSimulationCore(Singleton):

    def __init__(self, gui_con):
        self.gui = gui_con

        self.selected_env = None
        self.env_map = {}  # Connects a environment Name to a list of EnvironmentElements

    def add_bus_box_to_env(self, cur_pos, bus_type, move_icon):

        if not self._handle_no_selection(move_icon): return

        # Load config from Element
        try:
            # New Element
            move_icon.env_view = self.gui.content_gb
            cur_env_elems = self.env_map[self.selected_env]
            env_elem = self._get_env_elem_by_icon(cur_env_elems, move_icon)

            add_ecu = AddSingleBUSDialog(self.gui, bus_type, env_elem.processor, env_elem.gui_map)
        except:
            # Edit Element
            env_elem = EnvironmentElement(move_icon, bus_type)
            self._dict_add_two(self.env_map, self.selected_env, env_elem)
            add_ecu = AddSingleBUSDialog(self.gui, bus_type, None)

        # Save config
        env_elem.processor = add_ecu.processor
        env_elem.comp_type = bus_type
        env_elem.draws_line = True
        env_elem.gui_map = add_ecu.processor.get_map()

    def add_ecu_box_to_env(self, cur_pos, ecu_type, move_icon):

        # No environment selected
        if not self._handle_no_selection(move_icon): return

        # Load config from Element
        try:
            # New Element
            move_icon.env_view = self.gui.content_gb
            cur_env_elems = self.env_map[self.selected_env]
            env_elem = self._get_env_elem_by_icon(cur_env_elems, move_icon)
            add_ecu = AddSingleECUDialog(self.gui, ecu_type, env_elem.processor, env_elem.gui_map)
            env_elem.processor = add_ecu.processor
            env_elem.comp_type = ecu_type
        except:
            # Edit Element
            env_elem = EnvironmentElement(move_icon, ecu_type)
            self._dict_add_two(self.env_map, self.selected_env, env_elem)
            add_ecu = AddSingleECUDialog(self.gui, ecu_type, None)
            env_elem.processor = add_ecu.processor
            env_elem.comp_type = ecu_type

        # Save config
        env_elem.gui_map = add_ecu.processor.get_map()

    def run_processes(self):
        ''' run all processes (pre, main, post) and create
            a environment from that '''
        res_envs = []
        for env_name in self.env_map:
            new_env = api.ecu_sim_api.create_environment(2000)
            self._run_process(new_env, env_name)
            res_envs.append(new_env)
        return res_envs

    def load_context_menu_actions(self, ecu_type):
        ''' load the context menu actions for the specific
            ecu type'''
        try:
            act = QtGui.QAction(QtGui.QIcon(os.getcwd() + r'/icons/p.png'), "Connect", self.gui)
            act.setStatusTip("Connect the selected items")
            act.triggered.connect(self._connect)
            return [act]
        except:
            return []

    def _handle_no_selection(self, move_icon):
        if self.selected_env == None:
            q = QMessageBox(QMessageBox.Warning, "Warning", "Element could not be added. No environment selected.")
            q.exec();
            move_icon.setParent(None);
            return False
        return True

    def _connect(self):
        ''' connect two items'''

        # open Connect window,
        self._cur_selected_connection = None
        self.dia = QDialog(self.gui); main_lo = QVBoxLayout()
        GBuilder().set_props(self.dia, None, 250, 130, max_sz_x=400, max_sz_y=250)
        try:
            self.selected_env_elems = EnvironmentElement.icons_to_env_els(DragSelection().selected, self.env_map[self.selected_env])
            self.clicked_elem = EnvironmentElement.icons_to_env_els([DragSelection().clicked], self.env_map[self.selected_env])[0]
            self.selected_env_elems.remove(self.clicked_elem)
        except:
            return

        # show possible connections
        if not self.selected_env_elems: return
        acts = self.clicked_elem.processor.get_actions()
        main_lo.addWidget(GBuilder().label(self.dia, "Select a connection to be executed between type %s and type %s" % (self.clicked_elem.comp_type, self.selected_env_elems[0].comp_type)))
        hl, self._con_cb, te = GBuilder().label_combobox(self.dia, "Select Connection ", list(acts.values()), self.dia.show)
        main_lo.addLayout(hl)

        # ok cancel
        main_lo.addWidget(GBuilder().hor_line(self.dia))
        ok = GBuilder().pushbutton(self.dia, "Apply", self._ok_dia_hit); ok.setFixedWidth(100)
        canc = GBuilder().pushbutton(self.dia, "Cancel", self._cancel_dia_hit); canc.setFixedWidth(100)

        hl = QHBoxLayout()
        hl.addWidget(GBuilder().label(self.dia, ""))
        hl.addWidget(ok)
        hl.addWidget(canc)
        main_lo.addLayout(hl)

        self.dia.setLayout(main_lo)
        self.dia.exec()

    def _ok_dia_hit(self):

        # if can connected to ecu, draw a line
        if self.clicked_elem.draws_line:
            self._draw_lines(self.clicked_elem, self.selected_env_elems)

        # Apply selected connection
        self._clear_selected()
        new_con = EnvironmentConnection(self.clicked_elem, self.selected_env_elems, self._con_cb.currentText())
        self.clicked_elem.add_connection(new_con)
        self.dia.close()

    def _cancel_dia_hit(self):
        self._clear_selected()
        self.dia.close()

    def _clear_selected(self):

        for lab in DragSelection().selected:
            lab.setStyleSheet('QLabel {border: 0px solid red;border-radius: 15px;}')

        DragSelection().clicked = []
        DragSelection().selected = []

    def _draw_lines(self, prime_env_el, connected_env_els):

        try:
            DragSelection().connected[self.selected_env]
        except:
            DragSelection().connected[self.selected_env] = []

        DragSelection().connected[self.selected_env].append(LineConnection(prime_env_el.move_icon, [o.move_icon for o in connected_env_els]))
        GBuilder().update_connected(self.gui.content_gb, self.gui.environment_gb.pos(), self.gui.content_gb.pos(), self.selected_env)

    def _run_process(self, my_env, env_name):
        procs = []

        # Run all processors
        for cur_elem in self.env_map[env_name]:
            gui_map = cur_elem.gui_map  # possibly unnecessary
            processor = cur_elem.processor
            procs.append(processor)

        # pre processes
        for proc in procs:
            proc.preprocess(my_env, gui_map)

        # main processes
        for proc in procs:
            proc.main_process(my_env, gui_map)

        # Post processes
        for proc in procs:
            proc.postprocess(my_env, gui_map)

    def _get_env_elem_by_icon(self, env_elems, move_icon):
        for elem in env_elems:
            if str(elem.move_icon) == str(move_icon):
                return elem
        return None

    def _dict_add_two(self, dic, ky1, val):
        try:
            dic[ky1]
        except:
            dic[ky1] = []
        dic[ky1].append(val)

class EnvironmentConnection(object):

    def __init__(self, elem_1, lst_elems_2, act_type):
        ''' elem_1 is the object invoking a method in connection
            with all objects in list elems_2'''
        self.exec_elem = elem_1
        self.execed_elems = lst_elems_2
        self.act_type = act_type

class EnvironmentElement(object):
    ''' This is a gui element that is visible
        in the Add Window '''
    GLOB_CNT = 0

    def __init__(self, move_icon, ecu_type):

        self.processor = None  # Processor
        self.gui_map = {}  # Content of this gui element
        self.connections = []  # Connections to other gui Elements
        self.element_id = EnvironmentElement.GLOB_CNT
        self.comp_type = ecu_type
        self.move_icon = move_icon
        EnvironmentElement.GLOB_CNT += 1

        self.draws_line = False

        self.move_icon.setToolTip("ID: %s_%s\n" % (self.comp_type, str(self.element_id)))

    def add_connection(self, connection):
        self.connections.append(connection)
        self.move_icon.setToolTip(self._connections_2_str())

    def _connections_2_str(self):
        res_str = "ID: %s_%s\n" % (self.comp_type, str(self.element_id))
        res_str += "Connections:"
        for con in self.connections:
#             el_1 = con.exec_elem.comp_type + "_" + str(con.exec_elem.element_id)
            el_2 = ""
            for el in con.execed_elems:
                el_2 += "\t - " + el.comp_type + "_" + str(el.element_id) + "\n"
            res_str += "\nType: %s\n" % con.act_type
#             res_str += el_1
            res_str += el_2
        return res_str

    @staticmethod
    def icons_to_env_els(lst_icons, lst_env_els):
        els = []

        for ico in lst_icons:
            for el in lst_env_els:
                if str(ico) == str(el.move_icon):
                    els.append(el)
                    break
        return els

class AddSingleBUSDialog(QDialog):

    def __init__(self, parent, bus_type, processor, mapp=False):
        QDialog.__init__(self, parent)
        self.bus_type = bus_type
        self.processor = processor
        self.setWindowTitle("Add Component")
        self.map = {}  # Saves the values of the GUI
        if mapp:
            self.map = mapp
            self.create_widgets(parent, self.map)
        else:
            self.create_widgets(parent)
        self.exec()

    def create_widgets(self, parent, mapp=False):

        # Layout
        GBuilder().set_props(self, min_sz_x=500, min_sz_y=150)
        main_lo = QVBoxLayout()
        self.setLayout(main_lo)

        # Get Add Dialog
        try:

            # Read API Spec that I need
            cls = BusFactory().get_class(self.bus_type)
            self.processor = cls.get_add_plugin(parent)
            if mapp:
                self.processor.set_gui(mapp)
            main_lo.addWidget(self.processor)
        except:
            print(traceback.format_exc())
            ECULogger().log_traceback()

        # Ok and Cancel
        main_lo.addWidget(GBuilder().hor_line(parent))
        hl = QHBoxLayout()
        hl.addWidget(GBuilder().label(parent, ""))
        ok = GBuilder().pushbutton(parent, "OK", self._ok_hit)
        ok.setFixedWidth(100)
        hl.addWidget(ok)
        canc = GBuilder().pushbutton(parent, "Cancel", self._cancel_hit)
        canc.setFixedWidth(100)
        hl.addWidget(canc)
        main_lo.addLayout(hl)

    def _ok_hit(self):
        self.map = self.processor.get_map()
        self.close()

    def _cancel_hit(self):
        print("Cancel")
        self.close()

class AddSingleECUDialog(QDialog):

    def __init__(self, parent, ecu_type, processor, mapp=False):
        QDialog.__init__(self, parent)
        self.ecu_type = ecu_type
        self.processor = processor
        self.setWindowTitle("Add Component")
        self.map = {}  # Saves the values of the GUI
        if mapp:
            self.map = mapp
            self.create_widgets(parent, self.map)
        else:
            self.create_widgets(parent)
        self.exec()

    def create_widgets(self, parent, mapp=False):

        # Layout
        GBuilder().set_props(self, min_sz_x=500, min_sz_y=150)
        main_lo = QVBoxLayout()
        self.setLayout(main_lo)

        # Get Add Dialog
        try:

            # Read API Spec that I need
            cls = ECUFactory().get_class(self.ecu_type)
            self.processor = cls.get_add_plugin(parent)
            if mapp:
                self.processor.set_gui(mapp)
            main_lo.addWidget(self.processor)
        except:
            print(traceback.format_exc())
            ECULogger().log_traceback()

        # Ok and Cancel
        main_lo.addWidget(GBuilder().hor_line(parent))
        hl = QHBoxLayout()
        hl.addWidget(GBuilder().label(parent, ""))
        ok = GBuilder().pushbutton(parent, "OK", self._ok_hit)
        ok.setFixedWidth(100)
        hl.addWidget(ok)
        canc = GBuilder().pushbutton(parent, "Cancel", self._cancel_hit)
        canc.setFixedWidth(100)
        hl.addWidget(canc)
        main_lo.addLayout(hl)

    def _ok_hit(self):
        self.map = self.processor.get_map()
        self.close()

    def _cancel_hit(self):
        print("Cancel")
        self.close()

redpajama_set_name: RedPajamaGithub


Liz Cheney said Nancy Pelosi has lost control of House Democrats to newly-elected "socialists" like Alexandria Ocasio-Cortez and Ilhan Omar.
Joe Lieberman warned that Democrats moving to the "far left" will make them a "losing party" in 2020's presidential election.
Dr. Phil rejected the "social justice" ethos of state-mandated egalitarianism in an interview with Joe Rogan on Tuesday.
Charlie Kirk, founder and president of Turning Point USA, described immigration as America's "biggest issue" in a Thursday interview on SiriusXM's Breitbart News Daily with host Alex Marlow.
Monica Crowley warned of the need for a "police state" to enforce socialist proposals advanced by Democrats such as Alexandria Ocasio-Cortez.
Hillsdale College President Larry Arnn told Breitbart News Editor-in-Chief Alex Marlow during a Sirius XM Breitbart News Daily interview Wednesday that "elite universities" are the "ultimate sources" of politically correct dogma.
The Center for American Progress fired two staffers suspected of leaking information related to UAE influence over its operations.
Venezuelan dictator Nicolás Maduro claimed on Tuesday that the recent election of Jair Bolsonaro in Brazil and other right-leaning leaders will eventually trigger a "new wave" of leftist governments across the continent.
Henry Olsen said Mitt Romney's seeming prioritization of "investors' profits" over "American jobs" alienated "working class" voters in 2012.
Jordan Peterson told Breitbart News that people should strive to "lead by example" to help others avoid the pitfalls of ideology.
Swedish Green Party politicians in Eslöv have issued an apology after the local council group suggested forcing out Swedes critical of multiculturalism from the area, saying the proposals were just satire.
From U.K. police more interested in "hate non-crime" than in actual rapes and murders (no really!) to nonsense "man has baby" headlines in conservative newspapers, James Delingpole explains on this week's episode of Delingpole how all our institutions are caving to deranged leftist lunacy.
"Would Chuck Schumer like to see fewer Jews in the judiciary so that the judiciary looked like the American population?" asked Dennis Prager on Friday's edition of his eponymous radio show.
"We all need to recognize that falsely accused people are victims, too," said Cassie Jaye of persons — mostly men — who are falsely accused of committing sexual misconduct. She made her comments within a broader discussion on feminism and associated #MeToo narratives.
Democrats and the broader left have "targeted the white male … for extinction," said Michael Savage, pointing to Rep. Nancy Pelosi's recent use of an anecdote involving her grandson to push racial politics.


text:
(Pocket-lint) – Amazon has been increasing the deals as we approach Black Friday and that includes deals on "renewed" iPhone 12 models, including the 12, 12 Pro and 12 Pro Max.
Samsung's Galaxy Tab S7 update brings even better S…
Samsung Galaxy Tab S8 New Renders Are Here, With Some Specs…
Huawei Mate X2 is a new foldable phone being announced on 22…
The Amazon renewed iPhones come with a 1-year guarantee, have been quality inspected and have at least 80 per cent of the battery performance of the new model – but they are pre-owned and won't necessarily come in the original box.
iPhone 12 Pro, 128GB (renewed) – now £623
The iPhone 12 Pro was launched in 2020, a excellent phone with triple camera on the rear and a 6.1in display. There's a small saving of £36, but it's worth having. It's now £623.49.
iPhone 12, 256GB (renewed) – only £634
The iPhone 12 is a great phone and Amazon is offering discounts on renewed versions of this phone. It's worth checking out the colours as some are cheaper than others. Prices from £634.99.
The Apple iPhone 12 was launched in 2020, with squared edges for a quality finish. All these models are equipped with an OLED display which looks fantastic, while they also run the latest version of iOS – so you're really getting the best of what the iPhone offers.
The iPhone 12 has a dual camera on the rear, while the Pro models expand this with a telephoto lens, offering greater zoom.
All these models are powered by the Apple A14 Bionic, offering loads of power – but keep an eye on how much storage you get for the price.
The iPhone 12 may not be the latest iPhone, but it's a great performer and you really don't miss out on much choosing an older model. These phones are backed by a 1-year satisfaction guarantee and have to meet standards to be sold under the Amazon Renewed scheme.
More Black Friday deals
Apple Watch Series 6 GPS + Cellular: £70 saving, to £629
Fossil Men's Gen 5 LTE: Over £105 off, to £223.70
WD_BLACK SN750 2TB NVMe SSD: Save £254, now £205.99
Samsung 970 EVO Plus 2 TB PCIe NVMe M.2 SSD: Reduced by £170.49 to £269.30
Bang & Olufsen Beoplay E8 3rd Generation: 57% off RRP, now £129.99
Jabra Elite Active 75t Earbuds: Now £99.99, with 44% discount
Jabra Elite 85t True Wireless Earbuds: Save £70, down to £149.99
Sony WF-1000XM4: £51 off today, at £199
Fire HD 10 Plus: 45% off to £109.99
Kindle Oasis: Now £199.99, w. £60 off
Fire HD 8 Plus: Get £50 off at £89.99
Echo Show 8: Save 40%, now £59.99
Echo (4th generation): 39% discount to £54.99
Echo Show 5 (2nd gen): £39.99, reduced by 47%
Fire TV Stick 4K: 50% off to £25
Echo Dot (4th gen): £28.99, with a 42% saving
Kindle Paperwhite: Save 47% now £79.99
Arlo Pro 3 and Arlo Doorbell: 37% off at £164.98
Amazon Blink Mini: Save 33%, now £19.99
Sony WH-1000XM3: Over £40 saving to £159
Ring Video Doorbell Wired by Amazon + Echo Dot (3rd Gen): Save 50%, now £44
Apple AirPods Pro: £40 off, down to £199
Fitbit fitness trackers: 45% discount on RRP
Samsung Galaxy Watch 4: 20% saving to £199
Writing by Chris Hall. Originally published on 19 November 2019.
Kyndryl expands hybrid cloud ambitions with VMware
Xilinx, Fujitsu enter O-RAN partnership to support 5G…
Samsung Galaxy Tab A7 Kids Edition Launched in Russia, With…
Samsung Galaxy Tab S7 Lite could have fast charging, but…
Samsung Galaxy Book Pro 360 2-in-1 laptop is a steal with…


The free online photo editor, picture frames and other images can be synthesized.
The copyright of the original image on the site for synthesis, there is no problem if you upload the image to the right, freely available to the composite image.
A1:Frame 1 - Add a comparatively elaborate frame edges.