About Jeffrey Kishner

I work as a web producer at a media company, and have been blogging for over a decade.

Convert a List to OPML for Fargo with Drafts

I’ve been using Dave Winer’s new outliner product Fargo frequently, yet I often initially enter my ideas into Drafts for iOS. Fargo works with OPML files, but if you copy a list into it (even one with tab indents), Fargo will maintain the structure, creating a new node (or “headline”) for each line and even making the tab-intended lines “children” of the main line above them.

The Problem: how to get my list in Drafts into Fargo with the least amount of effort?

It’s possible to just send the entire list to a text file in Dropbox, then access that file on the desktop, copy it, and paste it into Fargo. But there’s a better way. Inspired by Alex Guyot’s work on chopping a draft, I’ve composed a five (!) Drafts actions that let me convert a text list of any length into an OPML file that I can import into Fargo. The key to this solution is an URL Action that works as an infinite loop, in which the following occurs:

  • Take first line of draft ([[title]]) and use it to create the opening of the OPML file.
  • Take the rest of the list ([[body]]) and create a new draft with it.
  • Take the first line of the new draft and append it as an outline node to the OPML file I just created.
  • Take the rest of the list ([[body]]) and create a new draft with it.
  • Repeat those previous two steps ad infinitum until the loop is closed, i.e., we’re left with an empty draft.
  • Then close the OPML file with the final line from the list and the closing tags.

[Read more...]

Log Actions With Just Two Taps on Your iPhone

Allergy season has just started for me, and I’ve resumed taking Claritin. I don’t have the best memory, so I am logging the date and time each instance in which I take a pill. Fortunately, with the help of four apps 1 I can literally just tap twice on my iPhone to add the time to a text file. This solution does take a few minutes to set up, but afterwards you won’t even have to open up the keyboard. This can work for any activity in which you need to log your time — not just for taking meds.


In this tutorial you will set up Launch Center Pro (henceforth LCP) with a Custom URL that expands a TextExpander snippet to Drafts, triggering a Dropbox (or Evernote) action to prepend a date/time configuration to a specific file or note. After setup, you will be able to open LCP, tap on an action, and immediately have text like “04/29/2013 1:06pm” added to the top of a note titled something like “TookLoratadine” (Loratadine being the generic version of Claritin). Much of the following is customizable: the date/time format, your cloud service, and the name of the file.

Step 1: Create a TextExpander Snippet

TextExpander (TE) is a service that enables you to type out a short snippet that expands automatically into a longer sequence of text — provided you are using an iOS app that supports TE. TE supports date/time snippets that allow you to customize how a date/time is written out. View their reference page. If I create a snippet called Tdate whose content is %Y-%m-%d %1I:%M %p and type out Tdate in a TE-supported app, it will expand into 2013-04-29 1:20 PM. If instead I want the date formatted like 4/29/13, I can make the content %1M/%e/%y. To set this up in TE, go to Groups, select or create a group, enter the snippet in the Abbreviation field and the date math in the Content field.

Step 2: Create a Dropbox or Evernote Action in Drafts

Drafts has long supported Dropbox actions in which you can create a note or prepend or append text to a note. Since its 3.0 update, Drafts also support Evernote actions in which you can do the same. For the purposes of this example I am using a Dropbox action in which I prepend to a note.

Dropbox action

I’ve named this action “prepend Trunk Note” because I am entering this note into my personal wiki. (Learn more about Trunk Notes.) The Dropbox path for notes in this app is /trunksync/notes/. (If you use nvAlt, just use its Dropbox path.) For the filename I have chose predefined and I am titling it [[title]] which is drawn from the first line of the entry in Drafts. For extension I have entered markdown but you can also enter txt for a regular text file. For Write, I have chosen prepend so that newer dates show up at the beginning of the note. And in the template I have entered [[body]] which is drawn from any text after the first line in Drafts. If you’re on your iPhone right now, tap on this link to import the Dropbox action into your version of Drafts. You can then edit the action as you like.

