Blackhawks Playoff Tix On Sale!

March 31st, 2009

This morning at 10am, Blackhawks playoff tickets went on sale! For those of you that don’t follow Hockey or the Blackhawks… This is a relatively big deal as the Blackhawks have not made the Stanley Cup Playoffs since 2002 (when they were man-handled by the Saint Louis Blues in 5 games). They haven’t actually WON a playoff series since 1996 when they swept the Calgary Flames, only to be eliminated by Colorado in the second round.

Blackhawks PlayoffsYes, its been a long time (not as long as its been for the Cubs though!) and Blackhawk fans finally have something to get excited about again! 

The United Center doesn’t quite have the same roar I remember from the Chicago Stadium, but I can’t tell you how excited I am about the return of playoff hockey to the West Loop.

I didn’t get to actually look for tickets until about 10:30am and was afraid that I’d missed my opprotunity. Sadly, TicketMaster’s website blows chunks when it comes to purchasing tickets. I had to continually search for tickets while hoping for some good luck. First, you can’t really select a price range without severely limiting yourself to a small subset of seats, so you end up having to look for “best available” and it kept offering me 200 level club seats for $150 a pop. No thanks, i wanted the $50 cheap seats! Also, you can’t search for multiple games at once as it gives up your previous tickets! (i lost out on some decent seats thanks to that!)

Finally, I pulled the trigger on 3 games for Standing Room tickets. $67 for a pair to each game with that crazy TicketMaster fees ($5.75 a ticket PLUS a per-order conveniece fee!? You HAVE to be kidding me! why hasn’t someone run them out of business yet?!) really isn’t that bad! Those are for Game C of the first series (3rd home game) and Game A and B of the second series. Obviously tickets for the second series are worthless if we don’t survive the first round. The 3rd home game in the first series would be game 5 if we lose home ice, or game 6 if we keep home ice. So even that isn’t guarenteed.

If I could script out how the first round of the playoffs were to go, I’d take home ice and hope the series goes a full seven games. Somehow along the way while I was looking for best available tickets, ticketmaster offered me seats ON THE GLASS right behind the goal for Game D in the first round! Obviously, if we lose home ice, we won’t get a 4th home game, and that 4th game won’t be played unless the first 6 games are split. I quickly made the purchase ($390 tickets, ouch!) after I realized that I’ll either get all that cash back, or I’ll be able to witness a MONSTER event from great seats! Plus, those silly TicketMaster fees don’t seem as bad with expensive tickets!

Definately going to make the playoffs more interesting! I’ll have to start finding out who wants to join me for the games as they draw closer. If you’re interested in going… Let me know!

Making vitural a reality

March 12th, 2009

So, the last few posts were my attempts to try to make sense of the random ideas that came up from several different conversations over the past week. I probably should have prefaced those posts with a bit of a warning since I know it confused some people. I think I’m now seeing the wisdom of having a personal wiki for collecting these thoughts, organizing them and inviting collaboration. Perhaps that can be part of my personal knowledge management wiki, but I’m not sure I’m comfortable with private data in the same system that’s on the internet, but that’s a completely different project.

Regardless, lacking a good mindmap solution… That was my attempt at explaining a complicated problem and trying to explain all the little parts that would make up a solution… or at least how I would envision a solution with today’s technology…

First of all, this project isn’t about creating a business or otherwise sell this idea. There’s nothing stopping someone from providing a service with this software, but I at least want the option of being able to run this myself on my own machine, as I’m leary of handing over access to all my personal data.

With that said, I’m envisioning a HUGE system with tons of functionality. I’d like to build it all myself, but I know that I don’t have time for that and some of the items are outside my areas of expertise. I want anyone to be able to run this software on their own computers on pretty much any operating system and any type of internet connection. So, I’m seeing this as a GPL’ed open source python project and hopefully, some people will catch wind of this and want to help out! I still have to sketch out a roadmap of features and functionality, but the core design is already pretty well-formed.

Central to this system is the main engine that will power the virtual digital assistant… the brain that allows it to fetch/receive input, process it according to the rules its been given (including any self-learning AI), and then act accordingly. As complicated as that system is, there’s only a handful of functions that the “brain” will have to do. Using a modular design allows for flexible use and extension of the system, allow this project to become a development platform allowing it to act like yahoo pipes.

Minimally, i can see the following modules being needed, in addition to a little bit of python glue to connect everything together, and there would be a working solution.

