Having trouble getting out of bed in the morning?

For those having trouble getting out of bed in the morning, when you really should, maybe could give this a try. 

You have to solve a math problem correctly to get the alarm to shutoff.

Kevin Kelly on Better Than Free

I ran across this article a few days ago and I saw that it was also referenced on Slashdot this morning.  The article is titled Better Than Free and is written by Kevin Kelly.  The article is not about software specifically as much as any object that could have a free alternative like a bootlegged copy of a movie or a copied version of a book, etc..

Kelly outlines 8 attributes of a transaction which he believes will raise the value above the free alternative.  In other words, these 8 attributes are the values which people are willing to pay for.  I very good article and worth the time to read because I think it also applies to not only free alternatives but also to lower cost alternatives.  For instance, I believe the Immediacy attribute he describes can apply to having on-shore developers versus having off-shore developers.  On-shore developers have the advantage in Immediacy because they are in the same office or at least in the same time zone.

I am not sure I am completely sold on Immediacy for all transactions since I have seen developers in the past spend many hours or even days or weeks attempting to configure a free software alternative when easier to configure commercial alternatives were available.  Most commercial software excels in the Interpretation category, described by Kelly, where more comprehensive documentation is available and more time is often spent on usability.  Of coarse, this is not always the case either.

Anyway, the article is worth reading because I think it gives everyone something to think about in terms of what service you are providing, either as an employee, consultant, ISV, or OEM.  For all of these services, there are free or at least lower cost alternatives.

Tags: ,

.CHM Content Blocking

They say you learn something new every day and that is certainly the case today.  It started with this post where I incorrectly stated that documentation for Unity was lacking.  After Grigori corrected me on that, I attempted to read the documentation and was presented with this error from HTMLHelp:


Whenever I nagivated to other topics, I received a similar but not identical message:


Since others were describing material that had been read from the Unity documentation, I assumed that the problem was most likely a setting on my local machine.  After a little searching on google, I didn’t really find anything.

I looked at the properties of the CHM in windows explorer and found the problem:


I was unaware that this functionality existed.  It could be that it has been there for quite some time since it seems less common that help is shipped in this format than it used to be.  Anyway, just pressing Unblock and applying the changes is not enough.  You must also make the file writeable.  If the file is Read-only, you will find that the Unblock button is still there along with the security message when you bring up the properties dialog again.  After unchecking Read-only, pressing Unblock, and accepting the changes, I was able to view the documentation.

Tags: , , ,

T1, You’re the One for Me

Lately I have been suffering from a severe lack of internet connectivity.

I live in a fairly rural area outside of Houston on some property (not in a neighborhood).  Living on property has many advantages like neighbors are not right on top you, plenty of room for the kids to play without worrying about them wandering in to the street, peace and quiet, and so on.  Internet service is not one of those advantages.

Until a few years ago, I was still in dial-up internet service land.  In 2005, a wireless provider arrived in town.  The way this service works is a square transmitter that looks about the size of a medium pizza delivery box is installed on the outside of the house and is pointed to the tower.  In my case, the tower is a cellular tower that has the wireless transmitters mounted on them.  This technology is line of site which means things like thick fog can effect quality of service.  When everything is perfect, I get around 450-500k down and 350-400k up.  Not fast compared to the alternatives available in Houston, but blazing fast compared to dial-up.

This service has mostly worked.  I say mostly because I have had 4-5 outages of at least 4 days in duration.  Several more outages of a day or two have occurred as well but I don’t even count those anymore.  The last outage started 2 weeks ago and ended yesterday, which also explains the lack of new posts during that period.  The day the outage began I called tech support and the call went something like this:

Me:  Hello, I am one of your customers and my service quit working this morning.

Support Minion:  Have you rebooted your computer?

Me:  Yes, and my router and your router as well.  None of that helps.  I believe there is a problem with your tower.

Minion:  I don’t think there is anything wrong with the tower, sir.  No one else has reported problems.

Me:  Most people are at work right now.  Doesn’t there have to be someone who reports the problem first?  That could be me, in this case.

Minion:  Can you press the start menu, open control panel, double-click on network connections and tell me how many connections you see?

Me:  The problem is not with my computer.  I haven’t changed any settings.  The service was working an hour ago and now I can’t even get an address from dhcp.

Minion:  Sir, sometimes settings change all on their own.

Me:  No they don’t.

Minion:  Sir, if you do not allow us to check your settings now and the problem turns out to be your equipment, we will charge you $75 for our service call.

