Archive for the ‘Projects’ Category

NicePlayer, Lion beta edition

Sunday, September 18th, 2011

I’ve built a new version of NicePlayer that plays nicer with Lion. Please test it out and let me know whether you run into any issues. If no one runs into any problems then we will post this as a NicePlayer update. Download NicePlayer 0.97.9-rc pre-release.

NicePlayer 0.96

Thursday, November 8th, 2007

For those of you who didn’t notice, we released NicePlayer 0.96 two weeks ago, most importantly bringing compatibility with Leopard. It also has progressive movie loading status in the scrubbing area, as well as some subtitle fixes (most of the features in this version were brought to you by Jay). There are also some other minor bug fixes… we’re always looking for suggestions, and now that NicPlayer is open source, we’re also open to accepting patches for new features.

Active Timer 1.3.3

Thursday, November 8th, 2007

I’m currently busy working on the next version of Active Timer — including features such as:

  • Being able to block certain applications
  • Attribute last idle time to a task (after coming back from idle, you can assign the previous idle interval to a specific item)
  • And more!

New in this sub-update:

  • Fixed problem with negative times (the main reason I am releasing this interim update)
  • Start/Pause is now assigned to enter key, just hit enter and go.
  • An easier way to deselect all items (just click on the label, “Sum of times:” — before you had to command click to deselect a selected item)

F-Script Anywhere, Leopard Edition

Wednesday, October 17th, 2007

For all of you developers using Leopard out there, I bring you an updated version of F-Script Anywhere, designed specifically to work with new features in Leopard. Since the old (and not so secure) way of adding yourself to the procmod group no longer works in Leopard, F-Script Anywhere has adopted the new method of using code signing authentication. Code signing allows you to trust specific developers and applications so that only those apps can use task_for_pid(), the call critical to F-Script Anywhere and similar apps. This provides enhanced security. All of the certificate copying is built into F-Script Anywhere, you just need to trust the included public certificate (F-Script Anywhere will try to add it to your keychain, you just need to accept the certificate). You may also need to restart your computer (there appears to be a certificate cache on Leopard that doesn’t always update properly).

Without further ado, F-Script Anywhere 1.3.1, Leopard Edition. F-Script Anywhere is now distributed as part of F-Script, at Note that source is available through Nicholas Riley’s trac/subversion server. If you wish to compile your own source, you will have to copy your public certificate into the appropriate place in the source tree. This needs to be a code signing certificate, either generated by a certificate authority or self created.

RSS Growler

Wednesday, April 18th, 2007

So at work we use a combination of subversion for source code control and Trac to… well, to provide an RSS feed I think. I actually don’t know why we use Trac specifically, since I don’t think we use any of its other features other than the commit notification stuff. In any case, one of the best features of Trac is its ability to create an RSS feed for any individual sub portion of your source tree. In case you are wondering why this is excellent — well, getting hundreds of commit e-mails for every commit to projects you don’t really care too much about, combined with the fact that I find commit e-mails to be kind of annoying due to them interrupting my general workflow, means that I was quite looking forward to when our group was going to switch to subversion and use Trac. Unfortunately after this happened, I was unable to use an RSS reader until the sys admin re-enabled http authentication (web authentication forms are evil!), as all of the server is password-protected. And even after this got fixed, I tried pretty much every RSS client out there (I was used to using Pulp Fiction, but it really just treats RSS feeds as e-mails, more or less). One of my requirements was Growl support, since that seemed like it would make my life much easier: to get a Growl notification for every commit. I really liked the idea of RSS Menu, but it was kind of inadequate in this regard — it simply sent a “new feed item received” typed Growl notification. This was mostly unhelpful. For a few days, I tried NewsFire (which is really annoying by the way, if you haven’t paid for it. If you want to try it out, it continually bounces its dock icon every few hours telling you to register — it would be nice if it didn’t do this until you had at least tried the app for a couple of days). NewsFire was pretty cool (and impressively shiny!), since it did pretty much what I wanted with Growl, but even still I liked the idea of the app being more minimalist like RSS Menu.

