Mudança e freios

Nas últimas eleições presidenciais o Brasil ficou polarizado entre o errado e o certo, cuja definição sobre acuracidade dependia do lado defendido. Como chamam isso de maniqueísmo não poderia haver um lado meio certo e outro meio errado.

Logo, um proponente do lado “errado” pode passar por uma função de escrutínio que nos informa em qual tipo de subelemento este proponente pode ser incluído .

Assim objetivo e motivação deste proponente o definem, ou seja:

Supondo um proponente A, errado:

Ele acredita piamente que suas motivações são justas e moralmente corretas e suas capacidades cognitivas são normais. Vamos definir este como A1.

ou

Ele pouco se importa com o certo e o errado mas mantém uma ideologia e um objetivo maior por de traz das opiniões que manifesta, e o chamaremos de A2

ou

É incapaz de formar uma opinião sobre o certo e o errado a aceita o lado errado por razões que supostamente o farão altruísta e moralmente correto. Este é o A3.

Obviamente, A3 é o mais numeroso e portanto é manipulado por A1 e A2, já que não consegue formar uma opinião por si só precisa agradar A1 e A2 e receber deles a anuência ideológica.

Agora definindo os elementos.

A1) Artistas, cientistas, docentes, juristas, jornalistas e outras pessoas de esquerda com capacidade cognitiva e intelectual normal mas que sempre estiveram erradas e não será agora mudarão de opinião. Alguns passaram para a categoria 2 como feministas e jornalistas comunistas em geral.

A2) Ativistas comunistas ou globalistas.

A3) O restante de pessoas que inocentemente veem apoiando algo sem realmente saber o que estão apoiando mas que consideram “bonito”, um exemplo: atores da Globo.

Quando o lado B venceu o lado A entrou em um estado alerta e declarou guerra ‘a B. Fossem quais os meios. Como A e B convivem em um mesmo local, o sucesso de B é o insucesso de A. Mas como B tem intenções corretas, todo ato de A contra B é um freio. Se A vencer a batalha e frear B, o local onde vivem, vai deixar de existir juntamente como A e B.

Advertisements

C++11

Estou estudando C++11 e C++14 e escrevi alguns códigos para que compartilho neste post.

O primeiro é uma factory class. A vantagem de usar C++ moderno são os smartpointers que garantem que os objetos alocados pela fábrica de objetos sejam desalocados É muito comum ver esse pattern utilizado indiscriminadamente sem atenção ao problema de memory leaks e assim temos sistemas inteiros em risco.

#include 
#include 

using namespace std;

// Base pure virtual class
class Home
{
public:
    Home(){};
    virtual ~Home(){};
    virtual int Build() = 0;
};
// Objects created by factory
// Object 1
class House: public Home
{
public:
    House():Home(){};
    virtual ~House(){ cout << "Destructor House" << endl;};
    virtual int Build() override
    {
        cout << "Building a house..." << endl ;
        return 0;
    };
};
// Object 2
class Apartment: public Home
{
public:
    Apartment():Home(){};
    virtual ~Apartment(){ cout << "Apartment" << endl;};
    virtual int Build() override
    {
        cout << "Building a apartment..." << endl ;
       return 0;
    };
};
// Object 3
class Trailler: public Home
{
public:
    Trailler():Home(){};
    virtual ~Trailler(){ cout << "Destructor Trailler" << endl;};
    virtual int Build() override
    {
        cout << "Building a Trailler..." << endl ;
        return 0;
    };
};
class MyClassFactory
{
public:
    std::unique_ptr getObjc( int option ) const;
};
std::unique_ptr MyClassFactory::getObjc( int option ) const
{             
    std::unique_ptr uptr;
    switch(option)
    {
        case 1:
            uptr = make_unique();
            break;
        case 2:
            uptr = make_unique();       
            break;
        case 3:
            uptr = make_unique();
            break;
        default:
            return nullptr;
    }
    return uptr;
}
void smartpointers()
{
    MyClassFactory f;
    std::unique_ptr myHouse = f.getObjc( 1 );
}
int main()
{
    smartpointers();
}

Outro assunto que sempre me interessou são estruturas de dados talvez por que cursei Engenharia Elétrica não estudei este tópico durante a faculdade e a bem da verdade, tenho utilizado a STL do C++ quando necessito de estruturas de dados. No livro C++ Practice Of Programming os autores sugerem criar um iterator para sua lista. Esse abaixo é a minha versão. Isso permite que usuários da sua classe possam navegar dentro da estrutura sem se preocupar com os detalhes mais complexos.

// ds.cpp : Este arquivo contém a função 'main'. A execução do programa começa e termina ali.
//

#include "pch.h"
#include 
#include 

