Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox browser.
Project Jupyter's Team Callisto presents..
The Callisto
Design Process
Discovery Workflow:
AConduct Research
BAnalyze findings
CDiscover our Design Process
Research:
Don't Make Me Think
+Intuitiveness
+Efficiency
+User Happiness
Research:
About Face
+Goal-Directed Design
+Understanding the Need
+Models & Personas
Team Callisto's
Design Process
Researching the Needs
Don't just jump in blind, find ideas from multiple sources
- About Face: Understand the Problem, Design Research
- Research of Needs
- User Interviews & Communication
- Analytics Software
- Self-Aware Need Identification (bursts of creativity)
Discovery of the Needs
Keep it Simple
- Break up multiple features into multiple needs and processes
- Each need should have a Goal, (About Face: Goal-Directed Design)
2Brainstorm Solutions Collectively
Understand the Project
You can't develop a product you don't understand
- When we began this first project, we were all pretty much in the dark
- Take time to understand the project
- We want to make sure we understand the problem we are trying to solve
Research where the need may have been solved before
Don't Make Me Think: Don't Reinvent the Wheel
- Research can be done by each team member individually before brainstorm collaboration
Collaborate on brainstorming ideas to meet the Goal
- Pen and paper 'no-holds-barred freestyle' style
- No ideas are bad ideas :^)
Refine the ideas
- Prioritize which solutions come before others
- Ask questions, further the discussion
- Good questions lead to good ideas
- Determine which solutions would be the most effective and go from there
3Draft Multiple Solutions for Need
Draft Multiple Solutions for Need
- Use Ideas from Collective Brainstorm to create handwritten/quick drafts of solutions
- This includes wireframes and sketches for interaction
- Draw solutions together in person and on paper
Draft Multiple Solutions for Need
Draft Multiple Solutions for Need
- Gather User Information on which drafts are the most effective at meeting the Goal of the Need
- In person, so that they can see the sketches
- Decide based on User Information which draft to proceed to Design with.
4Begin Designing from the Atomic Level
Designing from Atomic Level
Create realistic iterations of draft
Use Sketch/Figma/Illustrator/PhotoShop to do this
- Work from small to large
- Build work in small pieces and work up from there
- Incorporate Atomic Design
Designing from Atomic Level
Use mockup prototyping software to incorporate interaction & motion
- i.e. InvisionApp, Marvel, Principle, etc.
- What it interaction?
- Transitions from different design states that encourages the user to complete their task/goal
- What is motion?
- Adding motion shows how an app is organized and what it can do, as well as providies guided focus between views for the user
- Google Material Motion
User Test Design Prototype
- If: Prototype seems to be the most effective at solving the need, then proceed to development
- Else: Repeat this step to redesign a different solution idea from brainstorm (or even go back to step 2 or 3)
5Begin Developing Incrementally
Begin development with Design & User Feedback in mind.
- Test elements at every stage.
- "If all the pistons are good, the engine will run well"
- Division and collaboration based on project.
Comprehensive User Testing
of entire project
- Return to any previous steps if reevaluation is necessary
- If not...
6Submit. Celebrate! Then repeat for future needs
Once more...
1Identify the Need
2Brainstorm Solutions Collectively
3Draft Multiple Solutions
4Design from Atomic Level
5Develop Incrementally
6Submit, Celebrate, and Repeat.
Key Ideals for our Design Process
+Design Never Sleeps
+Communication of Goals should be Easy
+Always have the Need in Mind
+Keep the Need and Goal simple
Thank You for Watching!
Presentation created by Reese Netro, Elliot Kirk, Roshan Prabhakar, and Matt Bowers.


Tablet of Vision:
As you near the Tablet of Vision, you sense a presence. Could it be someone you've learned about in the past?
Might it be that you know the tale of the guardian of this tablet? Thoughts race through your mind.
Look around


about
blogs
contact
Blogs Blogs Blogs
Reflection
Time+Habits
Emotional Intelligence
Meditation
Technical Part 1
Technical Part 2
Design to Web
JavaScript Basics
Daily Mindfulness
Self Confidence
Problem Solving
Testing
Control
Racer Car Game + Calculator
Motivation
Connecting
Leadership


Events
Events for
Fri Feb 15, 2008
< Thu Feb 14
|
Sat Feb 16 >
New England & New York Chi Alpha Retreat
Fri Feb 15 All day | UMASS Amherst
Humanities Library Bookmobile
Fri Feb 15 11:00a-2:00pm | 10
Campus Tour (PLEASE NOTE: NEW 11:00 AM TOUR START TIME)
Fri Feb 15 11:00am | Lobby 7 (Main Entrance)
ACDL Seminar
Fri Feb 15 12:00pm-1:00pm | 33-206
Special Energy Seminar: Global Energy Challenges of the 21st Century, and World and Regional Nuclear Power
Fri Feb 15 2:00pm-3:00pm | E15-atrium
International Ladies Chat
Fri Feb 15 2:00pm-4:00pm | W11
Physicochemical phenomena in micro- and nanofluidic systems and their applications
Fri Feb 15 2:15pm-3:15pm | 3-370
Taste of Shabbat
Fri Feb 15 3:00pm-4:30pm | W10
"African American Vaudeville and Race Politics in the Swing Era."
Fri Feb 15 3:00pm-5:00pm | 32-155
Campus Tour (PLEASE NOTE: NEW 3:00 PM TOUR START TIME)
Fri Feb 15 3:00pm | Lobby 7 (Main Entrance)
ANS Seminar
Fri Feb 15 3:30pm-5:00pm | 24-115
BCS Colloquium
Fri Feb 15 4:00pm-5:30pm | 46-3002
Juggle for a Cookie
Fri Feb 15 4:00pm-6:00pm | Lobby 10
Combinatorics Seminar
Fri Feb 15 4:15pm-5:15pm | 2-105
Design considerations of heaving axissimetric wave energy converters
Fri Feb 15 4:30pm-5:30pm | 1-390
Advanced Music Performance Student Recital: Joyce Kwan '10, violin
Fri Feb 15 5:00pm-6:00pm | 14W-111
English-Only Science in a Multilingual World? Costs, Benefits, and Options.
Fri Feb 15 5:00pm-6:30pm | 4-231
MIT/WHOI Joint Program Retreat
Fri Feb 15 5:00pm-11:00pm | Tamworth, New Hampsh...
Friday Fiesta @ Thirsty Ear Pub
Fri Feb 15 5:00pm | Thirsty Ear Pub
Across the Universe
Fri Feb 15 7:00pm | 26-100
Grad Student Bible Study
Fri Feb 15 7:00pm-9:00pm | for details, see our...
ABSK Friday Night Bible Study
Fri Feb 15 7:00pm-9:00pm | W20-PDR 1&2
Loungin'
Fri Feb 15 7:00pm-9:00pm | 50-105
Human Rights and Civil War In Somalia: Stories from A Forgotten Country (Food Provided)
Fri Feb 15 7:00pm-9:00pm | 4-237
Anime Showing
Fri Feb 15 7:00pm-11:55pm | 6-120
Build Party!
Fri Feb 15 7:00pm | N52-115
Suburbia
Fri Feb 15 8:00pm-10:00pm | W16
The Vagina Monologues
Fri Feb 15 8:00pm-10:00pm | 32-123
Across the Universe
Fri Feb 15 10:00pm | 26-100
< Thu Feb 14
|
Sat Feb 16 >


Flash and JavaScript are required for this feature.
Download the video from iTunes U or the Internet Archive.
Description: In this lecture, we explore support vector machines in some mathematical detail. We use Lagrange multipliers to maximize the width of the street given certain constraints. If needed, we transform vectors into another space, using a kernel function.
Instructor: Patrick H. Winston
Lecture 16: Learning: Suppo...
Related Resources
Specifically developed for this lecture are the support vector machine slides (PDF), which are also listed among the readings for this course.
PATRICK WINSTON: So where are we?
We started off with simple methods for learning stuff.
Then, we talked a little about a purchase of learning that we're vaguely inspired by.
The fact that our heads are stuffed with neurons, and that we seemed to have evolved from primates.
Then, we talked about looking at the problem and address the issue of [? phrenology ?] and how it's possible to learn concepts.
But now, we're coming full circle back to the beginning and thinking about how to divide up a space with decision boundaries.
But whereas, you do it with a neural net or a nearest neighbors or a ID tree.
Those are very simple ideas that work very often.
Today, we're going to talk about a very sophisticated idea that still has a implementation.
So this needs to be in the tool bag of every civilized person.
This is about support vector machines, an idea that was developed.
Well, I want to talk to you today about how ideas develop, actually.
Because you look at stuff like this in a book, and you think, well, Vladimir Vapnik just figured this out one Saturday afternoon when the weather was too bad to go outside.
That's not how it happens.
It happens very differently.
I want to talk to you a little about that.
The next thing about great things that were done by people who are still alive is you can ask them how they did it.
You can't do that with Fourier.
You can't say to Fourier, how did you do it?
Did you dream it up on a Saturday afternoon?
But can call Vapnik on the phone and ask him questions.
That's the stuff I'm going to talk about toward the end of the hour.
Well, it's all about decision boundaries.
And now, we have several techniques that we can use to draw some decision boundaries.
And here's the same problem.
And if we drew decision boundaries in here, we might get something that would look like maybe this.
If we were doing a nearest neighbor approach, and if we're doing ID trees, we'll just draw in a line like that.
And if we're doing neural nets, well, you can put in a lot of straight lines wherever you like with a neural net, depending on how it's trained up.
Or if you just simply go in there and design it, so you could do that if you wanted.
And you would think that after people have been working on this sort of stuff for 50 or 75 years that there wouldn't be any tricks in the bag left.
And that's when everybody got surprised, because around the early '90s Vladimir Vapnik introduced the ideas I'm about to talk to you about.
So what Vapnik says is something like this.
Here you have a space, and you have some negative examples, and you have some positive examples.
How do you divide the positive examples from the negative examples?
And what he says that we want to do is we want to draw a straight line.
But which straight line is the question.
Well, we want to draw a straight line.
Well, would this be a good straight line?
One that went up like that?
Probably not so hot.
How about one that's just right here?
Well, that might separate them, but it seems awfully close to the negative examples.

