Traumwind RSS reader


more...
displaying:
Second p0st
Fixing backspace when ssh'ing to Linux servers in OS X 10.5 Terminal.app

For some reason the default OS X terminal program, Terminal.app, sets TERM=xterm-color but doesn't send the correct keycode that a colour xterm would send when you hit backspace. The solution is to set TERM=rxvt.

The instructions at the end of that link are a bit out of date; here's how to do it on OS X 10.5.6:

- Open Terminal.

- Hit Cmd-, or select Terminal > Preferences from the menu, to bring up the Preferences.

- Click Settings (the second icon from the left in the bar along the top).

- Click Advanced (rightmost tab).

- Select 'rxvt' after 'Declare terminal as'.

- Uncheck 'Delete sends Ctrl-H'.

... and you're done. You might also want to click through to the Keyboard pane and select 'Use option as meta key', which is useful (although I wish I could use Command as the meta key).

Comment

guid
http://www.myelin.co.nz/post/2009/4/28/#200904281
pubdate
Tue, 28 Apr 2009 04:49:35 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200904281&link=http://www.myelin.co.nz/post/2009/4/28/#200904281
summary

For some reason the default OS X terminal program, Terminal.app, sets TERM=xterm-color but doesn't send the correct keycode that a colour xterm would send when you hit backspace. The solution is to set TERM=rxvt.

The instructions at the end of that link are a bit out of date; here's how to do it on OS X 10.5.6:

- Open Terminal.

- Hit Cmd-, or select Terminal > Preferences from the menu, to bring up the Preferences.

- Click Settings (the second icon from the left in the bar along the top).

- Click Advanced (rightmost tab).

- Select 'rxvt' after 'Declare terminal as'.

- Uncheck 'Delete sends Ctrl-H'.

... and you're done. You might also want to click through to the Keyboard pane and select 'Use option as meta key', which is useful (although I wish I could use Command as the meta key).

Comment

date_timestamp
1240894175
Reading while recovering

A couple of good books I've read over the past week:

- "Imperium" by Robert Harris.