Inputs

Without input, our virtual assistant is deaf and blind. There’s really two ways for input to be received… either we need to go out and get it, or its going to find its way to us. Examples of very “pull” inputs are RSS feeds or email notifications (via POP/IMAP polling), while “push” inputs may be generated by things like Instant Messenger Bots or a web interface or a phone app. These input modules are responsible for doing what it needs to acquire or listen for data, processing it and creating core events.

Key to this system to be successful will be the definition of these core events. They should be simple and general enough so the basics are handled well. At the same time, they are extensible so that new events can be created. For example, a basic event may be a “blog entry object” generated from a RSS Input Module. Perhaps a Twitter input module will read your twitter stream and create Tweet objects. These likely are all subclassed from an Event class that provides the basic functionality needed for basic processing and it would be recommended to avoid excessive subclassing.

Processing

Once we have the inputs and have generated events, all the real work has to happen. Ultimately, this is where all the exciting things happens. These processing modules are chained together. Perhaps one module will look at the the content of an object and classify it by looking for keywords, while another module will use that classification to look at your current Attention Profile and decide if an alert should be generated or not. Initially, these can be very limited in functionality while still providing a very usable system. At a minimum, the Processing modules will need to generate Output Actions. An example Processing module may read a Tweet Event and generate a notification output object if it meets some requirements. Occasionally, I may want to temporarily stop following someone on twitter because they are tweeting a lot more then normal about things I don’t care about… so for the next six hours, I’ll only get notifiied if they @reply to me.

Outputs

Finally, Output actions actually take these events and do something. Perhaps it sends an email or text message… or uses the Remeber the Milk API to add or mark a task as complete… or maybe it sends a DM through twitter on my behalf… or adds something to my Google Calendar. Today, most all of these actions are easily automated. Also, its important to note that output notifications should provide a feedback loop to generate additional input events, such as marking an item as read in my google reader via an API call and also adjust my attention profile accordingly.

So that’s an overview of the system. Given its flexibility, configuration and management of installed components may be difficult, but an average desktop machine is more then powerful enough to automatically do these tasks in the background.

With this system, your personal assistant can sit in an IRC channel and be told to notify you over the weekend when some keywords are said in a channel, or be told that you’re expecting an email from someone in the next 3 days and if you don’t get one you want to be reminded with an email to your work address. The later example will set a pending event to notify you of the missing email, while scanning your mail box via IMAP and if it finds an email it clears that pending notification. Or perhaps, the agent can be a simple security system by accessing a webcam image internal to my network and watch for motion and capture video/images and save them for my review later.

I haven’t yet found a platform that can even begin to handle that wide array of tasks in stride, let alone be expanded to handle the really slick things like predicting what I’d be interested in reading or attempting to keep my life on track by ensuring that my goals aren’t being neglected.

Virtual Personal Assistants?

March 11th, 2009

So, in my recent quest to find something to better manage all the little bits of data that I have to keep track, and goals and aspirations I hope to somehow find time to accomplish… I think I have come across an opportunity for something that is sorely lacking.

Personal assistants are great… they know what you need to get done and when it needs to get done by. They constantly monitor your life to ensure that you are going to meet your goals and will let you know as soon as you start heading off track.. or at least they should. For the most part, they are mostly employed by celebrities and very wealthy people, but the service they provide is vital… and I really don’t think that computers are too away from being able to handle a lot of this.

So, I’d like to see some software exist someday (either as a project I start or contribute to, or i can just be a regular user) that can fulfill this role. I’d envision some sort of dashboard so I can look at things, but the key feature is that it can be both reactive to general inputs and proactive when my goals are being threatened, either by  emailing or sending text messages if things get really out of line.

Ultimately, I can declare some of my goals and aspirations… assign values to things (or infer them based on how my activities impact my emotional, physical or financial state) and have this system make recommendations for moving calendar appointments when projects run long, or suggest a movie I wanted to see (but never found time for) when I have a couple free hours and have been more stressed out then normal. Maybe it can even take recommendations from blog posts or last.fm activity streams of my friends to recommend brand new things I haven’t yet found out about. Many sites already provide the recommendation engines. For example,  last.fm provides a recommend events feed for upcoming concerts in my area that match my music tastes. Usually, my schedule is the limiting factor for things so I’d love for my assistant to consider how much I might like the show and look at my calendar to see if I’m free, possibly recommending I reschedule something if I’d really like the show. These are the small mundane decisions that I waste much of my time thinking about. On the other side, I should be able to look into what decisions are made on my behalf, even months later… and my feedback should have a big impact on future decisions.