And that line is drawn with a view toward putting in the widest street that separates the positive samples from the negative samples.
That's why I call it the widest street approach.
So that makes way of putting in the decision boundary-- is to put in a straight line but in contrast with the way ID tree puts in a straight line.
It tries to put the line in in such a way as the separation between the positive and negative examples.
That street is as wide as possible.
All right.
So you might think to do that in the UROP project, and then, let it go with that.
What's the big deal?
So what we've got to do is we've got to go through why it's a big deal.
So first of all, we like to think about how you would make a decision rule that would use that decision boundary.
So what I'm going to ask you to imagine is that we've got a vector of any length that you like, constrained to be perpendicular to the median, or if you like, perpendicular to the gutters.
It's perpendicular to the median line of the street.
All right, it's drawn in such a way that that's true.
We don't know anything about it's length, yet.
Then, we also have some unknown, say, right here.
And we have a vector that points to it by excel.
So now, what we're really interested in is whether or not that unknown is on the right side of the street or on the left side of the street.
So what we'd what to do is want to project that vector, u, down on to one that's perpendicular to the street.
Because then, we'll have the distance in this direction or a number that's proportional to this in this direction.
And the further out we go, the closer we'll get to being on the right side of the street, where the right side of the street is not the correct side but actually the right side of the street.
So what we can do is we can say, let's take w and dot it with u and measure whether or not that number is equal to or greater than some constant, c.
So remember that the dot product has taken the projection onto w.
And the bigger that projection is, the further out along this line the projection will lie.
And eventually it will be so big that the projection crosses the median line of the street, and we'll say it must be a positive sample.
Or we could say, without loss of generality that the dot product plus some constant, b, is equal to or greater than 0.
If that's true, then it's a positive sample.
So that's our decision rule.
And this is the first in several elements that we're going to have to line up to understand this idea called support vector machines.
So that's the decision rule.
And the trouble is we don't know what constant to use, and we don't know which w to use either.
We know that w has to be perpendicular to the median line of the street.
But there's lot of w's that are perpendicular to the median line of the street, because it could be of any length.
So we don't have enough constraint here to fix a particular b or a particular w.
Are you with me so far?
All right.
And this, by the way, we get just by saying that c equals minus b.
What we're going to do next is we're going to lay on some additional constraints whether you're toward putting enough constraint on the situation that we can actually calculate a b and a w.
So what we're going to say is this, that if we look at this quantity that we're checking out to be greater than or less than 0 to make our decision, then, what we're going to do is we're going to say that if we take that vector w, and we take the dot product of that with some x plus, some positive sample, now.
This is not an unknown.
This is a positive sample.
If we take the dot product of those two vectors, and we had b just like in our decision rule, we're going to want that to be equal to or greater than 1.

But if you're a positive sample, we're going to insist that this decision function gives the value of one or greater.
Likewise, if w thought it was some negative sample is provided to us, then we're going to say that has to be equal to or less than minus 1.
All right.
So if you're a minus sample, like one of these two guys or any minus sample that may lie down here, this function that gives us the decision rule must return minus 1 or less.
So there's a separation of distance here.
Minus 1 to plus 1 for all of the samples.
So that's cool.
But we're not quite done, because carrying around two equations like this, it's a pain.
So what we're going to do is we're going to introduce another variable to make like a little easier.
Like many things that we do, and when we develop this kind of stuff, introducing this variable is not something that God says has to be done.
What is it?
We introduced this additional stuff to do what?
To make the mathematics more convenient, so mathematical convenience.
So what we're going to do is we're going to introduce a variable, y sub i, such that y sub i is equal to plus 1 for plus samples and minus 1 for negative samples.
All right.
So for each sample, we're going to have a value for this new quantity we've introduced, y.
And the value of y is going to be determined by whether it's a positive sample or negative sample.
If it's a positive sample it's got to be plus 1 for this situation up here, and it's going to be minus 1 for this situation down here.
So what we're going to do with this first equation is we're going to multiply it by y sub i, and that is now x of i, plus b is equal to or greater than 1.
And then, you know what we're going to do?
We're going to multiply the left side of this equation by y sub i, as well.

