Search term report
Obviously some of my posts are meant to help people who don't read my blog, so it's interesting to see what search terms are actually bringing people to my articles.
My search results for these queries may have helped:
- can you read sessionstore.js
- apt-cache "bad hostname"
- arduino shiftbrite projects
- dmacro
- dovecot palm pre ssl certificate
- error while loading shared libraries: libdbus-glib-1.so.2
- internals of strace
- opencv headtrack
- Pixxo AW-M2130 Linux
- shark
- xyron stepper driver
My search results for these queries probably did not help anyone:
- bathroom
- color of color specturum
- jobs for people with quick wit
- kelsi sews
- room photo
- textarea bold "html = true" javascript
- voltage drewp
- what är mockup-data
- windows 2008 NFS random permission denied
And to those who came to this page while looking for something in the top list, I'm sorry.
Remote control garage door opener
Goal: open garage door by cell phone, because its own remotes break a lot, and we're often not in the car when we want to open the door anyway.
I made this web UI. Dragging the window up makes a POST request for a quick-expiring, one-time-use access code:

All the phones we've tested can't actually make a drag event on a web page, so there's also an invisible tap zone above the button cover that animates it sliding up.
When you push the button, that posts your access code to my public web server. If that server approves, it makes an internal POST to another server on the parallel port. Would you like to control your parallel port with http post requests? Try this server. Since my parport is also controlling a shiftbrite, I'm actually using this other server.
A parallel port pin activates this relay, which closes the normal garage door opener circuit. The garage door just thinks the computer is another button, and all the existing buttons and remotes work the same.
A chopped centronics cable connects to a transistor with power from an old computer power supply.
Relay board on the ceiling of the garage. Most of the time, I forget to add blinky debugging lights to boards. This time, I remembered to include a blue LED for the relay status.
The parallel port pin only has to go high for a moment for the garage to open, and apparently my port does that at reboot. It was surprising.
I added a low-pass filter so the pin has to be held high for a long time before the garage opens.
5K
parport ---R--+-+-> transistor 2222 -> relay
| |
10K R C 1000uF
| |
gnd ----------+-+
The parport is about 3V, and it takes about 1.5 seconds for the relay to trigger. Relays sound cool when they're fading on.
RFC3339 date formats
Zooko pointed out RFC3339, which is a recommended date+time format for internet protocols (and more) based on ISO8601 standards. I wasn't aware of the RFC before, and I think it's super.
I wish the RFC3339 format were the easiest format for every programmer to generate. The state of popular libraries is pretty bad in this regard, unfortunately, such that it's often easier to emit awful formats like "Tue Sep 22 00:10:49 2009" or do-it-yourself disasters like "04_02_03".
Zooko likes how the RFC suggests that one might like to replace the T with a space, as in "2009-09-21 23:30:00-07:00". I am against this practice.
The RFC itself includes a relevant anecdote:
. . . the date format in [IMAIL] has resulted in interoperability problems when people assumed any text string was permitted and translated the three letter abbreviations to other languages or substituted date formats which were easier to generate (e.g. the format used by the C function ctime).
The first problem I have with "2009-09-21 23:30:00-07:00" is that it looks too much like two pieces of data, and in particular, it looks like you could take the "2009-09-21" word and use it on its own. That would be throwing away the time zone, however, so it's lossy. Pretend we each received the same list of times and our tools rendered the times into our own timezones. If we each cut off the time+zone parts of the values, we'd end up with different lists of dates.
Less importantly but more practically, the one-word version with a T in the middle works better as a command-line argument to a program; it double-click-selects better in GUIs; and it doesn't accidentally break up when you import a log file into a spreadsheet.
The argument against the T is that humans can read the value more easily. I'm sure that's true in some situations, but in my experience, users of time values either don't mind the T version or they have much bigger problems with the format ("I want am/pms", "Why is the day-of-month on the right? I like it on the left", etc). The RFC explains:
Because no date and time format is readable according to the conventions of all countries, Internet clients SHOULD be prepared to transform dates into a display format suitable for the locality. This may include translating UTC to local time.
Hypothetically, replacing the T with a _ would probably help readability without making a word split, but I don't actually think you should use underscores since that's even less standard.
tl;dr - Please read and follow RFC3339; and please don't change the T to a space.
Ideas for a supervisor UI
The supervisor web UI (screenshot) is not so great. It sends corrupt pages some of the time, such that you see a white page or raw html or some other incomplete load. The button background images often fail to come in. The log tail pages rarely work for me; they usually show nothing. There's no 'stop' button on a process that's in the 'starting' state, even though that's a useful transition. The pages' internal links are all /absolute so you can't proxy the site to somewhere/deeper/in/your/existing/site/.
Supervisor, itself, is pretty wonderful. It just needs a new web UI, which can easily be developed separately since it could talk to supervisor via xmlrpc.
Here are some ideas for a better UI:
- the process states should update live; no manual refresh
- have a compact mode that can fit in the corner of my screen when I'm developing
- have a mode where one process's reset button is huge, so I can click it quickly when I'm troubleshooting that process
- display more process stats, like top
- let me select multiple processes and do actions to the whole group
- display arbitrary additional fields that I configure for each process, such as the port number I set the server to run on, or the name and phone number of the person to call if the process is crashing
- there should be a simple REST interface to the process states that's easier to use than the xmlrpc one. I should be able to do process restarts with curl or XHR in some other page.
- tail the logs really well: I should be able to expand several logs at once, or look at a mixed view (like "tail -f *"). They should update live. I should be able to get any log at its own URL so I can pass that URL to someone else. I should be able to color the log lines based on patterns; abbreviate out boring lines or parts of lines; and shade the lines according to their age. (I did a project like this 9 years ago.)
For supervisor, but not the web UI:
- I'd like a config-generating tool that looks at a running pid and makes a supervisor config section that would run that process with the same user/env/cwd/etc. This tool should be able to POST new configs to a running supervisor via the new web ui! The out-of-the-box experience with supervisor should be to simply launch it and then add some of your already-running programs to it.
Suggestions for twine.com
Here's what I think twine.com should do to make me use it:
* Optimize page loads. Here are some page load times i'm getting from clicking around: 2.8s 4.5s 30.5s 8.1s 6.1s 3.5s. Now I'll press reload on /home a few times: 13.6s 13.0s 15.0s 19.8s
* Continuously import delicious bookmarks.
* Make the imported delicious bookmarks public, just like they were on delicious.
* Make it so i can find the delicious importer! http://www.twine.com/import says "Twine is importing your bookmarks." and then does nothing. And has an 'ok' button, as if it was a modal dialog box or something.
* Make the front page interesting. I imported thousands of delicious bookmarks a few months ago, I started some of my own twines, but the interest feed still isn't interesting. As in, you'd do better taking the list of blogs I read and just displaying those for a while. I'd be happy to use one interface to read my blogs, tag and collect them, and fill twine.com with content. Getting the RDF for it all is a huge plus for me. But you have to be better than the workflow I'm using now.
SVG blend animation demo
Here is a javascript svg demo that blends two lines of text together according to your mouse position. It works great in firefox 3.1 beta; not at all in konqueror 4.1.3.
Screenshot:
I normally use mochikit, prototype, and extjs, but I tried jquery for this test. It's great!
SPARQL endpoint for movie showtimes
I put up my first SPARQL endpoint, which is a standard way to allow queries about structured data. The dataset is a tiny collection of movie showtimes for the current day and for movies playing near my house.
I built it in response to this plea for more fresh data. My data is not especially exciting, but I did want to have a SPARQL endpoint for that project anyhow. Now I need to make the rest of the project use its own endpoint, to completely decouple the data-gathering code from the display code.
Here is a table of some other endpoints, although I think it's silly to try to maintain a wiki page of such things. That's what automatic search engines are for.
Even better is this recent slideshow that describes several SPARQL queries on interesting real-world data sources.
httpauthproxy
Here's a silly http proxy server: httpauthproxy
If you have a lame client, say google gadgets rss reader, which can't send http auth headers, and a reasonable http server that wants them, say twitter.com, this proxy can provide the glue.
Virtual Gift Factory
Hey, archive.org has a project I worked on 11 years ago: a web site to send virtual gifts (custom images) to other people.
Many images are missing. They were various candies and chocolates that we found or scanned. The site would randomly place the images over your choice of background, and then save that image for your recipient.
The site did really well in Australia, for reasons we never learned. Maybe it was mentioned in a magazine there or something.
I have the original files on disk, and they show up 4 times in various backups over the years. That number seems low, given how sloppy my backup procedures are. The code looks like 9 perl cgi programs, 860 SLOC total. The storage is an ad-hoc text file format, and it looks like this version sent 1800 gifts (400 with .au in the addresses). I still have the messages people wrote to each other. I suspect they're different from what people would write today, but I can't even think how to rerelease something like this given the spam problem.
On the site information page, you can see my friends who worked on the site. I think these are their jobs today (not in order):
- architect
- city clerk
- lawyer
- pharmacist
- physicist
- programmer for google
- retired
That's a project I want to do in the future, by the way. I want to list all the jobs of all the people I know, and you list all the jobs of people you know, etc. Then when I need someone with, say, access to a fog machine, or someone who can design and print me a poster, or someone who can advise on IP law, I just search the job network for people close to me. It would be like a slice of what linkedin.com does, but without any need for a central company like linkedin to broker all the private data (because there isn't any).
Graphs from sparql results
This is a response to Download SPARQL results directly into a spreadsheet
So far you've motivated seeing the results of a query in a table and making a graph from them. I'd like to have both of those capabilities in a webapp. E.g. I should be able to embed a live graph in my own page like this:
<img src="http://sparqlgrapher.com/svg/example.com/query=SELECT+?date+?price+{...}">
Visiting my hypothetical sparqlgrapher.com directly would give you a UI to layout and customize the graph. When you're done, you'd take that url and embed it elsewhere (or just take a copy of the image, if you want a one-off).
People think anything animated is flash
A fine site like http://browsegoods.com/ gets tagged as 'flash' in delicious :(
New home page
I played with a bunch of New Fangled Web Technologies and redid my home page. Almost everything is dynamically derived from data sources that I presumably keep up to date for other reasons. The foaf part and projects list part aren't done yet. I also haven't removed all the zope pages yet, unfortunately. (Zope turned out not to be a good system for making a low-maintenance site that lasts for 10+ years.)
I hope to have a DOAP document for each project, which will make them easy to list on my home page as well as other project-list systems.
I think I hate the rememberthemilk.com UI