using namespace std;

namespace dvg
{
	template
	class Node
	{
	public:
		Node(T v)
		{
			this->v = v;
		}
		~Node() {};
		Node* next;
		Node* prev;
		T v;
	};

	template
	class iterator
	{
	public:
		Node* next;
		Node* prev;
		Node* crt;

		iterator()
		{
			this->next = nullptr;
			this->prev = nullptr;
			this->crt = nullptr;
		}

		iterator(const iterator& it)
		{
			this->next = it->next;
			this->pre = it->prev;
			this->crt = it->crt;
		}

		iterator operator =(const iterator& it)
		{
			this->next = it->next;
			this->pre = it->prev;
			this->crt = it->crt;
			return this;
		}
	};

	template
	class List
	{
	public:
		List()
		{
			head = nullptr;
			tail = nullptr;
			size = 0;
		}

		~List()
		{
			clear();
		}

		iterator begin() const
		{
			iterator tmp;
			tmp.crt = tail;
			return tmp;
		}

		iterator end() const
		{
			iterator tmp;
			tmp.crt = head->next;
			return tmp;
		}

		virtual void clear() final
		{
			it.crt = tail;
			for (it.crt = tail; it.crt->next != nullptr ;  )
			{
				Node* c = it.crt;
				it.crt = it.crt->next;
				delete c;
			}
			size = 0;
			cout << "all cleared " << endl;
		}

		virtual int push(T v) final
		{
			Node* n = new Node(v);
			if (head != nullptr)
			{
				n->next = nullptr;
				head->next = n;
				n->prev = head;
				head = n;
			}
			else
			{
				head = n;
				n->next = nullptr;
				n->prev = nullptr;
			}

			if (size == 0)
			{
				tail = n;
			}
			size++;

			return size;
		}

		virtual int pop() final
		{

			if (size != 0)
			{
				delete head;
				size--;
				Node* it = tail;
				for (int i = 0; i next);
				head = it;
				head->prev = it->prev;
				head->next = nullptr;
			}
			else
			{
				delete tail;
				tail = nullptr;
				head = nullptr;
			}

			return 0;

		}

		virtual int getSize() const final
		{
			return this->size;
		}

		template
		int find(T v, F& f)
		{
			Node* it = List::tail;
			for (int i = 0; i < List::size; i++, it = it->next)
			{
			if (f(v, it->v) == true)
				return i;
			}
			return -1;
		}

		template
		bool remove(T v, F& f)
		{
			Node* it = List::tail;
			for (int i = 0; i < List::size; i++, it = it->next)
			{
				if (f(v, it->v) == true)
				{
					if (it == List::tail)
					{
						List::tail = it->next;
						delete it;
						List::size--;
						return true;
					}
					else if (it == List::head)
					{
						delete List::head;
						List::size--;
						Node* it2 = List::tail;
						for (int k = 0; i < List::size; k++, it2 = it2->next)
						{
							List::head = it2;
						}
					}
					else
					{
						Node* it2 = List::tail;
						for (int j = 0; j next);
						it2->next = it->next;
						List::size--;
						delete it;
					}
				}
			}
			return false;
		}

		// Starting with the first element(index = 0), compare the current element with the next element of the array.
		// If the current element is greater than the next element of the array, swap them.
		// If the current element is less than the next element, move to the next element. Repeat Step 1
// this algorithm I implemented according to the description above.
// but I have not create the algorithm 😉	
		template
		int BubbleSort(F& isgreaterthan)
		{
			Node* it = List::tail;
			int size = List::size;
			for (int i = 0; i next)
			{
				Node* it2 = List::tail;
				for (int j = 0; j next)
				{
					if (isgreaterthan(it2->v, it2->next->v))
					{
						T tmp1 = it2->v;
						T tmp2 = it2->next->v;
						it2->v = tmp2;
						it2->next->v = tmp1;
					}
				}
			}

			return 0;
		}

	private:
		int size;
		Node* head;
		Node* tail;
		iterator it;

	};
}

void TestMyList()
{
	auto compint = [](const int& a, const int &b) -> bool { return a == b; };
	auto compstr = [](const std::string& a, const std::string& b) -> bool { return a == b; };
	auto isgreaterthan = [](const int& a, const int& b) -> bool { return a > b; };
	auto isgreaterthans = [](const std::string& a, const std::string& b) -> bool
	{
		return  (a.length() >= b.length());
	};

	dvg::List l;

	l.push("itemxxxxxxxx");
	l.push("itemyy");
	l.push("itemz");

	cout << "Elements: " << endl;
	l.BubbleSort(isgreaterthans);

	for( dvg::iterator it = l.begin(); it.crt != l.end().crt ; it.crt = it.crt->next)
	{
		std::cout <v << std::endl;
	}

}

