So ‘Disco‘ (you know, that Disc burning program that does a fraction of what Disk Utility does but actually costs money) is now available as a public beta.
One of the most controversial “features” of the program is the fact that the main window actually smokes when a disc is being burnt. Poking inside the bundle of Disco.app I came across Smoke.framework with what looks like full headers included.
Ignoring the dangers of passive smoking for a moment I decided it would be fun to try and use the smoke effect in a test application.

And here’s a quick movie to illustrate the pretty smoke animation:
Now you too can add the smoke effect to your own applications. Download the public beta of Disco (version 1.0b3 according to the Finders “Get Info” window). Be quick. I’d imagine that the next release of Disco wont include headers for the framework. Move the application to your /Applications folder. Then download my test application here: SecondHandSmoke.zip.
You should be able to compile and run “SecondHandSmoke” (it will warn that it cannot find OSXHIGuidelines.pdf - but do like the Disco authors did and ignore that warning). If your hardware is capable enough you should be able to see the smoke effect rising from the top of the window. (It might take 10 to 20 seconds for the smoke to appear).
You can change the smoke parameters by using the smoke settings window (dialog? pane? view?) within Disco. Then just copy Disco’s prefs (com.discoapp.Disco.plist) to SecondHandSmoke’s prefs (com.example.SecondHandSmoke.plist).
Feel free to add smoke to your own applications, Brent - NNW users expect the main window to Smoke now. Dan, don’t feel left behind, Sandvox needs to smoke. All the cool kids are doing it. Peer pressure is a bitch.
Update Predictably the guys at DiscoApp have removed the headers from the framework. Of course they refrained from rev-ing the version number of the beta. So now there are two 1.0b3 versions of DiscoApp in the wild. 1.0b3 (with headers) and 1.0b3 (without). Bad developer. No cookie.
Of course removing the headers does nothing to stop you from using class-dump to generate your own headers (and pretty cool headers they are - look at all those CIFilter subclasses). I’ve just uploaded an amended project that includes a class-dumped header. You’ll need to install Disco 1.0b3 (sans headers) into /Applications as before.
Update 2 Just had a nice AIM conversation with Austin Sarner, one of the authors of Disco, and he seems to be quite amused by this little hack. Although I really don’t like the use of the smoke effect in Disco, I completely support their attempts to innovate.
Update 3 I took 15 minutes to hack the Smoke framework into a SIMBL plugin so that any application can have the smoke effect (why wait for developers to innovate?). I’m not distributing this project as it requires a modification of the Smoke framework itself, but here’s a movie: HolySmokesMovie.mp4
Update 4 Reduce size of movie to 640×480 to keep people with smaller screens happy.
Update 5 My code no longer works. For an updated description of how to get the smoke working see: dev.lipidity.com
Add New Comment
Viewing 20 Comments
Thanks. Your comment is awaiting approval by a moderator.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Very slick code by the way. I don't like how the code is being used within Disco (as you might have been able to tell from the tone of my post ;-) But I love the effect itself. Very cool. Very interesting looking at the cikernel code too. Very slick indeed.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Wow, that just hit me as so funny. Thanks for the laugh!
Do you already have an account? Log in and claim this comment.
Also, it's great that you made this post public so their lawyers can contact you easily.
Keep up the good work!
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Dave: glad you enjoyed it.
Indigo: You're on your own :-)
Do you already have an account? Log in and claim this comment.
class-dump Disco.app/Contents/Frameworks/Smoke.framework/Versions/A/Smoke
I don't know why they bothered to take them out.
(class-dump is available from http://www.codethecode.com/Projects/class-dump/ )
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
That's just silly.
Do you already have an account? Log in and claim this comment.
But, if you've chatted with one of the developers and he/she says it's okay, no harm done. Have the developers really confirmed that they meant for other developers to use Smoke.framework? (Having removed the headers from the shipping product indicates to me that the answer is probably no...)
Do you already have an account? Log in and claim this comment.
The DiscoApp developer I smoke (Austin) even mentioned sponsoring a contest for the best smoke related hacks with free copies of Disco to the winners. Basically I think that they look at this as extra free publicity.
Do you already have an account? Log in and claim this comment.
Awesome hack, wish I knew Objective-C so I could actually make use of it, but still cool.
Do you already have an account? Log in and claim this comment.
There's really only one feature of Disco that interests me, and that's "Spandex". Given the above statement, can Disk Utility do what Spandex does, and if so how? It's something I've been trying to figure out for some time.
Do you already have an account? Log in and claim this comment.
Spandex is nothing special, it actually doesnt seperate large files, it just splits up the directories amoungst multiple discs... wupdidoo. So if you have one huge video file, it won't even be able to span.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
That's quite true but there's a certain derision in the post about how Disco is charging for features that are available free in Disk Utility. I think there's some value in the streamlined interface that does automatic spanning and indexing and automatically chooses the type of disc to be burned based on the context of the files being thrown at it.
While most expert users would have no use for this I could see a lot of novice users finding a use for a utility like that (I don't know how many times I've had to explain that you can't just burn MP3s or VIDEO_TS folders as normal data CDs and expect them to work in the normal media players...)
I think the main problem though is that demographic is one of the least likely type of users to look on the internet for a third-party shareware solution.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
However, it doesn't work when using the framework from Disco 1.0. I've taken another class-dump, but I can't beat the errors. Maybe I should've kept a copy of the beta version... Anyone got any ideas?
Add New Comment