My first thought was to e-mail the RSS Menu author, in the hopes that he would be amenable to making the Growl changes I wanted. He was quite nice in telling me that he was rewritten portions of the app and that it might be awhile. Oh well. My second thought was, “well, how hard can it be to write an RSS Reader?” I had already done something simple in the past using libxml2 on Linux, in order to automatically torrent files from and RSS feed based on regex matching. I figured I could just use this source as a starting point, and everything would be great.

Well, one weekend later (and a couple of days of testing), I bring to you the new app RSS Growler. It’s powered by core data (quite fun to use, once you understand how it works), web kit, and Growl. It works impressively well, and is extremely shiny because it is designed specifically with trac RSS feeds in mind (although it will probably working fine with other RSS feeds as well).

It is pretty cool in that it manages multiple feeds and takes the top most recent feeds, showing them in the main drop down menu, with older feeds in submenus (it is a menubar app, like RSS Menu). It recognizes if your feed is a trac feed and parses it, finding web links in the commit log and displays them as sub menu items with regards to the main feed item. For each item in the top most recent feeds, it automatically gets the item via web kit and caches it to your hard drive as a safari webarchive. Then when you click on the link, it opens up the cached version of the page. It displays all of the information you need in the Growl notification (revision number along with author, and the commit log), and it has the option of show each separate feed as a separate item in Growl, so that you can customize the display per feed.

The one caveat is that you want to make sure you use a trac feed that has verbose=on in the query string, which you can do by customizing the display of the revision log before clicking the RSS button in safari to get the RSS link — this way you get the entire commit log and not just the first sentence or so.

Anyway, I think it’s really great, and so have some other people — so visit the RSS Growler page now!

NicePlayer Progress

Saturday, February 3rd, 2007

With the new year brings a new release of NicePlayer. Now with updated resources for enhanced prettiness, as well as fixes for some of the bad crashes that have been happening. There are now more preferences for double click/right clicking action, as well as a preference to preserve the audio volume across new window openings. NicePlayer is now open source, so feel free download the source and contribute patches! Since NicePlayer is open source, we are now offering a downloadable package that includes installers for all of the greatest open source quicktime component codecs.

F-Script Anywhere 1.3

Monday, June 12th, 2006

Hot on the heels of F-Script Anywhere Universal comes F-Script Anywhere 1.3. Apart from being a universal binary, this release adds several new features:

  • Auto-injection: For those used to the SIMBL version of F-Script Anywhere, FSA will now let you auto-inject applications. If for some reason auto-injection is causing your app to crash on launch, apps in the auto-inject list can be removed via the FSA preferences.
  • Auto F-Script framework install: If you lack the F-Script framework, or your F-Script framework is out of date, FSA will prompt you and you will have the option to auto install or upgrade your framework.
  • Auto adding to procmod group: If necessary, you will be prompted to authenticate as an administrator to add your user to the procmod group. This is currently necessary on Intel-based macs.
  • Faster browser access: You now have the ability to open a browser for an object via a target directly from the FSA menu. This removes the need to go to the special capture window, or to create a new browser and then choosing “select view.” The FSA “browser for target…” option is also faster than the F-Script “select view” button since it allows direct selection of various classes in the object’s hierarchy (this functionality existed before but is now easier to access).
  • Deprecated dialogs now removed: The key-value window has been removed, as it is now a deprecated part of F-Script. Also the naming functionality in FSA has been removed in favor of the “name” button in F-Script browser windows.

F-Script Anywhere is now distributed along with the F-Script framework and application set, but if you don’t want the entire F-Script app set, you can get just the FSA binary (includes the latest framework bundled).

NicePlayer 0.94

Wednesday, June 7th, 2006

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

Friday, May 12th, 2006

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.

F-Script Anywhere Universal!

Saturday, May 6th, 2006

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.