UPDATE: I wrote this up much more nicely at StackOverflow:


My wife & I have gmail filters set up to forward each others’ facebook emails to each other. It brings a level of postmodern closeness and togetherness and awareness, and indeed keeps us from tripping each other up and having to have redundant exchanges of information. But then Facebook changed, and clicking each others’ links logged each other out. I can’t tell you how many times I’ve logged into facebook. Probably at least 100 in 2015 alone, if not more. IT. GETS. OLD. Then one day Carolyn played with the URL and discovered you could remove the last 2 parts of it, and it would bring you to the correct place (assuming you both had access). Then I realized I already had a plugin (chrome plugin id pajiegeliagebegjdhebejdlknciafen) called Redirector that lets you run a regular expression modification on any URLs you visit.  Why the hell was I not using this?   So just do this:

From To
(.*)(*)(&mid=.*) $1$2$3

And the problem is solved. Don’t bitch to me about the 4th set of parenthesis being unnecessary. It looks way better.

BONUS FEATURE: How to make the new flickr look like the old flickr:

From To

If you’ve moved to a digital lifestyle, and are an archivist, then you are probably downloading tons of data these days. Everything from music to movies to comics to games to images to software to emulator roms to books to articles.

Sorting stuff manually is stupid. Sort things (take a folder full of crap, and sort it intelligently into subfolders) with a script. Assimilate (move subfolders to correct repositories) with a script.

I’m not going to share my scripts. But here is a great pattern for sorting files into subfolders. I’ll use an example that deals with My Little Pony related files:

unset /q MASK
gosub addMask "My Little Pony*.*"
gosub addMask "MLP*.*"
gosub addMask "Equestria*.*"
gosub addMask "*Rainbow Dash*"
if "%MASK%" ne "" if not isdir %TARGETDIR% md %TARGETDIR%
if "%MASK%" ne "" mv  %MASK% %TARGETDIR%

This pattern can be copied over for anything. Simply change TARGETDIR to whatever folder you want. And use the addMask function to add wildcards that match those kinds of files.

:addMask [newMask]
	:Don't bother doing anything if no files match:
	if not exist %newMask% goto :addMaskReturn
	:Otherwise, add mask for those files to our mask list:
	if "%MASK%" eq "" goto :Empty_YES
	                  goto :Empty_NO
		    set MASK=%newMask%
		    goto :Empty_DONE
		    set MASK=%MASK%;%newMask%

Note that all my scripts are meant to be run on JPSoft‘s TakeCommand command-line interpreter (descended from 4NT in the 2000s, which was descended from 4DOS in the late 1990s, which was descended from NDOS, the replacement included in Norton Utilities in the late 1980’s). This would probably work with CMD.EXE or PowerShell, but I haven’t tested those.

Use this pattern to make a giant sortthese.bat that sorts everything everywhere. If you want to get fancy, centralize all the scripts into one script that examines the current path and branches based off of that. (It’s easier to keep backups if everything is in one place.)

Here’s an example of branching based off the location where you invoke a script:

::::: Determine assimilate role:
if "%_CWD"==  "%HD250G:\READY-TO-DELETE"                goto :assimilate_dvd-burned_media
if "%_CWD"==  "%HD250G:\ABOUT-TO-BE-BURNED\DATA\BURNED" goto :assimilate_dvd-burned_data
if "%_CWD"=="%HD2000G5:\ABOUT-TO-BE-BURNED\DATA\BURNED" goto :assimilate_bluray-burned_data
if "%_CWD"==  "%HD256G:\MEDIA\MOVIES"                   goto :assimilate_freshly_watched_movies
if "%_CWD"=="%HD1500G2:\MEDIA\MOVIES"                   goto :assimilate_freshly_watched_movies
if "%_CWD"== "%HD2000G:\MEDIA\MOVIES"                   goto :assimilate_freshly_watched_movies
if "%_CWD"== "%HD1000G:\downloadclient\completed"       goto :assimilate_fresh_downloads

