terça-feira, 2 de setembro de 2014

Achar todas as chaves estrangeiras em um banco oracle

Boa tarde,

Post técnico alert!

Aqui um post rápido de como achar as chaves estrangeiras em um banco de dados  a partir de uma coluna.

select table_name
  from all_tab_columns
 where column_name = 'NOME_DA_COLUNA';



Abraços e até a próxima.

quarta-feira, 12 de fevereiro de 2014

Non sequitur

Bom dia pessoal,


          Faz tempo que eu queria escrever sobre esse tema mas não tinha a metáfora correta para demonstrar a falha lógica de pensamento.

           Primeiro vamos aprender sobre uma falácia bastante utilizada nos dias de hoje que é a falácia do "Non Sequitur". Do latim "Não se segue" é uma falácia que as vezes muito difícil de se reconhecer por geralmente ser usado em argumentações que parecem fazer sentido, mas não fazem. Non sequitur é quando a conclusão não faz sentido com a premissa. Vou classificar em dois tipos de falácia "Non Sequitur" a fraca e forte. É necessária essa classificação pois existem argumentos simples de desconstruir como "Eu gosto de chocolate portanto o céu é azul", nesse caso o meu gosto por chocolate não vai interferir em absolutamente nada na cor do céu. Outros casos são de "non sequitur" forte onde a conclusão parece fazer sentido com a premissa, como por exemplo "A polícia usou a força para conter a manifestação pois existiam manifestantes destruindo propriedade privada/pública" , nesse exemplo muitas pessoas podem cair no seguinte pensamento " Se os manifestantes estavam badernando, é mais do que justo uma atitude dessas da polícia" mas esse pensamento leva a nós apoiarmos atitudes que onde o resultado foram: pessoas cegas, cabeças de jornalistas estouradas, deixam multidões feridas, sem falar em pessoas "desaparecidas".

Eu queria trazer a baila dois argumentos que utilizam essa falácia eles são:

1 - "É socialista mas não divide o wi-fi".

2-  "Se está com pena do garoto amarrado no poste, adote um ladrão".

           Vamos analisar a primeira frase. Essa frase parece fazer sentido certo? Socialismo, divisão de tudo, wi-fi tem que ser dividido então. Parece certo. Mas existem coisas erradas. A primeira é se alguém é socialista e vive num regime socialista, então o wi-fi é compartilhado, fim. A segunda coisa errada é que se a pessoa se diz socialista e vive em um regime capitalista, ela não é socialista , pois não existe forma de SER socialista em uma organização capitalista, o máximo que você consegue de socialismo em uma organização capitalista é ser um grande doador( wi-fi, de comida, de casa etc etc) mas isso não te faz socialista, te faz um doador de suas coisas. Esses são alguns dos problemas da primeira frase, existem mais, mas esses dois já provam a falibilidade da mesma.

           Pensemos na segunda frase agora. Eu quero que alguém me prove a relação entre " Um grupo auto-moderado de "vingadores" que humilharam e espancaram um rapaz que SUPOSTAMENTE era um criminoso" e "adotar(?) um ladrão". Olha tem tanto erro nisso, que daria para escrever um livro sobre como isso está errado, mas vou deixar só algumas linhas de pensamento para não cansar. O que eu vou demonstrar é simples, me acompanhe. Vamos dizer que você apoie essa segunda frase e ache uma super boa ideia fazer isso. O que impediria esse grupo de "vingadores" de te confundir com um ladrão? E te amarrar e te humilhar perante toda a nação/mundo? Como você se sentiria se isso acontecesse com você? É a lição número 1 da vida que muitas pessoas ignoram mas, por mais perverso que alguém seja, ele não merece um tratamento arbitrário e animal de um grupo auto-regulado. Isso fere basicamente TODOS os princípios de civilização que temos. Se ter um grupo de milícia "vingador" é algo OK, o que isso difere dos criminosos? Agora a parte de adotar um ladrão eu não vou me dar o trabalho de explicar porque essa ideia não faz sentido com a primeira frase. 