And now, what does that do over here?
We multiplied this guy times minus 1.
So it used to be the case that that was less than minus 1.
So if we multiply it by minus 1, then it has to be greater than plus 1.
The two equations are the same, because that introduces this little mathematical convenience.
So now, we can say that y sub i times x sub i plus b.
Well, what we're going to do-- Brett?
STUDENT: What happened to the w?
PATRICK WINSTON: Oh, did I leave out a w?
I'm sorry.
Thank you.
Yeah, I wouldn't have gotten very far with that.
So that's dot it with w, dot it with w.
Thank you, Brett.
Those are all vectors.
I'll pretty soon forget to put the little vector marks on there, but you know what I mean.
So that's w plus b.
And now, let me bring that 1 over to the left side, and that's equal to or greater than 0.
All right.
With Brett's correction, I think everything's OK.
But we're going to take one more step, and we're going to say that y sub i times x sub i times w plus b minus 1.
It's always got to be equal to or greater than 0.
But what I'm going to say is if we're for x sub i in a gutter.
So there's always going to be greater than 0, but we're going to add the additional constraint that it's going to be exactly 0 for all the samples that end up in the gutters here of the street.
So the value of that expression is going to be exactly 0 for that sample, 0 for this sample and this sample, not 0 for that sample.
It's got to be greater than 1.
All right?
So that's step number two.
And this is step number one.
OK.
So now, we've just got some expressions to talk about, some constraints.
Now, what are we trying to do here?
I forgot.
Oh, I remember now.
We're trying to figure out how to arrange for the line to be such at the street separating the pluses from the minuses as wide as possible.
So maybe we better figure out how we can express the distance between the two gutters.
Let's just repeat our drawing.
We've got some minuses here, got pluses out here, and we've got gutters that are going down here.
And now, we've got a vector here to a minus, and we've got a vector here to a plus.
So we'll call that x plus and this x minus.
So what's the width of the street?
I don't know, yet.
But what we can do is we can take the difference of those two vectors, and that will be a vector that looks like this, right?
So that's x plus minus x minus.
So now, if I only had a unit normal that's normal to the median line of the street, if it's a unit normal, then I could just take the dot product or that unit normal and this difference vector, and that would be the width of the street, right?
So in other words, if I had a unit vector in that direction, then I could just dot the two together, and that would be the width of the street.
So let me write that down before I forget.
So the width is equal to x plus minus x minus.
OK.
That's the difference vector.
And now, I've got to multiple it by unit vector.
But wait a minute.
I said that that w is a normal, right?
The w is a normal.
So what I can do is I can multiply this times w, and then, we'll divide by the magnitude of w, and that will make it a unit vector.
So that dot product, not a product, that dot product is, in fact, a scalar, and it's the width of the street.
It doesn't do as much good, because it doesn't look like we get much out of it.
Oh, but I don't know.
Let's see, what can we get out of it?
Oh gee, we've got this equation over here, this equation that constrains the samples that lie in the gutter.
So if we have a positive sample, for example, then this is plus 1, and we have this equation.
So it says that x plus times w is equal to, oh, 1 minus b.
See, I'm just taking this part here, this vector here, and I'm dotting it with x plus.
So that's this piece right here.
y is 1 for this kind of sample.
So I'll just take the 1 and the b back over to the other side, and I've got 1 minus b.
OK?
Well, we can do the same trick with x minus.
If we've got a negative sample, then y sub i is negative.
That gives us our negative w times dot over x sub i.
But now, we take this stuff back over to the right side, and we get 1 plus b.
So that all licenses to rewrite this thing as 2 over the magnitude of w.
How did I get there?
Well, I decided I was going to enforce this constraint.
I noted that the width of the street has got to be this difference vector times a unit vector.
Then, I used the constraint to plug back some values here.
And I discovered to my delight and amazement that the width of the street is 2 over the magnitude of w.
Yes, Brett?
STUDENT: So your first x plus is minus b, and x minus is 1 plus b.
PATRICK WINSTON: Yeah.
STUDENT: So you're subtracting it?
PATRICK WINSTON: Let's see.
If I've got a minus here, then that makes that minus, and then, the b is minus, and when I take the b over to the other side it becomes plus.
STUDENT: Yeah, so if you subtract the left with the right [INAUDIBLE].
PATRICK WINSTON: No.
No, sorry.
This expression here is 1 plus b.
Trust me it works.
I haven't got my legs all tangled up like last Friday, well, not yet, anyway.
It's possible.
There's going to be a lot of algebra here eventually.
So this quantity here, this is miracle number three.
This quantity here is the width of the street.
And what we're trying to do is we're trying to maximize that, right?
So we want to maximize 2 over the magnitude of w if we're to get the widest street under the constraints that we've decided that we're going to work with.
All right.
So that means that it's OK to maximize 1 over w, instead.
We just drop the constant.
And that means that it's OK to minimize the magnitude of w, right?
And that means that it's OK to minimize 1/2 times the magnitude of w squared.
Right, Brett?
Why did I do that?
Why did I multiply by 1/2 and square it?
STUDENT: Because it's mathematically convenient.
PATRICK WINSTON: It's mathematically convenient.
Thank you.
So this is point number three in the development.
So where do we go?
We decided that was going to be our decision rule.
We're going to see which side of the line we're on.
We decided to constrain the situation, so the value of the decision rule is plus 1 in the gutters for the positive samples and minus 1 in the gutters for the negative samples.
And then, we discovered that maximizing the width of the street led us to an expression like that, which we wish to maximize.
Should we take a break?
Should we get coffee?
Too bad, we can't do that in this kind of situation.
But we would if we could.
And I'm sure when Vapnik got to this point, he went out for coffee.
So now, we back up, and we say, well, let's let these expressions start developing into a song.
Not like that, that's vapid, speaking of Vapnik.
What song is it going to sing?
We've got an expression here that we'd like to find the minimum of, the extremum of.
And we've got some constraints here that we would like to honor.
What are we going to do?
Let me put what we're going to do to you in the form of a puzzle.
Is it got something to do with Legendre?
Has it got something to do with Laplace?
Or does it have something to do with Lagrange?
She says Lagrange.
Actually, all three were said to be on Fourier's Doctoral Defense Committee-- must have been quite an example.
But we want to talk about Lagrange, because we've got a situation here.
Is this 1801?
1802?
1802.
We learned in 1802 that if we going to find the extremum of a function with constraints, then we're going to have to use Lagrange multipliers.
That would give us a new expression, which we can maximize or minimize without thinking about the constraints anymore.
That's how Lagrange multipliers work.
So this brings us to miracle number four, developmental piece number four.
And it works like this.
We're going to say that L-- the thing we're going to try to maximize in order to maximize the width of the street-- is equal to 1/2 times the magnitude of that vector, w, squared minus.
And now, we've got to have a summation over all the constraints.
And each or those constraints is going to have a multiplier, alpha sub i.
And then, we write down the constraint.
And when we write down a constraint, there it is up there.
And I've got to be hyper careful here, because, otherwise, I'll get lost in the algebra.
So the constraint is y sub i times vector, w, dotted with vector x sub i plus b, and now, I've got a closing parenthesis, a minus 1.
That's the end of my constraint, like so.
I sure hope I've got that right, because I'll be in deep trouble if that's wrong.
Anybody see any bugs in that?
That looks right. doesn't it?
We've got the original thing we're trying to work with.
Now, we've got Lagrange multipliers all multiplied.
It's back to that constraint up there, where each constraint is constrained to be 0.
Well, there's a little bit of mathematical slight of hand here, because in the end, the ones that are going to be 0, the Lagrange multipliers here.
The ones that are going to be non 0 are going to be the ones connected with vectors that lie in the gutter.
The rest are going to be 0.
But in any event, we can pretend that this is what we're doing.
I don't care whether it's a maximum or minimum.
I've lost track.
But what we're going to do is we're going to try to find an extremum of that.
So what do we do?
What does 1801 teach us about?
Finding the maximum-- well, we've got to find the derivatives and set them to 0.
And then, after we've done that, a little bit of that manipulation, we're going to see a wonderful song start to emerge.
So let's see if we can do it.
Let's take the partial of L, the Lagrangian, with respect to the vector, w.
Oh my God, how do you differentiate with respect to a vector?
It turns out that it has a form that looks exactly like differentiating with respect to a scalar.
And the way you prove that to yourself is you just expand everything in terms of all of the vector's components.
You differentiate those with respect to what you're differentiating with respect to, and everything turns out the same.
So what you get when you differentiate this with respect to the vector, w, is 2 comes down, and we have just magnitude of w.
Was it the magnitude of w?
Yeah, like so.
Was it the magnitude of w?
Oh, it's not the magnitude of w.
It's just w, like so, no magnitude involved.
Then, we've got a w over here, so we've got to differentiate this part with respect to w, as well.
But that part's a lot easier, because all we have there is a w.
There's no magnitude.
It's not raised to any power.
So what's w multiplied by?
Well, it's multiplied by x and y sub i and alpha sub i.
All right.
So that means that this expression, this derivative of the Lagrangian, with respect to w is going to be equal to w minus the sum of alpha sub i, y sub i, x sub i, and that's got to be set to 0.
And that implies that w is equal to the sum of some alpha i, some scalars, times this minus 1 or plus 1 variable times x sub i over i.
And now, the math is beginning to sing.
Because it tells us that the vector w is a linear sum of the samples, all the samples or some of the sample.
It didn't have to be that way.
It could have been raised to a power.
It could have been a logarithm.
All sorts of horrible things could have happened when we did this.
But when we did this, we discovered that w is going to be equal to a linear some of these vectors here.
Some of the vectors in the sample set, and I say some, because for some alpha will be 0.
All right.
So this is something that we want to take note of as something important.
Now, of course, we've got to differentiate L with respect to anything else it might vary, so we've got to differentiate L with respect to b, as well.
So what's that going to be equal to?
Well, there's no b in here, so that makes no contribution.
This part here doesn't have a b in it, so that makes no contribution.
There's no b over here, so that makes no contribution.
So we've got alpha i times y sub i times b.
That has a contribution.
So that's going to be the sum of alpha i times y sub i.
And then, we're differentiating with respect to b, so that disappears.
There's a minus sign here, and that's equal to 0, or that implies that the sum of the alpha i times y sub i is equal to 0.
Hm, that looks like that might be helpful somewhere.
And now, it's time for more coffee.
By the way, these coffee periods take months.
You stare at it.
You work on something else.
You've got to worry about your finals.
And you think about it some more.
And eventually, you come back from coffee and do the next thing.
Oh, what is the next thing?
Well, we've still got this expression that we're trying to find the minimum for.
And you say to yourself, this is really a job for the numerical analysts.
Those guys know about this sort of stuff.
Because of that little power in there, that square.
This is a so-called quadratic optimization problem.
So at this point, you would be inclined to hand this problem over to a numerical analysts.
They'll come back in a few weeks with an algorithm.
You implement the algorithm.
And maybe things work.
Maybe they don't converge.
But any case, you don't worry about it.
But we're not going to do that, because we want to do a little bit more math, because we're interested in stuff like this.
We're interested in the fact that the decision vector is a linear sum of the samples.
So we're going to work a little harder on this stuff.
And in particular, now that we've got an expression for w, this one right here, we're going to plug it back in there, and we're going to plug it back in here and see what happens to that thing we're trying to find the extremum of.
Is everybody relaxed, taking deep breath?
Actually, this is the easiest part.
This is just doing a little bit of the algebra.
So the think we're trying to maximize or minimize is equal to 1/2.
And now, we've got to have this vector here in there twice.
Right?
Because we're multiplying the two together.
So let's see.
We've got from that expression up there, one of those w's will just be the sum of the alpha i times y sub i times the vector x sub i.
And then, we've got the other one, too.
So that's just going to be the sum of alpha.
Now, I'm going to, actually, eventually, squish those two sums together into a double summation, so I have to keep the indexes straight.
So I'm just going to write that as alpha sub j, y sub j, x sub j.
So those are my two vectors and I'm going to take the dot product of those.
That's the first piece, right?
Boy, this is hard.
So minus, and now, the next term looks like alpha i, y sub i, x sub i times w.
So you've got a whole bunch of these.
We've got a sum of alpha i times y sub i times x sub i, and then, that gets multiplied times w.
So we'll put this like this, the sum of alpha j, y sub j, x sub j in there like that.
And then, that's the dot product like that.
That wasn't as bad as I thought.
Now, I've got to deal with the next term, the alpha i times y sub i times b.
So that's minus sub of alpha i times y sub i times b.

Are you with me so far?
Just a little algebra.
It looks good.
I think I haven't mucked it, yet.

So pull that out there, and then, I just got the sum of alpha sub i times y sub i.
Oh, that's good.
That's 0.
Now, so for every one of these terms, we dot it with this whole expression.
So that's just like taking this thing here and dotting those two things together, right?
Oh, but that's just the same thing we've got here.
So now, what we can do is we can say that we can rewrite this Lagrangian as-- we've got that sum of alpha i.
That's the positive element.
And then, we've got one of these and half of these.
So that's minus 1/2.
And now, I'll just convert that whole works into a double sum over both i and j of alpha i times alpha j times y sub i times y sub j times x sub i dotted with x of j.
We sure went through a lot of trouble to get there, but now, we've got it.
And we know that what we're trying to do is we're trying to find a maximum of that expression.
And that's the one we're going to had off to the numerical analysts.
So if we're going to had this off to the numerical analysts anyway, why did I go to all this trouble?
Good question.
Do you have any idea why I went to all this trouble?
Because I wanted to find out the dependence of this expression.
Wanda is telling me.
I'm translating as I go.
She's telling me in Romanian.
I want to find what this maximization depends on with respect these vectors, the x, the sample vectors.
And what I've discovered is that the optimization depends only on the dot product of pairs of samples.
And that's something we want to keep in mind.
That's why I put it in royal purple.
Now, up here, so let's see.
What do we call that one up there?
That's two.
I guess, we'll call this piece here three.
This piece here is four.
And now, there's one more piece.
Because I want to take that w, and not only stick it back into that Lagrangian, I want to stick it back into the decision rule.
So now, my decision rule with this expression for w is going to be w plugged into that thing.
So the decision rule is going to look like the sum of alpha i times y sub i times x sub i dotted with the unknown vector, like so.
And we're going to, I guess, add b.
And we're going to say, if that's greater than or equal to 0, then plus.
So you see why the math is beginning to sing to us now.
Because now, we discover that the decision rule, also, depends only on the dot product of those sample vectors and the unknown.
So the total of dependence of all of the math on the dot products.
All right.
And now, I hear a whisper.
Someone is saying, I don't believe that mathematicians can do it.
I don't think those numerical analysts can find the optimization.
I want to be sure of it.
Give me ocular proof.
So I'd like to run a demonstration of it.
OK.
There's our sample problem.
The one I started the hour out with.
Now, if the optimization algorithm doesn't get stuck in a local maximum or something, it should find a nice, straight line separating those two guys to finding the widest street between the minuses and the pluses.
So in just a couple of steps, you can see down there in step 11.
It's decided that it's done as much as it can on the optimization.
And it's got three alphas.
And you can see that the two negative samples both figure into the solution, the weights on the Lagrangian multipliers are given by those little yellow bars.
So the two negatives participate in the solution as one of the positives, but the other positive doesn't.
So it has a 0 weight.
So everything worked out well.
Now, I said, as long as it doesn't get stuck on a local maximum, guess what, those mathematical friends of ours can tell us and prove to us that this thing is a convex space.
That means it can never get stuck in a local maximum.
So in contrast with things like neural nets, where you have a plague of local maxima, this guy never gets stuck in a local maxima.
Let's try some other examples.
Here's two vertical points-- no surprises there, right?
Well, you say, well, maybe it can't deal with diagonal points.
Sure it can.
How about this thing here?
Yeah, it only needed two of the points since any two, a plus or minus, will define the street.
Let's try this guy.
Oh.
What do you think?
What happened here?
Well, we're screwed, right?
Because it's linearly inseparable-- bad news.
So in situations where it's linearly inseparable, the mechanism struggles, and eventually, it will just slow down and you truncate it, because it's not making any progress.
And you see the red dots there are ones that it got wrong.
So you say, well, too bad for our side-- doesn't look like it's all that good anyway.
But then, a powerful idea comes to the rescue, when stuck switch to another perspective.
So if we don't like the space that we're in, because it gives examples that are not linearly separable, then we can say, oh, shoot.
Here's our space.
Here are two points.
Here are two other points.
We can't separate them.
But if we could somehow get them into another space, maybe we can separate them, because they look like this in the other space, and they're easy to separate.
So what we need, then, is a transformation that will take us from the space we're in into a space where things are more convenient, so we're going to call that transformation phi with a vector, x.
That's the transformation.
And now, here's the reason for all the magic.
I said, that the maximization only depends on dot products.
So all I need to do the maximization is the transformation of one vector dotted with the transformation of another vector, like so.
That's what I need to maximize, or to find the maximum on.
Then, in order to recognize-- where did it go?
Underneath the chalkboard.
Oh, yes.
Here it is.
To recognize, all I need is dot products, too.
So for that one I need phi of x dotted with phi of u.
And just to make this a little bit more consistent, the notation, I'll call that x j and this x sub i.
And that's x sub i.
Those are the quantities I need in order to do it.
So that means that if I have a function, let's call it k of x sub i and x sub j, that's equal to phi of x sub i dotted with phi of x sub j.
Then, I'm done.
This is what I need.
I don't actually need this.
All I need is that function, k, which happens to be called a kernel function, which provides me with the dot product of those two vectors in another space.
I don't have to know the transformation into the other space.
And that's the reason that this stuff is a miracle.
So what are some of the kernels that are popular?
One is the linear kernel that says that u dotted with v plus 1 to the n-th is such a kernel, because it's got u in it and v in it, the two vectors.
And this is what the dot product is in the other space.
So that's one choice.
Another choice is a kernel that looks like this, e to the minus.
Let's take the dot product of the difference of those two guys.
Let's take the magnitude of that and divide it by some sigma.
That's a second kind of kernel that we can use.
So let's go back and see if we can solve this problem by transforming it into another space where we have another perspective.
So that's it.
That's another kernel.
And so sure, we can.
And that's the answer when transformed back into the original space.
We can also try doing that with a so-called radial basis kernel.
That's the one with the exponential in it.
We can learn on that one.
Boom.
No problem.
So we've got a general method that's convex and guaranteed to produce a global solution.
We've got a mechanism that easily allows us to transform this into another space.
So it works like a charm.
Of course, it doesn't remove all possible problems.
Look at that exponential thing here.
If we choose a sigma that is small enough, then those sigmas are essentially shrunk right around the sample points, and we could get overfitting.
So it doesn't immunize us against overfitting, but it does immunize us against local maxima and does provide us with a general mechanism for doing a transformation into another space with a better perspective.

