Kenny’s Law

Kenny Chiu was a friend of mine about my sister’s age who was murdered outside of his home in Laguna Hills on July 30, 2001. Kenny was my friend and a friend of my family and I had known him all through high school and in junior high as well. He was stabbed to death in his driveway, about 2 or 3 blocks away from my home in the same neighbourhood, by a white supremicist in a violent hate crime. I had briefly posted about his and another friend of mine’s death in November 2001.

There currently are bills AB 2428 and AB 2191 (called “Kenny’s Law”) that have exited the California State Senate Public Safety Committe to enhance protections around hate crimes. Please write to your state representative to support these two bills.

Some more background out of the press releases regarding these two bills:

Kenny Chiu, a 17 year old Taiwanese American boy, was brutally murdered simply because he was Asian. In July 2001, Christopher Hearn, Kenny’s next door neighbor, waited for Kenny to come home and then stabbed him over 25 times in the driveway of his own house. Hearn was found guilty of first degree murder with special enhancements for lying in wait and hate animus during the guilt phase of the trial. But the final verdict rendered Hearn not guilty by reason of insanity.

AB 2191 clarifies the law to allow a victim or next of kin, in the case where a victim is deceased, to request notification of release from the director of the state facility. The state facility must make notification at least 15 days prior to the date of the hearing. The victim or next of kin is responsible for keeping the agency updated with any changes in address.

AB 2428 strengthens protections for victims of hate crimes by requiring the courts, absent compelling circumstances, to issue a protective order when a  hate crime perpetrator is released on probation, parole  or conditional release from a state mental institution. Additionally, this bill will extend the authority for courts  and the parole agency to order anti-bias and/or sensitivity training.

The Summer of Love

Hotmail Plus is finally live, a high-point in the Hotmail ‘summer of love’ to our customers. After X weeks of long hours working with some really dedicated people, we’ve shipped our 2GB paid/250MB free offer. For full details, check out this site on when we’ll be upgrading folks and all that stuff. Putting this out there was a wild and awesome ride. For about the last month of this process, I didn’t leave work before 9pm, was working at least 12 hours a day (well, something like 12 in the office and probably a few more from home before and after work) and on at least two occasions didn’t leave until 2:30am (once to fix this XSS vulnerability and the other to fix a registration hole that let people get free 2GB inboxes).

Such a wild ride working for a service — the registration hole is a great example. We first caught wind of it by reading about it on Neowin, a Microsoft enthusiast site on Wednesday. Within a hours site like Fat Wallet, Ben’s Bargins, Slick Deals, etc had all picked up on it and gave the repro steps. The crazy part is the actual steps — it involves using the MSN Explorer client, version 7 (the version that ships with Windows) to sign up for a free @msn.com account. The loophole is was that we incorrectly stamped those users with 2GB, and so we fixed the bug so that we give them the correct storage allotment. What blows me away is how users hit our service from every interface possible. It’s amazing how comprehensivly users push our software. Great stuff, and I’m glad I’m a part of it.

Open Source & Democratized Search

As you might be aware, I’m a huge proponent of the democratization of information. It’s one of the reasons I’m such a fan of RSS and I’m afraid of Google. With their virtual monopoly on search they’ve locked people in to the information that they’re presenting. While you may believe Google is benevolent, they’re a for-profit corporation just like any other company. They hide information about Nazi’s if you search in their French pages and other such stories exist. It’s not an issue I have with Google specifically, but anybody who controls the “gateway” to the Internet. The same fears apply to Yahoo Search and MSN Search.

I want an open source democratized search engine. I want to be able to hit a page or use a desktop client and search a database that isn’t controlled by anybody using code that is developed by many. It looks like there’s a group Nutch that has developed code in Java to be a core engine, which looks like it may solve the latter half of my problem. Unfortunately, it’s not easy to get a multi-terabyte set up that could host web content.

Thus, I think there should be a partition based system by which portions of the database are subpartitioned in a peer to peer system. Some subset of the peers host subpartition A and another subset of peers host subpartition B, and so on. A peer in the subparition would be responsible for its own crawling and refreshing its own subset of the database. The only problem with having the data partitioned across multiple peers is the execution of an actual search. Theoretically, it would require the search processor to execute the search on a peer in each of the subpartitions, which might not be that optimal.

The basic idea, as you can see, is to distribute subsections of the data across peers, which each peer group replicating the subsection amongst itself and responsible for doing its own update. Thoughts? Any volunteers to help make it?

Small Update on Life

As could be expected from me these days, life is hectic. I was acutally in the Bay Area this weekend and went out to SF with two of my friends from work to a couple of house/down tempo lounges. Ended up getting home at 4:30AM after getting some post last call food and an hour drive back to Sunnyvale. Saturday was a relaxed day and I caught The Terminal (good film) in the evening. I had dinner with Eric today at a average Mexican resturant in Palo Alto (can’t remember it’s name). Work is insane (as is becoming the norm), but it looks like it may calm down in September sometime. I don’t mind it, since we’re doing some amazing things and it’s all quite exciting. I’m still looking for a place to live in SF (SOMA, Mission or Potrero neighbourhoods) and Ami is moving up next next weekend. That’s the haps.

A Hashtable-like ArrayList in C#

I started working on WebSync again tonight. I’ve decided to make two major changes to jump start me on the project again: (a) streamline the server-side API to make it more file-manipulation like, (b) instead of treating the file paths as the identifier for a file I issue a GUID to track the file as it moves around (unique of its location, name and other metadata). The former makes the client much simpler and the latter makes the sync model eaiser to comprehend.

In any case, since I’m using GUIDs to track the objects I wanted to use a Hashtable to store all the file data and XML serialze it. Unfortunatly, that doesn’t work. Why, I’m not quite sure. .NET barfs and says it can’t touch the class because it implements IDictionary. So, I decided to make a Hashtable-like ArrayList. The only reason I wanted to use the Hashtable was to get the indexer anyway, so I just subclassed ArrayList. The code below is type checked for a “FileInfo” class, which has a member FileID that is a GUID (what I mentioned earlier for file tracking) which serves as key to make this Hashtable-like. Here is the C# code; it’s not optimized or elegant, but it gets the job done and makes me fall in love with OOP all over again.

public class FileArrayList : ArrayList
{
   public override int Add(object Value)
   {
      if(Value.GetType() != typeof(FileInfo))
         throw new Exception(“Bad!”); 
      
if(this[((FileInfo)Value).FileID] != null)
         
throw new Exception(“Already in this”);
      
return base.Add (Value);
   }
   public FileInfo this[Guid G]
   {
      get
      {
         foreach(FileInfo f in this)
         {
            if(f.FileID == G)
            {
               return f;
            }
         }
         return null; 
      }
      set
      {
         FileInfo searchInfo =
null;
         foreach(FileInfo f in this)
         {
            if(f.FileID == G)
            { 
               searchInfo =
value;
               break;
            } 
         }
         if(searchInfo != null)
         {
            this.Remove(searchInfo);
            this.Add(value);
         }
      }
   }
}