terça-feira, 8 de março de 2022

 Powershell Composite Design Pattern Logger

class ILogger {
Log([String] $Message) {}
}

class CompositeLogger: ILogger {

# Declarando um array de ILoggers
[ILogger[]] $_loggers

CompositeLogger([ILogger[]] $_loggers) {
$this._loggers = $_loggers
}

Log([String] $Message) {
foreach ($obj_logger in $this._loggers) {
$obj_logger.Log($Message)
}
}
}

class ConsoleLogger: ILogger {
Log([String] $Message) {
Write-Host "Escrevendo no console."
Write-Host "Esta é a mensagem: $Message."
}
}

class FileLogger: ILogger {
Log([String] $Message) {
Write-Host "Escrevendo em arquivo."
Write-Host "Esta é a mensagem: $Message."
}
}

$MeuArrayDeLogs = @([ConsoleLogger]::new(), [FileLogger]::new())
[CompositeLogger] $CompositeLogger = [CompositeLogger]::new($MeuArrayDeLogs)
$CompositeLogger.Log("Esta eh a mensagem.")


 Powershell Observer Pattern


# classe Abstrata Revista
class Revista {
Assinar([Assinante] $Assinante) {}
CancelarAssinatura([Assinante] $Assinante) {}
NotificarAssinantes() {}
AjustaMensalidade([int] $ValorDaAssinatura) {}
}

# classe concreta de Revista
class RevistaDeBairro: Revista {
[System.Collections.Generic.List[object]]$ListaDeAssinantes
[int] $ValorDaAssinatura = 100

RevistaDeBairro() {
$this.ListaDeAssinantes = @()
}

Assinar([Assinante] $Assinante) {
$this.ListaDeAssinantes.Add($Assinante)
}
CancelarAssinatura([Assinante] $Assinante) {
$this.ListaDeAssinantes.Remove($Assinante)
}

NotificarAssinantes() {
foreach ($Assinante in $this.ListaDeAssinantes) {
$Assinante.Atualizar($this.ValorDaAssinatura)
}
}

AjustaMensalidade([int] $ValorDaAssinatura) {
$this.ValorDaAssinatura = $ValorDaAssinatura
$this.NotificarAssinantes()
}
}

class Assinante {
Atualizar([int] $ValorDaAssinatura) {
Write-Host "Estou atualizando o valor da assinatura..."
Write-Host "Este eh meu novo valor: " + $ValorDaAssinatura
}
}

# concreto
class AssinanteAnual: Assinante {
[Revista] $RevistaDeBairro

AssinanteAnual([Revista] $RevistaDeBairro) {
$this.RevistaDeBairro = $RevistaDeBairro
$this.RevistaDeBairro.Assinar($this)
}
}


[Revista] $RevistaOCentro = [RevistaDeBairro]::new()

[Assinante] $ZeDasCoves = [AssinanteAnual]::new($RevistaOCentro)
[Assinante] $BarbeiroNeves = [AssinanteAnual]::new($RevistaOCentro)


$RevistaOCentro.AjustaMensalidade(300)

sexta-feira, 4 de março de 2022

 Here weŕe going to start a series of Powershell Desing Patterns. The first one is "Chain of Resposability" pattern.

class DocumentHandler {

    [DocumentHandler] $next


    DocumentHandler([DocumentHandler] $next) {

        $this.next = $next

    }


    [void] openDocument([String] $FileExtension) {

        if ($null -ne $FileExtension) {

            $this.next.openDocument($fileExtension);

        }

    }

}


class SlideshowHandler:  DocumentHandler {

    SlideshowHandler ([DocumentHandler] $handler) : base ($handler) {}

    

    [void] openDocument([String] $FileExtension) {

        if ("ppt" -eq $FileExtension) {

            Write-Host "Opening Slideshow document..."

        }

        else {

            ([DocumentHandler]$this).openDocument($FileExtension)

        }

    }


}


class SpreadsheetHandler:  DocumentHandler {

    SpreadsheetHandler ([DocumentHandler] $handler) : base ($handler) {}

    

    [void] openDocument([String] $FileExtension) {

        if ("xlsx" -eq $FileExtension) {

            Write-Host "Opening Spreadsheet document..."

        }

        else {

            ([DocumentHandler]$this).openDocument($FileExtension)

        }

    }


}


class TextDocumentHandler:  DocumentHandler {

    TextDocumentHandler ([DocumentHandler] $handler) : base ($handler) {}

    

    [void] openDocument([String] $FileExtension) {

        if ("txt" -eq $FileExtension) {

            Write-Host "Opening Text document..."

        }

        else {

            ([DocumentHandler]$this).openDocument($FileExtension)

        }

    }


}


class Client {

    static [void] Main() {

        [DocumentHandler] $Chain = [SlideshowHandler]::new([SpreadsheetHandler]::new([TextDocumentHandler]::new($null)))

        $Chain.openDocument("txt")

    }

}

[Client]::Main()

 Como listar detalhes de sua placa de vídeo no linux:


for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU Group %s ' "$n"; lspci -nns "${d##*/}"; done;

sábado, 26 de fevereiro de 2022

 Como habilitar gestures no touch do notebook laptop com Kubuntu:


instale o seguinte:


sudo apt install xdotool wmctrl libinput-tools

depois vá em settings e configure os gestures como quiser, isto funciona para kubuntu 21 em diante. abaixo nao sei dizer.

 Como instalar Java JDK (SDK) e JRE no Linux Ubuntu


Instalando uma versão especifica do OpenJDK

OpenJDK 8

Java 8 é a versão Long Term Support (Suporte de longo prazo) atual e ainda é amplamente suportada, apesar da manutenção pública terminar em Janeiro de 2019. Para instalar o OpenJDK 8, execute o seguinte comando:

  1. sudo apt install openjdk-8-jdk

Verifique se foi instalado com:

  1. java -version

Você verá a seguinte mensagem:

Output
openjdk version "1.8.0_191" OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12) OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Também é possível instalar somente o JRE, o que você pode fazer executando o seguinte comando sudo apt install openjdk-8-jre.

 Como instalar Powershell no Linux Ubuntu (from Microsoft):


  • PowerShell 7.2.1 (pacote universal) para qualquer versão de suporte do Ubuntu
    • https://github.com/PowerShell/PowerShell/releases/download/v7.2.1/powershell-lts_7.2.1-1.deb_amd64.deb
    • # Install the downloaded package sudo dpkg -i powershell-lts_7.2.1-1.deb_amd64.deb
    • # Resolve missing dependencies and finish the install (if necessary) sudo apt-get install -f

# Start PowerShell pwsh



Decorator Powershell Design Patterns

 Powershell Design Patterns Decorator ```powershell # Classe base 'Beverage' class Beverage {     [string]$description = "Unkno...