It feels like it's younger than you are.
Here's the history of it.
Vapnik immigrated from the Soviet Union to the United States in about 1991.
Nobody ever heard of this stuff before he immigrated.
He actually had done this work on the basic support vector idea in his Ph.D. thesis at Moscow University in the early '60s.
But it wasn't possible for him to do anything with it, because they didn't have any computers they could try anything out with.
So he spent the next 25 years at some oncology institute in the Soviet Union doing applications.
Somebody from Bell Labs discovers him, invites him over to the United States where, subsequently, he decides to immigrate.
In 1992, or thereabouts, Vapnik submits three papers to NIPS, the Neural Information Processing Systems journal.
All of them were rejected.
He's still sore about it, but it's motivating.
So around 1992, 1993, Bell Labs was interested in hand-written character recognition and in neural nets.
Vapnik thinks that neural nets-- what would be a good word to use?
I can think of the vernacular, but he thinks that they're not very good.
So he bets a colleague a good dinner that support vector machines will eventually do better at handwriting recognition then neural nets.
And it's a dinner bet, right?
It's not that big of deal.
But as Napoleon said, it's amazing what a soldier will do for a bit of ribbon.
So that makes colleague, who's working on this problem with handwritten recognition, decides to try a support vector machine with a kernel, in which n equals 2, just slightly nonlinear, works like a charm.
Was this the first time anybody tried a kernel?
Vapnik actually had the idea in his thesis but never though it was very important.
As soon as it was shown to work in the early '90s on the problem handwriting recognition, Vapnik resuscitated the idea of the kernel, began to develop it, and became an essential part of the whole approach of using support vector machines.
So the main point about this is that it was 30 years in between the concept and anybody ever hearing about it.
It was 30 years between Vapnik's understanding of kernels and his appreciation of their importance.
And that's the way things often go, great ideas followed by long periods of nothing happening, followed by an epiphanous moment when the original idea seemed to have great power with just a little bit of a twist.
And then, the world never looks back.
And Vapnik, who nobody ever heard of until the early '90s, becomes famous for something that everybody knows about today who does machine learning.


Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
by Albert EinsteinLorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
by Albert EinsteinLorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
by Albert EinsteinLorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
by Albert EinsteinLorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
by Albert Einstein
Company, Inc.
123 Street, City
State 12345
P:<PHONE_NUMBER> / 456 7891
Full Name
<EMAIL_ADDRESS>Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
This is a special report
By [Your Name Here]
A freelance designer & developer based in Melbourne, Australia.
Sara Phillipps
A freelance web designer & developer based in Melbourne, Australia.


Returend data structures
Status table
The Status table is returned by the info() method and contains all informations which the API provides.
Example:
{ Agent = { DeviceName = "NETIO 4ALL Demo", JSONVer = "2.1", Model = "NETIO 4All", NumOutputs = 4, OemID = 0, SerialNumber = "24:A4:2C:39:11:5A", Time = "2018-08-15T18:44:28+01:00", Uptime = 490866, VendorID = 0, Version = "3.1.0" }, GlobalMeasure = { EnergyStart = "2018-01-19T13:30:26+00:00", Frequency = 50.1, OverallPowerFactor = 0, TotalCurrent = 0, TotalEnergy = 2253, TotalLoad = 0, Voltage = 239.1 }, Outputs = { { Action = 6, Current = 0, Delay = 5000, Energy = 0, ID = 1, Load = 0, Name = "output_1", PowerFactor = 0, State = 1 }, { Action = 6, Current = 0, Delay = 5000, Energy = 0, ID = 2, Load = 0, Name = "output_2", PowerFactor = 0, State = 1 }, { Action = 6, Current = 0, Delay = 5000, Energy = 2081, ID = 3, Load = 0, Name = "output_3", PowerFactor = 0, State = 0 }, { Action = 6, Current = 0, Delay = 5000, Energy = 172, ID = 4, Load = 0, Name = "output_4", PowerFactor = 0, State = 1 } } }
Agent table
The Agent table is returned by the general_info() method and contains the Agent part of the Status table.
Example:
{ DeviceName = "NETIO 4ALL Demo", JSONVer = "2.1", Model = "NETIO 4All", NumOutputs = 4, OemID = 0, SerialNumber = "24:A4:2C:39:11:5A", Time = "2018-08-15T18:44:28+01:00", Uptime = 490866, VendorID = 0, Version = "3.1.0" }
GlobalMeasure table
The GlobalMeasure table is returned by the measure_info() method and contains the GlobalMeasure part of the Status table.
Example:
{ EnergyStart = "2018-01-19T13:30:26+00:00", Frequency = 50.1, OverallPowerFactor = 0, TotalCurrent = 0, TotalEnergy = 2253, TotalLoad = 0, Voltage = 239.1 }
Ouputs table
The Outputs table is returned by the outputs_info() method and contains the Outputs part of the Status table.
- If a specific output is given as parameter, only the nested table with the matching output ID is returned
- The outputs_action() methods (outputs_on() etc.) return the complete outputs table
Example:
{ { Action = 6, Current = 0, Delay = 5000, Energy = 0, ID = 1, Load = 0, Name = "output_1", PowerFactor = 0, State = 1 }, { Action = 6, Current = 0, Delay = 5000, Energy = 0, ID = 2, Load = 0, Name = "output_2", PowerFactor = 0, State = 1 }, { Action = 6, Current = 0, Delay = 5000, Energy = 2081, ID = 3, Load = 0, Name = "output_3", PowerFactor = 0, State = 0 }, { Action = 6, Current = 0, Delay = 5000, Energy = 172, ID = 4, Load = 0, Name = "output_4", PowerFactor = 0, State = 1 } }