- "The Bourne Identity" by Robert Ludlum (I've never seen the film, but the book was good).

Following that, I'm just starting on "Zen and the Art of Motorcycle Maintenance".

Comment

guid
http://www.myelin.co.nz/post/2009/3/21/#200903211
pubdate
Sat, 21 Mar 2009 09:19:10 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200903211&link=http://www.myelin.co.nz/post/2009/3/21/#200903211
summary

A couple of good books I've read over the past week:

- "Imperium" by Robert Harris.

- "The Bourne Identity" by Robert Ludlum (I've never seen the film, but the book was good).

Following that, I'm just starting on "Zen and the Art of Motorcycle Maintenance".

Comment

date_timestamp
1237627150
Minor happenings

I've been away for a bit. My appendix started playing up on Sunday 23 February and sometime between then and Wednesday 26 February, when I was admitted to Christchurch Public Hospital, it burst, resulting in a full blown case of peritonitis. There was a pretty nasty week in hospital while I was recovering from the operation, and also dealing with pneumonia (a surgical complication, I think) and the rotovirus stomach bug (which I guess I caught in the Emergency Department). Since then it's been pretty much waiting for things to straighten themselves out, and finally today (after 2.5 weeks in hospital) I've been pronounced stable enough to go home for the weekend. Thanks so much to everyone who e-mailed or twittered their well wishes - it really made the time pass much more quickly.

[Update: There was some other news here, which is still valid but probably doesn't need to be recorded in perpetuity on my blog.]

Comment

guid
http://www.myelin.co.nz/post/2009/3/14/#200903141
pubdate
Sat, 14 Mar 2009 00:13:52 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200903141&link=http://www.myelin.co.nz/post/2009/3/14/#200903141
summary

I've been away for a bit. My appendix started playing up on Sunday 23 February and sometime between then and Wednesday 26 February, when I was admitted to Christchurch Public Hospital, it burst, resulting in a full blown case of peritonitis. There was a pretty nasty week in hospital while I was recovering from the operation, and also dealing with pneumonia (a surgical complication, I think) and the rotovirus stomach bug (which I guess I caught in the Emergency Department). Since then it's been pretty much waiting for things to straighten themselves out, and finally today (after 2.5 weeks in hospital) I've been pronounced stable enough to go home for the weekend. Thanks so much to everyone who e-mailed or twittered their well wishes - it really made the time pass much more quickly.

[Update: There was some other news here, which is still valid but probably doesn't need to be recorded in perpetuity on my blog.]

Comment

date_timestamp
1236989632
[Minimal] pure PHP Subversion client

Something interesting I did back in 2006 was write a pure PHP parser for the Subversion REPORT XML format, which is what a Subversion server sends in response to a checkout or update request. The code could check out a fresh copy of a repository, and also handle the XML well enough to update from revision to revision. I did this to implement the auto-update process for PeopleAggregator, for Broadband Mechanics.

It's worked pretty well, and I'm pretty proud of the code... not its beauty, because it's fairly inscrutable, but in that it worked at all, and that it was as reliable as it was. I think it took a few days to write, and after a couple of minor bugs found over the next week or two, we didn't find anything wrong with it until much later, when we shipped an update which deleted a file, which was a case I hadn't considered when writing it. After fixing that it worked just fine from then on.

Anyway, Marc gave me permission to release this as open source under the MIT license (like CC-BY: fairly unrestricted use, with attribution) a year or two back, and people have asked me about it from time to time, but I've never actually put up an official copy with the MIT license on it. So, here you go:

pure-php-subversion on GitHub.

I never spent the time to properly extricate it from PeopleAggregator, so you'll need to hack PAStateStore.php into something that fits your own database, and figure out the schema. If someone wants to write a pure-PHP handler for .svn directories, or even a generic state store which stores hashes like PAStateStore (but maybe in a flat file rather than a database), that would be brilliant. Fork and enjoy!

Comment

guid
http://www.myelin.co.nz/post/2009/2/6/#200902061
category
Subversion
pubdate
Fri, 06 Feb 2009 10:52:12 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200902061&link=http://www.myelin.co.nz/post/2009/2/6/#200902061
summary

Something interesting I did back in 2006 was write a pure PHP parser for the Subversion REPORT XML format, which is what a Subversion server sends in response to a checkout or update request. The code could check out a fresh copy of a repository, and also handle the XML well enough to update from revision to revision. I did this to implement the auto-update process for PeopleAggregator, for Broadband Mechanics.

It's worked pretty well, and I'm pretty proud of the code... not its beauty, because it's fairly inscrutable, but in that it worked at all, and that it was as reliable as it was. I think it took a few days to write, and after a couple of minor bugs found over the next week or two, we didn't find anything wrong with it until much later, when we shipped an update which deleted a file, which was a case I hadn't considered when writing it. After fixing that it worked just fine from then on.

Anyway, Marc gave me permission to release this as open source under the MIT license (like CC-BY: fairly unrestricted use, with attribution) a year or two back, and people have asked me about it from time to time, but I've never actually put up an official copy with the MIT license on it. So, here you go:

pure-php-subversion on GitHub.

I never spent the time to properly extricate it from PeopleAggregator, so you'll need to hack PAStateStore.php into something that fits your own database, and figure out the schema. If someone wants to write a pure-PHP handler for .svn directories, or even a generic state store which stores hashes like PAStateStore (but maybe in a flat file rather than a database), that would be brilliant. Fork and enjoy!

Comment

date_timestamp
1233917532
Clever things about the MacBook that other laptop makers should steal

I've been using a MacBook Pro for a week now, and here are some of the things I'm surprised nobody appears to have cloned.

- Giant touchpad with multi-touch gestures. Two finger scroll that works both vertically and horizontally is excellent, and the three finger page up/down is good, if not something I need as often.

- Power indicator that tells you how long it will be before the battery is fully charged.

- Fans that vent through the top of the case rather than the bottom/side, so you can put it on a soft surface without it overheating (any more than it normally does).

- The ability to act like a wifi base station and share an internet connection from a wired ethernet connection out via wifi.

- Autosensing ethernet, so you don't need crossover cables.

- Good keyboard shortcut to eject a volume, which also tries to close windows using the volume so you don't get an error about something being in use.

There are some things that could be improved.

- The not-so-often-used function key is off in the bottom left hand corner of the keyboard, which is prime real estate. My Windows laptop puts the Control key there.

- Home/end/pgup/pgdn would be nicer as separate keys -- this makes me much slower editing text in OS X than Windows.

- A lot of apps use similar-but-different keyboard shortcuts. Lots of things use shift-cmd-[] to switch tabs, but I've also seen cmd-left/right and shift-cmd-left/right.

- I haven't figured out a good way to completely wrap up the power brick yet. My Toshiba has a velcro strap I can use to secure everything. The thin cord coming out of the brick wraps nicely around the little hooks, but the big cord that plugs into the mains needs a bit of velcro.

Comment

guid
http://www.myelin.co.nz/post/2009/2/2/#200902021
pubdate
Mon, 02 Feb 2009 07:03:30 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200902021&link=http://www.myelin.co.nz/post/2009/2/2/#200902021
summary

I've been using a MacBook Pro for a week now, and here are some of the things I'm surprised nobody appears to have cloned.

- Giant touchpad with multi-touch gestures. Two finger scroll that works both vertically and horizontally is excellent, and the three finger page up/down is good, if not something I need as often.

- Power indicator that tells you how long it will be before the battery is fully charged.

- Fans that vent through the top of the case rather than the bottom/side, so you can put it on a soft surface without it overheating (any more than it normally does).

- The ability to act like a wifi base station and share an internet connection from a wired ethernet connection out via wifi.

- Autosensing ethernet, so you don't need crossover cables.

- Good keyboard shortcut to eject a volume, which also tries to close windows using the volume so you don't get an error about something being in use.

There are some things that could be improved.

- The not-so-often-used function key is off in the bottom left hand corner of the keyboard, which is prime real estate. My Windows laptop puts the Control key there.

- Home/end/pgup/pgdn would be nicer as separate keys -- this makes me much slower editing text in OS X than Windows.

- A lot of apps use similar-but-different keyboard shortcuts. Lots of things use shift-cmd-[] to switch tabs, but I've also seen cmd-left/right and shift-cmd-left/right.

- I haven't figured out a good way to completely wrap up the power brick yet. My Toshiba has a velcro strap I can use to secure everything. The thin cord coming out of the brick wraps nicely around the little hooks, but the big cord that plugs into the mains needs a bit of velcro.

Comment

date_timestamp
1233558210
Small-scale revision control

Here's something I'd like: revision control that stores *ALL* its (required) working-directory metadata inside the actual files.

This would be a godsend for when you have to work with people who don't grok the revision control religion and like to do things like copy scripts around the place and make many small untracked modifications. The idea would be to have a comment somewhere in the file pointing to the repository, path, and version. The RCS could have a temp folder somewhere else on the system to cache revisions for fast local access.

Then, wherever you are, you could run $RCS <status|commit|update> on any file containing a magic metadata block connecting it to the repository. I guess you could write this as a frontend to any current revision control system; the metadata block could refer to a Subversion or Git repository path, and operations on it would set up a working directory with just that file and the appropriate metadata, then act as usual.

Comment

guid
http://www.myelin.co.nz/post/2009/1/23/#200901232
pubdate
Fri, 23 Jan 2009 00:23:11 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200901232&link=http://www.myelin.co.nz/post/2009/1/23/#200901232
summary

Here's something I'd like: revision control that stores *ALL* its (required) working-directory metadata inside the actual files.

This would be a godsend for when you have to work with people who don't grok the revision control religion and like to do things like copy scripts around the place and make many small untracked modifications. The idea would be to have a comment somewhere in the file pointing to the repository, path, and version. The RCS could have a temp folder somewhere else on the system to cache revisions for fast local access.

Then, wherever you are, you could run $RCS <status|commit|update> on any file containing a magic metadata block connecting it to the repository. I guess you could write this as a frontend to any current revision control system; the metadata block could refer to a Subversion or Git repository path, and operations on it would set up a working directory with just that file and the appropriate metadata, then act as usual.

Comment

date_timestamp
1232670191
Locking down a MediaWiki

I know, it's a crime against wiki nature, but sometimes you want to lock down a MediaWiki install so only certain people can edit it. To do so, put this in LocalSettings.php:

  $wgGroupPermissions['*']['edit'] = false;
  $wgShowIPinHeader = false;
$wgGroupPermissions['*']['createaccount'] = false;

Then, to create someone an account, you have to log in, then return to the login page and click 'Create account'. The flow is a bit weird; the best I can recommend is to bookmark the 'Create account' page, which will be something like this for a wiki on http://example.com/:

  http://example.com/Special:UserLogin?type=signup

Comment

guid
http://www.myelin.co.nz/post/2009/1/23/#200901231
pubdate
Thu, 22 Jan 2009 22:41:22 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200901231&link=http://www.myelin.co.nz/post/2009/1/23/#200901231
summary

I know, it's a crime against wiki nature, but sometimes you want to lock down a MediaWiki install so only certain people can edit it. To do so, put this in LocalSettings.php:

  $wgGroupPermissions['*']['edit'] = false;
  $wgShowIPinHeader = false;
$wgGroupPermissions['*']['createaccount'] = false;

Then, to create someone an account, you have to log in, then return to the login page and click 'Create account'. The flow is a bit weird; the best I can recommend is to bookmark the 'Create account' page, which will be something like this for a wiki on http://example.com/:

  http://example.com/Special:UserLogin?type=signup

Comment

date_timestamp
1232664082
High availability, the social side

Everyone loves to blog about how to achieve high availability with various schemes of redundant servers. However, there are some other things to consider. How do you assure high availability, or more importantly, that you won't lose data, when your company runs out of money (hopefully temporarily)? How about if someone hacks into your system and gets a copy of your private SSH key, or your AWS credentials? What if you have disgruntled employees?

The best solution I can think of is to have a backup box on a totally different provider, ideally located in the boss's home or someplace relatively secure, that nobody can directly connect to, but which is able to take a complete snapshot of everything. Either it'll have a very privileged SSH key, or it'll have access to pull from a "dropbox" that all your servers back themselves up to.

One backup system I've set up uses the "dropbox" approach. The backup server runs the rsync daemon, with a separate user (plus randomly generated password) for each server that needs to be backed up. Each server user is restricted to its own private area in the backup filesystem, and each server runs rsync at a random time in the day to back itself up.

Then, you can create an rsync user with read-only access to the backup data, and rsync it all down to some other box. If you want to protect against angry sysadmins, several (presumably technical) people in the company should run their own private backups.

Keeping all this data private is left as an exercise for the reader :-)

Comment

guid
http://www.myelin.co.nz/post/2009/1/20/#200901201
pubdate
Mon, 19 Jan 2009 22:46:05 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200901201&link=http://www.myelin.co.nz/post/2009/1/20/#200901201
summary

Everyone loves to blog about how to achieve high availability with various schemes of redundant servers. However, there are some other things to consider. How do you assure high availability, or more importantly, that you won't lose data, when your company runs out of money (hopefully temporarily)? How about if someone hacks into your system and gets a copy of your private SSH key, or your AWS credentials? What if you have disgruntled employees?

The best solution I can think of is to have a backup box on a totally different provider, ideally located in the boss's home or someplace relatively secure, that nobody can directly connect to, but which is able to take a complete snapshot of everything. Either it'll have a very privileged SSH key, or it'll have access to pull from a "dropbox" that all your servers back themselves up to.

One backup system I've set up uses the "dropbox" approach. The backup server runs the rsync daemon, with a separate user (plus randomly generated password) for each server that needs to be backed up. Each server user is restricted to its own private area in the backup filesystem, and each server runs rsync at a random time in the day to back itself up.

Then, you can create an rsync user with read-only access to the backup data, and rsync it all down to some other box. If you want to protect against angry sysadmins, several (presumably technical) people in the company should run their own private backups.

Keeping all this data private is left as an exercise for the reader :-)

Comment

date_timestamp
1232405165
Consolidating backups

I wrote about a fictional backup tool a while ago that would crawl through all your hard disks, figure out which files are already adequately replicated, and replicate the rest into temporary directories so as to ensure that you could always recover from the loss of a disk or two. I'm finally getting this up and running: I have a script that builds a file containing a hash of every file on all the disks in a machine, and another that walks through all these files and works out where things are. Currently all it does is tell me the aggregate size of all unique files, as the first thing I want to do with it is make a single global backup of all my stuff onto an appropriately large hard disk. I'm pretty confident I have less than a terabyte of stuff, but it might be even less than that, given that I have multiple old backups of my laptop hard disk, and so on.

Comment

guid
http://www.myelin.co.nz/post/2008/12/29/#200812291
pubdate
Sun, 28 Dec 2008 23:13:13 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200812291&link=http://www.myelin.co.nz/post/2008/12/29/#200812291
summary

I wrote about a fictional backup tool a while ago that would crawl through all your hard disks, figure out which files are already adequately replicated, and replicate the rest into temporary directories so as to ensure that you could always recover from the loss of a disk or two. I'm finally getting this up and running: I have a script that builds a file containing a hash of every file on all the disks in a machine, and another that walks through all these files and works out where things are. Currently all it does is tell me the aggregate size of all unique files, as the first thing I want to do with it is make a single global backup of all my stuff onto an appropriately large hard disk. I'm pretty confident I have less than a terabyte of stuff, but it might be even less than that, given that I have multiple old backups of my laptop hard disk, and so on.

Comment

date_timestamp
1230505993
Vodafone 3G Broadband Early Termination math

I'm wondering whether to sign up for a 3G data plan here. Doing some math to work out what the penalties for early termination are. There are some interesting discontinuities.

I'd probably get the 1GB data (+ $10 for a second GB if I go over that in a calendar month) plan, which has two choices:

- $24.95 for 6 months, then $49.95 for 18 months, with early termination fees of $400 in the first 6 months, $300 in months 7-12, and $150 after that.

- $200 for the modem, and $59.95 per month after that.

Working it out, the no-plan option is best if you're going to quit in the first 5 months. After that, the discounts add up to make the 24-month option cheaper. There are a couple of points where it's pointless to quit due to an upcoming reduction in early termination fees. It's cheaper overall ($599.40 total) to wait out the first year (quitting before month 13) than to quit in months 10-12. Likewise, it's cheaper overall to wait out the whole term ($1048.80 total) than to quit after month 20.

Interestingly, the $150 termination fee in months 13-24 exactly balances the discount over the first six months, so if you sign a 24 month plan then quit in months 13-24, the overall average monthly cost including the termination fee will be $49.95.

If the 3G connection is tax-deductible for you and you're in the 39c tax bracket, the "effective cost" per month is $27.08 if you quit after 12 months, or $23.70 if you stay for the full 24 months.

Comment

guid
http://www.myelin.co.nz/post/2008/12/10/#200812101
pubdate
Wed, 10 Dec 2008 07:53:10 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200812101&link=http://www.myelin.co.nz/post/2008/12/10/#200812101
summary

I'm wondering whether to sign up for a 3G data plan here. Doing some math to work out what the penalties for early termination are. There are some interesting discontinuities.

I'd probably get the 1GB data (+ $10 for a second GB if I go over that in a calendar month) plan, which has two choices:

- $24.95 for 6 months, then $49.95 for 18 months, with early termination fees of $400 in the first 6 months, $300 in months 7-12, and $150 after that.

- $200 for the modem, and $59.95 per month after that.

Working it out, the no-plan option is best if you're going to quit in the first 5 months. After that, the discounts add up to make the 24-month option cheaper. There are a couple of points where it's pointless to quit due to an upcoming reduction in early termination fees. It's cheaper overall ($599.40 total) to wait out the first year (quitting before month 13) than to quit in months 10-12. Likewise, it's cheaper overall to wait out the whole term ($1048.80 total) than to quit after month 20.

Interestingly, the $150 termination fee in months 13-24 exactly balances the discount over the first six months, so if you sign a 24 month plan then quit in months 13-24, the overall average monthly cost including the termination fee will be $49.95.

If the 3G connection is tax-deductible for you and you're in the 39c tax bracket, the "effective cost" per month is $27.08 if you quit after 12 months, or $23.70 if you stay for the full 24 months.

Comment

date_timestamp
1228895590
Strictly matching URLs with regular expressions in preload FQL, and migration tricks for PHP Facebook apps

Preload FQL is a nice little Facebook app feature that lets you specify a bunch of regular expressions and FQL queries to Facebook, and have it send you the results of those queries each time it makes an HTTP POST request to your site to fetch an FBML page.

For example, if you've got a page, http://apps.new.facebook.com/myapp/something, that always needs to know the names and IDs of all the current user's friends, you could specify preload FQL like this:

  {
    'names_and_ids': {
      "pattern": "\/something$",
      "query": "SELECT uid, name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1={*user*})"
    }
  }

If you're using PHP, the results of the query will then be accessible with json_decode($facebook->fb_params['names_and_ids']) (where $facebook is your Facebook object, from the PHP platform library).

One interesting thing (and the whole point of this post) is how the pattern parameters are interpreted. It looks like they're going to PHP's preg_match like this:

  preg_match("/$pattern/", $full_url)

This means you have to escape all slashes or they'll prematurely terminate the pattern. Also, the pattern matches the whole URL, including http://apps.new.facebook.com/appname/, so if you want to be strict with your regexes and ensure they don't accidentally match pages with the same suffix, you want to do something like this:

  $root = "http\:\/\/[^\/]+\/[^\/]+"; // regex to match "http://apps.whatever.facebook.com/app_name"

... then specify patterns like "^$root\/mypage$".

Unrelated but probably useful if you're using preload FQL is a trick for feeding the data to Facebook in your migration script. Set up your preload FQL like this and find the MD5 hash of it in serialized form:

  $preload_fql = array(
    "first_fql" => array("pattern" => ..., "query" => ...),
    ...);
    $current_hash = md5(serialize($preload_fql));

After setting your preload FQL with Admin.setAppProperties, save the hash somewhere, then the next time you run your migration script, compare the computed with the stored hash, and if they differ, you know you need to update the FQL on Facebook.

You can do a very similar trick with template bundles: hash each one and map the hashes with Facebook IDs in your database, then in the migration script, register template bundles whose hashes aren't in the database and delete template bundles which are in the database but are no longer known to the migration script.

Comment

guid
http://www.myelin.co.nz/post/2008/12/9/#200812091
category
Facebook
pubdate
Tue, 09 Dec 2008 08:19:45 GMT
comments
http://www.myelin.co.nz/post/comments?u=2&p=200812091&link=http://www.myelin.co.nz/post/2008/12/9/#200812091
summary

Preload FQL is a nice little Facebook app feature that lets you specify a bunch of regular expressions and FQL queries to Facebook, and have it send you the results of those queries each time it makes an HTTP POST request to your site to fetch an FBML page.

For example, if you've got a page, http://apps.new.facebook.com/myapp/something, that always needs to know the names and IDs of all the current user's friends, you could specify preload FQL like this:

  {
    'names_and_ids': {
      "pattern": "\/something$",
      "query": "SELECT uid, name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1={*user*})"
    }
  }

If you're using PHP, the results of the query will then be accessible with json_decode($facebook->fb_params['names_and_ids']) (where $facebook is your Facebook object, from the PHP platform library).

One interesting thing (and the whole point of this post) is how the pattern parameters are interpreted. It looks like they're going to PHP's preg_match like this:

  preg_match("/$pattern/", $full_url)

This means you have to escape all slashes or they'll prematurely terminate the pattern. Also, the pattern matches the whole URL, including http://apps.new.facebook.com/appname/, so if you want to be strict with your regexes and ensure they don't accidentally match pages with the same suffix, you want to do something like this:

  $root = "http\:\/\/[^\/]+\/[^\/]+"; // regex to match "http://apps.whatever.facebook.com/app_name"

... then specify patterns like "^$root\/mypage$".

Unrelated but probably useful if you're using preload FQL is a trick for feeding the data to Facebook in your migration script. Set up your preload FQL like this and find the MD5 hash of it in serialized form:

  $preload_fql = array(
    "first_fql" => array("pattern" => ..., "query" => ...),
    ...);
    $current_hash = md5(serialize($preload_fql));

After setting your preload FQL with Admin.setAppProperties, save the hash somewhere, then the next time you run your migration script, compare the computed with the stored hash, and if they differ, you know you need to update the FQL on Facebook.

You can do a very similar trick with template bundles: hash each one and map the hashes with Facebook IDs in your database, then in the migration script, register template bundles whose hashes aren't in the database and delete template bundles which are in the database but are no longer known to the migration script.

Comment

date_timestamp
1228810785

#
Some notes:
re: autodiscovery... some of the blo.gs entries actually already have the rss link included... and I'm currently thinking about using a AmpetaDesk like bookmarklet to add geeds to my list

re: sorting of feeds:
The reader itself 'remembers' the feeds I've viewed and ranks them after the last time I accessed/viewed them. It's a very simple form of interst filtering. Feeds I don't view go down, the ones I'm really interested in go up.


alles Bild, Text und Tonmaterial ist © Martin Spernau, Verwendung und Reproduktion erfordert die Zustimmung des Authors

Martin Spernau
© 1994-2010


amazon.de Wunschliste

Facebook me!

Google

powered by Traumtank