Já chegaram as duas competições que te podem levar a passar umas férias no outro lado do mundo, ou a passear pela Europa no teu novo Mercedes.

São eles a XTB Trading Cup e o Jogo da Bolsa do Jornal de negócios.

O objectivo é simples: Investir uma determinada quantia de dinheiro virtual em instrumentos financeiros e rentabilizar ao máximo durante um período de tempo. No final, ganha quem tiver ganho mais.

Os prémios são no mínimo muito aliciantes. Na XTB Trading Cup o primeiro prémio é nada mais nada menos que um Mercedes SLK. Haverá ainda prémios para o segundo classificado e para os vencedores semanais.

No caso do Jogo da Bolsa os prémios são mais simpáticos, mas não deixam de ser bastante aliciantes. Para o primeiro classificado será entregue um cheque de quatro mil euros, com prémios garantidos até ao quinto lugar. Tal como no concurso patrocinado pela XTB, aqui também haverá prémios para os vencedores semanais.

Mais informações no site oficial do Jogo da Bolsa e no site da XTB Trading Cup.

The following code is a .Net class that can be used to update a dyndns host alias. It is pretty simple to use. All you have to do is instantiate the class passing the username/password/host to the constructor.

This is the class:

' .Net DynDNS client class by David Gouveia - me[_@_]davidgouveia.net
' Feel free to use it as long as you don't remove the credits :o)
 
Imports System.Net
Imports System.IO
Public Class DynDnsUpdater
    Private _username, _password, _host, _ip As String
 
    Public Enum UpdateStatus
        SUCESS
        FAIL
        NOCHANGE
    End Enum
 
    Private Function checkip() As String
        Dim ipRegex As New System.Text.RegularExpressions.Regex("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}", System.Text.RegularExpressions.RegexOptions.Singleline)
 
        Try
            Dim UpdateClient As System.Net.HttpWebRequest = WebRequest.Create( _
            New Uri("http://checkip.dyndns.org"))
            UpdateClient.Timeout = 15000
            Dim response As WebResponse = UpdateClient.GetResponse()
            Dim content As Stream = response.GetResponseStream()
            Dim readstream As New StreamReader(content, System.Text.Encoding.Default)
            Dim IpAddress As String = readstream.ReadToEnd
            readstream.Close()
            content.Close()
            If ipRegex.IsMatch(IpAddress) Then
                Return ipRegex.Match(IpAddress).Groups(0).Value
            Else
                Return Nothing
            End If
        Catch
            Return Nothing
        End Try
    End Function
 
    Public Sub New(ByVal username As String, ByVal password As String, ByVal host As String)
        _username = username
        _password = password
        _host = host
    End Sub
 
    Public Function update() As UpdateStatus
        _ip = checkip()
 
        Dim UpdateClient As System.Net.HttpWebRequest = WebRequest.Create( _
        New Uri("http://members.dyndns.org/nic/update?hostname=" + _host + "&myip=" + _ip))
        UpdateClient.Credentials = New NetworkCredential(_username, _password)
        UpdateClient.PreAuthenticate = True
        UpdateClient.UserAgent = ".Net DynDNS Updater Client"
        UpdateClient.Timeout = 15000
 
        Dim response As WebResponse = UpdateClient.GetResponse()
        Dim content As Stream = response.GetResponseStream()
        Dim readstream As New StreamReader(content, System.Text.Encoding.Default)
        Dim DynDnsResponse As String = readstream.ReadToEnd
        readstream.Close()
        content.Close()
 
        If DynDnsResponse.Contains("good " + _ip) Then
            Return UpdateStatus.SUCESS
        ElseIf DynDnsResponse.Contains("nochg " + _ip) Then
            Return UpdateStatus.NOCHANGE
        Else
            Return UpdateStatus.FAIL
        End If
 
    End Function
End Class

And this is how you can use it:

Dim updater As New DynDnsUpdater("dyndns username", "dyndns password", "hostalias")
        If updatert.update() <> DynDnsUpdater.UpdateStatus.FAIL Then
            MsgBox("SUCCESS!")
        Else
            MsgBox("ERROR!")
        End If

have fun :-)

Hoje lembrei-me de um jogo que costumava jogar nos jantares académicos. Chama-se general peck e consistia em fazer algumas afirmações e gestos sob pena de ter de beber uma bebida algo de penalti.

Cada pessoa vai ter de repetir todos estes passos. Se falhar algum destes passos, então tem de beber e recomeçar de novo. Aqui fica um resumo de como o jogar:

O Bar está cheio e todas as pessoas envolvem o GENERAL PECK.
Todos demonstram curiosos com a cena.
Vemos uma mesa com um copo grande vazio e uma garrafa de vinho cheia.
O General Peck está de pé e olha para os presentes com confiança.

GENERAL PECK
(enchendo o copo de vinho)
O General Peck vai fazer uma demonstração.

O General Peck sabe que não pode falhar, com a penalização de beber tudo de golada e começar de novo.
Silêncio na sala.
Pega no copo com o polegar e um dedo.

GENERAL PECK
O General Peck vai beber pela primeira vez.

Bebe um golo de vinho e bate o copo uma vez na mesa.
Pega no copo com o polegar e dois dedos.

GENERAL PECK
O General Peck Peck vai beber pela segunda vez.

Bebe dois golos de vinho e bate o copo na mesa duas vezes.
Pega no copo com o polegar e três dedos.

GENERAL PECK
(Lentamente)
O General Peck Peck Peck vai beber pela terceira e ultima vez, . . .

Olha em redor.

GENERAL PECK (CONT’N)
. . . e no final vai colocar o polegar direito sobre a mesa.

INSERE – GRANDE PLANO GENERAL PECK A BEBER

Bebe três golos de vinho até esvaziar e bate o copo na mesa três vezes.

REGRESSA À CENA

Olha em redor com ar vencedor. Levanta a mão direita sem copo e aponta o polegar para cima.
Mostra o polegar a toda a gente e num movimento brusco coloca o polegar direito sobre a beira da mesa.
Os presentes enchem a sala de palmas.

Pessoalmente preferia esta versão à do jogos dos limões por ser mais elaborada. Testem um dia com amigos :-)

After upgrading my HTPC to Ubuntu 10.04, nvidia drivers stopped working without any reason. After googling a bit, all the answers pointed to a problem related with Ubuntu upgrade system not updating restricted drivers. I have tried manually to update and use all the available versions, but without any success…until I found the cause and solution.

It happens that Ubuntu does not remove old drivers correctly, leaving you with multiple versions which were confusing the operating system. The solution was to purge the system from all nvidia drivers and reinstall just one of them.

You can run the following commands to clean the system:

sudo dpkg --get-selections | grep nvidia | grep -v deinstall | awk '{print $1}' | xargs sudo apt-get remove -y
sudo apt-get install nvidia-current
sudo nvidia-xconfig

sudo reboot

The system will then reboot and if everything is OK, Ubuntu will be as good as new.

Desde o dia 16 de Agosto que a Vodafone introduziu uma nova taxa de 5€ para quem quiser trocar o tarifário do seu cartão e que já o tivesse feito pelo menos uma vez. Quer isto dizer que se já trocaram de tarifário no vosso cartão, ainda que há muito tempo (no meu caso tinha trocado há dois anos e meio), então são abrangidos por esta taxa.

Segundo a explicação que me deram numa loja Vodafone, isto serve para impedir que as pessoas utilizem o tarifário extreme/extravaganza, e que após acumularem algum crédito, que troquem para os tarifários livres até esgotarem os fundos, e repitam novamente o processo. Escusado será dizer que pelo meio muitas pessoas como eu são apanhadas sem terem culpa disto. Neste aspecto Optimus está de parabéns, porque não embarcou na mesma cantiga.

O segredo passa por ligar para o centro de apoio a clientes e explicarem precisamente isso, que querem trocar de tarifário, e que não é justo que vos obriguem a pagar por um comportamento de terceiros. Et voila! Acabam de poupar 5€.

A resposta é simples: Não utilizem esse plugin.

Desde o inicio do meu blog que utilizava esse plugin, mas tendo em conta que sei que é perfeitamente possível enviar tweets sem recorrer a APIs xpto (tenho um script simples feito em PHP para enviar os alertas do Nagios para o twitter e que continua a funcionar) achei por bem procurar alternativas. E nem foi preciso procurar muito. O Simple Tweet funcionou na perfeição sem a treta do Oauth.

Mais informação sobre o plugin aqui.

EDIT: A partir do inicio deste mês, o serviço deixou efectivamente de funcionar. Contudo os acessos directos continuam a funcionar (é particularmente útil para quem queira desenvolver aplicações de interacção com o twitter sem ter de recorrer ao oAuth). Como exemplo disso tenho o meu script de actualização do nagios ainda a funcionar (podem sacar do phpclasses.org).

Descobri por acaso um artigo que continha informação que era útil para um projecto meu.
Como o meu projecto utiliza a tecnologia .Net, aproveitei para rescrever a função que aqui disponibilizo para o caso de ser útil para alguém.