When you create an append or prepend action, Drafts creates the file the first time you run it, and thereafter it adds text to it. In my Dropbox action above, as long as the first line of my draft is always the same, whatever is in the rest of the draft will just be added to that note. In the next step, I will be creating an URL in LCP in which the first line of the draft is always TookLoratadine. That will become the title of the note in which I will be prepending the date and time that I take my next dose.

Step 3: Create a Custom URL in Launch Center Pro

Launch LCP. Go to Action Composer and create a Custom URL.



Custom URL in LCP

I’ve titled mine Loratadine. This action does the following:

  1. Adds the text TookLoratadine to the first line of a draft in Drafts.
  2. Using an URL-encoded line break (%0A), it expands the TE snippet Tdate (which must be within the < > brackets) and puts the date/time on the next line.
  3. It then tells Drafts to perform the action prepend Trunk Note. It includes URL-encoded spaces (%20) between each word in the action.

If you want to customize this Custom URL, enter the following into LCP and swap in the FIRSTLINE, SNIPPET and DROPBOXACTION.


Everything else should stay the same if you want this to work. Just make sure that the action is the URL-encoded title of the Dropbox or Evernote action that you have created.

You’re All Done

Next time you need to log the time and date you’ve completed a repeating task, just open LCP, tap on your action, and you’re done.

When I do it, something like the following will shortly show up in Drafts before the action is performed. (I set this Dropbox action to delete the draft after it is completed).

Took Loratadine
2013-04-29 1:20 PM 

If I want to view my log, I can either open Trunk Notes and open the TookLoratadine note, or use an URL scheme for a Dropbox text editor, like Nebulous Notes:


Hint: if you enter this as an URL action in LCP, then you can also do two taps to view your log.

  1. See the comments for a solution that removes the need for TextExpander. 

Add Title, URL, and Description to Pinbook with This iOS Bookmarklet

To piggyback on yesterday’s post about the incorporation of the iOS clipboard contents in Drafts 3.0, I’ve written another bookmarklet/URL Action combo. This one lets you add the title, URL and selected text from a web page to Pinboard via the Pinbook app. (I’ve written a previous post about URL Actions for three different Pinboard apps but I’ve stuck with Pinbook. You can adapt my workflow below for different apps if their URL schemes support the same parameters.)

I’ve adapted Federico Viticci‘s javascript bookmarklet to put the title on the first line in Drafts and the URL in the second line to create this workflow. First, while on your iPhone tap on this link to import the URL Action into your version of Drafts. (Make sure you’ve upgraded to the latest version.) Or you can create an URL Action, title it “pinbook-desc” and enter the following:


This action takes the first line of the draft and makes it the title of your bookmark. The second line becomes the URL, and the contents of the clipboard becomes the description of your bookmark.

Next, you need to create a bookmarklet in your iOS browser. In Safari, bookmark any page and change the title to “Pinbook-Desc” (actually you can call it whatever you want). Then open bookmarks, tap on Edit, then open “Pinbook-Desc.” Tap on the URL, and then tap on the X to delete it. Then paste the following into that field and save the updated bookmark.

update bookmark

Now you’re all set. If you want to save some text in your Pinboard bookmark, select it and then tap on copy. Then open bookmarks, tap on “Pinbook-Desc” and the bookmark will be auto-filled with the page’s title, URL and your selected text.

select text


Addendum (2013-04-26)

You don’t need Drafts to add a description if you’re on an iPad. The document.getSelection javacript will work on an iPad if the bookmarklet is in your Bookmarks Bar. You can grab that bookmarket here.

Add Clipboard Contents and URL to Quotebook with Drafts 3.0

Drafts 3.0 just came out. It has many new features, but one notable addition is that it now uses the clipboard contents. I was trying to think of a cool way to utilize this function, and came up with a bookmarklet that lets you add the clipboard contents of a page and its URL to Quotebook. Quotebook autodetects the clipboard contents, but if you want to remember where you found a quote, you still need to go back to the browser to grab the URL.