This is not the first time I've been completely lost in the RTM UI. On this page, I have no idea what's going on.
- What is that orange box at the top? Did I start an action but not finish it, and what was that action? What happens if I press neither 'share' nor 'cancel'?
- How do I get back to my todo lists (i.e. the primary document I'm here to edit)?
- Why should I create some groups? Stop yelling at me about what I should do! I understand that a group would be a container of contacts, but if I haven't thought of the use case for that yet, I'm not going to create some groups just because I "have no groups" yet.
- On the right, in the biggest cluster of text on the whole page, they're telling me how to name my groups. Is this really the right time for that? How about after I click 'add group'?
- "1 contact selected"?! Who is it, and is he or she going to matter on this screen?
- Why is 'Delete' rendered as a form button but 'Add group' rendered as an image-plus-link? Are those different? Will one of them make another crazy orange box header? What is the rule with small blue circles with a symbol in them? The add group one seems clickable, but the other three aren't.
- The main box on the page is on a groups tab, and there's another single-tab box on the right labeled "Group". What is the meaning of the right-hand one? Isn't the main one going to list my groups? (See below for the answer)
- What is the 'Key' box doing here? I suspect that my contact groups will not have priorities or due dates. The stack of boxes on the right is somewhat dependent on what I'm doing, since the top "tab" box and the instructions box have both adjusted for this view. It's really better to keep the Key box bouncing around below the other ones even when I have no use for it? I would critique the need for a key/legend in the first place, but that's for another time.
- The relationship between contacts and groups suggests that tabs are not used correctly here. That right-hand-side box devoted to telling me how many objects I have selected on the other tab, that's a pretty huge clue that I don't want to flip between contacts and groups. And the contents of the 'invite' tab are not even close to parallel to the types of things in the other two tabs. The first two tabs at least each show a type of object in my account; the invite tab is a form for sending a single invitation.
Dying of curiosity, I made some groups:

I now learn that the top box on the right displays some info about the group that I'm hovering over in the main list. I still don't know how to add members to a group that I've made. I have "1 contact and 2 groups selected", but there seems to be nothing to click that would affect the membership of any groups. Dare I suggest that the behavior of groups (they contain users) be reflected in the visual layout of the page (the depiction of a group contains depictions of users)?
Finally, we're out of laundry soap, so please get some if you go to a store before I do and you're Kelsi.
www.hackaday.com browser profiles
I put a link on www.hackaday.com, and learned that 2/3 of the people who followed the link to my site have 'Firefox' in their user agent strings:
wc -l
1601
grep Linux | wc -l
171
grep Windows | wc -l
1158
grep Macintosh | wc -l
256
grep Firefox | wc -l
1073
grep -v Firefox | wc -l
528
grep Opera | wc -l
47
Looking for the mouse
Clay Shirky: "Looking for the Mouse" talk from Web 2.0 Expo
This is the best talk I've seen all year. You can read it here, but I recommend the video since Clay speaks really well, and you should see his passion.
After the second time through, I noticed how well his TV producer stories worked for the momentum and interest of his talk. She was a character that he got into conflict with, and we pay more attention to his side when we think there's a person in a high (or at least rare) position who might win a point in the debate. (Spoiler: she doesn't.)
tinymce patch for newsbruiser
This patch hopefully works on the new newsbruiser release 2.6.2. It lets us use the excellent TinyMCE editor widget to write blog posts. Along with this patch, you have to actually put tinymce such that it shows up at /resources/tiny_mce/tiny_mce.js.
(Coming soon: another newsbruiser patch and accompanying tools that let us send picture posts from our cell phones.)
Index: nb/CoreCGIs.py
===================================================================
RCS file: /cvs/newsbruiser/nb/CoreCGIs.py,v
retrieving revision 1.100
diff -u -r1.100 CoreCGIs.py
--- nb/CoreCGIs.py 27 Apr 2008 11:52:33 -0000 1.100
+++ nb/CoreCGIs.py 29 Apr 2008 08:16:41 -0000
@@ -271,7 +267,7 @@
self.printDisplaySnippets('aboveEntryText')
print '<table><tr><td valign="top">'
self.textArea(self.notebook.getEntryBoxLength(), 70,
- const.ENTRY_CGI_KEY)
+ const.ENTRY_CGI_KEY, html=True)
self.printDisplaySnippets('rightOfEntryText')
if showHelp:
@@ -819,7 +815,7 @@
print '<table><tr><td valign="top">'
self.textArea(self.notebook.getEntryBoxLength(), 70,
- const.ENTRY_CGI_KEY, entry.text)
+ const.ENTRY_CGI_KEY, entry.text, html=True)
self.printDisplaySnippets('rightOfEntryText')
if names:
print '</td><td valign="top">'
Index: nb/lib/LOMP.py
===================================================================
RCS file: /cvs/newsbruiser/nb/lib/LOMP.py,v
retrieving revision 1.16
diff -u -r1.16 LOMP.py
--- nb/lib/LOMP.py 5 Dec 2004 20:20:51 -0000 1.16
+++ nb/lib/LOMP.py 29 Apr 2008 08:16:59 -0000
@@ -183,9 +183,41 @@
maxlength = ''
print '<input type="text" name="%s" value="%s" size="%s"%s />' % (name, cgi.escape(str(value), 1), size, maxlength)
- def textArea(self, rows, cols, name, content=''):
- "Prints a standard multiline text box."
- print '<p><textarea wrap="virtual" rows="%s" cols="%s" name="%s">%s</textarea></p>' % (rows, cols, name, cgi.escape(str(content)))
+ def textArea(self, rows, cols, name, content='', html=False):
+ """Prints a standard multiline text box.
+
+ drewp adds html mode using tinymce
+ """
+ escContent = cgi.escape(str(content))
+ if html:
+ # it would be cool to grab recent images and put them in
+ # the external_image_list
+ # see http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/external_image_list_url
+
+ # the way i include this js probably only works if there's
+ # one html textarea on the page
+ print """
+<script type="text/javascript" src="/resources/tiny_mce/tiny_mce.js"></script>
+<script type="text/javascript">
+ tinyMCE.init({
+ mode : "exact",
+ elements : "elm1",
+ theme : "advanced",
+ table_inline_editing : true,
+ plugins : "table,emotions,style",
+ theme_advanced_blockformats : "p,pre,div,h1,h2,h3,h4,h5,h6,blockquote,dt,dd,code,samp",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+ theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,|,outdent,indent,blockquote,|,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,styleprops",
+ theme_advanced_buttons3 : "tablecontrols"
+ });
+</script>
+
+ <p><textarea id="elm1" name="%(name)s" rows="20" cols="60">%(escContent)s</textarea></p>""" % vars()
+ return
+ print '<p><textarea wrap="virtual" rows="%s" cols="%s" name="%s">%s</textarea></p>' % (rows, cols, name, escContent)
def listBox(self, boxName, names, values, defaults=None, size=1,
allowMultiple=0):
Goals for a wiki system
Some goals for a better wiki system:
- HTML markup only! No restructured text, ad-hoc formats, etc. The lock-in is so awful in all of today's wikis. WYSIWYG editors are mature now- users should be able to pick WYSIWYG or full html.
- no training or external docs should be required to use all the features
- don't lose my scroll position when I want to edit some text I'm looking at
- encourage linking and creation of RDF data, probably with rdfa
- immediately exploit those links and metadata with easy searching/filtering/etc. Use FOAF data to limit my search to pages written by people I know, etc.
- keep the ownership clear (this is the opposite of some wiki philosophies). Spam cleanup should be very simple.
- encourage edits and especially annotations
A common case seems to be "add a new page and list it in some existing TOC section". Another one is "add a new section (paragraph or more) to this page". Editing words within an existing section that you didn't write, that might be rare.
I still like tinymce, although nelix_ isn't a fan.
Wikis that I use (that I'm trying to be better than) are: twiki, zwiki, confluence.
Related: rdf blog engine ideas
Smooth migration from CVS to darcs
I moved another project from CVS to darcs. The main secret is just cvs2darcs, which has worked perfectly for me. But in this case, I knew I there were some URLs in the wild pointing into my viewcvs site, which I didn't want to break.
So I fired up darcsweb, which is nicer than I expected it would be. I'm using nginx, so I can't just run darcsweb as CGI. While eventually the darcsweb toplevel code should be rewritten to not be CGI, for now I'm running a simple twisted.web CGI server. Here's the full code:
#!/usr/bin/python
import sys
from twisted.internet import reactor
from twisted.python import log
from twisted.web import server, resource, static, twcgi
class Root(resource.Resource):
def __init__(self):
resource.Resource.__init__(self)
for f in ['darcs.png', 'minidarcs.png', 'style.css']:
self.children[f] = static.File(f)
self.children[''] = twcgi.CGIScript(filename='./darcsweb.cgi')
log.startLogging(sys.stdout)
reactor.listenTCP(8004, server.Site(Root()))
reactor.run()
Finally, to make the URLs redirect, I added a nginx rewrite rule:
server { include conf/stdsite.conf;
server_name cvs.bigasterisk.com;
location / {
proxy_pass http://bang:8003/;
# for 'room', filenames in viewcvs forward to the new darcs repository
# e.g. '/viewcvs/room/evening_lights?rev=1.3'
rewrite ^/viewcvs/room/([^\?]*).* "http://bigasterisk.com/darcs/?r=room;a=headblob;f=/$1?" permanent;
}
}
So now you can go to an old link to viewcvs and it'll redirect to a reasonable point in darcsweb. Until I relocate all my files into new directories, which darcs will let me do easily :)
Python date convert
I made a web app to help people with date/time format conversions in python. The only one I especially checked was the one I needed at the moment:
email ("Wed, 26 Dec 2007 11:42:54 -0800")
to
iso8601 ("2007-12-26T11:42:54-08:00").
Searching for 'search'
I searched google for 'search' and followed the first result, searched that for 'search', etc.:
http://www.google.com/ -> http://www.live.com/ -> http://www.search.com/ -> http://search.yahoo.com/ and yahoo returns itself.
Visited-link hack proposal for revyu.com
http://revyu.com gathers people's reviews of anything on the web. The web is so big that you don't even think of lots of things that you could review and would be happy to review. So what happens is that when you come to http://revyu.com, you notice the list of recent reviews, realize that you are familiar with some of them, so you pile on a few more reviews of your own.
That mechanism for capturing more reviews won't scale very well if revyu.com becomes a lot more popular. Every time I visit, there could be a huge number of new reviews. I might like to look through them to see what I can offer, but I don't have time to scan the list of 80 new links.
This nearly-useless css hack can help. It measures the colors that your browser applies to visited/non-visited links to separate a known set of links into the ones you've seen and (probably) haven't seen. That's just what I want on revyu.com-- a list of the recently-reviewed URLs that I have also seen. It's fine to show all the recent reviews too, just for interest, but I'm much less likely to have a pile-on review for those.
gps tracker
Today I wrote a thing with the python gps module (from gpsd), a nevow website with livepage, and google maps. Then I went out on the road with a gps receiver, laptop, and Treo 600 and broadcasted my position. You could watch me move at http://maps.bigasterisk.com
darcs get http://darcs.bigasterisk.com/maps
to get the code, or just look at:
http://darcs.bigasterisk.com/maps/serve
http://darcs.bigasterisk.com/maps/postPosition
for the good parts.
hiding firefox bars
There are some web pages that I want to leave on my screen a lot, e.g. my tiddlywiki page. I would like a firefox command to hide all menus/toolbars/statusbars at once, and only for my selected windows.
The closest I have right now is some menu options that turn off most of the bars, but I can't turn off the top menubar. But, the settings affect future windows I create unless I undo them, and that workflow is a pain. I'd prefer one key to show/hide the UI, like photoshop's tab key (toggles all palettes on and off).
While we're at it, there should be a page mangler that collapses any empty elements so that my always-on-screen page can take up minimal space.
https://addons.mozilla.org/firefox/786/ may be relevant, haven't tried it yet.
also http://www.aqua-soft.org/board/showthread.php?t=36979#4
connecting the loggers of mochikit, firebug, and divmod
This will save you about 50 seconds of RTFS, but maybe that's all that was stopping you from having a comfortable logging setup.
The plan is to redirect mochikit log() messages and divmod log messages into firebug, whose console will stay active over a reload, and can be turned on and off more easily than a mochikit in-the-page page.
Divmod.logger.addObserver(function(ev) {
if (ev.channel == "transport") {
return;
}
console.info("divmod (%s): %s", ev.channel, ev.message);
});
logger.addListener('logConsole', null, function(msg) {
console.info(msg);
});
Now:
log("mochikit message");
console.info("firebug message");
Divmod.log("divmod message");
posted gasuse
http://gasuse.bigasterisk.com now runs the latest gasuse code, including some SVG line graphing. The data is fixed RDF (read from xml). Next comes authentication so I can start adding new records in the field from my cell phone.
SHDH 7
Super Happy Dev House 7 report:
I got started on gasuse and rearranged some things. Donovan helped me with a nested sequence in nevow. Nevow is hard because of all the things you can't see, but isn't omitting things you don't need to see the point of programming languages?
Then I got distracted with Jesse's request for some demo tiles to ship with his scrolling map widget in dojo. I had recently made some renderings of the TIGER streetmap data, so I hacked that code some more to output tiles at multiple zooms. Then, to make our demo tiles somehow better than the tiles you get with gmaps, I added rendering of address numbers on the streets. My renderings still had various embarrassing artifacts, so I spent the rest of the night cleaning some of them up. I'm especially pleased with the results of the street name repeater code, which tries to write a street name label every 200 pixels. Text alignment still needs work; and we didn't get to try any street-smoothing algorithms.
Meanwhile, David Weekly was jacking into ODB-II ports on people's cars to see what they would output, and I didn't even notice! I'd love to get that going on my Accord. Logs with accurate speed and timestamps would make great plots on my street maps.
google reader vs bloglines
I'm a bloglines.com user, but I tried google.com/reader for 3 minutes. It doesn't seem to have anything interesting, at least not immediately after you import your subscriptions.
I also see that google hasn't improved on the horrible 'keep unread' command that bloglines also has. GR has 'stars' and 'blog this' and 'labels' which I have not investigated. On bloglines, 'keep unread' is by far the cheapest way to say 'this article is notable and I want to reread it later or show it to someone else later'. Putting an article in clippings (and finding it later) is many times harder. But 'keep unread' sucks, because it makes the article indistinguishable from new articles. That property combined with the fact that, on a quick news scan, 'keep unread' is how I'm encouraged to mark the articles I especially like, means that the unread flag is being overloaded in a bad way.
The only time 'keep unread' would mean what it says is when I accidentally load an article onto the screen but then somehow do not read it at all. Anything other condition means something like 'seen', 'read', 'viewed in the last session', 'would like to reread', etc.
Possibly GR stars are a fix to this, but then there shouldn't be a per-article 'keep unread'. There should be viewer commands like 'undo last article view' or 'undo last session' which are more clearly to be used when articles were presented but the user didn't read them.
Also, the GR status line says 'Could not find parameter "date" in map "entry-template". TypeError: a has no properties' :)
Atom feed of this blog