For this to work, it needs to be able to get input from me.. what I’m interested in, and what’s important to me. Some of this probably needs to be explicitly setup (like my goal of running the San Diego Marathon in May), but others can be generated automatically. Attention Profiles actually sound like it might be a very interesting way of harnessing data from web browsing habits and other sources. Interestingly, Digg can provide a news feed based on your Attention Profile.. and that’s exactly the kind of thing I’d like my virtual personal assistant to be able to do.  Mood information is important, and I’m not really sure how to capture that. I suppose a bluetooth neural interface (that charges wirelessly via a charger you can sleep near or wear around the office) is a few years away still. But even discounting my emotional and physical state, I’d expect my assistant to cull through all the news feeds I have and suggest things that may be interesting to me. Search engines are pretty good at determining what a bunch of text is talking about… cross referencing that with my attention profile should give an indication of how likely I am to be interested in the story. If I actually click into the headline to read the story, or follow links from there, the system should take that as positive feedback and adjust its recommendations accordingly. Add in all the semantic web goodness (yes, that document is 10+ years old!) that is being worked on, and it becomes even easier for this virtual personal assistant to make sense of things.

For example, I love lifehacker… i really do… but, they spend a lot of time recommending Windows apps that are meaningless to me… but.. every now and then something catches my attention… or maybe if i just did a google search for a windows media player… why can’t my assistant search through the feeds I’m following and find related entries? Also… time management is always a challenge. Mainly because I have far too much to do, but also because time estimates are inherently inaccurate. Often times, the appointments on my calendar are ones I’ve made with myself to remind me that I’ve set aside a couple hours today to do something. I can easily rearrange many of these things (like, watch a new episode of a TV show.. or get a workout in)… Why have we not yet seen any intelligent calendaring systems? Sure, they are all pretty good at entering appointments and setting reminders… but why can’t it know that I can push something back an hour and offer me that alternative. Or perhaps tell me the repercussions on my schedule if I stay at work an hour later… perhaps that work can wait until tomorrow if I know that I would have to be awake until 5am to complete the rest of today’s activities, which clearly would cut into my rest for the next day.

Ultimately, the system should learn on its own. It can let me fail and be miserable at work the day after pulling an all-nighter, then it should see that and figure out on its own (ideally… perhaps it needs to ask confirmation on its theories) and attempt to intervene when I choose to stay at work longer. Now with Internet and GPS enabled devices, it seems like the only thing that is missing is coming up with a general algorithm for maximizing my happiness while meeting my goals.

One one hand… it seems like a very large project, but in the end.. all it does is take several inputs (internet content, my goals, my status), update its internal decision matrix, and then make suggestions to me and monitor how i react to them (did i ignore the recommendation? did I read it? did I adjust my goals?). I don’t really care about the interface, but rather the engine is what’s interesting. This is more then just a web app that needs a shiny front end. I can see getting RSS feeds out of it but also SMS messages and emails, among other things. Eventually, it may interact directly with my google calendar or my RTM lists, but those should be via pluggable modules.

With a little Bayesian Probabilities or some Game Theory, I wouldn’t think the algorithm side is all that hard. Everything produces RSS feeds these days. Android/iPhone apps are easily developed… Is all that’s missing some software to tie this all together? Really? If so, I should get started ASAP on this… (right after I get everything else in line first!)

This is probably a larger task then I’d want to tackle on my own… but I wanted to get some ideas out there and see if there was an interest at all. I think there is some as I’ve seen some applications try to make sense of lifestreaming, but they seemed more focused on a social aspect or otherwise had a different goal in mind.

Personal Knowledge Management

March 10th, 2009

So.. I’ve toyed with the idea of Getting Things Done… I like it, and have implemented parts of it.. but have yet to do the initial process fully… And I believe the resistance comes in from a lack of tools that I trust. Most people scribble out notes or print out things to read and work though those in a physical nature, but I’d much rather do away with physical copies of things and leverage technology to ease my access and ordering of all my “stuff”.

