Blog cleanup continues

I finished adding feed URLs to my blogroll and cleaned up the design somewhat.  Some bugs were fixed too.  On optimization front, regular expressions are no longer being instantiated on the fly but compiled and shared when the webapp launches.  Page templates are still being built on every request, but that will get fixed too.  Performance probably improved unbelievably from the original code but I think I can push it much closer to the bare metal before I am pushing up hill.

Biggest chore ahead is removing unnecessary use of ASP.NET controls and ViewState abuse.  ViewState is on by default and I have to check each page to make sure viewstate can be turned off.  For pages that does need to use viewstate, I'll have to inject EnableViewState=false on all form controls except for those that actually need it.  ViewState is one of those features that is both a blessing and a curse.

BTW, there is no permalink image (#) any more because I use post title as the permalink.  For ease of use, I prefixed all the titles with '#' to indicate that title links are permalinks.

Wiki as MOO

Wiki is a MOO.  A wiki page is a MOO room.  WikiWords are doors.  Some changes to a wiki page are like conversations within a room, others are like writings on the wall or part of the room's description. 

Is it helpful to divide a wiki page into two sections (i.e. moderated top half and unmoderated bottom half)?  What about using passage of time to distinguish conversations from yesterday and today.  Will a calendar on a side like blogs help?  At least sense of time seem more intuitive than versions.

Outage

The new server was inaccessible for at least half an hour just now.  The domain's primary nameserver was inaccessible too and my local nameserver was acting weird too (it was pointing to the old server).  Anyway, everything is working again mysteriously.  Server itself was running so it must have been some network problem.  Weird.

BTW, you can send me e-mail by click on my face.  I'll see about restoring the mail icon.

Picture Bubbles, Wiki Toons, Stage Page

Picture Bubbles

Take a picture on the web, any picture will do as long as its accessible by a URL, and attach a comment to all or parts of the picture which is displayed in a cartoon bubble.  The bubble can also be set to pop-up on mouseover or mouseclick.

Wiki Toons

Start with a large picture or a series of related pictures placed on a wiki page in a row, a column, or a grid.  Allow people to change or comment on all or parts of the pictures using tools on the web page.  Put four in a row and let people create a toon by filling in the bubbles.

Stage Page

Fill top half of a page with a large image.  That's the stage.  Fill the bottom half with images of characters and props.  Let people play with the characters and props and share the experience with other players and spectators.  Record positions in time and let people replay one scene at a time.  For kids and adults only.

Pruning Blogroll

I am cleaning up my blogroll just now, self-discovering blog feeds one by one.  Esther Dyson and Halley Suitt's blogs at Blogspot are apparently gone so I have removed them for now.  This feels too much like housecleaning.  Urgh.

Just finished N.  Choo-choo!  Are we there yet?  Choo-choo!  This is how a highly paid, amazingly creative, and supposedly well-respected consultant/visionary/guru spends the last day of a year.  My wife and I are not going anywhere tonight which leaves us wondering what we are going to eat for dinner.  I don't really care what I eat — I hardly eat much of anything — but my wife defines her life by what she ate and where she went.  So I care by proxy.

More DasBlog Hacking

Although my recent optimization changes improved DasBlog performance drastically, enough for me to defer switching from file-based storage to MySQL or Berkeley DB XML, I had to do something about RSS feeds being generated dynamically.

These feeds don't change unless content changes, so it makes more sense to generate them only when content changes.  Besides, I needed to preserve URLs to my feeds so I needed a way to detect change to content automatically and force regeneration of those feeds.

To do this, I used System.IO.FileSystemWatcher to watch DasBlog's content directory and fire ContentChanged events which RSS builders and secondary data structures like CategoryCache and EntryIdCache instances listen to and react accordingly.  Now I can make changes directly to files in the content folder and those changes are reflected in both the web pages and the feeds.  Nice.

Classes like FileSystemWatcher has to be used carefully because many events firing over a short span of time will force unnecessary updates.  For protection, I used delayed update as a cheap event folding mechanism.  This technique doesn't protect against recursions which happens when a ContentChanged event listener makes change to the content directory.

Social Networks as Data Networks

Social network is a network where nodes are people and connections are positive relationships — I guess negative relationships can also be used to build social networks but they are not very useful.  Current upswelling in the interest about social software can be divided into two:

  1. Forming new connections and nurturing old connections
  2. Sending and receiving data through social connections

Companies like Friendster and LinkedIn are focused on the first.  Bloggosphere is all about the second.  I tend to favor the second because the first reminds me of the sneaker net and because relationships are easy to stress and difficult to create.

Seeing social networks as a data networks like the Internet or intranet helps me see new opportunities.  One I recently thought about involves distribution of favors, Favor Network if you will.

Think of what you need, whether its information or something more tangible, turn it into a packet of bits and send it to the immediate nodes in a social network using whatever communication medium you share like e-mail or IM.  Each of the receipients can take whatever action on the favor request including ignoring it.  Some will choose to forward it to appropriate immediate nodes.  In the end, it will get dropped or reach people who have the desired information or objects.

Rising up a level and looking at the Favor Network again at an angle, it's like Google over social network, a search engine that uses people as servers or routers.  Interesting.

Accounting of favor giving and receiving will promote such use of social networks.  So the sender rates his request in favorpoints which places a value on the favor.  The final receiver who fulfills a favor receives majority of the favorpoints.  Those who participated in routing of the favor to that person shares the remainder.

To prevent abuse, each node's balance of favorpoints must be recorded somewhere and provided on request or attached to the favor request.  If a person asks favors all the time, people will learn not to do any more favors for that person.  If a person does a lot of favors for others, others will be more likely to help that person out.  Favorpoints received are added to a person's favorpoint balance.  Favorpoints spent are subtracted.

Will it work?  I'll do you a favor and find the answer if you got a few million dollars.  ;-p

Divorces

Gretchen and Chris's divorce and a recent article in a Korean newspaper made me think about divorces tonight.  In 1980, the divorce rate in Korea was 5.9%.  In 1990, 11.4%.  Last year, 47.5%.  Those who keep track of the numbers say Korea will soon bypass America (51%) if it hasn't already.  At this rate, the very social fabric of Korea will soon be torn apart.

I doubt the rate will become 100%, but I can't help but wonder what a society with 100% divorce rate will be like.  Our divorce rate with cars is 100% so will we treat our spouses like cars?  Will 18 year olds become equivalent of new car models?  Will used cars get some respect as classics?  What about the equivalent of rental cars?  Who is driving who?