To make this work, you both have to add an URL Action to Drafts and install a javascript bookmarklet on your iPhone. If you’re on your iPhone when you read this, tap on this link to import the action into your version of Drafts. (Make sure you’ve upgraded your version so that it supports the clipboard function!) This action is called “quote” and the template is as follows:


Here’s the Quotebook URL scheme.

Next, create the bookmarklet. Bookmark any page and call it “Quote.” Then tap on the bookmarks icon, tap on Edit, and then tap on the URL. Tap on the X to delete it, and paste in the following:


Save the new link, and you’re all set. Now go to any page in your mobile browser. Select some text and tap on Copy. Then open your bookmarks and tap on Quote. After a short stop via Drafts, you’ll end up in Quotebook with both the quote and the URL already entered.

copy quote


How to Make Fargo.io Work With Carbonfin Outliner

Carbonfin Outliner is a basic outliner for iOS. The product has a web interface that will sync with your outlines on your iOS device, but you can also sync outlines with Dropbox (as OPML files). For any single outline you can only sync via one of these options (go to the Settings in an outline and choose the Storage option).

Frankly, I find Fargo to be the superior web app for editing outlines — it has keyboard shortcuts for nearly everything, whereas the Outliner web app is pretty rudimentary. Fortunately, Outliner has only a few attributes, which you can easily add right within Fargo.

Three Attributes


The text attribute is always required in the OPML file for Outliner.


If you want to add a note to a task, add the _note=”" attribute


No _status results in an empty checkbox. _status=”checked” results in a checkmark. _status=”" results in no box at all.

Create an Outline in Fargo for Carbonfin Outliner

All you have to do is create an outline in Fargo. Then go to the /Apps/smallPicture 1 folder in Dropbox and move your OPML file to the /Outliner folder in Dropbox. When you tap on the sync button in Outliner on your iOS device, Outliner will import the outline.

If you want to add a note to a task while in Fargo, click on Outliner and then Edit Attributes… in the dropdown menu. Tap on the +. In the left field, type in _note. In the right field, add your note. (You can also just overwrite the “Created” attribute because it isn’t really necessary.)

Click on image to view full size.

Click on image to view full size.

If you want no checkbox for a particular node, go to Edit Attributes, enter _status in the left field and leave the right field blank.

If you want a box checked, enter _status in the left field and checked in the right field.

Fargo will save an outline whose body looks something like this:

<outline text="task with note" _note="this is a note"/>
<outline text="task with box checked" _status="checked"/>
<outline text="item with no checkbox" _status=""/>

When synced with Outliner, this is what you’ll see for the above outline:


If you want to edit your Outliner outline again in Fargo, you’ll have to move it from /Outliner to /Apps/smallPicture.


The only real downside to this solution is that you can’t see your notes or an item’s status without going into the Edit Attributes window in Fargo. But if you’re creating a basic outline with only text attributes, then Fargo will work just fine for your needs.

  1. I recently learned that the /smallPicture folder was only installed for early adopters — for anyone else, the folder is called /Fargo. 

The OPML Type Attribute and Font Awesome Icons Included in Fargo and Little Outliner

Small Picture Reader is a new product by Dave Winer’s Small Picture that displays any OPML file shared on Dropbox in outline form. After perusing the No Agenda #506 Shownotes Outline I noticed the use of more Font Awesome icons (please read my previous post to learn more about them). After inspecting the OPML file, I realized that there are many more type attributes than I was previously aware of.

The type attribute is discussed in the OPML spec but it appears that many more types than link, rss, and include are supported in Fargo and Little Outliner. These appear to have their origins in Dave Winer’s worldOutline. I do not pretend to know how all of these work, but I discovered that the use of the type attribute automatically “calls” the relevant icon from the Font Awesome set.

Type Attribute Icons

You can view the full outline in Small Picture Reader.

The nodes above only include text and type attributes. For example, the outline type looks like

<outline text="Outline" type="outline"/>

