Sharing is Caring - Patterns for JavaScript Library Design
[Applause] MAGGIE: Hi, everybody.
How are you doing today?
You are hitting the end of the conference, it's like the tired part, but we are going
to be okay.
So I'm here to talk to you about API design for JavaScript libraries and how you can do
some sharing, so I will say up on the screen are my two kids and the oldest, Dalton, really
likes to tell you that caring is sharing when he wants to eat the food on your dinner plate.
So who am I?
I really think that you need know nothing other than semicolons, tabs, all the code
in the slide is semicolons, tabs.
In all seriousness I work for Microsoft, I'm a crisis management engineer, so if you are
hosted on Azure and your things are not working, I am the person who is on the phone being
like: everyone wake up!
I am a maintainer of Moment.js, there are two of us here today, I don't know if some
of you saw Matt's talk earlier, but I am a maintainer of Moment.js and in addition I
am the JS Foundation's representative to TC3 ... 9 and I represent the JS Foundation which
is awesome and supports JavaScript projects in the ecosystem.
I will tell you, if you have made a JavaScript commit to an open source project we represent
you so if you would like representation, we are your representation as an open source
committer, and on that note I am the champion of the date re-work proposal that was talked
about earlier, so if you are interested in what's happening in JavaScript date, I am
working on that, but today that is not what we are talking about.
Today what we are talking about is libraries.
Is anybody here besides me a library author?
Okay, all right.
I am going to bring up some libraries and if it's one of yours and I got it wrong, you
shout real loud: you got that library wrong, Maggie.
So what is a library?
There are a lot of definitions for the word library, but what I am going to go with is:
a library is a bit of code that's useful when it's packaged up and distributed to other
people.
This could be internal or external, so there are tons of external libraries that we know
about, like LoDash, jQuery, Request and I think everybody in the room nearly knows every
one of those, right?
Internally there's a tendency to make internal libraries.
I know at Microsoft we have millions of internal libraries for the purposes of logging and
analytics.
Oh my gosh, I add internal libraries to everything for that.
For the purpose of this talk I do want to define what is not a library.
I am going to say things like Express or Angular or webpack are not libraries for the purpose
of this talk.
Instead, Express or Angular would be a framework.
They do a whole lot more than provide some useful code.
They tell you how you should code.
Webpack on the other hand would be a full tool suite so I'm not going to consider those
things libraries.
One other thing I am going to mention about this talk is that I'm going to get out examples
of some of the libraries I have listed at the top, and we might think of those libraries
as like lame, like it's from 2007, guys, but the bottom line is these libraries have survived
a really long time.
So we are really into the new hotness in JavaScript but for the purposes of this talk I have stuck
to libraries that we are all npm installing several years later because longevity is good.
Call me lame, it's okay, I can live with it.
So here is what we think a library is like.
Whose kids behave like this all the time, like happy and playing?
All right, so here is what having a library is actually like.
Does anybody have this toy besides me?
This is a toy only a grandparent would give you.
There's two kids, some buttons and some whipped cream.
[Laughter] What is what having a library is like out
in the open source space.
Like that looked really fun, and then boom.
Kept in the open source space it actually looked leek this.
Tim Wood, awesome guy, he was like: I'm going to share, I am going to care - and here we
are four years later with 2,400 closed issues and 176 open.
That's what having a library is like.
And your best defence against that is making it well.
So what makes a library good?
Small size.
I never want to hear about it again.
Great code!
Your users don't use your code.
They are never going to look at it.
Encourages functional programming practices: it's big right now, isn't it?
Wait, wait, this is JavaScript, the amazing mocha ... tool chain that I spent 12 weeks
assembling, that made my library good.
Guys, ease of use.
Ease of use.
Nobody wants to learn your library.
They won't.
Those 2,400 odd GitHub issues, 50% of them are, "I didn't read your documentation".
It's okay to make it simple.
You don't have to get into fancy patterns.
Your users are just going to go: what's partial application?
So I am going to break this out into four areas.
One: invocation.
How do I invoke my library?
How do I actually call it?
Two, configuration.
This is a huge part of any library, it doesn't do what I want it to do unless it changes
its configuration this way.
Three, defaults.
What should the default behaviours of my library be?
And finally errors, which are no easy thing to deal with.
So invocation.
Basically for any library there's two kind of simple ways to invoke it.
One is static invocation, right?
You just call a function.
So here we have two great libraries that I think everyone here has probably touched,
a request from Node and this is aesthetic invocation, I want to get Google.com and I
get a call back.
It's just static.
Or good old 27 million downloads a month LoDash, who here hasn't used it - I am asking for
filter, and I get back a filtered list.
Awesome.
Static invocation is a great pattern.
I would not shy away from it.
For logging libraries this is the way to go.
It's easy, you just say dot log, dot error, it's easy for people to figure out, they don't
have to think too hard about what's going on so this is my go-to if I want to write
a simple library.
It has a drawback though.
Here is LoDash without using any of the chaining or functional features.
If I want to get the sum of some odd numbers doubled.
We are going down - like this almost looks like a Christmas tree but it's not, it's just
LoDash.
All right, so when you start getting into this kind of trap with your library then you
are probably going to move to doing something like a factory function.
Now, many libraries have done really well with the factory function.
Up here, I have Q - everybody has used Q, right?
Oh yes, it returns promises, doesn't it?
Q fundamentally is a library that makes promises, and then you can do what you will with those
promises.
JQuery, good old ubiquitous jQuery makes jQuery objects.
Who learnt that when they first started coding ten years ago?
And Moment, my library.
By the way, I am going to shred Moment in my examples.
I will tell you of my pain.
But Moment again is a factory library.
You invoke Moment and you get back a Moment object.
And these kinds of things allow for some really, really good patterns to happen.
A factory function is what's going to allow you to go into a chaining API or at least
is one very good way to do that, so here we can see Q, again we are doing F call, which
is going to give us a promise back, and then fundamentally we can chain on another promise
and chain on another promise because we just keep on getting promises all the way down,
so this is a super helpful way to invoke a library, to have it give an object back and
then have that give an object back.
There are some problems with chaining but on the whole it works well for a lot of people.
Here is chaining API, here I'm adding three days to the current time, then going to the
start, and then going to a year ago.
God knows why I would want to do that but people have.
It reads really easy, I'm not questioning where is this invocation in the world, I'm
just cruising along.
JQuery, again like for all that we like to rip on jQuery for the bad programming practices,
man does this get our work done?
I still bring in jQuery if I have a static ASVC web page.
Why not?
So the next set of patterns that I would like to look at are configuration patterns.
Almost every library in the world is going to need some form of configuration, and it
can get pretty difficult for people to figure out how to do.
So we will take a quick look at Moment.
This is Moment like circa 2012.
It was great.
You had a date string and you could either pass it into the Moment constructor and let
the Moment constructor deal with it or you could specify a format to make sure that the
constructor got the right thing.
This is beautiful.
This was easy.
Moment 2017.
Constructor.
Here, you can construct with an array, you can construct a Moment from another Moment
object that will give you a copy, you can construct a Moment from a date, I guess that
makes sense; you can do a date string with a format in the English language or any other
language; you can use strict mode which will force you to match the pattern that you are
supplying; you could combine language in strict mode, oh, multiple formats, maybe you are
expecting four or five formats, I am going to throw an array in there and I still need
to support language and strict mode.
Whoa!
Like that was intense.
By the way, having this overloaded constructor where your constructor is expecting like a
billion options, I think - so Moment uses ES6 modules and I think to actually parse
out this constructor it happens in about ten files that are all about 100 lines of code
each, just to parse this madness it's like type checking and then what does this actually
mean?
This isn't that great.
I am going to give some credit here to my colleagues on the ECMA402 Committee.
They have been putting together the new internationalisation API.
Has anybody used those?
Oh yeah, the international API so the standards said how are we going to do configuration
because localisation takes a heck of a lot of configuration and they came up with this
really simple paradigm, and for all that it isn't fancy, I love it.
I think it's really going to serve JavaScript's users over time, and it's this.
I am going to create a new date time format here.
I must know the locale for the format.
The locale is required, right?
So I put the required parameter here, and then everything else I need to know I put
in an options object.
Now, this is used the world over, in a million libraries, and it's used because it works.
I'm easily specifying hour, minute, second and time zone formats without having a mess
in my constructor, without having to chain defaults to the global object.
None of that is happening.
So options, objects, it seems simple, it seems almost stupid for me to say but they are going
to get you a long way in cleaning up constructors like I showed you with Moment.
The other thing they do and again good old jQuery, you are beautiful - you really were
- is they have simple business logic.
If you go into options object less than then say you want the user to be able to define
a behaviour in the library you are going to be able to do something like that with this,
here we have jQuery AJAX requests and if I want to file a 404 I can parse a custom function.
This is beautiful.
This is easy for the user.
So basically, when it comes to configuration, do required parameters at the beginning of
your constructor and then tie the options object to the end.
This is going to be the easiest way for anybody to invoke your library.
Defaults.
Now, defaults are a fascinating topic, and they are difficult to get right.
Let's look at this.
This is a clean HTTP request with a built in no JS APIs.
I assume a lot of people here have done this, the plain no library HTTP request and some
interesting stuff is going on.
What I want to do here is I want to get the Moment, so I am going to Tim R Wood/Moment,
okay, great, I assume I get requests and a few things get crazy here, I actually do like
continuous update stream, response body, but I want to call it this, I get a re-direct.
301, move permanently.
That's absolutely true because Tim moved the Moment repo to the Moment org years ago, but
now because I get a re-direct I am going to have to start this whole process again and
go look for the re-direct link that I got.
That's kind of a pain.
Request.
Anybody here a Request user?
This is a good library, it does a lot of good stuff for us but a big one is it will automatically
follow a re-direct so here when I kick off my request for Tim R Wood Moment, I actually
get back the repository I wanted with the data about it.
It just automatically followed the re-direct.
Now, what this is is best by default.
When was the last time that you got a re-direct link and didn't want to follow it?
Right.
I am sure it has happened and I am sure you can configure requests to not re-direct but
like seriously, this is like 95% of the time, 99% of the time, you are going to follow the
re-direct, so if there's an obvious right best answer like that's like well over 90%
case, then do it!
Right?
But here is a flip side, I am going to go back to Moment, nothing like trashing the
library that I love so much.
Here I have Moment and I'm parsing in this date string, let's pan out 1025 and I get
out 1725.
Why?
So here is what is actually going on with Moment.
Time is complicated and when I parse in 1025 to the base Moment constructor I get back
1725 because it's converting it to local time, minus 5 here, and then I came to Berlin time,
right?
If, in fact, I had wanted UTC, I would use the UTC constructor.
If I had wanted to stay in minus 5 I would use parse zone.
If I had wanted a different time zone, for instance New York, then I would use the time
zone constructor.
There's no good default here.
Like, honestly, are any of those like the thing that you do all the time, are any of
those a 95% case?
No.
And this single API flaw has caused more support issues in Moment.js than any other thing by
about three orders of magnitude.
People are like: why isn't this the day that I thought it was going to be?
And all they really had to do was this: instead of having that default just Moment paren constructor,
if we had made people choose and made them say Moment.local, they would have gone, "Oh,
local time", and it would have saved us I don't know how many hours.
The next time we ran a major version for me to deprecate the major constructor will be
all of 30 minutes of work and it is happening.
We are not living like this anymore.
Get to update all the docs.
Then you get to update your code.
So default only when there is a best answer.
If there are several likely behaviours, don't lock yourself into the trap of answering support
requests on all of them.
So the last thing I want to talk about is errors.
So errors at one time in JavaScript, we were like in happy fun land, like we are on the
bus, we will just ... the browser and it will be really great, then we will hit F12 and
it will be great, then this happens.
This is directly out of the Node.js docs.
Exception must be handled or the no process will be handled immediately.
Who has had this happen?
Oh yeah.
So we were like: you are going to use it on a server and then the error is going to happen
and we are going to crash the server?
Oh God!
And for a long time people got this idea that
libraries should never throw errors.
Never throw errors in a library, you will kill things.
But that's difficult too, so I actually like any good software engineer went to Twitter
and was like: does Node give any official guidance about this error thing several years
in?
And it exploded into a massive Twitter conversation that lasted like four hours.
And the only thing back I really got from Node is that Miles cares a lot about errors.
He wanted me to tell you, so Miles cares a lot about errors.
But the general consensus on the thread can be summed up as: throw an obvious developer
error.
So let's break that one down.
Here is Moment doing actually a pretty good job at its thing.
This is a date and it's probably user input, and user input is always potentially junk,
right?
So we don't want to every time a user enters a date, if that date isn't in the format that
we want, start exploding Node servers, so instead what happens is we very politely take
your input and we say: oh, you have tried to format this; invalid date.
And then maybe your one user with the bad input sees invalid date but at least we haven't
taken out your Node process.
So this is done.
Bad user input doesn't crash.
But then we have this other thing going on.
You need to get on Moment to get the hours date part, and this looks great, it gets us
back 13, and must be some time in the early afternoon that I ran this, but this is weird.
I misspell hours, I put in hurs, and I get back a Moment object.
I would completely expect to get a Moment object from that method invocation.
At the end of the day this wouldn't be deployed onto a server in production.
This is a developer time error.
And it's one that's potentially very difficult to find.
You will go digging through your code and you will be like: where is it?
Why do I see JSON where I should see a string?
What the heck?
And you will get all the way down to the library and you will be like: those people! [Laughter]
So let's see an example of this actually being really done well.
Who here - this is immutable, people used Immutable from Facebook?
Sure.
Good library.
What Immutable does is it makes collections.
Here we are going to make a map and any time we change this map it will make a new map
and this is this library doing it very well.
We are making a map, ABC, 123, then we set B and the first map still has 2 and the second
map has 50 so that's what it does.
Okay.
But it does something awesome here.
When I try to make a map of the number 1, which is like impossible, because like how
do you map the number 1, it actually tells me: hey, developer, we expected an array or
an iterable object.
Could you hand that over?
[Laughter] This is good.
When it comes to errors, if it's about the parser user input then you are going to want
to try to suppress as best you can for Node.js but if you can tell the dead fat finger something,
help them out and undo the fat finger.
In conclusion, just make stuff easy to use.
Don't get fancy, don't spend a lot of time thinking about: oh, what are the functional
paradigms I can use here and how beautiful can my code be and what tool chain can I have?
At the end of the day, some have lived for years not for anything other than the fact
that people picked them up and were able to use them quickly.
So put your investment as a library author, whether internal or external, right there.
For invocation, static your factory.
One of them is going to work out for you.
Chaining may really enhance your problem domain.
Objects for configuration, everybody knows them and they really do clean things up.
Defaults, careful, careful.
When there is an obvious right answer, then pick that to be your default, but don't pick
an arbitrary default.
Do not do it.
And finally, throw for those obvious developer areas that make it so your users aren't sitting
there complaining about how you are a horrible person and how they couldn't find this mysterious
bug in your code.
After that, just share.
Get out on GitHub, through your company get people contributing to your library internally
and be friendly and be open to new ideas.
All right, well, thanks, everybody.
I love questions, so ... [Applause] >> Wasn't that fantastic?
Come on, more rounds of applause, please.
Woo!
[Applause]
For more infomation >> Maggie Pint: Sharing is Caring - Patterns for JavaScript Library Design | JSConf EU 2017 - Duration: 25:38.-------------------------------------------
Fireworks legal for sale in Iowa starting Thursday - Duration: 1:55.
BLUFFS TRYING TO DE-FUSE
A POTENTIALLY CONFUSING
SITUATION.
ALEXANDRA: KETV NEWSWATCH 7'S
MICHELLE BANDUR REPORTS.
MICHELLE: YOU WON'T HAVE TO
DRIVE FOR HOURS TO ANOTHER STATE
TO BUY FIREWORKS THIS SUMMER.
YOU'LL FIND ALL FIREWORKS FOR
SALE IN IOWA.
THAT CONCERNS FIRE CHIEFS LIKE
JUSTIN JAMES IN COUNCIL BLUFFS.
>> THERE'S NOBODY THAT COULD
EVER ARGUE FIREWORKS ARE SAFE IN
THE GENERAL POPULATION.
MICHELLE: CHIEF JAMES IS
FRUSTRATED WITH THE IOWA
LEGISLATURE FOR LIFTING THE BAN
ON FIREWORKS.
>> THE STATE LEGISLATURE DECIDED
TO TAKE SALES TAX REV OVER T
SAFETY OF THEIR CITIZENS, AND IT
WILL COST US.
THERE WILL BE A CITY IN THE
STATE OF IOWA THAT HAS ISSUES.
KRISTYNA: THA >
--
MICHELLE: JAMES SHARED HIS
>>
--
MICHELLE: JAMES SHARED HIS
CONCERNS WITH THE CITY COUNCIL
AS IT HELD A SPECIAL MEETING TO
ADDRESS THE NEW LAW.
>> WE DON'T WANT TO RESTRICT IT
SO EVERY ONE CAN HAVE FUN WITHIN
REASON.
MICHELLE: HEAD SAYS IT'S
IMPORTANT RESIDENTS KNOW JUST
BECAUSE YOU CAN BUY FIREWORKS IN
JUNE, DOESN'T MEAN YOU CAN SET
THEM OFF.
THE COUNCIL WANTS TO LIMIT THAT.
>> IT COULD REALLY CAUSE A LOT
OF TRAUMA AND HEALTH PROBLEMS.
MICHELLE: THE CITY COUNCIL IS
PROPOSING AMENDMENTS TO ITS TWO
FIREWORKS ORDINANCES.
IF YOU'RE SHOOTING THEM OFF, YOU
NEED PERMISSION FROM PROPERTY
OWNERS AND HAVE A 75-FOOT CLEAR
ZONE.
YOU HAVE TO 18 OR OLDER.
AND YOU CAN SHOOT THEM OFF JUL
2 TO 4 FROM NOON TO 11:00 P.M.,
AND NEW YEAR'S EVE NOON TO 12:30
A.M.
STILL, FIRE CHIEF JAMES SAYS THE
CHANGES SHOULDN'T HAVE TO BE
MADE IN THE FIRST PLACE.
VENDORS WON'T BE ABLE TO START
SELLING FIREWORKS FIRST THING
TOMORROW.
THEY WILL HAVE TO GET A CITY
-------------------------------------------
Should You Take COLD SHOWERS For MUSCLE and STRENGTH? - Duration: 3:46.
You just got done with your super HIIT workout, and with all the sweat and stank on your body,
it's time to hit the showers!
As you get ready to turn the shower knob to boil, you remember that one dude at the gym
telling you, "Dude, cold showers are way better for you."
But of course, you're not just going to believe him immediately.
You go online, search for videos about it, and see what's all the rage.
Well, glad you found this video.
So let's jump right into the stone cold topic.
What is all the rage for cold showers?
Let's first take a look at the biggest claim: Cold showers increasing testosterone.
And with a quick observation of related studies, it's quite conclusive that the effects of
cold showers on testosterone is negligible at best.
In fact, some suggest that cold water immersion might actually decrease serum testosterone.
Along the same lines of possible negative effects from cold showers, we see that, in
comparison to using active recovery, such as low-intensity cardio cycling, cold water
can hinder muscle building factors such as T-building leutinizing hormones, muscle satellite
cells, and muscle protein synthesis via inhibiting the mTOR pathway.
Cold water also reduces inflammation, which might actually work against muscle hypertrophy
since inflammation can serve as a growth signal.
And as the study show, the subjects did indeed see smaller gains in muscle and strength with
post-workout cold water immersion But even though it's not the best for maximizing
gains, there are still some possible benefits to taking cold showers.
Cold water has been shown to increase T helper cells and lymphocytes, which can improve your
immune system.
There's also some indication that it can increase anti-oxidants, but the effect tends
to dissipate over time.
And with research showing increases of beta-endorphins and electrical impulses to the brain, cold
showers might also have an anti-depressive effect.
In terms of fitness, there is a chance that taking cold showers can help burn more fat.
In this case, it will do so by activating brown fat when you're cold to keep you warm.
Also, when coming into contact with cold water, you'll notice that initially you'll respond
in shock.
This response is explained by cold activating your sympathetic nervous system, aka, your
'fight or flight system,' which will drive up alertness.
This can hypothetically be a great benefit for those that shower in the morning and need
a little jolt of wakefulness.
And finally, as mentioned earlier, cold showers can reduce inflammation.
Although not the best thing for muscle growth, the reduction in inflammation, which leads
to reduction of metabolites, can slightly aid in reducing muscle soreness.
However, the trade-off for less growth in order to be less sore is something to consider.
And, it is important to mention that almost all of these studies used cold water immersions,
such as sitting in a cold, temperature-controlled bath.
That's not exactly the same as taking a cold shower, where the water runs down the
entire body and the exact temperature is unknown.
Whether these different cooling methods will generate similar results is up for debate.
But they do indeed share the most important factor: being cooled with water.
Now, sticking to the research, what's the verdict on cold showers?
For the most part, it's not exactly necessary and can hurt your gains if done after a workout.
If you do choose to take one, take it in the morning before training to reap benefits of
alertness with a sprinkle of better immune function and burning fat.
For those that are seeing good results from their workouts while taking hot showers, then
by all means change nothing.
In the end, just make sure you actually shower, period.
That goes for everyone…
Subscribe for more sciency fitness vids, and share your thoughts on cold showers below.
As always, thank you for watching!
-------------------------------------------
Arrigoni Bridge in Middletown closed for police activity - Duration: 1:38.
8 APP...
3
WE ARE FOLLOWING BREAKING NEWS
FROM MIDDLETOWN TONIGHT...THE
ARRIGONI BRIDGE IS SHUT DOWN
IN BOTH DIRECTIONS FOR A
POLICE INVESTIGATION....THE
SCENE IS STILL ACTIVE
TONIGHT....THAT'S WHERE NEWS
8'S BOB WILSON JOINS US NOW
LIVE, BOB
3
-------------------------------------------
Korean Breaking News: Why Baek A Yeon Wouldn't Audition For "K-Pop Star" Again ? - Duration: 3:14.
Why Baek A Yeon Wouldn't Audition For "K-Pop Star" Again ?
Baek A Yeon, the third place winner on the first season of K-Pop Star, talked about the reason why she wouldnt go back on K-Pop Star if she could turn back time.
While the show brought her to a higher place and she is able to sing on stage like she has always wanted to, she said that she wouldnt go back on the show if she turned back time.
She said, For me, K-Pop Star was a place I turned to for the last time when Id given up everything else. I cant remember what my mindset was back then.
But if I were to do it again now, it would be so stressful, and I think Id just cry until it was over. If I could turn back time, I think Id probably just be diligently studying music..
Soompi. Display. News. English. 300x250. Mobile. English. 300x250. ATF. Its possible to glean from that answer just how difficult the experience was for her.
She explained, I was 19 to 20 years old at the time, but Park Ji Min and Lee Hi, who were younger than me, were so good at singing, and Lee Seung Hoon and the other contestants were so talented and popular.
I had a lot of doubts at the time. I didnt know if I had the ability to go on stage live.
It was the first time I was asked to prepare a song each week, and the competition was so tough. But if I didnt have that experience then, I think Id be shaking a lot right now..
She said the hardest day on the show was the day that Yoon Hyun Sang was eliminated from the show.
She said, During the rehearsal for my stage that day, one of my dancers fell from the chair and that traumatized me, so I messed up the real stage.
I thought I would get eliminated for sure, but it was Yoon Hyun Sang. I felt so sorry and embarrassed, so I cried a lot that day.
I cried on stage, and I couldnt stop crying even when I got back to the dorm.. Meanwhile, Baek A Yeon recently released her third album Bittersweet with the song Sweet Lies as the title track.
-------------------------------------------
OKC VA says health care services improving for veterans - Duration: 1:18.
CRYSTAL U.S. SENATOR JIM INHOFE
: MET WITH VETERANS AND VA
OFFICIALS TODAY TO TALK ABOUT
ISSUES AFFECTING VETERANS IN
OKLAHOMA.
RECORDS SHOW SOME IMPROVEMENT IN
WAIT TIMES.
LAST YEAR 10% OF APPOINTMENTS AT
VA LOCATIONS IN OKLAHOMA TOOK
MORE THAN 30 DAYS TO BE
SCHEDULED.
NOW THAT NUMBER HAS DROPPED DOWN
TO JUST ABOVE 3%.
>> WE DO HAVE SOME ISSUES AND WE
ARE TRYING TO OVERCOME THEM BY
HIRING STAFF, ACQUIRING MORE
SPACE, AND THEN WORKING WITH T
[INAUDIBLE]
CRYSTAL: WHILE OFFICIALS HERE AT
THE VA SAY THEY'VE BEEN ABLE TO
REDUCE WAITING TIMES, THEY SAY
THEY HAVE A WAYS TO GO.
VLOSICH SAYS THERE ARE STILL
ISSUES WITH WAIT TIMES IN THE
EMERGENCY ROOM AND THEY ARE
STILL WORKING TO COMPLETE A NEW
PARKING GARAGE TO EASE PARKING
PROBLEMS.
AN INTERNAL INVESTIGATION IS
ALSO STILL UNDERWAY INTO THE
QUALITY OF CARE SOME VETERANS
HAVE RECEIVED.
THOUGH THEY CAN'T TELL US WHAT
THEY'VE UNCOVERED THEY SAY 10
EMPLOYEES HAVE BEEN TERMINATED.
>> IF THAT MEANS SOME PEOPLE
-------------------------------------------
Oklahoma teacher says move to Dallas is more than just for significant pay raise - Duration: 1:17.
THE REASON HER MOVE IS ABOUT
MORE THAN JUST MONEY.
>> I AM ALMOST DOUBLING MY
SALARY WITH A THROUGH OUR MOVE
TO THE SOUTH.
>> THEY MADE AN OFFER SHE COULD
NOT PASS UP.
>> I'LL GET TO BUILD A PROGRAM
FROM THE BOTTOM UP.
I'LL GET TO WORK WITH KIDS THAT
HAVEN'T HAD CONSISTENT TEACHERS
OR ADMINISTRATION.
>> DALLAS ISD HERE IN APRIL,
HOPING TO LURE TEACHERS FROM THE
SOONER STATE DOWN I-35 FOR
BETTER FUTURE AND PAY.
>> WE HAVE A LARGE NEED FOR
TEACHERS.
>> THE FORMER SANTA FE
ELEMENTARY SCHOOL TEACHER WILL
BEGIN TEACHING MIDDLE SCHOOL ART
NEXT SCHOOL YEAR, SHE SAYS THE
REASONS FOR LEAVING ARE SIMPLE.
>> PUBLIC EDUCATION IS STARTING
TO FAIL.
YOU HAVE CLASS SIZES DOUBLING
GOING FROM 20 PLUS KIDS TO 30
AND 35 KIDS IN ELEMENTARY
SCHOOL.
YOU'RE NOT GIVEN TEXTBOOKS.
NO RACES FOR -- NO RESOURCES FOR
TEACHERS.
>> WITH LEGISLATORS FAILING TO
PASS A MEASURE THIS SESSION TO
FUND TEACHER PAY RAISES, THE
SINGLE MOTHER SAYS OTHER
TALENTED TEACHERS ARE MAKING THE
SAME HEARTBREAKING DECISION TO
LEAVE THE STATE OR THE INDUSTRY
ALTOGETHER, TO BETTER THE LIVES
OF THEIR FAMILIES.
>> I AM REALLY HOPING I GET TO
COME BACK, BUT RIGHT NOW LOOKING
AT THE WAY THINGS ARE GOING, I
-------------------------------------------
Police search for woman missing from Haines City - Duration: 2:30.
IT IS UNCLEAR HOW THE CAR GOT
DAMAGED.
WOODS IS SET TO BE ARRAIGNED ON
DUI CHARGES IN JULY.
TONIGHT, THE FRANTIC SEARCH
CONTINUES FOR 28-YEAR-OLD
JANELA LORENTE.
SHE'S THE HAINES CITY WOMAN WHO
HASN'T BEEN SEEN SINCE SUNDAY
NIGHT.
Reporter: FAMILY MEMBERS OF
28-YEAR-OLD JANELA LORENTE
POSTED THESE FLYERS ON POSTS
ALONG POLK CITY ROAD WHERE HER
CAR WAS FOUND.
HER CAR WAS FOUND HERE, BUT
THERE'S NO SIGN OF HER.
WE'VE BEEN LOOKING.
WE'VE BEEN SEARCHING
EVERYWHERE.
Reporter: JANELA'S SISTER,
YANISLEIDI SPENT THE DAY --
I'M DEVASTATED.
Reporter: WE CAPTURED
INVESTIGATORS PUTTING UP CRIME
SCENE TAPE WHERE YANELA'S CAR
WAS FOUND.
NOBODY THINKS THIS IS RIGHT.
SO THE FACT THAT SHE LEFT, THE
FACT THAT SHE'S NOT CALLING HER
MOM.
THE FACT THAT SHE'S NOT TALKING
TO THE SISTER, WHICH SHE DOES
SEVERAL TIMES A WEEK, THAT'S A
PROBLEM.
Reporter: DEPUTY CHIEF JAMES
TELLS ME, SAYING INVESTIGATORS
ARE SCRATCHING THEIR HEADS
WOULD INDICATE THEY DON'T HAVE
A THEORY ABOUT WHAT HAPPENED.
THAT'S FAR FROM THE TRUTH.
THERE'S NO INDICATIONS OF A
FIGHT.
THERE'S NO HISTORY OF LEAVING
FOR DAYS AT A TIME WITHOUT
CONTACTING HER MOM OR SOMEBODY.
THE LONGER THIS GOES ON, THE
MORE WE'RE GOING TO SUSPECT
FOUL PLAY.
Reporter: THEY ALSO SCOURED
THE HOUSE WHERE YANELA WAS LAST
SEEN.
SHE LIVED HER WITH A BOYFRIEND
AND ANOTHER MALE ROOMMATE.
AUTHORITIES HAVE INTERVIEWED
BOTH OF THEM, BUT ON THE
RECORD, WILL SAY LITTLE MORE
THAN THAT.
AIDING IN THIS INVESTIGATION,
BUT AUTHORITIES ARE REALLY
ASKING FOR THE PUBLIC'S HELP
WITH THIS ONE.
IF YOU SPOTTED YANELA LORENTE
IN THE AREA, OR MAY HAVE SEEN
SOMETHING SUSPICIOUS ALONG POLK
CITY ROAD, YOU ARE URGED TO
GIVE AUTHORITIES A CALL AS SOON
AS POSSIBLE.
IN HAINES CITY, NEWSCHANNEL 8.
WE WANT TO GIVE YOU ANOTHER
LOOK AT THIS MISSING WOMAN.
YANELA LORENTE.
IF YOU SEE HER, OR HAVE ANY
INFORMATION ABOUT WHERE SHE
-------------------------------------------
self-massage for business person 肩こりのツボ with sub (English and Japanese) - Duration: 3:45.
Hi!
This is Yuka.
I am a student studying massage, acupressure (shiatsu) and acupuncture.
I made this channel because I want to improve my English skills.
This channel subject is about health.
Let's start!
This video topic is about the stiff neck.
Stiff neck is interesting.
In Japan, we use the word "shoulder", but you use the word "neck" or "back" in English.
I think English is better than Japanese if it shows the correct place.
Because there are many idioms with shoulders in Japanese, I think that shoulders are important
in Japanese culture.
When working long time at the desk, we have a pain in the neck and back.
In order to lessen the symptoms, let's press the pressure point yourself.
This time I introduce 3 pressure points representative.
Attention (Do not) Bad physical condition
Pregnant After drinking
Within 30 minutes after meal Do not push too hard.
Do not push for a long time.
Acupressure works well, so care should be taken.
Do you understand?
Let's move on next.
Push with the thumb.
Push slowly and vertically.
Push it for 3 to 5 seconds at a time, then slowly extract power.
Interval of about 10 seconds, then push several times.
1.
Kensei They are the points in the middle half of the distance from the backbone to edge
of the shoulder bone.
There are two pressure points.
When it's difficult to push with your thumb, push it with the middle finger and ring finger.
They need attention to push too much.
Don't push too much.
2.
Tenchuu At the hairline of the back of the head, they are the points outside the bone
of the neck.
There are two pressure points.
3.
Goukoku They are the both left and right hands.
It is a little farther than where the bones of thumb and forefinger bridge intersect,
next to the bone of forefinger.
It will hurt when you push there.
The 3 places are typical points of stiff neck.
Drink water as appropriate.
Please discontinue when you feel bad.
Have you had a good point when you push it?
Please advice on improving my English and comment the request.
Thank you for watching!
The next video will be for lower pain.
-------------------------------------------
Dozens help cancer patients by signing up for the bone marrow registry - Duration: 0:53.
THE CITY- TO TRANSITION TO A
CIVILIAN JOB.SHANNONDOZENS OF
PEOPLE MADE THEIR WAY TO
AUSTIN HIGH SCHOOL -TO HELP
CANCER PATIENTS BY SIGNING UP
FOR THE BONE MARROW REGISTRY.
RYANCOLE WELDON-CARROLL TEAMED
UP WITH D-K-M-S TO HOST A BONE
MARROW DRIVE TODAY.IT WAS PART
OF A CLASS PROJECT THAT TASKED
STUDENTS WITH MAKING A
DIFFERENCE.WELDON-CARROLL
CHOSE TO HOST A BONE MARROW
DRIVE- AFTER HIS OWN BATTLE
WITH CANCER IN THE 6TH GRADE.
WHILE HE IS IN REMISSION AND
NEVER NEEDED A TRANSPLANT- HE
KNOWS THAT'S NOT ALWAYS THE
CASE.RYANCOLE WELDON-CARROLL2
STUDENTS FROM LAKE TRAVIS
CONTACTED ME AS THEY HEARD
ABOUT MY DRIVE AND THEIR GOOD
FRIEND FAITH HAS CURRENTLY
RELAPSED AND SO SHE IS IN DIRE
NEED OF A BONE MARROW
TRANSPLANT, AND SO WITH THIS
DRIVE IT'S ANOTHER MORE
POSSIBILITIES FOR HER TO GET
THAT BONE MARROW TRANSPLANT
THAT SHE NEEDS TO SURVIVE.
ABOUT 50 PEOPLE SIGNED UP
-------------------------------------------
Trucks for children| Animated video about Excavator working with Dump truck| Excavator for children - Duration: 5:06.
Trucks for children, Animated video about Excavator working with Dump truck, Excavator for children
This video we made from the gameplay of Baby Bus Heavy Machines Game for kids
On this video we want to teach children about construction machines, how they are working on site
Exactly which one is: Dump Truck or Excavator, Which one is Front Loader and Bulldozer or Diggers or Backhoe, a helpful video for children.
-------------------------------------------
Seniors At High School In NJ Claim They Were Shamed For Outstanding Fees - Duration: 0:41.
BECAUSE IT WAS BURNING LIKE
CRAZY.
Reporter: POLICE ARRESTED
LITIGER AND HE IS FACING AN
ASSAULT CHARGE.
CONTROVERSY AT A FAIRLAWN
NEW JERSEY HIGH SCHOOL.
SENIORS WITH STANDING LUNCH
BILLS OR FEES WERE SHAMED.
OFFICIALS SAID THEY WERE TOLD
THEIR PARTICIPATION IN
GRADUATION WAS IN JEOPARDY.
I FELT LIKE IT WAS A NAME
AND SHAME TACTIC.
SOME DIDN'T KNOW THEY OWED
AND THEY WERE GRATEFUL.
OTHERWISE THEY WOULD HAVE BEEN
Không có nhận xét nào:
Đăng nhận xét