User:Woozle/blog/2009-02-26 1949 Today's Moment of Shame
<hide> <let name=data index=Title>Today's Moment of Shame</let> <let name=data index=User>Woozle</let> <let name=data index=TopicsUser>\shame\negativity\Josh\guilt</let> <let name=data index=TopicsGlobal>\Josh</let> <let name=data index=TextAbove>I have a small collection of "Moments of Shame" -- times when I did or said something which, in retrospect, I realized was really stupid or tasteless, and possibly hurtful to others, and which I will never ever be able to forget or stop wincing about.
One of these days I want to write about them all, as both confession and apology (should any of the affected happen to be reading), but since I just added a new one to my collection, I thought I should write about it now instead of waiting.</let> <let name=data index=TextBelow>So. Josh's worker brings him home, and mentions that he (the worker) might need to take tomorrow (Friday) off because his mother just died. His mom had been sick for awhile, in and out of the hospital for several weeks at least, and she obviously mattered a great deal to him. I could tell he was barely keeping his shit together as he said this to me; I suspect he had only just heard the news himself.
So I said "Omigosh, I'm so sorry!" in my most sincere/concerned/sympathetic voice, and agreed that he should take Friday off.
This was shortly followed by one of those moments which more or less define the phrase "quit while you're ahead".
Something I should explain at this point. I'm always struggling to remember things that I need to tell people, especially Josh's workers -- especially things like clarifying schedules. As a result of this, I've gotten into a mental habit of always saying "see you X", where X is whatever day I'm expecting to see them next. Knowing that I have said this helps to relieve those nagging doubts, when a worker hasn't showed up right on schedule, that maybe I need to call (which I really hate) and double-check.
So then I blurt out something like "See you Monday...! ...er, otherwise*..."
Right. So I'm picturing the way this could easily have come across: "Like, oh m'god, your mom died, I'm so sorry, take all the time off you need... but you'd better snap to it by Monday, mister, or you're history."
I don't know, maybe he didn't take it that way. Maybe I worry too much. Either way, it just shows that I shouldn't be doing this sort of work -- where I have to get along well with people on a level that must always remain very casual and distant. In office jobs, I can get to know people a little better -- so they know that if I should happen to say something which might be interpreted as me being a jerk, then that's not how I meant it... and I will know that they can feel free to tell me (or at least subtly convey by body language or whatever) if they do, for some reason, think I was being a jerk.
I may never know for sure how this guy interpreted what I said, or whether it bothered him... and I will always be imagining that underneath his surface civility, he's convinced I'm an authoritarian jerk who would insist he return to work the Monday after his mom died.
Unrealistic? Maybe... but prove it.
And all the bad feeling which this will generate in my head (justified or not) goes into the pile marked "I shouldn't be doing this. I'm not a people-person. Dammit, Jim, I'm a programmer, not a public-relations expert." All of which sounds like rationalization, thereby reinforcing the original idea that I'm a screw-up in this area.
*"Otherwise" was my brain's way of trying to say "unless you're still feeling too horrible, in which case call me if you can just so I'll know not to expect you". I mumbled it, though, so I don't know if he even heard it enough to not be able to understand what I meant.
Oh, and if I really was sincere, I'd send him a condolence card. If I knew his address, I'd probably try to actually do this, but then I'd probably forget about sending it until it was too late for there to be any sense in doing so.</let>
<let name=data index=TimeStamp>2009-02-26 1949</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/2009-02-26 1949 Today's Moment of Shame</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>