For those of you who use F-Script Aywhere to inject f-script into your running application, you have probably noticed that F-Script Anywhere doesn’t work with the latest few releases of F-Script. I’ve updated F-Script Anywhere from Nicholas Riley’s top of tree, and fixed it so that it works properly. This currently only works with ppc binaries, but I’ll look into the work necessary to make F-Script Anywhere work on my intel mac as well next week. For the time being, download FScriptAnywhere.zip. It uses mach_inject (which is what Nicholas Riley was last working on, he held off on release due to a few random crashes, however things are stable enough for my use on a regular basis).
It’s been too long since I last posted. In any case, I was really impressed today when I discovered that Sun has released their UltraSPARC T1 chip design (with multithreading design) under the GPL. You can actually download the entire chip design as a verilog RTL file, which is pretty neat, as well as downloading some other Sun internal tools and some tests. Although the idea for releasing the chip design is to allow developers to write better code for the chip, it would be neat if there were actually external modifications made that eventually made their way into a future revision of the silicon. Or kind of neat if someone else fabbed the same chip using the GPL design, although that seems pretty unlikely.
I wanted to include some information about the development of the Xine plugin for NicePlayer. This plugin is 99.5% due to the work of Richard Wareham, and his XinePlayer project that made this plugin possible. Before working on the Xine plugin, I had looked into either doing a plugin with VLC or MPlayer, the two most popular media players on the Mac. Unfortunately it looked like MPlayer would have been hard to support given its desire to run each movie in its own process — I wasn’t sure how much work it would take to make MPlayer work more like a traditional player, as opposed to how it currently launches its own window to player media that is separate from the controller. I also looked at VLC, which was impressively complex. At the time, it was fairly complex to build (it may still be that way, I don’t know), requiring tons of dependancies. I tried for several hours on both VLC and MPlayer trying to get a prototype to run, but it was fairly apparent that to do what I wanted, it was going to take a great deal of time. XinePlayer, on the other hand, was factored into two parts: a backend “XineKit” and a frontend “XinePlayer.” This made it very easy to plug into our existing plugin interface. I was also able to use the existing dynamic libraries built by Richard Wareham, which meant that I wouldn’t have to invest large amounts of time downloading codec source code and compiling them on both of my two machines (a Powerbook and a PowerMac). I still hope that someone more familiar with either the VLC or the MPlayer source code will write a plugin for NicePlayer, or at least factor the code in these players to make it easier for me to do so. Additionally, if anyone out there is working on any of this (a plugin for NicePlayer, or refactoring the code to make it easier to plug), please get in contact with me!
As it is, the Xine plugin does a pretty good job of handling a lot of media that QuickTime can’t. There’s something to be said about a project being both complex enough underneath to do what needs to be done, but have a simple enough interface such that developers not familiar with the code can still easily work with it. I sometimes wonder if the reason the VLC project is having a hard time finding OS X developers is due to the fact that it’s hard for people to work in the complexity of their code. It seems to me that they could easily take advantage of all of the UI features of NicePlayer by simplifying their programming interface and creating a plugin — a great benefit to both Xine and NicePlayer users.
We released NicePlayer 0.93 today. The most important feature is the ability to switch the plugin of the currently playing movie dynamically. For those of you using NicePlayer, it tries to detect the appropriate plugins (plugins that claim to be able to open the current file type), but you can hold down option to see all of the plugin choices. The OS X DVD Playback framework appears to be getting worse with each release, which affects NicePlayer somewhat. We’ve done our best to work around the new problems in the framework though. We also fixed some crashes, and you can now play audio files in NicePlayer without the window disappearing. There’s some expanded AppleScript support, including a new AppleScript menu. All in all things keep getting better and better. Unfortunately we’re not able to play protected content (yet), hopefully Apple will fix this in a future update to the OS. If you’re using the Xine plugin, be sure to update, as there are some issues addressed with NicePlayer 0.93 compatibility, including a crash and some undesired behavior when dropping a folder full of media onto NicePlayer. Enjoy!
I released Active Timer 1.2 today. The biggest new feature is probably the fact that it can keep track of your idle time as a separate item. Leave suggestions for new feature in the comments!
So apparently recently the Internet (and blog world) have discovered Active Timer, a small app I wrote about a year and a half ago. Apparently people find the app useful, go figure. Now that other people actually use the app, I’ve become compelled to add a couple features, hopefully sometime this week. It’s also kind of ugly, so I may have to shiny-it-up a bit.
By the way, this entry brought to you by Jay’s recent update.
Jay and I just released the latest version of NicePlayer, 0.92. It includes an updated component that uses CoreVideo (Core Image rendering effects to come in the next release) that makes NicePlayer perform really nicely when resizing the window as compared to using QuickTime on 0.91. I aso simultaneously released the XineLib plugin for NicePlayer, which supports a lot more media types (high def recordings from eyetv, better xvid support, etc.). The plugin architecture is even more flushed out, and the source for both the dvd plugin and xinelib plugin are both available. Does anyone have any good suggestions on features for the next release?
NicePlayer is well on its way to the best media player for mac — ever. I finished implementing a plugin this past week using Xine-lib that plays back a lot more media than QuickTime supports. It does have some minor issues (mostly having to do with setting the playhead point in certain cases) that are Xine bugs, but we can do cool stuff like play back vob and HD mpeg2 files (at full res! requires a G5). This is mostly thanks to XinePlayer being open source — I mostly hacked around the existing Xine view code, refactoring it to adhere to our plugin API. Xine gains all of the great UI things we have in NicePlayer, and NicePlayer gains great playback speed — a win-win.
All of the problems with the resize indicator appearing in funny places have been resolved — the resize indicator now appears on mouseover where the movie resize should be while in full screen mode. I’ve also implemented notification support, so we get cool text notification overlays like DVD Player. There’s also support for non-proportional scaling (actually it pretty much comes for free), and plugin loading order and preferences have been fixed (not that anyone noticed it was broken). We’re probably going to miss our projected release date of 4/17 by a week or two, as we’re trying to get some pretty advanced playlist UI in. But we’re definitely getting closer to a 1.0 release, with probably one or two more interim releases between now and then.
In my free time this past week, I hacked together a couple of new things. The first being Personality Services, a completely useless but totally fun OS X Service that mutates selected text into one of a different personality (Jive, Texan, Swedish Chef, etc.).
I also updated Active Timer, a small app I wrote last year to keep track of how much time I was spending on my senior project versus reading Slashdot. It’s a neat little app, this update doesn’t add much functionality except keeping track of things at seconds resolution (rather than at five seconds). This is a large user interface improvement due to the fact that people would continually download the application, run it for a few seconds, and then decide it didn’t work (it did, but only kept track of things in five second increments). Anyway, this should stem the few complaints posted in the comments on VT. I also redid portions of the app to use Cocoa bindings, just for fun. You can’t really tell though, except now you can sort the various tables, something that comes for free.
I should probably come up with actual project pages for those applications, although I’m kind of ashamed at having spent time creating Personality Services.
In other news, I now have a small portion of VI implemented as a subclass of NSTextView. I hope to bring it to the point where I can use APE to replace all NSTextView subclasses with my class, so that I can get VI commands in every Cocoa text box.
Jay and I release NicePlayer 0.91 over the weekend. I did a lot of work on DVD playback support and the underlying plugin framework. Indeed, the plugin API has been mostly solidified (except for adding support for returning a nib for custom configuration in the plugin preferences), and there’s a even some sample code posted on the NicePlayer web site to help others create plugins. In fact, for anyone who is looking to create their own DVD player using Apple’s DVD Playback API, they need not look further than the provided sample code, which is basically the code that NicePlayer uses to play DVDs. If all goes as planned, the next release will use VLC to play video: not only will it give a great speed boost to playing back divx files and such, but will also provide a better user interface for VLC users.
The other big new feature is AppleScript support — extremely useful for users of the Saline clicker software. There’s a resize widget, as per Nicholas Riley’s suggestion, and the widgets now smoothly fade out after you’ve moved your mouse off of them. While trying to figure out if we could get normal correct window shadows for NicePlayer (we can’t without faking our own — something which makes the app a lot slower), Jay found the following shadow bug in OSX — the non-focused windows with standard OS X shadows have an artifact in them — a thin line running along the bottom, below where the shadow should have faded out. You can see this if you stack several TextEdit.app windows on top of each other, such that the bottom shadow falls on the white space in the window below it (this makes it easier to see). The line is fairly clearly visible, and I’m surprised I didn’t notice it before Jay pointed it out.