The first step is to divide the map into homongeneous areas.
To make the division look not too obvious at the first glance, a good way is to built a Voronoi diagram. If we correctly choose the seeds of the diagram (like in the project with controlled Gaussian draws), the division pattern will not be too visible.
Example of Voronoi Diagram we can create
Once the geometry of the map has been computed, the next step is to assign to each cell a climate area - referred to the name of Biome in the following.
However, the outcoming map must look coherent. To do so, we define some basic rules for the assignation that should result in a map that looks plausible. The rules used are approximately the followings :
The previous Voronoi diagram can, with these rules, turn into the following map. The legend is :
Biome affectation
For the map rendering, we cannot, like in other methods, create the height map using a coherent noise (like the Simplex Noise). Indeed, these approach start by computing a height map using the noise, and THEN using some topological rules, compute the biome map. This quite the opposite of the approach we have here, which is to start from a biome map (procedurally computed or drawn by an artist).
However, we can try to adapt the coherent noise generation algorithm to generate our own noise that will be controlled using the information of the biome map. The understanding of the rest of this part requires the reader to be familiar with the Perlin noise.
During the construction of each octaves, we are going to control a lot of informations. First we are going to control the range of the noise values that are going to be drawn. For example, a draw that happens on a sea will be drawn in a negative range, while a draw that happens on lands will be drawn in a range of small positive values. Then, the interpolation function will not be the same on the whole grid like in the Perlin noise, but will depend on the biomes to take into account their geometry and their extent. For istance, a mountain will have a limited are, and should have sharp edges whereas lands can expand on large areas and will be smooth.
Octave 1:
Octave 1
Octave 2:
Octave 2
...
The outcoming noise is thus coherent with the biome map. The results of this step can ben view in the following section.
This first version of the island simply corresponds to the application of the height map on the Voronoi diagram.
The orange plane represents the sea level.
Basic rendering
The Tessellation process simply consists in transforming an object into a mesh that is composed of polygons. Re-tessellating a mesh by increasing the number of polygons (triangles here) can improve the rendering quality.
In OpenGL4, the Tessellation Shaders provide a quite 'simple' control on the tessellation level. Thanks to these shaders, we can decide for each basic triangle in how many sub-triangles it will be divided for the rendering.
Below is a short animation showing how increasing the tessellation can affect the quality of the rendering.
Map rendering at different tessellation levels
However, it is quite obvious that the tessellation level is not a constant on the whole scene. For example, take a look at the rabbit below. The ultra-tessellated version on the left is perfect for a close-up, but is horribly expensive and useless if the rabbit is far from the camera. In this last case, we should better use the ultra-low polygon version on the right.
Rabbit mesh with different tessellation levels
The idea is - still in the tessellation shader - to compute for each triangle the Level of Detail it needs to be represented. This value may depend on the geometry of the triangle (equilateral or thin), its size, its distance to the camera etc. The higher this level of detail is, the more the triangle will be tessellated.
We can see in the animation below that the edges of the lake we are zooming on are progressively becoming smoother.
Map rendering with different levels of detail
Even if the resolution has been increased by the tessellation process, the borders of the biomes are still defined by the edges of the Voronoi cells.
In the rendering, we have to hide these straight lines. To do so, we simply blend the texture on these edges to get smooth transitions from one biome to another.
This is done through a texture map. This map will store for a set of sampled positions the proportions of each texture at the position.
Example of texture blending
As we are on a island with lakes inside, we also have to render the water planes.
The sea is simply defined by a textured plane at the alitude 0.
Rendering lakes is a bit more tricky as we have to compute connected lake components. This then enable us to compute the altitude of the lake and render a proper water plane.
Lake rendering
Sea rendering
To finish this not-so-bad rendering, we simply have to add a skybox around our island, which can lead to results as the following picture.
Example of map rendering


TABLE OF INTERACTIONS WITH
MONTELUKAST
From the French ANSM drug interactions document of September 2016, p. 161
MONTELUKAST RxNorm: 88249 ATC: R03DC03 |
ANTICONVULSANT ENZYMATIC INDUCERS CLASS CODE: N03A-001 |
Risk of lower effectiveness of the montelukast due to increase of its hepatic metabolism by the inducer |
Precaution for use Clinical monitoring and possible adjustment of the dosage of the antiasthmatic during the treatment with the inducer and after it is stopped. |
MONTELUKAST RxNorm: 88249 ATC: R03DC03 |
RIFAMPICIN RxNorm: 9384 ATC: J04AB02 |
Risk of lower effectiveness of the montelukast due to increase of its hepatic metabolism by the rifampicin |
Precaution for use Clinical monitoring and possible adjustment of the dosage of the antiasthmatic during the treatment with the rifampicin and after it is stopped. |


--- layout: default index: true ---
Here, you can look for the perfect spot to get productive. Each study space listed on this site has been added by students like you looking for new places to study in Montreal.
Through the mapping tool, you can look at Montreal students' favourite study spots and compare their noise levels, food prices and more. If you like what you see, please contribute to the map with your favourite spots to add to the collection currently on the site by filling out this form. Enjoy!
{% for post in site.posts %} {% endfor %}


$ komodo-cli -ac_name=LABS getpeerinfo | jq '.[].addr'
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"
"<IP_ADDRESS>"


You're on a personalized page. Either switch to Shared view or deploy customizations to a more global scope.
Please see this SharePoint SE answer for details.
Error loading webparts from the page:
Error loading _spPageContextInfo. Cisar can only be used on SharePoint webpart pages.


Ben Connick, Matthew Fasman, Ben Kalb, Stuart Burton (Not pictured), Luna Maier, Margaret Dorsey (Not pictured)


{% load templatetag_handlebars %} {% tplhandlebars "card_with_no_course" %}
You don’t appear to be registered for any credit courses in {{quarter}}. If you think this is an error, please contact MyUW.
If you are interested in registration, view registration resources.


French Montana rushed to hospital after suffering heart problems
Cape Town – French Montana was rushed to hospital on Thursday, reportedly after suffering heart problems.
The rapper was transported via ambulance to San Fernando Valley hospital after complaining about severe stomach pains, nausea and an elevated heart rate, reports E! News.
According to TMZ, authorities said when they arrived at his LA home, he was “acting abnormal and seemed out of it”.
Sources close to the Writing On The Wall hitmaker think his symptoms may have something to do with his recent travels where he could have eaten contaminated food.
Compiled by Bashiera Parker (Sources: E! News , TMZ )
(Photo: Getty Images)


--- layout: default title: Safety is for our Family description: "" parent: Responsibility sidebar: Safety Plan class: responsibility banner: safety_sign.jpg banner-heading: "California Landscape Team" banner-cta: "" ---
It is practiced 24/7, 365 days a year. Our number one responsibility is to keep customers and our team members safe and healthy. Everyday operations brings this focus home. Every new employee actively participates in extensive safety training before working in the field and is rewarded for a true commitment to safe practices. Each week, team members collaborate solely for this purpose – a proactive approach for mitigating unnecessary risk and jobsite hazards.
Creating a safety culture also involves undertaking an internal commitment at all levels. Giving safety the same importance as providing quality work, finding efficiencies and making a profit is a top priority. Examples of TCA’s safety practice include (but are not limited to) the following:
Training - Training is the integral part of reaching safety goals. We believe it is our responsibility to continually educate and train our employees.


Package: SB-BSD-SOCKETS-INTERNAL¶
No description.


Creative, smart, and clever: these are terms that are usually reserved for when a company produces an innovative product that shifts industrial.
Tek08-Sep-19 09:07 PM
If I tell a friend with much money hey you should buy Pirate the ticket is arrr he's gonna laugh or think it's a scam
joe2x408-Sep-19 09:07 PM
Am betting my 24 ARRR against someone who thinks k64 funding is fake. I'm betting is real.
1
allbits08-Sep-19 09:07 PM
Trust is not required anyway. That's actually the whole point
Tek08-Sep-19 09:08 PM
Stacy doesn't want to buy pirates
K64 is a decent name
1
joe2x408-Sep-19 09:08 PM
Stacy fantasizes about pirates. Johnny dep
1
Tek08-Sep-19 09:08 PM
Too bad it's a scam
The last bleed of arrr has started
40 sats soon!
Should have asked Stacy about the name not just the nerds
1
joe2x408-Sep-19 09:12 PM
Stacy thought darkcoin meant something else, now she sees it as a cooking spice
1
Cryptoon08-Sep-19 09:13 PM
K64 is pretty binary either scam or moon, at these prices I am almost tempted to gamble
2
2
If you expect a more than 5-10% chance that it’s not a scam, it might be a good gamble to buy a bag and see what gives
But I’m a gambling degenerate so more prone to buying these types of things
2
1
Tek08-Sep-19 09:14 PM
I'm a winner
Cryptoon08-Sep-19 09:14 PM
Biiiiig risk, biiiig reward
2
2
3
I already win at life, this is playmoney
1
Tek08-Sep-19 09:15 PM
Big scam you mean
allbits08-Sep-19 09:15 PM
Pirate definitely not a scam, though it could fail. It has the highest anon set, but still needs to be bootstrapped into a higher market cap to be actually useful. Just like bitcoin in the early days - if it gains value, it will be valuable - very chicken and egg. Very all or nothing. Stacy is irrelevant. Nerds will decide - there's enough of them.
1
3
Cryptoon08-Sep-19 09:15 PM
Buddz199308-Sep-19 09:15 PM
Def true
Tek08-Sep-19 09:16 PM
Stacy decides bruh not da nerds
(sadly)
Buddz199308-Sep-19 09:16 PM
Nerds plus Stacys
Because it’s a better combo
Cryptoon08-Sep-19 09:17 PM
I like pirate
Not because of gamble, but just solid
Also bought more of that one ;p
Tek08-Sep-19 09:17 PM
I'll buy a bag at 20 sats
Buddz199308-Sep-19 09:17 PM
Has more chances of winning than k64
Cryptoon08-Sep-19 09:17 PM
For sure
But upside potential percentagewise might be bigger for k64 though lower odds of that happening for k64 than arrr
Buddz199308-Sep-19 09:18 PM
I only hold a few k of them but I play safe so.
Cryptoon08-Sep-19 09:18 PM
(Imo)
Kmd most solid
Tek08-Sep-19 09:18 PM
I'd go with pirate if I had to buy one of the two
1
Buddz199308-Sep-19 09:19 PM
K64 started well but it’s on his way to a cliff tbh
Tek08-Sep-19 09:19 PM
K64 smells like moneygrab fail scam
Cryptoon08-Sep-19 09:20 PM
Yea but with komodoworld saying he saw evidence... dunno man
Buddz199308-Sep-19 09:20 PM
I remember the channel reserved for games in Komodo channel when they started to talk about the project
Cryptoon08-Sep-19 09:20 PM
As I said
Its a gamble
Buddz199308-Sep-19 09:20 PM
Indeed it is
Cryptoon08-Sep-19 09:20 PM
Gambleeeeeeee
Tek08-Sep-19 09:20 PM
I don't gamble so I'm just gonna hold my kmd bags
Buddz199308-Sep-19 09:20 PM
Yep my last one was equalizer
Exit scam
Of the CEO.
Cryptoon08-Sep-19 09:21 PM
Haha same big eql bag
Buddz199308-Sep-19 09:21 PM
Worth zero.
Cryptoon08-Sep-19 09:21 PM
Well big, but didnt cost much
Buddz199308-Sep-19 09:21 PM
Y
Cryptoon08-Sep-19 09:21 PM
So whatever
Buddz199308-Sep-19 09:21 PM
Exactly
Imagine the ico when they started
Cryptoon08-Sep-19 09:22 PM
Yep
Buddz199308-Sep-19 09:22 PM
They sold some at 33 cents per eql
Rofl.

