Showing posts with label facebook. Show all posts
Showing posts with label facebook. Show all posts

Saturday, April 28, 2012

Facebook Autopoke Update

It's been a few months since my last post.  After a few months, I finally got in touch with the folks at Greasemonkey.  It looks like Jesse Andrew is no longer running things, which is great for him.  He's got a lot on his plate and it's good to see him giving away some things.

But it did make making the DMCA takedown's a bit longer.  There is only one script left that violates GPL.  Since it's one script, I will be releasing the newest autopoke script sooner than anticipated.

Please note that the public version of the script will be an obfuscated version.  This does accomplishes two things:
  • Makes it much easier to see who is actively copying my script without permission
  • Also allows those who have "pirated" scripts to know they may be using an outdated or insecure version.
By no means is this perfect, but it gives people like Tony White, who does nothing but copy scripts and claims them as his own, another hurdle to jump through.

If you are a developer and would like access to the "development" version, feel free to look through the Google Code project.  I use mercurial so it should be easy to figure out which is which.  (Sorry, no further clues will be given.  You're a developer.  It's easy to figure out.)

Speaking of Tony White, I'd like to take a brief moment to share a few thoughts about the GPL and litigation.  First, I don't enjoy using a public forum to address a personal issue.  But he has left me no choice since he has yet to respond to any of my messages.  I have asked Tony White on four separate occasions to bring his scripts into compliance.  I could understand a one-time mistake.  Most people don't understand how the GPL works.  However, after reviewing all of his scripts, the vast majority of them are copies of other people's work.  He then removes the original author's name and substitutes his own.

My goal is to not make money off of any of my scripts.  They are freely available, both in speech and in beer.  That is why I did not sue Userscripts or Tony White.  However, claiming someone else's work as your own is simply despicable.

I cannot fight for other people's copyrights.  But I can fight for my own.

Tony White has blocked private messages, either only from me or from everyone.  Either way, here is the bottom line:

If Tony White is found to have a copy of my Facebook Autopoke script, I intend to file suit in Federal Court for injunctive and damage relief.  I plan to ask the court for $1000 for each violation, which will include each copy that was downloaded.  And since he was a repeat offender, I can triple any damages that are awarded.

That being said, I hope to release the newest version of the Facebook Autopoke within a month.

Monday, October 17, 2011

Getting tired of the edit wars? Autopoke is being considered for closed source

Facebook may be changing their poke code in response to this script.  While unconfirmed, it seems each iteration makes autopoking harder and harder.  To thwart their efforts, I am considering closing the source and obfuscating the code.  What do you think?


If you don't see the survey above, you may need to enable surveymonkey.com within your NoScript. Or you can simply take the survey on their website.

Wednesday, September 21, 2011

Yup, the new facebook broke the autopoke

For those of you that just finished cursing the developers of Facebook for fixing something that wasn't broken, you will soon realize that the new design broke the autopoke.

No worries.  Development has continued.  Hoping to have a fix by the end of the month.

Monday, September 19, 2011

Thanks to Jesse for taking action!

Thanks to Jesse for taking down the offending scripts!

All but one remain so for me the battle has been won.  The author has the right to counter the take-down notice.  He would have to prove that he did not violate the license, which will be difficult since I have screenshots and a diff showing otherwise.

Development on the Facebook Autopoke will continue this week.  I'm hoping to release version 4.1 that will:
  • Correct the reload issue
  • Constantly monitor Facebook for pokes and automatically re-poke them
  • Allow users to take their poke wars with them
  • Easier integration with Chrome (Please note "easier".  I'm still not developing for Chrome.  Just making it easier for others if you want to modify my script)
  • Fix security problems
To be clear: do not be afraid to modify my code.  The problem I had with Tony White was that he just copied the code and called it his own.  Improvements upon my code are HIGHLY ENCOURAGED and do not require permission.  Attribution is always appreciated.  You should note that I still give props to the original creator of the autopoke script, even though my implementation no longer looks anything like his.  (He doesn't work on his poke script anymore.)

Wednesday, September 7, 2011

Fighting GPL violators

Being a strong believer in open-source, it gives me no pleasure to find people who violate open source licenses.  Abiding by these licenses are fairly easy and I take a very liberal view of the rights that they protect.

Back in June, I discovered several userscripts that were copies of my Facebook Autopoke script.  While I normally wouldn't have a problem with this, the fact that this user simply copied the script and just pasted his name on it made me pretty angry.  It's one thing to use my script as a bases of a better script.  Even if it's part of a larger work.  But copying the script and just slapping your name on it not only violates the GPL legally, it violates it spiritually.

The GPL was created to foster sharing of thoughts and ideas without fear of stepping on someone's toes.  What this user did was took my hard word and claimed it as his own.

Now, I contacted the Tony White back in May and never received a reply.  So, I contacted Userscripts.org and informed them that I had revoked his license, persuant to section 8 of the GPL. The script is still up today.


So until I have this resolved, all work on the autopoke script will cease.  If you have any questions, feel free to ask them here in the comments.



Friday, July 29, 2011

Fixing Autopoke issue

Yes, I'm completely aware of the issue where the script just says, "Lock confirmed; preparing to poke..."

This is an on-going issue with the script unable to capture when the page is fully "ready." I'm in the process of incorporating code from jQuery that will make this detection a bit easier.  I don't want to import the entire library since I'll only be using a part of it.

Thanks for your patience.

Monday, June 6, 2011

Facebook Autopoke 4.0 Release Party!

It's been over seven months since the last release of the Facebook Autopoke script.  I wrote in the last release that the script would NOT be updated until the release of 4.0.

Welcome to the Facebook Autopoke 4.0 RELEASE PARTY!!!

That's right!  The Facebook Autopoke script is now available! You may want to completely uninstall the current version you have now.

I'm disappointed that the fundraiser for the LAST Well didn't work out.  But, I would like to encourage you to make a donation anyway via their official website.  I won't be tracking your donation but I would like to encourage your to let them know that you are donating because of this script.

If you haven't already, wander over to the official tailgate wiki and take a look at all the new features.

Thursday, June 2, 2011

Fundraiser has been cancelled

Due to unforeseen events, the fundraiser for the LAST Well has been cancelled.  The Facebook Autopoke script is undergoing a final integrity check and will be released Monday evening.

I'll be updating the wiki portion of tailgate over the next few days so please check it for details on how everything works.  As always, please submit bug reports on tailgate and NOT on userscripts.org.

Wednesday, May 25, 2011

Donation API issues

I know everyone is waiting on the release of Autopoke 4.0.  The LAST Well is having issues with their credit card merchant.  As soon as this is resolved, I'll give you guys directions on how to donate.

Sorry for the delay.

Thursday, May 5, 2011

Facebook Autopoke 4.0 is almost ready!!

I'm working with The LAST Well to put together an interface so people can donate. Hoping to have it available by the end of next week!

Stay tuned!

Thursday, April 7, 2011

Major Milestone Achieved!

Quick stats:
  • 377 lines of code
  • 15 KB
  • About 50 total programming hours spanned over three weeks
I am pleased to announce that the autopoke script has reached an important milestone: it has completed it's first set of pokes!  Until now, the majority of the programming concentrated on how to actually detect pokes without loading the entire page.  Then, work began on detecting pokes across all languages, which meant hacking the code of Facebook.  Finally, the poke functions were re-written from the ground-up.

Here are the technical changes made thus far:
  • Uses XMLHttpRequest instead of GM_XMLHttpRequest: Makes use of the fast Javascript engine instead of passing to Greasemonkey.  This change should make it easier for non-Firefox users to install the script.  But remember that it is not officially supported.
  • Makes asynchronous requests: Fixes a bug that users of slow computers from properly auto-poking.  A copy of the front page is used instead of the DOM itself.  It allows for faster processing and allows users to be poked even before the page finishes loading.
  • New status/error messages: These messages are far more informative and allows the user to see why a poke failed.  Debug variable can still be set to see the "console".
  • Makes use of XML 1.0 standards: Facebook is XML 1.0 compliant. The script makes use of this to retrieve important information to pass to the poke function.  (If you want to see this in action, set debug to 3 or higher.)
 And here are a list of features that will be added over the next couple of weeks:
  • Tracking number of pokes in current war: Obviously, this won't include pokes that have already occurred
  • Check Facebook for pokes automatically
  • Prettify error messages so that they can be copied and pasted into bug reports
  • Comments within the code
And finally, I am working with The Last Well, a 501(c)(3) non-profit organization that building wells in Liberia, to receive donations for it's mission.

Monday, April 4, 2011

Facebook changes their poke engine...again

This seems to happen about 2-3 times a year.  Facebook will change the way that pokes are processed both via the browser and on the backend.  While there is no proof that Facebook is doing this purposefully to disable the autopoke script, it does break the script and produces error 1.1.  This error code means that the autopoke script received a response from Facebook that wasn't expected and could not process the poke any further.

As I've stated before, I do not plan on releasing fixes to autopoke 3.5.  I'm actively developing 4.0 to replace 3.5, which will include an adaptive regular expression to be able to execute the pokes without having a perfect match.  However, this is proving harder than I initially realized.

(Note, another user fixed 3.5 and has released it on userscripts.org.)

There are about eight different places that Facebook can change that could break the script.  I won't run through them all here, but needless to say, it is impossible to predict and anticipate these changes.  For example, prior to this last update, the ID that was assigned to the poke DIV element was named pagelet_netego_pokes.  Facebook has renamed the DIV element to pagelet_pokes.

Facebook uses ajaxify to load a large majority of it's modules (e.g. pokes, birthdays, stories, photos, etc).  This means most of these elements load in the background.  Instead of waiting for these elements to completely load, the 4.0 script now downloads a copy of your homepage to evaluate.  This fixes a HUGE bug where pokes were not being processed because the elements do not completely load.

Even though the script doesn't use the DIV element, it still relies on the ID, which is used within ajaxify to actually load the poke node.  Unfortunately, this is something that cannot be changed due to the mere fact that Facebook can change this div to something completely random.

Facebook has already done this to many of their elements.  If you view the source of the Facebook frontpage, you'll notice many of the linked script names are Df69GCI-zBW.js, 4gR9cTpQYHa.js, etc.  I assume this is done so that the files can only be used once can the source cannot be downloaded conveniently.  Those who know what they are doing (like yours truly) can download these files without much hassle.

The poke link detection is based on the fact that the poke engine (e.g. the actual webpage that processes all pokes) has the word "poke" in it.  Originally, the link detection was based on the link text having the word "poke" in it.  This was changed to allow non-English speakers to use the script.  If Facebook changes things again so that these IDs are randomized, the script will have to fail-back to searching for the work "poke" within the link text, breaking the script for non-English users.

Another change that Facebook has made is how pokes are processed.  This used to be a POST form, which meant encoding the form parameters.  But now, it looks like Facebook is changing this to GET.  (FWIW, this used to be how Facebook did things back in the day.)  Unfortunately, this is something that the script cannot anticipate and must be hard-coded.

As development on 4.0 continues, I will attempt to make the script as adaptive as possible.  But please understand that it is impossible to anticipate everything.  Hopefully, it will be more resilient than it's predecessors.

Monday, March 21, 2011

Facebook autopoke development update

Over the weekend, I've been slaving away to find a better way to search for the poke div box.  After some hacking, I found that facebook uses something called ajaxify.  The problem with this plugin is that greasemonkey cannot interact with it, which sucks because facebook loads the pokes using ajax.  I've known this for a while, but it wasn't until recently that I found the mechanism that it uses.

While I have yet to hear from anyone from facebook concerning my script, it does seem that facebook is trying to block automated requests to poke someone.  I don't know if this is intentional or a side-effect of other changes they are making.  What is clear is that every so often, the code changes.

One of the features I'm hoping to add to the autopoke script is the ability to "fix itself" should facebook change their code.  While this is not 100% possible, the script can be flexible enough to notice changes to facebook's main page and hopefully, figure out the solution.  This feature may not be ready by the release of 4.0, but I'm hoping to work on it.

Another feature I'm actively working on is better internationalization.  Currently, the script only works with English, specifically by design.  I'm working on this so that it will work for any language.

Finally, some important news:

Initially, the autopoke script was born out of a need to fix someone else's autopoke script.  I continued working on it, making it better until my script became more popular than original script.  It came to the point that I no longer had any of the original code (as of version 2.0).

Development of this script takes a lot of time.  In fact, the development of 4.0 has so far taken 20 total programming hours.  There have been a little less than 100,000 installs of the script, which doesn't necessarily mean 100,000 users.  But judging by the sheer number of people who complain when it doesn't work, it's still a lot of people.

I am a firm believer in open-source and source-code freedom.  I also believe people should be compensated for their work.  Whether that's a hardy "thank you" or a monetary contribution, I believe it encourages development and lets the author know that he is appreciated.  With this in mind, I will be establishing a new release structure for this script.

I've decided to something similar to what Stephen King did in 2000: The script will be released once a certain amount of money has been raised. 100% of the money will go toward a non-profit organization that will be decided when the script is ready for release.  I don't have a dollar amount figured yet or how the logistics will work.  As soon as I figure this out, I'll post here.

As a result of this, will not be pushing the updates to Google code.  Changes and source will become available after the release.

Monday, March 7, 2011

Development on Facebook Autopoke 4.0 to start next week

A long awaited update to my most popular greasemonkey script will begin sometime next week.  The following changes will be made my autopoke script:
  • a complete rewrite of the script from the ground up!
  • use xml_httprequest instead of GM_xml_httprequest to save time and overhead
  • better poke detection
  • poke war count
  • localization for any facebook language
  • better use of xpath and other tools that have been introduced
I know that this script is being used on other browsers (e.g. Opera, Google Chrome, etc) but please realize that I can only focus on one browser: Firefox.  You are more than welcome to port the script to your own flavor of browser.

Release date is unknown at this time, but I'm hoping for September 2011.