Unlike the icon attribute mentioned in my earlier post, here you only have to enter the one of these type attributes and the icon automatically shows up in the outline.


Over at the small picture Google group, Eric Davis points out that “The ‘appTypeIcons’ object in http://outliner.smallpicture.com/utils.js appears to have all supported types and their icons.”

Here is a snippet from that file (copyright 2013, Small Picture):

var appTypeIcons = {
    "blogpost": "file-alt",
    "essay": "file-alt", 
    "code": "laptop",
    "directory": "folder-open-alt",
    "discusstree": "comments",
    "home": "home",
    "html": "file-alt",
    "icon-comment": "comment-alt", 
    "icon-star": "star-empty", 
    "icon-time": "time", 
    "icon-user": "user", 
    "include": "star-empty", 
    "index": "file-alt",
    "link": "bookmark-empty",
    "outline": "list-alt",
    "photo": "camera",
    "presentation": "file-alt",
    "redirect": "refresh",
    "river": "file-alt",
    "rss": "rss",
    "tabs": "file-alt",
    "thread": "comments",
    "thumblist": "th",
    "metaWeblogPost": "file-alt"

I’ve updated my public outline to include some of these.

Add Flair to Fargo.io with 249 Icons

Dave Winer’s Fargo OPML outliner uses the Font Awesome icon set. If you’re bored of wedges, you can spruce up your outline with various icons.


Just visit the Font Awesome page and scroll down to view the icons. If you have an outline node about beer, add the icon=beer attribute. (Click image below to enlarge.)

edit attributes

If you want the OPML file I used to create the above screenshot, copy this link and import it into Fargo.

iOS Bookmarklet to Convert Link into OPML File for Fargo.io

I’ve been using Dave Winer’s new outliner Fargo obsessively since its launch. It has lots of useful keyboard shortcuts, and imports/exports all outlines in OPML format. You may be familiar with OPML as a way to store a list of RSS feeds, but it’s also used by mind-mapping applications like iThoughts and MindNode, as well as outliners like Carbonfin Outliner.

Unfortunately, this application is very much desktop-focused. It barely works on the iPad. Fortunately, Fargo syncs with the /Apps/smallPicture folder in Dropbox, so if you can get an OPML file into this folder, you can import it once you’re back on the desktop.

I’ve been using Cotton Notes on my iPhone and iPad to work with outlines, because I can tap on any node and export that node and all its subnodes as an OPML file to the /Apps/Cotton Notes folder in Dropbox. This app also will import OPML files. When you import an OPML file that includes links formatted as follows

<outline text="Google" type="link" url="http://google.com" />

it converts it to Markdown:


One the one hand, this is great, because it still keeps the link and you can toggle between previewing the Markdown or not. The downside is that when you export the outline, it stays in Markdown.

In Fargo, the first link format (which is according to the original spec) displays with this icon bookmark instead of a wedge, and when you use the expand shortcut, Fargo opens the link in a new tab. Fargo does not support markdown, so if I import an OPML file from Cotton Notes, the link will show as [Google](http://google.com).

Fargo does let you create an HTML link within the text, but if you export it, the HTML is URL-encoded. For example, an HTML link in Fargo (which looks like Google) will export as follows:

&lt;a href=&quot;http://google.com&quot;&gt;Google&lt;/a&gt;

This is unreadable if I import it into Cotton Notes.

I suppose the proper way to create a link in Fargo is to choose Edit Attributes… in the Outliner menu, and manually add them:

type link
url http://google.com

This creates a link according to the OPML spec and will properly import into apps like Cotton Notes and iThoughts (although these apps then change the link formatting).

The OPML Bookmarklet

All this to introduce a bookmarklet I’ve written for iOS. It will take the title and link of a page and create an OPML file in the /Apps/smallPicture folder, which you can then import into Fargo. (To import, just go to File > Open and then click on a file called “Link” with a filename that is a timestamp. This will create a new outline in Fargo.)

This bookmarklet requires Drafts. From your iOS device, you will need to tap on this link to import a Dropbox action into Drafts called opml.

Then, bookmark any page in mobile Safari and title it opml. Tap on bookmarks and edit, and remove the URL of the bookmark. Paste in the following and then save:

You’re all set. Next time you want to import a bookmark into Fargo, just tap on the opml bookmarklet. It will send a formatted link to Drafts, which will then insert the draft into an OPML file, which is then saved to Dropbox.

If you want to get the link into an outline in which you are already working, create a public link for the new outline, copy the URL, go to your working outline, click on Import… and enter the public URL to import the link into that outline.


If a title or URL that you’re bookmarking contains any special characters that would ordinarily have to be encoded, this bookmarklet will not work. It will create an OPML file but if you try to import it into Fargo, it will show up null. (For example, & needs to be &amp;.) I don’t know any way around this. You’ll have to actually go into the OPML file to fix the URL or just bookmark URLs that don’t have parameters.

View Rotten Tomatoes Scores for Current Movies in Status Board by Panic

Using PHP and the Rotten Tomatoes API, I’ve created an HTML widget for use in Status Board. It features a scrollable list of movies currently in theaters, including the critics rating for each, the tomato icon (Fresh, Rotten, Certified Fresh) and a link to that movie’s page. Unfortunately, links within DIY widgets open a new page within the iframe, so I cannot link to the Rotten Tomatoes page in Safari. But I found that URL schemes “escape” Status Board, so I’m linking to the movie’s page in the Flixster for iPad app. (The URL scheme for a movie’s page is flixster://?action=movieDetails&movieId=<movieId>.)

Consider this widget “beta.” I’m still tweaking the design. And note that I haven’t run this widget by the folks at Flixster — it will only work as long as I have a working API key. However, it’s noncompetitive and links to their app, so I’m assuming everything’s kosher.

You can add a DIY widget and enter this URL: http://imissmymac.com/status-board/in-theaters/ or, if you’re currently on your iPad, click on this link to automatically install it in Status Board. It looks best 5 tiles wide.

How to Add Your WordPress Stats to Panic’s Status Board

I’ve been digging Panic’s Status Board and follow the @StatusBoardInfo feed for new sources. Oliver Schwarten — @Osch_ — shares on his blog how to display your WordPress stats. Unfortunately, his post is in German, but with the help of Google Translate and some googling to help with command line functions, I figured out how to make this work for me. Nothing I am sharing here is original, but it took me several tries to figure out the /path_to/ address for the csv file I needed to write to my server, so I thought I’d share my process.

Get Your WordPress API

If you have WordPress stats in your dashboard, then you will have had to sign up for an API key. If you are signed in with your wordpress.com account, you can get your key here.

Use the Stats API to Output a CSV File

You need a csv file to create a chart in Status Board.

The following outputs in the browser a csv file displaying the views on your blog for the last five days:


Run a Cron Job on Your Server

To the best of my understanding, Schwarten states that this is a static file, so you need to update it at regular intervals. He uses cron and cURL to do this.

I don’t work in Terminal, but if your blog runs on a server that has cPanel installed, you can go to the cron jobs page, create a cron job, and enter something like the following:

curl -s "http://stats.wordpress.com/csv.php?api_key=YOUR_API_KEY&blog_uri=YOUR_BLOG_URL&table=views&days=5&limit=-1" > /home/USERNAME/public_html/wordpress.csv

and set some time interval at which you will run this command.

The path to which I was writing the csv file tripped me up, but I figured out that /home/USERNAME/public_html/wordpress.csv works for me. USERNAME is the name that you use, for example, to log in to FTP for your account, or whatever shows up after the ~ following your site’s IP address.

Display Your Stats

In Status Board, tap on the table icon, and add YOUR_BLOG_URL/wordpress.csv. It will show a chart showing your blog’s recent views. For example, here’s the csv file for one of my blogs.

Other Stats You Can Show

This page shows other variables you can use for the API. For example, you can create a table showing referrers or search terms, and write to a different URL, and enter that in Table view in Status Board.