Geert08-Sep-19 09:30 PM
Crypto in its form is a gamble. If you can not gamble, go away. This is not made for weak people. My biggest winnings come from my biggest gambles.
2
Cryptoon08-Sep-19 09:32 PM
But if you can make educated gambles even better
FishyGuts08-Sep-19 09:34 PM
As to the pair mentioned above... one project continually shares project growth and releases info and integration use cases, as well as constantly communicating on behalf of its users and not “to” them. The other continually shares ideas but not its growth or releases and it communicates “to” stakeholders, not on behalf of them.
I guess it depends which type of project you like better. Two different mindsets. Trusted vs. trustless.
Cryptoon08-Sep-19 09:35 PM
Yeah arrr for sure an educated gamble/investment
Geert08-Sep-19 09:35 PM
Theres no good or bad gamble. If it's educated or safe, it's not a gamble. I saw stories in the past where FUD used as a method to lower prices. At the target they buy the coin low and sell it high.
Cryptoon08-Sep-19 09:35 PM
More the kmd way of doing things, not just promising things but keep working and delivering
Buddz199308-Sep-19 09:35 PM
It’s part of the game y
Cryptoon08-Sep-19 09:36 PM
I really like the drive of the team and community in pirate
actionslacks08-Sep-19 09:38 PM
make the tech, release it to the world, and let it speak for itself. all this k64 investor and partnership rumor mill stuff is shitcoin tier(edited)


The webssite Imgur.com is not solving any real world problems. It is just getting information one person thinks is interesting or funny and sharing it with the world. Most of the content is intended to be funny, but there is also news posted on the site which I find fasinating. The best part about it is you get different points of views from people that are actually there and outside people that are well informed on the subject. The biggest visual challenge is that it is a wesite full of random images. That is a lot of images they need to distribute with only a limited amount of space. Technicially it is not limited, but people will lose interest if they can just scroll forever. They do have a few categories they break things up to like: Hot, New, Top Week, Top Day, etc... But mostly the site is just a lot of random images. It may not be the worlds most practical site, but it is worth visiting.


{% extends 'preauth/base.html' %} {% load account %} {% block preauth_content %}
We have sent you an email with a link to reset your password.
Back to login…


Open source platform for X.509 certificate based service authentication and fine grained access control in dynamic infrastructures
Never Trust &
Always Verify
Enables zero trust core principles like traffic encryption, AuthN, AuthZ, Dynamic Trust and least privilege access
Learn More
X.509 Certificate Based Authentication
Service identity in the form of short-lived X.509 certificates to all workloads deployed in private or public clouds
*How is Athenz different from SPIRE?
Learn More
Fine-grained Authorization
Authorize all authenticated clients using fine-grained role-based (RBAC) access control with industry standard JWT access tokens
Learn More
Problem
How to enable Zero Trust core principles like traffic encryption and authentication among all workloads in a hybrid environment?
Solution
Athenz issues service identities in the form of short-lived X.509 certificates to all workloads deployed in private or public clouds enabling secure communication among all workloads with mTLS.
Problem
How do we provide credentials to container workloads to prove its identity and to authenticate with the Kubernetes API, establish mTLS with services, and define role-based access control (RBAC)?
Solution
An Identity provider mechanism enables workloads to authenticate with kubernetes container credentials such as pod bound service account tokens in exchange for Athenz service identity certificates using a callback mechanism that allows a kubernetes pod-aware identity service to authenticate such credentials.
Problem
How to deploy a centralized authorization store and deploy a consistent authorization solution based on industry standard OAuth2 access tokens without implementing the logic in each application?
Solution
Athenz Token Service issues industry standard mTLS bound OAuth2 access tokens that application services can use to both authenticate (x.509 identity certificates) and authorize requests based on policies defined in the Athenz Management System.
Problem
How to securely access AWS services from on-prem data centers without using static credentials defined in AWS IAM?
Solution
Services running in on-prem data can use their Athenz issued identity x.509 certificates to request AWS temporary credentials from Athenz Token Service running in AWS.


Research and analysis
An introduction to Ofqual's inter-subject comparability research.
Ref: Ofqual/15/5797 PDF , 746KB , 14 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
The comparability of exam standards can be viewed in different ways. Concerns are sometimes raised about whether standards of GCSEs or A levels are being maintained over time. On some occasions, there is disquiet about the comparability of standards between the exams offered by different exam boards within a subject. For some years now there have been issues raised about the comparability of GCSEs and A levels with vocational qualifications that full-time students can take instead. In recent times, it has been suggested that our GCSEs and A levels do not stand comparison with the equivalent exams used in some educationally high-performing countries.
There is a fifth dimension to comparability. From time to time, questions are asked as to whether some GCSE or A level subjects are harder than others and, if so, whether a better alignment should be achieved. We are investigating technical, practical and policy issues in relation to the comparability of different GCSE and A level subjects in England, and we intend to establish our position once we have heard the views of others.
To help throw light on the present position, stimulate informed debate and help us decide what to do, we have produced a set of six working papers. This working paper considers why the comparability of different GCSE and A level subjects is an important issue to consider, focusing particularly on possible effects on the balance of the curriculum taken by GCSE and A level students. It also draws on the other working papers to provide a brief introduction to relevant considerations.


All articles are property of the New York Times company and are to be used by permission in a non-commercial way
© 2018 The New York Times Company


