dear sirs,i recently learned your firm is advertising on the rush limbaugh show.normally i would support your effort to communicate your message as broadly as possible.but mr. limbaugh's recently comments in support of the lords resistance army (LRA) are incompatible with civil society. while i do support mr. limbaugh's right to make whatever comments he chooses, i am disappointed he has used it to support an organization that kidnaps children forcing them to become child soldiers or prostitutes.by advertising on mr. limbaugh's show, you are associating your brand with an individual who appears to be advocating for the elimination of basic civil behavior.i urge you to reconsider your affiliation with mr. limbaugh. however, until you cease advertising on his program, i am boycotting your service and asking my network of friends and co-workers to do the same.-sincerely,-meadhbh hamrick
Tuesday, October 18, 2011
complaining to eharmony
Saturday, October 15, 2011
Two Thousand Words that Belongs to Workers, Farmers, Officials, Scientists, Artists, and Everybody
The first threat to our national life was from the war. Then came other evil days and events that endangered the nation's spiritual well being and character. Most of the nation welcomed the socialist program with high hopes. But it fell into the hands of the wrong people. It would not have mattered so much that they lacked adequate experience in affairs of state, factual knowledge, or philosophical education, if only they had enough common prudence and decency to listen to the opinion of others and agree to being gradually replaced by more able people.
After enjoying great popular confidence immediately after the war, the communist party by degrees bartered this confidence away for office, until it had all the offices and nothing else. We feel we must say this, it is familiar to those of us who are communists and who are as disappointed as the rest at the way things turned out. The leaders' mistaken policies transformed a political party and an alliance based on ideas into an organization for exerting power, one that proved highly attractive to power-hungry individuals eager to wield authority, to cowards who took the safe and easy route, and to people with bad conscience. The influx of members such as these affected the character and behavior of the party, whose internal arrangements made it impossible, short of scandalous incidents, for honest members to gain influence and adapt it continuously to modern conditions. Many communists fought against this decline, but they did not manage to prevent what ensured.
Conditions inside the communist party served as both a pattern for and a cause of the identical conditions in the state. The party's association with the state deprived it of the asset of separation from executive power. No one criticized the activities of the state and of economic organs. Parliament forgot how to hold proper debates, the government forgot how to govern properly, and managers forgot how to manage properly. Elections lost their significance, and the law carried no weight. We could not trust our representatives on any committee or, if we could, there was no point in asking them for anything because they were powerless. Worse still, we could scarcely trust one another. Personal and collective honor decayed. Honesty was a useless virtue, assessment by merit unheard of. Most people accordingly lost interest in public affairs, worrying only about themselves and about money, a further blot on the system being the impossibility today of relying even on the value of money. Personal relations were ruined, there was no more joy in work, and the nation, in short, entered a period that endangered its spiritual well being and its character.
We all bear responsibility for the present state of affairs. But those among us who are communists bear more than others, and those who acted as components or instruments of unchecked power bear the greatest responsibility of all. The power they wielded was that of a self-willed group spreading out through the party apparatus into every district and community. It was this apparatus that decided what might and might not be done: It ran the cooperative farms for the cooperative farmers, the factories for the workers, and the National Committees for the public. No organizations, not even communist ones, were really controlled by their own members. The chief sin and deception of these rulers was to have explained their own whims as the "will of the workers". Were we to accept this pretense, we would have to blame the workers today for the decline of our economy, for crimes committed against the innocent, and for the introduction of censorship to prevent anyone writing about these things. The workers would be to blame for misconceived investments, for losses suffered in foreign trade, and for the housing shortage. Obviously no sensible person will hold the working class responsible for such things. We all know, and every worker knows especially, that they had virtually no say in deciding anything. Working-class functionaries were given their voting instructions by somebody else. While many workers imagined that they were the rulers, it was a specially trained stratum of party and state officials who actually ruled in their name. In effect it was these people who stepped into the shoes of the deposed ruling class and themselves came to constitute the new authority. Let us say in fairness that some of them long ago realized the evil trick history had played. We can recognize such individuals today by the way they are redressing old wrongs, rectifying mistakes, handing back powers of decision-making to rank-and-file party members and members of the public, and establishing limits on the authority and size of the bureaucracy. They share our opposition to the retrograde views held by certain party members. But a large proportion of officials have been resistance to change and are still influential. They still wield the instruments of power, especially at district and community level, where they can employ them in secret and without fear of prosecution.
Since the beginning of this year we have been experiencing a regenerative process of democratization. It started inside the communist party, that much we must admit, even those communists among us who no longer had hopes that anything good could emerge from that quarter know this. It must also be added, of course, that the process could have started nowhere else. For after twenty years the communists were the only ones able to conduct some sort of political activity. It was only the opposition inside the communist party that had the privilege to voice antagonistic views. The effort and initiative now displayed by democratically minded communists are only then a partial repayment of the debt owed by the entire party to the non-communists whom it had kept down in an unequal position. Accordingly, thanks are due to the communist party, though perhaps it should be granted that the party is making an honest effort at the eleventh hour to save its own honor and the nation's. The regenerative process has introduced nothing particularly new into our lives. It revives ideas and topics, many of which are older than the errors of our socialism, while others, having emerged from below the surface of visible history, should long ago have found expression but were instead repressed. Let us not foster the illusion that it is the power of truth which now makes such ideas victorious. Their victory has been due rather to the weakness of the old leaders, evidently already debilitated by twenty years of unchallenged rule. All the defects hidden in the foundations and ideology of the system have clearly reached their peak. So let us not overestimate the effects of the writers' and students' criticisms. The source of social change is the economy. A true word makes its mark only when it is spoken under conditions that have been properly prepared---conditions that, in our context, unfortunately include the impoverishment of our whole society and the complete collapse of the old system of government, which had enabled certain types of politicians to get rich, calmly and quietly, at our expense. Truth, then, is not prevailing. Truth is merely what remains when everything else has been frittered away. So there is no reason for national jubilation, simply for fresh hope.
In this moment of hope, albeit hope still threatened, we appeal to you. It took several months before many of us believed it was safe to speak up; many of us still do not think it is safe. But speak up we did exposing ourselves to the extent that we have no choice but to complete our plan to humanize the regime. If we did not, the old forces would exact cruel revenge. We appeal above all to those who so far have waited on the sidelines. The time now approaching will decide events for years to come.
The summer holidays are approaching, a time when we are inclined to let everything slip. But we can safely say that our dear adversaries will not give themselves a summer break; they will rally everyone who is under any obligation to them and are taking steps, even now, to secure themselves a quiet Christmas! Let us watch carefully how things develop, let us try to understand them and have our answers ready. Let us forget the impossible demand that someone from on high should always provide us with a single explanation and a single, simple moral imperative. Everyone will have to draw their own conclusions. Common, agreed conclusions can only be reached in discussion that requires freedom of speech-the only democratic achievement to our credit this year.
But in the days to come we must gird ourselves with our own initiative and make our own decisions. To begin with we will oppose the view, sometimes voiced, that a democratic revival can be achieved without the communists, or even in opposition to them. This would be unjust, and foolish too. The communists already have their organizations in place, and in these we must support the progressive wing. They have their experienced officials, and they still have in their hands, after all, the crucial levers and buttons. On the other hand they have presented an Action Program to the public. This program will begin to even out the most glaring inequalities, and no one else has a program in such specific detail. We must demand that they produce local Action Programs in public in every district and community. Then the issue will suddenly revolve around very ordinary and long awaited acts of justice. The Czechoslovak Communist Party is preparing for its congress, where it will elect its new Central Committee. Let us demand that it be a better committee than the present one. Today the communist party says it is going to rest its position of leadership on the confidence of the public, and not on force. Let us believe them, but only as long as we can believe in the people they are now sending as delegates to the party's district and regional conferences.
People have recently been worded that the democratization process has come to a halt. This feeling is partly a sign of fatigue after the excitement of events, but partly it reflects the truth. The season of astonishing revelations, of dismissals from high office, and of heady speeches couched in language of unaccustomed daring-all this is over. But the struggle between opposing forces has merely become somewhat less open, the fight continues over the content and formulation of the laws and over the scope of practical measures. Besides, we must give the new people time to work: the new ministers, prosecutors, chairmen and secretaries. They are entitled to time in which to prove themselves fit or unfit. This is all that can be expected at present of the central political bodies, though they have made a remarkably good showing so far in spite of themselves.
The everyday quality of our future democracy depends on what happens in the factories, and on what happens to the factories. Despite all our discussions, it is the economic managers who have us in their grasp. Good managers must be sought out and promoted. True, we are all badly paid in comparison with people in the developed countries, some of us worse than others. We can ask for more money, and more money can indeed be printed, but only if it is devalued in the process. Let us rather ask the directors and the chairmen of boards to tell us what they want to produce and at what cost, the customers they want to sell it to and at what price, the profit that will be made, and of that, how much will be reinvested in modernizing production and how much will be left over for distribution. Under dreary looking headlines, a bard battle is being covered in the press-the battle of democracy versus soft jobs. The workers, as entrepreneurs, can intervene in this battle by electing the right people to management and workers' councils. And as employees they can help themselves best by electing, as their trade union representatives, natural leaders and able, honorable individuals without regard to party affiliation.
Although at present one cannot expect more of the central political bodies, it is vital to achieve more at district and community level. Let us demand the departure of people who abused their power, damaged public property, and acted dishonorably or brutally. Ways must be found to compel them to resign. To mention a few: public criticism, resolutions, demonstrations, demonstrative work brigades, collections to buy presents for them on their retirement, strikes, and picketing at their front doors. But we should reject any illegal, indecent, or boorish methods, which they would exploit to bring influence to bear on Alexander Dubcek. Our aversion to the writing of rude letters must be expressed so completely that the only explanation for any such missives in the future would be that their recipients had ordered them themselves. Let us revive the activity of the National Front. Let us demand public sessions of the national committees. For questions that no one else will look into, let us set up our own civic committees and commissions. There is nothing difficult about it; a few people gather together, elect a chairman, keep proper records, publish their findings, demand solutions, and refuse to be shouted down. Let us convert the district and local newspapers, which have mostly degenerated to the lever of official mouthpieces, into a platform for all the forward-looking elements in politics; let us demand that editorial boards be formed of National Front representatives, or else let us start new papers. Let us form committees for the defense of free speech. At our meetings, let us have our own staffs for ensuring order. If we hear strange reports, let us seek confirmation, let us send delegations to the proper authorities and publicize their answers, perhaps putting them up on front gates. Let us give support to the police when they are prosecuting genuine wrongdoers, for it is not our aim to create anarchy or a state of general uncertainty. Let us eschew quarrels between neighbors, and let us avoid drunkenness on political occasions. Let us expose informers.
The summer traffic throughout the republic will enhance interest in the settlement of constitutional relations between Czechs and Slovaks. Let us consider federalization as a method of solving the question of nationalities, but let us regard it as only one of several important measures designed to democratize the system. In itself this particular measure will not necessarily give even the Slovaks a better life. Merely having separate governments in the Czech Lands and in Slovakia does not solve the problem of government. Rule by a state and party bureaucracy could still go on; indeed, in Slovakia it might even be strengthened by the claim that it had "won more freedom."
There has been great alarm recently over the possibility that foreign forces will intervene in our development. Whatever superior forces may face us, all we can do is stick to our own positions, behave decently, and initiate nothing ourselves. We can show our government that we will stand by it, with weapons if need be, if it will do what we give it a mandate to do. And we can assure our allies that we will observe our treaties of alliance, friendship, and trade. Irritable reproaches and ill-argued suspicions on our part can only make things harder for our government, and bring no benefit to ourselves. In any case, the only way we can achieve equality is to improve our domestic situation and carry the process of renewal far enough to some day elect statesman with sufficient courage, honor, and political acumen to create such equality and keep it that way. But this is a problem that faces all governments of small countries everywhere.
This spring a great opportunity was given to us once again, as it was after the end of the war. Again we have the chance to take into our own hands our common cause, which for working purposes we call socialism, and give it a form more appropriate to our once-good reputation and to the fairly good opinion we used to have of ourselves. The spring is over and will never return. By winter we will know all.
So ends our statement addressed to workers, farmers, officials, artists, scholars, scientists, technicians, and everybody. It was written at the behest of scholars and scientists.
Wednesday, August 10, 2011
This Side Up? When Mobile Web Pages Rotate
var supportsOrientation = ( "onorientationchange" in window );
if( supportsOrientation ) {window.addEventListener( "orientationchange", function () { console.log('w00t'); }, false );}
var previousOrientation;function checkOrientation () {if( previousOrientation !== window.orientation ) {previousOrientation = window.orientation;// do interesting things here}}
function Rotor ( callback ) {this.callback = callback;if( "onorientationchange" in window ) {this.previous = window.orientation;callback( this.previous, null );window.addEventListener( "orientationchange", this, false );}}Rotor.prototype.handleEvent = function ( e ) {var current = window.orientation;if( current !== this.previous ) {this.callback( current, e );}this.previous = current;};
var roton = new Rotor( function( rotation, event ) { alert( 'current rotation: ' + rotation ); } );
Wednesday, July 20, 2011
strange programmer habits : number and string mutation
#include <stdio.h>When you compile and run this program, it prints out the string "34" and then exits. Now look at this JavaScript function:
int main( int argc, char *argv[] ) {
char *start = "1234";
int a = 2;
printf( "%s\n", (start + a ) );
}
function foo() {
var start = "1234";
var a = 2;
console.log( start + a );
}
$start = "1234";
$a = 2;
echo ( $start + $a )
var a = 12;
console.log( "" + a );
var b = '34';Adding an empty string to a number in JavaScript will (should) cause the interpreter to convert the value of a into a string. Multiplying the string b by one should do the opposite (convert the string into a number.)
console.log( 1 * b );
Wednesday, July 13, 2011
strange programmer habits : avoiding goto's by using do..while's
This is probably why it took a couple decades for people to understand how bad "spaghetti code" was; it's easy to dismiss spaghetti being a problem when your complete software system is one or two pages long. But when a printout of your system requires you to chop down a medium sized forest, concepts like "structured programming" and "design patterns" really start to become important.
One of the popular issues around the programmer's water-cooler in the 1980's was whether or not people who use goto's should have their fingers chopped off. Edsger Djikstra penned the canonical software engineering jeremiad about this subject entitled “go-to statement considered harmful” [PDF]. You can probably guess his opinion from the paper's title.
So in the 80's and 90's, software engineers were taught that goto's led to un-maintainable software, headaches and all manner of social ills ranging from global warming to bad movies to disco. "Use a goto," they would say, "and it's like asking the local DJ to play Disco Duck on the radio." Structured programming, good software engineering technique and eschewing goto's would lead to a new era of increasingly good Cure albums, Alien sequels that didn't suck and fewer evenings in the office at midnight debugging the crap code you wrote last year.
But, like the one true ring, the expressive power of the goto is difficult to resist. Many software wizards, on their way to a life of perdition (i.e. - writing video games) countered that the goto could be used on occasion, if done correctly. Consider the following routine; it tries to open a file and read a few bytes. If there are errors along the way, it uses a goto to branch to clean-up routine before exiting:
int doSomething( char *filename ) { int err = 0; FILE *file = (FILE *) NULL; char buffer[ 80 ]; size_t bytesRead = 0; if( NULL == filename ) { err = -1; goto exuent_omnis; } if( (FILE *)NULL == ( file = fopen( filename, “r” ) ) ) { err = errno; goto exuent_omnis; } bytesRead = fread( buffer, 80, 1, file ); if( ferror( file ) ) { err = -2; goto exuent_omnis; } /* more code here */ exuent_omnis: if( (FILE *) NULL != file ) { fclose( file ); } return( err ); }"What could be wrong with this?" the pro-goto lobby would ask. IMHO, this example is pretty readable, and the goto DOES actually increase readability. Especially if you consider that nested if's are frequently offered as the alternative:
int doSomething( char *filename ) { int err = 0; FILE *file = (FILE *) NULL; char buffer[ 80 ]; size_t bytesRead = 0; if( NULL != filename ) { if( (FILE *)NULL != ( file = fopen( filename, “r” ) ) ) { bytesRead = fread( buffer, 80, 1, file ); if( ! ferror( file ) ) { /* more code here */ } else { err = -2; break; } fclose( file ): } else { err = errno; } } else { err = -1; } return( err ); }People who propose extensive use of nested if's should have their thumbs broken. This example isn't that bad, but when nested ifs start spanning pages, they can get a bit difficult to read. The alternative to using gotos in this example would be to use a do...while() loop whose repeat condition has been explicitly set to zero (or false for C++ users.):
int doSomething( char *filename ) { int err = 0; char buffer[ 80 ]; size_t bytesRead = 0; do { if( NULL == filename ) { err = -1; break; } if( (FILE *)NULL == ( file = fopen( filename, “r” ) ) ) { err = errno; break; } bytesRead = fread( buffer, 80, 1, file ); if( ferror( file ) ) { err = -2; break; } /* more code here */ } while( 0 ); if( (FILE *) NULL != file ) { fclose( file ); } return( err ); }Developers who like this kind of code will tell you it captures the succinct directness of a goto without actually having a goto. Because we break out of the loop, there's only one place control can go: to the statement after the while( 0 ); And we avoid nested if's. I've encountered at least one developer who believes this technique is harmful; it uses the do...while language feature for something it was not intended for, and as such, could be confusing to younger programmers.
Whether you make Djikstra cry by using a goto, produce deep levels of indents or use a do...while(0) that's confusing to in-expert programmers; it's entirely up to you. But hopefully this article will have made you aware of the different techniques you'll encounter in the wild.
-Cheers!
Wednesday, July 6, 2011
strange programmer habits : commas at the beginning of lines
#include <stdio.h> char *verbs[] = { "quit" , "score" , "inventory" , "go" , "get" , NULL }; int main() { int i; for( i = 0; verbs[ i ] != NULL; i++ ) { printf( "verb %02d: %s\n", i, verbs[ i ] ); } }or it's javascript equivalent::
var verbs = [ "quit" , "score" , "inventory" , "go" , "get" ]; for( var i = 0, il = verbs.length; i < il; i++ ) { console.log( "verb " + i + ": " + verbs[ i ] ) }Both these programs declare an array of strings and then print them out. But contrary to popular convention, the commas separating individual elements of the verbs array come not at the end of the line, but at the beginning.
The compiler (or interpreter) couldn't care less about this stylistic convention, of course. All it cares about is if there are commas between array elements. The comma-first style is there to make it easier for you to add, delete or move single lines in the array. By putting the comma at the beginning of the line, you move the elements in the array around without having to manually add (or remove) a trailing comma at the end of the array.
This strange habit doesn't effect the output your compiler produces and it's main benefit is to save a couple milliseconds when cutting and pasting entries in an array. But a small number of programmers (myself included) have gotten used to seeing arrays that look like this, so don't be surprised if you see this style from time to time.
Wednesday, June 29, 2011
strange programmer habits : literal comes first in a comparison
function foo( aString ) { if( ‘:error’ == aString ) { handleError(); } }Why put the variable reference after the string literal? So you don't accidentally turn the comparison into an assignment. Look at this code:
function foo( aString ) { if( aString = ‘:error’ ) { handleError(); } }Do you see the error? The programmer has accidentally dropped one of the equal signs in the comparison operator. If this code was being edited at 4AM the day before a big demo, believe me, it would be hard to spot.
But if put the literal was first and then forgot the extra equals sign, we would get an error. Go ahead and try it. Open up the javascript debugger in your browser and copy this code fragment into it:
( function ( aString ) { if( ‘:error’ = aString ) { console.log( ‘looks like we were passed an error token.’ ); } } ) ( ‘blarg’ );You should get a syntax error, which should clue you off that you forgot an equals sign. This is a programmer habit seen in most "curley brace" languages (C, C++, Java, Python, etc.) JavaScript programmers may also want to consider using the "strict equal" comparison operator (i.e. the triple equals.) Refer to Mozilla's excellent Javascript Docs for more info.
Tuesday, June 21, 2011
chromium os on a dell mini 9? i like it
- there's no audio - this is a known problem. Doug says it'll likely get fixed in a future release.
- there's no (easy) java - the most recent dell build of chromium doesn't ship with java, and the stock java installer for linux barfs (i'm guessing because of unfulfilled dynamic libraries.) i didn't spend a lot of time on getting it to work, and have seen java work on other chromium builds, so i know it can be done. it's just not easy.
- wifi's turned off out of the box - like many linux devices that use broadcom wifi chipsets, you have to download the proprietary drivers using a wired ethernet connection before you can experience wireless bliss. but it's pretty straight-forward to add the drivers. the release notes intimate the dell guys are working with the broadcom lawyers to figure out a way to include the drivers in the stock build, so maybe this problem will go away.
- WebGL? if it's enabled in the may 13th build, i've yet to see it work.
Monday, June 6, 2011
a few new node modules
node application.js --config file:///etc/host_props.json --config https://example.org/app_props.js
Tuesday, May 31, 2011
fun with node.js - building a node development appliance for virtual box
Sunday, May 29, 2011
on accessing services from within second life
var foo = { success: false, error: "insufficient cheese error: recommend rebooting universe" };console.log( JSON.stringify( foo ) );
{"success":false,"error":"insufficient cheese error: recommend rebooting universe"}
var bar = JSON.parse( "{\"success\":false,\"error\":\"insufficient cheese error: recommend rebooting universe\"}" );
:v:1appkey:u:77c3dd7c-4639-4681-aa52-a7dd35e96fd8:{:success:0:error:s:insufficient%20cheese%20error%3A%20reboot%20universeerrno:i:23desc:l:http%3A//example.com/error_descriptions/cheese.html:}:
// parse location info message. generates a list with the following members:// 0 - integer - success (1 for success, 0 for failure)// 1 - integer - errno (0 for success)// 2 - string - error description ("" if call was successful )// 3 - string - URL for more information ("" if call was successful)// 4 - string - region name// 5 - float - x location in region// 6 - float - y location in region// 7 - string - comment textlist parseLocationInfoMessage( message ) {integer success = TRUE;integer errno = 0;string error = "";string desc = "";integer in_map = FALSE;integer version;string region = "";float x = 0.0;float y = 0.0;string comment = "";list lines = llParseString2List( message, ["\n", "\r", "\n\r"], [] );integer lineCount = llGetListLength( lines );integer i;for( i = 0; i < lineCount; i++ ) {string currentLine = llList2String( lines, i );list fields = llParseString2List( currentLine, [":"], [] );string name = llList2String( fields, 0 );string key = llList2String( fields, 1 );string data = llList2String( fields, 2 );// now process the name-key-data tripleif( 'v' == key ) {version = (integer) data;if( 1 != version ) {success = FALSE;errno = -1;error = "invalid message version";break;}} else if( '{' == key ) {in_map = TRUE;} else if( '}' == key ) {in_map = FALSE;} else {if( FALSE == in_map ) {success = FALSE;errno = -2;error = "parsing error";break;}if( 'success' == name ) {if( '1' == key ) {success = TRUE;} else {success = FALSE;}} else if( 'errno' == name ) {errno = (integer) data;} else if( 'error' == name ) {error = llUnescapeURL( data );} else if( 'desc' == name ) {desc = llUnescapeURL( data );} else if( 'region' == name ) {region = llUnescapeURL( data );} else if( 'x' == name ) {x = (integer) data;} else if( 'y' == name ) {y = (integer) data;} else if( 'comment' == name ) {comment = llUnescapeURL( data );}}}return( [ success, errno, error, desc, region, x, y, comment ] );}
- if an Accept: header is present, and you can generate the mime type the client is requesting, use it. if you can't generate the encoding requested, send a 406 status code.
 in other words, if you ask for a 'application/json' or 'application/dsd+json', i'm going to give you JSON. if you ask for 'text/plain' or 'application/dsd+text', i'm going to give you the text format described here.
- if there's no Accept: header but there is a Content-Type: header present in the request, send the response in the format of the content type. if you can't generate that encoding, don't freak out, continue to step 3.
 so if there was a Content-Type: header in the request and there wasn't an Accept: header, i'm going to try to encode the response using the same type. if your request included a json blob with an 'application/json' Content-Type, i'll try to generate that as a response.
- send a DSD-Text formatted response.
Sunday, March 20, 2011
the return of hbmobile.org
Saturday, March 12, 2011
radiation monitoring station
Tuesday, March 8, 2011
driving in dallas
Monday, February 21, 2011
on the benefit of open mobile devices
Wednesday, February 2, 2011
experiments with social media
social experiment. what happens when i ask people to retweet retweet requests in the guise of a social experiment? - please RT!
okay. social media experiment 2 : i'll give 50 lindens (each) to the first 10 people who retweet this message.
social experiment: if 10 people retweet this message in the next 4 hours, i'll donate L$500 to Bridges for Women, http://sl8.us/gAPHcs4_E
social experiment : L$50 to the next 10 new followers who retweet this message. (follow me, then tweet your #secondlife avatar name)
social experiment : L$50 for the first 10 existing followers who convince new people to follow me. get new followers to tweet your name.
- it seems more of my followers are active in the afternoon. yes. this is a completely unscientific statement. i'm conflating time with message content. had i repeated the same message in the morning and afternoon, we could have an "apples to apples" comparison.
- my followers seem to be somewhat altruistic. pat yourselves on the back, twitter followers, you seem to be eager to give away my hard-earned lindens to charities. seriously though, it took only a couple minutes to get 5 people re-tweet the message in experiment 3 and we finished the challenge with a couple hours to spare.
- larger sums seem more interesting to people than small sums. when i offered L$50 rewards, uptake was a little slow. slower than when i offered to donate L$500 to a charity. so maybe larger sums motivate people more than smaller sums.
- different experiments didn't seem to affect each other. after tweeting the L$500 challenge in experiment 3, i waited to see if there would be more interest in experiment 2. i was thinking we might see a couple people looking at the "big tweet" and then notice the others. but no dice.
- some of my followers think i'm a rube. perhaps they're not aware of just how high-brow embedding roald dahl references in pseudo-scientific observations is. but at least one follower indicated i was behaving like a dork for running these experiments.
- way more of my followers use the #NewTwitter re-tweet feature than copy and paste messages into new tweets. this shouldn't be a shocker, it's a lot easier on the twitter web page to hit the "re-tweet" link than it is to copy or paste. however, other twitter clients make "re-tweeting with comments" much easier. still, it looks like most people chose the easy "single click re-tweeting" route.
- your network may respond better at specific times of the day. i'm going to speculate that for most people, the majority of their human followers are in the same time zone as themselves. tweeting at 3AM is simply going to reach fewer people since fewer people are awake. it might be a cool idea for someone to come up with a tool to see when their twitter followers are most active. actually, i think most twitter analytics packages do this already.
- if you're going to give money away, people respond better to larger sums. i speculate this is because "more is always better" when it comes to cash. a more interesting way to spin this is that maybe some people just filter out low value commercial tweets. for instance, if someone told me "i'll give you a US$1 gift certificate for amazon" and i happened to be in the middle of an involved task, i may simply choose to ignore it. but if they said, "retweet this within 5 minutes for a US$500 amazon gift certificate," i would probably drop what i was doing and start retweeting. so i'm hypothesizing the existence of a "value point" for each person. rewards below that point are not worth the effort. i would be very interested to see someone come up with a "real" experiment for how to determine where this value point is for users.
- multiple promotions may have a synergistic effect, but i didn't see that here. i'm going to speculate there are a few people out there who even though they're not interested in a particular promotion, after seeing a it, they'll click on a "more info" or "other promotions" button or look at someone's twitter profile. they may find a promotion or tweet that's more in line with their needs or has a better value proposition for them. i guess what i'm saying is, i hypothesize promotions like the experimental tweets i used here get certain people's attention. while you have their attention, it's easy to convince a few of them to look at other promotions. but i think you have a limited window of opportunity when you have their attention. i spread these tweets out over the course of a full day and had pretty poor luck getting cross-pollenization.
- you get more responses when tasks are easier to perform. the rewards i'm offering are on the order of L$50 or US$0.20 (not accounting for exchange fees.) maybe it's unreasonable to assume people will (as @shava23 says) "risk reputation for 20 cents." or maybe my followers aren't the recruiting type. or maybe you're not properly motivating existing followers by saying you'll reward new followers. discuss.
 
