A louca teoria do amor de Aristófanes

Há mais de 2400 anos, nos textos de Platão em o “Simpósio”, Aristófanes fala da sua teoria do amor como se de um mito se tratasse, onde este explica o porquê de cada um procurar a sua cara metade. Segundo este os seres humanos no início eram diferentes, explicando que eram de forma redonda, possuíam quatro pernas, quatro braços, duas cabeças e dois géneros simetricamente colocados, como se dois corpos tivessem colados pelas suas costas. Estes eram filhos do Sol, da Terra e da Lua, do Sol nasceu o homem-homem, da Terra nasceu a mulher-mulher e da Lua o ser Andrógino homem-mulher. Estes seres possuíam tudo em dobro do ser humano atual, o dobro da força, o dobro da rapidez e o dobro da inteligência, por este motivo e por terem características quase equiparadas às dos deuses decidiram os atacar, a sua tentativa falha e Zeus e os outros deuses decidem o que fazer para os castigar. A primeira solução seria os matar com raios tal como fizeram com os gigantes, mas assim acabariam por ficar sem ninguém para depois os adorar, no entanto esta situação não poderia ficar impune. Após muita reflexão Zeus surge com uma sugestão que sacrificaria os humanos sem os matar, para que se lembrassem no futuro dos seus horríveis atos, a decisão seria de os cortar pela metade e sempre que praticassem outro mal seriam novamente cortados à metade e assim foi. Depois de Zeus os cortar ao meio pediu a Apolo que lhes rodasse a cabeça, os membros e os genitais para o lado aonde estes tinham sido cortados, pediu-lhe também que removesse a sua forma redonda para que a ferida do corte culminasse no atual umbigo, assim cada vez que olhassem para este lembrar-se-iam do terrível ato cometido. Desde esses dias cada metade procura a sua outra metade, sendo que na sua união do homem e da mulher originaria um novo ser. Assim Aristófanes explica o desejo inato dos humanos na busca do outro, para que possam voltar à sua forma original, dos dois se faz um, curando assim a grande ferida da natureza humana o amor.

Bing Wallpaper and Lockscreen script

Here is a simple script to update your wallpaper and your lockscreen every two hours!
Enjoy!

#!/bin/bash

# Bing wallpapers
# Cesário Garcia Mil-Homens
# cesario@cesariogarcia.com
# https://www.cesariogarcia.com

# 1. Execute this script the first time and set "bingwallpaper.jpg" as wallpaper and lockscreen
# 2. Config $wallpaperPath (line 13 of this script) for the full path of where you want "bingwallpaper.jpg" to be (it should be on the user Pictures folder)
# 3. On the terminal execute the following script, this will check for new updates every two hours
# crontab -l | { cat; echo "0 */2 * * * /bin/bash /home/cesario/Programs/bingwallpapers.sh >/dev/null 2>&1"; } | crontab -

wallpaperPath="/home/cesario/Pictures"

wget -q --spider http://google.com