(#) Code contains easter egg !!! WARNING: Code contains easter egg This is a warning. Id : `EasterEgg` Summary : Code contains easter egg Note : **This issue is disabled by default**; use `--enable EasterEgg` Severity : Warning Category : Security Platform : Any Vendor : Android Open Source Project Feedback : https://issuetracker.google.com/issues/new?component=192708 Affects : Gradle build files, Kotlin and Java files, manifest files, property files and resource files Editing : This check runs on the fly in the IDE editor Implementation : [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/CommentDetector.java) Tests : [Source Code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/CommentDetectorTest.java) Copyright Year : 2012 An "easter egg" is code deliberately hidden in the code, both from potential users and even from other developers. This lint check looks for code which looks like it may be hidden from sight. (##) Example Here is an example of lint warnings produced by this check: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~text src/test/pkg/Hidden.java:5:Warning: Code might be hidden here; found unicode escape sequence which is interpreted as comment end, compiled code follows [EasterEgg] /* \u002a\u002f static { System.out.println("I'm executed on class load"); } \u002f\u002a */ ------------ src/test/pkg/Hidden.java:6:Warning: Code might be hidden here; found unicode escape sequence which is interpreted as comment end, compiled code follows [EasterEgg] /* \u002A\U002F static { System.out.println("I'm executed on class load"); } \u002f\u002a */ ------------ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Here is the source file referenced above: `src/test/pkg/Hidden.java`: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~java linenumbers package test.pkg; public class Hidden { // Innocent comment...? /* \u002a\u002f static { System.out.println("I'm executed on class load"); } \u002f\u002a */ /* \u002A\U002F static { System.out.println("I'm executed on class load"); } \u002f\u002a */ /* Normal \\u002A\U002F */ // OK static { String s = "\u002a\u002f"; // OK } // STOPSHIP /* We must STOPSHIP! */ String x = "STOPSHIP"; // OK } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can also visit the [source code](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-tests/src/test/java/com/android/tools/lint/checks/CommentDetectorTest.java) for the unit tests for this check to see additional scenarios. The above example was automatically extracted from the first unit test found for this lint check, `CommentDetector.testJava`. To report a problem with this extracted sample, visit https://issuetracker.google.com/issues/new?component=192708. (##) Suppressing You can suppress false positives using one of the following mechanisms: * Using a suppression annotation like this on the enclosing element: ```kt // Kotlin @Suppress("EasterEgg") fun method() { TODO(...) } ``` or ```java // Java @SuppressWarnings("EasterEgg") void method() { TODO(...); } ``` * Using a suppression comment like this on the line above: ```kt //noinspection EasterEgg problematicStatement() ``` * Adding the suppression attribute `tools:ignore="EasterEgg"` on the problematic XML element (or one of its enclosing elements). You may also need to add the following namespace declaration on the root element in the XML file if it's not already there: `xmlns:tools="http://schemas.android.com/tools"`. * Using a special `lint.xml` file in the source tree which turns off the check in that folder and any sub folder. A simple file might look like this: ```xml <?xml version="1.0" encoding="UTF-8"?> <lint> <issue id="EasterEgg" severity="ignore" /> </lint> ``` Instead of `ignore` you can also change the severity here, for example from `error` to `warning`. You can find additional documentation on how to filter issues by path, regular expression and so on [here](https://googlesamples.github.io/android-custom-lint-rules/usage/lintxml.md.html). * In Gradle projects, using the DSL syntax to configure lint. For example, you can use something like ```gradle lintOptions { disable 'EasterEgg' } ``` In Android projects this should be nested inside an `android { }` block. * For manual invocations of `lint`, using the `--ignore` flag: ``` $ lint --ignore EasterEgg ...` ``` * Last, but not least, using baselines, as discussed [here](https://googlesamples.github.io/android-custom-lint-rules/usage/baselines.md.html).


TORGO Database of Dysarthric Articulation, Linguistic Data Consortium (LDC) catalog number LDC2012S02 and ISBN 1-58563-603-7, was developed by the University of Toronto's departments of Computer Science and Speech Language Pathology in collaboration with the Holland-Bloorview Kids Rehabilitation Hospital in Toronto, Canada. It contains approximately 23 hours of English speech data, accompanying transcripts and documentation from 8 speakers (5 males, 3 females) with cerebral palsy (CP) or amyotrophic lateral sclerosis (ALS) and from 7 speakers (4 males, 3 females) from a non-dysarthric control group.
CP and ALS are examples of dysarthria which is caused by disruptions in the neuro-motor interface that distort motor commands to the vocal articulators, resulting in atypical and relatively unintelligible speech in most cases. The TORGO database is primarily a resource for developing advanced automatic speaker recognition (ASR) models suited to the needs of people with dysarthria, but it is also applicable to non-dysarthric speech. The inability of modern ASR to effectively understand dysarthric speech is a problem since the more general physical disabilities often associated with the condition can make other forms of computer input, such as computer keyboards or touch screens, difficult to use.
The data consists of aligned acoustics and measured 3D articulatory features from the speakers carried out using the 3D AG500 electro-magnetic articulograph (EMA) system (Carstens Medizinelektronik GmbH, Lenglern, Germany) with fully-automated calibration. This system allows for 3D recordings of articulatory movements inside and outside the vocal tract, thus providing a detailed window on the nature and direction of speech-related activity.
The data was collected between 2008 and 2010 in Toronto, Canada. All subjects read text consisting of non-words, short words and restricted sentences from a 19-inch LCD screen. The restricted sentences included 162 sentences from the sentence intelligibility section of Assessment of intelligibility of dysarthric speech (Yorkston & Beukelman, 1981) and 460 sentences derived from the TIMIT database. The unrestricted sentences were elicited by asking participants to spontaneously describe 30 images in interesting situations taken randomly from Webber Photo Cards - Story Starters (Webber, 2005), designed to prompt students to tell or write a story.
Data is organized by speaker and by the session in which each speaker recorded data. Each speaker was assigned a code and given their own file directory. The code for female speakers begins with 'F', and the code for male speakers begins with 'M'. If the speaker was a member of the control group, the letter 'C' follows the gender code. The last two digits of the code indicate the order in which that subject was recruited. For example, speaker 'FC02' was the second female speaker without dysarthria recruited. Note that some speakers were intentionally left out of the data, and thus, there are gaps in the numbering.
Each speaker's directory contains 'Session' directories which encapsulate data recorded in the respective visit and occasionally, a 'Notes' directory which can include Frenchay assessments (test for the measurement, description and diagnosis of dysarthria), notes about sessions (e.g., sensor errors), and other relevant notes.
Each 'Session' directory can, but does not necessarily, contain the following content:
Additionally, sessions recorded with the AG500 articulograph are marked with the file 'EMA', and those recorded with the video-based system are marked with the file 'VIDEO'. Files with a date form as the filename and a txt extension (e.g. april232008cal2.txt, jan28cal3.txt) are the measured responses from calibration. The *.log and *.calset files contain descriptions of the calibration process, but not the final result of calibration.
See the readme file and the AG500 Wiki for more complete descriptions of the possible subfolders and of the AG500 specific files. Also, see session_contents.tsv for a tab separated table of each session's subfolders and metadata files.
Please see file.tbl for a complete file list as well as checksums for this publication.
Additional information, updates, bug fixes may be available in the LDC catalog entry for this corpus at LDC2012S02.
Portions © 2008-2011 Frank Rudzicz, © 2012 Trustees of the University of Pennsylvania.


Sage, LaTeX and Friends#
Sage and the LaTeX dialect of TeX have an intensely synergistic relationship. This section aims to introduce the variety of interactions, beginning with the most basic and proceeding to the more unusual.
Overview#
It may be easiest to understand the various uses of LaTeX with a brief overview of the mechanics of the three principal methods employed by Sage.
Every “object” in Sage is required to have a LaTeX representation. You can access this representation by executing
latex(foo)
wherefoo
is some object in Sage. The output is a string that should render a reasonably accurate representation offoo
when used in TeX’s math-mode (for example, when enclosed between a pair of single dollar signs). Some examples of this follow below.In this way, Sage can be used effectively for constructing portions of a LaTeX document: create or compute an object in Sage, print
latex()
of the object and cut/paste it into your document.The Jupyter notebook interface uses MathJax to render mathematics cleanly in a web browser. You can start this automatic rendering by executing
%display latex
(and stop by executing%display plain
).MathJax is an open source JavaScript display engine for mathematics that works in all modern browsers. It is able to render a large, but not totally complete, subset of TeX. It has no support for things like complicated tables, sectioning or document management, as it is oriented towards accurately rendering “snippets” of TeX. Seemingly automatic rendering of math in the notebook is provided by converting the
latex()
representation of an object (as described above) into a form of HTML palatable to MathJax.A system-wide installation of LaTeX can be employed. Sage includes almost everything you need to build and use Sage, but a significant exception is TeX itself. So in these situations you need to have TeX installed, along with some associated conversion utilities, to utilize the full power.
Here we demonstrate some basic uses of the latex()
function.
sage: var('z')
z
sage: latex(z^12)
z^{12}
sage: latex(integrate(z^4, z))
\frac{1}{5} \, z^{5}
sage: latex('a string')
\text{\texttt{a{ }string}}
sage: latex(QQ)
\Bold{Q}
sage: latex(matrix(QQ, 2, 3, [[2,4,6],[-1,-1,-1]]))
\left(\begin{array}{rrr}
2 & 4 & 6 \\
-1 & -1 & -1
\end{array}\right)
Basic MathJax functionality is largely automatic in the notebook, but we can
partially demonstrate this support with the MathJax
class. The object of
this class converts a Sage object to its LaTeX representation and then wraps it
in HTML.
sage: from sage.misc.html import MathJax
sage: mj = MathJax()
sage: var('z')
z
sage: mj(z^12)
\[z^{12}\]
sage: mj(QQ)
\[\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Q}\]
sage: mj(ZZ['x'])
\[\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Z}[x]\]
sage: mj(integrate(z^4, z))
\[\frac{1}{5} \, z^{5}\]
Basic Use#
As indicated in the overview, the simplest way to exploit Sage’s support of
LaTeX is to use the latex()
function to create legitimate LaTeX code to
represent mathematical objects. These strings can then be incorporated into
standalone LaTeX documents.
At the other extreme is the view()
command. The command view(foo)
will
create the LaTeX representation of foo
, incorporate this into a simple
LaTeX document, and then process that document with your system-wide TeX
installation. Finally, the appropriate viewer will be called to display the
output from the TeX command. Which version of TeX is used, and therefore the
nature of the output and associated viewer, can be customized (see
Customizing LaTeX Processing).
Customizing LaTeX Generation#
There are several ways to customize the actual LaTeX code generated by the
latex()
command. There is a pre-defined object named latex
which has
several methods, which you can list by typing latex.
, followed by the
Tab key (note the period).
A good example is the latex.matrix_delimiters
method. It can be
used to change the notation surrounding a matrix – large parentheses,
brackets, braces, vertical bars. No notion of style is enforced,
you can mix and match as you please. Notice how the backslashes
needed in LaTeX require an extra slash so they are escaped
properly within the Python string.
sage: A = matrix(ZZ, 2, 2, range(4))
sage: latex(A)
\left(\begin{array}{rr}
0 & 1 \\
2 & 3
\end{array}\right)
sage: latex.matrix_delimiters(left='[', right=']')
sage: latex(A)
\left[\begin{array}{rr}
0 & 1 \\
2 & 3
\end{array}\right]
sage: latex.matrix_delimiters(left='\\{', right='\\}')
sage: latex(A)
\left\{\begin{array}{rr}
0 & 1 \\
2 & 3
\end{array}\right\}
The latex.vector_delimiters
method works similarly.
The way common rings and fields (integers, rational, reals, etc.)
are typeset can be controlled by the latex.blackboard_bold
method. These sets are by default typeset in bold, but may
optionally be written in a double-struck fashion as sometimes
done in written work. This is accomplished by redefining the
\Bold{}
macro which is built-in to Sage.
sage: latex(QQ)
\Bold{Q}
sage: from sage.misc.html import MathJax
sage: mj = MathJax()
sage: mj(QQ)
\[\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Q}\]
sage: latex.blackboard_bold(True)
sage: mj(QQ)
\[\newcommand{\Bold}[1]{\mathbb{#1}}\Bold{Q}\]
sage: latex.blackboard_bold(False)
It is possible to take advantage of the extensible nature of TeX by adding in new macros and new packages. First, individual macros can be added so that they are used when MathJax interprets a snippet of TeX in the notebook.
sage: latex.extra_macros()
''
sage: latex.add_macro("\\newcommand{\\foo}{bar}")
sage: latex.extra_macros()
'\\newcommand{\\foo}{bar}'
sage: var('x y')
(x, y)
sage: latex(x+y)
x + y
sage: from sage.misc.html import MathJax
sage: mj = MathJax()
sage: mj(x+y)
\[\newcommand{\foo}{bar}x + y\]
Additional macros added this way will also be used in the event that the
system-wide version of TeX is called on something larger than MathJax can
handle. The command latex_extra_preamble
is used to build the preamble of
a complete LaTeX document, so the following illustrates how this is
accomplished. As usual note the need for the double-backslashes in the Python
strings.
sage: latex.extra_macros('')
sage: latex.extra_preamble('')
sage: from sage.misc.latex import latex_extra_preamble
sage: print(latex_extra_preamble())
\newcommand{\ZZ}{\Bold{Z}}
...
\newcommand{\Bold}[1]{\mathbf{#1}}
sage: latex.add_macro("\\newcommand{\\foo}{bar}")
sage: print(latex_extra_preamble())
\newcommand{\ZZ}{\Bold{Z}}
...
\newcommand{\Bold}[1]{\mathbf{#1}}
\newcommand{\foo}{bar}
Again, for larger or more complicated LaTeX expressions, it is possible to add
packages (or anything else) to the preamble of the LaTeX file. Anything may be
incorporated into the preamble with the latex.add_to_preamble
command, and
the specialized command latex.add_package_to_preamble_if_available
will
first check if a certain package is actually available before trying to add it
to the preamble.
Here we add the geometry package to the preamble and use it to set the size of the region on the page that TeX will use (effectively setting the margins). As usual, note the need for the double-backslashes in the Python strings.
sage: from sage.misc.latex import latex_extra_preamble
sage: latex.extra_macros('')
sage: latex.extra_preamble('')
sage: latex.add_to_preamble('\\usepackage{geometry}')
sage: latex.add_to_preamble('\\geometry{letterpaper,total={8in,10in}}')
sage: latex.extra_preamble()
'\\usepackage{geometry}\\geometry{letterpaper,total={8in,10in}}'
sage: print(latex_extra_preamble())
\usepackage{geometry}\geometry{letterpaper,total={8in,10in}}
\newcommand{\ZZ}{\Bold{Z}}
...
\newcommand{\Bold}[1]{\mathbf{#1}}
A particular package may be added along with a check on its existence, as follows. As an example, we just illustrate an attempt to add to the preamble a package that presumably does not exist.
sage: latex.extra_preamble('')
sage: latex.extra_preamble()
''
sage: latex.add_to_preamble('\\usepackage{foo-bar-unchecked}')
sage: latex.extra_preamble()
'\\usepackage{foo-bar-unchecked}'
sage: latex.add_package_to_preamble_if_available('foo-bar-checked')
sage: latex.extra_preamble()
'\\usepackage{foo-bar-unchecked}'
Customizing LaTeX Processing#
It is also possible to control which variant of TeX is used for system-wide invocations, thus also influencing the nature of the output.
The latex.engine()
command can be used to control if the system-wide
executables latex
, pdflatex
or xelatex
are employed for more
complicated LaTeX expressions. When view()
is called and the engine is set
to latex
, a dvi file is produced and Sage will use a dvi viewer (like xdvi)
to display the result. In contrast, using view()
when the engine is set to
pdflatex
will produce a PDF as the result and Sage will call your system’s
utility for displaying PDF files (acrobat, okular, evince, etc.).
For a concrete example of how complicated LaTeX expressions can be processed,
see the example in the next section (An Example: Combinatorial Graphs with tkz-graph) for using the LaTeX
tkz-graph
package to produce high-quality renderings of combinatorial
graphs. For other examples, there are some pre-packaged test cases. To use
these, it is necessary to import the sage.misc.latex.latex_examples
object,
which is an instance of the sage.misc.latex.LatexExamples
class, as
illustrated below. This class currently has examples of commutative diagrams,
combinatorial graphs, knot theory and pstricks, which respectively exercise the
following packages: xy, tkz-graph, xypic, pstricks. After the import, use
tab-completion on latex_examples
to see the pre-packaged examples. Calling
each example will give you back some explanation about what is required to make
the example render properly. To actually see the examples, it is necessary to
use view()
(once the preamble, engine, etc are all set properly).
sage: from sage.misc.latex import latex_examples
sage: latex_examples.diagram()
LaTeX example for testing display of a commutative diagram produced
by xypic.
To use, try to view this object -- it will not work. Now try
'latex.add_to_preamble("\\usepackage[matrix,arrow,curve,cmtip]{xy}")',
and try viewing again. You should get a picture (a part of the diagram arising
from a filtered chain complex).
An Example: Combinatorial Graphs with tkz-graph#
High-quality illustrations of combinatorial graphs (henceforth just “graphs”)
are possible with the tkz-graph
package. This package is built on top of
the tikz
front-end to the pgf
library. So all of these components need
to be part of a system-wide TeX installation, and it may be possible that these
components may not be at their most current versions as packaged in some TeX
implementations. So for best results, it could be necessary or advisable to
install these as part of your personal texmf tree. Creating, maintaining and
customizing a system-wide or personal TeX installation is beyond the scope of
this document, but it should be easy to find instructions. The necessary files
are listed in A Fully Capable TeX Installation.
Thus, to start we need to insure that the relevant packages are included by
adding them to the preamble of the eventual LaTeX document. The images of
graphs do not form properly when a dvi file is used as an intermediate format,
so it is best to set the latex engine to the pdflatex
executable. At this
point a command like view(graphs.CompleteGraph(4))
should produce a PDF
with an appropriate image of the complete graph \(K_4\).
Note that there is a variety of options to affect how a graph is rendered in
LaTeX via tkz-graph
, which is again outside the scope of this section, see
the section of the Reference manual titled “LaTeX Options for Graphs” for
instructions and details.
A Fully Capable TeX Installation#
Many of the more advanced features of the integration of TeX with Sage requires
a system-wide installation of TeX. Many versions of Linux have base TeX
packages based on TeX Live, for macOS there is TeXShop and for Windows there is
MiKTeX. The convert
utility is part of the ImageMagick suite (which should be a package or an easy
download), and the three programs dvipng
, ps2pdf
, and dvips
may be
included with your TeX distribution. The first two may also be obtained,
respectively, from http://sourceforge.net/projects/dvipng/ and as part of
Ghostscript.
Rendering combinatorial graphs requires a recent version of the PGF library,
the file tkz-graph.sty
from https://www.ctan.org/pkg/tkz-graph, and the
files tkz-arith.sty
and perhaps tkz-berge.sty
from
https://www.ctan.org/pkg/tkz-berge.
SageTeX#
SageTeX is a program available to further integrate TeX and Sage. A concise
description of SageTeX is that it is a collection of TeX macros that allow a
LaTeX document to include instructions to have Sage compute various objects
and/or format objects using the latex()
support built into Sage. So as an
intermediate step of compiling a LaTeX document, all of the computational and
LaTeX-formatting features of Sage can be handled automatically. As an example,
a mathematics examination can maintain a correct correspondence between
questions and answers by using SageTeX to have Sage compute one from the other.
See Using SageTeX for more information.


Smartphones are no longer just for making calls or messaging, you can do a whole lot of things with your smartphone now. It is imperative to get a hold on its specifications before buying any mobile as we run most aspects of our daily lives through it. The new Redmi Note 7 sports a 6.3" (16 cm) IPS LCD display, having a screen resolution of 1080 x 2340 pixels, aspect ratio of 19.5:9 and pixel density of 409 PPI. It features a bezel-less display with waterdrop notch with a screen to body ratio of 81.21 percent. The device is protected by Corning Gorilla Glass v5 against minor tears and scratches. Its capacitive touchscreen supports multi-touch functionality i.e. it responds instantly even on the subtle taps.
Xiaomi Redmi Note 7 functions on Android v9.0 (Pie) operating system and is powered by Octa-core (2.2 GHz, Quad core, Kryo 260 + 1.8 GHz, Quad core, Kryo 260) processor and RAM of 3 GB, sitting on 64-bit architecture. Its Adreno 512 graphics ensures exceptional graphical experience while playing games. Besides this, the device comes with a Light sensor, Proximity sensor, Accelerometer, Compass, and Gyroscope. The phone is 8.1 mm slim & weighs 186 grams, have a fingerprint sensor.
4.1 average based on 254 reviews.


Snipper Pizza Cafe is located opposite QUICK-MATT SUPPERMARKET a long Waiyaki High WayP.O BOX 4004 Waruku-Nairobi You can reach us by through email:enookimuu@gmail.com


Polygons from Line Segments
This is a demonstration/test of a technique for taking a set of line segments and finding all of the polygons that
the intersections generate. Click on the canvas to add line segments. The drawing is done using p5.js.The summary of the algorithm is:
The algorithm
- Find all intersections between line segments
- From the set of intersections, identify a nearest neighbor in each direction
- Generate a graph where each node is an intersection-point with a connection to that intersection-point's nearest neighbors
- Use a depth-first search to find the shortest paths from each node back to itself without backtracking. These
paths should make up the minimal cycles in the graph which correspond to the polygons made by the line segments.
Problems/Limitations
- We are treating each intersection-point as unique. If your system has more than two lines intersecting
on the same point, part of this process might not work. If it doesn't, it shouldn't be too hard to allow
for overlapping intersection points in the geometry layer but still treat them as separate nodes in the graph
layer. I think this should be fine but I haven't thought hard about it.
-
Our technique misses some polygons. This is explained in slightly-more-detail in a comment in graph.js
(in the findMinimumCycles() function), along with some attempts to fix the problem and an untested idea.
Code
- Repository:
https://github.com/wmacfarl/polygonsFromSegments
- index.html + sketch.js: demonstration page for interactive construction of segments+polygons
- polygonFinder.js: contains functions for finding polygons. depends on lineSegement.js, point.js, intersection.js, and graph.js
- lineSegment.js, point.js, intersection.js: Geometry classes with some basic utility functions.
- graph.js: Class for creating and analyzing graphs -- contains depth-first-search, shortest path code, etc
In general, I think that polygonFinder.js should have all *geometric* data -- everything referencing coordinates, points, or lines. graph.js should
care only about nodes and connections. *This is not currently true.*
At the moment graph.js nodes are associated with points and these associations are used to
help us build the graph. This could probably be generalized into just being an association with a generic ID-object instead of a
point which would let us use the code in non-geometric domains.


Revamping this website was on my “To-Do” list for almost a year before I actually scrapped it. Overcommitting and my lack of creative confidence puts me in a vortex of procrastination.
Side/Optional projects get hit the hardest.
I’m a detail oriented perfectionist. So when it comes to these types of projects, if I’m not 100% happy, it’s easy for me to scrap it and forget about it.
That’s what happened to this blog.
Till now.


Search Inside Yourself
Chapter Three - Mindfulness Conversation
Chapter Three of 'Search Inside yourself' by Chade-Meng Tan is about everyday mediation techniques away from 'the cushion' and introduces us to the following:
- Walking Meditation - While walking, focus your attention on the feelings and movements around your body; if the mind begins to wander, gently bring it back.
- Mindful Listening - Find a buddy, and buddy up! Focus all of your attention on listening to your buudy-companion and allow them to talk about something important to them for a short amount of time (3-5 minutes). When time is up, switch roles. If either person runs out of things to say, just sit silently and enjoy the bliss of mutual silence.
- Mindful Conversation - There are 3 components to mindful conversation: listening, looping & dipping
- Listening - As above.
- Looping - When 'Mindful Listening' time is up, repeat back to your buddy what you understood them saying. When you have finished, invite your buddy to provide feedback on any parts you may have missed out or misinterpreted. Continue to loop back and forth, until you are completely clear on how your buddy is feeling about the given topic. Then switch.
- Dipping - (Or more importantly not dipping) is resisting going off on your own train of thought while your buddy is talking. Distractions in one's own head are the main reason for one not listening. If any thoughts do enter the mind, acknowledge them and allow them to linger if they so wish, but DO NOT GET DISTRACTED and where possible, allow them to simply drift away.
The above meditation techniques can be practiced in either a formal or an improv/on-the-go basis. The benefit of diversifying your meditation practice and including these techniques is it makes you more aware of what is going on around you and how others around you are feeling.
Next time I am listening to friends and loved ones, I will try listening that little bit harder and avoid dipping (I am definately a serial dipper). This will make friends and loved ones feel more special and will put me in a better position to appreciate and enjoy every moment that much more. Less time thinking about the stresses of daily life, and more focus on enjoying life itself. Sounds perfect.
Cheers,