I had the day off from work today and decided to catch up on some of the TV shows recorded on my DVR. There was a new Nova episode called What Darwin Never Knew that was 2 hours long, but it really did a good job at covering Darwin’s theory of evolution as well as the advances that have been made in the last 150 years from analyzing DNA, genes, and “switches” (I believe this refers to the Epigenome). Anyone interested in science, genetics, or nature should really enjoy this episode. I also couldn’t help but make correlations with many computer science topics (flow control statements for one) and was tickled pink when the final segment talked about using computers to statistically determine what makes humans different from other species. I highly recommend watching the full video online here:
Thursday, December 31, 2009
Tuesday, October 27, 2009
Joel Spolsky wrote a piece today about Capstone projects and time management for Computer Science students and the new UCOSP program to help get undergraduates more involved in open source projects. While I completely agree with the inefficiency of long term deadlines and the UCOSP program sounds great, I feel like I need to write a bit to defend my recently acquired bachelors degree from a top 50 ranked university. About 18 months ago I graduated from the University of Utah with a degree in Computer Engineering (CE), which is basically a combination of Computer Science (CS) and Electrical Engineering (EE). It took 6 years to complete (also worked part time), and during that time I was exposed to many different programming languages (Scheme, Java, C, C++, C#, SQL) and a diverse array of subjects ranging from Survey of Jazz and the History Rock and Roll to Discrete Mathematics and, yes, Linear Algebra. While not all of the coursework was directly related to real-world work conditions I firmly believe that the mix of theory and practice made me well prepared to work in software development anywhere from embedded systems to “cloud computing”.
While other universities may not emphasize team programming, many of the CS faculty at the University of Utah tried to simulate real-world situations as often as possible. The Team Software Engineering class that I took from Robert Kessler in spring 2006 was my first experience solving a non-trivial problem using Visual Studio 2005 and Team Foundation Server. In that class teams used source control and project tracking to design and create a location aware communication library for PDAs, laptops and desktops using WiFi and IP network rule-based location detection. I also learned a lot about MSDN, web services, the software development process, and systems integration, and it was probably one of my favorite classes. The courses have changed a lot since I took them, but it is my understanding that the concept of building software in teams using real tools is still very much a part of getting a CS or CE degree at the University of Utah.
When it came time to complete my degree I had the option to do a theses or a personal project, but like most students I ended up doing a team based capstone project in cooperation with industry sponsors instead. CS students take a semester long Software Engineering Laboratory class in which they submit bids for projects sponsored by local companies. For the CE capstone experience students can team up with EE students to be part of the Engineering Clinic Program. Both projects start with a semester long class dedicated to project planning with a faculty advisor and improving professional written and verbal communication skills by working with the CLEAR group from the College of Humanities. The Engineering Clinic then has a team of 4-6 students spend a full 2 semesters working with an industry sponsor to solve a real world problem using real world tools. The project culminates in a 15 minute presentation for each student at the ECE Open house and a team written paper to be submitted to the IEEE student paper contest. The team that I worked with had a Google Code project site and even ended up presenting at the 2008 Flash Memory Conference in Santa Clara, CA.
The CS department also has an Industry Forum class that is “designed to expose students to topics that are not discussed in depth as part of the normal curriculum, but that are likely to be important after they graduate.” Each week they bring in speakers from software development companies or large industry players to help prepare graduates for the real world. They also have the Organick Lecture Series and various Colloquiums that bring in distinguished members of the computer science community. While these classes and events are not part of the normal curriculum, most ambitious students will recognize their value and attend as many as they can.
To summarize, during my 6 years at the U of U I can think of at least 4 significant team based projects that helped introduce me to standard software development techniques such as system design, source control, project management, team collaboration, and end user documentation. Some classes such as team software engineering or database systems provided the infrastructure for students to use (IE.. TFS, SVN, Oracle, Wiki, File server, Virtual Machines, etc) but others took a DIY approach and let students choose which technologies they wanted to use. I gravitated towards DotNetNuke, SVN, and Google Code, but I would have jumped at the chance to use hosted products like FogBugz if cost and implementation were not prohibitive. Also there was a very large emphasis placed on written and verbal communication skills, for which I will be eternally grateful! The more time and energy that you put into the education, the more you are likely to get out of it, but at the University of Utah there is ample opportunity to get a world class Computer Science education.
Monday, October 5, 2009
Earlier this year I created a Monte Carlo Texas Holdem Simulator using an IronPython powered spreadsheet in Resolver One. The main goals were to learn IronPython, test how well it worked for creating complex spreadsheets, and enter a few of those spreadsheets into the Resolver One competition. Well I can honestly say that I exceeded even my own expectations on all three accounts, and it didn’t stop there either. After learning IronPython I started using it for the occasional random “Hey could you ...” tasks that get assigned to me at work, and I found a few other interesting uses for Resolver One as well.
I also found that I really like coding contests! After the Resolver One competition ended, I came across another .NET coding contest sponsored by the International .NET Association (INETA) that was trying to promote reusable components from various vendors. I submitted Windows Form and Windows Mobile versions of the Texas Holdem hand evaluator, along with a short video clearly showing why my younger brother is a professional radio DJ and I am not :-P I didn’t have enough time to get everything that I wanted to into the new versions, but it was still enough to get an honorable mention and score a few free licenses for .NET components from the sponsors.
Shortly after the INETA contest, I found a Silverlight contest sponsored by Telerik. Since I learned IronPython in the Resolver One contest I figured that this was a great excuse to spend a week or two learning Silverlight, WPF, and XAML. While I didn’t end up winning the contest, I did get a license for their Silverlight controls and was able to create a pretty cool Silverlight 3.0 Texas Holdem Monte Carlo simulator that runs entirely in the browser. I also organized all the source code and various versions of the application into one website for all your Poker needs.
I have had a few people ask about how to modify the poker spreadsheet for different purposes, such as analyzing the outcome for specific hand groups or being able to include multiple hands in the player’s pocket card set. The original spreadsheet was designed to show the hands in a specific layout so it is not very easy to customize. Instead I made a new spreadsheet that uses a standard column layout and lets you enter hands using the Hand Query language that is integrated into the C# HandEvaluator library. This new spreadsheet lets you customize the opponent hands and allows you to define multiple hands for the player (ie: What would my odds be if I had AK offsuit or AQ offsuit?). It also lets you specify the number of trials to run for each Monte Carlo simulation and is smart enough to enumerate the cards if you specify more trials than it would take to go through all possible board cards.
If you want to try out the new poker spreadsheet you can download it from the Resolver Exchange. The free player license for Resolver One will let you open and run the spreadsheet, but you will need a commercial license or research license if you want to make any changes to the code. I would like to add multi-threading and a hand win type breakdown table, but there is another coding contest deadline coming up, so I have to work on another project for a little while :-P
Wednesday, September 23, 2009
High altitude balloons have been used to perform experiments and collect data from the earth's stratosphere for over 200 years now, but recently with the availability of cheap consumer electronics some universities and amateur radio groups have started using them to take pictures or videos at "near space" altitudes. For about $150 you can assemble a balloon, prepaid cell phone with GPS, and a used camera to take some pretty cool pictures from pretty high up. If you want better tracking and the ability to shoot video you can spend a bit more to get some truly amazing pictures and awesome videos, not to mention gobs of data that would make even the Mythbusters jealous.
Some balloon projects use multiple cameras so that they can take pictures both downwards towards the ground and sideways to see the curvature of the earth. Last month the Balloon Experiments with Amateur Radio group launched their BEAR-4 balloon with an Hi-Def camera. They got over 4 hours worth of wicked cool video, even though the camera was spinning like a top over Canada half the time. Check out the highlights:
The only thing cooler than seeing one of these things rise and then drop from the sky would be to see the Entry, Descent and Landing of a rover on Mars :-P
Wednesday, September 9, 2009
Tuesday, September 1, 2009
Life, liberty, and the pursuit of happiness are just a few of our "inalienable rights”, but if you are anything like me then you probably focus the majority of your time on pursuing happiness while letting your elected officials manage your liberties and your subconsciousness manage keeping you alive. If you are an entrepreneur or master of marketing then you might have come to realize that the success of your product may be directly related to the happiness that it subconsciously brings to your users. No matter how far we have evolved, we are still but simple creatures.
Today Joel Spolsky released a video of his talk at the 2008 Business of Software conference, in which he discusses what it takes to become a market leader. He recognizes that it takes more than simple technical superiority to become number one, which is an issue that has baffled me many times. I personally dislike the iPhone, but I do have to admit that Apple does a very good job at paying attention to all the little details that make the overall use of a device more appealing to their users (thereby Apple-ing the user :-P). By spending extra time on the aethstetics and appearance of a device and building an aura “coolness” that the community associates with them Apple is able to consistently deliver products that become market leaders even if there are other devices with more power for less price. The video of the talk is about 46 minutes and is a great example of how to keep people interested during a long presentation:
The 2009 Business of Software conference is coming up on November 9th and I really wish that I could go if only to see Don Norman’s talk. He wrote The Design of Everyday Things, which is an excellent book about the functional and visual importance of design that I would highly recommend to anyone designing a building, writing software, or trying to create the next cool gizmo. Reading a book that was written in 1988 but still very applicable in the age of Web 2.0 gave me a new respect for the design process. He also has other books on the topic of design, and I would love to hear his advice applied directly to the design of software.
Friday, August 21, 2009
I've been pretty non-productive at work these last two days and have spent most of my time cleaning, day dreaming, playing with a new phone, setting up mouse traps, or getting lost in the interwebs. This tends to happen every once in a while, where I just can't seem to concentrate or get anything done (polar opposite from the 12-24 hour cram sessions). Usually after a day or two it goes away, or I start feeling depressed about not getting anything done and start working again (laziness can cause depression for a work-a-holic). My hope is that a round of golf, a good bike ride, and some quality time with friends/family this weekend will cure me, otherwise I might need some help to get me focused.
I wouldn't say that these last few days were a complete waste though, as I do now have a wicked new phone all customized, and I am sure that mouse in the office will have packed his bags and left come Monday morning. I also read up on the Google-Apple-AT&T issue regarding the rejection of the Google Voice app from the iPhone app store. The FCC thought that AT&T, exclusive licensed provider of the iPhone in the US market, may have had a bit of a hand in the decision, but now that all the details are out it sounds like Apple acted alone and that the application hasn't officially been rejected yet. This kind of reminds me of the post mortem datacenter reports and reading through each company's filings with the FCC is quite fascinating.
Or if that doesn't float your boat, check out this video of an Astronaut playing around with water, air bubbles, and Alka-Seltzer in space. Either way you are bound to learn something new!
Friday, August 14, 2009
The company that I work for has been a Vonage customer for almost 2 years now (ALMOST!), and while we never had any complaints with the service, it really isn't designed very well for a growing small business like ours. I would still probably recommend it for personal VOIP or single phone line (their ATA adapter with built in Caller ID is top notch and the website is pretty easy to use), but if you want more business features I would recommend looking at www.RingCentral.com instead. They offer features such as an Auto-Attendant (i.e.... press 1 for Sales or 2 for Support...), an optional PC based call controller for answering/forwarding calls, hold music, extensions on toll free or local lines, custom ring schedules (business hours, after hours, Morning/Afternoon shifts), Company Directory, and a lot more advanced options regarding how, when, and where each phone line and extension rings.
So if you are looking to setup a new phone system for a small business, save yourself some time and money and go with RingCentral from the get go. We started with two Vonage lines, expanded to three, and then finally decided to switched over to RingCentral when we got our fourth line. It then took almost 3 weeks and 3 phone calls to port the numbers over from Vonage to Ring Central (Vonage had to manually remove the numbers from their database...) and it cost us $160 to cancel the Vonage account because we hadn't quite reached the end of our 2 year contract yet.
For more info on how RingCentral works check out this video:
Next up: Getting my RingCentral extension to work with Google Voice :-P
Wednesday, August 5, 2009
The 2009 SIGGRAPH conference is going on this week in New Orleans and there are a lot of cool audio-visual and input technologies being demonstrated. The most interesting ones to me are still very early on in their research stage, but they do give a gimps at the type of human-computer interactions that we might see become more common over the next decade or so. The MIT Technology Review has covered 5 interesting user interfaces and displays being shown this year at SIGGRAPH. My favorite is the Hyper-Realistic Virtual Reality system called Virtualization Gate. Check it out:
It uses cameras and a green screen to create an immersive 3d environment that a user can interact with. The technology is still very much in its infancy and requires a lot of computer power to make the whole thing work, but the same thing was true for facial recognition, full body gestures, and motion capture, which will soon make their way into the XBOX using a simple webcam codenamed Project Natal. God bless Moore's law!
Friday, July 17, 2009
I love stop animation videos. If you haven't ever seen a stop animation video before, there are plenty of great examples on YouTube. Stop motion has been around for a while, and it is basically a digital version of the flip books that we use to make as kids. A new variant is the photo stop motion video, which uses 3x5 prints laid out in an expansive workspace to give a timeline of the story. I first saw this technique in a great video by Takeuchi Taijin posted on a friend's shared feed in Google Reader. The video is called "A Wolf Loves Pork", Check it out:
This is a cool new twist to stop motion videos, and one that the Olympus camera maker thought would make a great marketing video. Both are good videos, but I still like the wolf story better.
Monday, July 6, 2009
In the past week there have been a handful of significant issues at a few large datacenters, including an 11 hour outage at Authorize.NET that left thousands of websites unable to process credit card transactions. The company that I work for narrowly missed the 45 minute outage at Rackspace, but it looks like Justin Timberlake wasn’t quite so lucky:
Since it is my job to make sure that the servers that run our software stay online as much as possible, I enjoy reading about problems with hosting providers and making sure that I would know what to do to if/when it happens to us. The new cloud services offered by Amazon, Google, and Microsoft aim to give everyone the scale-ability and reliability that use to only be available to large companies with thousands of servers, But these new computing services are still in their infancy and have had more than their fair share of down time recently as well.
I very much enjoyed reading Dyn Inc’s analysis of the Authorized.Net outage, as it gave a good mix of the gory details of the failure and the best practice techniques that could be used to prevent or mitigate this type of extended outage from occurring. Usually you have to learn these kinds of things first hand, having gotten burned by it once and swearing to never let it happen again. Instead I prefer to try and learn from other people’s mistakes, as you usually spend much less time in the hospital that way!
Sunday, June 14, 2009
Tonight the Los Angeles Lakers beat the Orlando Magic 99 to 86 to win the 2009 NBA Finals. I am not a huge Lakers fan, but I do enjoy watching a good basketball game and did manage to catch the first and last games of the series. While the games were good I was a bit distracted because both games that I watched had pretty poor picture quality and the majority of the wide-angle shots were really bad for a major sporting event. Not at all what I had expected in today’s High Definition standards.
The first game I watched was on a projector at a sports bar, and I had just figured that there was an issue with the projector, but the same thing happened tonight while watching at home on my new computer. After upgrading and purchasing a new antenna I have been able to receive all of the local HD broadcast channels (also called Over The Air or OTA) in full digital HD format. I prefer watching recorded TV from a DVR so that I don’t have to watch commercials, but for sports I will usually switch to the OTA HD signal and watch it live. In tonight’s game though I noticed that while the Cadillac commercials and commentary shots were sharp, a lot of the actual game was pretty blurry and hard to follow.
It sounds like other people have noticed this too, and it appears to be an issue with how ABC broadcasts the event to TV stations and cable providers. While their other shows look great, the sporting events that involve a lot of fast motion do not end up looking very good. My guess is that they try and compress the signal too much, because if you combine a low bit rate signal with a lot of fast movement and flash photography you are bound to get poor picture quality. Luckily the original recording is kept at a higher quality, so all of the highlights and re-broadcasts appear much better than the live event.
The funny thing was that even the overlay graphics like the scoreboard would appear blurry at times. Check out this 10 second video of the scoreboard that I made, where you can see the whole thing (including the ABC logo) goes blurry and then takes a few seconds to recover. Gets pretty annoying when this happens throughout the entire game. If this had happened during the commercials you can guarantee the sponsors would be asking for their money back!
Tuesday, June 9, 2009
Google recently launched the Translator Toolkit, which helps users translate and edit documents or web pages from one language to another. This is industrial scale crowd sourcing and machine learning at it's finest and is a rare win-win-win situation:
- Users get tools that help make their job easier. With a few click a document gets processed and translated automatically. The user then has to proofread, edit, and publish the results, but they get access to tools like dictionaries, glossaries, and previous translations that may be related.
- Partner websites like Wikipedia and Knol will get better translations for articles because they are edited and approved by humans.
- Google gets to train it's translation algorithms using data from the human edits to improve it's accuracy. I took a basic natural language processing class a few years back, and getting access to mistakes and their correlated corrections is invaluable for refining and improving these types of algorithms.
If you are interested check out http://translate.google.com/toolkit or just watch the video:
Monday, June 1, 2009
About 5 days ago Google previewed their new Wave communication service at the Google I/O conference, and already the web is abuzz about it. A search for "Google Wave" returns over 33 million results, and there are over 30 tweets for "Google Wave" posted in the last 5 minutes (and another 20 while I wrote this sentence). Needless to say this is one of the biggest product announcements to come from Google in the last few years and has completely outshined Microsoft's announcement of rebranding their search engine from Live to bing. While Microsoft tries to gain ground in online search, Google has been planning ways to change how people communicate and collaborate online.
Google Wave is set to be released later this year and will combine features commonly found in IM, Email, Forums, Social Websites, and Wikis to create a unified communication platform designed for the modern web. It is based on HTML 5, which means it will run in a web browser but should feel a bit more like a desktop app in terms of response and the way a user interacts with the service. It also has some cool features like real time updates from multiple users, conversation playback, and advanced spellchecking using natural language processing.
The product is currently in a closed beta stage that is only open to developers that want to build applications or extensions on top of the Wave platform and protocol. The Google team thinks that one of the big drivers for success of email over the last 25 years has been that it was built using an open protocol that anyone could implement. The Wave protocol was designed to mimic the same type of system where servers from different providers can interoperate with each other using an open source federation protocol. Google has a vision for how to improve online communication, but they also are aware that to succeed they need to share with all the other kids in the neighborhood.
It is way to early to separate the hype from reality, but if Google's track record is any indication then this has a lot of potential to have a large impact one way or another. I use Gmail, Google Docs, and Google Calendar on a regular basis nowadays, and it is hard for me to envision working without those type tools without taking a large drop in productivity. Also the Google Wave team is lead by the same two guys that created Google Maps, so they have a lot of experience in creating these types of highly interactive applications.
If you want more information you can watch this 80 minute presentation demonstrating Google Wave or go to http://wave.google.com to sign-up to be notified when it is publically available. I guarantee that you will hear more about this in the future, as it truly does show potential for a new way to communicate online.
Friday, May 8, 2009
I have a lot of computers in my life, and usually end up working with anywhere from 2 to 10 different machines a day. At home there are 2 computers: an main workstation that serves as a media center and a laptop in the bedroom for when I have to answer the red telephone at 6am. I recently added a Hauppauge WINTV HVR 1600 digital TV tuner card into the media center computer, which combined with GBPVR provides TiVo like features, commercial skipping using Comskip, and the ability to watch live TV. The card has both an analog and a digital tuner, but the computer was too slow to keep up with the high definition format, so I was stuck with basic analog cable channels. Even with analog TV the AMD Athlon XP 2000+ processor could barely keep up.
Since the media center computer was about 6 years old, I decided that it was time to do a complete upgrade. This will be the 7th computer and will be replacing a computer named GB1, so it only makes sense to call it GB7. When purchasing the components from Newegg, I decided that the platform should last at least another 6 years, which meant buying the latest and greatest. I am a big fan of the Intel Core 2 and Core 2 Duo line of processors, but the most recent release from Intel is the Core i7 processor line, which costs a lot more but should be in active development for at least the next 5 years.
The Core i7 line is currently based on a quad core design with hyper threading, which allows for 8 logical threads to be processed on every clock cycle. The CPU also includes a new bus architecture and an integrated 3 channel DDR3 memory controller, which gives it a screaming 25.6 GB/sec throughput bandwidth. The speed comes at a high price tag though, as a 2.66Ghz CPU, a Asus P6T motherboard, and 6GB of ram cost around $630. Throw in an PCI Express 16x video card, a full tower case, and two 250GB SATA drives, and the build costs just under $900 without a monitor or any peripherals.
Since the new machine is suppose to last for a while, I decided to try and use the new Windows 7 as the operating system. Windows 7 is supposedly going to be released later this year, but Microsoft just opened up the Window 7 Release Candidate for public consumption. This means that you can download and install Windows 7 and use it for free until March 2010, at which point the computer will start rebooting every 2 hours. I figure that 10 months is more than enough time to decide if it is worth purchasing a license or not, so I might as well give it a go.
I got all the parts yesterday and, having built 10-20 machines a day when working for a computer wholesaler, I was able to finish the build during my lunch hour. It helps when the motherboard has everything built right in, but also a lot of the old headaches with installing CPU fans and hard drives are much easier now days. It was interesting that just about every single interface has been upgraded since my last build: ATA to SATA, PCI to PCI-Express, DDR to DDR2 to DDR3, 2 channel audio to 8 channel audio now with digital and optical outputs. These were not very popular the last time that I built a machine, which makes me wonder what each of the interfaces will look like 5 years from now.
Sadly some of the old headaches are still there. I spend a few hours trying to get the Windows installation disk to recognize the SATA drives that I had setup in a RAID 1 array. In the old days you had to put the controller drivers on a floppy disk and press F6 to load them into the setup program. Now the setup will prompt you for drivers if no hard drives are found and can load them from a USB flash drive, but the board has 2 SATA controllers and the DVD comes with 4-6 versions of each, so it took a lot of fiddling with cables and drivers before I finally found one that worked. If anyone else is interested, here are instructions for setting up Windows 7 64 Bit on an ASUS P6T Motherboard using an Intel IHC10R RAID array.
I finally got Windows 7 loaded around 11PM last night, but I haven't had much time to play around with it yet. The next steps will be to install the tuner card and start reloading all of the programs that I use, but that will have to wait for the weekend. I have however been very impressed with how quiet the machine runs. There are a total of 4 fans (2 case, 1 power supply, and 1 for the CPU) and all of them are larger than 80mm, which give them great air flow at a whisper quiet speed. I also opted for a video card with a passive cooling design, since the lack of a fan keeps the noise down and is one less moving part that might break. Hopefully that means the system will be running strong for a long time.
Monday, May 4, 2009
Like many people, I spend a lot of time online. According to Rescuetime.com, I have averaged over 6 hours a day online, just a work. Add another 4-6 hours a day surfing at home, and my life is pretty well intertwined with the World Wide Web. I would consider myself smarter than the average bear when it comes to "safe-surfing" online, but even so I have on occasion found myself removing spyware or malware from my computer. These programs live on the Internet, so pretty much anyone that spends any significant amount of time online will run into them eventually.
With that in mind, it is very interesting to read about a team of researchers from the University of California, Santa Barbara that took over and analyzed the Torpig botnet for a period of 10 days. During the takeover they analyzed the data being sent to the control servers and made some very interesting observations. A full report of their findings is available here, and it is a fascinating read for anybody interested in the activities of online criminals. Once a machine was infected, the control servers started receiving usernames and passwords for email accounts and banking websites, as well as all other HTML form data such as webmail and posts on forums or social websites. Over the course of 10 days the researchers collected over 70 GB of total raw data from over 180,000 infected computers.
One of the interesting finding was how much personal information they were able to find out about by combining the online identities sent from individual machines. "For example, Torpig records a user logging into his LinkedIn account. His profile presents him as the CEO of a tech company with a large number of professional contacts. Torpig also records the same user logging into three sexually explicit web sites." Most people think that their identity is private when surfing online, but if your machine gets infected with a virus or Trojan, all privacy goes out the window.
In their conclusions they state that while better relations between security researchers and domain registrars could help solve some of the problems, the issue is fundamentally a cultural problem, since many people use the same weak password for all of their online activities. Also, there needs to be better education about how to be safe online. "Even though people are educated and understand well concepts such as the physical security and the necessary maintenance of a car, they do not understand the consequences of irresponsible behavior when using a computer." Of course, some of the criminals are getting pretty good at creating exploits that look legitimate. For instance, Torpig can be used to inject HTML forms into real banking webpages to create very legitimate looking exploits like the one shown here:
I come across these type of stories every once in a while, and they remind me to do simple things like periodically change the password to my email account and high security websites. This is something that everybody should do at least once a year, if not more frequent than that. When combined with a firewall, decent antivirus software, and safe browsing habits, changing your password periodically should help keep you from becoming a victim online.
Friday, May 1, 2009
Spreadsheet programs were one of the first killer applications for the personal computer, as they allowed users to quickly calculate a large number of values using a simple and easy to use grid system. In 1979 VisiCorp released VisiCalc for the Apple II, and while this was way before my time, I have heard it revered as one of the major turning points into the era of computers being used for day to day business use. Since 1979 few changes have been made to the spreadsheet paradigm. Lotus created the Pivot Table in 1991 (Pivot charts and graphs came later), which greatly helped in creating interactive tables and graphs for analyzing data. Many mathematical and statistical functions are available in modern spreadsheet applications, but most of them rely on old and outdated scripting languages that can be a hindrance when analyzing complex data.
Resolver One is a new program that aims to make things easier by building the spreadsheet using the IronPython 2.0 scripting language. IronPython is an implementation of the Python scripting language built on top of the Microsoft .NET CLR and DLR runtimes, which means that it is able to easily interact with code from C# and other .NET languages and can make use of any existing .NET library or assembly. It also can perform complex operations such as web service calls, interact with external files or databases, and make use of the Ironclad NumPy library for complex data manipulation. Since it is based on the .NET framework you can embed custom IronPython or .NET objects into the cells instead of just storing numbers, dates and text. This can be very helpful as it allows you to apply Object Orientated Programming techniques to create powerful and easy to maintain spreadsheet.
I first came across Resolver One last year when Larry O'Brien mentioned the $25,000 Resolver One Challenge in one of his posts. I don't use spreadsheets much in my day to day work, as most of the work that I do is with databases. I do however enjoy playing poker, and the opportunity to learn IronPython, play with Resolver One, and possibly win some money was too good to pass up. Initially things got off to a bit of a rough start, as dynamic python is a vastly different programming model to the static .NET that I am use to using. Also IDE support for IronPython in Resolver One is pretty basic, and there isn't a lot of advanced features in external IDEs either. However after a week or two of prototyping I had enough knowledge to put together a basic spreadsheet for evaluating Texas Holdem poker hands. The spreadsheet uses a .NET library that treats each hand as a 52 bit binary mask and allows you to quickly score and rank hands accordingly. Using this library in Resolver One was as simple as adding an import statement, and by creating a custom GridHand object I was able to group the 1,326 unique starting hands into 169 distinct groups displayed in a grid. The spreadsheet could then use colors and cell comments to highlight which hand would be able to beat your pocket cards and give a full listing of win/tie/loss statistics in a matter of seconds.
When I first submitted it to the competition, the spreadsheet required a full 7 card hand (2 player pocket cards, and 5 on the board) to display the win percentages. Pre-calculated Preflop odds were also displayed before the hand was dealt, but other than that the features were quite basic. For the second submission, I altered the spreadsheet to use a Monte Carlo algorithm to allow predicting the win percentages on the Flop and Turn after running a few hundred trials on each group. On slower machines this might take up to 10 seconds to complete, but on a modern dual core machine it would only take a second or two to recalculate the spreadsheet. I now thought that this was the most amazing spreadsheet ever created, but sadly it did not win the competition. In my rush to win glory and fame I had neglected to pay any attention to the UI design or add any documentation about how to use the spreadsheet. It turns out I wasn't the only one.
At first I was a bit distraught, but after taking a step back it was clear to see that there was still work that needed to be done before it was a respectable spreadsheet. I was happy with how the spreadsheet worked, so I turned focus to creating a better User Interface and adding a built in help system. Since Resolver One is built on the .NET framework, you can add things like windows forms and controls. After a bit of fiddling with this project I was able to create a basic multi-tab embedded browser that would appear when clicking a Help button on the sheet. The browser ran in it's own thread, and you could program which pages would appear in each tab. This allowed creating HTML based help files that could be posted online or embedded directly into the spreadsheet. I also attempted to create a full tutorial system where clicking a button on a help page would perform an action on the spreadsheet (change value, highlight cell, etc), but I ran into some problems with changing the spreadsheet from a separate thread and was not able to finish this feature. I submitted the new Texas Holdem Monte Carlo Simulator spreadsheet to the competition with documentation, and was very happy with the results!
Overall I have to say that Resolver One is a very innovative program, and while there are still some rough edges I can see a lot of potential for this to be a new killer application for spreadsheets. The basic features are very easy to use, and if you know Python or have a programming background you should be able to code up whatever special functionality you want. It reminds me a lot of when I first started using Powershell, and it is definitely something that I will keep in my arsenal of tools for attacking complex problems.
Wednesday, April 29, 2009
I really admire the way that Google can take a "solved" problem like Web Search or Email, add a little innovation, and end up creating a new use case that changes the entire industry. For instance, the ability to view emails in a threaded "conversation" view may seem simple, but after using Gmail for the last few years I can't imagine using email in any other way. When replacing our corporate email servers at work recently, I pushed towards using Google Apps for Domains primarily to get Gmail style email for my work account. Exchange 2010 will support a conversation view as well, but I don't think I could survive waiting 12 months for that feature (let alone having to support an exchange server).
Google chrome is another case where I think they have raised the bar. It still has a few quirky bugs or will crash when loading a random website, but I have been using it as my primary browser for almost 6 months now, and I'm hooked. I occasionally have to open Internet Explorer to view certain websites (Sharebuilder.com and MSDN.Microsoft.com mostly), and in the amount of time it takes to open a new IE browser session, load the page, and open another tab, I could have completed a 2K online marathon using Google Chrome. Chrome feels fast, has a simple minimalistic user interface, and "Just Works" when you try to move a tab to another monitor or search for something from the address bar. They pay attention to a lot of little details that make the overall browsing experience exceed your expectations. For instance, this is what my day looks like using Chrome:
For more videos check out the Chrome Shorts posted on YouTube. And for heavens sake: Just download it already! It still plays nice with IE or Firefox, and doesn't have to be set as your default browser, but once you start using it, you might never want to go back.
Wednesday, April 15, 2009
For Christmas my brother got me a MX Revolution computer mouse, which is one of Logitech's most expensive mice. I am usually not the kind of person to spend extravagantly on something like a simple computer peripheral, but after 4 month of use I can hands down say that this is the best mouse I have ever used. Sure, it is cordless, rechargeable, has great ergonomics, and uses a high precision laser for "flawless tracking on nearly any surface", but none of those features really justify dropping 100 bones on a new mouse. There are however 3 features that make it a MUST HAVE for anyone that spends 8 hours a day in front of a computer screen waiting for retinal cancer to set in. Those three things are:
1. Free-spin scroll wheel
The MX Revolution has a scroll wheel that works in two modes: Free-Spin or Click-to-Click. Click-to-Click mimics the standard scroll wheel that you are use to, where the wheel has a lot of resistance and clicks as you scroll down the page. This works great for documents and PDFs with page breaks in them, but when scrolling on a long webpage this actually really slows you down. How often have you had to scroll a dozen times just to get to the bottom of a page? With the Free-Spin mode this is not a problem. The wheel glides effortlessly up or down, and with one quick flick you can get to the top or bottom of a page. It actually feels really cool too and makes a flywheel sound that can offer a bit of therapeutic stress release in the process.
2. SetPoint software
Usually I am not a huge fan of memory resident programs, which are those annoying little pieces of software that end up living in the system tray next to your clock. Having worked at computer help desks for many years, I can tell you that a large percentage of "My computer is running very slow" problems are simply due to there being way too many programs running in the background trying to help you search the Internet, check the weather, or Ding you whenever a great airline fare is available. The majority of the time these programs are simply not needed, so I was a bit apprehensive when I found out that my new pimped out mouse came with a configuration program that was always running. Turns out that while the program does eat about 20MB worth of memory, it is very useful for setting up the scroll wheel and customizing the functions for each button. It will let you customize the setting for different programs, so you can have it do one thing for Word, another for Excel, and another when browsing web pages. I have it setup right now to always be in free-spin mode unless I open Adobe Acrobat or Adobe Reader, at which point the mouse will jump into Click-to-Click mode to give finer control over scrolling through the pages.
3. Lions and Tigers and Buttons... oh my!
By my count there are 5 standard buttons on this mouse, 3 movable directions on the scroll wheel (click, sweep left, sweep right), plus a 3 function jog dial where the thumb rests. This gives a total of 11 buttons, which may sound like overkill, but I have managed to find a use for each and every one of them and wouldn't want to give any of them up. These shortcuts save me from having to switch back and forth between the keyboard and mouse or having to click on certain places of the screen to do what I want. Below is a list of each button function ordered by my estimated frequency of daily use.
- Left Click - tried and true
- Right Click - where all your context sensitive options live
- Middle Click (Scroll Wheel) - used to force opening links in a new window in IE or Chrome
- Scroll Wheel Sweep Left - programmed to switch tabs in Chrome (move left one tab)
- Scroll Wheel Sweep Right - programmed to switch tabs in Chrome (move right one tab)
- Jog Dial Back - programmed to go back in Chrome (same as browser back button)
- Jog Dial Forward - programmed to go forward in Chrome (same as browser forward button)
- Jog Dial Click - programmed to close the current tab in Chrome using Ctrl+W. Same shortcut also works to close File Explorer windows.
- Touch to Search button - programmed to re-open the last closed tab in Chrome using Ctrl+Shift+T (I LOVE THIS FEATURE!!!)
- Forward Button - programmed to zoom in on webpage. I also just found out that this doubles as an Ctrl+Click when used with the left mouse button.
- Back Button - programmed to reset zoom on webpage using Ctrl+0. (Faster than zooming out with multiple clicks)
Monday, April 6, 2009
I am a firm believer that for any big system to be successful there needs to be an efficient communication system in place. This is true whether the system is a multi-threaded computer program, a community Home Owners Association, a national or multi-national company, or a government/society. In my option, communication is one of the most difficult components to get right, and the people that do get it right are the ones that are most likely to succeed. If you think about the major advances in technology over the last 10-20 years, a lot of them have to do with mass communication: cell phones, SMS, email, websites, blogs, social networking, and RSS. But even when the technologies are available, it sometimes takes a change in the culture and attitude of a system before effective use of those technologies can shine through.
Today, with all the hype about social media, pretty much everybody is starting to use it. A lot of people still do not know how to use use the tools very well, but I am glad to see that the tools for mass communication have become so cheap and simple that everyone has access to them. It surprises me when I find a large company or organization that has yet to at least make an attempt at interacting in today's online social landscape. But, to put things in perspective, Microsoft's community site for software developers has just celebrated their 5th birthday with a few interviews looking back at the history and future of Channel 9. Channel 9 is a a very good example of how a company with over 80,000 employees can create an online community to inform, support, and engage with their customers on a global scale.
I started watching videos from Microsoft back in 2003 by following the .NET Show with Robert Hess, which was a professionally produced show that covered different aspects of the .NET framework. Sadly that show ended in 2007 (probably due to production costs), but it's spirit survives on Channel 9 with Robert Hess and The Knowledge Chamber. The content on Channel 9 usually takes a much more casual approach to relaying information, with a no-spin attitude and direct conversations with key people inside of Microsoft, which is refreshing after watching TV ads or reading corporate press releases that often are void of real information. The videos are usually aimed at a software developer (i.e... über geek) target audience, but they also offer a lot of insight into a what it is like to work at a large technology company like Microsoft.
I wish that more companies would embrace this type of open communication with their customers, as it helps outsiders understand how the company thinks and operates. It also brings a human face to the corporate abyss, showing that there are in fact real people behind the development and support of their products. This has always been the mission of Channel 9, and I applaud them for their hard work and success.
Sunday, March 22, 2009
So I went camping in Goblin Valley this weekend with a few friends and had an awesome time! It was perfect weather, I went mountain biking, and I spent the night out under a clear sky full of stars. I did however come back with a bit of a sun burn because I forgot to bring a hat and sunscreen, which is something that I seem to do every time I go pretty much anywhere. Even after spending an hour or so the night before worrying if I had packed everything I still managed to miss something important, so today when I was unpacking I decided to finally make a list of items to consider taking when camping.
The list is comprehensive but by no means all inclusive. It covers everything that I can remember having packed (or having forgotten) for a camping trip or vacation over the last few years. Also it all fits neatly onto one page divided into 6 categories, namely: Camping Items, Cooking/Eating Items, Food Items, Personal Items, Clothing, and Fun/Games. This makes it easy to skip over sections that are not needed (I have yet to actually bring the Cooking/Eating items when camping, but still have often found things that were missing). The general idea is that from now on I will print off the list when packing and scratch things out after they have been packed or justified for being omitted.
This does not mean that I will never forget something ever again when going camping, but now when I do I can add it to the list and hopefully it will not happen again. Think of it as a programmers approach to bug-tracking a camping trip :-P Also I am posting the list here so that 1) I can find it again whenever I need it and 2) to help any other hapless soul who is tired of forgetting something when packing and getting burned for it (literally). Hopefully someone else will find it useful too.
Saturday, March 21, 2009
This week's crazy videos are brought to you by Johnny Chung Lee, who is well known online for his creative uses of the Wii Remote, but apparently is also good at finding cool videos on YouTube. The first video involves a lot of sheep and a lot of free time, where as the second video involves a lot of YouTube musicians and, well, a lot of free time. If you are still hungry for more go check out the Procrastineering Blog for more cool videos and awesome projects.
UPDATE: Well, it looks like we have another contender that is throwing his guitar into the fight. See him play 32 songs in 8 minutes below and then go check out some of his other work at freddegredde.com
Tuesday, March 17, 2009
Monday, March 16, 2009
I was lucky (or unlucky) enough to work at an Internet Service Provider as one of my first jobs, and in between helping Mary Kay Cosmetic consultants try to get online using dial up I spent most of my time learning about how the Internet and the World Wide Web work inside and out. I also credit a large portion of my customer service and troubleshooting skills to the year and a half that I spent on the call floor fixing things over the phone. After moving on to work for computer help desks and eventually finish school with a Computer Engineering degree, I can still say that a lot of what I have learned has been through trial and error or through reading articles and watching videos online.
Recently I have had a few friends ask about getting into creating dynamic web pages. While creating a Facebook or MySpace page is a good start for web development, many people have grandiose visions for new business ideas that will make them filthy rich. If you aim to create a website to take over the world, I suggest you do it the old fashion way with VC funding and a professional web development team, but creating a simple yet functional website is really not that difficult. Most people are familiar with basic HTML now days and a fair number have event taken the initiative to learn CSS or Photoshop for higher level design. It seems like the last hurdle to get over is going from static to dynamic websites. Sure, you can setup a hosted blog or add a calendar widget to a static page to increase it's functionality, but if you are willing to spend a bit more time you can easily apply all of your static website knowledge (HTML, CSS, Design) to creating dynamic html pages.
If anyone is interested in learning about programming I suggest the MSDN Beginner Developer Learning Center which contains both a Web Track for web development and Windows Track for software development. Both of them cover use of the free Visual Studio Express Edition tools which are professional quality development environments that greatly help the development process. For an example of the material, here is a video that shows an introduction to the Internet and how static and dynamic web pages work:
Friday, March 6, 2009
You have ten seconds.... name the three branches of government. T minus....10..9..8..7..6..5..4.......Times up.
I hope you got it right. Because apparently only one out of 3 people in America can do it. And that is a sad fact indeed. If you cannot name Executive, Legislative, and (my favorite :-) the Judicial... you need to watch this episode of the daily show, where the honorable Justice Sandra Day O'Connor is a guest on the Daily Show. Watch and learn...
Friday, February 20, 2009
The TED 2009 conference was earlier this month, and already there are a number of great videos posted on the website ranging from Bill Gates talking about malaria and education to the Siftables demo of spatially aware tiles to Venezuela's El Sistema youth orchestra. There are too many good presentations to mention, but I highly recommend browsing through the site and signing up for the newsletter since you are guaranteed to find something that piques your interest.
I watched the presentation from Barry Schwartz about Practical Wisdom, but I think that his 2005 presentation regarding the Paradox of Choice was much better. In fact, seeing as there are so many options for videos that are bound to make you unhappy trying to choose, how about you just sit down and watch it right now:
If that doesn't make you feel better or at least get you to stop worrying so much about all the silly (and not so silly) choices you have to make in your life, then maybe your expectations are set too high.
Monday, February 9, 2009
Pandora has supported a few Sprint and AT&T mobile phones for a while now, but they recently announced support for a few Windows Mobile devices as well. This is very welcomed news, since my life pretty much revolves around Pandora now. I listen to it at work and at home using OpenPandora, and even coughed up the $36 for a year subscription to remove the few advertisements that they do play. Now with access to it on my phone I can listen when I go bike riding or am stuck in the car for long periods of time.
The Pandora website only allows you to download and install the software onto select phones, but all Windows Mobile phones are essentially the same. All you need to do is find a copy of the CAB file and transfer it over to your phone using ActiveSync or a memory card and install it. After that load up some headphones and start rocking out! Works great over AT&T 3G or using WiFi.
Wednesday, February 4, 2009
It is for this reason that I decided to start a second blog devoted entirely to code. Not just any code, however, this blog will hold my super awesome “I can’t believe how simple that was, it only took 3 hours of research to figure it out” code snippets that I have found on my quest for intergalactic domination. I really should write them all down in a book and sell a million copies, but seeing as books have yet to keep up with hyperlinks and labels, a new code blog will have to do for now.
So without further ado I present to you Http://CodeBlog.Theg2.Net
Tuesday, February 3, 2009
Lately it seems like the more that I try and plan or prepare for something, the more likely things are to turn out nothing like I expected. These last few days are a great example: I had big plans for the weekend and the Super Bowl, but ended up missing out on most of them due to a sprained knee that I incurred while snowboarding on Saturday. The rest of my weekend was reduced to hobbling around the house and wallowing in my own self pity, but luckily it is starting to feel much better now and with any hope I will be able to walk without a limp by Wednesday. Yippee!
This seems to be a particular case of “When it rains, it pours!”, as I also had my main home computer crash (Blue screen of death, time to buy a new drive and reload the OS), a slew of financial issues to deal with (Citi credit card APR got bumped up by over 10%, HOA levied a $500 special assessment fee, Car registration is due, and I’m still waiting for my 1099 statements so I can do my taxes...), and a general pattern of small to epic failures that are enough to leave me with feelings of desolation and despair. And that is not to mention the ever growing mountain of work projects with my name on it.
Although oddly enough that mountain of work is how I managed to get through these difficult times, as it gives me something positive and productive to focus on (and puts money in the bank :-). Each task that I complete or problem that I solve is one less burden to bear, and the gratitude from a customer who’s problem I have resolved goes a long way to lift my spirits. I like to think that helping others is my way of self medicating... either that or buying a nice big new toy, but unfortunately this time that will have to wait.
It has however made me start looking at new ways to help out others. So far I have decided to start donating blood, which is a simple one hour time commitment that is guaranteed to make you feel better. I also am looking at opportunities for volunteering, however I have yet to find anything that I feel passionate enough about to give up a large block of what would otherwise be my free time.
I also am still working on my goals to be more active in various communities and to keep learning new things. I attended the annual HOA meeting for my complex and plan on attending other monthly meetings whenever possible. Also I stumbled upon a free MSDN event that is coming to Salt Lake in a few weeks, which I plan on attending to learn more about Microsoft’s plans for “The Cloud” with the Azure Services Platform.
I truly hope that your week is going much better than mine, and with a bit of luck this dark cloud will break and things will return to “normal” again soon.
Tuesday, January 13, 2009
I think it might be a little late to make new years resolutions for 2009, but I agree with Joel Spolsky and Seth Godin that having goals is an important part of improving and checking your progress. I have had some time to think about what I would like to work on in the next 6-18 months, and have come up with the following list:
- Write 50+ blog posts this year:
Having started the blog in May, I managed to write only 16 post, averaging about 2 a month. I definitely have a lot more to say, it just seems hard for me to find the time to write. I also still want to follow the reasons why I started writing here, which means it take even longer to finish a draft. I already have ideas for a half a dozen posts that I would like to talk about, and I think I just need to try and make more time for writing. You can also expect to see this space branch out into more areas like product or software reviews and how to guides. If things get too technical I may move them over to a CodeProject article, or maybe even try my hand a writing a technical book, but I definitely want to start writing more.
- Become more social and active in the community:
I tend to spend most of my time reading, watching, listening, internalizing, digesting, and analyzing information, and I need to try and focus more on externalizing, communicating, and interacting with others. This is true for both the online community (blogs, forums, etc) as well as the real world community (friends, neighborhood, city, country, and the world). My goal is to start engaging more in discussions and joining groups that are of interest to help broaden my social circle and influence. Ideas that come to mind right now are tech groups online, bike groups in Salt Lake, and city counsel or HOA meetings where I live.
- Exercise and be more physically active:
I have come to notice that I need to get more physical activity into my life. My goal for this year is to find more ways to stay active. Biking, Snowboarding, hiking all come to mind. I may finally cave and get a gym membership (could qualify for goal #2), but I don’t know if that is the right path for me. I did very well biking this fall, and felt that it was a great way to get exercise and get outside. This year I want to take longer bike rides, not just in the city but also up the canyons.
- Fix my sleep schedule or go for a consultation:
I tend to have a very hard time getting a good night sleep, which leads me to staying in bed for very long hours and still not being fully rested. Some nights I have full on insomnia, which can then throw off both work and sleep for the entire week. While in college, I blamed school+homework+work+socal life as the problem, but after graduation I still have the same problems. If I can’t figure out something that works, then it is time to find some help.
- Continue learning:
Just because I am done with school does not mean that I should stop learning. At work I have recently started taking on a lot more of a server management role, and I am starting to feel like I am in over my head a bit, so I hope to become a Microsoft certified DBA within the next 3 months. After that, I plan on continuing to take exams ever 3-6 months and work towards an MSCE. I also would like to pick up at least one new hobby this year.