Currently, I use Remember The Milk heavily to record tasks… especially for reminders for repeating things or that have a far off deadline. A filing cabinet for things I can file (like credit card statements or tax stuff, for example), and I’ve also adopted a “Inbox zero” philosophy… well, at least zero unread… Although, lately I’ve been leaving things in my inbox if I’m expecting a followup, but I should probably just label and archive them. I’m in the process of moving my domain to gmail and haven’t finalized my email processes. With my G1, calendar and contacts are covered in a very sane way that works well for me.

Now, What I’ve found is that my Someday/Maybe list is cluttering up my Remember The Milk lists, and I think I’d like to have my task lists limited to my next actions and recurring tasks. I have things like movies and TV shows I want to see in there, as well large projects that I’d like to do soon, but need to find time for. Also, organization and structure is somewhat limited, even though tags and the search engine is powerful.

The biggest problem is a lack of an effective brain dump/mind mapping tool, and a way to collect digital resources… For that, I’m thinking a wiki would work very well for being able to quickly collect content and also organize things in a flexible way. I’ve found many references to people using a wiki to store all their data, including a diary/blog (I prefer wordpress), calendar and contacts (google), task list (RTM). However, i like the idea of incubating blog posts and doing project management there as well in the wiki and it would be nice if there would be some integration with the existing tools.

Also, it would be nice if there was a way to allow others to use portions of the wiki for collaboration on some projects, which kinda rules out mediawiki since that’s more of an all or nothing sort of thing when it comes to restricting areas. Things I deem private should stay private. Plus, wiki’s have that whole access anywhere the internet is which is a good thing!

So, if you were to use a wiki for organizing all your digital reference area… which would you choose? Bonus points if it already has integration with the tools that I like to use already. I may investigate Google Sites, just because its quick and easy and seems to be able to access your google calendar as well as the Remember the Milk Gadget. I’d torn between a hosted solution like Google Sites, or a self run solution like mediawiki… pros and cons to both of them…

I’m happy to take some input from anyone who’s tried this, or perhaps has some thoughts!

One Laptop Per Child Disaster?

March 5th, 2009

I recently came across an interesting book,
The Future of the Internet–And How to Stop It. (Yes, you can buy the book from Amazon, but the entire book is under a CC liscense and is available for download at the books website). It provides an interesting retrospective of how the Internet got to where it is, and what may happen to it in the future.

What’s really interesting is the point made in this really well written review:

In passing, I love the brutal critique by Gene Spaford of the $100 laptop. He likens its projected impact–exposing millions to the bright side while not fixing their poverty, water, and disease–to subsidizing pet rats for every household just prior to the Black Death plague. My friend Lee Felsenstein is an equally virulent opponent of the $100 laptop, for different reasons. Me personally, I think the cell phone (but not the iPhone) is the only way to educate 5 billion people fast and with day to day relevance to their needs.

Wow… I never really thought about it, but I think its completely accurate! The One Laptop Per Child initiative has a noble goal of providing inexpensive laptops to poor children around the world as well as ensuring internet connectivity. I can’t argue with the educational aspects of the projects and it certainly would provide much more opportunity to many that the world has ignored for far too long.

However, its always been presumed that those opportunities are strictly positive. They may be overwhelmingly positive, but I’ve never considered the negative effects, nor the things it will have little to no effect on.

The Internet is NOT a safe place. This is obvious but most people forget this. Also, when most people think of the dangers of the internet, they think of either an Internet stalker or identity theft, typically an unrealistic fear of intercepted e-commerce transactions. However, there are far more dangers that are often ignored both by those that are new to the internet (who typically aren’t aware of the dangers and are overly trusting) as well as by those that are quite experienced and are aware of at least some of the dangers (ie, they know what a Trojan is, and why they shouldn’t blindly run untrusted programs).

Whatever platform gets widely deployed will quickly endure a trial-by-fire in which it’s security is tested, for if there are any security holes which allow the laptop to be exploited to send spam or access their personal information, which is a time bomb waiting to happen. As much as I support open software, I’ll be the first to admit that it isn’t perfect and can be exploited. Microsoft certainly has a large target (and with saner software it might not be so easier to exploit), as will any other widely adopted software. As Zittrain says, “People rob banks because that’s where the money is”.

Does this mean that these projects should grind to a halt? Certainly not! However, I hope someone over there has thought long and hard about the security and privacy side of things. It isn’t listed in the Criticism section in OLPC’s Wikipedia page, but that either means it has been addressed sufficiently or it hasn’t yet occured to anyone to make any noise about it yet.