Me:  If you waste my time going through this again, and the problem is not my equipment, can I bill you $75?

Minion:  Sir, it will be better if you would refrain from being difficult.

Me:  Fine, what would you like me to look at.

Three service calls, 5 irate phone calls, one guy climbing the tower and fixing the problem, and two weeks later my service is restored.

Since I am now working with multiple clients and working on the company’s first product, I really need reliable service.  My only option from here is a T1.  The line is scheduled to be installed at the end of this month.  Download speed still won’t match commercial DSL that is available in town, but upload speed will be very respectable.

BarCamp Texas Day 1 Sessions

The sessions were quite diverse and interesting on the first day of BarCamp.  Since most sessions were only 30 minutes, it was difficult for the presenters to go in to much depth.  However, 30 minutes is good enough to give a good introduction to a topic you might not know very well and give direction as to where more information can be obtained.  Here is a brief description of the sessions I attended.

Startup Methodology

I am not sure that this was the exact title, but James Lancaster of Research Valley Innovation Center gave an excellent overview of his methodology for working with startup companies.  The methodology, INNOVATEnRV, describes the stages of company startup and James explained the types of issues that startups would and should be concerned with at each stage.  This presentation was the most polished of the day, at least of the sessions that I watched.

Drupal in 30 Minutes

Chip Rosenthal, from Unicom Systems Development, presented an overview of Drupal.  For the uninitiated, Drupal is a content management system written in php.  I felt is was a good introduction since I had never taken the time to look over Drupal.  The one interesting nugget in this presentation was that Chip recommended looking at the Zen Drupal theme, that is not one of the stock themes in the installation, because it is very configurable and can give your site a look that is less like every other site running Drupal.

Social Media Marketing

Nikhil Nilakantan, from Social Span Media, gave a session on marketing on social networking sites.  I have to admit that this is not a segment of the internet that I have paid much attention to.  I am fascinated that these sites are as popular as they are with people over 22 years old.  I understand LinkedIn, but I do not understand why I would want to really participate in the others.  Nonetheless, Nikhil presented statistics on social networking site traffic that did make me take notice.  He stated that the top 10 sites attracted 131.5 million unique visitors during December 2007 alone.  The more interesting statistic was that the average visit on MySpace lasted 30 minutes (20 minutes for Facebook).  Nikhil estimates that $1.8 billion were spent on social network related advertising last year.  I have no doubt that someone will find out how to make advertising work properly with this type of market and usage pattern.  The market is simply too juicy to pass up.

GWT and Gears

Tom Peck, from AppEngines, presented a session on both GWT and Google Gears.  This was one of the sessions that really could have been an hour long or maybe even longer.  GWT is a framework that allows developers to code web application GUI layers in java while using an api that is quite similar to swing.  I have seen demos of this technology before and it is quite impressive.  Google Gears is in beta and allows the development of applications that run in a browser and allow offline data storage on the local machine.  Gears accomplishes this via a browser plug-in that utilizes the embedded SQLite database engine for the storage.  There is an api available from both GWT and javascript.  Whoever figures out offline storage in browsers can potentially make a gazillion dollars so it is weird to me why Google is giving this away.  Since there are many people working at Google that are much smarter than me, I am sure they have a strategy.  Here is my prediction for a competitor to Gears:  When Silverlight 2.0 is released, someone will provide this capability via the .Net Isolated Storage api (and no I haven’t spoken with anyone already working on this).

Introducing AlphaBetaFinder.com

Anita DuBose presented the freshly launched AlphaBetaFinder.com from AppEngines.  The site is a matching service for software and hardware vendors looking for alpha and beta testers for their products.  The idea is that potential testers can register and provide information about what they are willing to test and what equipment they have available.  Vendors can then search the database for matches and send invitations for testers.  The site will inform the vendor when testers are interested and they can purchase the contact information for the testers.  For now, everything on the site is free because AlphaBetaFinder is currently undergoing its own beta testing.

Tips on Podcasting

Jonny Dover presented some tips on Podcasting and Brad Dressler joined him to demo Audacity, an open source audio editing tool.  I was quite interested in this session because podcasting is something I would like to try.  Good tips were given such as eliminating pauses, working from a prompter or script (CuePrompter.com was recommended), and finding a way to include more than one voice on the podcast were given.  I spoke with a few guys in the audience (sorry guys, I forgot to get your names) that mentioned GarageBand was great to replace using Audacity if you are using a Mac.  They also pointed me to PumpAudio if you need low cost music to mix in to a podcast or the Creative Commons Audio section if you need low cost podcasting solutions.