// g++ -o l f.cpp -std=c++11
int main()
{
	TestMyList();

}

gmusicapi

Um grande problema com o Google play music é que você não pode extrair a lista dos seus mp3s comprados e armazenados lá. A api https://pypi.org/project/gmusicapi/ fornece uma interface programática para isso.

Primeiro instale o PyCharm https://www.jetbrains.com/pycharm/ ( obviamente você já deve ter o python em sua máquina certo ;-)) e crie um novo projeto em um ambiente virtual python.

Depois adicione a biblioteca gmusicapi como abaixo:

Clique em adicionar “+” e busque pela API gmusicapi. Depois você precisa executar esta função para autenticar seu computador.

# these will import the ids to our machine so google
# knows you are ok

from gmusicapi import Mobileclient
from gmusicapi import Musicmanager

def machineautn():

    mm = Mobileclient()
    mm.perform_oauth()

    mm2 = Musicmanager()
    mm2.perform_oauth()

Depois você pode baixar a lista usando o meu código abaixo. Fique a vontade para modificá-lo.

from gmusicapi import Musicmanager


class MyCdList:

    mm = None
    library = None

    def authenticatewithgoogle(self,option):

        self.mm = Musicmanager()
        self.mm.login()  # currently named oauth_login for the Mobileclient

        if option == 0:
            self.library = self.mm.get_purchased_songs()
        elif option == 1:
            self.library = self.mm.get_uploaded_songs()

    def getallartist(self):
        donotaddthis = "The 100 Most Essential Pieces of Classical Music"
        artists = []
        artistsset = set()
        [artistsset.add(track['artist']) for track in self.library if track['album'] != donotaddthis ]
        artists = list(artistsset)
        artists.sort()
        return artists

    def getalbumsforartist( self, artist):

        albums = []
        albumsset = set()
        [ albumsset.add(track['album']) for track in self.library if track['artist'] == artist ]
        albums = list(albumsset )
        albums.sort()
        return albums


def bought():
    cdlist = MyCdList()
    cdlist.authenticatewithgoogle(0)
    artists = cdlist.getallartist()
    cnt = 0
    with open('mp3bought.txt', 'wt', encoding='utf-8') as f:

        for a in artists:
            print("Getting albums of {}...".format(a))
            albums = cdlist.getalbumsforartist(a)
            f.write("Artist: {} \n".format(a))
            for alb in albums:
                f.write("\t {} \n".format( alb))
                cnt = cnt + 1
        f.write("Total Number of albums {}\n".format(cnt))


def all():
    cdlist = MyCdList()
    cdlist.authenticatewithgoogle(1)
    artists = None
    artists = cdlist.getallartist()
    cnt = 0

    with open('mp3all.txt', 'wt', encoding='utf-8') as f:

        for a in artists:
            print("Getting albums of {}...".format(a))
            albums = cdlist.getalbumsforartist(a)
            f.write("Artist: {} \n".format(a))
            for alb in albums:
                f.write("\t {} \n".format(alb))
                cnt = cnt + 1
        f.write("Total Number of albums {}\n".format(cnt))


def main():
    all()


if __name__ == "__main__":
    main()

DC e Liga da Justiça


A figura acima vem das HQs dos anos 70 ( que eu nunca li), mas você pode ver vários heróis tradicionais como Superman, Batman, Mulher Maravilha e os meus favoritos Flash e Nuclear.

Quando eu tinha uns 6 anos meu desenho favorito era a a Liga da Justiça. Era um desenho ingênuo mas para mim naquela idade não havia nada mais legal, embora eu não suportasse os super gêmeos. Eu me recordo que o desenho ficou um pouco mais sério com o tempo inclusive com vilões melhores como a liga do mal.

Na segunda metade dos anos 80 quando comecei a acompanhar mais de perto os lançamentos em quadrinhos não me lembro de grande impacto causado em mim por alguma estória da Liga ou mesmo não me lembro de ter lido alguma.

Até que conheci a A Liga da Justiça do J.M DeMatteis e Keith Giffen. Não sei até qual número foi publicada aqui, mas fiquei contente em adquirir os 3 primeiros omnibus eletrônicos através do site Comixlogy . A série não traz nenhuma fórmula mágica: é uma liga de heróis que salva o mundo, um arquétipo do herói e seu séquito de ajudantes como vemos as lendas do Rei Arthur, só que com uma dose grande de humor. Honestamente sempre achei que a DC tem um apelo menos forçado que a Marvel e os Vingadores ( que a bem da verdade só se tornou decente quando Jim Starlin colocou suas mãos mas até ai é Jim Starlin pessoal, o mestre ), são ótimas estórias ( J.M De Matteis e Keith Giffen ) e desenhos sensacionais de Kevin Maguire.

