I'm fine.
What do you want to say about my hair?
It is cut.
Somebody asked me if I was joining the Navy SEALs.
I was like, I think they require something a little bit more stringent than just a haircut.
It looks good though.
I like it.
Thanks.
Yeah.
I couldn't find my normal barber.
So I had somebody else.
Well, I was your normal barber and then I got like replaced by one or something.
What's your what's your barbers name?
Tony Frank.
We went from one to Tony Frank.
Doesn't matter what my barbers name is.
I was going to say talk to him about a week.
But I think we need to pause and just acknowledge how awesome Chris from
chlorine is.
He was excellent and hysterical.
So it feels funny to go back to our format that we skipped because we want to
make as much time as possible for Chris.
But we got lots of great feedback from you guys this week.
Chris, you're just in jeans, we love you.
And actually, he's not here to say.
So starting this week, we taught the school super natural life.
It was nice to see all of students after a Christmas break.
It was great to see them.
Yeah.
And we're going to teach on how to teach.
We're going to teach how to teach, which is such a meta topic, because you're
teaching them how you're doing what you're doing right now.
But I love that whole process.
Yeah.
And then making your what you do plane.
Yeah, making your thinking visible.
And then next week they are going to be teaching us.
Yep.
And I love it that the quality of the teachers that we produce is quite astonishing.
I think it's amazing.
Aminate Monday night.
I'm a nice.
Deak worship, emanate Monday night, Jesse early.
Seriously, what's going on?
Right.
It was so good.
It was really good.
Your message is really good too.
Thanks. I will, we're doing this reading the Bible through the years of church, which I haven't read the Bible through in a year in a while. I've done it several times. I've read it chronologically. I've done it, you know, the reading plan type stuff.
But as the church, we're doing one and we're using the youth version app and doing Nikki Gumbel's one. And I'm finding every time I'm reading the Bible, we're trying to, as soon as I wake up in the morning, I'm trying to read through it.
But I'm just getting blown away by all this revelation, but this revelation about John the Baptist Jesus comes to be baptized by him.
And in a new living translation, it says that John the Baptist tried to talk him out with it.
And so I just started thinking of all the times in my life, I've tried to talk God out of accomplishing what he wants to accomplish in my life.
Ask me if I have any New Year's resolutions.
Do you have any New Year's resolutions?
I'm glad you asked that.
Yes, it's to stop talking God out of the destiny of my life.
Excellent.
It sounds fantastic.
Thank you.
I wish them fun this week because we had some friends of our gym and pat banks who are
in our healing.
I wonder if they'd like to be called in our healing specialists, but they are.
Their ministries.
Trauma is one of their specialties.
Yep.
And so they were coming into minister to our staff at the start of the year, our pastoral
staff that came into a great session.
They're like revelation machines.
claim to fame is that I got them on Twitter, except they were already on Twitter.
They just didn't know. But they teach in such tweet-sized chunks. I was like, "Oh,
it's important that the world hears your revelation." Anyway, we got to have some private
ministry with them, which was awesome. We did. Individually. Yeah. It was fantastic.
I think that's one of the things that I love most about sitting under the leaders we sit
under and the culture that we have at Grey Centre and the culture that we had at Toronto
is that nobody freaks out when our pastoral team says, "I'm going to go get some ministry."
Nobody's like, "Oh my God, is there marriage falling apart?" It's just normal.
I just love that for so many reasons. It frees us up to not have to be perfect.
And it also frees us up to stop doing what we're doing and be ministered to.
Can we talk about our Nintendo Wii that we got for Christmas?
Sure. Let's talk about our Nintendo Wii.
Well, you were really keen on getting it.
I wasn't a hard sell, to be honest, being a Nintendo fan, but I haven't played Nintendo in a while.
But I'm shocked at how much our kids love it.
I didn't think they'd get into it.
But not only do they love playing it, they love watching their daddy play it.
They do.
Actually, when you guys play it together, they want you to carry them.
So that means they're not actually playing.
Yes.
What's the time when we're multi-playing a game?
You're carrying it up to you.
I'm picking up to you.
I just take a cat, so I have to first complete a level to learn how the level works.
Then I have to carry on my shoulders around the level anyway.
They're so into it, but also they get totally into watching me try and be a level and there is high pitch screaming when I die.
And even MJ, he just never clear what's happening.
No, they'll start screaming.
So he joins in.
It's so screaming.
It's awesome.
No, no, it isn't.
talking about what happened.
Was it Wednesday night or Thursday night?
Thursday night.
So I had to remove myself from the room.
It was just too overwhelming.
So a number of months ago, um, Katie Cook and and Tink came over and
introduced us to one direction.
See, I don't call them.
Trent Trent was.
And Trent, um, I don't.
We watched the one direction.
Right.
I'm not calling them new direction anymore.
See, that's a good step.
You know what?
Darning your almost hip.
That's right.
I'm so close to hip is not even funny.
So anyway, so then when we got this game for the week, it's called just dance 2015.
And I was, um, I played it one time with the girls, like on Christmas day.
And I played it one day.
I never played.
I wasn't here to see it because they got you to do it because I was near.
For those of you who've never seen it, do you remember the arcade?
it was like a game called Dance Dance Revolution where basically there's somebody dancing on
the screen and you have to do syncopated moves with whatever they were doing. But in
the arcade it was like this touch sensitive floor pad. Well with this one with the Wii
controller you just hold it in your right hand and you just dance following the choreographed
steps that professional dancers were doing to songs that were released in 2014. And it
is so stinking difficult for an uncoordinated lump such as myself.
But I was astonished.
I mean, Ting is a professional dancer.
You have dance in your background.
And I'm sure Katie--
- She must.
- She must.
- She could move, yeah.
- But the three of you picked up so quickly,
it would be ridiculous.
- And I posted a video of you dancing to the ground
and then suddenly realized, yeah,
I'm not sure how good this looks that
(laughs)
I'm filming three girls dancing from behind in my room.
So I went obsessed with my godroom
and became holier than watching you guys dance,
but you did it for what, an hour and a half?
- Oh, at least.
- It was like a workout.
- It was a total workout.
We were like, huffing and puffing
and having to drink water and take breaks.
It was just like, but it was super fun.
And I didn't know if it would be fun for adults
to do like the girls like doing it,
but I didn't know if it would be fun for adults.
So I have an idea for my next girls night.
- It's also funny watching.
So we play this game, what is it?
3D Super Mario Land, something like that.
And Abby loves it.
Abby can play on her own.
She can work through the lands.
But she doesn't understand the way I approach the game,
which is when I play a level,
I don't just wanna finish the level,
which is what she wants to do.
I want to complete all the challenges in the level,
which is get the three green stars,
Make sure I pick up the hidden stamp and at the end,
reach the top of the flagpole.
So I get a golden flagpole,
doesn't have a normal flagpole.
Oh dear God, I'm saying these words out loud.
- Yeah, I was wondering if you could actually hear them or...
(laughs)
Yes, it's very important to get the three green stars
in the funny stamp.
- I want a good golden pole you are.
- But I'm just realizing,
what am I writing on my girl's hearts?
I don't get mad at them for not completing it, but maybe I am overemphasizing the need for perfection.
Do you think I last think of his perfection and more think of it doing it properly.
So the other day T is waiting to play for you with you. I'm sorry and you went into the bathroom and I guess she had like nine lives.
So she just kept taking her little princess and running it off the edge into the oblivion.
Waiting for you to get there. She's like my meat. I don't know how to pause it
So she just you know she get a new girl and she just run it right off the side
You know, you know why why would you just wait for me?
Well because it already started and she didn't know how to pause it
So she just decided she didn't want it the little girl to get eaten by a mushroom or something
So she preferred that it just took like the death dive off the side of the cliff sounds like we're introducing our children
So much trauma for this game. Honestly, let's move on. I have concerns about the game
What is your main complaint about Gary Morgan whom we love if you had if you'd one thing to complain about Gary Morgan the Welsh Eagle?
That he keeps posting pictures of food that I can't eat because I'm not there the thing I want to complain about Gary Morgan is he posted
something on Instagram last week about a TV show called state of affairs and
He was like you know Gary's the chief influencer. I'd never even heard of it. And so we thought you know Gary and I have
Similar tastes I thought well, we'll look it up
And we just did a hulu binge of like the first six or seven episodes and now we're hooked.
And I don't like watching TV that forces me to wait.
I like to just know that the season is over and I can just watch him at my base.
But it looks like the episodes come out every single Monday.
Yeah, it's horrible to have to wait.
I have to wait.
Yeah.
So thanks a lot Gary for introducing us.
Thanks a lot Gary.
Yeah.
I I went up for lunch with Holly.
on Friday. Who's Holly? She's my cousin.
Oh, I.
My cousin.
Well, totally hang around with her. I remember her vaguely. That's right. Yeah.
I remember Holly. That's right. Yeah.
She has a husband who, you know, he kind of looks up to me in terms of athleticism.
Yes, absolutely. Yeah.
Like my running history, I think he's inspired him to be a running. Well, yes, probably.
It's just because he's so short that he looks up to you as well.
And for those of you don't know, Don and Holly, they're possibly the fittest people we know.
And you're currently in a fit bit competition with them, which is it's lunacy.
Well, I'm not in a competition with them, but you can sign up.
Let's clarify.
We all have fit bits.
And every day you frenetically check your fit bit thing to see where they're at,
to see if you've possibly by a miracle beaten them, but you're not in competition with them.
Well, you're supposed to let you I'm not in a competition with them, but you're supposed
to allow yourself to be competitive enough to want to get better.
But I think you're in.
But there's not a chance last week he was posting numbers like 98,000 steps in a week.
My high score until this week was like 36,000 steps.
- But doesn't he run like 100 miles a day?
- I think probably 100 miles is an exaggeration.
Listen, he's 6'7", I don't think he should get
the amount of credit because he will cover more ground
faster 'cause his legs are so long.
- Doesn't fit, but can that into consideration?
- I don't know, I don't know if he has to tell it.
- I like that.
- I like the outsourced being fit
by downloading fitness tracking apps.
Because that's going to get you there.
Well, what it does is it helps track stats.
And so I feel like I'm doing something about my health.
And the greatest app I found for that most recently is called Argus.
Now, anybody from the UK will remember Argus as this really weird shop where you'd
look up stuff in a magazine, you'd go in, you'd fill in something on an index card
and out from the back of a warehouse, it'd bring you this.
I thought that was our go.
Yeah.
Did you do it in front of CS?
Did you have it in Canada?
No, I just remember seeing it in the UK.
OK, well, it was spelled A-R-G-O-S.
Oh, OK.
This app not to confuse you is spelled A-R-G-U-S,
but it sounds the same.
Argus.
Good.
I'm sorry, AJ, did you want to say something?
Argus.
It's my southern male.
Argus.
Tracks.
Well, it integrates with stuff that you're wearing already.
like it integrates with your Fitbit.
It integrates with your, you know, it can track your, what do you call it?
Your heartbeat, that's right.
Your sleep cycle.
So anyway, I like keeping track of that stuff.
I should probably do something about it to better the results.
Right.
Oh, look at that.
I've only taken four steps today, but I've tracked them.
I like what you're saying.
Hey, you know, before we go any further, I've meant to this a couple of weeks in a row.
You wanted to just say how beautiful I am and I'm excited you are a better
anniversary this week.
You are super beautiful.
And we do have an anniversary this week.
We do, which means we're going to have the best throwback Thursday because our
anniversary is actually on Thursday.
So we can post on Instagram pictures of our wedding legitimately.
We could hashtag throwback Thursday.
It's true.
Yeah.
We really good.
I already dug some out.
You've got it all ready to go.
Well, I don't have all of it premeditated.
We only have like a handful of good photos from our wedding anyway, so it was slim pickings.
This is what I wanted to say was.
You wanted to tell everybody what you're doing in a
industry that you're not telling me because it's a surprise.
No, we can tell them that next week and then it won't be surprising.
It wouldn't be real.
But then I'm not going to get any any information today.
Yeah, but I've bound you in the spirit from accessing a prophetic gift for this.
And I wrap my head in 10 while we go back.
And I see you can't read my thought.
That explains that noise.
for a third time.
Oh, sorry.
You know how I like to talk about it.
And I keep forgetting.
Would you like to talk about it?
A couple of weeks ago at M&A, Josh and Sarah Parsons had a friend of theirs,
Michaela, who is American, but lives in Norway.
Now we have a deep affinity for Norway and we have quite like Michaela.
We've married a couple of times when she's come in and visit Josh and Sarah.
But I was really tickled pink.
Is that an expression you use?
I was really, I was greatly.
You could use it.
I think it's just for little girls though.
I was I was I just found it really amazingly she said hey guys I listen to your podcast I just thought gosh it's really funny to think of somebody in Norway listen to our podcast because here we are in Franklin in our
Godroom recording this and I'll post on the internet tomorrow and it's likely that she's gonna hear it Norway so then I went to a website and looked at all the different countries around the world that listen to it went to me from Romania listen this week so
Yeah, hello Romania. I don't know if you're the same Romania person, but thank you for tuning in.
But anyway, I want to say hello to Michaela. She is one of YWAM bases there.
You greatly encouraged us when you were there. And we just wanted to say we love Norway,
we love me. Do you know what I want to devote this whole podcast to?
Giving me hints about our anniversary dinner.  - Just trying to get some information.
- You already know what we're doing.
How are we made plans?
You win the car when I made plans.
- Okay. I'm just not sure if it's all a smokescreen.
You know.
- Why would you say that?
(laughs)
Why would you say that?
- I don't know.

