We just released NicePlayer 0.94 onto the world. It has a number of new features, including support for the Apple Remote (check the preferences for what controls what — it’s not currently customizable, but that might be added in the future depending on the feedback we receive). NicePlayer also now uses almost no CPU when idle, since it takes better advantage of mouse tracking rects, as well as fixing some dvd display problems. All dvd display problems have been fixed (some new issues cropped up with the latest 10.4.6 update), my understanding is that these issues prevent NicePlayer from working properly on anything earlier than 10.3, so be warned. Also you now have the ability to do a “smart resize” (see the preferences — change “resize from” to “screen edge”). This will try and make sure that when you resize the window, the window will never get resized offscreen. This version of NicePlayer is also a universal binary so that you can finally watch those movies on your intel machine full screen without performance problems. No xine plugin yet (still having problems getting it to work, although I have gotten the source to compile), stay tuned on that.
Active Timer 1.3 has been released unto the world! It has improved accuracy (sub millisecond precision — and no, this doesn’t take any additional processing power), better idle time calculation (idle time will now be retroactively transferred to the idle category!) and if those features weren’t enough — it’s now able to keep track of your per-window spent time. This is the first release where I’ve used a small pool of beta testers. This was immensely successful, allowing me to track down many more bugs than usual. As such, I’m looking to expand the Active Timer beta test pool, so leave a comment if you want to join the pool (if you haven’t left a comment already).
If you have any requests for Active Timer 1.4, please also leave a comment. I’ll be deciding on the feature set for 1.4 in the next few weeks and welcome all input. In the mean time, I’ll be working on F-Script Anywhere and NicePlayer.
F-Script Anywhere is coming along nicely — the next release will have an auto-injection feature, to allow you to choose a set of applications that you want F-Script Anywhere to automatically inject into (this was a request by Ken Ferry, who enjoyed this feature which was a result of the SIMBL version of FSA). FSA just needs a little more testing before release.
NicePlayer has been built as a universal binary, however I’ve been holding off on its release until I can get the Xine Plugin to also work universal. I’ve spent many hours on the Xine-lib code getting it to compile, but it’s slow going due to a number of complicated issues. I’d welcome any comments pertaining to whether people think that NicePlayer universal should be released before Xine Plugin universal.
Today has been a week of much coding — a new release of Active Timer will be out soon (more on that later) and I’ve just finished the work getting F-Script Anywhere to work on Intel. For those of you asking, the code I am working on is from Nicholas Riley’s top of tree. It looks like I’ll be taking over maintenance of FSA for the time being, and as such Nick will be giving me access to his repository so I can commit my changes in. This is a good thing, as the source right now for the various versions exists in different directories across my G5 and MacBook. Both PPC and Intel versions of FSA are powered by mach_inject (the mach inject work for FSA was primarily done by Nick), and with the recent work (well, somewhat recent) by Bertrand Guiheneuf on mach_inject for intel, I was able to get a version of FSA working fairly easily. Note that on intel you will have to follow the instructions on how to enable cross-task control. So without further ado I bring to you F-Script Anywhere Universal.
Some slight notes for this version as far as the specific work that was required. I’m not sure if this will be of any use to anyone, but it will allow me to document what I’ve done somewhere. Currently this binary is stitched together using lipo and built on two separate machines, since it requires some darwin source to be built for various reasons. Additionally the binary currently doesn’t work on intel when built with debug symbols, I imagine this has something to do with how much space the code takes up, but I’m not sure and I didn’t bother to find out. Also lipo failed me with the internal SCPatchLoader bundle, since a lipo’d binary would end up resulting in a vm_allocate error when running on ppc (although it would run fine on intel). I really have no idea what could cause this to happen (maybe some sort of alignment error? I don’t know), but it sounds like it probably should be some sort of lipo bug maybe. So I ended up working around this by including two bundles, a ppc and an intel bundle that gets dynamically loaded depending on the machine you’re on. Anyone who wants a copy of the source should send me an e-mail, and I can hook you up.
As far as Active Timer goes, I’ve been working on a much improved version that allows you to track the time spent in each window as well as each application. I’ve also implemented some more precise timing functionality and the ability to automatically transfer idle time to the idle category when the app detects that you have been idle. Hopefully this will be the first in a series of updates for Active Timer that will make it even better than it is currently. I’m hoping to release this version sometime in the coming week, assuming no large bugs show up. For all of those who want to test out a beta version, leave a comment.
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?