if [ $? -eq 0 ]; then
    echo "Online"
	imageName=$(curl -s "https://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US" | grep -o -m 1 "/az/hprichbg/rb/.*._1366x768.jpg")
    prefix="/az/hprichbg/rb/";
	imageName=${imageName#$prefix};
	suffix="_1366x768.jpg";
	imageName=${imageName%$suffix};
		if [ -e $wallpaperPath"/"$imageName"_1366x768.jpg" ]
		then
			echo "$imageName found."
		else
			echo "$imageName not found."
			wget "https://www.bing.com/az/hprichbg/rb/"$imageName"_1366x768.jpg" -P $wallpaperPath
			cp $wallpaperPath"/"$imageName"_1366x768.jpg" $wallpaperPath"/"bingwallpaper.jpg
		fi
else
    echo "Offline"
fi

Share WiFi via Ethernet on Ubuntu 17.10

There is a hidden method to share your WiFi over Ethernet in the latest Gnome.

  1. Type nm-connection-editor in your terminal.
  2. Add a shared network connection by pressing the Add button.
  3. Choose Ethernet from the list and press Create.
  4. Click IPv4 Settings in the left.
  5. Choose Shared to other computers by clicking the Method drop-down menu.
  6. Enter a new name like Shared WiFi LAN as the Connection name at the top

Dislocker script

This script aims to mount a Bitlocker encrypted drive in linux.
The binaries can be downloaded at https://pkgs.org/download/dislocker.

#!/bin/bash

# Dislocker binary can be downloaded from https://pkgs.org/download/dislocker
# All credits to Cesário Garcia Mil-Homens - www.cesariogarcia.com

if [ ! -d "/media/mount" ] && [ ! -d "/media/bitlocker" ]; then
        sudo mkdir /media/bitlocker
        sudo mkdir /media/mount
    else
        sudo fdisk -l
        read -n1 -r -p "Press any key to continue..." key
        echo "Insert volume and partition eg. sdaX"
        read volume
        echo "Enter password"
        read -s password
        sudo dislocker -V /dev/$volume -u$password -- /media/bitlocker
        sudo mount /media/bitlocker/dislocker-file /media/mount/ -o loop
        echo "Press u to umount device"
        read key
        if echo "$key" | grep -iq "^u" ;then
                sudo umount /media/mount
                sudo umount /media/bitlocker
        fi
fi

Validação de NIF em C++

Algoritmo de validação de um NIF em C++

#include <iostream>

int nif, n, nif_d[8], resto, dig_controlo, verificacao;
int resultado=0;

int main(){
  printf("Insira o seu NIF \n");
  scanf("%d",&amp;nif);

  //Separação de dígitos num array
  for(n=9;n>=1;n--){
    nif_d[n]=nif%10;
    nif/=10;
  }

  //Atribui o último dígito à variável verificacao
  verificacao = nif_d[9];

  //Verificar se o NIF possuí 9 dígitos e consequente verificação dos primeiros dígitos
  if((nif<=999999999||nif>99999999)&amp;&amp;((nif_d[1]==1||nif_d[1]==2||nif_d[1]==3)||(nif_d[1]==4&amp;&amp;nif_d[2]==5)||(nif_d[1]==5)||(nif_d[1]==6)||(nif_d[1]==7&amp;&amp;nif_d[2]==0)||(nif_d[1]==7&amp;&amp;nif_d[2]==4)||(nif_d[1]==7&amp;&amp;nif_d[2]==5)||(nif_d[1]==7&amp;&amp;nif_d[2]==1)||(nif_d[1]==7&amp;&amp;nif_d[2]==2)||(nif_d[1]==7&amp;&amp;nif_d[2]==7)||(nif_d[1]==7&amp;&amp;nif_d[2]==8)||(nif_d[1]==7&amp;&amp;nif_d[2]==9)||(nif_d[1]==8)||(nif_d[1]==9&amp;&amp;nif_d[2]==0)||(nif_d[1]==9&amp;&amp;nif_d[2]==1)||(nif_d[1]==9&amp;&amp;nif_d[2]==8)||(nif_d[1]==9&amp;&amp;nif_d[2]==9))){

    //Calcular o valor da soma da multiplicação dos dígitos
    for(n=9;n>=2;n--){
      resultado+=nif_d[10-n]*n;
    }

    //Calcular o valor do resto
    resto=resultado%11;

    //Cálculo do dígito de controlo
    if(resto<2){
      dig_controlo=0;
    }else{
      dig_controlo=11-resto;
    }

    //Verificação com o dígito de controlo
    if(dig_controlo==verificacao){
      printf("O NIF é válido\n");
    }else{
      printf("O NIF é inválido\n");
    }
  }else{
    printf("O NIF é inválido\n");
  }
}

Transmission Peer Blocklist for Windows – TiBL4Win – v1.0

Just copy the code below to script.bat to where you want, execute as administrator, this will update the transmission blocklist with ips from Peer Block (http://www.peerblock.com/).

Just follow the instructions below in the configuration to download wget and gzip.

::This script creates the same lists as peerblock http://www.peerblock.com/, it outputs a file that you
::can use on Transmission automatically.
::This script was created by Cesário Garcia Mil-Homens - http://www.cesariogarcia.com just for the fun.
::TiBL4Win - v1.0

::CONFIGURATION - WARNING THE DIRECTORIES SHOULD ALREADY EXIST.

::In order for this script to work wget.exe and gzip.exe should be in the tmp directory do not remove them
::Download wget from: https://eternallybored.org/misc/wget/
::Download gzip from: http://gnuwin32.sourceforge.net/packages/gzip.htm
::Setup Transmission Blocklist folder.
set destination_folder="%appdata%\transmission\blocklists"

::DO NOT EDIT BELOW THIS LINE unless you know what you are doing
pushd "%~dp0"
cd tmp
wget -O - "http://list.iblocklist.com/?list=bt_ads&amp;amp;amp;amp;fileformat=p2p&amp;amp;amp;amp;archiveformat=gz" &amp;amp;amp;gt; bt_ads.txt.gz
wget -O - "http://list.iblocklist.com/?list=bt_level1&amp;amp;amp;amp;fileformat=p2p&amp;amp;amp;amp;archiveformat=gz" &amp;amp;amp;gt; bt_level1.txt.gz
wget -O - "http://list.iblocklist.com/?list=bt_spyware&amp;amp;amp;amp;fileformat=p2p&amp;amp;amp;amp;archiveformat=gz" &amp;amp;amp;gt; bt_spyware.txt.gz
gzip -d *.gz
copy *.txt lists
copy lists %destination_folder%
del lists
del *.txt
del *.gz

Dilema moral com a resposta perfeita

Numa entrevista de emprego foi dado um dilema moral a um candidato, a sua resposta foi genial.

Está a conduzir o seu carro numa noite de tempestade selvagem. Passa por uma paragem e vê três pessoas à espera de um autocarro:

1. Uma senhora velha que parece estar prestes a morrer.
2. Um velho amigo que uma vez salvou a sua vida.
3. O homem/mulher perfeito(a) que você sempre sonhou.
Qual destes escolheria para oferecer uma boleia, sabendo que só poderia haver um passageiro no seu carro.

Pense antes de continuar a ler.
Este é um dilema moral/ético que foi realmente utilizado como entrevista de emprego.

Você poderia escolher a senhora velha, porque ela vai morrer caso não seja assistida num hospital, e, portanto, você deve salvá-la em primeiro lugar; ou você pode escolher o velho amigo, porque ele salvou sua vida e esta seria a oportunidade perfeita de o recompensar. No entanto, você pode nunca ser capaz de encontrar o seu/sua amante perfeito(a) novamente.

O candidato que foi contratado (de 200 candidatos) não tive qualquer dificuldade para apresentar a solução perfeita.
O que é que ele disse?

Ele simplesmente respondeu: “Eu dava as chaves do carro ao meu velho amigo, e deixava-o levar a senhora para o hospital eu ficaria para trás à espera do autocarro com a mulher dos meus sonhos.”.
Nunca se esqueça de “pensar fora da caixa”.

Text-To-Speech (TTS) no Android em pt_PT e em todas as línguas

Recentemente pretendi que o meu telemóvel lesse alguns livros, comecei por utilizar o motor de TTS da Google e para além de ser pouco natural, estava em Português do Brasil.

Após alguma pesquisa, encontrei uma solução grátis e muito boa, que ultrapassa largamente em qualidade algumas app’s pagas da playstore. O software foi criado por um grupo de Húngaros e baseia-se no motor de TTS da Nuance.

Após a instalação da app, esta ficará como motor TTS predefinido do nosso dispositivo Android.

Guia de instalação

  1. Efetuar o download da app aqui. Lembre-se que para instalar esta aplicação deverá permitir nas definições a instalação de aplicações de fontes desconhecidas (Definições -> Segurança -> Fontes desconhecidas).
  2. Executar o ficheiro vocalizer_e.tts_1.0.2.3k.apk e instalar.
  3. Efetuar o download dos ficheiros das vozes:
  4. Renomear a extensão do ficheiro pretendido para ZIP.
  5. Descompactar o ficheiro.
  6. Criar no dispositivo Android a directoria /storage/sdcard0/VocalizerEx (sdcard0 é a memória interna).
  7. Copiar para a directoria criada anteriormente a directoria obtida na descompactação do ficheiro ZIP.
  8. Indicar o novo motor TTS como predefinido em Definições -> Idioma e entrada -> Saída de texto para voz e Selecionar VocalizerEx TTS.