Public Class dlink
    Private mac_ As String
    Public Sub New(ByVal mac As String)
        mac_ = mac
    End Sub
 
    Public Function generate() As String
        Dim password(20) As String
        For i = 0 To mac_.Length - 1
            Select Case i
                Case 0
                    password(1) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 1
                    password(3) = dictionary(mac_.Substring(i, 1))
                    password(12) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 2
                    password(5) = dictionary(mac_.Substring(i, 1))
                    password(17) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 3
                    password(7) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 4
                    password(9) = dictionary(mac_.Substring(i, 1))
                    password(18) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 5
                    password(11) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 6
                    password(10) = dictionary(mac_.Substring(i, 1))
                    password(13) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 7
                    password(8) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 8
                    password(6) = dictionary(mac_.Substring(i, 1))
                    password(14) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 9
                    password(15) = dictionary(mac_.Substring(i, 1))
                    password(4) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 10
                    password(2) = dictionary(mac_.Substring(i, 1))
                    password(19) = dictionary(mac_.Substring(i, 1))
                    Exit Select
                Case 11
                    password(0) = dictionary(mac_.Substring(i, 1))
                    password(16) = dictionary(mac_.Substring(i, 1))
                    Exit Select
            End Select
        Next
        Return Join(password, "")
    End Function
 
    Private Function dictionary(ByVal letter As Char) As Char
        Select Case letter.ToString.ToUpper
            Case "1"
                Return "r"
                Exit Select
            Case "2"
                Return "q"
                Exit Select
            Case "3"
                Return "a"
                Exit Select
            Case "4"
                Return "H"
                Exit Select
            Case "5"
                Return "N"
                Exit Select
            Case "6"
                Return "p"
                Exit Select
            Case "7"
                Return "d"
                Exit Select
            Case "8"
                Return "S"
                Exit Select
            Case "9"
                Return "Y"
                Exit Select
            Case "0"
                Return "X"
                Exit Select
            Case "A"
                Return "w"
                Exit Select
            Case "B"
                Return "8"
                Exit Select
            Case "C"
                Return "6"
                Exit Select
            Case "D"
                Return "2"
                Exit Select
            Case "E"
                Return "1"
                Exit Select
            Case "F"
                Return "5"
                Exit Select
            Case Else
                Return " "
        End Select
 
    End Function
End Class

A classe é muito simples de usar:

dim myDlink as new dlink("aabbccddee")
myDlink.generate()

Não se esqueçam que aceder a redes sem a devida permissão é crime punível por lei!

Tive a (in)feliz ideia de encomendar um rato VX Nano na Pixmania para aproveitar uma promoção. Os 35 euros pedidos lá face aos 50 pedidos em média numa loja comum fizeram-me optar pela compra.
Existiam várias hipóteses para transporte, e como sabia que o rato estava em stock cá em Portugal, optei pela entrega económica por ser extremamente barata (2.99€) e partindo do principio que tendo em conta que o material já se encontrava cá em Portugal nos seus armazéns, que nunca demoraria tanto tempo.

Desengane-se quem pensar assim. Sempre que pagarem o envio económico com entrega em 10 dias úteis, estão nada mais nada menos que a mandar enviara encomenda directamente dos armazéns da Pixmania de França.

Como tal podem tirar o cavalinho da chuva… porque se diz que são 10 dias úteis, é porque serão mesmo 10 dias úteis (ou muito lá perto) ;-)

PS: Foi enviado no dia 20, e ainda não chegou.

Já que o Porto não se entende com nenhum canal para ceder os direitos de transmissão do jogo, aqui fica uma lista de streams que deverão transmitir o jogo.

Não se esqueçam de tirar o som à televisão :-)

http://www.ligtvdevu.net(USTREAM/FREEDOCAST)

http://www.ligtvdevi.net(USTREAM)

http://www.freesoccerlive.com(USTREAM)

http://www.kululu17tvs.blogspot.com(USTREAM)

http://futbolhdtv.tk(JUSTIN)

mais informação aqui.

Quem estiver interessado em adquirir um leitor de cartões do cidadão fica a saber que a dealextreme vende um modelo que é compatível com os nossos cartões.

Acabei de comprar e testar este leitor que custa pouco mais de 7 dólares (o equivalente a uns 6 euros) já com portes e faz exactamente a mesma função dos leitores oficiais que são vendidos por 10 ou 15 euros.

A juntar a isto ainda tem o bónus de ter uma pequena slot para cartões SIM pelo que também é possível efectuar operações de leitura de contactos, mensagens, etc.

Mais informações aqui.