Max Verstappen takes brilliant Brazilian Grand Prix victory after chaotic climax
by Phil Duncan, Luke Slater, live updatesSebastian Vettel and Charles Leclerc pointed the finger of blame at each other following their late collision on yet another miserable afternoon for Ferrari in Brazil.
Max Verstappen delivered a dominant performance to win for a second time this year, finishing ahead of Toro Rosso’s Pierre Gasly, with Lewis Hamilton taking the flag in third.
Hamilton, however, was handed a five-second penalty, dropping him to seventh and promoting McLaren’s Carlos Sainz to third, following a penultimate-lap coming together with Alex Albon.
Hamilton’s collision with Albon encapsulated the frenetic nature of a race effectively deemed a dead-rubber after the he had sewn up his sixth world championship in Texas a fortnight ago.
Yet, despite Verstappen’s masterclass – the Dutchman proving again why some regard him as the best driver on the grid – and Hamilton’s banzai move on Albon, which cruelly denied him his first career podium, the penultimate round of the 2019 campaign might yet be remembered as the straw that broke the camel’s back at Ferrari.
The tension has been simmering between their two drivers – the four-times world champion Vettel and emerging talent, Leclerc – since the opening round of the campaign in Melbourne eight months’ ago. Here, at one of the iconic venues on the grand prix calendar, it sensationally boiled over.
Leclerc, having started 14th following a grid penalty, was battling Vettel for fourth with five laps to go. He dived underneath Vettel at the Senna Esses and made the pass stick. It was a perfect move.
Leclerc held off Vettel as they emerged from the third corner, but on the run down to the ensuing bend, Vettel latched on to Leclerc’s tow before drawing alongside his team-mate, and then subtly moving across him.
Vettel’s left-rear tyre made contact with Leclerc’s right-front, and in a flurry of sparks and broken carbon fibre, both Ferraris were out of the race. The contact was gentle, but the result devastating. Leclerc vented his anger by wagging his right fist at Vettel, who looked to be at fault, from inside his Ferrari cockpit. Both men were then on the radio in a series of furious outbursts.

