The Omni Group Forums

The Omni Group Forums (
-   OmniFocus 1 for Mac (
-   -   OmniFocus Web App alive and kickin'! (

Evan Light 2007-12-22 05:35 AM

OmniFocus Web App alive and kickin'!

As some of you may know, Omni wrote a web front end to OmniFocus. This web application is [b]hosted on your own Mac[/b] but can make data in your OmniFocus accessible on your iPhone. How cool is that?!

Omni has sadly, yet understandably, decided to discontinue effort on the web app. The problem is not the app itself but how to expose the app to the internet. You see, setting up a web server on your Mac at home and then exposing it to the internet is tricky business that your non-hardcore geek Mac user won't enjoy dealing with. Instead, Omni is hoping that the iPhone SDK will answer their prayers in February. I'm right their hoping with them as well.

In the meantime, Omni has graciously released the web app under the extremely permissive MIT license. This means that yours truly, and any and all of you as well, can make improvements/add-ons/bug fixes to it and release them in the wild!

The web app is written in Ruby on Rails. That was all that I had to hear. You see, I [b]LOVE[/b] Ruby. Yes, indeed, [U]I love Ruby with [B]bold[/B] CAPITAL letters.[/U]

[URL=""] I recently set up a project on RubyForge[/URL] to help me manage my changes to the application but also make it easy for others to become involved. RubyForge greatly simplifies the sharing of a codebase; it provides forums, mailing lists, version control, and other great features.

Even if you're not a code monkey, like yours truly, come on by and create an account! Or, at the very least, join the mailing list! The "tracker" there will allow you to report bugs, provide suggestions, etc.

If you've already written some code for the web app, submit it as a patch via the tracker as well. If you're code is decent, I'll be more than glad to give you commit rights on the project so that we can communally add features faster.

What I intend to do, other than write beautiful (I hope so... ;-) ) Ruby code for this project is to try to moderate the technical discussion. In particular, I'm a fan of Omni's approach to the web app -- which has been to keep it fairly focused around ACTING and less on PLANNING. That said, I realize that some users will demand more of their OmniFocus web app. This is where we can provide [b]optional[/b] features to the web app such as a planning UI or a non-iPhone style for those who want to access the app via a web browser on another platform.

I hope that some of you out there are as excited about OmniFocus and OmniFocus' web app as I am. Omni has done a great thing for GTD'ers with OmniFocus and especially by releasing the OF web app under MIT. Now let's help each other out and make this web app all that it can be!

Project files: [url=][/url]
README: [url=][/url] (some instructions regarding port forwarding and Dynamic DNS for those behind routers at home -- which is almost everyone)

[i]Update 1/10/08[/i]: v0.1.2 is available which corrects the bug folks were having when adding a new task.


Evan Light 2007-12-22 05:43 AM

I forgot to add: if you submit a patch to the web app, you will score super huge brownie points (i.e., almost certain to get instant commit rights) if you also submit unit tests for all of your code.

I'm going to be using RSpec, my favorite "testing" (really, behavior driven development...) DSL with this project. Please submit your specs using RSpec as well. Converting from Test::Unit or some other DSL to RSpec will make Evan cry...

steve 2007-12-22 06:30 AM


I used the web app and enjoyed it when it first came out. Do you know if there any instructions anywhere on how to use the latest version? Thanks for taking the leadership on this. I agree that the focus should be on action.


Evan Light 2007-12-22 06:37 AM

Steve: it's near the top of my TODO list for the project.

xmas 2007-12-22 12:06 PM

Added to the "FAT" sticky for new users to easily see this post.

The old thread is: [url][/url]

Evan Light 2007-12-22 02:40 PM

Put up an initial "release" (really "re-release") of dansays work plus some minor changes to the infrastructure that, hopefully, will not effect users.

1. Added RSpec 1.1.1 to support contributing developers
2. Removed test directories
3. Added RB-AppScript v0.5.0 with native extensions built on 10.5.1

10.4.2 and below users: let me know if you run into problems. This has only been tested on 10.5.1; these changes have only been tested on Tiger and below.

The release is accessible from the RubyForge link provided in the original post.

mhedstrom 2007-12-26 07:36 PM

Thanks for doing this! However I get an error when trying to add something to the inbox:

Processing InboxController#add (for at 2007-12-25 23:28:58) [POST]
Session ID: 8708ce2a1c418d119e2883c418a785aa
Parameters: {"action"=>"add", "controller"=>"inbox", "inbox_item_name"=>"listen to podcast"}

RuntimeError (Unknown property, element or command: 'start'):
.//vendor/rb-appscript-0.5.0/src/lib/appscript.rb:661:in `method_missing'
.//app/controllers/inbox_controller.rb:15:in `add'
.//vendor/rails/actionpack/lib/action_controller/base.rb:1095:in `send'
.//vendor/rails/actionpack/lib/action_controller/base.rb:1095:in `perform_action_without_filters'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:632:in `call_filter'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:638:in `call_filter'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:600:in `call'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:600:in `proxy_before_and_after_filter'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:470:in `call'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:470:in `call'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:637:in `call_filter'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:638:in `call_filter'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:449:in `call'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:637:in `call_filter'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:619:in `perform_action_without_benchmark'
.//vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
.//vendor/rails/actionpack/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
.//vendor/rails/actionpack/lib/action_controller/rescue.rb:83:in `perform_action'
.//vendor/rails/actionpack/lib/action_controller/base.rb:430:in `send'
.//vendor/rails/actionpack/lib/action_controller/base.rb:430:in `process_without_filters'
.//vendor/rails/actionpack/lib/action_controller/filters.rb:624:in `process_without_session_management_support'
.//vendor/rails/actionpack/lib/action_controller/session_management.rb:114:in `process'
.//vendor/rails/actionpack/lib/action_controller/base.rb:330:in `process'
.//vendor/rails/railties/lib/dispatcher.rb:41:in `dispatch'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:78:in `process'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:76:in `synchronize'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:76:in `process'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:618:in `process_client'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:617:in `each'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:617:in `process_client'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `initialize'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `new'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:720:in `initialize'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:720:in `new'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:720:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:271:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:270:in `each'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:270:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/bin/mongrel_rails:127:in `run'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/command.rb:211:in `run'
.//vendor/rails/activesupport/lib/active_support/dependencies.rb:488:in `load'
.//vendor/rails/activesupport/lib/active_support/dependencies.rb:488:in `load'
.//vendor/rails/activesupport/lib/active_support/dependencies.rb:342:in `new_constants_in'
.//vendor/rails/activesupport/lib/active_support/dependencies.rb:488:in `load'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:27:in `require'
.//vendor/rails/activesupport/lib/active_support/dependencies.rb:495:in `require'
.//vendor/rails/activesupport/lib/active_support/dependencies.rb:342:in `new_constants_in'
.//vendor/rails/activesupport/lib/active_support/dependencies.rb:495:in `require'
./script/server:3:in `require'

Rendering ./script/../config/../vendor/rails/actionpack/lib/action_controller/templates/rescues/layout.rhtml (500 Internal Error)

Evan Light 2007-12-26 08:06 PM


What version of OS X are you on?

Evan Light 2007-12-28 07:12 AM

Updated original post to include a link to the README and the project's "files" page.

The README has been updated to include rudimentary:
1. installation instructions (firing up the Rails web app)
2. port forwarding instructions (HEAVILY dependent upon your router's instruction manual....)
3. dynamic DNS instructions (HEAVILY dependent upon free accounts at

Feedback would be [b]EXTREMELY[/b] useful. If I could get some dedicated testers who are willing to provide me with (a) routine feedback and (b) are responsive to e-mail, more work will get done faster. Sadly, because Herr Steve does not allow for OS X to run in a VM, I am limited to testing the web app on a Leopard installation that is HEAVILY tweaked with Ruby features (gems) that may routinely interfere with testing of the web app. In other words, something may work on my machine (IWOMM) that won't work on yours. While I can tweak my development environment to try to hide several of my built in Ruby goodies from myself, what I could really use is another user with a clean (unfettered by changes/additions to Ruby) Tiger install and another with a clean Leopard install to test. [b]Testers would help a great deal to resolve these issues[/b].


mhedstrom 2007-12-29 11:38 AM

[QUOTE=Evan Light;29755]Thanks.

What version of OS X are you on?[/QUOTE]

I'm using 10.5.1 with all the latest security updates installed.

All times are GMT -8. The time now is 02:54 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, vBulletin Solutions, Inc.