It was March this year when I decided to check an old Yahoo! email account I had. To my surprise, as I log in, there’s a billing invoice for U$ 300 from Yahoo! Directory for a site that hasn’t existed for a while now.
De: “dirsubmit326@yahoo-inc.com”
Para: jmafonseca2008@yahoo.com.br
Enviadas: Sexta-feira, 9 de Março de 2012 5:35
Assunto: Yahoo! Listing [Order 151913725]Dear Yahoo! Directory Submit Client:
The URL you previously submmitted for expedited review
with Yahoo! Directory Submit order #151913725 has been reviewed
by the Yahoo! Directory Submit editorial team as part of the Annual Review
process and your credit card has been charged the applicable fee.
Never mind that the site has been off the air since earlier in 2011 so Yahoo! did obviously never review this site – because the site did no longer exist on March 9 2012.
They went ahead and charged my card without ever providing the service they claim they did.
Billing a card twice by accident is a mistake. The batch job failing overnight is a mistake. Charging for the wrong currency is a mistake. These are nuisances, but are explainable and normally easy to fix.
But claiming to have reviewed a site that doesn’t exist is not a mistake, it’s a scam.
It is now May 21 2012 and I have never heard back from them. But it doesn’t stop there. Have a look at the rest of this ridiculous message:
In accordance with the Yahoo! Directory Submit Terms of Service, your site
is reviewed annually to ensure the site is functional, placed in
an appropriate category, has an accurate and relevant
description, and continues to meet the qualifications for
inclusion in the Yahoo! Directory. For more information on the
Annual Review and/or the Recurring Annual Fee, please see the
Yahoo! Directory Submit Terms of Service
(http://docs.yahoo.com/info/suggest/terms.html).
Really? AllWebHotels.com is fully functional and “meets your qualifications” for the Yahoo! Directory?! That’s one great quality control you got going there!
On top of it all, just to complete my day, an old friend of mine requested a conversation by Yahoo! Messenger. I downloaded it and regrettably installed the thing.
Now their messenger installed all sorts of spyware on my Firefox and I simply can’t get rid of all the Yahoo! crap on my browser.

Oh and Yahoo! apparently uninstalled the uninstall function, I can’t find it anywhere.

They took U$ 300 from me for no reason, they didn’t reply support emails requesting a refund for this scam and then they crapped all over my browser.
Google, Facebook and DuckDuckGo don’t even have to try. Yahoo! is destroying itself. What a sad end to one of the WWW’s once most exciting success stories.


Here’s a classic example of a Perl OO gotcha, for beginners. You want to subclass the ubiquitous LWP::UserAgent. Let’s start with the basics. This should work, right?
package MyAgent;
use LWP::UserAgent;
use base 'LWP::UserAgent';
sub new {
my ($this) = @_;
my $obj = {};
return bless $obj, $this;
}
1;
Well, it doesn’t. The parent class’ fields haven’t been correctly set up. Try $object->timeout(), for example. The following test….
ok($ua->timeout() > 0, 'timeout must be > 0');
…will fail. Because we haven’t run the parent constructor, which should set up a properly initialized UserAgent. We need to run the parent constructor in order to fill in the object.
Let’s go with our intuition, I’d probably try this.
package MyAgent;
use LWP::UserAgent;
use base 'LWP::UserAgent';
sub new {
my ($this) = @_;
my $obj = {};
bless $obj, $this; # bless our class
$obj->SUPER::new( ); # call our parent constructor
return $obj;
}
1;
That won’t work. We get:
Attempt to bless into a reference at /usr/share/perl5/LWP/UserAgent.pm line 82.
We’re giving our parent a reference to ourselves, not a class name. UserAgent can’t bless $something => $HASHREF which is the correct, documented, behavior for bless.
So we’re left another alternative: instantiate the parent object, which should fill in all instance variables, then we bless that to ourselves. Which is what calling the super constructor is supposed to do in any object oriented language.
package MyAgent;
use LWP::UserAgent;
use base 'LWP::UserAgent';
sub new {
my ($this) = @_;
my $obj = $this->SUPER::new( ); # we instantiate a parent object
bless $obj, $this; # and then bless it to our current class!
$obj->agent("MyAgent/0.1");
return $obj;
}
1;
Let’s write a simple test case for that:
#!/usr/bin/perl
use strict;
use warnings;
use Test::More "no_plan";
use MyAgent;
use Data::Dumper;
my $user_agent = new MyAgent();
isa_ok($user_agent, 'MyAgent');
isa_ok($user_agent, 'LWP::UserAgent');
Both isa_ok tests pass: it’s a MyAgent and it’s a subclass of LWP::UserAgent.
We instantiated the parent class explicitly and then told Perl it belonged to our current class(we blessed it). It’s almost like class composition instead of inheritance, except instead of having the superclass stored as an instance variable, we have it stored as the blessed variable itself – which probably is what every other object oriented language does anyway, each in their own chic way.
Trying something like Java won’t work.
package MyAgent;
use LWP::UserAgent;
use base 'LWP::UserAgent';
sub new {
my ($this) = @_;
my $obj = {};
$this::SUPER->new(); # doesn't do what we want
bless $obj, $this;
return $obj;
}
1;
$this::SUPER->new() doesn’t do anything for us in the above example. The variable which will become our object is $obj, and it’s just an empty hash. $this contains MyAgent, nothing more. MyAgent::SUPER->new() makes it clear why: new() is setting up a class, statically, nothing is returned from it and $obj is not filled with instance data.
The following is not a mistake per se, but it’s ugly OO code.
sub new {
my ($this) = @_;
my $obj = new LWP::UserAgent();
bless $obj, $this;
return $obj;
}
Calling the superclass explicitly also works, but is ugly(some might say uglier still, considering the already quirky OOrientation in Perl)
package WWW::Mechanize;
....
# line 268
my $self = $class->SUPER::new( %parent_parms );
bless $self, $class;
Exactly as we did on the working example above.
__FIN__
1;
SOPA is based on the absurd principle that sites shall be co-responsible for criminal acts committed by their members. It turns web sites into accomplices for copyright violations perpetrated by people the site owners have never met. It is a confession of defeat by authorities – they are unable to enforce copyright law in the new reality of 2011, thus they will remove everybody’s rights online because of their particular failure.
Let’s draw a parallel here. Blaming Reddit, Youtube and even Wikipedia for any eventual copyrighted content submitted by their users is akin to blaming gun makers for homicides committed using their product. You will not, in our lifetimes, see the gun makers be criminally convicted for murders committed using their product. It’s been tried, and it’s always been a lost cause. Civil lawsuits have been won, damages have been granted for violent gun-related crimes, but a criminal conviction has never been attained, precisely because you can’t be criminally responsible for crime you didn’t commit(or actively participate in, in some way).
Why should SOPA, then, convict websites like Wikipedia of a felony if anyone is able to submit copyrighted content to them? It is obvious that if SOPA is passed, it may be used against websites by the very copyright holders. Copyright owners, who have been known for spreading their own content as a “honey pot” in order to implicate downloaders, could easily sabotage sites like Wikipedia by submitting their own content, taking screenshots filing lawsuits for copyright infringement.
SOPA has the potential to create a sea of lawsuits, by everyone against everyone. Just upload your copyrighted work and file a criminal complaint any given site. This old trick has been used against me in the past, by a photographer.
One website I worked on was sued by a photographer who claimed one of his photos was used without authorization. We checked and the photo had been uploaded just days before the lawsuit was filed…it is unlikely this photographer found this photo casually on the internet. Most likely, we were the victims of that very photographer. We checked and this person had over 300 identical lawsuits against sites which allowed the upload of photos. Basically, this photographer was making a living by submitting his photos and then filing lawsuits. As of this time, we’re still defending ourselves against his accusations. Now, imagine if SOPA were in effect here, we’d be criminally responsible, along with 300 others, for a crime we didn’t commit.
SOPA has the potential of destroying the collaborative nature of the Internet and it must be stopped. Do your part!
Google penalizes any site which copies content from another with the intent of taking the original author’s traffic. I wonder if they have a special deal with some sites in order to present their content on Google’s search results directly?
Here’s a simple example. I’ll ask Google to define what monopoly means.

I take the definition and search for it in quotes, on Google itself. Which gives me the following result:

The definition which Google showed on its search result is exactly the same provided by the Oxford Dictionary. But the user never reached the source of the original definition of “monopoly”, never registered for that site’s services, never even saw the logo of Oxford.
I wonder if dictionary sources are getting some compensation for allowing this?
If, by any chance, you decide to reset your Twitter password and you receive the message via Gmail, you’ll find that it’s currently impossible to procede because only a part of the message is displayed.

The solution is to “View Original Message” on the drop-down menu located at the top-right hand corner of Gmail messages. There you’ll find the link, you should copy and paste it into a new browser tab.