Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.

Mostrando postagens com marcador estudo. Mostrar todas as postagens
Mostrando postagens com marcador estudo. Mostrar todas as postagens

quarta-feira, 14 de março de 2012

Learning English - Roadmap

Esse post é mais pessoal, só para eu ter online a minha sequência de estudos de inglês. Talvez alguém queira tentar algo semelhante. Não deixem de checar meu post anterior. A medida que eu for realizando estes passos tentarei acrescentar mais coisas.


Fazer sequencialmente:

  • Fazer os dictations do englishclub.com: http://www.englishclub.com/listening/dictation.htm.

  • Fazer os dictations do dictationsonline.com: http://www.dictationsonline.com/.

  • Fazer as Activities, seção Everyday American English do Voice of America: http://www.voanews.com/learningenglish/theclassroom/activities/.


    Fazer quando possível, esporadicamente

  • Ouvir os podcasts do culips.com (são muito instrutivos para mim): http://esl.culips.com/

  • Ouvir os podcasts de notícias do englishclub.com e responder as questões: http://edition.englishclub.com/category/listening-news/.

  • Ouvir/ler alguns Articles do Voice of America e responder às questões: http://www.voanews.com/learningenglish/theclassroom/articles/.



    Agradeço ao voyeg3r pelos excelentes links sugeridos!

  • sexta-feira, 9 de março de 2012

    estudando ingles

    [editado em 14/03/2012, acrescentando alguns links sugeridos pelo voyeg3r]

    Estou correndo atras de um sonho: ter inglês fluentíssimo. Para trazer um pouco mais de objetividade a este sonho, quero conseguir assistir (e entender) a filmes em inglês sem legendas. Depois disso o que vier é lucro.

    Atualmente, em inglês eu consigo:

  • ler/entender tranquilamente qualquer texto técnico da área de computação;
  • ler/entender a maioria das matérias que saem por estes sites de notícias;
  • ouvir/entender com alguma dificuldade os diálogos dos filmes (só quando eles falam lentamente).

    No entanto na hora de me expressar, tanto através da escrita quanto oralmente, o desempenho é sofrível! Para formular frases simples é um parto...

    Pois bem. Para realizar este meu desejo entrei num curso de inglês, mas estou aqui para falar de alguns recursos muito úteis que encontrei pela net. Detalhe: o conteúdo encontrado nestes links estão em inglês, portanto é necessário conseguir pelo menos já ter alguma desenvoltura com o idioma. Se o seu conhecimento de inglês for zero, nadica de nada, é melhor procurar um curso em sua cidade para quebrar o gelo (ou assistir algumas lições do Teacher Phil em http://www.teacherphil.com/1Beginner/1Beginner.html).

    Vamos aos links:

  • http://www.englishclub.com - MUITO BOM! Muitos recursos para você treinar as quatro habilidades básicas de uma linguagem: listening, speaking, reading and writing (ouvir, falar, ler e escrever). Material muito bem organizado, muitas atividades úteis. Fiz alguns exercícios de ditado (na seção de listening) e gostei muito!

  • http://www.dictationsonline.com/ - O nome já diz tudo, né? Ditados online, muito bom para prática de listening, e consequentemente writing.

  • http://esl.culips.com/ - site com podcasts em inglês falando de diversos assuntos relacionados ao aprendizado do inglês como segunda língua. Gostei muito de ouvir os que falam sobre algumas expressões comuns em inglês. Muito bom de ouvir, pena que para ter acesso ao Learning Material precisa ser membro e para isso seja necessário pagar. (OK! OK! O pessoal que prepara isso também tem contas a pagar...) Mas só o áudio já vale a pena. Dá pra aprender muita coisa, e é muito gostosinho de ouvir.

  • http://www.voanews.com/learningenglish/theclassroom/home/ - site do Voice of America com conteúdo voltado para quem está aprendendo inglês. Estou gostando muito da seção Activities. E a seção Articles também é muito boa, pois você pode ler/ouvir uma notícia da sua área de interesse (ex.: Science & Technology) e depois responder a questões sobre a notícia. MUITO BOM!

  • http://www.bbc.co.uk/worldservice/learningenglish/ - site da BBC com conteúdo mais "palatável" para quem não tem o inglês como língua mãe. Ótima oportunidade para treinar o listening.

  • http://www.youtube.com/user/VOALearningEnglish - canal do Voice of America no youtube, com notícias legendadas (legendas em inglês, claro!). Segundo a própria descrição do canal, as notícias são lidas com um terço da velocidade regular. Achei interessante para praticar listening também.

  • http://a4esl.org/ - atividades diversas. Gostei das palavras cruzadas.

    Por enquanto foram estes os sites que eu usei, mas na parte de links do englishclub.com [http://www.englishclub.com/webguide/] tem muito mais! Para quem tem o mesmo objetivo que eu, vale a visita!

  • terça-feira, 8 de setembro de 2009

    gerando números aleatórios - java

    Em um post anterior (gerando números aleatórios) eu fiz uma função para gerar números aleatórios na linguagem C. Agora aí vai uma versão java fortemente inspirada na maneira que faço no post mencionado.

    O que eu queria fazer era um bobo jogo de dados. No lançamento de um dado ele me retornaria um valor aleatório entre 1 e 6, inclusive. Aí vai a implementação da classe Dado.


    import java.util.Random;

    public class Dado {
            private int valorDaFace;
            private static int seed = 0;

            public int getValorDaFace() {
                    return valorDaFace;
            }

            public void lançar() {
                    Random r = new Random(System.currentTimeMillis() + seed++);

                    valorDaFace = 1 + r.nextInt(6);
            } // fim de lançar()

    } // fim da classe Dado


    O atributo seed é para evitar que quando dois dados sejam lançados um seguido do outro, o resultado seja o mesmo. Em outras palavras, o método System.currentTimeMillis() se chamado muito próximo um do outro, pode retornar o mesmo valor, e isso faria Random gerar o mesmo número. O seed sempre diferente contorna esse problema.

    JUDE no Linux

    Dica que pesquei no google e não me lembro o lugar. Basta dar uma googlada...

    Não tem segredo algum! O jude é feito em java, e portanta basta ter uma máquina virtual java!

    1. ir na página do jude, registrar-se e baixar o jude-community.

    2. descompactar o arquivo .zip em algum lugar (eu coloquei em /usr/local).

    3. para executar o jude basta usar o comando:

    prompt$ java -jar /usr/local/jude_community/jude-community.jar

    4. para facilitar eu criei um scriptzinho besta chamado 'jude' e salvei em /usr/local/bin:

    #!/bin/bash
    JUDE_JAR=/usr/local/jude_community/jude-community.jar
    /usr/bin/java -jar $JUDE_JAR


    5. agora é só criar um atalho com um ícone bonitinho e colocar no seu ambiente gráfico favorito! ;-)

    Não tem jeito... tive que me render a programação orientada a objetos... :/

    quinta-feira, 6 de novembro de 2008

    graficos no MATLAB

    FONTES DE PESQUISA:
    1. Apostila que o professor disponibilizou na xerox.
    2. http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab53/matlab53.pdf

    GRÁFICOS BIDIMENSIONAIS



    O MATLAB disponibiliza diversos comandos para plotar gráficos bidimensionais. Nesta apresentação iremos abordar as funções mais básicas apresentando-as gradativamente, como um tutorial. Para consultas rápidas o mais adequado é usar o próprio help do MATLAB.


    Introdução



    Antes de começar vamos rapidamente lembrar de alguns conceitos básicos que serão úteis na construção dos gráficos. A maior parte destes conceitos já foram passados pelos outros colegas.

  • Para preencher uma variável com valores de um limite inferior até um limite superior (formando um matriz linha) usamos a seguinte sintaxe:

    VARIAVEL = [ LIM_INFERIOR : LIM_SUPERIOR ]


    exemplo:


    » X = [ 1 : 5 ]

    X =

    1 2 3 4 5


    Também podemos definir o incremento que queremos, usando a seguinte sintaxe:

    VARIAVEL = [ LIM_INFERIOR : INCREMENTO : LIM_SUPERIOR ]

    exemplo:

    » X = [ 0 : 0.2 : 1 ]

    X =

    0 0.2000 0.4000 0.6000 0.8000 1.0000


  • Por padrão o MATLAB faz sempre a aritmética de matrizes. E muitas vezes nós não queremos este comportamento.

    Por exemplo, imagine uma matriz linha M = [ 1 2 3 4 5 ] e que nós queremos obter uma matriz Q de maneira que cada elemento de Q seja o seu correspondente em M elevado ao quadrado. Ou seja, se temos a matriz

    M = [ 1 2 3 4 5 ]


    Então queremos que obter a matriz


    Q = [ 1 4 9 16 25 ]


    Sabemos que o operador para potenciação é o ^ (circunflexo), só que este operador realiza a potenciação de matrizes, e não é isto que nós queremos.

    Para montar uma matriz que desejamos devemos usar o operador .^ (ponto-circunflexo), desta maneira:


    » Q = M.^2

    Q =

    1 4 9 16 25


    Os operadores precedidos pelo ponto servem também para realizar operações aritméticas entre os elementos que ocupam as mesmas posições em cada matriz (elemento por elemento). Porém este tipo de operação sai do escopo desta apresentação.



    Fazendo Gráficos



  • usando a função plot() - primeiro passo

    Vamos montar um vetor linha para usar como exemplo.

    Y = [ 5 3 7 -1 ];

    Executar plot(Y) produzirá um gráfico cujo eixo das ordenadas terá os elementos de Y, e o eixo das abscissas terá os índices dos elementos de Y. Portanto o gráfico será vários segmentos de reta ligando os pontos (1,5), (2,3), (3,7) e (4,-1).

    Execute agora mesmo no MATLAB e confira!

    » Y = [ 5 3 7 -1];
    » plot(Y)


  • usando a função plot() - um passo a frente

    O tipo de gráfico que vimos é muito deficiente e normalmente não queremos montar algo deste tipo. Vejamos agora algo mais interessante para nós.

    Como primeiro exemplo, vejamos o gráfico da função seno no intervalo [-10;10].

    Primeiramente devemos definir os valores que queremos nas abscissas e em seguida os valores das ordenadas.


    » x = [-10:0.02:10];
    » y = sin(x);


    Repare que na verdade montamos primeiramente uma matriz x e a seguir montamos uma matriz y que contem os senos dos valores correspondentes da matriz x. Para plotar o gráfico basta fazermos plot(x,y).

    Como segundo exemplo agora nós queremos visualizar o gráfico da função (linguagem matemática tradicional)

    f(x) = x3 + 10x2 - x - 8


    E queremos ver o comportamento desta função para valores de x no intervalo [-20;10].

    Como já foi dito, primeiro definimos o intervalo e depois definimos a função. Desta maneira:


    » x = [ -20:10 ];
    » f = x.^3 + 10*x.^2 - x - 8;


    Agora basta executar plot(x,f).

    CURIOSIDADE!
    Como já foi dito por outros colegas, um vetor linha pode representar um polinômio. Portanto a função

    f(x) = x3 + 10x2 - x - 8

    Pode ser descrita através do seguinte vetor no MATLAB:

    » funcao = [ 1 10 -1 -8]

    Desta forma nós podemos plotar um gráfico com o auxílio da função polyval(), desta maneira:

    » funcao = [ 1 10 -1 -8]; % vetor linha que representa um polinomio
    » x = [ -10:10 ]; % intervalo que queremos analisar
    » y = polyval(funcao,x); % y está recebe valores de x aplicados no polinomio
    » plot(x,y) % função sendo plotada


    A descrição formal da sintaxe que utilizamos no plot() é a seguinte:

    plot(valores_das_abscissas, valores_das_ordenadas)


    IMPORTANTE: a função plot() pode fazer muito mais do que é descrito aqui! Isto é apenas uma das muitas maneiras de se usar esta função. Lembre-se: isso é só uma pequena introdução.


  • usando a função fplot() - mais praticidade

    A função plot que vimos na verdade desenha vetores. Sempre que queremos visualizar a curva de uma função usando plot(), temos antes que montar vetores com os valores que queremos plotar. Isso acaba sendo uma situação inconveniente, pois se quisermos analisar o comportamento de uma função em diferentes intervalos, temos que ficar montando vários vetores antes de plotar.

    Para tornar a análise gráfica de funções mais prática, usamos a função fplot(). A sintaxe da função fplot() que iremos utilizar aqui é a seguinte:

    fplot(função, limites)


    Onde função é uma cadeia de caracteres que descreve uma função usando x como variável (NOTA: função também pode ser um arquivo *.m com alguma função escrita na linguagem do MATLAB, porém esta utilização está fora do escopo desta breve introdução). O argumento limites é um vetor de dois elementos onde o primeiro é o menor valor e o segundo é o maior valor que x assumirá nesta função, ou seja, é a definição do intervalo.

    A seguir um pequeno exemplo:

    » fplot('5*x.^3 - 4*x^2 +15*x -5', [ -20 20 ])


    OBS.: que a função está escrita entre 'aspas simples'. Isso é importante, pois é assim que o MATLAB representa strings (cadeias de caracteres).



    GRÁFICOS TRIDIMENSIONAIS



    Apesar das funções com duas variáveis muitas vezes parecerem assustadoras, o seus gráficos geralmente são muito agradáveis de se ver. Vamos então dar uma pequena introdução na construção de gráficos 3D.

  • usando a função plot3() - primeiros gráficos no R3

    A função plot3() é bem parecida com a plot() explicada anteriormente. Só que nós vamos usá-la aqui com a seguinte sintaxe:

    plot3(valores_do_x, valores_do_y, valores_do_z)


    O exemplo a seguir é bem simples e nos dá uma espiral com 3 voltas

    » x = [0 : pi/16 : 6*pi];
    » plot3(sin(x), cos(x), x)


  • usando a função mesh()

    Para desenharmos uma perspectiva tridimensional usamos a função mesh(). Mas antes disso usamos a função meshgrid(), que tem a seguinte sintaxe:

    » [X,Y] = meshgrid(x,y)


    O meshgrid() transforma o domínio especificado pelos vetores x e y em matrizes X e Y, que podem ser usadas para avaliação de funções de duas variáveis e superfícies 3D.

    Uma vez que as matrizes X e Y estejam formadas basta usar a função de duas variáveis com estas matrizes.

    Por exemplo, imagine que queremos analisar a função:

    f(x) = x e-x2 - y2

    para valores de x e y no intervalo [-2;2]. Para isso devemos executar os seguintes comandos:


    » x = [ -2 : 0.2 : 2 ]; % definindo o intervalo
    » y = x;
    » [X,Y] = meshgrid(x,y); % definindo as matrizes usadas no cálculo
    » Z = X .* exp(-X.^2 -Y.^2); % observe que X e Y são maiúsculos


    Desta maneira as matrizes X, Y e Z já estão prontas para nos dar o gráfico em 3 dimensões. Para isso basta usarmos a função mesh(), da seguinte maneira:


    » mesh(X,Y,Z)

  • sexta-feira, 4 de abril de 2008

    Projeto de Algoritmos

    Achei esse conteúdo muito interessante para o estudo da disciplina Estrutura de Dados II: http://www.ime.usp.br/~pf/algoritmos/index.html.

    O autor, Paulo Feofiloff, possui 2 características que eu aprecio muito: escreve todo código em C, e se preocupa com a elegância do código (indentação, comentários, etc.).

    sexta-feira, 28 de março de 2008

    Monitorando tempo de execução de uma função

    Esse macete eu achei especialmente útil na hora de estudar o desempenho dos diversos algoritmos de ordenação. Aprendi no "Advanced Programming in the UNIX Environment" (Stevens e Rago), no Seção 8.16.

    Vamos direto à prática, para detalhes é necessário consultar o livro e/ou as man pages.

    Primeiro temos que criar a seguinte função para imprimir o tempo:


    #include <unistd.h>

    static void imprimetempo(clock_t tempo) {
        static long clktck = 0;

        if(clktck == 0)
            if((clktck = sysconf(_SC_CLK_TCK)) < 0)
                perror("sysconf");

        printf("%7.2f s", tempo / (double) clktck);
    }


    E para que esta função seja útil temos que chamá-la de maneira análoga ao exemplo abaixo:


    #include <sys/times.h>

    int main() {
        clock_t ini, fim;
        .
        .
        .
        ini = times(NULL);
        funcao_que_quero_ver_quanto_tempo_leva(argumentos);
        fim = times(NULL);

        printf("Tempo que levou: ");
        imprimetempo(fim - ini);
        .
        .
        .
        return 0;
    }

    segunda-feira, 3 de março de 2008

    gerando números aleatórios

    Essa eu aprendi no Programming in C - UNIX System Calls and Subroutines using C. Trata-se de uma gambiarra para gerar números aleatórios.

    Abaixo uma função que gera n números aleatórios de zero a nove e guarda no vetor V passado a função como parâmetro:


    #include <stdlib.h>
    #include <time.h>

    #define MAIOR 10


    void geranumeros(int V[], int n) {
        srand((unsigned int) time(NULL));
        while(n > 0)
            V[--n] = rand() % MAIOR;
    }


    Achei isso especialmente útil na hora de testar os algoritmos de ordenação ensinados na disciplina de Estrutura de Dados II.

    sexta-feira, 22 de fevereiro de 2008

    demonstração gráfica de algoritmos de ordenação

    Muito interessante para visualizar graficamente como funcionam os algoritmos de ordenação mais elementares.

    http://web.engr.oregonstate.edu/~minoura/cs162/javaProgs/sort/

    sexta-feira, 7 de setembro de 2007

    The MyCPU Project

    Se um dia eu me tornar professor de Arquitetura de Computadores, acho que isso será de grande utilidade: http://www.mycpu.eu/

    tags