My Secret Life as a Spaghetti Coder
home | about | contact | privacy statement
Logging Good Ideas Without Interrupting Your Flow Recently I decided I'd start using a wiki to manage knowledge and ideas, adding research and thoughts as I flushed them out over time. I'd like to see how the things I think about are interrelated, and I think using a wiki is going to help me on that front.

One problem I've had with the traditional to-do list, emails, calendars, and wikis was that when you open the whole thing up, you can pretty easily get distracted from what you were doing by all of the information that floods your brain: all the emails in your inbox (especially the bold ones), the rest of the to-do list, tomorrow's events, and -- well everyone knows the time-sink a wiki can be.

Fighting it yourself requires a lot of discipline, so so as a backup in combat, I thought I'd figure out how to automate some simple actions through Quicksilver.

More specifically, this post might be entitled "Automating MediaWiki additions with Ruby and Quicksilver." I intend to do similar things for the other applications I mentioned above, but this one is specific to MediaWiki (For those who are unaware, MediaWiki runs the Wikimedia properties, including Wikipedia).

Automating this stuff turns out to be surprisingly simple. My original idea was to have a section on the Main_Page of my wiki called "Free Floaters" that would be a simple list of one-line ideas to be flushed out later. However, I ran into some trouble trying to edit it, so I ended up just giving it its own page. (Therefore, if you know how it might be accomplished, let me know in a comment!)

All you need to do is drop the following Ruby script (edited to your requirements -- I've annotated the lines you'll need to change) in ~/Library/Application Support/Quicksilver/Actions in your MacOS install.

Wiki.rb (placed in ~/Library/Application Support/Quicksilver/Actions -- be sure to chmod -x Wiki.rb)
#!/opt/local/bin/ruby # change to your ruby path - run "which ruby" from command line to find it
require 'net/http'
require 'yaml'
require 'cgi'

def urlify(hash)
  result = ""
  hash.keys.each do |k|
    result += k + "=" + hash[k] 
    result += "&" if k != hash.keys[-1]

  end
  return result
end

url = URI.parse('http://example.com/wiki/api.php') # change to your wiki url

params = {
    'action' => 'login',
    'lgname' => 'your_username', # change to your wiki username

    'lgpassword' => 'your_password', # change to your wiki password
    'format' => 'yaml'
  }


browser = Net::HTTP.new(url.host, url.port)

sign_in = browser.post(url.path, urlify(params)) 

cookie = sign_in.response['set-cookie']

headers = { 'Cookie' => cookie }

params = {

    'action' => 'query',
    'prop' => 'info',
    'intoken' => 'edit',
    'titles' => 'Page_Title_To_Edit', # change to the page you want to edit

    'format' => 'yaml'
}


edit_token = browser.post(url.path, urlify(params), headers)

edit_token = YAML::parse(edit_token.body)['query']['pages'][0]['edittoken'].value

params = {

    'action' => 'edit',
    'title' => 'Page_Title_To_Edit', # change to the page you want to edit
    'token' => CGI::escape(edit_token),
    'minor' => 'true',
    'appendtext' => "%0A*" + ARGV.join(" "), #This adds a new list item, feel free to modify the markup to your liking

    'format' => 'yaml'
}


addition = browser.post(url.path, urlify(params), headers)


Then restart Quicksilver. From the command line:

$ killall Quicksilver
$ open /Applications/Quicksilver.app

Now, when you open Quicksilver, type "." to enter text, tab to the action and type "wiki" (or the file name if you decide to change it), then hit enter to run it. Quicksilver passed what you typed to the script arguments, and the script sends it up to your wiki.

Any thoughts? What would you change? What else in this vein would you like to see?

Hey! Why don't you make your life easier and subscribe to the full post or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!


Comments
Leave a comment

There are no comments for this entry yet.

Leave a comment

Leave this field empty
Your Name
Email (not displayed, more info?)
Website

Comment:

Subcribe to this comment thread
Remember my details
Google
Web CodeOdor.com

Me
Picture of me

Topics
.NET (19)
AI/Machine Learning (14)
Answers To 100 Interview Questions (10)
Bioinformatics (2)
Business (1)
C and C++ (6)
cfrails (22)
ColdFusion (78)
Customer Relations (15)
Databases (3)
DRY (18)
DSLs (11)
Future Tech (5)
Games (5)
Groovy/Grails (8)
Hardware (1)
IDEs (9)
Java (38)
JavaScript (4)
Linux (2)
Lisp (1)
Mac OS (4)
Management (15)
MediaServerX (1)
Miscellany (76)
OOAD (37)
Productivity (11)
Programming (168)
Programming Quotables (9)
Rails (31)
Ruby (67)
Save Your Job (58)
scriptaGulous (4)
Software Development Process (23)
TDD (41)
TDDing xorblog (6)
Tools (5)
Web Development (8)
Windows (1)
With (1)
YAGNI (10)

Resources
Agile Manifesto & Principles
Principles Of OOD
ColdFusion
CFUnit
Ruby
Ruby on Rails
JUnit



RSS 2.0: Full Post | Short Blurb
Subscribe by email:

Delivered by FeedBurner