You know what, baby?
It's Captain Dees.
Why fish in the expensive part of the ocean?
Okay.
Where is the expensive part of the ocean?
All right.
What we're devoting our podcast to is our backlog of listeners' questions.

And this, and sometimes we don't get to them.
And so we want to get to them.
And sometimes your questions, the reason we can't answer them is they're great questions,
but they demand a sermon and we're trying not to preach on our podcast.
So to do our best in not preaching, here are the answers to the most recent list of questions
that we have not responded to.
So this first one is from Becky.
She asks, "What are appropriate boundaries to have with your parents and your in-laws
when you've just had a baby?"
And for context, both sets of grandparents live in town and are itching to spend as much
as time as possible with their grandson as you would imagine.
I'll hand that one over to you, H. Jones, as the baby boundary expert.
Well, I guess my question would be, what kind of boundaries do you want to have with your
grandparents or with your parents?
Because I know plenty of people where their parents are typically way more involved in
in their lives than what we experience.
You know, 'cause our parents are--
- On the other side of the world?
- In different countries.
- Right.
- And they love it that their parents are involved
and then other people are like,
well, I like it to an extent, you know?

- Back off to her three steps from,
I now only leave my house.
- Right, and just sort of establish,
okay, this is actually what would work for us.
- I think the thing is when people hear boundaries,
they hear this very harsh line
and are rattled with fear
and are worried it's gonna come out in aggression,
but it really doesn't have to.
You know, basically you've got two sets of parents here
who are super excited that you've just had a baby
and we'll want to show as much love and affection as they possibly can.
And what is love and affection to them might be overwhelming and uncomfortable for you
and they don't know that.
And so just simply communicating in love like, "I love that you want to come over and see
the baby.
I love that you want to come and help me."
Here's the thing, we're new to this whole baby, Malarkey.
We really don't know what we're doing.
Here's what is working first.
Here's not what's working first.
just start expressing what would work. And I think most people worry that when they do
that, that you're going to cut off relationship with a person and you're really not, especially
your parents, especially parents who are, you know, now if you're feeling particularly
emotional, which is highly likely given you just had a baby and you're tired and let's
face it, you don't know what you're doing because you just had your first baby. We suggest
you never really communicate to people when you're in a state of halt, whether you're
hungry, angry, lonely or tired. It's a good chance you're one of those right now as you
listen to the sad podcast. So it's not two or three.
Sit down with your husband and just kind of work out what works for us. And then just
communicate that to your mom and dad or to your in-laws like and keep the love up high
to reduce the anxiety.
 We knew when she'd be awake."
So we'd say whatever it was, 430 to 6. And she'd say, "Well, I don't know if I can
make it during that time."
So it just sort of depends too on what you want your day
to look like.
If you want to stay in your pajamas until noon
and say nobody comes over till afternoon,
then it's your house.
- I hope that helps.
- Yeah.
- All right.
This is from Caitlin.
Hi, Alan and AJ.
- Hi Caitlin.
- Hi, yeah, hi Caitlin.
How do I know God's best place for me to be?
I don't feel at home where I'm at and really not sure where to go.
I've prayed and fasted.
What would be some next steps in this process?
Thank you.
I'm a new listener and really enjoying your podcast.
Well, thank you for listening to our podcast and sorry,
it's taken us a while to get to answer your question.
Do you want to say something or do you want me to jump in?
- You go ahead and I'll take for a second.
- I'm assuming you're talking geographically here.
I'm assuming if the Lord isn't saying stay here,
then maybe he's inviting you into where would you like to go?
And, you know, us moving to Nashville,
I think we've told the story on the podcast before,
but as we went to Nashville,
we had like a vision, with a dream,
with an angelic visitation,
with prophetic words coming out of, you know,
left, right and center, with confirmations.
And still, I was like, eh, yeah, I'm not sure.
And the thing that made me want to move to Nashville was a question that the Lord said to me.
He just said, "Would you like to move to Nashville?"
And I never really considered that.
Like, what you mean outside of what you quote unquote want?
He's like, "Sure.
Would you like to?"
I was like, "Yeah, I'd like to."
He's like, "Then do it."
So my question is this whole concept of living under a green light.
If the Lord is not saying, "Don't move," then he's probably inviting you into a
season of asking you where you would like to move. But you know, what is it you're looking
for? What would you like to move? And once your heart percolates up an answer, start
sharing that with people who are important in your life, who've got a voice in your life
and just saying, Hey, you know, as I've been thinking about this and as I've been praying
about this, I'm realizing I'd really like to move to X and start getting feedback and
then start turning that into prayer like Lord, I would not instead of saying Lord, where
should I move to? I might suggest saying, I'd like to move here, Lord, do you have anything
to say on that? Is there wisdom on timing or would you open doors for me on that and
just look for favor on where you're going?
I'm asking to shut doors if that's not where you're supposed to go. If you think about,
again, whenever we're talking about making a decision and what the Lord is like, we often
say, "He's the best dad ever." If Allen's taking Tia out on a date and Tia says, "Well,
I want to do on this date is I want to go and play in traffic.
And then, you know, after that, I want to practice throwing knives or something.
I'm going to go, Oh, that's no.
But how about sweet CCs or how about what, you know, and he's going to redirect her.
He's going to sort of shut down those doors and redirect her, but, but he still wants to know what it is she wants to do.
I'm at the same time.
If she brings up something that's, you know, like today, for example, I did take her on a date.
I said, what do you want to do?
She said that I can't decide.
I can't decide between hot chocolate or frozen yogurt."
And I said, "Well, what do you really want?"
She's like, "I want them both."
And I was like, "Well, what do you want more?"
She's like, "I think I want frozen yogurt."
So we went to Sweet CC, it's Gus and frozen yogurt.
And it just so happened to be right across the road
from Starbucks.
And it gave me great delight with a glint in my eye to say,
"Should we go get hot chocolate too?"
And her concept of, oh, it's not either or it's both and.
because I'm trying to teach her what the fall is like.

