About | Buy | Forum | Industry Watch | Learning Curve | Products | Search | Twitter | Xnews
Home » Learning Curve » Developers Workshop

#3 Killer App

They continue to amaze.


Buy It

Try It

If Tim Berners-Lee's WorldWideWeb is still the #1 killer app (and it is) and if electronic mail is the #2 killer app (and it is) then Spotify is destined to become the #3 killer app. Of all time. And it keeps on amazing.

Today in the holiday times generic searches suddenly come up with seasonal results first. This in itself is something of a first. It might be easy to do - that's not the point. The point is it's being done. The Spotify group are trying to guess what people are looking for and make it easier and faster to find.

Brilliant.

How It Works?

It's still a bit of a mystery how this puppy works. The binary has standard linkage...

0000000000000b78 /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
0000000000000bd0 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
0000000000000c40 /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
0000000000000ca4 /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
0000000000000d00 /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
0000000000000d58 /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
0000000000000dac /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
0000000000000e08 /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
0000000000000e6c /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
0000000000000ecc /System/Library/Frameworks/Quartz.framework/Versions/A/Quartz
0000000000000f24 /System/Library/Frameworks/Security.framework/Versions/A/Security
0000000000000f80 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
0000000000000ff0 /usr/lib/libresolv.9.dylib
0000000000001024 /usr/lib/libstdc++.6.dylib
0000000000001058 /usr/lib/libgcc_s.1.dylib
000000000000108c /usr/lib/libSystem.B.dylib
00000000000010c0 /usr/lib/libobjc.A.dylib
00000000000010f4 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
$ otool -L Spotify
Spotify:
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 949.0.0)
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 34.0.0)
    /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 136.0.0)
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 12.0.0)
    /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 32.0.0)
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 677.12.0)
    /System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0)
    /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 31122.0.0)
    /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration (compatibility version 1.0.0, current version 204.0.0)
    /usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 19.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 476.0.0)

There are a lot of Cocoa class references...

00000000001a7caf .objc_class_name_NSAlert
00000000001a7cc8 .objc_class_name_NSAppleEventManager
00000000001a7ced .objc_class_name_NSApplication
00000000001a7d0c .objc_class_name_NSArray
00000000001a7d25 .objc_class_name_NSAssertionHandler
00000000001a7d49 .objc_class_name_NSAttributedString
00000000001a7d6d .objc_class_name_NSAutoreleasePool
00000000001a7d90 .objc_class_name_NSBitmapImageRep
00000000001a7db2 .objc_class_name_NSBundle
00000000001a7dcc .objc_class_name_NSButton
00000000001a7de6 .objc_class_name_NSCharacterSet
00000000001a7e06 .objc_class_name_NSColor
00000000001a7e1f .objc_class_name_NSConnection
00000000001a7e3d .objc_class_name_NSCursor
00000000001a7e57 .objc_class_name_NSData
00000000001a7e6f .objc_class_name_NSDate
00000000001a7e87 .objc_class_name_NSDictionary
00000000001a7ea5 .objc_class_name_NSDistributedNotificationCenter
00000000001a7ed6 .objc_class_name_NSEvent
00000000001a7eef .objc_class_name_NSException
00000000001a7f0c .objc_class_name_NSFileManager
00000000001a7f2b .objc_class_name_NSFont
00000000001a7f43 .objc_class_name_NSFormatter
00000000001a7f60 .objc_class_name_NSGraphicsContext
00000000001a7f83 .objc_class_name_NSGrayFrame
00000000001a7fa0 .objc_class_name_NSImage
00000000001a7fb9 .objc_class_name_NSImageView
00000000001a7fd6 .objc_class_name_NSMenu
00000000001a7fee .objc_class_name_NSMenuItem
00000000001a800a .objc_class_name_NSMutableArray
00000000001a802a .objc_class_name_NSMutableAttributedString
00000000001a8055 .objc_class_name_NSMutableDictionary
00000000001a807a .objc_class_name_NSMutableSet
00000000001a8098 .objc_class_name_NSMutableString
00000000001a80b9 .objc_class_name_NSMutableURLRequest
00000000001a80de .objc_class_name_NSNotification
00000000001a80fe .objc_class_name_NSNotificationCenter
00000000001a8124 .objc_class_name_NSNumber
00000000001a813e .objc_class_name_NSObject
00000000001a8158 .objc_class_name_NSOpenPanel
00000000001a8175 .objc_class_name_NSPasteboard
00000000001a8193 .objc_class_name_NSPopUpButton
00000000001a81b2 .objc_class_name_NSPredicate
00000000001a81cf .objc_class_name_NSProcessInfo
00000000001a81ee .objc_class_name_NSPropertyListSerialization
00000000001a821b .objc_class_name_NSRunLoop
00000000001a8236 .objc_class_name_NSScreen
00000000001a8250 .objc_class_name_NSScrollView
00000000001a826e .objc_class_name_NSSearchField
00000000001a828d .objc_class_name_NSSecureTextField
00000000001a82b0 .objc_class_name_NSString
00000000001a82ca .objc_class_name_NSTask
00000000001a82e2 .objc_class_name_NSText
00000000001a82fa .objc_class_name_NSTextField
00000000001a8317 .objc_class_name_NSTextFieldCell
00000000001a8338 .objc_class_name_NSTextView
00000000001a8354 .objc_class_name_NSThread
00000000001a836e .objc_class_name_NSTimer
00000000001a8387 .objc_class_name_NSURL
00000000001a839e .objc_class_name_NSURLConnection
00000000001a83bf .objc_class_name_NSUserDefaults
00000000001a83df .objc_class_name_NSView
00000000001a83f7 .objc_class_name_NSWindow
00000000001a8411 .objc_class_name_NSWorkspace

