Graciano Torrão's Deblog

O meu diário de trabalho em Debian … e não só!

A nossa privacidade online! Estaremos a ser responsáveis?

Este é um tema que tem orientados as minhas reflexões ao longo desta semana.

Tudo começou com a sugestão do meu Browser preferido, o Mozilla Firefox, e as recentes chamadas de atenção para o tema da privacidade.

O próximo passo foi a instalação do Lightbeam for Firefox, que me deixou pasmado quanto à questão “First Party Data vs Third Party Data“.

A título de exemplo, reparem nas associações que ocorrem durante um sessão que consiste em:

  • Aceder ao google e fazer uma pesquisa;
  • Aceder ao email e clicar num daqueles convites para aceder ao facebook;
  • Fazer login no booking.com e procurar um hotel para passar um fim-de-semana com a família.

Eis a teis de associações que foram feitas às nossas custas:

lightbeamNão será pois de espantar que, daqui a nada, comecem a surgir sugestões de locais para férias no nosso email, no facebook, ou noutra rede qualquer!

Mas a questão central é esta.

Até que ponto está preocupado com a sua privacidade?

Deixo uma sugestão no formato “TED” para refletirmos.

Como recuperar todas as mensagens enviadas “acidentalmente” para a pasta lixo(trash) do GMAIL?

A história é muito simples.
Estava a brincar aos filtros no GMail e enviei 12736 mensagens para o lixo!
Numa primeira abordagem, pensei que tinha que selecionar página a página, o que ao 50 de cada vez, me iria durar a noite toda!
E foi aí que reparei …

gmailRecoverFromTrash
Quando selecionamos todas as mensagens e da página visível (ver 1), surge a opção para selecionar todas (ver 2).
Uff … desta vez safei-me :)

Dicas sobre manilupação de “strings” em C++ com base na classe “string”

Atenção!

Este artigo não pretende ser exaustivo quanto ao assunto em análise, ou seja, a manipulação de strings tendo como base os objetos da classe string.

Trata-se apenas de um conjunto de dicas muito simples para quem quer fazer um consulta rápida e seguir viagem …

Recomendo a consulta de http://www.cplusplus.com/reference/string/string/

Vou passar diretamente para os exemplos.

#1 – Declaração e leitura de strings

Neste exemplo vou declarar 3 strings e proceder à respetiva inicialização de várias formas distintas.

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1;
    string s2("Hello String 2!");
    string s3 = "Hello String 3!";
    string s4( 1, 'z');
    cin >> s1;
    cout << s1 << endl << s2 << endl << s3 << endl << s4 << endl;
    return 0;
}

Ler mais deste artigo

KEN ROBINSON – “A escola mata a criatividade”

2014 in review

The WordPress.com stats helper monkeys prepared a 2014 annual report for this blog.

Here’s an excerpt:

The Louvre Museum has 8.5 million visitors per year. This blog was viewed about 87,000 times in 2014. If it were an exhibit at the Louvre Museum, it would take about 4 days for that many people to see it.

Click here to see the complete report.

Morcela com Ananás

Não é bem “Morcela com Ananás”, pois um dos ingredientes não mencionado faz a diferença.

Refiro-me às folhinhas de coentros, que para além do verde, dão uma acabamento delicioso a este trio.

Fruto do acaso, acabei com uma morcela nas mãos e, saltando os comentários mal intencionados que vos possam ter atravessado a mente, não sabia muito bem o que lhe fazer.

Nestas alturas, o Google está para o informático, tal com o bacalhau está para a cozinha Portuguesa, tal é o seu estatuto de fiel amigo.

Depois de iniciada a pesquisa, o mais difícil é escolher, e eu acabei por selecionar esta receita do Chefe João Pronto: http://lifestyle.sapo.pt/sabores/receitas/morcela-com-ananas?r=sabores.sapo.pt

Desde já aviso que é delicioso!

Enquanto faço a digestão, aproveito para deixar a recomendação.

morcelaComAnanasECoentros

Exemplo C++ – Validar o tipo de dados recebido via cin