So perhaps he's asking for your input
on where you'd like to move next.
So I would start there.
- Yeah.
- Caitlin mentioned fasting.
Our next question is about fasting.
This is from Judah.
He said, "With the coming year,
I hear a lot of Christians talking about fasting.
I know that fasting is important part of life as a follower of Jesus, but I don't know too
much about fasting.
What are your thoughts on fasting?
Is there any teaching or books you would recommend that speak on the subject?
Well, I like fasting if it's God has asked me to do it.
That's a good way of putting it.
Did you change what I like fasting to?
I find there's a grace on fasting when God has asked me to do it.
Or do you genuinely like fasting?
No, I genuinely like it.
If God's asked me to do it, I feel excited.
I feel connected to God.
I don't really miss the food.
Like if God's asked me to do it, I don't find it difficult.
Oh my gosh, we're so different.
I find a tremendous ease on fasting when God is asking me to fast.
And so I approach fasting a couple of different ways, just like prayer.

I can decide to prophesy anytime I want.
I can decide to fast anytime I want.
Or sometimes the Holy Spirit moves me to pray.

Sometimes the Holy Spirit moves me to prophesy.
Hey, go over and give that person a word.
And sometimes the Holy Spirit moves me to fast.
Right.
The greatest fruit of fasting, immediate fruit of fasting, I've found in my life.
is it's the quickest way I know to humble myself.
On the days that I'm fasting, I am appalled at how haughty my whore is.
How haughty?
How haughty.
Can you explain that?
Arrogant, prideful.
Okay.
I think I know all.
And I'm unaware of those thoughts on the days I'm not fasting.
I think on the days I'm not fasting, I just think I'm right and everybody else is wrong.
In the days I am fasting, I'm just like, "Lord, actually, I'm so sorry, like a lot of
the time.
I think I know what I'm doing.
And when I'm fasting, I'm realizing I'm actually weak and foolish and I just need your wisdom
and your insight."
Like that's the most immediate, you know.
And then long term, I think fasting does a whole lot of stuff behind the scenes that
we don't see that you can't confuse with you earning, but Jesus does say there's a reward for
fasting as there is for praying, as there is for giving. So I would direct you to a couple of
amazing books, Judah, the first book I ever read on fasting that blew my mind. It's a book by
Mahash Chavda and it's called The Hidden Power of Prayer and Fasting and it was a paradigm shifting
book for me. The second book I read that I really, really enjoyed is called "Shaping
History Through Prayer and Fasting" by one of my favorite teachers, Derek Prince. And
you read a book you really, really liked it. Yeah, I read a book called "God's Chosen Fast."
Did you look up who it's by? Yeah, by Arthur Wallace.
And it was more like, it covered it biblically, like, why do we do it? But it also talked about
physiologically like what's happening in your body and how do you break a fast?
You know, if you've gone over 10 days, then there's a certain way that you should break a fast,
which I learned the hard. Same. I called emergency. I think there's something in me trying to get
out. Alien. I remember calling the NHS emergency helpline. I like 2 a.m. in the morning. I can't
I can't remember long I'd fasted for, but I did not break the fast well.
And I'm sure I'm rupturing my small intestine.
And the person's like, well, what have you eaten?
And so I dilled my head and eaten for a certain number of days and are like, why on earth
would you do that?
And I'm like, and I thought, I don't have a good answer.
Like, I'm fasting.
I'm a Christian.
I don't know.
And they were like, uh, don't do that again.
They didn't understand that.
 Mike Bickle has a ton of resources and fasting.
But he has a very, very handy one or two page article on the basics of fasting and how it's start fasting.
There's really, really, really helpful rather than throwing yourself in and making the mistakes.
Age United.
Does he have something that helps you stop fasting?
If you've gone, okay.
Oh yeah, it's all about, you know, different types of fasting and how to start, how to build up your metabolism to handle fasting.
My funny breaking a fast story just really quickly was it was a 23 day fast.
We were only intended to fast for 21 days, but we both lost count and there's two of us doing it together and we were with a group of people.
I'm sorry if I'm not eating food.
I'm very rigorous about when it ends.
There is no chance that I'm going to forget both of us didn't notice.
And then somebody who was with us was like,
I'm pretty sure you started on it.
And then we're like, oh, we did.
So we were with a group of people that were Wendy's
and we were drinking water and we were like,
we're done, we're done our 21 days.
And I got a big classic cheeseburger.
I thought I was gonna die.
I ate it and I was like,
oh, this is the best cheeseburger I've ever tasted.
- Did you wash it down with a dog and pepper?
For good measure.
- I don't drink Dr. Pepper and stuff is hideous.
But I probably had a Coke knowing me then
because I would have eaten that.
And I would say probably within 20 minutes,
I mean, I ended up on the floor in the fetal position
like just I was in absolute agony.
I thought I was going to die.
- Not a good way to kick out.
- No.
- An internal system is shut down after 21 days of night.
- It wasn't a good scenario.
- Right, Chad, you asked.
- Hi, Chad.
- When interacting with people who do not believe in Christ,
how do we lovingly vocalize reasons
for not listening to certain music, watching certain movies, or playing certain games.
I find that I dance the line between protecting myself from things that don't need to enter
my brain and leaving other people feeling judged in some way unintentionally.
So I'm assuming that you're talking about a friendship group who perhaps mixed, you know,
made up of some believers, some people who are pre-Christian.
They're want to watch movies or you're at their house and they're playing music or everyone's
like, "Oh, let's play cards against humanity,"
or, "You know, a game you just don't want to play."
I find probably the three most helpful words
in that situation just yell at the top of your voice,
turn or burn.
(laughs)
They'll never involve you.
- Tell us, game chat.
(laughs)
- I, I, when I first got saved,
and then when the Lord started healing my heart,
he really started working on me about movies,
'cause I would just see any movie going.
and loved movies didn't think it made a difference to me at all.
And then I realized it made such a huge difference to me.

And so, but I didn't want other people to feel bad because they wanted to see
something that I didn't feel like I had the grace to see.
And so I would say, I'm, I'm, I'll meet you afterwards.
And if they'd say, well, why aren't you, you know, see it?
I would say, I, I feel affected by those kinds of movies.
like I feel the effects of it and it's just cause dealing with me in a certain area or,
you know, or I just say, "Oh, I'm just really not into that, but I'll meet you afterwards."
Yeah, I think you can graciously opt out of things and help your friends.

You want to honor them as well as honor the Lord.
And so clearly you do not think that the world revolves around you, which is great,
helping them understand that you don't think that and helping them understand that you're
absolutely fine if they go off and do that and you can meet them afterwards. It's probably
a really gracious way of doing it, but being bold and being gracious is a great combination.
All right, next question is from Kayleece. She says, "Hey Alan and AJ."
Hey Kayleece.
I have a friend that is skeptical about prophecy. We all do. Don't worry about it.
in a club, there's t-shirts. He and his family converted from being Mormon and he goes to a
conservative church, so he doesn't believe in the gifts of prophecy. He does believe in the Holy
Spirit and thinks since the Holy Spirit can speak to us directly, and why does a human,
a prophet, need to tell them what God says about them? That's a great question. In Mormonism,
you have to go through several elders to be able to hear from God, so he and his family don't want
to be deceived again and they're comfortable with just believing in the Bible. I just want
to know what you would recommend of how to make prophecy seem desirable to a family that is uninterested.
It's a great question. It's a really good question. I think there is
A couple of answers I would give you. One, often in our zeal of the things that God's doing in our
life, we try and get people to be on the same timetable. I remember Bill Johnson saying we try
that we tend to overemphasize whatever we last learned. And so in our enthusiasm with what God's
doing, we want to drag and I mean that in the most positive way, other people into it, but it might
not be what God's doing in their life. Like if these guys have recently converted from Mormonism,
is great that they believe in the Bible and it's great that they believe in the Holy Spirit
and the Holy Spirit being very nature prophetic and the Bible being a prophetic book is going
to introduce him to the prophetic. That's probably not an answer you were looking for.
Another answer is I remember somebody rather negatively saying that you can lead a horse
to water but you can't make it drink and somebody quipped "yeah but you can salt the oats."
As in, you can provoke something, provoke a hunger in the people around you that they want what you have.
And the easiest way to do that is by demonstration.
And so I remember taking people who are skeptical about the prophetic,
two meetings where prophets were ministering and just being astonished at,
I remember when Gary Morgan, one of the few times, the last couple of times he was in town.
Remember he was ministering and while he was ministering he heard the thoughts of someone next to him
Who said I never get picked for a word and I can't remember if he got her name or not
But he turned to he turned to the girl and picture and said you you who just said I never go
I never ever get picked and I never get a word guess what it's your night have a word for you and that
Shocks her and the people who would knew her would say were you really thinking that?
You know that that's a demonstration that is easier to
Display than an argument that you will win. Yeah a third thing you could do is ask the Lord
To start stirring up the prophetic in their life ask the Lord
For example, I never believed that God spoke in dreams
I just thought that was nonsense until I had a dream that
Literally came to pass three weeks later and then I was like, okay, God. You have my attention
So you can do lots of stuff like that.
Bill Johnson on Twitter wrote this.
He said, "Prophyts do not replace my need to hear from God for myself.
My need to hear from God for myself does not replace my need of the prophets."
One of the greatest gifts that God has given his family are prophets and the prophetic ministry.
And so be patient with them.
You pursue it.
You know, watch God do things in your life,
share the testimonies, and pray for them to get touched.
And you'll be amazed at what happens.
- Um, babe. - Yes, darling.
- And there's a whole lot of questions that we're answering.
How many are left?
- We're a little bit backlogged.
We probably have another four or five.
- Um, I need to sleep sometime in the century.
Is there any way we could just pick one to do tonight?
and then we can work on the backlog in the next couple of podcasts.
-Given we are our own bosses and the directors of our own podcast,
we can do whatever we want.
-Oh, yay. I'm still dying.
-I feel like the Holy Spirit saying I should yodel.
So brace yourself.
-I'm ready.
-Wait, that wasn't the Holy Spirit. That was my friend.
-Really?
-You know what, rather than answering another question,
why don't we push pause there?
We'll try and answer another question a week as we continue going forward.
But I wanted to let everybody know that our school is supernatural life,
is now accepting applications for this fall. We have an eight month school. We actually
have two of them now. We have year one and year two. But we have an eight month school
that starts in September here in Franklin, Tennessee held a grace in the school, runs
on Mondays and Tuesdays. You come with grace in our Sunday and for eight months you are
immersed in the love of God. You get teaching from our pastoral staff. You get teaching
from age and I get teachers, teaching from prophets and revivalists and teachers and
leaders from all over the world. We file them in and it is an amazing opportunity to just come
and set aside your Mondays and Tuesdays and get transformed by God and learn to hear his voice
and learn how to prophesy, learn how to heal the sick and then there's an optional mission
strip somewhere where we send you an outreach somewhere in the world. And anyway, if you have
even the slightest interest of being touched by that. Go to this website, go to gracecenter.us/school
and you can find out all the information about that and our application system is open. If you're
one of our alumni, you have graduated from first year, applications for the second year of the
school supernaturally are now open to at the same place. Go to gracener.us/school. We would love to
to see our alumni come back for second year.
We're super excited about second year, which focuses all on scripture and all on the
quality of the ship that's on your life.
Again, all the information about the school is on our school website.
You can go there.
But ask me what I'm excited about tomorrow.
What are you most excited about tomorrow?
I am most excited tomorrow about making my nerdy wall, making my calendar on the wall
so that I can plan year one and year two together.
Oh, yeah.
- A hejae has special paint that you paint over a painted wall
that turns the whole wall into a whiteboard.
- Yeah, but it's the same color as the painted wall
so nobody knows.
- It's like invisible paint that you just,
it's like a sheen that you put over it.
- Yes.
- And then you can draw with whiteboard markers
and it's amazing.

