I'm almost at the end of a three day weekend, a weekend with no kids, no wife and sadly enough no life. The wife took all five kids to the lake for the weekend so that I could get caught up on some projects. I managed to get as caught up as I could although I would have liked to have gotten more of a jump on some other tasks which, as always, will undoubtedly all become top priorities at the same time. As it turns out, three days alone is a really long time. I cleaned the ovens, the downstairs bathroom, ran the sweeper, cut the grass etc... just because I didn't know what to do with myself. I spent most of the hours locked away in the Sandford and Son lab putting in about 20 hours of billable time before venturing off onto other projects. I finally got a chance to update my router with the latest DD-WRT firmware (v24). Much like the previous version, it Rocks! If you have one of the many supported routers this is a must have! I also finally got around to investing some money via the P2P lending site Prosper. I only dropped a hundred bucks but I'll keep you posted to let you know how it works out. I also order business cards from MOO. I loved this company since I first heard about them but didn't like the mini card format. Earlier this week they started offering full sized business cards so I placed an order. Should be here in a week or so (they are based in the UK). I'm currently in the process of getting my Vistafied laptop working again. The whole Vista debacle pretty much bricked the machine. It's a Sony Vaio with a broken DVD drive and since it can't boot from any USB device other than a detachable floppy drive, I've had no end of trouble getting it operational. What I finally ended up doing was configuring my newly upgraded router and a VMWare Ubuntu machine to enable booting over the network via PXE. 22% and climbing. So far so good. I'm also half way through season 1 of BSG. I got hooked somewhere around season 3 and I've just been waiting for the chance to catch up. This has to be one of the best shows on TV and if you're a geek and you're not watching it you should be ashamed! Next on my list is scripting the creation of VM images. I can't wait to get that worked out! Most guys if given a few days with no wife and kids would have gotten in a few rounds of golf or hit the road on their bike or at the very least down a few beers at a strip joint with their buddies. Me? I'm alone at midnight sitting in a room filled with computers basking in the seedy glow of a reincarnated sci-fi series giddy with anticipation over a progress bar reading 97% complete. Yeah, I suck as a bachelor but I'm loving every minute of it. TTFN
After much deliberation I have concluded that the next big thing in software is cloud computing. I did not come to this conclusion through any great insight on my part, but instead from simply reading the writing on the wall. Computing has ebb and flowed between centralized and decentralized models since the inception of computers themselves. Mainframes to PCs to Web Servers to Smart Devices to "The Cloud", it's as predictable as anything in the industry. The question isn't whether or not it will transition, but instead what it will transition to next. For a while it appeared that the transition back to a server-centric model would entail nothing more than simple virtualization , and virtualization will still remain a big part, but I am now fully convinced that the virtualization will live on centralized-decentralized servers in the cloud. If you've read any of my posts over the last year or so you will have no doubt recognized an obsession I've formed with Amazon Web Services (aka: AWS, aka The Cloud). In the past couple of months I've designed three different systems to be hosted entirely within the suite of AWS services (and implemented zero of them). I've also implemented a portion of three other systems which make use of the most basic of the AWS offerings; S3. In addition, I personally use S3 for a number of things, and I'm batting around the idea of developing a number of additional cloud centric systems based on existing OSS products. But alas, I have a problem, and that problem is Linux. To put a finer point on it, it's software development on Linux that's the real issue. Before I explain what I mean, let me make it clear where I stand on some of the "issues": - Windows is acceptable. Not great, but acceptable. Vista is the exception, it just plain sucks!
- Linux is great. Not just acceptable, but great.
- Microsoft .NET is the best platform for application development. Period.
- Java blows chunks. Its Death could not have come soon enough.
- Ruby rocks as a scripting language, not so much as a platform.
- Ditto Perl.
- PHP is an abomination. I continue to be amazed at the beauty produced by something so ugly.
- C/C++ is for tool development not application development.
- I don't know enough about Erlang etc... to have an opinion yet.
If you're a developer that should give you a pretty clear picture of the camp(s) I'm in. Now to get on with my points of contention: - Linux is the OS for virtualized servers in The Cloud. It's small, powerful, configurable, reliable and best of all free. It is unlikely that MS will be able to stave off the onslaught of services which have already begun to gain a strong foothold. MS has already missed the boat, and while they aren't going anywhere anytime soon, future historians will recognize this period as the begriming of the end of MS (and probably incorrectly blame it on the departure of Mr. Gates)
- While the Linux OSes are great and there are a number of great software packages developed for Linux, the effort necessary to develop software on Linux is insane compared to the effort to develop similar software for Windows. I don't believe this is a result of the OS but instead a result of the development tools / environments which are available.
- Each of the three systems I designed to run completely in The Cloud ran up against the same shortcoming. The use of S3, SimpleDB and SQS were all pretty straight forward and concrete until I got to EC2. The use of EC2 is pretty much a requirement for one of the three systems due to the amount of interaction with the other three services. It would be cost and time prohibitive to shuffle the data in and out of those services, a penalty which is not incurred when using EC2, but when I attempt to design the components in the Linux environment I begin to run into development costs which are also prohibitive.
- I'm willing to concede that the main issue is my lack of expertise in software development in a Linux environment. I'm sure that if I honed my Ruby, PHP, Perl, Java, C, C++ skills that I would be able to develop Linux based applications much more efficiently although I doubt I would approach the efficiency of .NET development.
- .NET is my bread and butter. It pays the bills for now, and will likely continue to pay the bills for some time to come. Abandoning Windows and .NET is not an option for me at this time. I also have little doubt that in 5 years a lack of solid Linux development skills will cost me.
- Finally, I realize that I do not have the mental capacity nor the time to master each of the OSes, all of the languages and all of the necessary services as well as monitor all of the other goings on in the industry which I must always be aware of in order to provide the level of service that I feel is necessary.
So I'm stuck. I must evolve into the new Cloud world but I can't leave behind the current world. I can free the bandwidth necessary to master one Linux distro and one language but one isn't enough. What's a guy like me to do? TTFN
It's been a bit of time since my last post. As usual things are hectic. The theme behind this post is "Stuff" since that's all it's going to be. First on my list of stuff is the video game tournament for the festival. We, and by that I mean one of the many people other than myself who are helping to make the festival a success, have found an outfit to run a Guitar Hero III competition. The group is called The Rock Star Challenge and they appear to have a pretty nice setup going. This is exactly the kind of thing I was looking for and I'm glad to see that someone appears to be turning it into a viable business. You can find details for the event here. Next is a site I recently came across called gigoit. It's basically a Craigs List for stuff that may be too valuable to throw away but that you don't want anymore. The idea is simple: Say you have a set of old snow tires which you no longer want. You post them on the site and other people can search for them and come pick them up. You can't charge or barter for them so it is simply an alternative to throwing them away. It's good for the environment, good for old parts which are no longer available, good for non-profits etc... The downside appears to be a lack of participation, at least in the US. I had to search in a 500 mile radius to find anything, which renders it pretty useless. This is another example of a very useful application that probably won't ever realize its full potential. Another site on my recent addiction list is vNES. This is a Java based Nintendo Entertainment System emulator which runs in your browser. They have a collection of 2K+ old school NES games including one of my old favorites, 1943 which I'm spending WAY to much time playing. I also want to recommend checking out Jason Kolb's blog. His blog is well written and IMHO dead on. Subscribe, read, enjoy. You'll be better off for it. TTFN
Just a few quick words on some of the new sites I've been looking into this week: SkyDeck turns your phone bill into a map of your relationships with friends, colleagues, and customers - your true social network. We show you who called you, whom you need to call, and who never calls back. And since we also keep track of how much you're spending, you'll never get a surprise bill again. This is an interesting site that connects your phone calls with your email contacts and gives a nice overview of the relationship you have with the people you talk with on the phone. I plan on using it initially for querying calls based on tags to get a log of billable vs non-billable conversations. As it grows I can see a number of other uses including a better FoaF network tracker and tickle list. The RepRap Project is an initiative aimed at creating a largely self-replicating machine which can be used for rapid prototyping and manufacturing. A rapid prototyper is a 3D printer that is able to fabricate three dimensional artifacts from a computer-based model. Project authors describe 'self-replication', understood as the ability to reproduce the components necessary to build another version of itself, as one of the goals for the project. The big news here is that RepRap made its first complete working replicated copy this week. Although we are probably not going to see 3D printers being as ubiquitous as ink jets anytime soon, this is a big step toward making them at least accessible to the general public within the next few years. I know I'm sure going to be trying to get my hands on one before 2010! SmallWorlds is the first web-accessible, casual virtual world which is designed for mass market appeal. Online virtual worlds have traditionally been impeded by a number of factors that have prevented them from breaking through niche markets to appeal to a broad demographic. These include the need to download and install the application, complicated and intimidating user interfaces, difficulty in navigating and finding things to do in the world, and limited options to customize the world and your experience without a sophisticated level of computer expertise.SmallWorlds breaks through these limitations and brings the very best in accessibility and interaction design from the Web2.0 era. SmallWorlds makes the richness of a multi-dimensional social and entertainment experience available to anyone and everyone from 13 to 103. I don't really get the virtual world genre, but SmallWorlds is at least interesting to look at. The problem I have with all of the 3D (or 2.5D as the case may be) virtual worlds is that they are never up to par with what I want them to be. The idea of being able to interact with a large number of people in a virtual environment is without a doubt the holly grail of online communications but I don't think it will become something I can really sink my teeth into until the human-machine interface becomes much more fluid than a 2D screen and a mouse/keyboard. Twine is a new service that helps you organize, share and discover information about your interests, with networks of like-minded people. You can use Twine alone, with friends, groups and communities, or even in your company I'm onboard with the idea behind Twine but I don't yet see it as much more than a fancy book marking application. My original take on it (and one that may still be valid) was that I would be able to feed in snippets of information that I was interested in and it would then use that information to spit out related information that I may not be aware of. For example, I could feed it a set of URLs, emails, documents, notes etc... and it would analyze and index that information and cross reference it with information gathered from other users then suggest sites, documents and even other users which might share common interests. A customized discovery service of sorts. I haven't spent enough time with it yet to determine if it can or will do that but so far all I see is a new style del.icio.us. BeFunky helps people turn their offline personalities into powerful online visual expressions. Just throwing some props out to the BeFunky guys for putting together a fun, easy to use online app. This is similar to another one of my million dollar ideas which I never developed because I didn't think it served any real purpose other than to simply exist, not that there has to be any greater purpose than that but I barely have time to finish the things I must do let alone the ones I want to do. I'd love to see someone with some creative abilities use this to publish a Max Headroom meets A Scanner Darkly sort of podcast, or at the very least a pseudo-realistic comic book. I've bounce around a number of other sites over the past week or so but they are a bit more utilitarian. They mostly deal with marketing and business and development tools. If I get a chance I'll do a quick write up of them sometime next week. TTFN
First I wanted to pass along the latest from the SysInternals guys. They have exposed their oh so useful tools via a UNC path \\live.sysinternals.com\tools. What this means to you and me is that you can get the tools you need when you need them as long as you have Internet access. Heck, you can even run them directly from a command prompt via the UNC path. That, my friends, rocks! Second, I'm delving back into the DNN world. I've been out of touch with it for a few months but I have a new upcoming project that just screams DNN so I'm going to be going back in. While getting re-setup I started thinking that it would be really nice to have something like DNN that runs in the cloud. As you have no doubt gathered, I'm extremely hot on Amazon Web Services. What I think would be a good idea would be to write / port something like DNN over to AWS. This could be true for a number of existing frameworks. The risk is low since you already know which frameworks are valuable based on their usage, all I'm really talking about here is changing the underlying hardware infrastructure. Third, I wanted to provide an update to a previous post about the lack of participation in the raffle tickets fund raiser for my kid's school. As it turned out, a number of families returned their tickets late, and a number number of families had returned tickets but they were "held up" somewhere along the line. The wife did some asking around and we found a great big stack of sold tickets! After counting them up tonight we have approximately 20% of the original 7K that were distributed already sold! That means we are just over 1/2 way to covering the cost of the prizes! We will be distributing another 10K or so to the parish and we are hopefully looking at a nice return after all. Now, if I can only figure out where to get my hands on 100 Xbox/Wii/PSP boxes for the video game tournament ;-} TTFN
I've noticed lately that I seem to be referring to people's code the same sort of way wine connoisseurs refer to wines. When asked about a particular piece of code I find myself saying things like It's overly complex with a hint of a Java underneath. or It's amatureish with clear VB6 connotations or An exciting but immature blend which hasn't had enough time to solidify. On one hand I think it clearly explains the coding style and maturity in a way that any skilled developer would thoroughly understand. On the other hand it makes me sound like a BS critic. I wanted to grab some samples to clarify what I mean but It's late, I'm tired and I have a lot of work to do so your just going to have to use your imagination. TTFN
We printed up 20,000 raffle tickets to help with this years festival. It's the same amount every year and has the potential to raise as much money as the rest of the festival combined. Last year we lost money on the raffle. The wife and I picked up responsibility for the festival late in the year and couldn't get the tickets printed and distributed before school let out. This year we got on it early and started the process two full months before the end of the school year. The wife and I purchased envelopes and printed up flyers explaining the importance of the raffle tickets. We also got approval from the principal to throw a pizza party for the homeroom that sold the most tickets. All at our own expense. Not that it will break us or anything but I just want it to be clear that we are dedicated to the effort. The wife and I then sat down on the floor one night and spent four hours separating 7500 tickets into groups of 25 which we then stuffed into 300 envelopes along with the afore mentioned flyer. The wife dropped them off at the school the next morning for distribution to each of the families. Friday was the deadline for turning in the tickets. Five families returned a total of 125 tickets. We still need to distribute the remaining tickets to the parish as well as sell them at the festival itself, but it is very discouraging to think that we are going to spend more on the pizza party than the entire school managed to make selling the tickets in the first place. Which brings me to my first "What do I do now" question. At this rate it is unlikely that we will sell enough tickets to even cover the cost of the prizes, setting us up for another loss on the raffle. Currently we are debating on wether or not we should load our kids along with the kids from one or two other families who are equally over-extended in volunteer hours, into the car and start heading door to door hawking raffle tickets in an effort to at least make enough to cover costs. Once again proving that the majority is supported by an over-extended minority, a pattern I'm seeing more often and in more places than I think is supportable. On a completely different note; check out the site http://www.worldometers.info/ It has running counts of some interesting world stats. I'd also like to report on my ongoing battle with creating a PVR from my old laptop. First off, my old laptop is a Sony Vaio. It has a docking station complete with a TV turner. It came with XP and a few third party media tools. I was trying to decide between Vista and one of the MythTV distros. Also of note, the DVD drive is broken (welcome to the Sanford and Son lab). I decided to start with Vista. Installed it and realized it wouldn't recognize my TV tuner card. Also it dragged the system to its knees. Add in DRM and limited support for content from the Internet (ie. RSS feeds, Hulu, etc...) and Vista turns out to be a complete waste of time. It's pretty, but it's shit. So on to MythBuntu, only one little problem, while the Sony has a bios setting to boot from an external device, it won't recognize an external DVD drive. Also, it won't recognize a bootable USB pen drive. I do have a 3.5" external floppy which it seems to be able to boot from and I can get DSL up by booting GRUB from the floppy and then installing via a USB, but can't seem to get the same thing to work for MythBuntu. The MythBuntu boot floppy doesn't seem to recognize the USB or external DVD. So I've now wasted hours of my time trying to install MythBuntu from pieces and parts I have laying around. Oh yeah, I can't recover XP on the laptop either because of something that Vista screwed with, even if I bypass the POS boot loader that Vista installs, the recovery fails with a BSOD. I think my next step is to try and blow away the entire Vista partition and install DSL then see if I can figure out how to build a boot disk for some variety of MythTV... maybe a Knoppix distro? That brings my count of MS Windows OSes down to one. I have XP 64 running on one machine and Linux running all of my other machines. Just to add to my bitch blog, the Zune software does not support XP 64, so I've now also rendered my Zune useless. It looks like I'll have to set up a VM whose soul purpose will be to keep my Zune updated. As always there is a lot more going on in my life but no one wants to hear me whine about it, just needed a virtual ear to bend for a few minutes. Now that I'm done, I promise not to drone on too often about my boring life ;-} TTFN
Over the past couple of days I've spent my free brain cycles trying to wrap my head around the various implementations of persistent multidimensional sparse arrays which seem to have cropped up recently. In particular I've been focusing in on Amazon's SimpleDB service, and I have to say that the mind shift from an RDBMS mentality has been a bit difficult. The underlining concept is pretty straight forward and is something most low-level developers have used at one point in their life or another. Basically it boils down to a multidimensional sparse array that can be persisted, queried and retrieved. A rough translation of SimpleDB terms to RDBMS would be | SimpleDB | RDBMS | | Domain | Schema | | Table | Table | | Row | Row | | Column | Column | | Attribute | Column Value(s) | While at first glance it seems like a reasonable one-to-one mapping there are some very important differences. First of the columns for one row may not be the same as the columns for another row. This is where the "sparse" part comes in. If a column doesn't have an attribute then that column doesn't exist in the row. This also allows for columns to be easily added on the fly. The next significant difference is that an attribute can be comprised of multiple values. Unlike an RDBMS where multiple values for a given column are stored in multiple rows, in SimpleDB a single row may have a single column with dozens of values. Once you wrap your head around this it makes sense and you realize the value of this approach. Where the difficulty comes in is trying to picture how this would be used in a real world application. I have an active project I'm currently working on (active = touched in the past 30 days) which is basically Yet Another Social Network. It's comprised of Users, Posts, Comments and Grouping information. In an RDBMS these would loosely translate into tables which would relate to each other through a set of mapping tables. Those tables could then be queried using the standard JOIN nomenclature to do things like retrieve the list of Comments for a Post and the Users who authored each of them. In the SimpleDB world things work a little differently. First off it's not a good idea to store "large" objects in the DB. Instead it is better to store the large objects on something more akin to a file system (aka: S3). So in this example instead of storing the actual Post or Comment in the DB, each would be stored in a separate file in an S3 bucket. What would be stored in the DB would be the information you would want to search and information about the relationships of the various files. With my current thinking that looks like a single domain/table that looks minimally like the following: An example of how the data would then appear would be: | Post | User | Group | Comment | | Post1.html | User1.xml | Group1.txt | Comment1.html, Comment2.html, Comment3.html | | Post2.html | User1.xml | Group1.txt | Comment5.html | | Post3.html | User2.xml | Group1.txt | | In order to pull out the list of comments for a given post we have to query the data for the post and then retrieve each of the attribute values for the Comment column. We would then retrieve the Post file and each of the subsequent Comment files as indicated by the attributes values. Each of the comment files would contain the User which submitted the comment and the associated User files would then need to be retrieved. Now you're saying to yourself "This seems like a lot of work for something that could be done via a single query in an RDBMS. What's the deal?" Here's my take on it: - I may not have my head wrapped around it well enough yet and may be going about it all wrong.
- Since the DB is distributed and the file system is distributed reliability and scalability are very high.
- Moving the semi-static data out of the DB makes it very easy to integrate into a CDN greatly boosting delivery speed.
- It's good to think about different solutions to a problem.
Barring extremely high demand I'm not yet convinced that this is a better solution than a few tables in a SQLServer but I'm willing to give it a try in the name of education. Besides, you can't recommend something without trying it out first and where better to do that than a non-critical side project ;-} TTFN
|
|