Quando estamos a escrever pequenos programas, que utilizam o objeto cin para fazer a leitura de valores, é frequente depararmos com situações deste tipo:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    cin >> nota;
    if(nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Se repararem, o programa funciona muito bem se o utilizador for “educadinho”, ou seja, se fornecer apenas números inteiros.

No caso de este ser distraído, ou malandreco, em vez de um número inteiro, os resultados podem ser imprevisíveis. Experimentem e vejam o que acontece para os seguintes exemplos de input:

  • t
  • Z
  • x

Pois é! Todos reprovados, mesmo sem se saber a nota. Nem uma satisfação!

Uma forma muito simples de contornar esta limitação é a seguinte:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    if(!(cin >> nota) || nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Atendendo a que nota é uma variável do tipo int, cin >> nota irá devolver o valor lógico falso caso não receba um número inteiro (int).

Assim sendo, basta adicionais mais uma condição ao nosso if!

Como converter um documento do Word no formato pdf (pdf printer)

Gravei este vídeo apenas para ensinar como podem converter os documentos do office para o formato pdf.

Também apresento a possibilidade de instalação de uma impressora pdf (ver).

Vejam o vídeo:

Construção de algoritmos em Pseudocódigo – enquanto … fazer … fimfazer

Trata-se de uma estrutura de repetição, controlada pela avaliação do valor lógico de uma condição.

Este tipo de estruturas são geralmente designadas por “ciclos“.

enquanto &lt;condição&gt;
fazer
    instrução 1
    instrução 2
    . . .
    instrução n
fimfazer

Assim temos:

  • <condição> é uma expressão lógica que, sendo verdadeira, determina que se voltem a executar as instruções contidas no ciclo. Caso esta expressão tenha o valor lógico falso, o controlo passa para a instução seguinte, sendo o ciclo abandonado.
  • instrução 1 … instrução n  corresponde ao bloco de instruções que vão ser executados em cada iteração (entenda-se iteração como uma “volta”, tendo presente a noção de cliclo).

Este tipo de estrutura tem infinitas aplicações mas, em termos genéricos, podemos afirmar que se utiliza sempre que:

  • pretendermos repetir 0 bloco de instruções um número indeterminado de vezes;
  • o número de iterações, ou seja, o número de vezes que se repete o ciclo, depende do valor lógico da candição;
  • fazendo variar os valores das variáveis que são utilizadas na condição permite controlar o respetivo valor lógico, consequentemente, continuar a iterar ou terminar.

Vamos pensar, a título de exemplo, no seguinte problema:

“Dada uma sequência de números, terminada por um número negativo, calcular a média dos seus elementos.”

Algoritmo em pseudocódigo

Nome MédiaN
Descrição
    Dada uma sequência de números, cujo fim é assinalado por um número
    negativo, este algoritmo calcula a respetiva média.
Variáveis
    contar: Inteiros
    num, soma, média: Real
Início
    contar ← 0
    soma ← 0
    ler (num)
    enquanto ( num >= 0 )
    fazer
        contar ← contar + 1
        soma ← soma + num
        ler (num)
    fimfazer
    média ← soma / contar
    escrever (média)
fim

Seguem-se uma implementação deste problema.

Em linguagem C++

#include <iostream>
using namespace std;
int main()
{
    int contar;
    double num, soma, media;
    contar = 0;
    soma = 0;
    cin >> num;
    while(num >=0)
    {
        contar = contar + 1;
        soma = soma + num;
        cin >> num;
    }
    media = soma/contar;
    cout << media;
    return 0;
}
Anterior Índice Seguinte

Construção de algoritmos em Pseudocódigo – selecionar caso … fimselecionar

Depois de alguns exercício a aplicar a estrutura se… então… senão… fimse, provavelmente acabamos por concluir que, em certos casos específicos, não é muito prática a sua utilização.

Vamos pensar, a título de exemplo, no seguinte problema:

“Dado um número inteiro, compreendido entre 1 e 4, representando os quatro trimestres do ano, vamos fazer corresponder a sua descrição por extenso.”

Algoritmo em pseudocódigo

Nome Trimestres
Descrição
    Dado um número inteiro, compreendido entre 1 e 4, representando
    os quatro trimestres do ano, este programa faz corresponder a
    sua descrição por extenso.
Variáveis
    trimestre: Inteiro
Início
    ler (trimestre)
    se trimestre = 1
    então   escrever("Primeiro trimestre")
    senão   se trimestre = 2
            então   escrever("Segundo trimestre")
            senão   se trimestre = 3
                    então   escrever("Terceiro trimestre")
                    senão   se trimestre = 4
                            então   escrever("Quarto trimestre")
                            senão   escrever("ERRO!")
                            fimse
                    fimse
            fimse
    fimse
fim

Neste ponto já somos convidados a pensar como ficaria esta estrutura encadeada para outros exemplos como:

  • os dias da semana;
  • os meses do ano;
  • os signos;

Ler mais deste artigo

Seguir

Get every new post delivered to your Inbox.

Junte-se a 214 outros seguidores

%d bloggers like this: