Tuesday, December 20, 2011

Yes, Virginia, autopoke works again

Still working on the final touches:


Right now, this only works on the pokes app page, as suggested by Lord_Fandomar.

What's left is for me clean up the code and obfuscate parts of the code.  I also plan to make this work on the main page, but it's not a high priority.

Friday, December 9, 2011

Survey Results: 70% prefer closed source

Its not too late to voice your thoughts on closing the source.  I've finally had a chance to review the results and out of about 200 people who took the survey, 70% would prefer that I close the code.

I've been wrestling with this issue for a while and still have not come to a decision.  Here's what hangs in the balance:
  • Since the Autopoke scripts inception, it has been 100% open-source, using the GPL 2 and 3 licenses.  The latest version of the script (4.0.1) exclusively uses GPL 3.
  • Closing the source would mean that other developers could not learn from the work.  This includes both legitimate programmers who are porting the script to Google Chrome to Facebook programmers who may be trying to stop scripts like this from working.
  • Closing the source would not mean it's 100% secure against viewing.  Real developers can parse through obfuscated code.  It's harder, but not impossible.  (In fact, I go through Facebook's obfuscated code to create this script.)
  • Obfuscated code would be hosted remotely, making it less secure.  In order to properly shield the code from viewing, the code would be hosted on my personal site.  This comes with risks such as me having the ability to know who you are.  I would draft a very simple privacy policy (basically that I don't care who you are).  But doing this would allow me to block facebook.com from connecting to the site.
Despite the large number of people who would prefer that I close the code, I still lean toward an open-source solution.  I'm a firm believer that open-source is better since it allows everyone to learn and don't think that the benefits outweigh the problems.

I am still developing the Autopoke for the new version of the Facebook news feed.  PLEASE be patient.  I have a full-time job and I do other things besides computers.  This time of year is very busy for me.

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.)

Monday, September 12, 2011

Will be patching the innerHTML bug for most popular scripts

I've recently learned that there is a security vulnerability with using the innerHTML method within JavaScript.  I'm still researching this issue.

I'll be releasing patches for the most popular of my scripts sometime by the end of the month.

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.

Monday, May 9, 2011

Final Features for Facebook Autopoke 4.0

As I finalize the code for 4.0, I'm going through the wishlist of features and deciding their fate.  Will they be included, will they not.  Unfortunately, there is one major feature that will NOT be included: automatic reload of the script.

While testing, I did program the script to automatically pull the main Facebook page.  For some unknown reason, Facebook continues to show people who have already been poked in this pull.  I initially thought this was due to a caching issue but have since determined that this is not the case.  Since the problem is on Facebook's side, I've decided to remove this feature.  Since this is how the Autopoke currently works, I don't see this as a step back.  Keeping the feature in the final build creates unnecessary traffic.  The code is still contained in the RCS (revision control software) so it's not lost and can be added back in at any time.

I've done my best to make the script as flexible as possible.  The script no longer requires the English language and should work on any language, be it fake (e.g. pirate) or real (e.g. German).  It is able to do this by relying on the underlying ajaxify library.  Should Facebook ever stop using this or start using a different library, the script will have to be rewritten.

Over the next few days, I will be removing much of the extra code that makes debugging possible.  I'll also be adding an error reporting tool that will allow you to copy and paste it's output into a bug report.

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!

Monday, April 11, 2011

Poke tracking added

Good afternoon everyone!

I spent today adding the ability to track the number of pokes between the user and their target.  Of course, this count is completely localized, so if you use the script on multiple computers, it will keep different numbers on each computer.  Not sure if this value is carried over if you use Mozilla Firefox Sync and not going to test this.  Portability is not going to be a feature for the 4.0 release.  It may be in the future.

A couple of things worth noting about this feature:

There is always a trade-off between information and space.  While there is no limit imposed by Greasemonkey, the amount of data that can be stored within the browser should be minimized.  While developing the schema, I debated how much information should be tracked: last poke datetime, initial poke datetime, name, count.  Realizing that people prefer speed over information, I've decided to only keep the count.  This makes it very efficient.

I'm sure there are those of you that would like to know when your friend last poked you and when you last poked him.  The fact is that the more information you store, the slower your browser as a whole will be.  The information is stored in your RAM.  Firefox has a fairly large footprint as it is.  So if you want more of this information and are willing to sacrifice speed (and possibly a crash), you will have to edit the script.

I will not expand on the pokewar tracking feature beyond the number of pokes.  I believe the cost will not outweigh the benefits.  If you want me to code this specifically for you, you will have to purchase a license (which will not be cheap).

At this time, the number of pokes will only show for current wars.  If you want to see a list of everyone you've poked, you will have to open the about:config panel.  This feature may be added in the future, thus will not be in the 4.0 release.

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.

zagg replacement utility uploaded

I released a script that goes through each order that you have with zagg and shows only orders where a replacement can be made.

Have at it.

Tuesday, March 1, 2011

wikiHow Helper - 0.1 ALPHA released

Welcome to the official blog of the tailgate software repository!  This blog will announce releases and other news for the repository.

I have a lot of scripts on the burner right now.  The one I'm releasing today is the wikiHow Helper script.  Due to it's complexity, I'm only releasing small features at a time.  It makes heavy use of the document.evaluate function so it may not work in non-Firefox browsers.

Please visit the project's change log and release notes for details on how you can help debug the script.