User:Woozle/blog/2010/04/29/1101 Our Visit to the Josh Depository
<hide> <let name=data index=Title>Our Visit to the Josh Depository</let> <let name=data index=User>Woozle</let> <let name=data index=TopicsUser></let> <let name=data index=TopicsGlobal>\Josh\Hughes Center\expeditions</let> <let name=data index=TextAbove>Taking Josh to the Hughes Center went reasonably well yesterday; here's the (more or less) full report...</let> <let name=data index=TextBelow>The plan was to start getting Josh going as soon as I had dropped off the other kids at school -- i.e. about 8:30. This we did, after having first loaded everything in the car in case we had to do another shove-him-in-and-take-off (both of us being needed in the front so he wouldn't try climbing out that way).
I. Amazingly, Josh actually cooperated with getting dressed.
The pattern recently had been that he wouldn't get dressed unless the car in the driveway belonged to either his worker or his grandma. The only cars in the driveway were ours, the usual ones -- but he did his usual routine of looking out the window to check the driveway, seemed satisfied, and put on all the clothes that were handed to him.
II. The problem came when he got a glimpse inside the laundry room and saw that his bag was gone -- meaning we had packed it, and he knows that this is what it means, and of course he was afraid that this meant we were shipping him back to The Home (which we pulled him out of completely two Mondays ago because of repeated inappropriateness and unprofessionalism on their part).
At that point he backed into a corner in the laundry room, but quickly realized that this wasn't a good defensive position and came back out when I started moving around behind him to push him out (which I didn't actually end up having to do). There was some further interaction (maybe he put his shoes on at that point?) and then he went outside.
III. As expected, instead of going to the car, he ran around the back of the house. Being in all-out This Has To Happen mode, I quickly caught up with him and strong-armed him back to the car...
IV. ...which of course he strongly resisted getting into. Either I've gotten better or he wasn't trying as hard as before, however, because I was able to get him into the back seat in (I think) less than 2 minutes. Then I had to hold him there while Sandy latched the child-locks so he couldn't just open the car doors and run away again.
The hard part was getting his legs inside, but again this was somehow easier than last time (last Thursday for his dental appointment).
V. Harena got the door closed while I held his legs out of the way, and then I started climbing into the front seat.
VI. Did I say "child-locks"? Apparently there was a small miscommunication1, because Josh reached over to open the door, and it worked, and he darted out of the car again.
VII. So I darted out and wrestled him back in again, and again she closed the door (this time with film in the camera2).
VIII. Then I stood blocking the gap between the front seats while Har darted in the house to do some last-minute thing or other (never did ask what), and then she came out to the car, and we seated ourselves and began backing out the driveway.
IX. No, nothing terrible happens at this point. Actually, nothing particularly awful happened from this point forward. Josh was vocalizing furiously in the back seat but not hitting anything or screaming.
He did seem to tone down a notch when I (quite deliberately) went down the street, which is not the way I took when driving him either to The Home or UNC hospital, but he continued vocalizing for quite some time... we think we were getting replays of things said to him at The Home; one repeated sound-bite sounded something like "try shuttin' up!"
We passed under an intersection where I could have gotten on the highway to get where we were going -- but it would also have been getting us back on the path to go back to The Home, so I decided not to. I think Josh understood the significance of this3, because he ramped down another notch after we passed that intersection.
X. The only slightly-alarming point came about 10 minutes later when he started kind of leaning over my shoulder. We were nervous that he was going to try to do something with the turn signal4 or possibly even the steering wheel or something else dangerous, but he never did; eventually we decided maybe he was just looking at his reflection in the rear-view mirror.5
XI. We ended up arriving about 10-15 minutes earlier than our earliest estimate, so we had to wait out in the car for about 5 minutes while our contact pulled things (and people) together to let us in.
The plan we had worked out in advance was to drive the minivan in through the gate, so we wouldn't have to worry about Josh escaping (although he seemed more likely to dig in his feet and refuse to leave the car, based on recent experience), and pull up right in front of the building he would be living in.
XII. He did actually dig in his feet a bit, but we kind of ignored him and got out to talk to people for a bit; by the time we were ready to try getting him out, he had apparently decided he was ready too.
He was basically cooperative when we brought him inside the "cottage"; he looped around the common room once while we were talking, then headed back out to the door and body-languaged that he wanted to go out again. We decided that that was ok (let him know he's not trapped here), so told him to go ahead.
There was a moment of confusion with his bag (was that before or after going in?) -- he started unpacking it, took out his shoes, and headed back to the car. I started trying to head him off... at that point the two other staffers (who were going to be working with him directly) indicated that they could take over if we felt that this was a good time, so they took him back in the cottage and we drove the car back up to the gate and thence (after a brief wait for the dude with the keys) out to the parking lot.
XIII. For the next 3 hours or so, we were basically doing paperwork, answering lots and lots and lots of questions about Josh (this is good!) and occasionally getting reports from people passing through who had been interacting with Josh as they began working with him. He had finally put his shoes away, he was cooperating with people, he was singing a bit -- all good signs.
In the end we decided not to try to say "goodbye" to him, as this would just confuse and/or upset him -- not that we had planned to originally, but somehow in the back of one's head one sort of expects there to be some last-minute contact before one goes off for real. It would have been just for us, though, not for him.
XIV. Uneventful drive home. It took awhile to get a cellphone signal so we could call our backup (Josh's Grandma) to let her know that we would be on time to get the kids from school (just barely). There was maybe 10 minutes of time in which to sit down, check email, unwind -- and then on to the Kid Express for the rest of the afternoon.
EPILOGUE. Josh's full orange juice glass still sits on the table, waiting for us to pour it out. There are nearly 4 full cartons of organic orange juice sitting in the fridge which we need to try to give away before they expire. I still have no idea what Josh did with the Sesame Street DVDs he apparently liberated from their cases on Tuesday (in an otherwise-positive Moment of Josh Communication). The living room is in chaos. Every loud "thump" makes my Josh-sense tingle before conscious thought kicks in.
It's going to be awhile before we figure out how things are.
Or, in other words: And now, back to our regularly-scheduled crises. (Which I'll have to write about at some point soon.)
Notes
1. When I had asked Har if she had also done the one on the door I shoved Josh through, and I saw her reach over and do something and then say something affirmative -- but apparently she was responding to a different question. Communication was difficult; I was panting heavily and partially nonverbal from wrestling with Josh (when I'm physically exhausted, I seem to get to this point where words are very difficult to form), and she had other things to deal with as well.
2. "This time with film in the camera" has become an idiom meaning "Taking care to do the task in such a way that one or more crucial elements are not accidentally omitted as they were previously." I'm wondering if this is widely used or largely just us...
3. Although it might have been just that he knew we had never gone anywhere Evil from this point forward, I'm inclined to think that he knew where he was and where we could have gone if we had turned. Josh has proven that he has a very good internal map -- if he knows where A and B are in relation to other things, he knows how to get from A to B even if he has never been taken that way before. (See Note 4 for a recent example.)
Hmm, I should make a point of mentioning this to his treatment team.
4. A few days ago I had tried to drive him to school, but when we got to a certain red light where we would normally go straight, he had reached over and flipped the turn signal (and kind of held his hand there, which would have made it difficult to steer if we had been moving).
At that time my main goal was to rebuild his trust that we weren't going to do anything awful to him, so I went along with it and turned left -- planning to turn left again and loop back home.
At the next light, however, when I signaled left, he reached over and turned the signal off -- leaving us heading towards Grandma's, otherwise known as Josh's Favorite Place To Go.
In my best judgment, with a relatively high degree of confidence, he knew which way he wanted to go at the first light -- even though we have never gone to Grandma's from that intersection.
5. Josh's reflection has always been his best friend -- and they get along better when he has recently been shaven, which his worker managed to get done on Monday. This led to a notably happier Josh, and was very good timing.</let>
<let name=data index=TimeStamp>2010-04-29 1101</let> </hide><if not flag=including>==GetLinkBrief()== <func GetLinkBrief>
<let name=links.out>
- </let>
<let name=links.out append copy=data[Date] /> <let name=links.out append> :[[</let> <let name=links.out append copy=pg_title /> <let name=links.out append>|more]]:[[Talk:</let> <let name=links.out append copy=pg_title /> <let name=links.out append>|talk]]: </let>
<if flag=$data[wpage]> <let name=wtLink>[[</let> <let name=wtLink append copy=data[wpage] /> <let name=wtLink append>|</let> <let name=wtLink append copy=data[Title] /> <let name=wtLink append>]] § </let> </if><else> <let name=wtLink>[</let> <let name=wtLink append copy=data[URL] /> <let name=wtLink append> </let> <let name=wtLink append copy=data[Title] /> <let name=wtLink append>]</let> </else>
<let name=links.out append copy=wtLink /> <let name=links.out append> § </let>
<let name=text copy=data[TextShort] /> <if flag=$text></if><else> <let name=text copy=data[Text] len=200 /> </else>
<let name=links.out append copy=text trim /> <let name=links.out append> [[</let> <let name=links.out append copy=pg_title /> <let name=links.out append>|more...]]</let>
</func>
ShowRecentLinks(max)
<func ShowRecentLinks max>
<let name=idx /> <let name=including val=1 /> <for table="qryW3_Titles_Catgs" where="(cl_to='Data/links') AND (page_namespace=0)" sort="page_title DESC" limit=$max name=pg hide> <let name=pg_title val="@row.page_title" /> <let name=idx inc /> <if not flag=$noLoad> <load page=$pg_title /> </if> <if flag=$data[Title]> <call GetLinkBrief /> </if><else> <let name=links.out>
- [[</let>
<let name=links.out append copy=pg_title /> <let name=links.out append>]]</let> </else> <let name=links.rtn append copy=links.out /> <let name=links.out /> <let name=data /> </for>
</func>
ShowTopic(iTopic,iMax)
This should eventually be able to show data in any format: news links, blog entries... <func ShowTopic iTopic iMax>
<let name=idx /> <let name=including val=1 /> <let name=topic farg=iTopic /> <if not flag=$topic> <let name=topic parse>Woozle/blog/2010/04/29/1101 Our Visit to the Josh Depository</let> </if> <let name=topic self with="_"> </let>
<let name=sqlWhere>(page_namespace=0) AND (cl_to='</let> <let name=sqlWhere append copy=topic /> <let name=sqlWhere append>')</let>
<for table="qryW3_Titles_Catgs" where=$sqlWhere sort="page_title DESC" name=pg empty="no items yet" limit=$iMax hide> <let name=pg_title val="@row.page_title" /> <let name=idx inc /> <if not flag=$noLoad> <load page=$pg_title local /> </if> <if flag=$data[Title]> <call GetBrief /> </if><else> <let name=links.out>
- [[</let>
<let name=links.out append copy=pg_title /> <let name=links.out append>]]</let> </else> <let name=exclude val=0 /> <let name=links.rtn append copy=links.out /> <let name=data null /> </for>
</func>
GetBlogEntryBrief()
<func GetBlogEntryBrief> INPUT:
data[*] - from blog entry page pg_name - full name of page being displayed (including namespace)
<if not flag=$noLoad> <load page=$pg_name /> </if>
<let name=e.out>
- </let>
<let name=e.out append copy=data[TimeStamp] /> <let name=e.out append> [[</let> <let name=e.out append copy=pg_name /> <let name=e.out append>|</let> <let name=e.out append copy=data[Title] /> <let name=e.out append>]] § </let>
<let name=text copy=data[TextAbove] /> <if flag=$text></if><else> <let name=text copy=data[TextBelow] len=200 /> </else>
<let name=e.out append copy=text trim /> <let name=e.out append> [[</let> <let name=e.out append copy=pg_name /> <let name=e.out append>|more...]]</let>
</func>
GetBlogEntryBriefChrisFormat()
<func GetBlogEntryBriefChrisFormat> INPUT:
data[*] - from blog entry page pg_name - full name of page being displayed (including namespace)
<if not flag=$noLoad> <load page=$pg_name /> </if>
<let name=e.out></let> <let name=e.out append>[[</let> <let name=e.out append copy=pg_name /> <let name=e.out append>|</let> <let name=e.out append copy=data[Title] /> <let name=e.out append>]], </let> <let name=e.out append copy=data[TimeStamp] /> <let name=e.out append>
</let>
<let name=text copy=data[TextAbove] /> <if flag=$text></if><else> <let name=text copy=data[TextBelow] len=200 /> </else>
<let name=e.out append copy=text trim /> <let name=e.out append> [[</let> <let name=e.out append copy=pg_name /> <let name=e.out append>|more...]]
</let> </func>
GetBlogEntryFull()
<func GetBlogEntryFull> INPUT:
data[*] - from blog entry page pg_name - full name of page being displayed (including namespace)
<if not flag=$noLoad> <load page=$pg_name /> </if>
<let name=e.out>
==</let>
<let name=e.out append copy=data[Title] /> <let name=e.out append>==
posted at </let>
<let name=e.out append copy=data[TimeStamp] /> <let name=e.out append>
</let>
<let name=e.out append copy=data[TextAbove] /> <let name=e.out append copy=BlogFoldDivider /> <let name=e.out append copy=data[TextBelow] />
-- category display
<let name=e.out append copy=BlogFoldDivider /> <let name=e.out append>
Categories –</let>
<let name=noCat val=1 /> <call MakeBlogCatgs /> <if flag=$wtCatGlob> <let name=e.out append> general: </let> <let name=e.out append copy=wtCatGlob> </if> <if flag=$wtCatUser> <let name=e.out append> user: </let> <let name=e.out append copy=wtCatUser> </if> <let name=e.out append></let>
</let> </func>
ShowRecentBlogEntries(max,funcEntry)
<func ShowRecentBlogEntries max funcEntry>
<let name=idx /> <if not flag=$funcEntry> <let name=funcEntry val="GetBlogEntryBrief" /> </if> <let name=including val=1 /> <for table="qryW3_Titles_Catgs" where="(cl_to='Data/blog/post')" sort="page_title DESC" limit=$max name=pg hide> <let name=pg_nspace_code>{{ns:</let> <let name=pg_nspace_code append val=@row.page_namespace /> <let name=pg_nspace_code append>}}</let> <let name=pg_nspace copy=pg_nspace_code parse /> <let name=pg_title val="@row.page_title" /> <let name=pg_name copy=pg_nspace /> <let name=pg_name append>:</let> <let name=pg_name append copy=pg_title /> <let name=idx inc /> <call func=$funcEntry /> <let name=e.rtn append copy=e.out /> <let name=data /> </for>
</func>
ShowRecentBlogEntriesFull(max)
<func ShowRecentBlogEntriesFull max>
<let name=idx /> <let name=including val=1 /> <for table="qryW3_Titles_Catgs" where="(cl_to='Data/blog/post')" sort="page_title DESC" limit=$max name=pg hide> <let name=pg_nspace_code>{{ns:</let> <let name=pg_nspace_code append val=@row.page_namespace /> <let name=pg_nspace_code append>}}</let> <let name=pg_nspace copy=pg_nspace_code parse /> <let name=pg_title val="@row.page_title" /> <let name=pg_name copy=pg_nspace /> <let name=pg_name append>:</let> <let name=pg_name append copy=pg_title /> <let name=idx inc /> <call GetBlogEntryFull /> <let name=e.rtn append copy=e.out /> <let name=data /> </for>
</func>
ShowRecentBlogEntriesByTopic(max,topic)
<func ShowRecentBlogEntriesByTopic max topic>
<let name=topic self with="_"> </let>
<let name=sql>(cl_to='</let> <let name=sql>SELECT q1.* FROM qryW3_Titles_Catgs AS q1 LEFT JOIN qryW3_Titles_Catgs AS q2 ON q1.cl_from=q2.cl_from WHERE (q1.cl_to='Data/blog/post') AND (q2.cl_to='</let> <let name=sql append copy=topic /> <let name=sql append>') ORDER BY page_title DESC LIMIT </let> <let name=sql append copy=max />
<for sql=$sql> <let name=pg_nspace_code>{{ns:</let> <let name=pg_nspace_code append val=@row.page_namespace /> <let name=pg_nspace_code append>}}</let> <let name=pg_nspace copy=pg_nspace_code parse /> <let name=pg_title val="@row.page_title" /> <let name=pg_name copy=pg_nspace /> <let name=pg_name append>:</let> <let name=pg_name append copy=pg_title /> <let name=idx inc /> <let name=data[Title] null /> <load page=$pg_name /> <if flag=$data[Title]> <call GetBlogEntryBrief /> <let name=e.rtn append copy=e.out /> </if> <let name=data /> </for>
</func>
MakeBlogCatgs()
<func MakeBlogCatgs>
<let name=catUser copy=data[TopicsUser] /> <let name=catGlob copy=data[TopicsGlobal] /> <let name=wtCatUser null /> <xploop list=$catUser var=topic> <let name=wtCatUser append> [[user:</let> <let name=wtCatUser append copy=data[User] /> <let name=wtCatUser append>/</let> <let name=wtCatUser append copy=topic /> <let name=wtCatUser append>|</let> <let name=wtCatUser append copy=topic /> <let name=wtCatUser append>]]</let>
<let name=wtCatUser append>[[:category:user/</let> <let name=wtCatUser append copy=data[User] /> <let name=wtCatUser append>/</let> <let name=wtCatUser append copy=topic /> <let name=wtCatUser append>|c]]</let>
<if not flag=$noCat> <let name=wtCatUser append> [[category:user/</let> <let name=wtCatUser append copy=data[User] /> <let name=wtCatUser append>/</let> <let name=wtCatUser append copy=topic /> <let name=wtCatUser append>|</let> <let name=wtCatUser append copy=topic /> <let name=wtCatUser append>]]</let> </if> </xploop> <let name=wtCatGlob null /> <xploop list=$catGlob var=topic> <let name=wtCatGlob append> [[</let> <let name=wtCatGlob append copy=topic /> <let name=wtCatGlob append>]]</let>
<let name=wtCatGlob append>[[:category:</let> <let name=wtCatGlob append copy=topic /> <let name=wtCatGlob append>|c]]</let>
<if not flag=$noCat> <let name=wtCatGlob append>[[category:</let> <let name=wtCatGlob append copy=topic /> <let name=wtCatGlob append>]]</let> </if>
</xploop>
</func>
ShowBlogPostPage()
<func ShowBlogPostPage>
<let name=PostDate copy=data[TimeStamp] len=10 /> <let name=wtDate>[[</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>]] ([[:category:</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>|category]])</let>
<let name=wtDate append>[[category:</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>]]</let>
<let name=wtTitle>
==</let>
<let name=wtTitle append copy=data[Title] /> <let name=wtTitle append>==</let> <if flag=$data[TextAbove]> <let name=wtTextBrief>
In Brief </let>
<let name=wtTextFull>
The Rest </let>
<let name=wtTextBrief append copy=data[TextAbove] /> </if><else> <let name=wtTextBrief null /> </else> <let name=wtTextFull append copy=data[TextBelow] />
<call MakeBlogCatgs />
General categories for blog posts: -- the fact that it's a post:
<let name=wtCatGlob append></let>
-- date:
<let name=wtCatGlob append>[[category:</let> <let name=wtCatGlob append copy=PostDate len=10 /> -- just the date for the category <let name=wtCatGlob append>|]]</let> <let name=wtCatGlob append copy=PostDate /> -- full timestamp for sorting <let name=wtCatGlob append>]]</let>
<let name=user copy=data[User] /> <if flag=$user> <let name=wtUser>[[user:</let> <let name=wtUser append copy=user /> <let name=wtUser append>|</let> <let name=wtUser append copy=user /> <let name=wtUser append>]]</let> </if><else> <let name=wtUser>unknown</let> </else> <echo>
<get name=wtTitle /> <get name=data index=Text /><get name=wtTextBrief /><get name=wtTextFull />
</func>
ShowBlogPostPage_v2()
<func ShowBlogPostPage_v2>
<let name=PostDate copy=data[TimeStamp] len=10 /> <let name=wtDate>[[</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>]] ([[:category:</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>|category]])</let>
<let name=wtDate append>[[category:</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>]]</let>
<let name=wtTitle>
==</let>
<let name=wtTitle append copy=data[Title] /> <let name=wtTitle append>==</let> <if flag=$data[TextAbove]> <let name=wtTextBrief>
In Brief </let>
<let name=wtTextFull>
The Rest </let>
<let name=wtTextBrief append copy=data[TextAbove] /> </if><else> <let name=wtTextBrief null /> </else> <let name=wtTextFull append copy=data[TextBelow] />
<call MakeBlogCatgs />
General categories for blog posts: -- the fact that it's a post:
<let name=wtCatGlob append></let>
-- date:
<let name=wtCatGlob append>[[category:</let> <let name=wtCatGlob append copy=PostDate len=10 /> -- just the date for the category <let name=wtCatGlob append>|]]</let> <let name=wtCatGlob append copy=PostDate /> -- full timestamp for sorting <let name=wtCatGlob append>]]</let>
<let name=user copy=data[User] /> <if flag=$user> <let name=wtUser>[[user:</let> <let name=wtUser append copy=user /> <let name=wtUser append>|</let> <let name=wtUser append copy=user /> <let name=wtUser append>]]</let> </if><else> <let name=wtUser>unknown</let> </else> <echo>
<get name=wtTitle /> <get name=data index=Text /><get name=wtTextBrief /><get name=wtTextFull />
Specs | |
Timestamp: | <get name=PostDate /> |
Author: | <get name=wtUser /> |
User topics: | <get name=wtCatUser /> |
Global topics: | <get name=wtCatGlob /> |
</func>
ShowBlogPostPage_v1()
<func ShowBlogPostPage_v1>
<let name=PostDate copy=data[TimeStamp] len=10 /> <let name=wtDate>[[</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>]] ([[:category:</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>|category]])</let>
<let name=wtDate append>[[category:</let> <let name=wtDate append copy=PostDate /> <let name=wtDate append>]]</let>
<let name=wtTitle>
==</let>
<let name=wtTitle append copy=data[Title] /> <let name=wtTitle append>==</let> <if flag=$data[TextAbove]> <let name=wtTextBrief>
In Brief
</let>
<let name=wtTextFull>
Full Story
</let>
<let name=wtTextBrief append copy=data[TextAbove] /> </if><else> <let name=wtTextBrief null /> </else> <let name=wtTextFull append copy=data[TextBelow] />
<call MakeBlogCatgs />
General categories for blog posts: -- the fact that it's a post:
<let name=wtCatGlob append></let>
-- date:
<let name=wtCatGlob append>[[category:</let> <let name=wtCatGlob append copy=PostDate len=10 /> -- just the date for the category <let name=wtCatGlob append>|]]</let> <let name=wtCatGlob append copy=PostDate /> -- full timestamp for sorting <let name=wtCatGlob append>]]</let>
<let name=user copy=data[User] /> <if flag=$user> <let name=wtUser>[[user:</let> <let name=wtUser append copy=user /> <let name=wtUser append>|</let> <let name=wtUser append copy=user /> <let name=wtUser append>]]</let> </if><else> <let name=wtUser>unknown</let> </else> <echo>
Specs
Timestamp: | <get name=PostDate /> |
Author: | <get name=wtUser /> |
User topics: | <get name=wtCatUser /> |
Global topics: | <get name=wtCatGlob /> |
<get name=wtTitle /> <get name=data index=Text /><get name=wtTextBrief /><get name=wtTextFull /></echo> </func><call ShowBlogPostPage></if>