Mas enfim só queria escrever um pouco sobre o tema.

Abraços!

terça-feira, 21 de janeiro de 2014

sexta-feira, 10 de janeiro de 2014

SQL Oracle : obter só a parte das horas , minutos e segundos de um campo DATE

Bom dia,

Esse é um post técnico.


Para obter somente as horas minutos e segundos em uma query no Oracle SQL é fácil mas não intuitivo.

Segue a query exemplo:

SELECT to_char( <<nome_da_coluna>>, 'HH24:MI:SS' ) from tabela_exemplo;

Fim.

segunda-feira, 6 de janeiro de 2014

Achar o tipo de dado que a coluna grava no Oracle.

Boa noite pessoal,

Este é um post técnico.

Hoje vou falar sobre como achar o tipo de uma coluna em um banco de dados Oracle.

A query é simples:

select column_name, data_type from all_tab_columns where table_name = 'Nome_Da_Sua_Tabela’

O resultado são "NOME - TIPO" de cada uma das colunas da tabela.

PS: lembre-se que o nome da tabela é case sensitive no Oracle.

PS²: não sou usuário avançado de Oracle se alguém tem alguma sugestão de alguma query mais fácil. Eu acho válido me corrigir. Obrigado!

domingo, 5 de janeiro de 2014

Fim da mídia

Boa noite pessoal,

Pensei várias vezes sobre algo muito bom que a internet trouxe para nós. É o fim do domínio da mídia sobre  a informação. E imagino que no futuro a sociedade estará completamente livre dessas amarras.

Pense sobre isso.

sexta-feira, 1 de novembro de 2013

Desenhando e estudando sobre gráficos em Java

Bom dia galera,

este é um post técnico.

O post de hoje é sobre um estudo sobre um tipo estrutura chamada fractal. Nesse link tem uma explicação legal sobre fractais : link .

Hoje vou postar um código que cria um fractal que fez parte da minha infância. Quer dizer , anos de estudo de programação + matemática para criar o glorioso símbolo da... Triforce! Ohhhhhh (8)



Percebam o padrão que acontece nessa estrutura, é um triângulo grande com um triângulo invertido dentro. Se aplicarmos esse padrão várias vezes, podemos criar infinitas triforces o que gera o nosso fractal.

Eu encontrei uma api MUITO interessante para desenho , usada nos cursos de ciências da computação de Princeton chamado StdDraw. Ele oferece uma api muito interessante para se desenhar no Java, sem precisar aprender sobre Swing , GUI etc. O único conhecimento necessário é um conhecimento básico de matemática e basicamente qualquer coisa pode ser feita. Eu resolvi fazer esse padrão de fractal com a linguagem de programação Java. O link para a API é: link da API de desenho . Para usar essa api é só copiar a classe para uma classe dentro do seu projeto e começar a utilizar.

O código a seguir gera a lendária Triforce de maneira recursiva. Teoricamente podemos gerar infinitas triforces dentro de triforces:

   public static class TrianglePoint
    {
        double x1;
        double y1;
        double x2;
        double y2;
        String type;

        public TrianglePoint(double x1, double y1, double x2, double y2, String type)
        {
            this.x1 = x1;
            this.x2 = x2;
            this.y1 = y1;
            this.y2 = y2;
            this.type = type;        }

        public double getX1()
        {            return x1;        }

        public void setX1(double x1)
        {            this.x1 = x1;        }

        public double getY1()
        {            return y1;        }

        public void setY1(double y1)
        {            this.y1 = y1;        }

        public double getX2()
        {            return x2;        }

        public void setX2(double x2)
        {            this.x2 = x2;        }

        public double getY2()
        {            return y2;        }

        public void setY2(double y2)
        {            this.y2 = y2;        }

        public String getType()
        {            return type;        }

        public void setType(String type)
        {
            this.type = type;
        }
     
        public double midPointX(){
             return ((x1+x2)/2);        }

        public double midPointY(){
            return ((y1+y2)/2);        }
     
    }

    static void recursionMethod(Map<String,TrianglePoint> trianglePointsList, int times){
     
        List<String> listTypes = new ArrayList<String>();
       
        listTypes.add("transversal");
        listTypes.add("horizontal");
        listTypes.add("vertical");
     
        if(times == 0){
            return;
        }
     
        for(String type : listTypes){
         
            StdDraw.line(trianglePointsList.get(type).getX1(), trianglePointsList.get(type).getY1(), trianglePointsList.get(type).getX2(),
                    trianglePointsList.get(type).getY2());
            try{
            Thread.sleep(500);
            } catch (Exception e){              }
            }
     
            TrianglePoint horizontal = trianglePointsList.get("horizontal");
            TrianglePoint transversal = trianglePointsList.get("transversal");
            TrianglePoint vertical = trianglePointsList.get("vertical");
     
            TrianglePoint transversalOld = new TrianglePoint(trianglePointsList.get("transversal").getX1(),
                                                          trianglePointsList.get("transversal").getY1(),
                                                          trianglePointsList.get("transversal").getX2(),
                                                          trianglePointsList.get("transversal").getY2(),
                                                          trianglePointsList.get("transversal").getType());
         
            TrianglePoint horizontalOld = new TrianglePoint(trianglePointsList.get("horizontal").getX1(),
                    trianglePointsList.get("horizontal").getY1(),
                    trianglePointsList.get("horizontal").getX2(),
                    trianglePointsList.get("horizontal").getY2(),
                    trianglePointsList.get("horizontal").getType());
         
            TrianglePoint verticalOld = new TrianglePoint(trianglePointsList.get("vertical").getX1(),
                    trianglePointsList.get("vertical").getY1(),
                    trianglePointsList.get("vertical").getX2(),
                    trianglePointsList.get("vertical").getY2(),
                    trianglePointsList.get("vertical").getType());
         

            horizontal.setX1(transversalOld.midPointX());
            horizontal.setY1(transversalOld.midPointY());
            horizontal.setX2(verticalOld.midPointX());
            horizontal.setY2(verticalOld.midPointY());

            vertical.setX1(horizontalOld.midPointX());
            vertical.setY1(horizontalOld.midPointY());
            vertical.setX2(transversalOld.midPointX());
            vertical.setY2(transversalOld.midPointY());
         
            transversal.setX1(verticalOld.midPointX());
            transversal.setY1(verticalOld.midPointY());
            transversal.setX2(horizontalOld.midPointX());
            transversal.setY2(horizontalOld.midPointY());
     
        recursionMethod(trianglePointsList, times-1);
     
    }

    public static void main(String[] args)
    {

        Map<String,TrianglePoint> mapTriangle  = new HashMap<String,TrianglePoint>();
        mapTriangle.put("transversal", new TrianglePoint(0.0, 0.0, 0.5, 1.0,"transversal"));
        mapTriangle.put("horizontal", new TrianglePoint(0.0, 0.0, 1.0, 0.0,"horizontal"));
        mapTriangle.put("vertical", new TrianglePoint(1.0, 0.0, 0.5, 1.0,"vertical"));
     
        recursionMethod(mapTriangle, 2);

        System.out.println("triforce complete ");
    }

Esse código gera a seguinte saída:



Agora modificando a chamada principal do método recursivo para chamar 7 vezes:


        recursionMethod(mapTriangle, 8);

A seguinte imagem é gerada:


Bom, espero que tenham se divertido um pouco com esse estudo de fractais e API de Princeton. O desafio agora é fazer formas mais complexas de fractais como por exemplo esse link : link .

Abraços até a próxima.