Nos anos 90, pra mim, o evento revolucionário dentro do gênero foram os desenhos animados da DC, Batman, depois Superman e que por fim culminaram na série Justice League e Justice League unlimited. Estas séries foram o grande ressuscitador do tema já batido e destruído por vários autores usando a fórmula mágica já criada por Alan Moore, De Matteis e outros. Os textos das animações são perfeitos, os roteiros trazem aventuras divertidas sem resvalar no estilo caricato, mas principalmente trazem um sentimento de cartoon da era de Prata sem a ingenuidade desses.

Após anos sem ler quadrinhos, criando filhos pequenos e estudando linguagens de programação, voltei vorazmente ao meio em 2012 e algum tempo atrás acabei por fim descobrindo a obra de gênio que nos deixou “Infinity Justice” de Darwyn Cooke , uma obra prima do gênero que alcança níveis de sofisticação narrativas comparáveis ao de Alan Moore sem precisar desconstruir o gênero como foi feito em Watchmen.

Python

Em 2004 eu comecei a estudar python porém jamais usei profissionalmente então acabei esquecendo a sintaxe. Faz alguns meses que tenho tido a oportunidade de usar essa linguagem em meu trabalho e finalmente consigo compartilhar o entusiasmo e fanatismo que existe entre os novos programadores ( e velhos também ) pela linguagem.

Hoje em dia python é muito utilizada em meios acadêmicos variados já que fornece uma ferramenta programática de fácil e barata utilização que pode se facilmente em quaisquer áreas de conhecimento até mesmo por pessoas que não são programadores. Na maioria das distribuições Linux, python já vem nativamente e é internamente utilizada por vários processos e programas do sistema operacional. Aliás, mesmo no IBM AIX, muita coisa depende de python. Eu descobri isso ao instalar o vim para substituir o uso do mais limitado mas não menos poderoso vi.

Python não é uma linguagem compilada e sim interpretada, assim se você pretende que seu código não seja aberto não use python. Embora isso não limite o uso da linguagem já que python é usada em ferramentas de pesquisa, frameworks de machine learning, visão computacional entre outros, sua performance nunca alcançaria a mesma da linguagem C. Porém dentre todas as linguagens em moda é uma que possui uma sintaxe fácil e relativamente C-like. A toda poderosa Java está com seus dias contatos, assim a chance é grande de que python se torne a mais utilizada linguagem para programação séria ( Javascript alguém ai ? Estou brincando não conheço muito de JS mas uso muita coisa feita com isso ).

Não é possível dialogar com a esquerda

Muito embora eu tenha tentado as respostas que eu recebo ou são ofensas, mensagens sem sentido ou nenhuma resposta e me pergunto se é possível que em todas as redações dos jornais Brasileiros só existam militantes fanáticos ? Uma coisa é a uma suposição outra mais clara é um fato. Um fato é uma verdade que não podemos negar. Se parece um pleonasmo ou obviedade, tente entender porque os petistas e psolistas e esquerdistas ainda negam a culpa do ex-presidente Lula e do séquito petista que o rodeou.  Esquerdistas ignoram quaisquer fatos que não lhes sejam de interesse, ou algo que possam distorcer.

A ultima é confundir globalismo com globalização.

Boa noite, uma nova casa…

Boa noite senhores e senhoras leitores.

Devido ‘a recente guinada radical ao esquerdismo do Google, resolvi retirar minhas postagens dos blogger que eu criei por lá onde tenho publicado desde 2003. Estou ciente que isso não causa danos ao Google, mas acredito o Google chegou ‘a um ponto extremo e intolerável no combate ao conservadorismo que beira a insanidade mas que é perfeitamente entendido como uma reação patética arquitetada por partidos como o PSOL, que em seus delírios de grandeza política, acreditam ser isentos de serem criticados e achincalhados.

Como esse patrulhamento significa censura e fim da liberdade de expressão, realmente fico bastante decepcionado com o google e todos os serviços que encorporou ao longo dos anos todos.  Ou seja, parafraseando o ex-presidente, um comunista convicto, Fernando Henrique Cardoso: “Esqueçam tudo que escrevi”.

Minha intenção aqui não é escrever sobre política, mas quando necessário, pretendo me contrapor aos jornalistas de esquerda que vomitam suas elucubrações delirantes sobre conservadorismo e política. Mas vou manter a minha linha de discussão dentro dos meus assuntos favoritos: C++, Unix, música, quadrinhos e literatura ( principalmente Gene Wolfe e Jack Vance ), séries de TV, ciência e religiosidade.