And a shiteload of other (sometimes wild) references...

00000000001a842e _ATSFontGetHorizontalMetrics
00000000001a844b _ATSUBatchBreakLines
00000000001a8460 _ATSUCreateStyle
00000000001a8471 _ATSUCreateTextLayoutWithTextPtr
00000000001a8492 _ATSUDisposeStyle
00000000001a84a4 _ATSUDisposeTextLayout
00000000001a84bb _ATSUDrawText
00000000001a84c9 _ATSUFindFontFromName
00000000001a84df _ATSUGetGlyphBounds
00000000001a84f3 _ATSUGetLineControl
00000000001a8507 _ATSUGetSoftLineBreaks
00000000001a851e _ATSUGetUnjustifiedBounds
00000000001a8538 _ATSUSetAttributes
00000000001a854b _ATSUSetLayoutControls
00000000001a8562 _ATSUSetTransientFontMatching
00000000001a8580 _AudioConverterDispose
00000000001a8597 _AudioConverterFillComplexBuffer
00000000001a85b8 _AudioConverterNew
00000000001a85cb _AudioConverterReset
00000000001a85e0 _AudioOutputUnitStart
00000000001a85f6 _AudioOutputUnitStop
00000000001a860b _AudioUnitInitialize
00000000001a8620 _AudioUnitSetParameter
00000000001a8637 _AudioUnitSetProperty
00000000001a864d _AudioUnitUninitialize
00000000001a8664 _AuthorizationCreate
00000000001a8679 _AuthorizationExecuteWithPrivileges
00000000001a869d _AuthorizationFree
00000000001a86b0 _CFBundleGetBundleWithIdentifier
00000000001a86d1 _CFBundleGetIdentifier
00000000001a86e8 _CFBundleGetInfoDictionary
00000000001a8703 _CFBundleGetMainBundle
00000000001a871a _CFDataCreate
00000000001a8728 _CFDataCreateWithBytesNoCopy
00000000001a8745 _CFDataGetBytePtr
00000000001a8757 _CFDataGetLength
00000000001a8768 _CFDateFormatterCreate
00000000001a877f _CFDateFormatterCreateStringWithDate
00000000001a87a4 _CFDictionaryCreateMutable
00000000001a87bf _CFDictionaryGetValue
00000000001a87d5 _CFDictionarySetValue
00000000001a87eb _CFGetAllocator
00000000001a87fb _CFLocaleCopyCurrent
00000000001a8810 _CFNumberCreate
00000000001a8820 _CFNumberGetValue
00000000001a8832 _CFPropertyListCreateFromStream
00000000001a8852 _CFReadStreamClose
00000000001a8865 _CFReadStreamCreateWithFile
00000000001a8881 _CFReadStreamOpen
00000000001a8893 _CFRelease
00000000001a889e _CFRetain
00000000001a88a8 _CFRunLoopAddObserver
00000000001a88be _CFRunLoopObserverCreate
00000000001a88d7 _CFRunLoopRemoveObserver
00000000001a88f0 _CFStringCompare
00000000001a8901 _CFStringCreateWithBytes
00000000001a891a _CFStringCreateWithCString
00000000001a8935 _CFStringCreateWithCStringNoCopy
00000000001a8956 _CFStringCreateWithCharactersNoCopy
00000000001a897a _CFStringCreateWithFormat
00000000001a8994 _CFStringGetCString
00000000001a89a8 _CFStringGetCharacters
00000000001a89bf _CFStringGetFileSystemRepresentation
00000000001a89e4 _CFStringGetLength
00000000001a89f7 _CFStringGetMaximumSizeForEncoding
00000000001a8a1a _CFStringGetMaximumSizeOfFileSystemRepresentation
00000000001a8a4c _CFURLCopyFileSystemPath
00000000001a8a65 _CFURLCopyLastPathComponent
00000000001a8a81 _CFURLCopyScheme
00000000001a8a92 _CFURLCreateCopyDeletingLastPathComponent
00000000001a8abc _CFURLCreateFromFSRef
00000000001a8ad2 _CFURLCreateFromFileSystemRepresentation
00000000001a8afb _CFURLCreateWithFileSystemPath
00000000001a8b1a _CFURLGetFSRef
00000000001a8b29 _CFURLGetFileSystemRepresentation
00000000001a8b4b _CFUUIDCreate
00000000001a8b59 _CFUUIDCreateString
00000000001a8b6d _CGBitmapContextCreate
00000000001a8b84 _CGBitmapContextGetData
00000000001a8b9c _CGColorCreate
00000000001a8bab _CGColorRelease
00000000001a8bbb _CGColorSpaceCreateWithName
00000000001a8bd7 _CGColorSpaceCreateWithPlatformColorSpace
00000000001a8c01 _CGColorSpaceRelease
00000000001a8c16 _CGContextAddArc
00000000001a8c27 _CGContextAddLineToPoint
00000000001a8c40 _CGContextBeginPath
00000000001a8c54 _CGContextClipToRect
00000000001a8c69 _CGContextClipToRects
00000000001a8c7f _CGContextClosePath
00000000001a8c93 _CGContextDrawImage
00000000001a8ca7 _CGContextFillPath
00000000001a8cba _CGContextFillRect
00000000001a8ccd _CGContextMoveToPoint
00000000001a8ce3 _CGContextRelease
00000000001a8cf5 _CGContextRestoreGState
00000000001a8d0d _CGContextRetain
00000000001a8d1e _CGContextSaveGState
00000000001a8d33 _CGContextSetAlpha
00000000001a8d46 _CGContextSetFillColorWithColor
00000000001a8d66 _CGContextSetInterpolationQuality
00000000001a8d88 _CGContextSetLineWidth
00000000001a8d9f _CGContextSetStrokeColorWithColor
00000000001a8dc1 _CGContextStrokePath
00000000001a8dd6 _CGDataProviderCreateWithData
00000000001a8df4 _CGDataProviderRelease
00000000001a8e0b _CGDisplayPixelsHigh
00000000001a8e20 _CGEventCreate
00000000001a8e2f _CGEventGetFlags
00000000001a8e40 _CGEventGetLocation
00000000001a8e54 _CGImageCreate
00000000001a8e63 _CGImageCreateWithImageInRect
00000000001a8e81 _CGImageGetBitmapInfo
00000000001a8e97 _CGImageGetBitsPerComponent
00000000001a8eb3 _CGImageGetBytesPerRow
00000000001a8eca _CGImageGetHeight
00000000001a8edc _CGImageGetWidth
00000000001a8eed _CGImageRelease
00000000001a8efd _CGMainDisplayID
00000000001a8f0e _CGSFindWindowByGeometry
00000000001a8f27 _CMCloseProfile
00000000001a8f37 _CMOpenProfile
00000000001a8f46 _CloseComponent
00000000001a8f56 _CloseResFile
00000000001a8f64 _CopyProcessName
00000000001a8f75 _Count1Resources
00000000001a8f86 _DisposeHandle
00000000001a8f95 _FNNotify
00000000001a8f9f _FSCopyAliasInfo
00000000001a8fb0 _FSFindFolder
00000000001a8fbe _FSMakeFSRefUnicode
00000000001a8fd2 _FSNewAlias
00000000001a8fde _FSOpenResFile
00000000001a8fed _FSPathMakeRef
00000000001a8ffc _FSRefMakePath
00000000001a900b _FindNextComponent
00000000001a901e _Fix2X
00000000001a9025 _Get1IndResource
00000000001a9036 _GetCurrentButtonState
00000000001a904d _GetCurrentEventButtonState
00000000001a9069 _GetHandleSize
00000000001a9078 _GetIconRefFromFileInfo
00000000001a9090 _GetNextProcess
00000000001a90a0 _GetProcessBundleLocation
00000000001a90ba _GetWindowBounds
00000000001a90cb _HLock
00000000001a90d2 _HUnlock
00000000001a90db _IconRefToIconFamily
00000000001a90f0 _LSFindApplicationForInfo
00000000001a910a _LSOpenFromRefSpec
00000000001a911d _Microseconds
00000000001a912b _NSApp
00000000001a9132 _NSApplicationDidBecomeActiveNotification
00000000001a915c _NSApplicationDidHideNotification
00000000001a917e _NSApplicationDidResignActiveNotification
00000000001a91a8 _NSApplicationDidUnhideNotification
00000000001a91cc _NSConnectionDidDieNotification
00000000001a91ec _NSDefaultRunLoopMode
00000000001a9202 _NSDragPboard
00000000001a9210 _NSEqualPoints
00000000001a921f _NSEqualSizes
00000000001a922d _NSEventTrackingRunLoopMode
00000000001a9249 _NSFontAttributeName
00000000001a925e _NSForegroundColorAttributeName
00000000001a927e _NSHTMLPboardType
00000000001a9290 _NSHomeDirectory
00000000001a92a1 _NSLinkAttributeName
00000000001a92b6 _NSLog
00000000001a92bd _NSModalPanelRunLoopMode
00000000001a92d6 _NSOffsetRect
00000000001a92e4 _NSPointInRect
00000000001a92f3 _NSRTFDPboardType
00000000001a9305 _NSRTFPboardType
00000000001a9316 _NSRectFill
00000000001a9322 _NSSearchPathForDirectoriesInDomains
00000000001a9347 _NSStringPboardType
00000000001a935b _NSTemporaryDirectory
00000000001a9371 _NSURLPboardType
00000000001a9382 _NSUnderlineStyleAttributeName
00000000001a93a1 _NSWindowDidBecomeMainNotification
00000000001a93c4 _NSWindowDidDeminiaturizeNotification
00000000001a93ea _NSWindowDidMiniaturizeNotification
00000000001a940e _NSWindowDidMoveNotification
00000000001a942b _NSWindowDidResizeNotification
00000000001a944a _NSWindowWillCloseNotification
00000000001a9469 _NSWorkspaceDestroyOperation
00000000001a9486 _NSWorkspaceWillPowerOffNotification
00000000001a94ab _NSWorkspaceWillSleepNotification
00000000001a94cd _NSZeroPoint
00000000001a94da _NSZeroRect
00000000001a94e6 _NSZeroSize
00000000001a94f2 _OpenAComponent
00000000001a9502 _PBCloseForkSync
00000000001a9513 _PBCreateDirectoryUnicodeSync
00000000001a9531 _PBCreateFileUnicodeSync
00000000001a954a _PBGetCatalogInfoSync
00000000001a9560 _PBIterateForksSync
00000000001a9574 _PBMakeFSRefUnicodeSync
00000000001a958c _PBOpenForkSync
00000000001a959c _PBReadForkSync
00000000001a95ac _PBWriteForkSync
00000000001a95bd _ProcessInformationCopyDictionary
00000000001a95df _PtrToHand
00000000001a95ea _ReleaseIconRef
00000000001a95fa _ReleaseResource
00000000001a960b _SCDynamicStoreCopyProxies
00000000001a9626 _SecKeychainAddGenericPassword
00000000001a9645 _SecKeychainItemCopyContent
00000000001a9661 _SecKeychainItemDelete
00000000001a9678 _SecKeychainItemFreeContent
00000000001a9694 _SecKeychainItemModifyContent
00000000001a96b2 _SecKeychainSearchCopyNext
00000000001a96cd _SecKeychainSearchCreateFromAttributes
00000000001a96f4 _UCCompareTextDefault
00000000001a970a _X2Fix
00000000001a9711 __CGSDefaultConnection
00000000001a9728 __NSAddHandler2
00000000001a9738 __NSExceptionObjectFromHandler2
00000000001a9758 __NSRemoveHandler2
00000000001a976b __Unwind_Resume
00000000001a977b __ZN9__gnu_cxx18__exchange_and_addEPVii
00000000001a97a3 __ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv
00000000001a97dc __ZNSolsEb
00000000001a97e7 __ZNSolsEi
00000000001a97f2 __ZNSolsEm
00000000001a97fd __ZNSs4_Rep10_M_disposeERKSaIcE
00000000001a981d __ZNSt15_List_node_base4hookEPS_
00000000001a983e __ZNSt15_List_node_base6unhookEv
00000000001a985f __ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode
00000000001a98a9 __ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev
00000000001a98e3 __ZNSt8ios_base4InitC1Ev
00000000001a98fc __ZNSt8ios_base4InitD1Ev
00000000001a9915 __ZSt17__throw_bad_allocv
00000000001a992f __ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base
00000000001a9960 __ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base
00000000001a9991 __ZSt20__throw_length_errorPKc
00000000001a99b0 __ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_
00000000001a99ee __ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_
00000000001a9a31 __ZSt4cout
00000000001a9a3c __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
00000000001a9a78 __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
00000000001a9ab1 __ZTVN10__cxxabiv117__class_type_infoE
00000000001a9ad8 __ZTVN10__cxxabiv119__pointer_type_infoE
00000000001a9b01 __ZTVN10__cxxabiv120__si_class_type_infoE
00000000001a9b2b __ZTVN10__cxxabiv121__vmi_class_type_infoE