The other completly ignored aspect is how providing internet access won’t do a thing to help with other more important things. Sure, there’s a wealth of information available on the internet, and the education is valuable, but without clean water, medical supplies and political freedom to act on their new information, there really isn’t much one can do, other then realize just how bad they have it in comparison to the rest of the world.

Certainly some thing to think about.

Yet another example of why Microsoft sucks!

February 26th, 2009

Wow… I wasted many hours today due to Microsoft and general stupidity…

Here’s the situation.. we have a legacy Classic ASP site that we are moving to more scalable and stable environment… Since we want to have multiple web servers handling the load during peak hours (it runs just fine on one right now) and be able to perform new releases along with testing during off peak times while the website continues to run on one server. This also means that we can easily throw more webservers into the mix should that be necessary later.

The easy (and open-source and free) solution is to use Apache as a reverse proxy.  This also allows for some other neat tricks (mod_security, mod_deflate) without having to deal with Windows and IIS configuration.. or make any code changes for that matter.

The problem comes in with how Classic ASP deals with cookies. Deep in the bowels of ASP, Microsoft was benevolent enough to add in HTML encoding of your cookie’s name and value. This actually isn’t a horrible thing as it prevents some poorly written code from creating an exploitable bug (HTTP Header injection), but its a bit overzealous and there’s no way to alter its behavior. You’re simply stuck with it.

Of course, if you’re happily writing ASP code, it gets encoded and decoded for you so you never even know its going on.

ASP Code to set a cookie:

Response.Cookies(”SERVERID”) = “balancer.www2″

ASP Code to display that cookie:

Response.Write “Cookie: ” & Request.Cookies(”SERVERID”)

Outputs:

SERVERID: balancer.www2

The problem lies in what is actually being sent by IIS:

Set-Cookie: SERVERID=balancer%2Ewww2; path=/

%2E is simply an HTML Encoded period. I’ve never known a period within a string to cause a security issue… but it gets encoded anyway. Apache’s mod_proxy_balancer looks at that cookie and expects to find a period within it, using the part after the period to determine which server that person should get sent back to.

I spent a large part of the day thinking the issue was an Apache configuration issue, as even with debug logging on, it wasn’t outputing anything. Once I looked through the code for mod_proxy_balancer, i saw that it ignores the cookie unless there’s a period in the string, and clearly there wasn’t one in my string.

After spending about 5 minutes trying to find a way to disable or change that behavior within ASP (there isn’t any as far as I can tell), I quickly found a solution within Apache!

Since Apache 2.2.4, the mod_headers module provides a method to edit a header using a regular expression. I was already using mod_headers to pass along some values through Apache (like the external IP address, or if the request was over HTTPS), so simply adding one line to the Apache configuration file fixed the issue:

Header edit Set-Cookie balancer%2Ewww balancer.www

Now, apache watches the response headers for when we are setting a cookie,  and if it contains “balancer%2Ewww” it gets rewritten as “balancer.www” and sure enough both Apache and IIS are perfectly happy with the cookie and everything is working well.

If I didn’t have access to the source code, it would have taken me weeks of trial and error to determine what the issue was or it would have been given up on for simply being incompatible. If apache wasn’t as flexible as it is, i would have been stuck writing a patch to mod_proxy_balancer and recompiling my own apache rather then relying on the distro’s packages for updates.

This is exactly where the closed source commercial software (Microsoft) and, to a much lessor-extent, the walled-garden open-source approach (like Django) run into issues. As long as you are only using that vendor’s software in the way that the vendor envisioned you would be using it, you’re just fine. Its also why standards are a good thing.

Yet another example of why Mark Ramm was right when he wrote and talked about WSGI being the right way to write tools that properly interact with one another. I’m really convinced now that the TurboGears/Pylons approach is the proper way to build web applications.

Hello world!

February 15th, 2009

Finally ditched a website that was sitting here at rkware.com since about 2000… and hasn’t been deleted at all… I had a previous blog that was abandoned about 4-5 years ago as it became too much of a pain to update and was overridden with spam…

My plan for what’s going to be here is more or less a log of what I’ve been working on… A warning though… I’m interested in LOTS of different things so this blog will probably be all over the place… programming stuff one day… running stuff another day… something about concerts another day.. along with some random rants about politics or technology as well as about 10-15 other random topics as well…

Hopefully there’s something here that will interest you!