GeoDjango

Justin Bronn and Travis Pinney presented GeoDjango, which is the GIS branch of the Django project.  Django is a rapid web application development framework for python, similar to what Ruby on Rails does for the Ruby developers.  I felt is was a good presentation but really was limited in depth due to the 30 minute length.

LINQ

I missed some of this presentation and I did not get the names of the guys presenting.  The session introduced LINQ and the new C# 3.0 language features that make LINQ possible.  They also gave a brief introduction to LINQ to SQL.  This was one of the more interactive sessions that I attended.  The audience was clearly interested.

Dinner

Several of us adjourned to a local pizza place, which claimed to have the world’s greatest pizza.  It was good but a claim like world’s greatest is difficult to verify.  I sat across the table from Eric Fortenberry, Cayce Stone, and Jeff Jurica from OrgSync.  These guys have a website product that is targeted mostly at universities to give their organizations (fraternities, student congress, etc.) a way to manage their membership and calendars and such.  I did catch a portion of their demo earlier in the day and site was quite nice.

After dinner, I retired to my hotel room but activities continued late in to the night.  A party went until 2am and folks continued to talk until around 4am.  Scott Riggins, a good friend of mine from Social Mobility, filled me in.  I wished I had kept going but a late night working for a client the night before kept me from pressing on.

Tags:

BarCamp Texas

Today I am at the BarCamp Texas conference in Bryan, Texas.  In contrast to the standard tech conference that you have attended before, BarCamps are attendee driven.  The attendees decide what sessions they want to present the day of the conference and nothing is decided in advance, other than the starting time and location.  I did not know what to expect, but I have been pleasantly surprised.  The day has gone like this so far:

  • I showed up early so was recruited to help setup tables and chairs, which I didn’t mind.  The entire conference is volunteer led and free to attendees so it felt good to at least put forth some effort to help out.
  • Everyone registers as they get there.  There is a wiki to add your contact information in advance but there is no obligation to sign up or pre-register beforehand.  The registration was accomplished with a few Macbooks running spreadsheets and each attendee simply typed in their information.
  • After the registration, a free t-shirt was given to each attendee, courtesy of the sponsors.
  • Attendees then wrote the topics they wished to present on a whiteboard and signed up for time slots.
  • The first few hours were simply meeting and greeting and ad-hoc conversations.  Most of the attendees seemed to be working for either startups, companies that would work with startup companies, or freelance/independent consultants.
  • Lunch wherever you can find it nearby.
  • Sessions from 1pm – whenever people want to stop.  So far, sessions are scheduled to about 6pm and the organizers made it clear than people are free to go all night if they wish.  Sessions are going two at a time in one large room separated by a temporary barrier.
  • Rooms are available for ad-hoc side discussions.

The sessions I have attended so far have been very good.  They are not nearly as formal as a typical conference and there is much more audience participation.  The one negative aspect of the sessions so far is that the room is divided by a temporary barrier and both speakers are standing on either side of that barrier so they occasionally will drown each other out.

I will post a summary of the sessions that I attended later in the day.

Tags:

Going Ballistic on the Rails Community

Zed Shaw was a contributor to Rails and Mongrel.

I say "was" because Zed has decided that he wishes to distance himself from that development community.

Here is his post about it.  It is quite long but entertaining.

Somehow "Burning a bridge" just doesn’t seem to capture the essence of Zed’s post.

Tags: , ,

TortoiseSVN and Creating a Patch Containing New Files in New Directories

This morning I was attempting to create a patch, using TortoiseSVN, that contained new files within newly added directories.  When I selected the files to include in the patch, I was met with the following message:

You’ve selected added folders.  The patch won’t contain added files within such added folders.  Do you want to proceed anyway?

Sure enough, some of the files were not included in the patch.  Thinking this must be my fault, I blew away the new directories and reverted everything to the previous version.  I then created the new directories and added back the new files making sure that the Add to Subversion was all done properly.

The second time I received the same error.  The TortoiseSVN docs did not seem to offer any suggestions so I download the Subversion binaries from here at Tigris.org.  Afterwards, I was able to create the patch by running:

svn diff > pathfilename.patch

The patch file produced was just as I hoped it would be, including all directories and files.  I’m not sure if I was doing something wrong in TortoiseSVN or if this is just a bug, but if you encounter this error just download the Subversion binaries and run the diff from the commandline.

Tags: , , , ,

Dependency Injection – Good for more than just unit testing.