- Whereas I have a handheld pocket device that allows me
See all nine months, I'll write it out on your handheld pocket device, even though you have a six plus or mega six, whatever, whatever was calling it the monster six or the big.
But I will post on Instagram.
Once it's finished, I'll post on Instagram.
I can't remember my Instagram name is, I think it's just AJ Jones.
So funny underscore AJ Jones underscore AJ Jones, but if you like nerdy things, it'll be posted.
Closing thought for you. We you may or may not know this but we have a mailing list at our website and on aj.com
It is a low frequency. I get enough email. I don't want to spam your inbox
We send out maybe two emails a month where we just try and let you know ahead of time and in new articles that are being published
You know anything that's noteworthy that we think you should know about but from time of time when we release new teaching
we like to let everybody on our mailing list know about it beforehand and we always like to offer
an introductory price before it goes public and we always like to throw in something free.
If you are not on our mailing list, we'd love to encourage you go to allen and AJ.com/free
F-R-E-E and sign up there. Again, we will not spam you. You can unsubscribe anytime you wish,
But we're getting ready to release a new teaching set in the coming weeks.
And for those people who are on that list, you will be able to get that teaching set at a heavily
discounted price along with a free gift for that as well.
So there's some homework for you.
greycenter.us/school, alanaj.com/free.
We hope you have an incredible week filled with the goodness and the kindness and the majesty of Jesus.


Congratulations on reaching the final project of the Robotics Nanodegree!
Previously, you worked on the Semantic Segmentation lab where you built a deep learning network that locates a particular human target within an image. For this project, you will utilize what you implemented and learned from that lab and extend it to train a deep learning model that will allow a simulated quadcopter to follow around the person that it detects!
Most of the code below is similar to the lab with some minor modifications. You can start with your existing solution, and modify and improve upon it to train the best possible model for this task.
You can click on any of the following to quickly jump to that part of this notebook:
We have provided you with a starting dataset for this project. Download instructions can be found in the README for this project's repo. Alternatively, you can collect additional data of your own to improve your model. Check out the "Collecting Data" section in the Project Lesson in the Classroom for more details!
import os
import glob
import sys
import tensorflow as tf
from scipy import misc
import numpy as np
from tensorflow.contrib.keras.python import keras
from tensorflow.contrib.keras.python.keras import layers, models
from tensorflow import image
from utils import scoring_utils
from utils.separable_conv2d import SeparableConv2DKeras, BilinearUpSampling2D
from utils import data_iterator
from utils import plotting_tools
from utils import model_tools
In the Classroom, we discussed the different layers that constitute a fully convolutional network (FCN). The following code will introduce you to the functions that you need to build your semantic segmentation model.
The Encoder for your FCN will essentially require separable convolution layers, due to their advantages as explained in the classroom. The 1x1 convolution layer in the FCN, however, is a regular convolution. Implementations for both are provided below for your use. Each includes batch normalization with the ReLU activation function applied to the layers.
def separable_conv2d_batchnorm(input_layer, filters, strides=1):
output_layer = SeparableConv2DKeras(filters=filters,kernel_size=3, strides=strides,
padding='same', activation='relu')(input_layer)
output_layer = layers.BatchNormalization()(output_layer)
return output_layer
def conv2d_batchnorm(input_layer, filters, kernel_size=3, strides=1):
output_layer = layers.Conv2D(filters=filters, kernel_size=kernel_size, strides=strides,
padding='same', activation='relu')(input_layer)
output_layer = layers.BatchNormalization()(output_layer)
return output_layer
The following helper function implements the bilinear upsampling layer. Upsampling by a factor of 2 is generally recommended, but you can try out different factors as well. Upsampling is used in the decoder block of the FCN.
def bilinear_upsample(input_layer):
output_layer = BilinearUpSampling2D((2,2))(input_layer)
return output_layer
In the following cells, you will build an FCN to train a model to detect and locate the hero target within an image. The steps are:
encoder_block
decoder_block
Create an encoder block that includes a separable convolution layer using the separable_conv2d_batchnorm()
function. The filters
parameter defines the size or depth of the output layer. For example, 32 or 64.
def encoder_block(input_layer, filters, strides):
# TODO Create a separable convolution layer using the separable_conv2d_batchnorm() function.
output_layer = separable_conv2d_batchnorm(input_layer, filters, strides)
return output_layer
The decoder block is comprised of three parts:
def decoder_block(small_ip_layer, large_ip_layer, filters):
# TODO Upsample the small input layer using the bilinear_upsample() function.
upsampling_layer = bilinear_upsample(small_ip_layer)
# TODO Concatenate the upsampled and large input layers using layers.concatenate
concatenated_layer = layers.concatenate([upsampling_layer, large_ip_layer])
# TODO Add some number of separable convolution layers
output_layer = separable_conv2d_batchnorm(concatenated_layer, filters)
return output_layer
Now that you have the encoder and decoder blocks ready, go ahead and build your FCN architecture!
There are three steps:
def fcn_model(inputs, num_classes):
# TODO Add Encoder Blocks.
# Remember that with each encoder layer, the depth of your model (the number of filters) increases.
encode1 = encoder_block(input_layer=inputs, filters=32, strides=2)
encode2 = encoder_block(input_layer=encode1, filters=64, strides=2)
# TODO Add 1x1 Convolution layer using conv2d_batchnorm().
conv_layer = conv2d_batchnorm(input_layer=encode2, filters=128, kernel_size=1, strides=1)
# TODO: Add the same number of Decoder Blocks as the number of Encoder Blocks
decode1 = decoder_block(small_ip_layer=conv_layer, large_ip_layer=encode1, filters=64)
decode2 = decoder_block(small_ip_layer=decode1, large_ip_layer=inputs, filters=32)
# The function returns the output layer of your model. "x" is the final layer obtained from the last decoder_block()
return layers.Conv2D(num_classes, 1, activation='softmax', padding='same')(decode2)
The following cells will use the FCN you created and define an ouput layer based on the size of the processed image and the number of classes recognized. You will define the hyperparameters to compile and train your model.
Please Note: For this project, the helper code in data_iterator.py
will resize the copter images to 160x160x3 to speed up training.
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
image_hw = 160
image_shape = (image_hw, image_hw, 3)
inputs = layers.Input(image_shape)
num_classes = 3
# Call fcn_model()
output_layer = fcn_model(inputs, num_classes)
Define and tune your hyperparameters.
learning_rate = 0.001
batch_size = 100
num_epochs = 10
steps_per_epoch = 200
validation_steps = 50
workers = 2
# final_IoU 0.426, final_score 0.306
# before adding extra separable convolution layer in decoder block and
# extra layers for encoding and decoding
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
# Define the Keras model and compile it for training
model = models.Model(inputs=inputs, outputs=output_layer)
model.compile(optimizer=keras.optimizers.Adam(learning_rate), loss='categorical_crossentropy')
# Data iterators for loading the training and validation data
train_iter = data_iterator.BatchIteratorSimple(batch_size=batch_size,
data_folder=os.path.join('..', 'data', 'train'),
image_shape=image_shape,
shift_aug=True)
val_iter = data_iterator.BatchIteratorSimple(batch_size=batch_size,
data_folder=os.path.join('..', 'data', 'validation'),
image_shape=image_shape)
logger_cb = plotting_tools.LoggerPlotter()
callbacks = [logger_cb]
model.fit_generator(train_iter,
steps_per_epoch = steps_per_epoch, # the number of batches per epoch,
epochs = num_epochs, # the number of epochs to train for,
validation_data = val_iter, # validation iterator
validation_steps = validation_steps, # the number of batches to validate on
callbacks=callbacks,
workers = workers)
# Save your trained model weights
weight_file_name = 'model_weights'
model_tools.save_network(model, weight_file_name)
Now that you have your model trained and saved, you can make predictions on your validation dataset. These predictions can be compared to the mask images, which are the ground truth labels, to evaluate how well your model is doing under different conditions.
There are three different predictions available from the helper code provided:
# If you need to load a model which you previously trained you can uncomment the codeline that calls the function below.
# weight_file_name = 'model_weights'
# restored_model = model_tools.load_network(weight_file_name)
The following cell will write predictions to files and return paths to the appropriate directories.
The run_num
parameter is used to define or group all the data for a particular model run. You can change it for different runs. For example, 'run_1', 'run_2' etc.
run_num = 'run_1'
val_with_targ, pred_with_targ = model_tools.write_predictions_grade_set(model,
run_num,'patrol_with_targ', 'sample_evaluation_data')
val_no_targ, pred_no_targ = model_tools.write_predictions_grade_set(model,
run_num,'patrol_non_targ', 'sample_evaluation_data')
val_following, pred_following = model_tools.write_predictions_grade_set(model,
run_num,'following_images', 'sample_evaluation_data')
Now lets look at your predictions, and compare them to the ground truth labels and original images. Run each of the following cells to visualize some sample images from the predictions in the validation set.
# images while following the target
im_files = plotting_tools.get_im_file_sample('sample_evaluation_data','following_images', run_num)
for i in range(3):
im_tuple = plotting_tools.load_images(im_files[i])
plotting_tools.show_images(im_tuple)
# images while at patrol without target
im_files = plotting_tools.get_im_file_sample('sample_evaluation_data','patrol_non_targ', run_num)
for i in range(3):
im_tuple = plotting_tools.load_images(im_files[i])
plotting_tools.show_images(im_tuple)
# images while at patrol with target
im_files = plotting_tools.get_im_file_sample('sample_evaluation_data','patrol_with_targ', run_num)
for i in range(3):
im_tuple = plotting_tools.load_images(im_files[i])
plotting_tools.show_images(im_tuple)
Evaluate your model! The following cells include several different scores to help you evaluate your model under the different conditions discussed during the Prediction step.
# Scores for while the quad is following behind the target.
true_pos1, false_pos1, false_neg1, iou1 = scoring_utils.score_run_iou(val_following, pred_following)
# Scores for images while the quad is on patrol and the target is not visable
true_pos2, false_pos2, false_neg2, iou2 = scoring_utils.score_run_iou(val_no_targ, pred_no_targ)
# This score measures how well the neural network can detect the target from far away
true_pos3, false_pos3, false_neg3, iou3 = scoring_utils.score_run_iou(val_with_targ, pred_with_targ)
# Sum all the true positives, etc from the three datasets to get a weight for the score
true_pos = true_pos1 + true_pos2 + true_pos3
false_pos = false_pos1 + false_pos2 + false_pos3
false_neg = false_neg1 + false_neg2 + false_neg3
weight = true_pos/(true_pos+false_neg+false_pos)
print(weight)
# The IoU for the dataset that never includes the hero is excluded from grading
final_IoU = (iou1 + iou3)/2
print(final_IoU)
# And the final grade score is
final_score = final_IoU * weight
print(final_score)