“What the hell,” yelled Leclerc in the sister Ferrari, before he delivered a number of bleeped-out expletives. Later, the young driver, 22, said: “I left the space Seb took, and then towards the end of the straight he started to squeeze me.
“Everything happened very quickly, and as soon as he went to the side we touched and then I had a puncture. In the future, we will put it behind us and continue to work together.”
Ferrari team principal Mattia Binotto claimed it is a luxury to have two superstar drivers, but for how much longer is their partnership tenable?
“The drivers need to feel sorry for the team because they were free to fight,” said Binotto. “I am disappointed. They know that silly mistakes are something we should avoid.
“When you have a crash, there are two drivers and both of them have got at least a small percentage, or a part percentage of responsibility. I don’t want to judge now.”
Both drivers were then pulled from a scheduled print media briefing on Sunday night, leaving Binotto to face the music alone. “We prefer it like this,” said a Ferrari spokesperson.
Hamilton, meanwhile, apologised to Albon after the world champion accepted full responsibility for their crash. Hamilton, running behind Albon after he stopped for a third time under a late safety car, attempted to pass the London-born Red Bull driver for second place with just two laps to run.
But the Mercedes driver smashed into the side of the rookie, spinning the Red Bull man around. Hamilton limped to the flag with damage to the front of his car.
Hamilton’s late lunge denied Albon, 23, a first career podium. He finished outside the points in 14th.
“I apologise to Alex, and I hold my hands up for the accident,” said Hamilton, who was also hit with two penalty points on his drivers’ licence. “I totally accept the blame. It was not my intention and you hardly ever see me collide with anyone. In hindsight I could have waited to make the move, but hindsight is a wonderful thing.
“An opportunity arose and I was in shooting distance. I gave it a shot because in my mind I was trying to catch Max [Verstappen] for the win.
“That won’t be the last time Alex is in position for a podium. He will have many more great races so, as hard a pill as it is for him to swallow, I hope he can learn from the experience.”
A statement from the stewards read: “Albon was on his normal race line. Hamilton attempted to pass on the inside, but he was unable to get far enough inside to accomplish the overtake.
“By the time he realised there would not be sufficient room he was unable to back out of the situation and the collision followed. The stewards determined that Hamilton was predominantly at fault.”
Albon, who was recently rewarded with his fine start to life at Red Bull with a new deal for 2020, said: “I’m not angry at Lewis. I feel like it’s one of those things.
“Of course I wanted the podium and I felt like we deserved it, but that’s it really. It’s racing.”
Right that's it from me today
Nothing from the stewards about anything yet but we shall see. A lot to unpack from that race and I will be trying to do that in my post-race analysis which will be up on telegraph.co.uk/sport tomorrow. Thanks for joining me. A dead rubber but again, a brilliant race in Brazil.
Here is the incident between the Ferraris. I've written a lot about them this season. Tooooo many mistakes. By far.
Alex Albon talks post-race after crashing with Lewis Hamilton and missing out on a podium
I need to look at it back, to be honest. We came out of turn nine. I had some gap to Lewis, I thought we were okay where we are. I thought I'd go in a little hot and turn to cover him, to make sure he doesn't get any ideas. Once you dive there's a blind spot. I didn't expect him. It's kind of that thing where you are just waiting for it. It's a shame because I think he would have overtaken me anyway. He was looking racy.
Updated constructor standings (pending today's result)
Updated driver standings (pending today's result)
That moves Pierre Gasly back up to P6 in the standings...and with a nine point gap to Albon.
Leclerc and Vettel react to colliding
Leclerc:
From my side I overtook in turn one. In turn three I had to close because I was aware Seb would try again and he did, which there was little space but I left the space. He started to squeeze me and we were very close. As soon as he went to the inside we touched. I haven't seen Seb yet but I think we are mature enough to put that behind us.
Vettel:
I didn't have much space on the right and had a better run out of turn three and tried to pass. It's a shame for the team we didn't finish the race, that has priority.
Christian Horner reacts to a Red Bull win
Pretty tense. Gutted for Alex at the end, it should have been a 1-2 finish. Redemption for Max, 12 months down the line. He's driven a brilliant race. Passed Lewis twice.
Well, Verstappen was supreme
But he still had to overtake Hamilton twice to win the race. He had to work for it. I think Hamilton will take a penalty for that incident with Albon, as much as Albon left the door open for him. If that's the case then it'll be a shame that Sainz won't be able to stand on the podium. But that is very much to be confirmed.
The Dutch national anthem rings out around Interlagos
It is the national anthem which sounds most like a Christmas hymn.
Ahhhh
Always good to have someone else consult the history books for you, I guess.
A Honda 1-2
When was the last time that happened? I will have to consult the history books...
Hamilton apologises to Albon for their crash
I massively apologise to Albon, the gap was there and obviously it closed at the end. It was completely my fault. They outclassed us today. I left nothing on the table and I took a lot of risks today. We threw everything and the sink at it. We could keep up with him in the corners but they were outshining us on the straights.
It's a real shame, to be honest. Hamilton will be up on the podium but he may well lose that. I don't think they will get it done quickly enough for the podium ceremony. Vettel and Leclerc being looked at and a few other cars being looked at for using DRS under double waved yellows.
Pierre Gasly reacts to his first career podium and P2
It's such a special moment. I don't know what to say. To get it with these guys with Toro Rosso, they gave me a fantastic car since I came back. I have been many times on the podium [in previous series] and you kind of forget it. That's what I love about motorsport. I tried to push as much as I could. Great finish with Lewis as well. Big congrats to these guys as well.
Max Verstappen reacts to a brilliant win
I mean, Lewis was very quick. I had to keep pushing. We had to really be on top of our pit stops. Two times we had a good move with him. From there onwards I could control the race with the tyres I had. It was a lot of fun out there. I was pushing flat out in my out lap to be close to him and it was my only time. We knew that we had great top speed the whole weekend. Very happy to get past.
Pierre Gasly's team radio at the end of the race is an absolute mess!
He just screams for about 20 seconds. He deserves it. What a year he has had.
Provisional Top 10:
- VER
- GAS
- HAM
- SAI
- RAI
- GIO
- RIC
- NOR
- PER
- KVY
If Hamilton takes a five second penalty he will finish P7. It was so close at the end. Wish Albon was up there with them, he drove a brilliant race.
MAX VERSTAPPEN WINS THE 2019 BRAZILIAN GRAND PRIX
THAT WASN'T THE BRAZILIAN GRAND PRIX. THAT WAS THE BRAZILLIANT GRAND PRIX!
Gasly second by a metre! What a drive for him. After being ditched by Red Bull he has driven superbly. Vettel is stuck in the middle of the track. Throughout it ALL, Max Verstappen drove brilliantly.
Perhaps Hamilton will take a five second penalty for that incident which would promote Sainz to the podium!
FINAL LAP
Disaster for Albon. He gave Hamilton an open invitation to overtake him there and he took it. But not very well. Now Hamilton is trying to beat Gasly to the line...
Verstappen the leader btw...
Lap 70 of 71 - Gasly loses third instantly
To Hamilton. Hamilton is back in this race now...but second might be the best he can do. He'll have to fight Albon!
Hamilton tries to go through the inside of the hairpin at the end of the lap and goes too deep! They collide! Albon was on for a podium but he's dropped down to P15 now. Hamilton takes some front wing damage but is still third. He'll take a penalty for that, surely...
Lap 69 of 71 - SC in this lap!
OHHHHH. MY. WORD. THIS'LL BE GREAT FUN.
Lap 69 of 71 - This was the moment it all went wrong for Ferrari
For about the 189th time this season. I mean, really guys. REALLY!
This could be a Honda 1-2-3 with Albon and Gasly on the podium! Sainz in P5 after starting from the pit lane.
Lap 68 of 71 - Debris across the track...
It damages Stroll's suspension and he's had to retire as well.
That'll be it, I reckon.
Top 10:
- VER
- ALB
- GAS
- HAM
- SAI
- RAI
- GIO
- RIC
- NOR
- PER
Chaos, absolute chaos!
Lap 67 of 71 - I'm afraid that's Vettel's fault again
Not sure what Mercedes are doing with Hamilton. He's down to P4 now but this race may now finish under the safety car...
Both Ferrari drivers not happy with each other there.
Lap 66 of 71 - The two Ferraris collide!
They get very close on the back straight! Vettel comes back at Leclerc after he lost the position, moves across on Leclerc, clipping across his front right. Leclerc's front suspension has gone and Vettel's got a huge puncture. What disaster for them!
SAFETY CAR OUT! Hamilton pits!
Lap 65 of 71 - Verstappen leads by 3.7s
The two Ferraris are getting a little closer now....
Lap 64 of 71 - Albon and Vettel tussle at the start of the lap
Vettel tries one around the outside at turn one, briefly gets the place but Albon fights back and retakes third. Excellent driving, quicker on the power. That gives Hamilton a second or two breathing space in second. Verstappen cruising to victory now but it's so, so tight behind him...
Lap 63 of 71 - Albon within DRS range of Hamilton
Hamilton had some kind words to say about the young Red Bull driver a few weeks ago. It'll be interesting to see how stoutly he defends the Red Bull now...
Lap 62 of 71 - Verstappen cruising at the front now, brilliant pace
Vettel is giving Albon hell right now but Albon is within DRS range of Hamilton. Hamilton's concerns now lie behind him rather than in front of him. Verstappen is 2.7s ahead. Both Red Bulls went around the outside of their rivals at turn one at the restart for position. Brilliant stuff.
Lap 61 of 71 - Top 10
- VER
- HAM
- ALB
- VET
- LEC
- GAS
- SAI
- RAI
- GIO
- RIC
Brilliant racing here.
Lap 60 of 71 - Verstappen takes the lead!
VERSTAPPEN DOES IT AGAIN!He goes through and takes the lead at turn one! He's back where he wants to be. Superb move. Clinical. Hamilton tried to fight back but couldn't do it. The Red Bull is mighty around this track. Hamilton backed them up and backed them up so they were within inches of each other but Verstappen was just too good.
Albon gets past both Vettel at the restart! He's up into P3! Can he close up on Hamilton now?!
Lap 59 of 71 - SC in this lap!
FINALLY!
Hamilton REALLY backs the pack up at the end of the lap, bolts and then slows down again, trying to throw Verstappen to the wolves behind him...this'll be interesting!
Lap 58 of 71 - More lapped cars unlapping themselves
This is going to be a thrilling finish. Can't see Hamilton holding onto first here. He may even struggle to stay on the podium on his old tyres.
Lap 57 of 71 - Full running order under SC
- HAM
- VER
- VET
- ALB
- LEC
- GAS
- GRO
- SAI
- RAI
- GIO
- PER
- RIC
- KVY
- NOR
- STR
- MAG
- HUL
- RUS
- KUB
OUT: BOT
COME ON GET ON WITH IT. All of the lapped cars are out of the way, there's no reason for them to hold on. David Croft on Sky Sports F1 says they are waiting for the lapped (now non-lapped) cars to get far enough ahead so that they aren't caught within a lap or two of the restart by the leaders. But, reeeeeallly, why? We can't wait around forever. The longer the SC is out, though, the better for Hamilton.
Lap 56 of 71 - Interesting call from Mercedes
But they will have track position at least. But it's not like there are only a few laps left. It'll be 11, 12 and maybe 13 laps to go once the SC comes in. The lapped cars are unlapping themselves. Plenty of them but hopefully the safety car will be in soon. I can't see Hamilton holding on here. Leclerc will have a decent run at a podium here on his fresh tyres.
Lap 55 of 71 - Leclerc stops from P5, Albon stays out
How will this work out? Bottas's car is nearly out of the danger zone so the SC should be in this lap. Verstappen has two lapped cars between himself and Hamilton but this is going to bunch up. Hamilton asks for more power...
Lap 54 of 71 - I thought that would be okay for Bottas to park there
But it was in an awkward place, really, as close to the gap in the barriers he was there. Hamilton told to do the opposite of what Verstappen does strategy-wise under the safety car! Verstappen pits and goes onto the soft tyres! This race just got even more interesting...Hamilton stays out, of course.
Lap 53 of 71 - "Lewis didn't slow down enough," Verstappen says about Hamilton under the yellow flags
Red Bull say they saw it. Not sure anything will come of that. The yellow flags are still out in sector one and two but not for very long. OR WILL THEY?
SAFETY CAR OUT!
Lap 52 of 71 - Bottas retires, pulling up at the end of the back straight
He finds the gap in the barriers. Not a great race from him but that's cost him a few points. Not that it matters, he's guaranteed second in the championship. Hamilton now within DRS range of Verstappen. Both set exactly the same lap time last time around.
Lap 51 of 71 - Bottas's engine is about to go, I think
Blue smoke coming out of the back of it. I don't think it's long for this world...
Lap 50 of 71 - Vettel has stopped
And comes out in P4. He's within a second of Albon but I doubt he'll be there for long. Indeed he won't be, Albon stops. Albon not really in Verstappen's league pyramid structure this weekend. Hamilton has closed to within a second of the lead now...
Lap 49 of 51 - McLarens both into the points, P9 and P10
But Sainz is about to come under attack from Raikkonen in P11 on the fresher soft tyres.
Lap 48 of 71 - Verstappen sets his fastest lap
And takes four tenths out of Hamilton, who wants more power. I think this is going to be very tough for Hamilton to win this one here. It'll require a mistake from Verstappen. Leclerc still driving the widest Ferrari in the world, keeping Bottas behind at turn one, jinking around at turn one.
Lap 47 of 71 - Top 10
- VET
- VER
- HAM
- ALB
- LEC
- BOT
- GAS
- RAI
- GRO
- NOR
Lap 46 of 71 - Vettel leads
But he will likely have to stop again. Even so, he's only 5.1s ahead of Verstappen and on much older tyres. Even if he stays out he won't win this race. He's lapping over 1.5s off the pace of Verstappen.
Hamilton has taken two tenths out of Verstappen that last lap. Will the Dutchman respond? Meanwhile Bottas is stuck behind Leclerc in P6. He can't quite get enough pace on the back straight to get close enough for a lunge.
Lap 45 of 71 - Verstappen retains the lead
Hamilton, though, has closed the gap to 1.5s with that earlier stop but it hasn't worked out as well as the first stop did. Slowly, slowly, catchee Maxy.
Lap 44 of 71 - It's hammer time
Hamilton is told this out lap is critical. He knows, he says. Of course he does. Why do they tell him? Verstappen comes in at the end of the lap and will surely retain the lead? It's a 1.9s stop from the Red Bull mechanics. It's going to be close...
Lap 43 of 71 - "What are you waiting for? I can't get any closer than this!" - Hamilton
He wants to be brought in. He's closed to 2.7s to Verstappen. Does he need a bit more time for the undercut? He won't want to get the lead and then be vulnerable at the end of the race. He comes in at the end of the lap...it's onto the mediums. 27 laps to go...
Lap 42 of 71 - Bottas pits again
He goes onto the mediums. His definite one-stop strategy has turned into a definite two-stop. Those hard tyres were not working out for him.
Lap 41 of 71 - Hamilton not happy with his tyres
"These tyres are ----, man," he says on the radio. What does ---- mean? Does it mean ----, ----, or even ----? It surely couldn't be ----, could it?
Lap 40 of 71 - Full running order
- VER
- HAM
- VET
- BOT
- ALB
- LEC
- GAS
- RAI
- GIO
- PER
- RIC
- GRO
- NOR
- KVY
- SAI
- STR
- HUL
- MAG
- RUS
- KUB
Verstappen saying the wind is picking up now. It must be true.
Lap 39 of 71 - I can't see Vettel going to the end on these tyres
But he might be able to go onto the soft tyres very late on and run at the front two who may be on more worn medium tyres. Who will stop first out of Verstappen and Hamilton, though?
Lap 38 of 71 - Bottas seems to think the wind is moving around as well
Strange. Nobody seems to think it's that windy but it could be changing direction.
Lap 37 of 71 - Hamilton takes another tenth out of Verstappen
Steadily eating into the lead.
Lap 36 of 71 - Top 10
- VER
- HAM
- VET
- BOT
- ALB
- LEC
- GAS
- RAI
- GIO
- PER
It's stabilising out front at the moment. Vettel lapping a bit slower now.
Lap 35 of 71 - Verstappen leads Hamilton by 3.1s
Hamilton sets his fastest lap of the day to take near enough 0.3s out of Verstappen that time.
Lap 34 of 71 - This is a very interesting strategic race
Hamilton is really throwing it into the corners but he's losing two tenths a lap to Verstappen now. Verstappen has a pit stop in hand ahead of Bottas now. Vettel is told he's faster than the leaders. He's not at the moment but his pace overall is fairly decent. I don't think Vettel will get to the end on these tyres. Hards may have been the better choice, as they did with Leclerc. Bit of a nothing strategy, I think.
Lap 33 of 71 - Hamilton falling back now
"It's got windier, right?" he barks on the radio. I think it's his tyres that are the problem rather than the wind. His lap times aren't awful but he's consistently a tenth or two behind Verstappen. Vettel is also a little quicker but it's all much of a muchness at the moment but Hamilton's tyres will give up sooner and Vettel will have track position. Vettel is in this race, for now.
Lap 32 of 71 - Top 10
- VER
- HAM +2.9s
- VET +12.5s
- BOT +20.8s
- ALB +26.4s
- LEC +39.4s
- GAS +43.5s
- RAI +47.5s
- GIO +50.8s
- PER +54.4s
Lap 31 of 71 - 5s time penalty for Kubica for an unsafe release
Right into Verstappen's path. Hamilton has set his personal best but he's lost a couple of tenths on Verstappen. Vettel still going okay, though but is nine seconds away from Hamilton.
Lap 30 of 71 - Both McLarens pit
Sainz comes out in P15 and Norris in P13. The race may come to them at the end but it's not been a brilliant day for them.
Lap 29 of 71 - Charles Leclerc into the pits
And he goes onto the hard tyres. A definite one stop. Vettel may have to stop again from third. Vettel is currently 13 seconds off the lead. Hamilton in second 2.265 away from Verstappen ahead but without the pace to challenge. The front two definitely have to stop again, though. Vettel has good pace at the moment. Quicker than the front two, in fact, despite being on the harder medium tyres.
Lap 28 of 71 - The Verstappen/Kubica incident in the pit lane is being investigated
But that was not Verstappen's fault in any way. Hamilton saying he can't keep up with Verstappen. He's two seconds behind now. Hamilton came out ahead of Verstappen after their pit stops but by the end of Verstappen's out lap he was right up by the Mercedes and then soon ahead of him at the start of the next lap. Hamilton is not happy about how it's turned out.
Lap 27 of 71 - A fairly chaotic few laps
But here's the top 10.
- VER
- HAM
- LEC*
- VET
- BOT
- ALB
- NOR*
- SAI*
- GAS
- STR*
*yet to stop
Lap 26 of 71 - Hamilton thinks he has an engine problem?
The team says everything is okay but a bit hot. Bottas pits from the lead meaning Verstappen and Hamilton are back out in front on their own. Bottas goes onto the hards so that's a definite one-stop strategy. Leclerc in third, still out on the mediums.
Lap 25 of 71 - Ferrari out for Vettel
He pits from the lead. Will this be a one-stop strategy from them? Vettel goes onto the mediums, so probably.
Lap 24 of 71 - Hamilton not very happy about something
I think about his battery being dead. Effing and jeffing on the radio. Was that why Verstappen came from nowhere at the end of that lap? Meanwhile Hamilton goes around the outside of Albon at turn one, a nice clean move. He's right up to the back of Verstappen again.
Lap 23 of 71 - Verstappen takes Hamilton for the net lead!
Verstappen comes from nowhere! He gets Hamilton down the inside of turn one! Hamilton tries to get back into turn four but isn't close enough. Woah. That was a really poor move from Williams and Kubica in the pits there, Verstappen was pushed right into the wall.
Lap 22 of 71 - Hamilton being held up by Leclerc at the moment
But not for too long as he goes around the outside of the long right-hander towards the end of the lap. Verstappen follows Hamilton in passing Leclerc and he's up to the back of him already onto the pit straight! This'll be close!
Lap 21 of 71 - Will Red Bull react and bring Verstappen in?
Yes, they do. Wise. He was approaching traffic and it could have been risky. Quick stop needed...he's also onto the softs. But a new set but Kubica comes out RIGHT in front of him and he has to get on the anchors...Verstappen comes out behind Hamilton! That is terrible news for Red Bull...
Lap 20 of 71 - Hamilton stops
And goes onto the soft tyres. That's a certified two-stopper!
Lap 19 of 71 - Hamilton the quicker man at the moment
Who will blink first? Is the undercut more powerful than the overcut? Bottas is almost nowhere. Front two have the problem of coming out behind Leclerc on the mediums, though. That's the issue. He'll run for a long time on those but on fresh tyres he may be easy pickings...
Lap 18 of 71 - Sergio Perez pits
But he wasn't really a prospect for the points. Hamilton closes Verstappen down by a couple of tenths.
Lap 17 of 71 - Bottas and Mercedes thinking plan B
Whatever that is. A two-stopper presumably. Expect a stop soon from him then.
Lap 16 of 71 - Verstappen responds to Hamilton
But again the two are lapping very similarly. 1.13.556 vs 1.13.658 the last time around. Vettel now 6.4s behind Verstappen. Leclerc not making great inroads into Albon for P5. Bottas a bit lonely in P4.
Lap 15 of 71 - Ricciardo given five second time penalty for that incident with Magnussen
Not great. That drops him back to...well, it drops him back five seconds further back from the man in P19 as the Aussie is currently last. Frustrating season for him.
Lap 14 of 71 - Fastest sectors
No real surprise. The first and last sectors are mostly flat out. The middle sector is the tight and twisty section.
Lap 13 of 71 - Hamilton starting to close the gap
It's down to under two seconds at the end of the lap. Vettel not quite keeping up with their pace. Hamilton on the attack, it seems.
Lap 12 of 71 - Verstappen still going nicely
10 seconds separates the top four but Bottas isn't really in this race. It's a three horse race.
Lap 11 of 71 - Verstappen leads Hamilton by 2.3s
Not much in it at all. Vettel clinging on to the front two, five seconds or so away from Verstappen now.
Lap 10 of 71 - Leclerc gets Gasly for P6
Slicing through the field, into the top six now after just 10 laps. Not even 10 laps! He's four seconds down the road from Albon in P5. Verstappen leads by 2.4s from Hamilton, not much happening out front. Vettel a further 2.4s behind Hamilton.
Lap 9 of 71 - Top 10
- VER
- HAM
- VET
- BOT
- ALB
- GAS
- LEC
- RAI
- GRO
- GIO
Lap 8 of 71 - Ricciardo punts Magnussen off the track
He tries one down the inside of turn four which is a very, very, difficult place to overtake. Ricciardo locked up on the inside and damaged his own front wing, knocking the Haas of the track. Oh dear.
Magnussen slips to P18 and Ricciardo down to P20 after his front wing change in the pits.
Lap 7 of 71 - Grosjean holding his place in the points in P9
But the other Haas of Magnussen has slipped back to P13. Leclerc takes Raikkonen at the start of the lap for P7. He's closing up on Gasly now.
Lap 6 of 71 - Verstappen's lead stabilises at 2.5s
Albon has slipped back nearly a second on Bottas there. Lost a lot of time the last lap around. Not sure what happened but he's now out of DRS range.
Lap 5 of 71 - Leclerc up to P8 as he goes down the inside of Grosjean at turn one
Albon is putting Bottas under pressure and he's within DRS range. Mercedes, apparently, think Verstappen is going for a two-stop strategy due to his pace. 2.5s at the end of the lap. Not sure about that, to be honest. Vettel 1.4s behind Hamilton, keeping him honest.
Lap 4 of 71 - Top 10
- VER
- HAM
- VET
- BOT
- ALB
- GAS
- RAI
- GRO
- LEC
- MAG
Sainz up to 15th now, putting one on Perez at the start of the lap. He saw a gap, it was small, but he made it. Nice work.
Lap 3 of 71 - Verstappen going great guns
He's over two seconds clear at the end of lap three.
Lap 2 of 71 - Verstappen leads Hamilton
Some brilliant action in the midfield between Ricciardo and Norris at the start of the lap. Ricciardo got Norris at the start of the lap and into turn one but Norris waited around the outside of turn three and went around the outside. Then he nearly forced the Renault onto the grass...Norris keeps his place but he's donw in P12 now...
Verstappen leads by 1.7s from Hamilton.
THE 2019 BRAZILIAN GRAND PRIX IS GO!
It's a long way at the front...
Good start by Vettel initially but Hamilton fights back into turn one...he squeezes around the outside of Vettel and into second! Verstappen keeps his lead with a big gap into sector two. That's what we wanted to see! Leclerc is up to P13 and tries to get around Ricciardo...and Norris! The two came so close to coming together there...
Verstappen leads at the end of lap one...
The grid forms up
Verstappen leading Vettel and Hamilton. Bottas and Albon just behind. Then Gasly. It's nearly time...
The formation lap is go!
Everyone away cleanly as Max Verstappen leads them from the front.
Starting tyres
Top 10 all on softs. Ricciardo, Hulkenberg, Leclerc, Kvyat and both Williams on mediums. Everyone else on softs.
Bit of a rough day for McLaren yesterday
Sainz didn't set a time in Q3 and starts 20th. Points will be hard from there. Norris moves up a place due to Leclerc's penalty and starts P10 but with a fresh set of tyres. So I think a few points from where he is would be a good result. He could do with a bit of luck for once.
While you've got a few minutes
Bookmark Oliver Brown's long read on Lewis Hamilton. It's worth 15 or 20 minutes of your time.
Predictions?
Hard to see past Verstappen, really. But I think Hamilton could be a thorn in his side. Bernie Ecclestone, meanwhile, thinks Vettel is going to win. He's speaking to Sky Sports F1 at the moment and seems a little stumped about being asked about Lewis Hamilton's sixth world titles. "I think...I don't know..." he says. I wonder if he was going to say that his dominance is bad for the sport. Probably...
It'll be a shame to lose Nico Hulkenberg from the grid
But he seems to have run out of available seats. He said he hopes to return to the grid but, at his age, it's very difficult to come back from that. I think Red Bull should have considered him next year over Albon, although I can see why they didn't. He took his one and only F1 pole position here back in 2010. The grid for 2020 is looking very similar to 2019 with just Kubica moving out of Williams and Hulkenberg moving away from Renault.
15 minutes to go until lights out.
Haas have a had a rotten - and largely very strange - season
And yesterday's performance in qualifying is another chapter. They have scored just two points since the summer break but yesterday both Romain Grosjean and Kevin Magnussen made it into Q3... running the Australia-spec versions of their cars. Absolutely staggering. I wouldn't expect too much from them today, though.
Strategy chat
Looks a solid one-stopper, really.
Charles Leclerc starts on the medium tyres, nothing there from Pirelli suggesting going medium-softs is the way to go, though. The Ferrari will be quick enough to slice its way through the field, though. Will anyone else in the bottom 10 and with a free tyre choice bolt the mediums on?
Constructor standings after 19 of 21 rounds
Driver standings after 19 of 21 rounds
Leclerc can wrap up P3 in the championship today but it looks unlikely, to be honest. He's up against Verstappen and Vettel and both are well ahead of him on the grid.
Chances of rain?
Slim to none.
Verstappen said that he wants to make up for last year's race
When he was a very, very strong favourite to win the race and was driving superbly. Until this happened...
He has said it was perhaps some Verstappen-family karma after his dad Jos took out race leader in Juan Pablo Montoya in 2001 on the same track.
The grid for the race
1. VER 2. VET
3. HAM 4. BOT
5. ALB 6. GAS
7. GRO 8. RAI
9. MAG 10. NOR
11. RIC 12. GIO
13. HUL 14. LEC
15. PER 16. KVY
17. STR 18. RUS
19. KUB 20. SAI
Leclerc slips down 10 grid spots for an engine change. Gasly keeps doing it for Toro Rosso and gets the "class b" pole position for Toro Rosso.
And here's a video of Senna driving Senna's MP4/4
The crowd seem to like it...
Speaking of nice, Bruno Senna took his uncle's MP4/4 for a spin around Interlagos
Max Verstappen's pole lap in full
Nice. Just nice.
Good afternoon F1 fans
And welcome to our liveblog for qualifying for the 2019 Brazilian Grand Prix. It's the penultimate race of the season and, although it'd have been nice to have either championship still alive, these dead rubbers can often produce exciting races with that end-of-term feeling. The good news is that we have three different cars in the top three on the grid. The bad news is that Max Verstappen, who sits on pole, is going to take some beating today.
He was just over a tenth of a second ahead of Sebastian Vettel's Ferrari and just under two tenths away from Lewis Hamilton in third. It was a decent effort from both Vettel and Hamilton but neither of them had enough to challenge the supreme Verstappen, who was quickest in Q1, Q2 and Q3.
Here's what he had to say after his second pole position of the season yesterday.
I’m very happy with pole here today and the car and engine were performing really strongly together. We made a few improvements overnight and even after FP3 we made some final touches to the car and it really came alive in qualifying. Straight away from Q1 the car was flying and even though Q3 was a little more tricky as the temperature increased the car still felt good. Going purple in the middle sector and to be on pole by over a tenth here is a strong performance for us and Honda. Normally we have a quick race car so hopefully that will be the same tomorrow and I really enjoy driving on this track. I’m expecting an exciting and hopefully an enjoyable race, so now we just have to finish it off tomorrow.
Vettel, meanwhile, is reasonably confident of his chances in the race, but seemed concerned about tyre wear. Ferrari are on much better form here than in Austin two weeks ago, but whether they can continue that through the race remains to be seen.
We improved the car, it felt better and it was coming alive in quali, I am reasonably optimistic that we are in good shape for the race, but we will have to wait and see. It is supposed to be a bit warmer and it will be important to look after the tyres and to make the right strategy calls.
As ever, I'll be here for the next few hours to take you through all the build-up, live updates and reaction from the Brazilian GP.


(). :â€". COVID- al.. immune {border-style px;} #ffffff;} influenza patients disease response data inflammatory risk diabetes effects increased infected mortality respiratory Available associated clinical coronavirus cytokine infection. px; {font-family Chinese Diabetes Italy March font-size intestinal observed release viral ./nu Nutrients. at: diet dietary double; function obesity online virus (), Clinical Immunol. acute anti-inflammatory border-color border-width cases common health hospitalization including infection infections inflammation patients, polyphenols pro-inflammatory pulmonary rate role showed solid; studies syndrome {font-style {font-weight (COVID-) .collab: April COVID-. Data Italian Mol Wuhan, [Epub adults ahead antiviral bioactive bold cells chronic courier; cytokines em; evidence far healthy high inflammation, lung nutritional outbreak pandemic particularly people potential print]. pt;} severe severity storm systemic tissue treatment type weight


| 002:277 Khan | : |
Truly those who believe, and do deeds of righteousness, and perform As-Salat (Iqamat-as- Salat), and give Zakat, they will have their reward with their Lord. On them shall be no fear, nor shall they grieve. |
| 002:277 Maulana | : |
Those who believe and do good deeds and keep up prayer and pay the poor-rate , their reward is with their Lord; and they have no fear, nor shall they grieve. |
| 002:277 Pickthal | : |
Lo! those who believe and do good works and establish worship and pay the poor-due, their reward is with their Lord and there shall no fear come upon them neither shall they grieve. |
| 002:277 Rashad | : |
Those who believe and lead a righteous life, and observe the Contact Prayers (Salat), and give the obligatory charity (Zakat), they receive their recompense from their Lord; they will have nothing to fear, nor will they grieve. |
| 002:277 Sarwar | : |
The righteously striving believers who are steadfast in their prayers and pay the zakat, will receive their reward from God. They will have no fear nor will they grieve. |
| 002:277 Shakir | : |
Surely they who believe and do good deeds and keep up prayer and pay the poor-rate they shall have their reward from their Lord, and they shall have no fear, nor shall they grieve. |
| 002:277 Sherali | : |
Surely, those, who believe and do good deeds, and observe Prayer and pay the Zakat, shall have their reward from their Lord, and no fear shall come on them, nor shall they grieve. |
| 002:277 Yusufali | : |
Those who believe, and do deeds of righteousness, and establish regular prayers and regular charity, will have their reward with their Lord: on them shall be no fear, nor shall they grieve. |
Concepts/Themes Covered: أركان الإسلام > الصلاة > أداء الصلاة > الحض عليها Pillars of Islam> The Prayers>Performing the Prayers> The Incitement to Pray أركان الإسلام > الزكاة والصدقات Pillars of Islam> Due Alms and Charities الإيمان > الإيمان بالله > الإيمان والعمل Faith> Belief In Allah> The Faith and the Action الإيمان > المؤمنون > لا خوف عليهم Faith> The Believers> There is no Fear on them الإيمان > المؤمنون > وعده إياهم Faith> The Believers> His Promise to them العمل > العمل الصالح > الدعوة إلى العمل الصالح Action(Work)> The Good Deeds>The Call for Good Deeds العمل > العمل الطالح > في المال > الربا Action(Work)> Bad Deeds>In Earning Money>Usury الإنسان والعلاقات الأخلاقية > الأخلاق الذميمة > الربا Man and The Moral Relations>The Dispraised Morals>Usury تنظيم العلاقات المالية > الزكاة Organizing Financial Relationships>Due Alms
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


Black Marketeer of Mammon:
Why are you being so indecisive? Stop deliberating and choose one already!
"I am finished thinking."


LOVE AND OTHER CATASTROPHES A film review by Peer Wandel Hansen Copyright 1997 Peer Wandel Hansen
Rating (0-10) 8.5
Directed by Emma-Kate Croghan Written by Helen Bandis, Yael Bergman, Emma-Kate Croghan Cast: Alice Garner, Frances O'Conner, Matthew Day, Matthew Dyktynski, Radha Mitchell, Kym Gyngell and others Cinematography by Justin Brickle Running Time 82 minutes
This campus-story is situated around Melbourne University with a setting of confused students and their problems with school, sex, money and drugs. It is difficult to outline a plot but it all fit together, nice and easy. It is a fresh movie with an unknown but very talented cast. The atmosphere is sort of a mix between 'Trainspotting' (especially in the beginning) and 'Reality Bites'.
Michael (Matthew Day), a shy medical student, has difficulty getting along with his room-mates, they seem to party and smoking dope round the clock. Finally one morning he has had it with them, while Michael is brushing his teeth a guy rushes into the bathroom and vomit in the wash basin. Michael goes househunting for a room but no one seems interested to share their flat with a med. student. At the same time Alice (Alice Garner) and Mia (Frances O'Conner) is looking for a new room mate to their three-room apartment. Mia doesn't want her girlfriend Danni (Radha Mitchell) to have the vacant room, she has other plans with her professor Leach (Kym Gyngell). Michael learn about the vacant room from Ari (Matthew Dyktynski), a fellow student, part-time gigolo and a friend of Mia. During his inter- view for the apartment, Danni find she is not moving in with Mia and find another lover.
Alice has problems of her own. Her thesis on Doris Day as a feminist Warrior is long time overdue and she is always on the run from her guidance counsellor who want to see some results. She is also looking for a boyfriend but her standards is a bit high, she has not had any luck in three years. Ari seems to fit her demands but he can't quite comply to the honesty part, his part-time gigolo job is in the way and he is not that interested in Alice.
Mia decides to change department at the University, it is too painful to have professor Leach as a counsellor. He is oppose to the plan and Alice must fight the bureaucracy which is complicated by the sudden death of the doughnut-addicted Leach. By the help of Alice and Ari they break in to the late professor Leachs office and stamp the transfer form.
At the end Alice and Mia is throwing a big party. All the girls are attracted to Ari, Michael on the other hand feels like the odd man out and find refuge at the bathroom. At the end Alice meet Michael and she realise that he is the one. Mia confide to Danni that their breakup was a mistake and ask her to move in.
I found Love And Other Catastrophes both refreshing and fun. The cast are brilliant and director Emma-Kate Croghan manages to control all the sub-stories with a steady hand in this day-in-the-university-life story. The cast are unknown here in europe except for Matthew Day (Muriel's Wedding). My favourite is Mia as the self-centred lesbian with a crush on her mentor and is always getting into hopeless situations.
The movie is apparently made for only $50,000 and shot in two weeks, a masterpiece in my mind. It is a pity that it has not received a wider audience. In Denmark it has only been shown at the NatFilFestival a total of 6 times and is not planned for further distribution.
Peer Wandel Hansen - Copenhagen, Denmark
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


60+ spinners for use in the terminal
The list of spinners is just a JSON file and can be used wherever.
You probably want to use one of these spinners through the ora
module.
$ npm install cli-spinners
```js const cliSpinners = require(‘cli-spinners’);
console.log(cliSpinners.dots); /* { interval: 80, frames: [‘⠋’, ‘⠙’, ‘⠹’, ‘⠸’, ‘⠼’, ‘⠴’, ‘⠦’, ‘⠧’, ‘⠇’, ‘⠏’] } */ ```
The header GIF is outdated. See all the spinner at once or one at the time.
Each spinner comes with a recommended interval
and an array of frames
.
MIT © Sindre Sorhus


# python # quick setup ```bash (for f in $(ls -rlt|awk '{print $9}' );\ do echo '```python';cat $f;echo && echo '```'&&echo '---'; done; ) ``` --- ## printing and variables ```python print "I will now count my chickens:" print "Hens", 25 + 30 / 6 print "Roosters", 100 - 25 * 3 % 4 print "Now I will count the eggs:" print 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 print "Is it true that 3 + 2 < 5 - 7?" print 3 + 2 < 5 - 7 print "What is 3 + 2?", 3 + 2 print "What is 5 - 7?", 5 - 7 print "Oh, that's why it's False." print "How about some more." print "Is it greater?", 5 > -2 print "Is it greater or equal?", 5 >= -2 print "Is it less or equal?", 5 <= -2 ``` ```python cars = 100 space_in_a_car = 4.0 drivers = 30 passengers = 90 cars_not_driven = cars - drivers cars_driven = drivers carpool_capacity = cars_driven * space_in_a_car average_passengers_per_car = passengers / cars_driven print "There are", cars, "cars available." print "There are only", drivers, "drivers available." print "There will be", cars_not_driven, "empty cars today." print "We can transport", carpool_capacity, "people today." print "We have", passengers, "to carpool today." print "We need to put about", average_passengers_per_car, "in each car." ``` --- ## printing and variables ```python my_name = 'Zed A. Shaw' my_age = 35 # not a lie my_height = 74 # inches my_weight = 180 # lbs my_eyes = 'Blue' my_teeth = 'White' my_hair = 'Brown' print "Let's talk about %s." % my_name print "He's %d inches tall." % my_height print "He's %d pounds heavy." % my_weight print "Actually that's not too heavy." print "He's got %s eyes and %s hair." % (my_eyes, my_hair) print "His teeth are usually %s depending on the coffee." % my_teeth # this line is tricky, try to get it exactly right print "If I add %d, %d, and %d I get %d." % ( my_age, my_height, my_weight, my_age + my_height + my_weight) ``` ```python x = "There are %d types of people." % 10 binary = "binary" do_not = "don't" y = "Those who know %s and those who %s." % (binary, do_not) print x print y print "I said: %r." % x print "I also said: '%s'." % y hilarious = False joke_evaluation = "Isn't that joke so funny?! %r" print joke_evaluation % hilarious w = "This is the left side of..." e = "a string with a right side." print w + e ``` --- ## printing and variables ```python print "Mary had a little lamb." print "Its fleece was white as %s." % 'snow' print "And everywhere that Mary went." print "." * 10 # what'd that do? end1 = "C" end2 = "h" end3 = "e" end4 = "e" end5 = "s" end6 = "e" end7 = "B" end8 = "u" end9 = "r" end10 = "g" end11 = "e" end12 = "r" # watch that comma at the end. try removing it to see what happens print end1 + end2 + end3 + end4 + end5 + end6, print end7 + end8 + end9 + end10 + end11 + end12 ``` --- ## formating text ```python print "Hello World!" print "Hello Again" print "I like typing this." print "This is fun." print 'Yay! Printing.' print "I'd much rather you 'not'." print 'I "said" do not touch this.' ``` ```python formatter = "%r %r %r %r" print formatter % (1, 2, 3, 4) print formatter % ("one", "two", "three", "four") print formatter % (True, False, False, True) print formatter % (formatter, formatter, formatter, formatter) print formatter % ( "I had this thing.", "That you could type up right.", "But it didn't sing.", "So I said goodnight." ) ``` ```python # Here's some new strange stuff, remember type it exactly. days = "Mon Tue Wed Thu Fri Sat Sun" months = "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug" print "Here are the days: ", days print "Here are the months: ", months print """ There's something going on here. With the three double-quotes. We'll be able to type as much as we like. Even 4 lines if we want, or 5, or 6. """ ``` --- ## input text ```python print "How old are you?", age = raw_input() print "How tall are you?", height = raw_input() print "How much do you weigh?", weight = raw_input() print "So, you're %r old, %r tall and %r heavy." % (age, height, weight) ``` ```python from sys import argv script, first, second, third = argv print "The script is called:", script print "Your first variable is:", first print "Your second variable is:", second print "Your third variable is:", third ``` ```python from sys import argv script, user_name = argv prompt = '> ' print "Hi %s, I'm the %s script." % (user_name, script) print "I'd like to ask you a few questions." print "Do you like me %s?" % user_name likes = raw_input(prompt) print "Where do you live %s?" % user_name lives = raw_input(prompt) print "What kind of computer do you have?" computer = raw_input(prompt) print """ Alright, so you said %r about liking me. You live in %r. Not sure where that is. And you have a %r computer. Nice. """ % (likes, lives, computer) ``` --- ## file ```python from sys import argv script, filename = argv txt = open(filename) print "Here's your file %r:" % filename print txt.read() print "Type the filename again:" file_again = raw_input("> ") txt_again = open(file_again) print txt_again.read() ``` ```python from sys import argv script, filename = argv print "We're going to erase %r." % filename print "If you don't want that, hit CTRL-C (^C)." print "If you do want that, hit RETURN." raw_input("?") print "Opening the file..." target = open(filename, 'w') print "Truncating the file. Goodbye!" target.truncate() print "Now I'm going to ask you for three lines." line1 = raw_input("line 1: ") line2 = raw_input("line 2: ") line3 = raw_input("line 3: ") print "I'm going to write these to the file." target.write(line1) target.write("\n") target.write(line2) target.write("\n") target.write(line3) target.write("\n") print "And finally, we close it." target.close() ``` --- ## argv ```python from sys import argv from os.path import exists script, from_file, to_file = argv print "Copying from %s to %s" % (from_file, to_file) # we could do these two on one line too, how? in_file = open(from_file) indata = in_file.read() print "The input file is %d bytes long" % len(indata) print "Does the output file exist? %r" % exists(to_file) print "Ready, hit RETURN to continue, CTRL-C to abort." raw_input() out_file = open(to_file, 'w') out_file.write(indata) print "Alright, all done." out_file.close() in_file.close() ``` ```python # this one is like your scripts with argv def print_two(*args): arg1, arg2 = args print "arg1: %r, arg2: %r" % (arg1, arg2) # ok, that *args is actually pointless, we can just do this def print_two_again(arg1, arg2): print "arg1: %r, arg2: %r" % (arg1, arg2) # this just takes one argument def print_one(arg1): print "arg1: %r" % arg1 # this one takes no arguments def print_none(): print "I got nothin'." print_two("Zed","Shaw") print_two_again("Zed","Shaw") print_one("First!") print_none() ``` --- ## functions ```python def cheese_and_crackers(cheese_count, boxes_of_crackers): print "You have %d cheeses!" % cheese_count print "You have %d boxes of crackers!" % boxes_of_crackers print "Man that's enough for a party!" print "Get a blanket.\n" print "We can just give the function numbers directly:" cheese_and_crackers(20, 30) print "OR, we can use variables from our script:" amount_of_cheese = 10 amount_of_crackers = 50 cheese_and_crackers(amount_of_cheese, amount_of_crackers) print "We can even do math inside too:" cheese_and_crackers(10 + 20, 5 + 6) print "And we can combine the two, variables and math:" cheese_and_crackers(amount_of_cheese + 100, amount_of_crackers + 1000) ``` --- ## functions ```python from sys import argv script, input_file = argv def print_all(f): print f.read() def rewind(f): f.seek(0) def print_a_line(line_count, f): print line_count, f.readline() current_file = open(input_file) print "First let's print the whole file:\n" print_all(current_file) print "Now let's rewind, kind of like a tape." rewind(current_file) print "Let's print three lines:" current_line = 1 print_a_line(current_line, current_file) current_line = current_line + 1 print_a_line(current_line, current_file) current_line = current_line + 1 print_a_line(current_line, current_file) ``` --- ## functions ```python def add(a, b): print "ADDING %d + %d" % (a, b) return a + b def subtract(a, b): print "SUBTRACTING %d - %d" % (a, b) return a - b def multiply(a, b): print "MULTIPLYING %d * %d" % (a, b) return a * b def divide(a, b): print "DIVIDING %d / %d" % (a, b) return a / b print "Let's do some math with just functions!" age = add(30, 5) height = subtract(78, 4) weight = multiply(90, 2) iq = divide(100, 2) print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq) # A puzzle for the extra credit, type it in anyway. print "Here is a puzzle." what = add(age, subtract(height, multiply(weight, divide(iq, 2)))) print "That becomes: ", what, "Can you do it by hand?" ``` --- ## functions ```python print "Let's practice everything." print 'You\'d need to know \'bout escapes with \\ that do \n newlines and \t tabs.' poem = """ \tThe lovely world with logic so firmly planted cannot discern \n the needs of love nor comprehend passion from intuition and requires an explanation \n\t\twhere there is none. """ print "--------------" print poem print "--------------" five = 10 - 2 + 3 - 6 print "This should be five: %s" % five def secret_formula(started): jelly_beans = started * 500 jars = jelly_beans / 1000 crates = jars / 100 return jelly_beans, jars, crates start_point = 10000 beans, jars, crates = secret_formula(start_point) print "With a starting point of: %d" % start_point print "We'd have %d beans, %d jars, and %d crates." % (beans, jars, crates) start_point = start_point / 10 print "We can also do that this way:" print "We'd have %d beans, %d jars, and %d crates." % secret_formula(start_point) ``` --- ## python API 1/2 ```python def break_words(stuff): """This function will break up words for us.""" words = stuff.split(' ') return words def sort_words(words): """Sorts the words.""" return sorted(words) def print_first_word(words): """Prints the first word after popping it off.""" word = words.pop(0) print word def print_last_word(words): """Prints the last word after popping it off.""" word = words.pop(-1) print word def sort_sentence(sentence): """Takes in a full sentence and returns the sorted words.""" words = break_words(sentence) return sort_words(words) def print_first_and_last(sentence): """Prints the first and last words of the sentence.""" words = break_words(sentence) print_first_word(words) print_last_word(words) def print_first_and_last_sorted(sentence): """Sorts the words then prints the first and last one.""" words = sort_sentence(sentence) print_first_word(words) print_last_word(words) ``` --- ## python API 2/2 ```python >>> import ex25 >>> sentence = "All good things come to those who wait." >>> words = ex25.break_words(sentence) >>> words ['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait.'] >>> sorted_words = ex25.sort_words(words) >>> sorted_words ['All', 'come', 'good', 'things', 'those', 'to', 'wait.', 'who'] >>> ex25.print_first_word(words) All >>> ex25.print_last_word(words) wait. >>> wrods ``` --- ##if ```python people = 20 cats = 30 dogs = 15 if people < cats: print "Too many cats! The world is doomed!" if people > cats: print "Not many cats! The world is saved!" if people < dogs: print "The world is drooled on!" if people > dogs: print "The world is dry!" dogs += 5 if people >= dogs: print "People are greater than or equal to dogs." if people <= dogs: print "People are less than or equal to dogs." if people == dogs: print "People are dogs." ``` --- ##elif ```python people = 30 cars = 40 buses = 15 if cars > people: print "We should take the cars." elif cars < people: print "We should not take the cars." else: print "We can't decide." if buses > cars: print "That's too many buses." elif buses < cars: print "Maybe we could take the buses." else: print "We still can't decide." if people > buses: print "Alright, let's just take the buses." else: print "Fine, let's stay home then." ``` --- ## for and lists ```python the_count = [1, 2, 3, 4, 5] fruits = ['apples', 'oranges', 'pears', 'apricots'] change = [1, 'pennies', 2, 'dimes', 3, 'quarters'] # this first kind of for-loop goes through a list for number in the_count: print "This is count %d" % number # same as above for fruit in fruits: print "A fruit of type: %s" % fruit # also we can go through mixed lists too # notice we have to use %r since we don't know what's in it for i in change: print "I got %r" % i # we can also build lists, first start with an empty one elements = [] # then use the range function to do 0 to 5 counts for i in range(0, 6): print "Adding %d to the list." % i # append is a function that lists understand elements.append(i) # now we can print them out too for i in elements: print "Element was: %d" % i ``` --- ##while ```python i = 0 numbers = [] while i < 6: print "At the top i is %d" % i numbers.append(i) i = i + 1 print "Numbers now: ", numbers print "At the bottom i is %d" % i print "The numbers: " for num in numbers: print num ``` ```python ten_things = "Apples Oranges Crows Telephone Light Sugar" print "Wait there's not 10 things in that list, let's fix that." stuff = ten_things.split(' ') more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"] while len(stuff) != 10: next_one = more_stuff.pop() print "Adding: ", next_one stuff.append(next_one) print "There's %d items now." % len(stuff) print "There we go: ", stuff print "Let's do some things with stuff." print stuff[1] print stuff[-1] # whoa! fancy print stuff.pop() print ' '.join(stuff) # what? cool! print '#'.join(stuff[3:5]) # super stellar! ``` --- ## dicts or hashs 1/2 ```python # create a mapping of state to abbreviation states = { 'Oregon': 'OR', 'Florida': 'FL', 'California': 'CA', 'New York': 'NY', 'Michigan': 'MI' } # create a basic set of states and some cities in them cities = { 'CA': 'San Francisco', 'MI': 'Detroit', 'FL': 'Jacksonville' } # add some more cities cities['NY'] = 'New York' cities['OR'] = 'Portland' # print out some cities print '-' * 10 print "NY State has: ", cities['NY'] print "OR State has: ", cities['OR'] # print some states print '-' * 10 print "Michigan's abbreviation is: ", states['Michigan'] print "Florida's abbreviation is: ", states['Florida'] # do it by using the state then cities dict print '-' * 10 print "Michigan has: ", cities[states['Michigan']] print "Florida has: ", cities[states['Florida']] ``` --- ## dicts or hashs 2/2 ```python # print every state abbreviation print '-' * 10 for state, abbrev in states.items(): print "%s is abbreviated %s" % (state, abbrev) # print every city in state print '-' * 10 for abbrev, city in cities.items(): print "%s has the city %s" % (abbrev, city) # now do both at the same time print '-' * 10 for state, abbrev in states.items(): print "%s state is abbreviated %s and has city %s" % ( state, abbrev, cities[abbrev]) print '-' * 10 # safely get a abbreviation by state that might not be there state = states.get('Texas', None) if not state: print "Sorry, no Texas." # get a city with a default value city = cities.get('TX', 'Does Not Exist') print "The city for the state 'TX' is: %s" % city ``` --- ## class ```python # # dict style # mystuff['apples'] # # module style # mystuff.apples() # print mystuff.tangerine # # class style # thing = MyStuff() # thing.apples() # print thing.tangerine class Song(object): def __init__(self, lyrics): self.lyrics = lyrics def sing_me_a_song(self): for line in self.lyrics: print line happy_bday = Song(["Happy birthday to you", "I don't want to get sued", "So I'll stop right there"]) bulls_on_parade = Song(["They rally around the family", "With pockets full of shells"]) happy_bday.sing_me_a_song() bulls_on_parade.sing_me_a_song() ``` --- ## snippet 1/3 ```python import random from urllib import urlopen import sys WORD_URL = "http://learncodethehardway.org/words.txt" WORDS = [] PHRASES = { "class %%%(%%%):": "Make a class named %%% that is-a %%%.", "class %%%(object):\n\tdef __init__(self, ***)" : "class %%% has-a __init__ that takes self and *** parameters.", "class %%%(object):\n\tdef ***(self, @@@)": "class %%% has-a function named *** that takes self and @@@ parameters.", "*** = %%%()": "Set *** to an instance of class %%%.", "***.***(@@@)": "From *** get the *** function, and call it with parameters self, @@@.", "***.*** = '***'": "From *** get the *** attribute and set it to '***'." } # do they want to drill phrases first PHRASE_FIRST = False if len(sys.argv) == 2 and sys.argv[1] == "english": PHRASE_FIRST = True # load up the words from the website for word in urlopen(WORD_URL).readlines(): WORDS.append(word.strip()) ``` --- ## snippet 2/3 ```python def convert(snippet, phrase): class_names = [w.capitalize() for w in random.sample(WORDS, snippet.count("%%%"))] other_names = random.sample(WORDS, snippet.count("***")) results = [] param_names = [] for i in range(0, snippet.count("@@@")): param_count = random.randint(1,3) param_names.append(', '.join(random.sample(WORDS, param_count))) for sentence in snippet, phrase: result = sentence[:] # fake class names for word in class_names: result = result.replace("%%%", word, 1) # fake other names for word in other_names: result = result.replace("***", word, 1) # fake parameter lists for word in param_names: result = result.replace("@@@", word, 1) results.append(result) return results ``` --- ## snippet 3/3 ```python # keep going until they hit CTRL-D try: while True: snippets = PHRASES.keys() random.shuffle(snippets) for snippet in snippets: phrase = PHRASES[snippet] question, answer = convert(snippet, phrase) if PHRASE_FIRST: question, answer = answer, question print question raw_input("> ") print "ANSWER: %s\n\n" % answer except EOFError: print "\nBye" ``` --- ## class ```python class Map(object): scenes = { 'central_corridor': CentralCorridor(), 'laser_weapon_armory': LaserWeaponArmory(), 'the_bridge': TheBridge(), 'escape_pod': EscapePod(), 'death': Death() } def __init__(self, start_scene): self.start_scene = start_scene print "start_scene in __init__", self.start_scene def next_scene(self, scene_name): print "start_scene in next_scene" val = Map.scenes.get(scene_name) print "next_scene returns", val def opening_scene(self): return self.next_scene(self.start_scene) ``` --- ## composition or heritage ```python class Other(object): def override(self): print "OTHER override()" def implicit(self): print "OTHER implicit()" def altered(self): print "OTHER altered()" class Child(object): def __init__(self): self.other = Other() def implicit(self): self.other.implicit() def override(self): print "CHILD override()" def altered(self): print "CHILD, BEFORE OTHER altered()" self.other.altered() print "CHILD, AFTER OTHER altered()" son = Child() son.implicit() son.override() son.altered() ``` --- ## making sentence 1/2 ```python class ParserError(Exception): pass class Sentence(object): def __init__(self, subject, verb, object): # remember we take ('noun','princess') tuples and convert them self.subject = subject[1] self.verb = verb[1] self.object = object[1] def peek(word_list): if word_list: word = word_list[0] return word[0] else: return None def match(word_list, expecting): if word_list: word = word_list.pop(0) if word[0] == expecting: return word else: return None else: return None def skip(word_list, word_type): while peek(word_list) == word_type: match(word_list, word_type) def parse_verb(word_list): skip(word_list, 'stop') if peek(word_list) == 'verb': return match(word_list, 'verb') else: raise ParserError("Expected a verb next.") ``` --- ## making sentence 2/2 ```python def parse_object(word_list): skip(word_list, 'stop') next = peek(word_list) if next == 'noun': return match(word_list, 'noun') if next == 'direction': return match(word_list, 'direction') else: raise ParserError("Expected a noun or direction next.") def parse_subject(word_list, subj): verb = parse_verb(word_list) obj = parse_object(word_list) return Sentence(subj, verb, obj) def parse_sentence(word_list): skip(word_list, 'stop') start = peek(word_list) if start == 'noun': subj = match(word_list, 'noun') return parse_subject(word_list, subj) elif start == 'verb': # assume the subject is the player then return parse_subject(word_list, ('noun', 'player')) else: raise ParserError("Must start with subject, object, or verb not: %s" % start) ``` --- ## website using lpthw.web ```bash sudo pip install lpthw.web ``` ```html $def with (greeting)
Gothons Of Planet Percal #25
$if greeting: I just wanted to say
$greeting
. $else:
Hello
, world! ``` ```python import web urls = ( '/', 'Index' ) app = web.application(urls, globals()) render = web.template.render('templates/') class Index(object): def GET(self): greeting = "Hello World" return render.index(greeting = greeting) if __name__ == "__main__": app.run() ``` --- ## website with autotests 1/4 ```html
Sample Web Form
Fill Out This Form
A Greeting:
Your Name:
``` ```python from nose.tools import * import re def assert_response(resp, contains=None, matches=None, headers=None, status="200"): assert status in resp.status, "Expected response %r not in %r" % (status, resp.status) if status == "200": assert resp.data, "Response data is empty." if contains: assert contains in resp.data, "Response does not contain %r" % contains if matches: reg = re.compile(matches) assert reg.matches(resp.data), "Response does not match %r" % matches if headers: assert_equal(resp.headers, headers) ``` --- ## website with autotests 2/4 ```python from nose.tools import * from bin.app import app from tests.tools import assert_response def test_index(): # check that we get a 404 on the / URL resp = app.request("/") assert_response(resp, status="404") # test our first GET request to /hello resp = app.request("/hello") assert_response(resp) # make sure default values work for the form resp = app.request("/hello", method="POST") assert_response(resp, contains="Nobody") # test that we get expected values data = {'name': 'Zed', 'greet': 'Hola'} resp = app.request("/hello", method="POST", data=data) assert_response(resp, contains="Zed") ``` --- ## website with autotests 3/4 ```python import web urls = ( '/hello', 'Index' ) app = web.application(urls, globals()) render = web.template.render('templates/', base="layout") class Index(object): def GET(self): return render.hello_form() def POST(self): form = web.input(name="Nobody", greet="Hello") greeting = "%s, %s" % (form.greet, form.name) return render.index(greeting = greeting) if __name__ == "__main__": app.run() ``` --- ## website with autotests 4/4 ```html $def with (greeting) $if greeting: I just wanted to say
$greeting
. $else:
Hello
, world! ``` ```html
Fill Out This Form
A Greeting:
Your Name:
``` ```html $def with (content)
Gothons From Planet Percal #25
$:content ```


Ruby is great for building interactive web applications. It's popular with smaller companies and startups, so if you prefer working with a very small team and getting a product off the ground quickly, it may be a great fit!
You can use PHP to build content management systems and to build out sites for brands, businesses and organizations. Oftentimes, agencies that build websites for clients use PHP.
With Java, you can build Android user interfaces! Like C#, Java is also popular with bigger, enterprise-level businesses. If ou're interested in working for a bigger business, this may be a great fit for you!
CSS allows you to delve further into making websites look great and function even better. If you enjoy obsessing over the layout and styles of a webpage, then this may be the right track for you. Since you'll be working with designers, it will bring you one step closer to being that person who hangs out with the stylish art types.
With C# and .NET, you can build internal software for businesses! Big businesses tend to like C#, and the use of .NET is quickly growing.


This is restricted content that only an authenticated user should be able to get access to
Ergo; you should be logged in now.


Whenever i have hardship and needed solution; i will try to see if i can create an APP. This also allows me to have hands-on over several technologies i used to work with
| Project | Details |
|---|---|
Complan |
I have a not to work on and all my tasks are time-sensitive. so i kind of created a multi-task timer. each task will have timer of its own. this tool is Angular and uses Local storage and webSQL as backend. |
SimpleTools |
Angular JS 1.x based Andoird app solution with AWS lambda & AWS Dynamo DB as backend. Idea is to have a android app as the host and keep including new application as microsites. |
House Sigma Automation |
This is export those searches from house sigma site. the site preserves settings for each user; this helps us indirectly to avoid maintaining. |
All thes tools are CICD enabled from Github


Problems trying to resolve the conflict between the two major realms of Classical physics: Newtonian mechanics
Problems trying to resolve the conflict between the two major realms of Classical physics: Newtonian mechanics
This proved to be impossible using concepts of space and time. Einstein new view of time first and then
This proved to be impossible using concepts of space and time. Einstein new view of time first and then
Problems trying to resolve the conflict between the two major realms of Classical physics: Newtonian mechanics
Most calendars are designed for teams. Slate is designed for freelancers who want a simple way to plan their schedule.
Problems trying to resolve the conflict between the two major realms of Classical physics: Newtonian mechanics


Don't use follows more than 100 times per day.
Follow All
Like All
Retweet All
Stop


Redefining the
Luxury Of Youth
With Advanced Swiss Marine Supplement
The Anti-Aging Secrets of the Rich and Famous
CELERGEN is a powerful, multi-faceted Cell Nutrition system that provides essential nutrition at the cellular level. As a result of the inherent attributes of the fish protein extracts and selenium which protects cells from oxidative stress, Celergen can make you feel and look younger.
The Anti-Aging Secrets of the Rich and Famous
Do you know that Cell Therapy can help fight aging?
We all aspire for a vibrant and energetic life even as we age. Throughout history, mankind has desperately searched for the proverbial “Fountain of Youth” and the “Elixir of Life”. Aging is inevitable, but now with the latest advancement in Cell Therapy, aging can be arrested significantly. Show Business celebrities and the rich and famous, have been able to demonstrate to the world that the aging process can be prevented. They look ageless. They exude an aura of youth and energy irrespective of their age.
A Celebrity’s Secret Weapon to Beautiful Skin
A plastic surgeon's worst enemy. A Celebrity's Secret weapon for Beautiful Skin
We all aspire for a vibrant and energetic life even as we age. Throughout history, mankind has desperately searched for the proverbial “Fountain of Youth” and the “Elixir of Life”. Aging is inevitable, but now with the latest advancement in Cell Therapy, aging can be arrested significantly. Show Business celebrities and the rich and famous, have been able to demonstrate to the world that the aging process can be prevented. They look ageless. They exude an aura of youth and energy irrespective of their age.
A great boost for your Energy & Stamina
A great boost for your Energy & Stamina
We all aspire for a vibrant and energetic life even as we age. Throughout history, mankind has desperately searched for the proverbial “Fountain of Youth” and the “Elixir of Life”. Aging is inevitable, but now with the latest advancement in Cell Therapy, aging can be arrested significantly. Show Business celebrities and the rich and famous, have been able to demonstrate to the world that the aging process can be prevented. They look ageless. They exude an aura of youth and energy irrespective of their age.
Proven Natural Remedy to Manage Osteoarthritis Pain
Do your parents have Osteopotosis?
We all aspire for a vibrant and energetic life even as we age. Throughout history, mankind has desperately searched for the proverbial “Fountain of Youth” and the “Elixir of Life”. Aging is inevitable, but now with the latest advancement in Cell Therapy, aging can be arrested significantly. Show Business celebrities and the rich and famous, have been able to demonstrate to the world that the aging process can be prevented. They look ageless. They exude an aura of youth and energy irrespective of their age.
Improved Sexual Health
Is Sexual health important to you?
We all aspire for a vibrant and energetic life even as we age. Throughout history, mankind has desperately searched for the proverbial “Fountain of Youth” and the “Elixir of Life”. Aging is inevitable, but now with the latest advancement in Cell Therapy, aging can be arrested significantly. Show Business celebrities and the rich and famous, have been able to demonstrate to the world that the aging process can be prevented. They look ageless. They exude an aura of youth and energy irrespective of their age.
A Personal Trainer for your Metabolism
A Personal Trainer for your Metabolism
We all aspire for a vibrant and energetic life even as we age. Throughout history, mankind has desperately searched for the proverbial “Fountain of Youth” and the “Elixir of Life”. Aging is inevitable, but now with the latest advancement in Cell Therapy, aging can be arrested significantly. Show Business celebrities and the rich and famous, have been able to demonstrate to the world that the aging process can be prevented. They look ageless. They exude an aura of youth and energy irrespective of their age.
Testimonials
Follow Us in Social Media
Youth, Vitality and Beauty
The Only Swiss Marine Cell Therapy Supplement Ageless Beauty from Inside Out, Celergen.


barbara ruth gunion
Democrat
Independent Business Intelligence Consultant currently in contract with Datateer. Not on resume is a part time position with the 2020 Census Bureau as an Enumerator.
I have been working as an IT database engineer and business intelligence consultant for over 10 years. In 2019 I earned an IDELT 120 hour certificate for English Language Teaching. I am on break from volunteering as an assistant ELL teacher at Eloise May Library. My degree is Bachelors in Fine Arts from the University of Colorado in Denver (1997). I completed an internship at Asian Art Coordinating Council which involved writing press releases and helping to set up shows.
80112
I have volunteered for the Arapahoe Democratic Party from time to time since 2017. I also have been a co-captain for an organization called Sister District which is not Democrat but does support Democrat state house candidates across the country. I give small donor amounts to various candidates and groups. Most of it goes to local candidates. Some goes to causes or federal level candidates. Campaigns where I have volunteered: Jason Crow Amy Padden Proposition 115 Nicole Johnston Hillary Clinton
Arapahoe Democrats, Sister District, The Learning Source, Code for Denver
As co-captain for Sister District I helped recruit members and organized an event to introduce the organization to local volunteers. I advocate for the candidate by educating the people about what they support and how they will represent them. Primary responsibility as a Census Enumerator part is to educate and persuade reluctant people to fill out the Census. There are varied types of responses from not seeing the value to fear. My case success rate was over 2/hour which is very high. As a volunteer for English Conversation Circle I led group lessons which often including being an advocate for the United States and Colorado.
I would like to serve for both altruistic and personal reasons. Having fair district boundaries is important for a healthy democracy. I do not believe it is better to have one set of voices in government. All geographical areas and diverse people should be represented. I am excited to see how this progresses as an independent commission and I wish to be a part of it. On a personal level I have found that I enjoy working with the public. I also have close to a hobby interest in learning about the constitution and how it has shaped this country.
Agreement is critical to success. Recognizing and addressing the needs of areas outside your own builds an environment of trust and engagement. My experience as a consultant and teacher has taught me to look to the needs of the organization without involving my own bias except for personal understanding. I work with many different clients and businesses with different goals. I volunteer with diverse populations from all over the world. It is my position to be curious about their needs and respond with understanding while still grounded in facts.
I have many year experience as a data analyst and engineer. One strength is my ability to troubleshoot and find solutions where it may not seem possible. To do this I take steps to understand and describe the problem, ask questions and then logically try out ideas. Sometimes you get lucky and there is one solution. Most of the time you need to decide on the best solution.
Female


Current Projects
These projects are currently being devloped and updated
Past Projects
These projects are fully complete and will no longer be updated
Future Projects
These projects have not begun devlopment
Other Projects
Projects that our developers worked on alone or with people outside the company


What are the various transformers?
A transformer is a module with a specific goal that is ran against your code to transform it. For example,
the es6.arrowFunctions
transformer has the very specific goal of transforming ES6 Arrow Functions
to the equivalent ES3. This allows transformers to be completely unaware of the other transformations happening
so that you can easily chain them together.
Disabled by default
These are only usable if you enable staged support. See experimental usage for information.
Babel also includes some optional transformers for those who want to take their code that extra mile.
These are disabled by default, see usage for instructions on how to enable them.
require("babel").transform("code", { optional: ["transformerName"] });
$ babel --optional transformerName script.js


{% extends "base_with_margins.html" %} {% load extras %} {% load lametro_extras %} {% load adv_cache %} {% load staticfiles %} {% block title %}{{ person.name }}{% endblock %} {% block extra_css %} {% if map_geojson %} {% endif %} {% endblock %} {% block content %}
{% comment %} The Metro CEO does not sponsor reports or serve as a committee member. His/her/their detail view provides a bio, in lieu of the 'Sponsorhsips' and 'Committees' lists. {% endcomment %} {% if qualifying_post == 'Chief Executive Officer' %} {% include 'partials/person_ceo.html' %} {% else %}{% if qualifying_post %} {{ qualifying_post | appointment_label }} {% endif %}
{{ member_bio | safe }}
{% endif %} {% if map_geojson %}Credit: {{person.headshot_source}}
{% endif %}{% if qualifying_post %} {{ qualifying_post | appointment_label }} {% endif %}
Most recent actions sponsored by committees to which {{person.name}} belongs.
Learn more about committees to which {{person.name}} belongs and view all actions they sponsor.
{% else %}The committees to which {{person.name}} belongs has not sponsored actions during {{person.name}}'s membership.
{% endif %} {% endif %} {% if request.GET.view == 'committees' %}| Member of | Position |
|---|---|
| {{membership.organization}} | {{membership.role}} |


Sevenbridges requires browser support for SVG.
Sevenbridges interprets items in a data store as vertices or edges, based on the presence of a "type" field. Items with no type or an unrecognized type are ignored.
| type | meaning |
|---|---|
| vertex | item is a vertex |
| edge | item is an edge |
In vertex items, the following fields are recognized. All other fields are ignored. We assume that the data store is configured such that the identifier field is "id" and the label field is "label".
| field | meaning |
|---|---|
| id | a unique identifier |
| label | vertex label (optional) |
| href | hyperlink URI (optional) |
| weight | weight of vertex (default 1) |
| class | DOM class of vertex (optional) |
In edge items, the following fields are recognized. All other fields are ignored. We assume that the data store is configured such that the identifier field is "id" and the label field is "label".
| field | meaning |
|---|---|
| id | a unique identifier |
| label | edge label (optional) |
| source | identifier of source vertex |
| target | identifier of target vertex |
| weight | weight of edge (default: 1) |
| class | DOM class of edge (optional) |
By way of example, a simple graph is defined in example.json in a format suitable for a dojo.data.ItemFileWriteStore.
| Widget | Function |
|---|---|
| sevenbridges.EllipticalLayout | Layout vertices in an ellipse |
| sevenbridges.ForceDirectedLayout | Layout vertices using a force directed simulation |
| sevenbridges.FastForceDirectedLayout | A faster force directed layout |
| sevenbridges.RandomLayout | Layout vertices randomly |
The force directed layouts often provide esthetically pleasing graph layouts.
| Parameter | Semantics |
|---|---|
| store | underlying data store |
| layout | layout to apply |
| directed | directed graph (default: false) |


About
- ChromaWallet functions just like a normal Bitcoin wallet, but additionally it allows one to work with assets which are represented with colored coins, particularly to:
- Issue securities/tokens of any kind: shares, bonds, tickets, private currencies, smart property, etc.
- Send and receive them
- Trade on the build-in decentralized exchange
Information about ownership of colored coins is recorded directly in the Bitcoin blockchain, which means it is unforgeable and doesn't rely on any third-party server to keep valid records of ownership. Additionally, we plan to implement Bitcoin's advanced features, such as escrow, dispute mediation, trustless mixing and so on. Stay tuned!


- Thu 14 January 2021
- education
- Noah Sanders, Kevin Rong, Hao Huang, Celine Liang
- #oer, #education, #jupyter, #textbooks, #libretexts
Summary
During the fall quarter of 2020 the JupyterTeam attended JupyterCon and was able to make improvements to Thebe which our CKEditor Binder Plugin depends on. Furthermore, we expanded LibreTexts's CKEditor with a new Query Plugin to enable authors to embed interactive problems into their textbook pages for readers to solve. Finally, we went through most of the process of migrating the Flock kubernetes cluster to Galaxy, which contains many improvements.
JupyterCon 2020
Jupyter Team attended a JupyterCon sprint to improve Thebe, an open source project which we use to insert executable code blocks into LibreTexts textbook pages.
Additions to Thebe made by the team include:
- Documenting how to display various ipywidgets in Thebe code blocks. Without including scripts such as RequireJS and Font Awesome 4, many ipywidgets would not display properly. Some example pages for widgets created include bqplot, ipyleaflet, and plotly.
- Adding a read-only option to code blocks, allowing users to disable editing on rendered code blocks.
- Persisting Binder sessions across pages, which decreases the time to connect to a Binder pod if a user has already requested a previous session.
- Simplifying Jest tests
We plan to continue working with Thebe in order to improve how it inserts and displays interactive JupyterLab widgets.
CKEditor Query Plugin
The CKEditor Query Plugin is a plugin added to the LibreTexts text editor, CKEditor. The plugin allows textbook authors to embed interactive problems into HTML pages. Just like with our CKEditor Binder Plugin, the Query Plugin adds a small icon to CKEditor so that authors may add answerable problems into their textbooks. The plugin works by simply embedding a LibreTexts Javascript template into the HTML code which constitutes the webpage. This plugin is completely operational and deployed on libretexts.org.
Cluster Migration
During the winter break, the Jupyter team migrated the previous Flock cluster to the new Galaxy cluster. This involved various changes in networking, hardware, and Jupyterhub.
The first step was to make sure that all of the physical computers were properly wired to each other. At the end of it all, we were able to reconsolidate our Flock and protogalaxy clusters to where we now have 17 nodes online. These new Galaxy nodes are running high availability programs like metallb and HAproxy to preserve the availability of our Libretexts services and Kubernetes control-planes which is a great improvement over the previous Flock cluster.
We improved cluster management by setting up Ubuntu cloudinit to boot the nodes and install a Puppet agent from which we are able to configure and install all the processes we need using a Puppet server. This creates consistency across our nodes and makes it easier to refresh the state of the cluster if something goes massively wrong. Both of these features were lacking in the Flock cluster and using them now makes it much easier to remotely manage these nodes.
Looking Foward
While there are still a few remaining objectives to complete the setup of the Galaxy cluster, our services such as JupyterHub and BinderHub are all online and available to the public. In fact, all UC Davis students and faculty have now been authorized to access jupyter.libretexts.org without needing manual permission from us to do so. We intend to continue to expand the availability of these Jupyter services, with our next target being a JupyterHub for high preformance computing.


Gateway
BOT
18-Sep-19 08:04 AM
[dscrd-hush] <jl777c> @ITM any luck in deanonymizing PIRATE?
[dscrd-hush] <ITM> I was able to chain the z-tx1 to z-txn - 1.
no amounts
(edited)
[dscrd-hush] <ITM> so I can tell if z-tx2 came from z-tx1, and z-tx1 depends on miner block n
[dscrd-hush] <ITM> All I got was:
Let say z-address transaction 1 you received 100 ARRR
now z-address transaction 2 you received another 50 ARRR
Now you spend it. z-address transaction 3.
Now I doing reverse proof. Don't submit tx1 and tx3 fails the proofing. Don't submit tx2 and tx3 fails the proofing.
So Now I can say for sure say tx3 depends on tx1 and tx2
(edited)
[dscrd-hush] <ITM> but I will not know tx3 amount and who tx3 belongs to
[dscrd-hush] <ITM> So I am now building meta data(A lot of meta data)
[dscrd-hush] <ITM> so using digital price, graviex and tradeogre.
[dscrd-hush] <ITM> So far I got to know who transfered from Tradeogre to digitalprice, digitalprice to Tradeogre , but graviex people are not withdrawing as much
[dscrd-hush] <ITM> so my transaction are still unspent
[dscrd-hush] <ITM> as long as the transaction are unspent, the privacy is intact.
[dscrd-hush] <ITM> @jl777c
[dscrd-hush] <ITM> sometimes Tx are multiple spends, which is harder to trace. So my theory is that sending multiple z-address that are not the same is harder to reverse or understand
[dscrd-hush] <ITM> So far PIRATE winning , Hush is easy to decode.
[dscrd-hush] <ITM> When I get time, I want to setup a mini project to do meta leaking.  Now I have 2 distinct proofs.
Silent Dragon now handles it perfect (Thanks to Duke). Most nodes will reject the transactions, my node will say hmm double spend and 2 different hash(transaction id's)
[dscrd-hush] <ITM> so now I got 2 different proofs to work with that attempts to create distinct results and valid.
Like X + Y = 3, now no one will now what X and what's Y.
Now comes the second proof. 2X + Y = 4.
Now I can set the huge equation to be equal and solve for sapling params. Leaking huge amount of information about the address and other transaction related to that proof.
Well its a theory I am working towards. So if a small leak like that, I can then finally determine the address and the amounts
[dscrd-hush] <ITM> but it does not break or deanonymize PIRATE, only foolish people that leak meta data or attempts a double spend by mistake.
[dscrd-hush] <ITM> the equation of sn-snarks are huges and completely maths. So I am getting there and understanding the maths. Learning curve.
(edited)
[dscrd-hush] <jl777c> @ca333 ITM made the first way to extract information out of ztransactions, even z->z !
[dscrd-hush] <jl777c> even making a dependency graph seems to be a breakthrough and any optional zaddr chain will very quickly have amounts and dependency graph deanonymized
[dscrd-hush] <ITM> its related to notes that duke pointed out. which help greatly.
[dscrd-hush] <ITM> @jl777c I am working towards presentation of nodes in 3d. Learning Data virtualization using python. Fun things.
[dscrd-hush] <jl777c> for atomic swaps with zaddr, we will need to allow z->t (p2sh atomic swap) and t -> z, so the amounts of that final -> z will be known. it seems from that half public address a z -> z to another address is needed. but is that even enough. what will be needed to break all linkage if we start with the atomic swap t -> z
[dscrd-hush] <ITM> Cannot wait, more data to play with.
(edited)
[dscrd-hush] <ITM> So t-Address to z-address, one will only know the transaction(Actually note proof but easier to refer it to transaction id)
[dscrd-hush] <ITM> z-address to z-address using reverse proofing
[dscrd-hush] <jl777c> i think if we have the following, it will be hard to get much useful info:
zt is the destination t -> z address, z0, z1, z2, ... are other zaddr
so if funds in zt -> z0 during intervals and z0 -> z1 or z2 in intervals and then z1 and z2 send back to z0 in intervals, this looping back i think will confuse your tracking, especially if the amounts being sent from z0/z1/z2 are randomly selected
[dscrd-hush] <ITM> z-address to t-address will then leak everything
[dscrd-hush] <ITM> yes, it will mess it up
[dscrd-hush] <ITM> so more transactions goes through, the harder it gets
[dscrd-hush] <ITM> since reverse proofing will require more combinations and swapping of tx to generate a invalid vs valid proof.
[dscrd-hush] <jl777c> so funds would need to be sent to zt, and only atomic swap from zt. then post process the zt funds to z0/z1/z2 with loops
[dscrd-hush] <ITM> so by doing it random will mess up my tracking completely
[dscrd-hush] <jl777c> @mrlynch some super important privacy implications
[dscrd-hush] <jl777c> basically JUMBLR logic applied to the zt funds will be needed
[dscrd-hush] <ITM> since if transaction goes to 10million, it will take years to reverse and lot of computation resources
[dscrd-hush] <ITM> will not be feasible at all
[dscrd-hush] <jl777c> yes, so if we have z0, z1, .. z99 and at each step it sends a random amount to a random address
[dscrd-hush] <jl777c> this will create loops and the random amounts will rapidly make any estimate of the value in a proof very fuzzy
[dscrd-hush] <jl777c> and before atomic swapping z0/z99 -> zt
[dscrd-hush] <jl777c> not sure if that is enough, i guess having a new zt per atomic swap would be best, but not sure that is practical
[dscrd-hush] <ITM> end of the day, its all about computation resource cost
[dscrd-hush] <ITM> 8! vs 20! is huge
[dscrd-hush] <jl777c> yes, and if a user node is creating a new zaddr per swap, very soon their node will bog down. i think just treating zt as a taddr and then jumbling it up afterward with z0/z99 will make it cost prohibitive.
[dscrd-hush] <ITM> currently people are using and spending there z-address slowly, so the steps are easy and about max 9! at the moment. Like 400 000 hush proofs. Which on a couple gpu its quick.
Using random will just move it to 10! so more proof to reverse
[dscrd-hush] <jl777c> but we do need to make a distinction between atomic swap derived zaddr and pure zaddr without such contamination
[dscrd-hush] <jl777c> with 100 addresses that are randomly sending random amounts to random addresses, isnt it approaching 100! ?
[dscrd-hush] <ITM> so 100 random sending per block, if all comes from distinct previous address and just 1, it will be the same
[dscrd-hush] <ITM> only by increasing the outputs causes issues
[dscrd-hush] <jl777c> z_sendmany of 100


10
The Angel and the Little Scroll
1 Then I saw another mighty angel coming down from heaven, wrapped in a cloud, with a rainbow over his head, and his face was like the sun, and his legs like pillars of fire.
2 He had a little scroll open in his hand. And he set his right foot on the sea, and his left foot on the land,
3 and called out with a loud voice, like a lion roaring. When he called out, the seven thunders sounded.
4 And when the seven thunders had sounded, I was about to write, but I heard a voice from heaven saying, “Seal up what the seven thunders have said, and do not write it down.”
5 And the angel whom I saw standing on the sea and on the land raised his right hand to heaven
6 and swore by him who lives forever and ever, who created heaven and what is in it, the earth and what is in it, and the sea and what is in it, that there would be no more delay,
7 but that in the days of the trumpet call to be sounded by the seventh angel, the mystery of God would be fulfilled, just as he announced to his servants the prophets.
8 Then the voice that I had heard from heaven spoke to me again, saying, “Go, take the scroll that is open in the hand of the angel who is standing on the sea and on the land.”
9 So I went to the angel and told him to give me the little scroll. And he said to me, “Take and eat it; it will make your stomach bitter, but in your mouth it will be sweet as honey.”
10 And I took the little scroll from the hand of the angel and ate it. It was sweet as honey in my mouth, but when I had eaten it my stomach was made bitter.
11 And I was told, “You must again prophesy about many peoples and nations and languages and kings.”


Well I tied my baby to the railroad track
Cannonball down the line
Givin� that woman just one more chance
To give it to me one more time
Engineer wishin� he was home in bed
Dreamin� �bout Casey Jones
Wide eyed woman
half a mile ahead
Thinkin� �bout broken bones
It�s your love that I want,
it�s your love that I need
It�s your love gotta have,
it�s your love
Heavenly body flyin� across the sky
And Superman was outta town
Come on honey gotta change your tune
Cause it�s a long way down
Clark Kent lookin� for a free ride
Thinkin� about Lois Lane
It�s a bird, it�s a plane, it�s suicide
And that�d be a shame
It�s your love that I want,
it�s your love that I need
It�s your love gotta have,
it�s your love
But what�s next to the moon
Long arm lookin� for a finger print
Tryin� to find a mystery clue
Hittin� me with the third degree
Working on a thumb screw
All right officer I confess
Everything�s coming back
I didn�t mean to hurt that woman of mine
It was a heart attack
It�s your love that I want,
it�s your love that I need
It�s your love gotta have,
it�s your love garanteed
Your love that I want,
it�s your love that I need
It�s your love gotta have,
it�s your love
What�s next to the moon


--- layout: page permalink: /voucher/thankyou/ offer: defaultoffer title: Receipt subtitle: Follow these instructions to redeem your offer. masthead-img: false masthead-img-pat: false author: john categories: - Special Offer - BowTie - Example Site elsewhere: elsewhere-url: comments: false exclude_from_nav: true share: false ---
Thanks for purchasing . Your receipt is below:
{{ offer.name }}
Your Price: $ (Savings: )


Depending on what is serving these pages the header and footer navigation links may or may not work.
The web desktop code and user interface is different on a mobile device and a PC desktop. We have two different client-side javaScript codes, one for desktop and one for handheld mobile devices, but the javaScript interfaces that they export are the same. You can use either webtop_desktop.js or webtop_mobile.js.
No web server is required to use this web desktop. Here's a version of this page and it's examples served from it's page and it's examples served from it's github homepage, which is just a copy of a particular version of the files in that are in the webtop github repository.


Making the blockchain mainstream one block at a time
Choose to either login as an affiliate or a merchant.
Register Now!
Forgot password ?


This section lists all the available applications and provides the control to register/unregister them (if applicable).
|
|
|
|
|
Versions | |
|---|---|---|---|---|---|
| {{ item.name }} |
|
{{ item.uri }} |
|
|
There is no application registered, yet.
You can: Add Application(s) or Refresh the page.
No results found for '{{ params.q }}', '{{ params.type }}'.
You can clear the search or Refresh the page.