<img class="shadow" data-lazy-fallback="1" decoding="async" src="/dog_not_eating_dog_food.webp"/> [PetMD]( ) …or if you prefer, [eating my own cooking]( ), or [scratching my own itch]( ), or [drinking my own champagne]( ). Sure. These are all metaphors for the idea that if you build something, it turns out better if you use it yourself, especially if you *want* it yourself. However, when I think about [my projects]( ) [for bridging]( ) [social networks]( ), I wonder if I don’t use them myself deeply enough. If I’m not the target audience. Is that a problem? It’s not entirely true. Strictly speaking, I do use them. After this post gets published, you’ll see a trickle of likes, reposts, and replies from social networks start to show up [down in the comments](#comments ), thanks to [Bridgy]( ) and [Bridgy Fed]( ). The part I worry about isn’t the tools part, it’s the social part. How online social tools should work, how communities should use them, how they affect the ways people interact online. These have all been hot topics for a while now, with social networks pushing “healthy conversations” and Congress haranguing tech execs on Capitol Hill, and even more acutely recently now that [Twitter is burning]( ) and a new crop of social networks has sprouted. These questions are complex, deep, and important. Many people have their own slants: big companies on business models, startups [on]( ) [features]( ) [and](https://post.news/ ) [news](https://artifact.news/ ), [IndieWeb]( ) on owning your data, the [fediverse]( ) on [consent and safety]( ), libertarian techies [on anti-censorship]( ), government officials on…whatever helps them get re-elected, I guess. I don’t know which of these angles is right, but I do know the issues are important. And as someone building social plumbing and tools, I’m keenly aware that my choices directly impact them, if only for my relatively small user base. They’re not easy choices! [In Thorsten Ball’s dichotomy]( ), I’m fully type 2: if a technical problem requires human behavior, that makes it *more* difficult to handle, not less. <img class="shadow" data-lazy-fallback="1" decoding="async" src="/cebu_taoist_temple_philippines.jpg"/> [Curioso](https://www.shutterstock.com/image-photo/pagoda-dragon-sculpture-taoist-temple-cebu-338318765 ) The problem is, I don’t have my own angle. I don’t know how tech should handle online social interactions – granted, probably no one does for sure – and I’m not particularly qualified or motivated to tackle it. Part of it is that [I don’t really hang out on the internet](/2018-09-04_i-dont-hang-out-on-the-internet ). I’m [somewhat online]( ) in a few bits of open source, but only somewhat, and not a ton elsewhere. I don’t post many times a day, I’m not on Twitter or Mastodon for hours at a time, I haven’t made many close friends on the internet. I definitely don’t have deep experience in community organizing or support. At the same time, I’m not under any illusion that the tools and services I build are neutral. We’ve mostly matured beyond “tech isn’t good or bad, it’s how it’s used,” especially for social tech. [Joel Spolksy’s historical view on this is one of my favorites]( ), including his “primary axiom of online communities”: > Small software implementation details result in big differences in the way the community develops, behaves, and feels. I’ve seen this firsthand with [Bridgy]( ). Most users love it, but I do occasionally hear complaints that it creates surprising [context collapses]( ) when someone’s reply shows up in a different place than they originally posted it. There’s also the broader concern that webmentions [support and promote public conversations over private ones]( ), and the ongoing debate over whether they [hurt]( ) [or help]( ) your control over your own data. These conversations are [many years old](... ), but the recent explosion of alternative social networks and the fediverse has injected new life into them. Again, these are important questions. We need to figure out how to design healthy online spaces and tools! And I may have a few loose opinions here and there, but in general, I don’t have deeply held ideas or convictions, nor do I have a burning desire to work on the problem. It’s just not me. I’m grateful to the people and groups who are. And honestly, I’m not *too* worried. I still believe I can build tools that are net positive even if I’m Not That Online. I don’t feel too much like I’m neglecting some internet civic duty. But every now and then, I wonder if I’m not eating quite enough of my own dog food cooking, or not in quite the right way, or something. Am I overthinking it? What do you think?
[ <img data-lazy-fallback="1" decoding="async" src="/twitter_logo_upside_down.png"/>]( ) Well, it’s come to this. [Twitter is burning](https://twitterisgoinggreat.com/ ), [a billionaire owes money](https://www.reuters.com/technology/twitter-makes-first-interest-payment-musk-buyout-debt-bloomberg-news-2023-01-30/ ), [an API will soon get lobotomized](https://twittercommunity.com/t/announcing-new-access-tiers-for-the-twitter-api/188728 ), so [Bridgy]( )‘s Twitter support will die within the month is dead. [Granary]( )‘s and [twitter-atom](https://twitter-atom.appspot.com/ ) too. [The Twitter API may now be effectively unmaintained](/the-twitter-api-is-now-effectively-unmaintained ), but they still managed to find an engineer somewhere to change a few numbers in the billing code and [update some text on a web page](https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api ). What a waste. Plenty of ink has been spilled on all this already, I won’t belabor the point, but what an utter waste. Right now, Bridgy uses a free tier of Twitter’s API, equivalent to what many other major social networks offer. [By April 29th, this free tier will disappear.](https://twittercommunity.com/t/announcing-new-access-tiers-for-the-twitter-api/188728 ) My options will be a $100/mo plan with a quota of 10k tweets/mo, roughly .1% of what Bridgy currently uses, or an enterprise plan with unknown quota that [reportedly starts at $42k/mo]( ). Neither of these options is feasible. Bridgy can’t function with .1% of its current usage, and I won’t pay Twitter $500k/yr for a little side project. The silver lining is, after all the chaos and destruction and flight to the [fediverse]( ), Twitter doesn’t feel nearly as important now as it did half a year ago. It’s always been Bridgy’s biggest user base, [it had a great 11-year run](/2022-01-08_happy-10th-birthday-bridgy ), I never quite expected it to end like this, but here we are. To everyone who used it, thank you for your interest and support over the years! It’s been a great ride. And who knows, Elon’s [Twitter 2.0](https://blog.twitter.com/en_us/topics/company/2022/twitter-2-0-our-continued-commitment-to-the-public-conversation ) is awful at comms and changes its plans all the time, so there’s a chance they’ll take this all back tomorrow. But assuming it sticks, Bridgy Twitter will stop working on April 29, if not before. I plan to leave it up and running until then. got unceremoniously suspended on April 4th. So much for the month’s notice. [A billionaire owes money](https://www.reuters.com/technology/twitter-makes-first-interest-payment-musk-buyout-debt-bloomberg-news-2023-01-30/ ), [Twitter is burning](https://twitterisgoinggreat.com/ ), and the future is the [IndieWeb]( ) and the [fediverse]( ). Try out [Mastodon with Bridgy, classic or Fed]( ), and join us there!
Progress is a new error message.
[ ](image ) [ @snarfed.org ](https://fed.brid.gy/web/snarfed.org ) [ snarfed.org ]( ) [ snarfed ]( ) [ public@ryanb.org ](mailto:public_at_ryanb_dot_org ) I’m an [open source]( ) and [professional]( ) software engineer, [father]( ), [pianist]( ), [writer]( ), [climate hawk]( ), and more. I’m [based in San Francisco]( ). [snarfed.org]( ) has been around [since early 2002]( ). It was [born]( ) on my own server, which lived first in dorm rooms at school and then in an apartment in San Francisco. It later [migrated]( ) to a [Linux VPS]( ) at [JVDS]( ), and finally to its [current home]( ) on a [shared FreeBSD server](http://pair.com/services/web_hosting/ ) at [pair.com]( ). On the software side, it started on [SnipSnap]( ), then [moved]( ) to [PyBlosxom]( ), and [now runs]( ) on [WordPress]( ), originally on [its own theme]( ) and now on a [modified Ryu theme]( ). See my [software page]( ) for more of its custom patches, plugins, and themes. The header image is a [satellite photo of a military staging area]( ) near Al-Basrah, Iraq, taken by [Landsat 7](http://landsat7.usgs.gov/ ). Unless otherwise noted, all content on this web site is released into the public domain.
&lt;img data-lazy-fallback="1" decoding="async" src="/gears.jpg"/&gt; My open source software [projects](#projects ), [scripts](#scripts ), and [patches](#patches ). Unless otherwise noted, everything is public domain. Also see my [resume](/resume ), [GitHub profile]( ), and [other lists](/lists ). ### Projects <li><a href="https://brid.gy/">Bridgy</a> connects your web site to social media. Likes, reposts, mentions, cross-posting, and more. Part of the <a href="https://indieweb.org/">IndieWeb</a> ecosystem. </li> <li> <p><a href="https://fed.brid.gy/">Bridgy Fed</a> connects your web site to federated social networks natively, via ActivityPub. Lets you reply, like, and repost on <a href="https://joinmastodon.org/">Mastodon</a> and <a href="https://project.hubzilla.org/">Hubzilla</a> from your <a href="https://indieweb.org/">IndieWeb</a> site, and vice versa.</p> </li> <li> <p><a href="https://github.com/snarfed/granary">granary</a>: the social web translator. Fetches and converts data between social networks, HTML and JSON with <a href="http://microformats.org/wiki/microformats2">microformats2</a>, <a href="http://activitystrea.ms/">ActivityStreams</a>, <a href="https://tools.ietf.org/html/rfc4287">Atom</a>, <a href="http://www.rssboard.org/rss-specification">RSS</a>, <a href="https://jsonfeed.org/">JSON Feed</a>, and more.</p> </li> <li> <p><a href="https://lexrpc.readthedocs.io/">lexrpc</a> is a Python implementation of <a href="https://atproto.com/">AT Protocol</a>‘s <a href="https://atproto.com/specs/xrpc">XRPC</a> + <a href="https://atproto.com/guides/lexicon">Lexicon</a>.</p> </li> <li> <p><a href="https://github.com/snarfed/dag-json">dag-json</a> is a Python implementation of the <a href="https://ipld.io/">IPLD</a> <a href="https://ipld.io/docs/codecs/known/dag-json/">DAG-JSON codec</a>.</p> </li> <li> <p><a href="http://www.indiemap.org/">Indie Map</a> is a public <a href="https://indieweb.org/">IndieWeb</a> social graph and dataset, based on a complete crawl of 2300 of the most active IndieWeb sites.</p> </li> <li> <p><a href="http://huffduff-video.snarfed.org/">huffduff-video</a> lets you send <a href="http://huffduffer.com/">Huffduffer</a> the audio from videos on YouTube, Vimeo, <a href="http://rg3.github.io/youtube-dl/supportedsites.html">and more</a>.</p> </li> <li> <p><a href="https://github.com/snarfed/flask-gae-static">flask-gae-static</a> is a <a href="https://flask.palletsprojects.com/">Flask</a> extension for <a href="https://cloud.google.com/appengine/">Google App Engine</a> that serves static file handlers from <a href="https://cloud.google.com/appengine/docs/standard/python3/config/appref"><code>app.yaml</code> files</a>.</p> </li> <li> <p><a href="https://github.com/indieweb/wordpress-micropub">wordpress-micropub</a> is a <a href="https://indieweb.org/micropub">Micropub</a> server plugin for WordPress.</p> </li> <li> <p><a href="https://github.com/snarfed/baffle">Baffle</a> (now decommissioned) used to let you use <a href="https://indieweb.org/Microsub-spec">Microsub</a> client apps with traditional feed readers like <a href="https://www.newsblur.com/">NewsBlur</a> and <a href="https://feedly.com/">Feedly</a>.</p> </li> <li> <p><a href="https://github.com/snarfed/ownyourresponses">OwnYourResponses</a> is <a href="https://indieweb.org/PESOS">PESOS</a> as a service for likes, comments, reshares, etc. on social networks.</p> </li> <li> <p><a href="https://github.com/snarfed/ownyourcheckin">OwnYourCheckin</a> is <a href="https://indieweb.org/PESOS">PESOS</a> as a service for Facebook checkins.</p> </li> <li> <p><a href="/indieweb-press-this-bookmarklets-for-wordpress">IndieWeb Press This bookmarklets for WordPress</a> let you quickly <a href="https://indieweb.org/reply">reply</a>, <a href="https://indieweb.org/like">like</a>, <a href="https://indieweb.org/repost">repost</a>, and <a href="https://indieweb.org/rsvp">RSVP</a> to <a href="https://indieweb.org/">IndieWeb</a> posts and events.</p> </li> <li> <p><a href="https://github.com/snarfed/oauth-dropins">oauth-dropins</a> is a collection of drop-in <a href="http://oauth.net/">OAuth</a> client flows in Python <a href="https://appengine.google.com/">App Engine</a> for popular sites like Facebook, Twitter, and many more.</p> </li> <li> <p><a href="/2013-07-16_open-link-in-app">Open Link in App</a> is an Android app that opens links in their native app instead of the browser. It currently supports Facebook, Twitter, Instagram, GitHub, and Goodreads.</p> </li> <li> <p><a href="https://plusstreamfeed.appspot.com/">plusstreamfeed</a> generates and serves an Atom feed of your Google+ stream, ie posts from the people in your circles.</p> </li> <li> <p><a href="https://instagram-atom.appspot.com/">instagram-atom</a> generates and serves an Atom feed of your Instagram stream, ie photos from the people you follow.</p> </li> <li> <p><a href="https://facebook-atom.appspot.com/">facebook-atom</a> generates and serves an Atom feed of your Facebook news feed, ie posts from your friends. <a href="/2012-03-12_activitystreams_for_facebook_and_twitter">More background.</a></p> </li> <li> <p><a href="https://twitter-atom.appspot.com/">twitter-atom</a> generates and serves an Atom feed of your Twitter stream or a Twitter list. <a href="/2012-03-12_activitystreams_for_facebook_and_twitter">More background.</a></p> </li> <li> <p><a href="https://github.com/snarfed/portablecontacts-unofficial">portablecontacts-unofficial</a> is a library and REST API that converts Facebook and Twitter contacts to <a href="http://portablecontacts.net/">PortableContacts</a> format. See the <a href="/2012-02-22_portablecontacts_for_facebook_and_twitter">blog post</a> for more.</p> </li> <li> <p><a href="https://github.com/snarfed/webfinger-unofficial">webfinger-unofficial</a> is a <a href="http://code.google.com/p/webfinger/">WebFinger</a> server for social networking sites like Facebook and Twitter that don’t implement it themselves. See the <a href="/2012-01-16_webfinger_for_facebook_and_twitter">blog post</a> for more.</p> </li> <li> <p><a href="https://github.com/snarfed/salmon-unofficial">salmon-unofficial</a> is a <a href="http://salmon-protocol.org/">Salmon</a> server for social networking sites like Facebook, Twitter, and Google+ that don’t implement it themselves. See the <a href="/2012-07-14_salmon_for_facebook_twitter_and_google_plus">blog post</a> for details.</p> </li> <li> <p><a href="/2012-11-30_facebook_to_wordpress">Facebook to WordPress</a> is a script that copies your <a href="http://www.facebook.com/">Facebook</a> posts to a <a href="http://wordpress.org/">WordPress</a> blog of your choice.</p> </li> <li> <p><a href="http://bowflex-planner.appspot.com/">Bowflex Planner</a> optimizes Bowflex Revolution exercise routines to minimize rearranging weights and attachments. It was an excuse to learn the <a href="http://golang.org/">Go programming language</a> (aka golang).</p> </li> <li> <p><a href="https://github.com/snarfed/codeherenow">codeherenow</a> is a scrolling ticker of source code checkins made by people right here, right now (ie recently, at a specific place). Good for hackathons, conferences, etc. Written for (and at) <a href="http://www.superhappy.be/">Super Happy Block Party</a>.</p> </li> <li> <p><a href="/locale_headphone_buttons_plugin">Locale Headphone Buttons Plugin</a> is a plugin for the <a href="http://www.twofortyfouram.com/">Locale</a> Android app that simulates pressing a headphone or headset button.</p> </li> <li> <p><a href="/locale_music_plugin">Locale Music Plugin</a> is a plugin for the <a href="http://www.twofortyfouram.com/">Locale</a> Android app that plays any song, audio file, or playlist in the default music app.</p> </li> <li> <p><a href="https://github.com/rogerhu/mockfacebook">mockfacebook</a> is a standalone HTTP server that implements Facebook’s <a href="http://developers.facebook.com/docs/reference/fql/">FQL</a> and <a href="http://developers.facebook.com/docs/reference/api/">Graph API</a>. It’s particularly useful for testing.</p> </li> <li> <p>The <a href="/snarfed_wordpress_theme">snarfed WordPress theme</a>, which <strike>is currently running</strike> used to run on this site.</p> </li> <li> <p><a href="/google_talk_sms_pidgin_plugin">google_talk_sms.pl</a>, a <a href="http://pidgin.im/">Pidgin</a> plugin that enables <a href="http://talk.google.com/">Google Talk</a>‘s <a href="http://gmailblog.blogspot.com/2008/12/really-new-in-labs-this-time-sms-text.html">SMS text messaging</a> feature.</p> </li> <li> <p><a href="http://shell.appspot.com/">shell</a>, <a href="http://openid-provider.appspot.com/">openid-provider</a>, and <a href="http://openid-consumer.appspot.com/">openid-consumer</a>, three <a href="http://code.google.com/appengine/">Google App Engine</a> <a href="http://code.google.com/p/google-app-engine-samples/">sample apps</a>. See <a href="/2008-04-07_google_app_engine_launched">my announcement</a> for details.</p> </li> <li> <p><a href="http://code.google.com/p/openid-test/">openid-test</a> is an interoperability test suite for <a href="http://openid.net/">OpenID</a>.</p> </li> <li> <p><a href="https://pyblosxom.github.io/">PyBlosxom</a> is a lightweight weblog platform, based on <a href="http://blosxom.com/">Blosxom</a> and written in Python.</p> </li> <li> <p>An <a href="/pyblosxom_openid_comments">OpenID comments plugin for PyBlosxom</a>.</p> </li> <li> <p>An <a href="/pyblosxom_openid_server">OpenID server plugin for PyBlosxom</a>.</p> </li> <li> <p><a href="/site_search_with_the_Google_AJAX_Search_API">AJAX site search with the Google AJAX Search API</a>.</p> </li> <li> <p><a href="/pyblosxom_index">index</a> is a <a href="https://pyblosxom.github.io/">PyBlosxom</a> plugin that displays an alphabetical index of all entries.</p> </li> <li> <p><a href="/pyblosxom_history">history</a> is a <a href="https://pyblosxom.github.io/">PyBlosxom</a> plugin that displays change history for entries.</p> </li> <li> <p><a href="/photogallery">photogallery</a> is a <a href="https://pyblosxom.github.io/">PyBlosxom</a> plugin that displays photo galleries.</p> </li> <li> <p><a href="/hardcodedates">hardcodedates</a> is a <a href="https://pyblosxom.github.io/">PyBlosxom</a> plugin that stores mtimes in a file.</p> </li> <li> <p>An <a href="/pyblosxom_rdf_flavour">RDF flavour</a> for Pyblosxom.</p> </li> <li> <p>The <a href="/snarfed_org_pyblosxom_flavour">snarfed.org PyBlosxom flavour</a>, which looks like this site.</p> </li> <li> <p><a href="/filekicker">Filekicker</a> is a <a href="https://pyblosxom.github.io/">PyBlosxom</a> plugin that serves static files.</p> </li> <li> <p><a href="/fillcode">Fillcode</a> is an <a href="http://gnu.org/software/emacs/">Emacs</a> minor mode that fills, or wraps, some parts of source code.</p> </li> <li> <p><a href="/bigbrother">BigBrother</a> generates statistics and graphs from your away message history. See my <a href="/ryan.barrett.name/bigbrother/">personal example</a>.</p> </li> <li> <p><a href="/p4">P4</a> is a compact, lightweight overlay network library, similar to <a href="http://rfc-gnutella.sourceforge.net/">Gnutella</a> and <a href="http://www.pdos.lcs.mit.edu/chord/">Chord</a>.</p> </li> <li> <p><a href="https://github.com/snarfed/p4sync">p4sync</a> is a successor to <a href="/p4">P4</a> that synchronizes playback across multiple computers.</p> </li> <li> <p><a href="/libmsntp">libmsntp</a> is a compact, portable <a href="/libmsntp">SNTP library</a>. It provides both client and server functionality.</p> </li> <li> <p>The <a href="/snarfed_org_snipsnap_theme">snarfed.org SnipSnap theme</a>, which looks like this site.</p> </li> <li> <p><a href="/snipsnap_macros">Snipsnap macros</a> is a collection of macros for <a href="http://snipsnap.org">SnipSnap</a>, the web server that <strike>runs</strike> used to run this site.</p> </li> <li> <p><a href="/tictactoe">Tictactoe</a> is an OpenGL engine that provides realistic procedural modelling and rendering of water.</p> </li> <li> <p><a href="/voxel">Voxel</a> is a high-resolution voxel terrain rendering engine.</p> </li> <li> <p><a href="/malbum">MAlbum</a> is a quick and easy graphical interface for creating a web album. (Maulik has a <a href="http://maulik.freeshell.net/software/malbum-release/malbumSample">sample album</a>.)</p> </li> <li> <p><a href="/nullprpl_pidgin_null_protocol_plugin">Nullprpl</a> is a mock protocol plugin that lets you use <a href="http://pidgin.sf.net/">Pidgin</a> without connecting to a server. (<a href="http://developer.pidgin.im/viewmtn/revision/info/17c1e71f633d40fd14e46c08a17a500605d793c8">Added to Pidgin</a> on 5/30/2007.)</p> </li> <li> <p><a href="/remote">Remote</a> is a client for <a href="http://httpq.sourceforge.net/">httpQ</a>, a network server plugin for <a href="http://winamp.com">Winamp</a> (RIP; <a href="http://winamp.en.botbi.com/">download here</a>).</p> </li> <li> <p><a href="/scavenger">Scavenger</a> extracts <a href="http://zvon.org/tmRFC/RFC2822/Output/index.html">RFC2822</a> email addresses from text and binary files.</p> </li> <li> <p><a href="/folderstat">Folderstat</a> retrieves the size of the folders in an IMAP email account.</p> </li> ### Scripts <li><a href="https://github.com/snarfed/misc/blob/master/choose.sh">choose.sh</a>, <a href="https://github.com/snarfed/misc/blob/master/choose.py">choose.py</a>, and <a href="https://github.com/snarfed/misc/blob/master/rename.sh">rename.sh</a> are a dirt simple suite of scripts for managing pictures, specifically choosing the ones you want to keep and renaming (ie tagging) them. </li> <li> <p><a href="/import_issues">import_issues.py</a> imports issues from a CSV file into a <a href="http://code.google.com/hosting/">Google Code project hosting</a> <a href="http://code.google.com/p/support/wiki/IssueTracker">issue tracker</a>.</p> </li> <li> <p><a href="http://greasespot.net/">Greasemonkey</a> usercripts: <a href="/greasemonkey_gmail_remove_trailing_quote">remove trailing quotes in GMail</a>, <a href="/palo_alto_library_amazon_greasemonkey">check availability in Palo Alto Library</a>.</p> </li> <li> <p><a href="http://userstyles.org/help/userstyles">Userstyles</a>: <a href="/more_minimalist_gmail">More Minimalist Gmail</a>, <a href="/google_calendar_simplified_userstyle">Google Calendar Simplified</a>, and <a href="/google_tasks_simplified_userstyle">Google Tasks Simplified</a>.</p> </li> <li> <p><a href="/sync_wordpress">sync_wordpress.sh</a> syncs <a href="http://wordpress.org/">WordPress</a>, files, plugins, themes, and options stored in the database from one WordPress instance to another.</p> </li> <li> <p><a href="https://github.com/snarfed/wordpress/blob/main/pyblosxom2wxr.sh">pyblosxom2wxr.sh</a> is a shell script that migrates content from <a href="https://pyblosxom.github.io/">PyBlosxom</a> to <a href="http://wordpress.org/">WordPress</a>.</p> </li> <li> <p><a href="/unixify">unixify.sh</a> is a simple shell script I use to sanitize filenames and files people send me from other operating systems.</p> </li> <li> <p><a href="/backup_google">backup_google.sh</a> is a shell script that backs up data from Google <a href="http://www.google.com/contacts">Contacts</a>, <a href="http://calendar.google.com/">Calendar</a>, <a href="http://www.google.com/reader/">Reader</a>, and <a href="https://mail.google.com/tasks/canvas">Tasks</a>.</p> </li> <li> <p><a href="/download_picasa_album">download_picasa_album.sh</a> downloads entire <a href="http://picasaweb.google.com/">Picasa Web</a> photo albums.</p> </li> <li> <p><a href="/simonitor">simonitor</a> screen scrapes <a href="http://simon.com/">simon.com</a> to fetch the available balance on one or more Simon gift cards.</p> </li> <li> <p><a href="/cdname_py">cdname.py</a> names MP3 files according to <a href="http://cddb.com/">CDDB</a>/<a href="http://freedb.org/">freedb</a> INF files.</p> </li> <li> <p><a href="/snipsnap2svn">snipsnap2svn</a> is an <a href="http://www.w3.org/TR/xslt">XSLT</a> script that converts <a href="http://snipsnap.org/">SnipSnap</a> XML database exports into <a href="http://svn.collab.net/viewvc/*checkout*/svn/trunk/notes/fs_dumprestore.txt">Subversion dumpfiles</a>.</p> </li> <li> <p><a href="/ditrit">Ditrit</a> is a programmable application launcher that tries to “do the right thing” for any input it’s given.</p> </li> <li> <p><a href="/snipscrape">snipscrape</a> transforms SnipSnap-generated HTML into XML that can be imported back into SnipSnap.</p> </li> ### Patches I stopped tracking these comprehensively a long time ago. Still, here’s a sampling. <li> <p>A <a href="https://github.com/snarfed/misc/blob/master/patches/wordpress_ryu_theme_1.1_dates_on_pages.patch">patch</a> for the <a href="http://wordpress.org/themes/ryu">Ryu</a> WordPress theme that adds published and modified dates to pages. <a href="http://wordpress.org/support/topic/patch-show-published-and-modified-dates-on-pages">Submitted here.</a></p> </li> <li> <p>A <a href="https://github.com/tekezo/KeyRemap4MacBook/pull/118">setting</a> for <a href="http://pqrs.org/macosx/keyremap4macbook/">KeyRemap4MacBook</a> that provides <a href="http://support.apple.com/kb/PH11262">sticky modifier keys</a> like Mac OS X, but <a href="http://apple.stackexchange.com/questions/13708/disabling-the-keep-pressed-function-of-os-x-sticky-keys"><em>without</em> locking</a>.</p> </li> <li> <p>A <a href="http://wordpress.org/support/topic/plugin-nextgen-gallery-patch-bug-fix-for-imagemagick-exec-and-passthru-checks">patch</a> (<a href="https://github.com/snarfed/misc/blob/master/patches/nextgen_gallery_imagemagick_exec_passthru_check.patch">download</a>) for <a href="http://www.nextgen-gallery.com/">NextGEN Gallery</a> that fixes its <a href="http://www.imagemagick.org/">ImageMagick</a> checks for <code>exec</code> and <code>passthru</code>.</p> </li> <li> <p>A <a href="http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9647">patch</a> for <a href="http://www.gnu.org/software/emacs/">Emacs</a>‘s <a href="http://www.emacswiki.org/emacs/ShellDirtrackByPrompt">dirtrack-mode</a> that adds support for shells with path prefixes, e.g. <a href="http://www.gnu.org/software/tramp/">Tramp</a>-based remote shells. Applied in <a href="http://bzr.savannah.gnu.org/lh/emacs/trunk/revision/106107">revision 106107</a>.</p> </li> <li> <p>A <a href="https://github.com/snarfed/misc/blob/master/patches/ajax_comment_preview_2.3_loading_and_error.patch">patch</a> for the WordPress <a href="http://blogwaffe.com/ajax-comment-preview/">Ajax Comment Preview</a> plugin that fixes bugs with the loading and error messages and wraps them in stylable spans.</p> </li> <li> <p>A <a href="https://github.com/snarfed/misc/blob/master/patches/www_netflix_new_rating_regex.patch">patch</a> for the <a href="http://search.cpan.org/dist/WWW-Netflix/">WWW::Netflix</a> Perl library that update the regular expression it uses to screen-scrape movie ratings. This handles Netflix’s HTML as of 11/2010.</p> </li> <li> <p>Patches to <a href="http://plugins.trac.wordpress.org/ticket/1178">shutter-reloaded</a> and <a href="http://www.nextgen-gallery.com/">NextGEN Gallery</a> that let you close the shutter display with the Escape key or by clicking on the background.</p> </li> <li> <p>WordPress importer <a href="http://plugins.trac.wordpress.org/ticket/1162">patch</a> that fixes an order-dependent comment tag bug.</p> </li> <li> <p>Patches that add <a href="http://code.google.com/p/thematic/issues/detail?id=83">per-comment hooks</a> (applied in <a href="http://code.google.com/p/thematic/source/detail?r=661">r661</a>) and a <a href="http://code.google.com/p/thematic/issues/detail?id=82">comment-meta filter</a> (applied in <a href="http://code.google.com/p/thematic/source/detail?r=660">r660</a>) to the <a href="http://themeshaper.com/thematic/">Thematic</a> WordPress theme.</p> </li> <li> <p>Two minor patches (<a href="http://pythonpaste.org/archives/message/20080210.035948.3e0d6399.en.html">one</a>, <a href="http://pythonpaste.org/archives/message/20080210.185854.234c983e.en.html">two</a>) to <a href="http://pythonpaste.org/webob/">paste.webob</a> that fix character set handling bugs. (<a href="http://trac.pythonpaste.org/pythonpaste/changeset/7234">Both</a> <a href="http://trac.pythonpaste.org/pythonpaste/changeset/7235">applied</a> on 2/17/2008).</p> </li> <li> <p>A <a href="https://github.com/snarfed/misc/blob/master/patches/opml2markdown_linkify.patch">patch</a> for <a href="http://fletcher.freeshell.org/wiki/Markdown_and_XML">opml2markdown.xslt</a> that adds links to each item’s web site and feed.</p> </li> <li> <p>A <a href="https://github.com/snarfed/misc/blob/master/patches/comments_openid.patch">patch</a> that updates the <a href="http://www.openidenabled.com/software/pyblosxom/release-announcement">PyBlosxom OpenID comments plugin</a> to work with versions 1.x of the <a href="http://www.openidenabled.com/openid/libraries/python">Python OpenID libraries</a>. (<a href="/pyblosxom_openid_comments">Applied</a> on 9/6/2007.)</p> </li> <li> <p>A <a href="https://github.com/snarfed/misc/blob/master/patches/cryptutil_ioerror.patch">minor bugfix for cryptutil.py</a> in the <a href="http://www.openidenabled.com/openid/libraries/python">Python OpenID libraries</a>. The patch is against version 2.0.0-rc3b.</p> </li> <li> <p>A <a href="https://github.com/snarfed/misc/blob/master/patches/tkdiff_quote_filenames_svn.patch">tkdiff patch that quotes filenames</a> (<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1672284&amp;group_id=64960&amp;atid=509274">tracker</a>) for files in Subversion repositories.</p> </li> <li> <p><a href="/pyblosxom_ajax_comments">AJAX commenting</a> in Pyblosxom. (<a href="http://pyblosxom.svn.sourceforge.net/viewvc/pyblosxom?view=rev&amp;revision=973">Applied</a> on 1/24/2007.)</p> </li> <li> <p>A <a href="/tcsh_highlighting_patch">tcsh highlighting patch</a> that highlights the match during incremental search, and in emacs mode, the region between the mark and cursor. (<a href="http://mx.gw.com/pipermail/tcsh/2006-August/003724.html">Applied</a> on 8/23/2006.)</p> </li> <li> <p>A patch to <a href="/remove_tcsh_globbing_in_history_search">remove tcsh globbing in history search</a>. (<a href="http://mx.gw.com/pipermail/tcsh/2006-August/003726.html">Applied</a> on 8/23/2006.)</p> </li> <li> <p>A <a href="/tcsh_delete_moves_mark_bug_fix">fix for a tcsh bug that moves the mark after deletions</a>. (Applied on 8/23/2006.)</p> </li> <li> <p>An <a href="/acoc_conf_for_context_diffs">acoc rule for coloring context diffs</a>.</p> </li> <li> <p>A <a href="/emacs_minibuffer-complete-and-exit_bug_fix">fix for an Emacs bug in minibuffer code</a>, specifically in <em>minibuffer-complete-and-exit</em>. (Fixed in Emacs 22.)</p> </li> <li> <p><a href="/port_pine_patch">port_pine_patch</a> is a shell script that automates porting Pine patches between versions.</p> </li> <li> <p><a href="/pine_reply-all_patch">Pine reply-all patch</a> adds a reply-all command to the <a href="http://www.washington.edu/pine">Pine</a> email client.</p> </li> <li> <p><a href="/pine_flowed-text_patch">Pine flowed-text patch</a> adds an option to <a href="http://www.washington.edu/pine">Pine</a> to turn off displaying flowed text.</p> </li> <li> <p><a href="/pine_remove_trailing_quote_patch">Pine remove trailing quote patch</a> adds an option to automatically remove trailing quotes from outgoing emails.</p> </li> <li> <p><a href="/pine_delete_attachments_on_save_patch">Pine delete attachments on save patch</a> adds an option to delete attachments from messages when you save them.</p> </li> <li> <p><a href="https://github.com/snarfed/misc/blob/master/patches/gaim_2_chat_invite_reverse_params.patch">Gaim chat_invite patch</a> fixes a <a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1595828&amp;group_id=235&amp;atid=100235">parameter ordering bug</a> in <a href="http://gaim.sf.net/">Gaim 2.x</a>‘s <a href="http://gaim.sourceforge.net/api/struct__GaimPluginProtocolInfo.html#a3ea6e94a223c32ba8814aec326f02a5">GaimPluginProtocolInfo::chat_invite</a> callback member. (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1595831&amp;group_id=235&amp;atid=300235">Applied</a> on 11/15/2006.)</p> </li> <li> <p><a href="https://github.com/snarfed/misc/blob/master/patches/gaim_1_away_menu_accelerators.patch">Gaim accelerators in away menus patch</a> (<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1031098&amp;group_id=235&amp;atid=300235">tracker</a>) fixes <a href="http://gaim.sf.net/">Gaim 1.x</a>‘s GTK menu code to allow accelerators in dynamically created menus, such as away message menus.</p> </li> <li> <p>Similarly, <a href="https://github.com/snarfed/misc/blob/master/patches/gaim_2_accounts_menu_accels.patch">Gaim accelerators in accounts submenus patch</a> fixes <a href="http://gaim.sf.net/">Gaim 2.x</a>‘s GTK menu code to allow accelerators in the dynamically created submenus of the Accounts menu. (<a href="https://sourceforge.net/tracker/index.php?func=detail&amp;aid=1597271&amp;group_id=235&amp;atid=300235">Applied</a> on 11/19/2006.)</p> </li> <li> <p><a href="/snipsnap_comment_without_login_patch">SnipSnap comment without login patch</a> allows visitors to post comments without logging in.</p> </li> <li> <p><a href="/snipsnap_recent-changes_snip_name_patch">SnipSnap recent-changes snip name patch</a> fixes a <a href="http://bugs.snipsnap.org/browse/SNIPSNAP-392">bug</a> in SnipSnap that causes recent-changes to show blog posts incorrectly.</p> </li> <li> <p><a href="/snipsnap_1_0b1_virtual_hostname_patch">SnipSnap 1.0b1 virtual hostname patch</a> fixes a <a href="http://bugs.snipsnap.org/browse/SNIPSNAP-387">bug</a> in SnipSnap that prevents <a href="/virtual_host_redirection">virtual host redirection</a>.</p> </li> <li> <p><a href="/autocutsel_clipboard_and_primary_patch">Autocutsel clipboard and primary patch</a> extends <a href="http://www.nongnu.org/autocutsel/">autocutsel</a> to synchronize both the clipboard and the primary selection in X Windows.</p> </li> <li> <p><a href="/libwebserver_shutdown_patch">Libwebserver shutdown patch</a> (<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1146074&amp;group_id=50164&amp;atid=458797">tracker</a>) adds a call to <a href="http://libwebserver.sourceforge.net/">libwebserver</a> to stop a running server and close its socket(s).</p> </li> <li> <p><a href="/webalizer_nofollow_patch">Webalizer nofollow patch</a> adds <a href="http://www.google.com/googleblog/2005/01/preventing-comment-spam.html">nofollow</a> support to the popular web server log analyzer <a href="http://webalizer.com/">Webalizer</a>.</p> </li>