One of the nastiest things a Java developer will ever have to do is embed SQL in Java code. Usually this is done because the SQL has to be dynamically generated - otherwise you could externalize it in a file or a stored proc. As you've already seen, MyBatis has a powerful answer for dynamic SQL generation in its XML mapping features. However, sometimes it becomes necessary to build a SQL statement string inside of Java code. In that case, MyBatis has one more feature to help you out, before reducing yourself to the typical mess of plus signs, quotes, newlines, formatting problems and nested conditionals to deal with extra commas or AND conjunctions. Indeed, dynamically generating SQL code in Java can be a real nightmare.  With the SQL class, you simply create an instance that lets you call methods against it to build a SQL statement one step at a time. The example problem above would look like this when rewritten with the SQL class:
private String selectPersonSql() { return new SQL() {{ SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME"); SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON"); FROM("PERSON P"); FROM("ACCOUNT A"); INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID"); INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID"); WHERE("P.ID = A.ID"); WHERE("P.FIRST_NAME like ?"); OR(); WHERE("P.LAST_NAME like ?"); GROUP_BY("P.ID"); HAVING("P.LAST_NAME like ?"); OR(); HAVING("P.FIRST_NAME like ?"); ORDER_BY("P.ID"); ORDER_BY("P.FULL_NAME"); }}.toString(); }
What is so special about that example? Well, if you look closely, it doesn't have to worry about accidentally duplicating "AND" keywords, or choosing between "WHERE" and "AND" or none at all. The SQL class takes care of understanding where "WHERE" needs to go, where an "AND" should be used and all of the String concatenation.
Here are some examples:
// Anonymous inner class public String deletePersonSql() { return new SQL() {{ DELETE_FROM("PERSON"); WHERE("ID = #{id}"); }}.toString(); } // Builder / Fluent style public String insertPersonSql() { String sql = new SQL() .INSERT_INTO("PERSON") .VALUES("ID, FIRST_NAME", "#{id}, #{firstName}") .VALUES("LAST_NAME", "#{lastName}") .toString(); return sql; } // With conditionals (note the final parameters, required for the anonymous inner class to access them) public String selectPersonLike(final String id, final String firstName, final String lastName) { return new SQL() {{ SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME"); FROM("PERSON P"); if (id != null) { WHERE("P.ID like #{id}"); } if (firstName != null) { WHERE("P.FIRST_NAME like #{firstName}"); } if (lastName != null) { WHERE("P.LAST_NAME like #{lastName}"); } ORDER_BY("P.LAST_NAME"); }}.toString(); } public String deletePersonSql() { return new SQL() {{ DELETE_FROM("PERSON"); WHERE("ID = #{id}"); }}.toString(); } public String insertPersonSql() { return new SQL() {{ INSERT_INTO("PERSON"); VALUES("ID, FIRST_NAME", "#{id}, #{firstName}"); VALUES("LAST_NAME", "#{lastName}"); }}.toString(); } public String updatePersonSql() { return new SQL() {{ UPDATE("PERSON"); SET("FIRST_NAME = #{firstName}"); WHERE("ID = #{id}"); }}.toString(); }
| Method | Description |
|---|---|
|
Starts or appends to a SELECT clause. Can be called more than once, and parameters will be appended to the SELECT clause. The parameters are usually a comma separated list of columns and aliases, but can be anything acceptable to the driver. |
|
Starts or appends to a SELECT clause, also adds the DISTINCT keyword to the generated query. Can be called more than once, and parameters will be appended to the SELECT clause. The parameters are usually a comma separated list of columns and aliases, but can be anything acceptable to the driver. |
|
Starts or appends to a FROM clause. Can be called more than once, and parameters will be appended to the FROM clause. Parameters are usually a table name and an alias, or anything acceptable to the driver. |
|
Adds a new JOIN clause of the appropriate type, depending on the method called. The parameter can include a standard join consisting of the columns and the conditions to join on. |
|
Appends a new WHERE clause condition, concatenated byAND. Can be called multiple times, which causes it to concatenate the new conditions each time withAND. Use OR() to split with anOR. |
| OR() | Splits the current WHERE clause conditions with anOR. Can be called more than once, but calling more than once in a row will generate erraticSQL. |
| AND() | Splits the current WHERE clause conditions with anAND. Can be called more than once, but calling more than once in a row will generate erraticSQL. Because WHERE and HAVING both automatically concatenate with AND, this is a very uncommon method to use and is only really included for completeness. |
|
Appends a new GROUP BY clause elements, concatenated by a comma. Can be called multiple times, which causes it to concatenate the new conditions each time with a comma. |
|
Appends a new HAVING clause condition, concatenated by AND. Can be called multiple times, which causes it to concatenate the new conditions each time withAND. Use OR() to split with anOR. |
|
Appends a new ORDER BY clause elements, concatenated by a comma. Can be called multiple times, which causes it to concatenate the new conditions each time with a comma. |
| DELETE_FROM(String) | Starts a delete statement and specifies the table to delete from. Generally this should be followed by a WHERE statement! |
| INSERT_INTO(String) | Starts an insert statement and specifies the table to insert into. This should be followed by one or more VALUES() or INTO_COLUMNS() and INTO_VALUES() calls. |
|
Appends to the "set" list for an update statement. |
| UPDATE(String) | Starts an update statement and specifies the table to update. This should be followed by one or more SET() calls, and usually a WHERE() call. |
| VALUES(String, String) | Appends to an insert statement. The first parameter is the column(s) to insert, the second parameter is the value(s). |
| INTO_COLUMNS(String...) | Appends columns phrase to an insert statement. This should be call INTO_VALUES() with together. |
| INTO_VALUES(String...) | Appends values phrase to an insert statement. This should be call INTO_COLUMNS() with together. |
Since version 3.4.2, you can use variable-length arguments as follows:
public String selectPersonSql() { return new SQL() .SELECT("P.ID", "A.USERNAME", "A.PASSWORD", "P.FULL_NAME", "D.DEPARTMENT_NAME", "C.COMPANY_NAME") .FROM("PERSON P", "ACCOUNT A") .INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID", "COMPANY C on D.COMPANY_ID = C.ID") .WHERE("P.ID = A.ID", "P.FULL_NAME like #{name}") .ORDER_BY("P.ID", "P.FULL_NAME") .toString(); } public String insertPersonSql() { return new SQL() .INSERT_INTO("PERSON") .INTO_COLUMNS("ID", "FULL_NAME") .INTO_VALUES("#{id}", "#{fullName}") .toString(); } public String updatePersonSql() { return new SQL() .UPDATE("PERSON") .SET("FULL_NAME = #{fullName}", "DATE_OF_BIRTH = #{dateOfBirth}") .WHERE("ID = #{id}") .toString(); }
Before version 3.2 we took a bit of a different approach, by utilizing a ThreadLocal variable to mask some of the language limitations that make Java DSLs a bit cumbersome. However, this approach is now deprecated, as modern frameworks have warmed people to the idea of using builder-type patterns and anonymous inner classes for such things. Therefore the SelectBuilder and SqlBuilder classes have been deprecated.
The following methods apply to only the deprecated SqlBuilder and SelectBuilder classes.
| Method | Description |
|---|---|
| BEGIN() / RESET() | These methods clear the ThreadLocal state of the SelectBuilder class, and prepare it for a new statement to be built. BEGIN() reads best when starting a new statement. RESET() reads best when clearing a statement in the middle of execution for some reason (perhaps if the logic demands a completely different statement under some conditions). |
| SQL() | This returns the generated SQL() and resets the SelectBuilder state (as if BEGIN() or RESET() were called). Thus, this method can only be called ONCE! |
The SelectBuilder and SqlBuilder classes are not magical, but it's important to know how they work. SelectBuilder and SqlBuilder use a combination of Static Imports and a ThreadLocal variable to enable a clean syntax that can be easily interlaced with conditionals. To use them, you statically import the methods from the classes like this (one or the other, not both):
import static org.apache.ibatis.jdbc.SelectBuilder.*;
import static org.apache.ibatis.jdbc.SqlBuilder.*;
This allows us to create methods like these:
/* DEPRECATED */ public String selectBlogsSql() { BEGIN(); // Clears ThreadLocal variable SELECT("*"); FROM("BLOG"); return SQL(); }
/* DEPRECATED */ private String selectPersonSql() { BEGIN(); // Clears ThreadLocal variable SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME"); SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON"); FROM("PERSON P"); FROM("ACCOUNT A"); INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID"); INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID"); WHERE("P.ID = A.ID"); WHERE("P.FIRST_NAME like ?"); OR(); WHERE("P.LAST_NAME like ?"); GROUP_BY("P.ID"); HAVING("P.LAST_NAME like ?"); OR(); HAVING("P.FIRST_NAME like ?"); ORDER_BY("P.ID"); ORDER_BY("P.FULL_NAME"); return SQL(); }


Yodel API Server
Server Open!
You can close this window, and the server will run silently in the background.


Go to the source code of this file.
Data Structures |
| struct | WAIT_EVT |
| struct | SM |
Defines |
| #define | _SM_H |
| #define | MOD_ID MOD_SM |
| #define | SMF_READY 0x0100 |
| #define | SMF_TIMEOUT 0x0200 |
| #define | SMF_MASK 0x00ff |
| #define | SMF_WAIT_ALL 0x0001 |
| #define | SMF_CLEAR_EVENTS 0x0002 |
| #define | SMSTATE_DISABLED 0 |
| #define | SMSTATE_STARTED 1 |
| #define | EVTTYPE_NONE 0 |
| #define | MAX_WAIT_EVENTS 4 |
| #define | IsSMDisabled(s) (s.currState == SMSTATE_DISABLED) |
| #define | IsSMEnabled(s) (s.currState != SMSTATE_DISABLED) |
| #define | IsSMTimedOut(s) (s.smFlags & SMF_TIMEOUT) |
Functions |
| void | SMClearAllEvents (__out SM &sm) |
| void | SMInit (__out SM &sm) |
| void | SMStart (__out SM &sm) |
| void | SMStop (__out SM &sm) |
| bool | SMIsReady (__out SM &sm) |
| bool | SMAddWaitEvent (__inout SM &sm, __in int evtType, __in int evtID, __in int evtData) |
| void | SMWaitEvents (__inout SM &sm, __in int nextState, __in int timeout, __in int flags) |
| void | SMSetEvent (__inout SM &sm, __in int evtType, __in int evtID, __in int evtData, __in int evtParam1, __in int evtParam2) |
Define Documentation
Definition at line 16 of file sm.h.
Definition at line 37 of file sm.h.
| #define IsSMDisabled |
( |
|
s | ) |
(s.currState == SMSTATE_DISABLED) |
Definition at line 46 of file sm.h.
| #define IsSMEnabled |
( |
|
s | ) |
(s.currState != SMSTATE_DISABLED) |
Definition at line 47 of file sm.h.
| #define IsSMTimedOut |
( |
|
s | ) |
(s.smFlags & SMF_TIMEOUT) |
Definition at line 48 of file sm.h.
| #define MAX_WAIT_EVENTS 4 |
Definition at line 40 of file sm.h.
Definition at line 23 of file sm.h.
| #define SMF_CLEAR_EVENTS 0x0002 |
Definition at line 32 of file sm.h.
Definition at line 30 of file sm.h.
Definition at line 28 of file sm.h.
| #define SMF_TIMEOUT 0x0200 |
Definition at line 29 of file sm.h.
| #define SMF_WAIT_ALL 0x0001 |
Definition at line 31 of file sm.h.
| #define SMSTATE_DISABLED 0 |
Definition at line 34 of file sm.h.
| #define SMSTATE_STARTED 1 |
Definition at line 35 of file sm.h.
Function Documentation
| bool SMAddWaitEvent |
( |
__inout SM & |
sm, |
|
|
__in int |
evtType, |
|
|
__in int |
evtID, |
|
|
__in int |
evtData |
|
) |
| |
This function adds a wait event to the state machine.
- Parameters:
-
| sm | Points to the SM structure. |
| evtType | Specifies the event type to wait for. |
| evtID | Specifies the event ID to wait for. |
| evtData | Specifies the event data to wait for. |
- Returns:
- Success: Returns true.
-
Failure: Returns false.
Definition at line 221 of file sm.h.
| void SMClearAllEvents |
( |
__out SM & |
sm | ) |
|
This function clears all wait events in the state machine.
- Parameters:
-
| sm | Points to the SM structure. |
Definition at line 80 of file sm.h.
| void SMInit |
( |
__out SM & |
sm | ) |
|
This function initializes the state machine.
- Parameters:
-
| sm | Points to the SM structure to be initialized. |
Definition at line 111 of file sm.h.
| bool SMIsReady |
( |
__out SM & |
sm | ) |
|
This function checks if the state machine is ready or timed out.
- Parameters:
-
| sm | Points to the SM structure to be initialized. |
Definition at line 181 of file sm.h.
| void SMSetEvent |
( |
__inout SM & |
sm, |
|
|
__in int |
evtType, |
|
|
__in int |
evtID, |
|
|
__in int |
evtData, |
|
|
__in int |
evtParam1, |
|
|
__in int |
evtParam2 |
|
) |
| |
This function is called when an event has occurred. It will determine if the state machine is waiting for the event and will advance the state machine to the next state if necessary.
- Parameters:
-
| sm | Points to the SM structure. |
| evtType | Specifies the event type. |
| evtID | Specifies the event ID. |
| evtData | Specifies the event data. |
| evtParam1 | Specifies the event parameter 1. |
| evtParam2 | Specifies the event parameter 2. |
Definition at line 307 of file sm.h.
| void SMStart |
( |
__out SM & |
sm | ) |
|
This function starts the state machine.
- Parameters:
-
| sm | Points to the SM structure to be initialized. |
Definition at line 135 of file sm.h.
| void SMStop |
( |
__out SM & |
sm | ) |
|
This function stops the state machine.
- Parameters:
-
| sm | Points to the SM structure to be initialized. |
Definition at line 161 of file sm.h.
| void SMWaitEvents |
( |
__inout SM & |
sm, |
|
|
__in int |
nextState, |
|
|
__in int |
timeout, |
|
|
__in int |
flags |
|
) |
| |
This function sets the wait event mode and the next state to advance to when the wait is fulfilled.
- Parameters:
-
| sm | Points to the SM structure. |
| nextState | Specifies the next state to advance to. |
| timeout | Specifies the timeout value in msec for the wait. If 0, it will wait indefinitely for the events. |
| flags | Specifies the SMF flags. |
Definition at line 262 of file sm.h.


Represents a lazily evaluated collection of servers. This will usually be created via Net::SSH::Multi::Session#use(&block), and is useful for creating server definitions where the name or address of the servers are not known until run-time.
session.use { lookup_ip_address_of_server }
This prevents lookup_ip_address_of_server from being invoked unless the server is actually needed, at which point it is invoked and the result cached.
The callback should return either nil (in which case no new servers are instantiated), a String (representing a connection specification), an array of Strings, or an array of Net::SSH::Multi::Server instances.
Create a new DynamicServer record, owned by the given Net::SSH::Multi::Session master, with the given hash of options, and using the given Proc callback to lazily evaluate the actual server instances.
# File lib/net/ssh/multi/dynamic_server.rb, line 32 def initialize(master, options, callback) @master, @options, @callback = master, options, callback @servers = nil end
Returns the value for the given key in the :properties hash of the options. If no :properties hash exists in options, this returns nil.
# File lib/net/ssh/multi/dynamic_server.rb, line 39 def [](key) (options[:properties] ||= {})[key] end
Sets the given key/value pair in the :properties key in the options hash. If the options hash has no :properties key, it will be created.
# File lib/net/ssh/multi/dynamic_server.rb, line 45 def []=(key, value) (options[:properties] ||= {})[key] = value end
Iterates over every instantiated server record in this dynamic server. If the servers have not yet been instantiated, this does nothing (e.g., it does not automatically invoke evaluate!).
# File lib/net/ssh/multi/dynamic_server.rb, line 52 def each (@servers || []).each { |server| yield server } end
Evaluates the callback and instantiates the servers, memoizing the result. Subsequent calls to evaluate! will simply return the cached list of servers.
# File lib/net/ssh/multi/dynamic_server.rb, line 59 def evaluate! @servers ||= Array(callback[options]).map do |server| case server when String then Net::SSH::Multi::Server.new(master, server, options) else server end end end
Generated with the Darkfish Rdoc Generator 2.


What is AI-enhanced upscaling on the NVIDIA Shield TV (2019)?
Source: Russell Holly/Android Central
Best answer: The NVIDIA Shield TV (2019) was trained using machine learning algorithms to know how to add 4K details to enhance HD content from 720p or 1080p at 30 frames per second (FPS). Because this is a system-level feature, AI-enhanced upscaling will work with content across any streaming app you use.
- Best gets better: NVIDIA Shield TV (2019) ($150 at Amazon)
- Go Pro: NVIDIA Shield TV Pro (2019) ($200 at Amazon)
What kind of sorcery is this?
Video upscaling is a necessary requirement anytime you're watching standard HD content on a 4K display. If your source video is running at 1080p, with 1920x1080 pixels, and you play it on a 4K device that displays 3840x2160 pixels, there are more pixels being displayed on screen than available from the source material. Upscaling attempts to fill in those missing pixels as best as possible.
Older NVIDIA Shield TV models already offered basic upscaling to support 4K displays. What makes NVIDIA's AI-enhanced upscaling different is that it knows when and where to add extra details. You'll notice the effect of the AI-enhanced upscaling best in well-lit scenes that feature a lot of textures or human features like eyes, skin, and hair. The Shield will analyze the frame and try to enhance the details on anything that's in focus.
Source: Phil Nickinson / Cordcutters
You can tweak AI-enhanced upscaling in the Shield settings, with three enhancement levels to choose from — low, medium, and high. It's worth testing out each level based on the on the type of content you're watching, as the upscaling effect can vary based on the source video's resolution and the age of the content.
You can remap the settings button on the Shield remote to turn on AI upscaling, or even turn on the demo mode, which is a really great way to see the effect in real time. The demo mode includes a slider so you can split the screen between the original source and the upscaled result so you can see the effect.
Demo mode is the best way to see the effect that AI-enhanced upscaling has on content from Netflix, Amazon Prime Video, YouTube, and Disney+.
Our pick
NVIDIA Shield TV (2019)
The best balance of price and features
The non-"Pro" NVIDIA Shield TV features a compact new design that still delivers outstanding performance and improved AI-powered upscaling. This is a great choice if you want the best Android TV experience.
Go Pro
NVIDIA Shield TV Pro (2019)
For the hardcore streaming enthusiasts.
The Shield TV Pro is the better choice if you care about expandable storage, using your Shield TV as a Plex server, and about NVIDIA's gaming offerings. It offers more connectivity options and can be used as a hub for SmartThings.
We may earn a commission for purchases using our links. Learn more.


EffectiveBrowsing
Actual browsing goal:
Do you want to change your current browsing goal?
Informations
Work
Chat
Entertainment
Shopping/Finance
UpdateGoal
CheckTime


% stylesheet_link_tag "bootstrap" %> <% stylesheet_link_tag "font-awesome/css/font-awesome" %> <% stylesheet_link_tag "stylish-portfolio" %>
Sorry, there is no information available about Hacker Home at this time. Check back soon!
In the meantime, get yourself pumped, because awesome stuff is in the pipeline


Why is it so difficult to find service providers in your own locality?  And leave you all alone, scared and tired to do the research. You spend days asking about availability, prices, expertise, experience, services offered etc. with no beacon of quality in sight. Fix-it.com is here to fix all your problems. We are your SEARCH ENGINE who do the dirty work of screening, filtering and assembling a great panel of reliable service providers who will get your work done! Every expert on our platform has been professionally verified and background checked by us. Our amazing matching algorithms make sure that you get connected to the right service expert, in seconds. So let us worry about your service needs while you chill with a nice hot cup of coffee.
Fix is an online platform that connects service providers (Fix) and Service consumers (Consumer). It enhances service provider's (Fix) discover ability and accessibility, brings Optimum service with high perfomance and ease at both ends.
All service provider (Fix) on Fix-it!.com. is specially vetted and verified ensuring every services consumer utilizing the Fix-it!.com. platform is safe and secured to get quality service. Fix guarantees every user security and privacy. "Safe Speed" is a keyword on this platform. Despite all claims and assurances, every user is mandated to read and agree to our Terms of use and Privacy Policy before utilizing the service offered by the platform (Fix-it!.com).


CLRMs can store and access data via the api.storage
interface.
Storage is set up as a set of key-object stores. Objects must be serializable;
objects can contain maps, arrays, and primitives, but not functions or complex
objects, e.g., window
. Objects should not contain an
id
field, unless it can be used as the key. Any object saved
without an id
field will be provided the next available id for the
associated store (ids are auto-incremented). Any object saved to a store that
does have an id
field will overwrite any existing entry that
shares that id in the store. The following functionalities are provided:
api.storage.addStores
api.storage.removeStores
api.storage.clearStores
api.storage.listStores
api.storage.save
api.storage.read
api.storage.update
api.storage.remove
api.storage.removeDatabase
api.storage.addStores
stores
on_success
on_error
Creates a store with the given name.
api.storage.removeStores
stores
on_success
on_error
Removes a store. This means all entries contained within will be
deleted and no other operations can occur with this store name until
it is regenerated via api.storage.addStore
.
api.storage.clearStores
stores
on_success
on_error
This clears a store, or truncates it. The store will continue to exists, but all current entries will be removed. Note that the numbering of the log entry ids does not reset after this operation.
api.storage.listStores
on_success
on_error
Retrieves the list of existing stores. This is passed to the
on_success
function.
api.storage.save
store
data
on_success
on_error
Saves each of the objects in data
to store
. If
data[i].id
is defined, then that id is used as the
data[i]
's key. It will overwrite an existing entry if one
exists. If data[i].id
is undefined, an id will be assigned,
i.e., the next available id for store
. This id will be
stored with the object (i.e., you can access the id the next time you
read the object from the database).
Because the api.storage.save
function will overwrite
entries that share the same id, you can use it as a means of performing
non-deletion updates (rather than use the
api.storage.update
).
One common pattern is to add a new entry. In this case, make the object
to store and leave off the id
field—the database will
take care of setting this.
// Assume we have access to these variables and functions: // search, click // function judgeDocument(search, click) // Stores information about a relevance judgment. var judgment = { timestamp: new Date().getTime(), search: search, click: click, judgment: judgeDocument(search, click) }; // Add the entry to the activity log. Note that the data field consists of // a single-element array because we are only adding one entry. api.storage.save({data: [judgment], store: 'relevance-judgments'});
Another common use case is that you would like to modify an entry that
you read from the log earlier (maybe clean up a URL or something). As
long as you know the id
, which is stored along with
the entry when saved, you can do the following:
// Modifying a judgment we read earlier. Has id = 558. We are adding // an extra field specifying the session id of the search. judgment.session = extractSession(judgment.search); // When we write this to the log, it will replace the previous version. api.storage.save({data: [judgment], store: 'relevance-judgments'});
Finally, if you have multiple entries you'd like to add, that's easy:
// Assume we have five judgments named j1, j2, j3, j4, and j5. CROWDLOGGER.io.log.write_to_activity_log({ data: [j1, j2, j3, j4, j5], store: 'relevance-judgments' });
api.storage.read
store
on_chunk
chunk_size
below).
Chunks are processed asynchronously. It should expect three
parameters:
next
function, which, when
invoked, will read in the next chunk asynchronously
abort
function, which,
when invoked, will end the reading. This can take up
to two parameters: isError
(default
false) and errorMsg
. If isError
== true
, then the on_error
function will be invoked; otherwise, the
on_success
function will be (see
below).
on_success
on_chunk
.
on_error
chunk_size
chunk_size
is less than 1, it is set to 25,
and if greater than 100, it is set to 100.
reverse
lower_bound
upper_bound
Reads all the stored data from the specified store. Processing occurs in chunks and works in the same way as reading a user's interaction history.
api.storage.update
store
foreach
entry
entry.id
matches the id of
the original entry, the existing saved entry
is overwritten with entry
.
stop
true
.
delete
true
.
entries
entry
entry.id
matches the id of
the original entry, the existing saved entry
is overwritten with entry
.
stop
true
.
delete
true
.
on_success
on_error
reverse
lower_bound
upper_bound
This function performs one of two actions. If a foreach
parameter is provided, then this function iterates over entries in a
store, passing each to the foreach
method, where you can
choose to update the entry, delete it, stop iterating, or ignore the
entry and move on.
If foreach
is not provided, but entries
is,
then each specified entry will be updated accordingly.
The update operation is helpful when you want to update all (or most)
entries in a log. Extending our example from
api.storage.write
, say we
want to add a session
field to all of our saved
judgments that don't already contain such a field.
We could use the following code:
// Adds a session field to each judgment. function addSessionField( judgment ){ if( judgment.session === undefined ){ judgment.session = extractSession(judgment.search); return {entry: judgment}; } // We don't need to update the entry if it already has a session. return {}; } // Update all the saved entries. api.storage.update({ foreach: addSessionField, store: 'relevance-judgments' });
As another example, suppose you want to update a handful of entries and delete a few others. You might do:
// Updates a given judgment. function updateJudgment( judgment ){ api.storage.update({ store: 'relevance-judgments', entries: { judgment.id: {entry: judgment} } }); } // You could also use the api.storage.remove function and pass in a list of ids. function deleteJudgments( judgments ){ var toDelete = {}, i; for(i = 0; i < judgments.length; i++){ toDelete[judgment[i].id] = {delete: true}; } api.storage.update({ store: 'relevance-judgments', entries: toDelete }); }
If an entry is deleted, the numbering of the database will remain unchanged (the id of the deleted entry will never be used by another entry, unless you specify it when writing a new entry).
api.storage.remove
store
ids
on_success
on_error
Deletes one or more entries from the given store. This is a shortcut for using the api.storage.update method.
api.storage.removeDatabase
None.
This deletes the database associated with your CLRM (including preferences). If you decide you want to save something later, that's fine—a new database will be created automatically. Its a good idea to delete your database if your CLRM is finished (e.g., it is for a study that has ended). This will help keep users' computers tidy.
The storage API has a specialized sub class for storing and getting
preferences. The key differences are that with preferences, the preference
name is the id and retrieval id done a bit quicker, using an index over the
database. Preferences access is available via
api.storage.preferences
. The following methods are available:
api.storage.preferences.set
prefs
on_success
on_error
Saves the given preference.
The prefs
option also multiple preferences to be set at
once, which is particularly useful given the underlying implementation,
which requires an asynchronous write for every batch of preferences.
It's easy to use:
// Save a couple of preferences. api.storage.preferences.set({ prefs: { maxResultsToShow: 10, judgmentFrequency: 1000*60*60*24*2 // Every two days. } });
api.storage.preferences.get
pref
defaultValue
on_success
on_success
.
on_error
Retrieves the given preference.


Hyosung teases upcoming digital single 'Starlight'
by germainejHyosung has released a teaser image for her upcoming digital single 'Starlight'.
Fans have been waiting for Hyosung to return, and it looks like she's dropping a new single on November 21 KST. The teaser image below reveals a mic and a speaker with shiny, draped fabric.
Stay tuned for updates on Hyosung's comeback.


--- layout: example categories: example/v1.0.0 version: v1.0.0 title: Line crossing the date line description: Using unwrapped coordinates to cross the line tags: - vector - features ---


The Java EE 7 Tutorial
45.2 Basic JMS API Concepts
This section introduces the most basic JMS API concepts, the ones you must know to get started writing simple application clients that use the JMS API.
The next section introduces the JMS API programming model. Later sections cover more advanced concepts, including the ones you need in order to write applications that use message-driven beans.
45.2.1 JMS API Architecture
A JMS application is composed of the following parts.
-
A JMS provider is a messaging system that implements the JMS interfaces and provides administrative and control features. An implementation of the Java EE platform that supports the full profile includes a JMS provider.
-
JMS clients are the programs or components, written in the Java programming language, that produce and consume messages. Any Java EE application component can act as a JMS client.
Java SE applications can also act as JMS clients; the Message Queue Developer's Guide for Java Clients in the GlassFish Server documentation (
https://glassfish.java.net/docs/
) explains how to make this work. -
Messages are the objects that communicate information between JMS clients.
-
Administered objects are JMS objects configured for the use of clients. The two kinds of JMS administered objects are destinations and connection factories, described in JMS Administered Objects. An administrator can create objects that are available to all applications that use a particular installation of GlassFish Server; alternatively, a developer can use annotations to create objects that are specific to a particular application.
Figure 45-2 illustrates the way these parts interact. Administrative tools or annotations allow you to bind destinations and connection factories into a JNDI namespace. A JMS client can then use resource injection to access the administered objects in the namespace and then establish a logical connection to the same objects through the JMS provider.
45.2.2 Messaging Styles
Before the JMS API existed, most messaging products supported either the point-to-point or the publish/subscribe style of messaging. The JMS specification defines compliance for each style. A JMS provider must implement both styles, and the JMS API provides interfaces that are specific to each. The following subsections describe these messaging styles.
The JMS API, however, makes it unnecessary to use only one of the two styles. It allows you to use the same code to send and receive messages using either the PTP or the pub/sub style. The destinations you use remain specific to one style, and the behavior of the application will depend in part on whether you are using a queue or a topic. However, the code itself can be common to both styles, making your applications flexible and reusable. This tutorial describes and illustrates this coding approach, using the greatly simplified API provided by JMS 2.0.
<IP_ADDRESS> Point-to-Point Messaging Style
A point-to-point (PTP) product or application is built on the concept of message queues, senders, and receivers. Each message is addressed to a specific queue, and receiving clients extract messages from the queues established to hold their messages. Queues retain all messages sent to them until the messages are consumed or expire.
PTP messaging, illustrated in Figure 45-3, has the following characteristics.
-
Each message has only one consumer.
-
The receiver can fetch the message whether or not it was running when the client sent the message.
Use PTP messaging when every message you send must be processed successfully by one consumer.
<IP_ADDRESS> Publish/Subscribe Messaging Style
In a publish/subscribe (pub/sub) product or application, clients address messages to a topic, which functions somewhat like a bulletin board. Publishers and subscribers can dynamically publish or subscribe to the topic. The system takes care of distributing the messages arriving from a topic's multiple publishers to its multiple subscribers. Topics retain messages only as long as it takes to distribute them to subscribers.
With pub/sub messaging, it is important to distinguish between the consumer that subscribes to a topic (the subscriber) and the subscription that is created. The consumer is a JMS object within an application, while the subscription is an entity within the JMS provider. Normally, a topic can have many consumers, but a subscription has only one subscriber. It is possible, however, to create shared subscriptions; see Creating Shared Subscriptions for details. See Consuming Messages from Topics for details on the semantics of pub/sub messaging.
Pub/sub messaging has the following characteristics.
-
Each message can have multiple consumers.
-
A client that subscribes to a topic can consume only messages sent after the client has created a subscription, and the consumer must continue to be active in order for it to consume messages.
The JMS API relaxes this requirement to some extent by allowing applications to create durable subscriptions, which receive messages sent while the consumers are not active. Durable subscriptions provide the flexibility and reliability of queues but still allow clients to send messages to many recipients. For more information about durable subscriptions, see Creating Durable Subscriptions.
Use pub/sub messaging when each message can be processed by any number of consumers (or none). Figure 45-4 illustrates pub/sub messaging.
45.2.3 Message Consumption
Messaging products are inherently asynchronous: There is no fundamental timing dependency between the production and the consumption of a message. However, the JMS specification uses this term in a more precise sense. Messages can be consumed in either of two ways.
-
Synchronously: A consumer explicitly fetches the message from the destination by calling the
receive
method. Thereceive
method can block until a message arrives or can time out if a message does not arrive within a specified time limit. -
Asynchronously: An application client or a Java SE client can register a message listener with a consumer. A message listener is similar to an event listener. Whenever a message arrives at the destination, the JMS provider delivers the message by calling the listener's
onMessage
method, which acts on the contents of the message. In a Java EE application, a message-driven bean serves as a message listener (it too has anonMessage
method), but a client does not need to register it with a consumer.


Here is a full-version of our game (with all features) allowing you to play on linux system.
Extract the content of the zip file.
Open a terminal and tap "chmod +x [pathOfTheFilePEnuts]".
Now that the application is executable, you can open it and play !
Format : .zip
Content : .x86 // .x86_64 & data folder
Size : 27 Mo


{% extends "_post.html" %} {%hyde title: "Monster Truck Lloyd" created: 2007-02-10 18:40:55 %} {% block article %} {%article%}
Monster Truck Lloyd
Originally uploaded by snorp.
Saw this while getting some food this morning. Only in Kansas…
{%endarticle%} {% endblock %}


Up: Introduction to MPI-2
Next: Organization of this Document
Previous: Introduction to MPI-2
Beginning in March 1995, the MPI Forum began meeting to
consider corrections and extensions to the original MPI Standard
document [5]. The first product of these deliberations was
Version 1.1 of the MPI specification, released in June of 1995 (see
http://www.mpi-forum.org for official MPI document releases).
Since that time, effort has been focused in five types of areas.
1. Further corrections and clarifications for the MPI-1.1 document.
2. Additions to MPI-1.1 that do not significantly change its types of
functionality (new datatype constructors, language interoperability, etc.).
3. Completely new types of functionality (dynamic processes, one-sided
communication, parallel I/O, etc.) that are what everyone thinks of as
``MPI-2 functionality.''
4. Bindings for Fortran 90 and C++. This document specifies C++ bindings
for both MPI-1 and MPI-2 functions, and extensions to the Fortran 77
binding of MPI-1 and MPI-2 to handle Fortran 90 issues.
5. Discussions of areas in which the MPI process and framework seem likely
to be useful, but where more discussion and experience are needed before
standardization (e.g. 0-copy semantics on shared-memory machines, real-time
specifications).
Corrections and clarifications (items of type 1 in the above list)
have been collected in Chapter Version 1.2 of MPI
of this document,
``Version 1.2 of MPI.'' This chapter also contains the function for
identifying the version number. Additions to MPI-1.1 (items of
types 2, 3, and 4 in the above list) are in the remaining chapters, and
constitute the specification for MPI-2.
This document specifies Version 2.0 of MPI.
Items of type 5 in the
above list have been moved to a separate document, the ``MPI Journal
of Development'' (JOD), and are not part of the MPI-2 Standard.
This structure makes it easy for users and implementors to understand
what level of MPI compliance a given implementation has:
- MPI-1 compliance will mean compliance with MPI-1.2.
This is a useful level of compliance. It means that the
implementation conforms to the clarifications of MPI-1.1 function
behavior given in Chapter Version 1.2 of MPI
. Some
implementations may require changes to be MPI-1 compliant.
- MPI-2 compliance will mean compliance with all of MPI-2.
- The MPI Journal of Development is not part of the MPI Standard.
It is to be emphasized that forward compatibility is preserved. That is,
a valid MPI-1.1 program is both a valid MPI-1.2 program and a valid
MPI-2 program, and a valid MPI-1.2 program is a valid MPI-2
program.
Up: Introduction to MPI-2
Next: Organization of this Document
Previous: Introduction to MPI-2
Return to MPI-2 Standard Index
Return to MPI 1.1 Standard Index
Return to MPI Forum Home Page
MPI-2.0 of July 18, 1997
HTML Generated on September 10, 2001


Postrack v{{version}}
Visit us at WebOverride.com
Created by Daniel Cohen
© {{year}}, All rights reserved.