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], resultado, resto, dig_control;

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

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

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

    //Calcular o valor da soma da multiplicação dos dígitos
    resultado=nif_d[1]*9+nif_d[2]*8+nif_d[3]*7+nif_d[4]*6+nif_d[5]*5+nif_d[6]*4+nif_d[7]*3+nif_d[8]*2+nif_d[9];

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

    //Caso o resto seja 0 ou 1 o NIF é válido
    if(resto==0||resto==1){
      printf("O NIF é válido\n");
    }else{
      dig_control=11-resto;

      //Caso o resto seja diferente de 0 ou 1 verificar através do dígito de controlo
      if(dig_control==nif_d[9]){
        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.