But there are no NIBs in this sucker. Everything seems made on the fly - in code instead.

And you don't see anything but the discreet sign in screen until you (successfully) sign in.

And when you sign in you get your playlists and all your settings no matter you've moved to a new machine.

Local Storage

Some things are stored locally but not many.

  • ~/Library/Application Support/Spotify/settings: less than 100 bytes. Will contain the name of your default account, the login mode, the port to listen on, stuff like that. This is machine specific.
  • ~/Library/Application Support/Spotify/Users: the hive with user specific settings with a separate sub-hive for each account used on the local machine.
  • adfilter, guistate, metadata, playlist: in each user's sub-hive. adfilter and playlist are 'binary'; guistate and metadata are plain text, possibly UTF-8 text, resembling Firefox settings files. metadata gets big - 100 KB or more - but can be removed once you've exited the app (and absolutely not before). What correlation metadata has to anything remains a mystery. guistate is as its name implies; the wonder is this thing comes up on screen as fast as it does.
  • ~/Library/Caches/com.spotify.client/Storage: where the caches are stored. The app will eventually get round to creating 256 directories here, names of two characters for all hex numbers between 00 and ff.

Slow Rollout

The Spotify group aren't about to make the same infinite blooper Apple made earlier this year with three simultaneous product releases and nothing at all working. So far everything is working at least as well as planned for Spotify and they seem intent on keeping things that way.

Spotify launched on 7 October and currently is available in the UK, Germany, France, Italy, Spain, Finland, Norway and Sweden. None of Spotify's four server groups are located in Sweden - possibly a tip of the hat here to PM Reinfeldt's abortive Lex Orwell. For now your Spotify service comes to you courtesy of three other European (not necessarily EU) countries.

Spotify is rolling out to further markets and will continue to do so in 2009 so be patient - it's well worth the wait.

They Love It

And it's not just Spotify users who love the product - it's the record companies too. A while back Rick Falkvinge scolded the RIAA, telling them they have to find the ingenuity of their predecessors and come up with new ways to make money - inasmuch that is as their then current model was a crash.

And the big music morons didn't come up with this one - Spotify did. But it works; the RIAA got their work done for them; and they're all behind it. Naturally they are.

Rob Wells of the Universal Music Group:

Subscription streaming services are the future of digital music consumption. Spotify is an excellent consumer experience and Universal Music Group International is delighted to be a part of the launch.

Ulrich Jaerkel of Sony BMG:

We are excited to be working with Spotify as they develop this distinctive online destination that will include both ad-supported content as well as quality premium packages. With such an easy to navigate interface and wide variety of music and features for users to enjoy Spotify promises to be an online fan favourite.

Stefan Blom of EMI:

EMI is committed to supporting innovative and user friendly music services. Spotify is a compelling new way of connecting artists and fans which reflects the shift we are seeing in digital music from a total reliance on a la carte services to the addition of new models that provide instant and legal access to our artists' music.

Leanne Sharman of Warner Music:

From launch Spotify is a wide ranging flexible and engaging music experience. By offering a compelling choice of ad supported and paid for services the platform is in a strong position to foster a loyal community of users and attract advertisers. Not only that - Spotify will be a powerful promotional and discovery engine through which our roster of artists can grow their fan bases.

So they're enthusiastic. They should be: they're getting a lot for free. At almost every turn in the road they profit. And you the music lover still get all your tracks for free. And if you still want to download? Then you do. Burn a few CDs. Put the tracks on an iPod anyway.

But iTunes is yesterday. Day before yesterday. Hassle an account, login, credit card transactions, listening only to short clips of songs before you buy - you're going to miss a lot. Where do you go to find the full versions of the songs?

On your favourite radio station? What are they going to play? Precisely.

The record companies have put everything online with Spotify. Anything that's previously been digitalised. It's there. Barring a few artists who've become infamous by refusing to cooperate already with other services. Such as the Beatles and Pink Floyd.

Otherwise you're going to find originals and collections of originals dating back as far as digitalised recorded music goes.

Looking for a holiday track or two? The Christmas Song by author Mel Tormé? Or the 1946 Nat King Cole Trio version? Or the soppy 1963 Nat King Cole version? Or the great Twisted Sister version? Or the version by old Blue Eyes himself?

It takes but a second and a half on a slow as molasses line and they're all yours.

Swim in it.

See Also
Software Reviews: The Good: Spotify 0.3.9

About | Buy | Forum | Industry Watch | Learning Curve | Products | Search | Twitter | Xnews
Copyright © Rixstep. All rights reserved.