^ That code may be confusing-looking because I never hard-code drive letters. All my harddrives have environment variables which evaluate to the correct letter depending on which computer you are on. Also, %_CWD is TakeCommand’s variable that is the current folder you are in. That does NOT work in CMD.EXE. CMD.EXE uses something else, so this would need some modification (more…)

It’s actually very, very, very simple. Create a torrent. Add some tiny file that has nothing to do with it. A README.txt or an unrelated JPG, for example. Create and upload your torrent.

Now move that file out of your local seeding location. Everyone who gets the torrent will thus not be able to get that data.

They will be stuck at 99.9%. Erroneously thinking that the torrent is not complete, they may let it run for days, weeks, or even months before realizing that in fact, all the files except for that one are 100% complete. Generally this means you will get far more seeding.

It’s great to subvert subversion ;) (more…)

Canker sores suck! And most everyone gets them from time to time!

There’s one thing that’s ever worked for me, and it’s worked in 1 treatment 50% of the time, 2 or 3 treatments the other 50% of the time. Apparently some people don’t know about this, so I thought I’d post it here.

Stomatitis by matsuyuki.

1) Get some salt. Not a shaker, the bit Morton’s container. You’re gonna need to *pour* salt.

2) Fill a BIG BIG glass full of HOT HOT HOT water, as hot as you can stand it being in your mouth. Just don’t burn yourself. It sucks to burn your tongue, and it’s not my fault if you do. I’m trying to help you.

3) Put salt in water. Keep stirring until the water is *completely* saturated, accepting no more salt. You can tell this because there will be a layer of non-absorbing salt in the bottom. Also, it should be a pretty vile concoction.

4) Hopefully it’s still really hot at this point. Take a mouthfull, and gargle/swish the salt water everywhere, especially on the sore. This will hurt. Do this as long as possible. Do this until there’s no heat left in the water.

5) Step #4 was just for one mouthfull. Repeat #4 until you’ve gargled every mouthful in the BIG BIG glass. This will take quite some time — at least 10 minutes.

Pretty much.. at least half the time, after doing this, I am INSTANTLY cured of my canker sore. It’s still there, but it doesn’t hurt. And it recedes within 24 hours. No need for painkillers, Oragel, or crushed aspirin. For me, this kills it. Dead. In 1-3 treatments.

I hear this is also good for preventing gum disease.

Saltwater is your new god! Image by amandabhslater.

Leave a comment if this worked or didn’t work for you. I’m curious as to how this solution affects different people. DON’T BURN YOURSELF! If you do, it’s your own damn fault. (more…)

One of the things I try to avoid is the business of manually checking sites. I really don’t do it. It’s a phenomenal waste of time. Even if you only check 1 or 2 sites a day, you may find that automating the process [via rss] leaves you with more free time, allowing you to either check more sites, or, you know, reclaim your life back. I spend 0 seconds a day typing my favorite websites into the addressbar and waiting for pages to load.

The Notifications feed (found near the bottom-right of the page HERE, though it may be more prudent to use the new RSS News Feed Reader app on Facebook) always felt useless to me. Why would I want to read in my reader that someone commented on a link of mine? I’d rather get the email, so I know RIGHT AWAY, so I can converse. So I always skipped over the notification feed for having untimely info. However, that feed contains other stuff you might read on your news feed, such as quizzes, surveys, and other banal facebook stuff. The flaw in this feed has always been that it is half “stuff I want to know the second it happens” and half “stuff I don’t care when [or if] I find out”. The trick is to send the first half to email, and the second half to RSS.

To do this, we need to scrub the time-dependent stuff out of the Facebook Notifications feed, using a 3rd party RSS feed filter such as FeedRinse (NOTE: FeedRinse SUCKS! I would advise finding anything random on the internet over using FeedRinse. It’s unreliable and slow, and doesn’t actually save time.). This ruleset is by no means complete, but it’s a damn good start:

FeedRinse is also good for filtering your “friends’ status updates” and “friends’ links” and “friends’ notes” feed: Remove those pesky repetitive things people repeat every week, MafiaWars invites, mentions of football, particular people you want to shut up but don’t want to friend, and such.

Screw reading by the web! It forces you to read everybody’s stuff with no filters, and it forces you to manually check. You also have no way of storing a backlog — Facebook only goes back so far in the web; the reader remembers everything that happens while you are gone. It also allows you to search everything you’ve read, which you can’t do on Facebook. After seeing a movie I like, I search my reader for that movie. A lot of the results are friends talking about it. I now know who saw the movie, and go and leave a comment. Sometimes people are surprised that I’m commenting on something they posted 6 months ago. “How did you find this post?” RSS, that’s how! (more…)

Another tip for couples computing: Share your email notifications.

20070421 - Angel & Ian's housewarming party - (by Angel) - 470743940_c94781aa77_o - diptych - 470743256_17879731d9_o - Carolyn, Clint as Tina Fey with Angel's glasses - 1=sassy, 2=trashed

If you’re a close couple who wants to be aware of each other’s socializing, or find out when the other is in a conversation you might want to join in … The best way to do it is to share email notifications. For example, any email that goes to Carolyn or myself via Facebook, Livejournal, or Netflix – automatically goes to the other.

{This also has the added curse/benefit that if I block someobody, but Carolyn doesn’t, I still see the responses that Carolyn would see. Thus, they don’t see what I write, but I see what they write. The other curse is that any conversation you are both in will result in 2 emails, plus you often get email notification for your own comments.}

Still, the old SubGenius saying goes, “Too much is always better than not enough.” If the two of you want to be aware of each other’s conversations, your choice is to see some things 0 times, or twice. I’ll take twice.


For purposes of this conversation, my email is and Carolyn’s is

  1. I change my Facebook/LiveJournal/whatever notification email from to Everything after the “+” does not affect delivery, but is very useful for filtering (see next step).
  2. I create a gmail filter that says “if mail is to, then forward to”.
  3. Carolyn changes her Facebook/LiveJournal/whatever notification email from to
  4. Carolyn creates a gmail filter that says “if mail is to, then forward to”.

Voila! Now you both get each other’s notifications. You have strengthened your ties together, at the expense of cluttering your inbox.

This is also very useful for Netflix notifications. Or Evites. (more…)

When you download photos from flickr, the photo ID is actually stored in the filename, and you can use this to get back to the original photo. I decided to make any photos that are uploaded with the flickr filename automatically link to the original via perl code that I first posted here.

However, I have since realized that some pictures I post are actually a combination of several original pictures. Thus, I am now updating my code to properly deal with giving the link to all original images it is comprised of. The hardest part was dealing with the english rules for commas and “and”. “1 and 2” vs “1, 2, and 3” vs “1, 2, 3, and 4”.

Anyway, here is the revised code for auto-flickr-linking-to-original-pic:

my @matches = $file =~ /([0-9]{10})_[0-9a-f]{10}[_ ][a-z]/ig;
my $matchNum = 0;
foreach $tmpmatch (@matches) {
  $tmpid = $tmpmatch;
  if ($matchNum == 1) {
    $caption .= "Originally posted at ";
    $caption .= "$FLICKR_PHOTOID_TO_URL_PREFIX$tmpid";
  } elsif ($matchNum == @matches) {
    if (@matches > 2) { $s .= "	, ";	}
    $caption .= " and $FLICKR_PHOTOID_TO_URL_PREFIX$tmpid";
  } else {
    $caption .= " , $FLICKR_PHOTOID_TO_URL_PREFIX$tmpid";
if (@matches > 0) { $s .= "\n"; }

This is definitely a bit more complex than the original version:

if ($file =~ /([0-9]{10})_[0-9a-f]{10}_[a-z]/i) {
    $caption .= "Originally posted at $FLICKR_PHOTOID_URL$1\n";


Next Page »