I read the article on InfoQ about the various blog posts that have been going back forth concerning the pros and cons of Dependency Injection (DI). 

A very interesting read for certain.  I think there are excellent points made on both sides.  Ultimately, there are pluses and minuses to all software architecture decisions.  I believe that if someone doesn’t think that tradeoffs exist in their architecture, they likely do not understand software architecture very well.

Jacob Profit argues that DI has grown in popularity largely because it helps with Test Driven Development (TDD).  Certainly, DI helps dramatically in this area and it likely is a good reason for the popularity surge.  However, I don’t really agree with his assessment of how the caller becomes responsible for configuration of dependencies when implementing DI.  Well, let me restate that to:  It can be that way but it certainly doesn’t have to be and I highly recommend against it.

First, using a framework makes things much easier.  The choice of framework makes a difference.  DI frameworks come in 2 basic flavors:  file based configuration and code based configuration.  A few support both configuration methods but most fall into one category or the other. In the file based configuration camp, Spring.net is my favorite but there are other excellent choices like Windsor and StructureMap.  ObjectBuilder from the MS Patterns and Practices group is an example of a code based configuration DI framework.

In my opinion, a code based configuration DI framework can lead you down the path the Jacob Profit mentioned – making configuration of dependencies the responsibility of the caller.

Just like Oren, I like DI because it makes it easier to create a loosely coupled software architecture.  When I use Spring.net, I get the added bonus of the ability to abstract away the location of my components when I use the proxy factories.  With Spring.net proxy factories, a dependency could be a local, in process, object instance or a proxy to a remoting object, web service, or enterprise service.  The product will soon support WCF as well.  This helps me develop and test in an all local configuration and move to a more distributed model after I am sure the core logic works locally in process.

Eli Lopian entered the discussion on the negative side of DI but made some statements that I think are a little misleading:

When you use DI as a ’Silver Bullet’ you are losing more then half the abilities of your programming language. You can not use static methods or the ‘new‘ keyword or sealed types. Oh, you have to make all your methods virtual too. This is going to be even harder once Extension Methods (and Linq) become main stream.

I will concede the static keyword argument.  It is difficult to handle static methods in DI frameworks.

The new keyword seems to me to be by design rather than a negative side effect.  DI frameworks create and configure dependencies for an object.  Therefore, the need to call new is removed.

It is possible Eli was referring to the need for later dependency creation rather than creating all dependencies at startup.  I can see this being a requirement.  In fact, I have had the requirement myself and I solved it by having the object request the dependency from the Spring.net context rather than having the dependency injected.  I realize this is not ideal, but no worse than coupling to a concrete implementation or factory in my opinion.

Eli also says that you cannot use sealed types and all methods must be made virtual.  This is where Eli and I start to part ways.

I have used both sealed types in my Spring.net configuration and have used objects without virtual methods.  In fact, most of my objects do not have virtual methods.  Whether or not to make a class sealed and make methods virtual is a design decision that has nothing to do with the use of a DI container.  I make sure to retain the flexibility of the caller by enforcing the use of the interface/implementation paradigm in my designs.  This way I can divorce my decisions about inheritability from the flexibility I want in the caller’s code.  I agree that you probably want to avoid sealed classes and make methods virtual, if the caller is declaring concrete class variables instead of interfaces.  However, interfaces are the way to go in my opinion.  In fact, using interfaces for variable declaration types is a good idea in many cases even if a DI container is not used at all.

I might be missing the point but the last sentence in the quote from Eli Lopian does not make since to me at all.  Using extension methods is perfectly ok with DI containers.  I have even attached a very simple sample project to this post demonstrating both calling extension methods from an object returned from the Spring.net context, and calling extension methods on a property injected within the container.  I fail to see why LINQ would be a big issue either.  The types of objects I would be performing LINQ queries on would likely be value objects that I use for my problem domain. These would not be something I would normally configure in a DI container anyway.

By the way, I am already working on a post describing Extension Methods in general and I should be posting that either tomorrow or Monday.

Tags: , , , , ,

More Testing on that Bot’s Vocabulary, Please

Apparently, Microsoft did not perform enough edge case testing on their Santa bot for Windows Live Messenger.  This link points to the story.  It seems Santa is capable of discussing rather naughty topics and using language that is not what you want your kids exposed to.

This just points out how software ends up getting used in ways that the programmers never envision.  By the way, Microsoft has removed the Santa bot and I am certain he will be put through the testing ringer before (if) he makes a future appearance.

Tags: ,

« Previous PageNext Page »