Apple's business model beating Microsoft's
So says Walt Mossberg, the man with the job I envy most in technology.
I agree with what he says for the most part on the advantages of the end-to-end model versus the component model. One thing I would say that’s slightly different is that Apple is winning not merely because of the tight linkages, but because of the quality of the end product, and their huge market share.
Having lost what Mossberg describes as “the first war” in the personal computing space, Apple took a look at the MP3 player market and delivered a product significantly ahead of the competition in quality and ease of use. Even when connected to a PC (as I did with my first iPod), using MusicMatch for the music software, I liked the experience better than other players I’d considered. Once iTunes came to the PC, it made things even easier.
Part of what helped Apple get its current marketshare in the digital music market is their refusal to inflict the subscription model on their customers. They understood that people want to own music instead of renting it and delivered just that. Between that, their great per-track price point, and the minimum necessary DRM, there are plenty of reasons to choose Apple over the competition.
Removing time from a datetime field in SQL
I’ve got a small project at work that required me to use the date, but not the time in a datetime field for retrieval of certain rows from a table in SQL Server 2000. A bit of Googling revealed a document titled “Remove seconds from datetime SQL”. The title isn’t quite right, as the author’s query removes hours and minutes too, but the result turned out to be just what I wanted.
The query: SELECT Cast(Convert(varchar, GetDate(),105) as datetime) I ended up using code 101 instead of 105 to get my query working, but that was it.
ASP.NET Configuration File Handling
One of things I like the least about working with multiple development, QA, and production environments is messing around with configuration files to make sure the different versions point at the right databases. Add the use of the Enterprise Library, and there are even more files to manage.
In my last year at Ciena, I worked in a group where they’d put together some code that detected what environment it was in (development, QA, or production) and retrieved the correct settings from web.config. It was similar to the solution Mike Gunderloy describes in this article on ASP.NET 2.0 productivity.
When I was poking around for more information on config file handling, I came across another article that references Gunderloy’s that talks about a file attribute for the appSettings tag. I hadn’t come across the existence of that attribute anywhere else before. I’ll definitely use this on my next project.
Finally, this article provides another option for dealing with configuration files in multiple environments. The code and examples are well-explained. My group at Lockheed Martin should integrate something like this into the custom library we’ve been building.
Downside of Certification
According to this eWeek article pay premiums for skills that don’t have a certification grew three times faster than pay premiums for certified skills.
I never really bothered with certifications for any of my skills because I was usually too busy working to set aside the time to study for and pass the exams. I was more motivated to do that for things like grad school. I always felt that experience was more valuable than a certification, but the counter-argument of “if you have the experience, certification should be no problem” is still a reasonable one.
Still, I hope the pay premium changes mean employers are choosing experience in favor of those who’ve passed an exam but have little or no hands-on experience.
Amazon.com and A9.com switch to Microsoft Search
I hadn’t noticed this until yesterday, but Google is no longer the guts of A9 & Amazon search. According to this article, A9’s contract with Google expired and they decided to go with Microsoft for the replacement.
I tried “v for vendetta” as a search in both A9.com and Google to see how the results differed (if at all). In my case, the top 6 links from A9 were to the V for Vendetta website by Warner Brothers (hits 1-2), its IMDB entry (hits 3-4), its Wikipedia entry, and its Rotten Tomatoes review. Google gave me the same hits, in almost the same order. The only difference was that the top result returned showtimes for the movie close to my zip code. A9 actually provides that info too, you just have to check the “Movies” option.
It looks like Microsoft’s search has actually improved somewhat since I last tried it. I’ll be curious to see what moves Google and Yahoo make to try and stay top two in market share.
Update:
When I talked to my friend Sandro about the switch and told him what search term I used, he suggested I use a tougher search term to test the relevance of lower-level results. We compared the results of searching for his name “Sandro Fouche” between Google and Live.com. With Google, I had to go to the 50th result to find the first irrelevant result. With Live.com, I got an irrelevant result as early as the 10th result.
Mac OS X gets its first virus
According to this article in MIT Technology Review, the Apple operating system got it’s very first virus this year. I suppose the “virus-free” label wasn’t going to last forever, but we should still be extremely impressed that it took about five years for a serious vulnerability to be found.
Even with the latest vulnerability announced, I’ve still found the Mac mini I bought last year to be incredibly stable and easy to use when compared to any of the Windows machines I currently use. The only fallout from this announcement I see is that anti-virus software makers will be able to sell more to Mac users.
.NET Social Security Number Validation
Writing code for work on a Sunday is certainly not my idea of a good time. Especially when our approaching deadline is inspiring panic and all manner of apocalyptic pronouncements about bits of code that aren’t working.
The latest panic compelled me to do a bit of research (i.e. Googling) to find out what constituted a valid Social Security number. Google kindly coughed up this Wikipedia entry. A quick scan through the article yielded this page from the Social Security Administration. Titled Social Security Number Allocations, it lists the valid code ranges for all 50 states, DC, and U.S. territories.
The regular expression you get from Microsoft’s web user control for SSN validation is relatively simple: d{3}-d{2}-d{4}. One of the developers changed things to use this: ^(?!000)([0-6]d{2}|7([0-6]d|7[012]))([ -]?)(?!00)dd3(?!0000)d{4}$
Sure, it’s gold plating. But it works. It would be more trouble to take out than it was worth anyway.
Ether Beta Test
Awhile back, I read a blog entry (probably from Robert Scoble) about a venture called Ether. If memory serves about how he described their goal, they’re trying to be the eBay of services. I figured I’d sign up and see if they’d add me to their beta test list. Today I got their e-mail saying I’d been added.
Here’s the business card I generated after signing up:
|
Scott Lawrence (IT Advisor)
1-888-MY-ETHER ext. 01568799
|
I’ll post more as the beta test proceeds.
VS.NET 2003 Annoyance
VS.NET really annoyed me today. When I changed my custom page base class to be abstract, the web forms that inherit from it could only be seen in HTML mode. Their HTML editor leaves a lot to be desired. Maybe I’ll have to figure out how to switch to SciTE automatically when the visual designer croaks.
On the other hand, not using the visual designer does get rid of VS.NET’s annoying habit of trying to create new declarations of web user controls in the web form code-behind when you’ve already got them declared in a custom base page class.
Ads coming to iTunes
I came across the article today in Advertising Age (via a Wall Street Journal link). The article hints that this is the first step toward advertising showing up on iPods.
I’m not surprised. It was inevitable that advertising would show up on iTunes. I’d been hearing it in some of the podcasts I listen to already. I wouldn’t expect Apple to turn down that revenue stream forever. It’s still a little sad that there’s one more place we can now expect to see ads.
Open Source on the .NET Platform (part 1)
Open source on the .NET platform is a topic I’ve been thinking about for awhile. My current boss has made it a point to try and use open source applications built with .NET whenever possible. This is the first in an occasional series of posts on the topic.
A good definition of the term “open source” comes from Vaskin Kissoyan of Lokion, Inc.. Here’s the software developer aspect of the full definition:
"Open Source Software allows a developer to contribute to an already existing product or application, it also provides a rich set of library code (basic functionality) effectively giving you an almost unlimited amount of blocks upon which to build your applications. The OS community fosters reuse so there is no need to re-invent the wheel - a major problem for all developers before the dawn of Open Source."How well does this definition apply to some of the software built using .NET since the year 2000? In some respects, it fits quite well. When it comes to library code, Microsoft has provided Application Blocks, then the more robust Enterprise Library. Microsoft has also done a good job of providing reference applications as starting points for future development. This is a practice I first took advantage of during the Windows DNA days when I used the Fitch & Mather Stocks application as the basis for an online recruitment tool I built for Ciena in 2001. Since that time, sample applications like Duwamish Books and a myriad of starter kits have been the basis for many custom development efforts.
The Issue Tracker starter kit was the first open source .NET application our group at Aspen Systems (now Lockheed Martin IT) tried to use. The group lacked a formal, centralized way of tracking bugs in the software we developed, so my manager saw it as a no-cost way to build our skill with C# (it’s also available in VB.NET) and .NET and improve our development process.
Looking back on the experience, we should have answered the following questions before we moved forward with the IssueTracker starter kit:
- Is open source the best choice for this application (buy versus build/extend)?
- What platform are your developers most skilled at building for?
- Is the best open source application on the .NET platform?
- Is it our goal to re-sell an application we've extended?
Even if there was no willingness to spend money (and there wasn’t) and open-source was the direction chosen, Bugzilla is used by enough companies and organizations (including Id Software, NASA, and Akamai) that we should have considered it far more strongly than we did.
We were (and still are) primarily a Microsoft shop, so the developers were most familiar with that platform. Unfortunately, too many of them were new enough to ASP.NET that they wrote applications the same way they would have in classic ASP. This was probably why boss felt the application would be a good learning tool. When it comes to open source, the odds that the best solution will be written in .NET are low. None of the open source bug/issue tracking solutions written in .NET that I was able to find came anywhere close to Bugzilla or FogBugz in user interface, functionality, or documentation.
We weren’t going through the trouble of extending Issue Tracker because we wanted to re-sell it. It was (and is) strictly for internal use. From my perspective, the only reason to assign people from revenue-generating projects to extending this app was if we planned to re-sell the resulting application.
At the time, I believed we made the wrong choice in trying to turn Issue Tracker into a production system. The year that has past has only strengthened that belief. The resulting application is regularly changed and updated to accomodate requests from any number of people. It takes development resources we really need for projects that make the company money. It still lacks useful features that can be found in more mature products (both open source and COTS) .
In my next post on this subject, I’ll examine how these four questions apply to a more robust open source .NET application: Community Server.
First bilingual application
In the nearly 11 years I’ve been writing software for real money, I haven’t had any internationalization projects until now. The project I’ve been assigned most recently is an electronic forms application that will allow the spouses of police, fire, and other public safety officers injured or killed on duty to apply for benefits. It certainly isn’t the most cheerful app I’ve ever helped write, but it’s definitely one of the more important ones.
Dealing with resource files has been the biggest pain of the entire project. We lack consistent naming conventions for variable names. We also lack consistent locations for the variable names. This results in the need to pull strings for one form from multiple resource files. Sometimes, variable names and locations have been changed arbitrarily and without warning. This meant that code I’d written one day that displayed the correct text, displayed nothing the next day. A few of those changes cost me half a day of rework (and every bit counts when your deadline won’t move).
When I finally had a chance to look for information on internationalization in .NET, I came across an excellent article at DevX. It’s the first in a 3-part series of articles that ends with a decent checklist of issues to consider in an internationalization project. The sample application is more complex than my assignment because they’re internationalizing database content as well as static content.
So far, I think we would have helped ourselves a lot if we’d thought of the resource files as classes. I’m not sure what the performance implications of more resource files with fewer strings would be versus fewer resource files with more strings, but I think it would improve our speed of development.
We need heroism
These are the words I least want to hear, especially when it comes to my job. I heard them today from one of my bosses because I’ve been writing code for one of his projects. It has the usual immovable launch date and changing requirements. The latter is why I was added to the project. The client decided, in all their wisdom, that an application we were building for them needed to be bilingual (displaying English or Spanish depending on the viewer). This is after changing the platform from Java on Unix to ASP.NET & C# on Windows. All this, one month before the scheduled launch.
Part of me is amused by this situation because I’ve been telling this boss for months that we don’t have enough developers. Because my title is “senior systems analyst”, writing code isn’t supposed to be my primary job. This same boss has said in the past that he didn’t want me to write code. So it’s rather ironic (and annoying) that I’m who he asks to write code when it looks like his project will miss its deadline.
Needing heroism on most of your projects means something is seriously wrong with the process. It’s particularly discouraging when your employer received a CMMI Level 2 certification within the past six months. That level is supposed to mean heroism is in the past. In reality, CMMI Level 2 means a ton of documentation (and a ton of time spent writing it). It doesn’t fix inaccurate budgets estimates or timelines, clients that keep changing their minds about what they want or a lack of developers to actually build the product.
Akismet Rules
Akismet is a ruthless comment spam killer :-) Moderating comments is super-easy now (since I’d been getting nothing but comment spam lately). And there’s no better price than free.
iPodding my car (part 3)
According to Antwerpen VW, Volkswagen says that the way the iPod adapter hooks into the stereo disables the channels that display additional information during satellite radio broadcasts :-( I wonder if any of the after-market solutions have the same issue.
Buying my car
I should have written this back in February, since I don’t have nearly as many recommended links as I should. Anyway, here are a few notes on my most recent car-buying experience.
What Can I Afford The first thing I had to do was figure out how much I could afford to spend. During my research, I came across a rule of thumb that said you could spend up to 20% of your net income on a monthly car payment. When I found out what that figure was for me, it seemed way too high. So I cut it down to about 12% of my net and moved on to the next step. The other thing I did which proved quite handy later was get pre-approved for a set loan amount. I’m a Costco member, so I went through their auto financing & refinancing service to do this. The end result of this process was a rate of 5.3% on $25,000 over 5 years. Capital One, the company Costco partners with for this service, gives you check and a payment schedule so you can shop for a car as if you’re paying cash.
What Do I Want Deciding what I wanted was the easiest part of the process (since the previous step removed the delusional “I want a Lexus” thoughts). There’s tons of information on the Web when it comes to cars and costs. I found Edmunds.com to be especially helpful. I used Consumer Reports for some of my research too. After settling on the idea of buying a car with at least four doors, my field of choices narrowed to Audi and Volkswagen. For options, the only real must-haves were leather seats and a sunroof.
Test Drives I thought pretty hard about buying a certified pre-owned car instead of a new one, so I ended up test driving a number of used Audi A4s and Volkswagen Passats (both with the 1.8 liter turbo engine). In the case of the 2005 Passat, it wasn’t enough engine for that size car. The A4 with quattro was a bit better. The real challenge with the certified pre-owned cars was finding one that was the right price that didn’t have more miles on it than I was comfortable with.
Moving on to new cars, I considered the Audi A3. It’s a nice car, but a bit small. Add too many options and it gets expensive in a hurry. Since my last car was a 2000 Volkswagen Jetta, I thought I’d at least test-drive the new Passat. I wanted a fallback if I couldn’t get a reasonable offer on the A3. The way the Passat handled during the test drive really impressed me. Even with the 2 liter turbo, it’s quite agile. It’s got tons of room inside as well. Given those factors, and the substantially lower cost compared with the A4, I felt comfortable choosing it.
Pricing my trade-in I didn’t want the trade-in of my car to have any impact on the price I was ultimately offered for a new Passat. So I took my Jetta to CarMax to have it appraised. They offered me $5500 for it, probably because of the high mileage (nearly 100k in less than 6 years).
Pricing the new car I used Edmunds.com to get quotes on a Passat from multiple dealers at once. They all offer “special” Internet-only pricing at points during the year. At my friend Sandro’s suggestion, I timed things so that the purchase would happen at the end of February. The hope was that their need to hit sales quotas would make dealers more flexible on price. In the case of the two dealers I seriously considered buying from (Congressional and Antwerpen), it seemed like that did factor into the outcomes. In order to offer me a lower price, both dealers offered to sell demo cars at a lower price.
Closing the deal
One key advantage I had in getting the best price was Sandro’s friend Elmer. He works in auto finance, so he knows the secret numbers and incentives that aren’t going to show up in a Consumer Reports price sheet or an Edmunds.com report. I told him what my best offer from Congressional was and what option package I wanted and he found a car at a friend’s dealership at a price that was a little lower. Once we showed up at Antwerpen to check things out, they offered a demo model at a lower price. The mileage was much lower than they thought, so I chose to buy there instead of trekking back to Congressional.
This is where my second advantage came in. While I was doing some of the paperwork, Sandro remembered that I was supposed to get owner loyalty credit since I’d bought a Volkwagen before. His memory saved me $500.
After a driver from Antwerpen took the Jetta for a test-drive, they matched the CarMax appraisal for trade-in value. In retrospect, my mistake was telling them how much CarMax had offered. I’d kept the car in good enough condition that their driver commented on it. Telling them the appraisal value probably cost me $500-$600.
When it came time to deal with financing, this is where my Costco exercise paid off. Volkswagen Credit initially offered a 5.9% interest rate on the car, quite a bit higher than what Capital One had offered. So I mentioned that I’d gotten pre-approved for a better rate and their 5.9% turned into 5.3% in a matter of seconds :-)
The end result I paid $25,500 for a car with an MSRP of $28,430. They also threw in a 2GB iPod nano as part of the promotion they were running that month.
Summary of Recommendations
- Find out what you can afford first.
- Get pre-approved for the amount you're willing to spend. This gives you an alternative to dealer financing.
- Get your trade-in appraised. CarMax is a nice option because their appraisals are good for 7 days and 300 miles. In any case, it's an alternative to a dealer appraising it (since they have a vested interest in appraising it at lower than true value). Don't reveal the appraisal value unless the dealer's offer is lower.
- Have two different cars you're willing to buy.
- Consider buying a demo car. They'll have far less mileage than a certified pre-owned car, but will still have a price advantage over a brand-new car. You may even get a car with more features.
iPodding my car (part 2)
The ugly continues :-(
The sound on the satellite radio is back, but now some information on my radio display is missing. The next visit to the shop is April 4, when I hope Antwerpen will get it right once and for all.
iPodding my car
Last month, I bought a new VW Passat from the folks at Antwerpen VW (who gave me a great deal on a demo model). So far, it’s been a great ride (better gas mileage, more room, and better performance than the Jetta VR6 I’d been driving about 6 years).
Having suffered through a couple of attempts to get my iPod to play through my old car (tape adaptor, iTrip), I looked forward to the opportunity to “iPod my car”. I finally had it done yesterday.
The good (so far)
- The adaptor charges the iPod and plays tracks simultaneously.
- The iPod lives in a secondary compartment above the glovebox completely out of view.
- Controls work just like the external CD changer would.
The bad (so far)
- You can only access the first five playlists in your iPod, or the list of all your tracks. It would be nice to able to pick which five map to the radio buttons.
- No display of track name or playlist name. Apparently you get that information if you put in a CD with MP3s on it, but I still need to test that.
The ugly
The technician who installed the iPod adaptor managed to disable my satellite radio. It still receives channels and displays all the information, but there’s no sound :-(
They’re going to be fixing that today.
The verdict iPod integration is an improvement over the tape adapter, iTrip, or aux port options. It’s a bit pricey to install (around $350 for parts, labor, & tax). I’ve got enough songs and podcasts on my iPod that when the included 3 months of XM expire, I probably won’t miss them. Going the aftermarket route was probably the only way to address my hangups about playlists and display information, but for now I prefer how seamless the current integration setup is.
The acquisition continues
Lockheed Martin’s deal to buy Aspen Systems was finalized back in February, but until this week, the change hadn’t really manifested itself in a noticeable way. My colleagues and I have had more reports to write (since our bosses have had more reports to write), but not much else had changed until this week.
Yesterday we got an e-mail that our Aspen security badges were being replaced with Lockheed ones. The old ones will be deactivated April 1. Today we got an e-mail about company corporate cards we’ll be required to use for business expenses from now on. Bit by bit, the Aspen name and logo are disappearing from everything. Yesterday, they replaced it on the intranet. Today, the public website has the Lockheed Martin star on it (even though the title text still says Aspen Systems Corporation).
As I write this, there’s a crane outside the building removing the Aspen Systems sign from the side of the building (the sign said “pen Systems” the last time I checked since they’d only gotten 2 letters off).
I’m still waiting for more useful things to change, like intranet access, and software licenses for better tools.
Windows Live Again
This morning I came across an article that asks whether Windows Live is better than Google. I blogged about Windows Live late last year and thought there were a couple of things that it did quite well. The Technology Review article highlights the ability of Windows Live Search to launch multiple search panes in a single window. No one should be particularly impressed by this because tabbed browsing has been a feature of Firefox and Opera for a really long time. Internet Explorer 7 (which still isn’t out yet) is the first version of Microsoft’s browser that will actually have tabbed browsing built in. The article also highlights the ability to view pictures at different sizes without leaving the search page, something Google has probably been doing for awhile already.
The article spends very little time on what is ultimately the most important thing about any search engine: relevant results. Bells and whistles mean nothing if you don’t get results you can use. I’ll do a side-by-side comparison for my own searches for a bit to see if Windows Live is giving me results as useful as Google’s.