User:Woozle/blog/2011-04-28 2130 how to fix the economy
<hide> <let name=data index=Title>how to fix the economy</let> <let name=data index=User>Woozle</let> <let name=data index=TopicsUser></let> <let name=data index=TopicsGlobal>\debt\mortgages\politics\economy\automation</let> <let name=data index=TextAbove>I've been saying this for a little while now, and I just saw a documentary which put some numbers to it. Here's the story:</let> <let name=data index=TextBelow>Since 1890, real wages (adjusted for inflation) rose more or less steadily (at a low exponential rate) until about 1975. After that, they began stagnating slowly.
Since 1890, business productivity has increased steadily -- on a similar curve with wages until 1975, and then continuing on upward exponentially as wages stagnated, leading to absolutely staggering profit margins for the largest companies.
Why did this happen? Several forces are at work. Offshoring is one, of course; presumably we can fix that through changing the tax incentives, but it's not any more significant than women joining the workforce (beginning in the 1960s) and people working extra jobs to pay the bills (leaving fewer jobs for everyone else).
The major force behind this change is automation. It takes fewer workers now to produce the same amount of product -- which the owners sell for more money, due to higher productivity. But they have fewer workers to pay, so they get to keep a lot more of that money.
So where does this leave things, then? The employers have all the employees they need. They're still making enough food, clothing, shelter, and other basic necessities to go around -- but since they don't have to pay as many people, they've got all this extra money. What to do with it?
Two things.
First, if there are any annoying competitors cutting into their bottom line -- buy up the competitors. (Remember how suddenly everyone was buying everyone else, starting in the 1980s? This is why.) Now they don't have to worry about being the best, because there is only one real player, and its subsidiaries, for every market.
Second, they loan us the money that we could have been earning if they needed us to work for them. If we can find a way to get money to pay them back, great; if not, they get our houses or other assets when we go bankrupt.
Those businesses should be using most of their profits to pay for the health, education, and welfare of every person whose job has been automated (or offshored) out of existence, and who hasn't been able to re-train for some other work.
The irony? The problem is that it's *too easy* to produce everything we need. We should be living a life of leisure, with loads of extra time and no worries about housing or paying bills.
This has to change. Can someone phone the Tea Party and explain this to them? I'd think they would want to know how badly they're being screwed.</let>
<let name=data index=TimeStamp>2011-04-28 2130</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/2011-04-28 2130 how to fix the economy</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>
