I’ve been trying to learn how to use Perl to do some simple stuff whenever I just cannot use PHP. PERL is a language that I have access on every machine under my control, but unfortunately I cannot say the same thing about PHP and that is why I have decided to start learning using this ultra flexible language.

Now, the first thing I have developed (aside from the popular Hello World – LOL) was a simple script to check for website updates. This was particularly useful to check for updates on a website related to a contest.

use strict;
use warnings;
use LWP::Simple;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Encode qw(encode_utf8);
 
my $link                = 'http://www.foobar.com';
my $email_from          = '[email protected]';
my $email               = '[email protected]';
my $email_subject       = 'Website Changed!';
my $email_body          = 'Hello! I just want to let you know that the website ' 
                          . $link . ' have just changed!';
my $tmp_file            = '/tmp/stored_hash';
 
my $web_source = get( $link );
my $current_hash =  md5_hex(encode_utf8($web_source));
 
if(-e $tmp_file)
{
        open FH, "<$tmp_file" or die "could not open: $!\n";
        my $mod_hash = <FH>;
        if( $current_hash ne $mod_hash )
        {
                open(MAIL, "|/usr/sbin/sendmail -t");
                print MAIL "To: $email\n";
                print MAIL "From: $email_from\n";
                print MAIL "Subject: $email_subject\n\n";
                print MAIL "$email_body\n";
                close(MAIL);
 
        }
        close FH;
}
        open FH, ">$tmp_file" or die "could not create: $!\n";
        print FH $current_hash;
        close FH;

Just replace the email and link stuff to suite your needs and you are all set! Enjoy!

If you are thinking about using domainsarefree.com to register a website, please think twice! I tried to register a domain which failed because I couldn’t find my credit card. I just thought “No problem, I will search for my wallet and register the domain later…”

Two days later when I tried to register that domain again it was already registered! And I thought to myself: “how the heck did that happen? That domain is complex with so many letters and not even related to a recent hot topic, this can’t be a coincidence!”

I don’t like to be paranoid, but after reading a few links like this one I now understand what happened.

So be aware: If you want to register a domain, either do it fast or don’t even use domainsarefree.com otherwise you will end up with a robbed domain.

A few months ago I got tired of using eclipse as my IDE because it is extremely slowwww, so I’ve decided to give an opportunity to IntelliJ Idea.

It seems faster than eclipse. No doubts about that. But then I came across these king of lame errors:

I’m getting tired of using such lame IDEs with basic bugs. Any alternative to develop Java/Android applications?

I wish someone could develop a Visual Studio clone for java 🙁

This is probably a common problem among all the people trying to get audio over HDMI under Linux using an EN210 graphics card (or similar).

Even though the HDMI may appear in your available cards listed in proc (/proc/asound/cards) you will probably see that you cannot find it using the aplay utility. Just check it running the command “aplay -l”. The HDMI device isn’t listed here isn’t it?

The reason for this issue is related to the ALSA driver version 1.0.21 (or older) which is quite buggy for these graphics cards.

You can check which version you are using by executing the following command:

cat /proc/asound/version

If you get a version older than 1.0.21 then you need to upgrade it. You can check your favourite distribution’s repository for an update or you can try to compile it from source code.

If you can’t find an update, check this page: http://ubuntuforums.org/showthread.php?t=1681577

It might help you 😉

If you are running the latest version of Ubuntu and tried to mount a NTFS filesystem you probably already know that you can’t and maybe you have even seen an error like “mount exited with exit code 21″.

This seems to be due to a bug in libfuse2 and/or fuse-utils package. To fix this temporarily you can downgrade both packages to a prior version. libfuse2 and fuse-utils version 2.8.1-1.1ubuntu2.2 seem to be OK but 2.8.1-1.1ubuntu3.2 is useless.

Just download both packages and install them:

http://launchpadlibrarian.net/60433788/libfuse2_2.8.1-1.1ubuntu2.2_i386.deb

http://launchpadlibrarian.net/60433786/fuse-utils_2.8.1-1.1ubuntu2.2_i386.deb

Don’t forget that these are 32bit packages. If you are using 64bit OS then download the needed packages.

sudo dpkg -i libfuse2_2.8.1-1.1ubuntu2.2_i386.deb
sudo dpkg -i fuse-utils_2.8.1-1.1ubuntu2.2_i386.deb

Problem solved 🙂

If you are an Android Developer you probably know how hard it may be to develop webservices based applications. The lack of official support for these implementations is compensated by some modules like ksoap2 that handle de SOAP stuff and communication.

For simple cases where you just have to send/receive simple data types it is easy to use, but things can get a bit complicated when you need to handle complete data types with dozens of different functions.

That’s why someone created the automatic stub generator. A stub is a set of classes generated automatically from the WSDL so you don’t have to create all functions, definitions and data types available in the WSDL by hand.

You can download the ksoap2 jar from here.

You can download the stub generator from here or you can try my online version of the stub generator filling the input box with the WSDL URL and press download.

Router passwords has become a true success on the android market. After a few weeks it has almost 50.000 downloads and counting. I’m trying to add some features as requested by users and since there are a lot of people interested maybe I can get some help registering new devices making the database bigger.

It is very simple. Just use the following link to register any new routers which are not already present (you can also submit simple corrections).

http://www.davidgouveia.net/routerpasswords/

Your name will not be forgotten 🙂

Router Passwords is an application that includes a database containing the default credentials for hundreds of network devices. This is the ideal tool for someone who needs to handle multiple network devices.

DO NOT USE THIS TO GAIN ACCESS TO OTHER PEOPLE’s ROUTERS WITHOUT THEIR CONSENT!

router passwords
or click here.

Talvez por os tempos serem de crise, tenho andado a pensar nos últimos tempos como rentabilizar ao máximo os fundos de que disponho actualmente. A ideia é pegar numa determinada quantia e fazer uma aplicação durante alguns anos reinvestindo todos os anos o valor inicial incluindo os juros ganhos.

Criei um simples simples script que me efectua este calculo. Já existem calculadoras destas às paletes, apenas criei uma nova para simular variações nas taxas de juros entre os vários anos.

A ideia é simplesmente utilizar como limites de variação de juros fornecidos pela instituição financeira e assim tentar ter uma ideia mais real (que na realidade até pode ser bem menos real) do resultado final.

Utilizem o seguinte formulário para efectuarem o calculo:

 

[INDISPONIVEL AINDA]

If you do a quick search in google, you can find several links which explain how to hide the taskbar under Windows CE. Unfortunately, almost everything that you can find either is directed to unmanaged languages like C++ and VB6 or is based on C# language.

Here goes a quick snippet that do the same thing using VB.Net:

    Public Const SW_HIDE As Integer = &amp;H0
    Public Const SW_HIDEWINDOW As Integer = &amp;H0
    Public Const SW_SHOWNORMAL As Integer = &amp;H1
 
     _
    Public Function FindWindow(ByVal className As String, ByVal windowName As String) As IntPtr
    End Function
 
     _
    Public Function ShowWindow(ByVal hWnd As IntPtr, ByVal cmdShow As Integer) As Boolean
    End Function
 
    Public Sub HideMyTaskBar()
        Dim taskBarHWnd As IntPtr = FindWindow("HHTaskBar", String.Empty)
        ShowWindow(taskBarHWnd, SW_HIDE)
    End Sub

Now just call the HideMyTaskBar() sub and that’s it! :)