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.

Arquivo do blog

quarta-feira, 19 de novembro de 2008

Frets on Fire

Quando conheci o jogo Guitar Hero fiquei extremamente tentado a comprar um PS2 só para jogá-lo. Depois pensei em encontrar um emulador de PS2, mas os comentários de pessoas que já experimentaram dizem que precisa de um computador possante (e isso eu não tenho). O negócio foi miando... Até que um dia, sem querer acabei conhecendo um jogo chamado Frets on Fire! Minha vida mudou!

O jogo original fica em http://fretsonfire.sourceforge.net.

Como o jogo é open source (feito em python) também existem muitas versões modificadas, com muitos recursos (multiplayer, baixo, bateria...). Um bom lugar para se informar a respeito dessas coisas é em http://fretsonfire.wikidot.com/. Quem tem um computador com uma boa configuração (video off-board, mais de 1GB de RAM, etc.) eu recomendo o FoFix.

E um bom lugar para baixar musicas é em http://fretsonfire.ath.cx/.

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)

  • terça-feira, 28 de outubro de 2008

    aprendendo java: métodos úteis para manipulação de arrays

    Iniciando a série "lembretes úteis para quem está aprendendo Java". Esta dica foi obtida no livro "Core Java 2 - Volume I: Fundamentos".

    Para copiar o conteúdo de um array para outro, pode-se usar o método arraycopy da classe System. a sintaxe é a seguinte:

    System.arraycopy(from, fromIndex, to, toIndex, count);

    As variáveis from e to devem ser Object. E como sabemos, todo array em java É UM Object (ou seja, herda os campos e métodos da classe Object).

    Traduzindo para o bom português: copie os "count" elementos de "from", começando em "fromIndex" e vá armazenando em "to" a partir de "toIndex".

    Exemplo de utilização do método arraycopy:


    public class teste {
      public static void main(String args[]) {
        int[] smallPrimes = {2, 3, 5, 7, 11, 13};
        int[] luckyNumbers = {1001, 1002, 1003, 1004, 1005, 1006, 1007};

        System.arraycopy(smallPrimes, 2, luckyNumbers, 3, 4);

        for(int i = 0; i < luckyNumbers.length; i++)
          System.out.println(i +": "+ luckyNumbers[i]);

      } // final de main
    } // final da classe teste



    A saída deste programa será:

    0: 1001
    1: 1002
    2: 1003
    3: 5
    4: 7
    5: 11
    6: 13


    A simples ordenação de um array pode ser feita através do método sort da classe java.util.Arrays. Para ordenar basta fazer o seguinte (luckyNumbers é um array de inteiros):

    Arrays.sort(luckyNumbers);

    Reza a lenda que este método usa o QuickSort.


    Outros métodos úteis para manipulação de arrays (todos da classe java.util.Arrays):

  • static int binarySearch(type[] a, type v)
    usa o algoritmo de busca binária para buscar o valor v dentro do array a. Se econtrado, seu índice é retornado. Do contrário é retornado um valor negativo r; o valor -r - 1 é o ponto em que v deverá ser inserido para manter o array a ordenado.
    Parâmetros:
    a: um array ORDENADO do tipo int, long, short, char, byte, float ou double.
    v: um valor do mesmo tipo que os elementos de a.

  • static void fill(type[] a, type v)
    atribui o valor v a todos os elementos do array a.

  • quarta-feira, 8 de outubro de 2008

    maneira Deitel de checar data

    Essa é mais uma dica da série "como é que eu não tinha pensado nisso antes?". Trata-se de uma maneira super-simples de checar a validade de uma data. Vi isso no livro "Java: Como Programar", sexta edição, do Deitel. Aí vai...

    - ano: pode ser qualquer inteiro não negativo.
    - mês: inteiro dentro do intervalo [1,12].
    - dia: aí vai o algoritmo em C, levando em consideração que o mês e ano são válidos.


    int checarDia(int dia, int mes, int ano) {
       /* aqui está a simplicidade do algoritmo:
       * cada elemento deste array é o maior dia do mês cujo número
       * é o índice do elemento, exceto o elemento 0
       */
       int diaPorMes[] = { 0, 31, 28, 31, 30, 31, 30
       31, 31, 30, 31, 30, 31, 30 };

       /* veja que coisa mágica! */
       if(dia > 0 && dia <= diaPorMes[mes])
         return dia;

       /* cuidando do danadinho do ano bissexto */
       if(mes == 2 && dia == 29 && (ano % 400 == 0 || (ano % 4 == 0 && ano % 100 != 0)))
         return dia;

       /* se não for uma data válida, retornamos o dia primeiro */
         return 1;
    }


    Me lembro de um dia fazer um exercício de programação que pedia para validar se a data que o usuário entrou era válida, fiz o código usando switch-case e alguns ifs...

    Ver essa solução usando um simples array chega a dar raiva! Raiva por não ter pensado nisso de primeira.

    usando o qsort() do stdlib.h

    O protótipo é o seguinte:


    #include <stdlib.h>

    void qsort(void *base, size_t nmemb, size_t size, int (*compare)(cont void *, const void*));


    Criei uma função compara() para comparar dois inteiros:

    int compara(int const *a, int const *b) {
        return *a - *b;
    }


    e usei o seguinte comando para ordenar um array de inteiros lista[] com 10 elementos.

    qsort(lista, 10, sizeof(int), &compara);


    Pronto! Agora lista já está ordenada.

    sábado, 20 de setembro de 2008

    tabela unicode

    Imagine uma tabela com todos os caracteres unicode. Não deve ser uma coisa pequena, concorda?

    Pois um cidadão fez um esquema interessante para se consultar esta tabela, com uma navegação bem similar ao Google Earth.

    Para quem se interessar aí vai o link: http://ian-albert.com/misc/zoom-unicode.php.

    quarta-feira, 20 de agosto de 2008

    Linux Terminal Server Project

    Encontrei um projeto de uma coisa que eu penso em fazer a muito tempo. Criar um mega servidor e conectar vários terminais modestos a ele. Parece que já tem uma maneira bem tranquila de fazer isso: http://www.ltsp.org/.

    E no caso de Debian: http://wiki.debian.org/LTSP/Howto

    Tenho que dar uma olhada nisso!

    quarta-feira, 13 de agosto de 2008

    criando um arquivo .img

    Acho que vou precisar fazer isso na maquina de origem:


    prompt$ dd if=/dev/sda1 | gzip -1 -c > sda1.img.gz


    Depois vou precisar levar o arquivo para a máquina destino e fazer isso (MUITA ATENÇÃO ANTES DE APERTAR O ENTER PARA NÃO DETONAR A PARTIÇÃO ERRADA!!!):

    prompt$ zcat sda1.img.gz >/dev/sda1

    domingo, 6 de julho de 2008

    montando arquivo .img

    Essa eu aprendi em http://wiki.debian.org/DebianEeePC/TipsAndTricks


    prompt$ losetup -f arquivo.img
    prompt$ fdisk -ul /dev/loop0 # ver o inicio da particao desejada
    prompt$ mount arquivo.img /mnt/img -o ro,loop,offset=32256 # eg: 32256 = 63 * 512

    quinta-feira, 3 de julho de 2008

    eeepc log

    Hoje, não sei por qual motivo, o /dev/dsp do meu debian do eeepc sumiu! Dei uma googlada e vi que bastava instalar o pacote oss-compat. Funcionou!


    Outra coisa. Vi um macete em http://wiki.eeeuser.com/tuep:debianbase?s=debian para instalar o ambiente X mais "light" (ocupando menos espaço). Os pacotes são:

    xserver-xorg-video-vesa
    xserver-xorg-video-vga
    xserver-xorg-video-vmware
    xserver-xorg-input-mouse
    xserver-xorg-input-kbd
    xserver-xorg-input-synaptics
    xserver-xorg-core
    xfonts-base
    xfonts-scalable

    quarta-feira, 2 de julho de 2008

    macetinhos de fluxbox

    Decidi adotar o fluxbox no lugar do windowmaker. O motivo principal é que achei o fluxbox mais facinho de configurar atalhos no teclado. Depois acabei descobrindo outras facilidades.

    Muitos macetinhos úteis podem ser encontrados aqui: http://fluxbox-wiki.org/index.php/Fluxbox-wiki

    usando gdb dentro do vim

    Uma tentativa de tornar o vim um ide: http://www.vim.org/scripts/script.php?script_id=168

    Observação: na linha 600 do arquivo ide.vim temos

    return ret;

    e devemos substituir por
    return ret
    (sem o ponto-vírgula).

    Emulador de computadores Alpha

    Faz tempo que eu estava procurando isso! Em http://www.emulatorsinternational.com/en/personalalpha.htm podemos encontrar um emulador de computadores Alpha! Que maravilha! Já posso instalar o OpenVMS no meu notebook!

    Essa tal de virtualização veio pra revolucionar mesmo!

    colando com CTRL+V no cygwin

    Essa veio de http://iwiwdsmi.blogspot.com/search/label/cygwin.

    Adicione esta linha no ~/.bashrc

    stty lnext ^q stop undef start undef


    Adicione esta linha no ~/.inputrc
    "\C-v": paste-from-clipboard


    Mas lembre-se: isso só funciona no bash. Nos outros aplicativos que testei (vim, lynx, nc, cat) o CTRL+V não cola. Mas mesmo assim já é uma mão na roda! ;-)

    apt-get através de um proxy

    Vi essa em um fórum em http://www.linuxquestions.org/ e depois pude conferir na manpage do "apt.conf".

    Para usar o apt-get através de uma conexão proxy basta inserir uma linha contendo:


    Acquire::http::Proxy "http://proxy.server.here:8080/";


    No arquivo /etc/apt/apt.conf. Se o arquivo não existir, basta criá-lo.

    indentando no vim

    Essa eu vi em http://plutao.wordpress.com/2007/02/08/identando-o-codigo-no-vim/ e na verdade é uma citação.

    Você já se deparou com um código todo mal identado? Como resolver esse problema no vim?

    Selecione o bloco de texto e aperte = (igual) e o vim identa para você


    Essa mudou minha vida! ;-)

    segunda-feira, 9 de junho de 2008

    sábado, 7 de junho de 2008

    codigo para html

    Dica retirada de http://www.ime.usp.br/~pf/algoritmos/apend/util.html.

    Converter um código fonte em linguagem C, por exemplo, para html com syntax highlighting.


    prompt$ enscript --highlight=c --color --language=html --output=arquivo.html arquivo.c

    sexta-feira, 6 de junho de 2008

    cygwin no pendrive

    Se você está lendo isso, provavelmente já sabe o que é o cygwin. Caso não saiba dê uma olhada em http://aurelio.net/cygwin/.

    ATENÇÃO! Esta dica não funciona mais! Quando eu conseguir solucionar este problema atualizarei isso aqui.

    A motivação de usar o cygwin é uma (ou várias juntas) das seguintes:

  • você tem medo de instalar o Linux na sua máquina;
  • você tem medo de particionar seu HD;
  • você não quer/não conhece o VMware;
  • você é obrigado a usar o Windows (trabalho/escola).

    Ainda existe uma vertente deste último caso que é a seguinte:
  • você é obrigado a usar o Windows e a política de TI da sua instituição não permite a instalação de softwares, se você desrespeitar pode ser penalizado ou o acesso cortado (ou alguma punição do tipo).

    Caso você se enquadre especialmente neste último caso, este texto é para você. Seguindo o que está descrito aqui você irá instalar o cygwin em um pendrive e poderá usá-lo em qualquer computador que plugá-lo. Isso mesmo! poderá executar o cygwin em computadores que não possuem ele instalado!

    Vale ressaltar que alguns pendrives tem tempo de acesso um pouco lento o que poderá ser um pouco irritante para quem é impaciente...

    Chega de blablabla, vamos pôr a mão na massa!

    Você vai precisar de:
  • Um computador onde você possa instalar o cygwin inicialmente (chamemos este computador de maquina1);
  • Um pendrive de 512MB atende tranquilamente a usuários medianos;
  • Outros computadores para plugar o pendrive e usar o cygwin ;-)


    Passo 1:
    Instale o cygwin do jeito que você bem entender na sua maquina1. Não cobrirei aqui como é feita a instalação. Se não sabe fazer isso consulte as referências.


    Passo 2:
    Após instalar copie inteiramente o diretório que você definiu como raiz (Root Directory) e cole na raiz do seu pendrive. Este diretório deve se chamar cygwin. Por exemplo: se você plugou o pendrive na maquina1 e a unidade do pendrive se chama 'E:', você deve colar o conteúdo do diretório raiz em 'E:\cygwin'.

    Só para deixar bem claro, após a cópia dos arquivos devem existir os diretórios 'E:\cygwin\bin', 'E:\cygwin\lib', 'E:\cygwin\usr', 'E:\cygwin\etc', e etc. Ah! E o mais importante, o arquivo 'E:\cygwin\cygwin.bat'.

    Lembrando: o drive E: é só um exemplo!


    Passo 3:

    Abra o arquivo \cygwin\cygwin.bat do seu pendrive para edição, apague o que estiver lá, copie e cole o que está a seguir (abaixo do <++> e acima do <-->):


    <++> cygwin.bat
    @echo off

    echo Configurando o ambiente...
    set drive=%CD:~,2%
    set desmonta=%drive%\cygwin\usr\local\etc\desmontar.bat

    set user=user
    set home=%drive%\cygwin\home\user
    set path=%drive%\cygwin\bin;%path%

    chdir %drive%\cygwin\bin

    echo umount -s --remove-all-mounts > %desmonta%
    mount -m >> %desmonta%

    umount -u --remove-all-mounts
    mount -u -b -f %drive%/cygwin/bin /usr/bin
    mount -u -b -f %drive%/cygwin/lib /usr/lib
    mount -u -b -f %drive%/cygwin/ /
    mount -c -u /cygdrive

    chdir %drive%\cygwin\home\user

    echo Entrando no bash...
    bash --login -i

    echo Saindo do cygwin e restaurando o ambiente...
    %desmonta%
    <-->


    Conheço pouquíssimo de programação .bat, e esse pouquíssimo que sei só aprendi devido a este desejo de executar o cygwin a partir do pendrive. Portanto não vou ficar explicando o que este cygwin.bat faz, até porque está bem intuitivo.

    Só gostaria de deixar claro que toda essa parafernália de %desmonta% serve tão somente para não bagunçar uma instalação local do cygwin. Explicando melhor: o %desmonta% serve para que quando você executar o cygwin a partir do pendrive em uma maquina que já tenha o cygwin instalado, este cygwin da máquina não fique bagunçado (diretórios montados em pontos errados).


    Passo 4:
    É necessário garantir que todos tenham acesso ao %desmonta%, ou seja '\cygwin\usr\local\etc\desmontar.bat' no seu pendrive. Isso pode ser feito com o cygwin do pendrive já em execução:


    prompt$ chmod 777 /usr/local/etc/desmontar.bat


    Isto serve para que não se tenha problemas de acesso ao desmontar.bat quando você executar o cygwin do pendrive em um computador como o usuario fulano, e depois que acabar o usuário siclano quiser usar. Se não fizer o isso o siclano terá acesso negado ao desmontar.bat quando quiser salvar seus "mount points" durante o "cygwin.bat".


    Passo 5:
    Desplugar o pendrive com segurança. Plugar no(s) computador(es) do seu trabalho/colégio/faculdade, abrir a "pasta" cygwin no seu pendrive e dar um duplo clique no "cygwin.bat". O resto é só alegria!


    Referências
    http://aurelio.net/cygwin/ - portal brasileiro de cygwin

    http://forums.qj.net/archive/index.php/t-138434.html - tem um cygwin.bat de um tal de sakya, usei-o como ponto de partida

    manpage do mount no cygwin - explica como usar o mount no cygwin

    help set no command.com - explica como fazer a substituição de variáveis nos arquivos .bat
  • sexta-feira, 30 de maio de 2008

    icSL blog

    http://lopesivan.blogspot.com/

    parece ser um blog tipo o meu, cheio de dicas avulsas.

    quarta-feira, 28 de maio de 2008

    johannes talks

    http://www.jfranken.de/homepages/johannes/vortraege.en.html

    Conteúdo muito interessante a respeito dos seguintes assuntos: lsof, make, Mirroring, netcat, squid, OpenSSH e outros.

    terça-feira, 27 de maio de 2008

    leitura sobre netcat

    http://www.jfranken.de/homepages/johannes/vortraege/netcat.en.html
    exemplos de usos muito bacanas!

    http://www.g-loaded.eu/2006/11/06/netcat-a-couple-of-useful-examples/
    No tópico Security tem um macete para fazer tunelamento com ssh e netcat.

    http://weblog.patrice.ch/articles/2006/11/20/http-debugging
    HTTP Debugging usando netcat.

    http://www.gomor.org/bin/view/GomorOrg/SslNetcat
    netcat com habilidades para fazer transações SSL.

    http://www.ebruni.it/docs/clone_linux/x153.htm
    como clonar uma maquina linux para outra maquina.

    http://www.openfree.org/pet/index.php/Use_netcat_to_test_network_speed
    testando a velocidade da conexão usando netcat. Dá até pra fazer um scriptzinho para calcular isso.

    http://www.learnsecurityonline.com/index.php?option=com_content&task=view&id=252&Itemid=1
    No final tem "Using Netcat to Create a Two-way Relay" e alguns links interessantes

    dict.org

    Dicionario on line. Possui características bem interessantes para praticar TCP/IP.

    A ler

    domingo, 25 de maio de 2008

    netcat sem -e

    Se o netcat for compilado sem -DGAPING_SECURITY_HOLE ele não terá a opção -e, que é usada para executar um comando assim que a conexão é estabelecida. Desta forma NÃO podemos fazer, por exemplo


    $ nc -l -p 6060 -e /bin/sh


    Pesquisando pela web eu vi em http://www.datastronghold.com/articles/3.html uma maneira criativa de fazer isso, porém o método proposto é meio incômodo.

    Continuando a minha pesquisa eu acabei aprendendo uma maneira mais bacana de fazer isso. Pasmem: eu aprendi isso no orkut!

    Vamos lá.

    Basta criar um named pipe, também chamado de fifo, e usá-lo para que a saída do /bin/sh volte para o netcat. Vamos ao comando:


    $ mkfifo test_fifo # criando o named pipe
    $ nc -l -p 6060 < test_fifo | /bin/sh > test_fifo


    Explicando:
    - o netcat fica escutando na porta 6060;
    - a entrada do netcat vem do test_fifo;
    - a saída do netcat (vinda da rede) vai para a entrada de /bin/sh através do pipe;
    - a saída de /bin/sh vai para test_fifo;
    - como test_fifo é um named pipe o que entra nele vindo de /bin/sh sai indo para o netcat.


    Moral da história: se você souber garimpar as informações, o orkut pode ter lá alguma valia!

    quinta-feira, 22 de maio de 2008

    Lembretes para usar o screen

    dicas retiradas de http://aurelio.net/doc/coluna/coluna-07.html e
    http://aurelio.net/doc/coluna/coluna-08.html

    criar nova janela: ^a c

    alternar entre janelas: ^a ^a

    ir para janela de número 2: ^a 2

    alterar nome da janela: ^a A

    dividir a janela (split): ^a S

    alternar entre janelas divididas: ^a <TAB>

    matar a janela ativa e os programas dela: ^a k

    capturar tela (salva como hardcopy.N): ^a h

    manter a sessão atual do screen rodando e sair: ^a d

    listar sessões do screen ativas (na linha de comando): screen -ls

    recuperar o controle da sessão: screen -r

    OBS.: no cygwin este controle de sessões possui algumas "peculiaridades".

    entrar no modo de cópia: ^a [

    OBS.: no modo de cópia para iniciar a seleção, teclar <espaço> a
    primeira vez. Para concluir a seleção e sair do modo de cópia, teclar
    <espaço> a segunda vez. A movimentação é igual ao vi, inclusive é
    possível fazer busca usando '/' e '?'.

    colar o que foi copiado: ^a ]

    definir alarme visual: ^a:vbell on

    monitorar eventos em uma janela: ^a:monitor on

    quinta-feira, 8 de maio de 2008

    transformando o eeepc num meeeleupc

    Se, assim como eu, você tem um eeepc e gosta de modo texto e quando está no modo gráfico quer no máximo um Window Maker, experimente o meeeleupc! ;-)

    Baixe o arquivo em http://www.geocities.com/meleuzord/meeeleupc.tar.gz.

    Descompacte o arquivo em algum lugar, por exemplo no seu homedir:


    tar xvzf meeeleupc.tar.gz

    entre no diretório criado e execute o instalar como root:

    cd meeeleupc
    sudo ./instalar


    Resumidamente o script vai fazer duas coisas:
  • configurar o EeePC para que inicie no modo texto (Multiuser Mode) com dois consoles (tty4 e 5);
  • instalar e configurar o wmaker bem bacaninha para ser utilizado no EeePC.

    Além disso, desinstala aqueles programas coreanos/chines/tailandes/xingling/etc. e instala alguns programas que eu acho importante ter (vim, nmap, netcat, lynx, irssi, etc.)

    Fiz uma comparacao usando 'df -h' para ver quanto de espaco foi consumido neste process. O EeePC 701 após um 'Restore Factory Settings' tem 1.3GB livres, após a instalacão do meeeleupc fica com 1.1GB livres.

    Após a instalacão, os arquivos podem ser encontrados em /usr/local/share/meeeleupc, inclusive um script para desabilitar o Multiuser Mode (somente texto) e voltar com a interface original.

    Eu acho que o codigo está bem simples de ler. Qualquer dúvida/sugestão/crítica será bem vinda em meleuzord arroba yahoo ponto com.

  • terça-feira, 6 de maio de 2008

    wmsystray

    Para quem tem um ASUS EeePC mas não gosta daquela interfacezinha do Easy Mode e nem gosta do KDE, gosta do WindowMaker mas não usa por que não quer perder aquelas facilidades que aparecem na bandeja (monitor de redes, redes sem fio, controle de volume, e monitor de bateria. Os seus problemas se acabaram-se!!! O nome da solução é wmsystray, e pode ser encontrado em http://vlad.minisat.ro/~vlad2/dockapps/releases/.

    Trata-se de um dockapp onde podem ficar os programinhas próprios para ficarem no systray.

    Estou trabalhando num projeto que visa automatizar o processo de migração para os fans de WindowMaker. Em breve...

    sábado, 3 de maio de 2008

    configurando teclado para acentos no X

    Essa funcionou no WindowMaker e no fluxbox.

    Editar o arquivo /etc/X11/xorg.conf

    na seção InpuDevice fazer as seguintes alterações

    - para teclado tradicional:

    Option "XkbLayout" "us_intl"


    - para ABNT2:

    Option "XkbModel" "abnt2"
    Option "XkbLayout" "br"

    sexta-feira, 25 de abril de 2008

    imagens do OpenBSD para VMware

    Deu um trabalhinho mas consegui baixar uma imagem do OpenBSD 4.2 e usar no meu WMware Workstation 5.5.

    Baixei a imagem em http://chrysaor.info/?page=images.

    Só que não rodou no meu Workstation 5.5. Precisei baixar o VMware Converter em http://www.vmware.com/products/converter/. Só que a versão mais recente do Converter (VMware Converter 3.0.2 Update 1) ficou dando um "Runtime error" na hora de converter. Então baixei a versão 3.0 e converti a imagem do OpenBSD para rodar no meu Workstation 5.5.

    Com sucesso!

    terça-feira, 22 de abril de 2008

    Transferir videos do DVD para AVI

    http://info.abril.com.br/dicas/arquivos/aprenda-transferir-videos-do-dvd-para-ar-873.shtml

    backtrack no eeepc

    http://techdu.de/2008/04/12/how-to-install-backtrack-30-on-the-eee-pc/

    cygwin minimo

    Pacotes que tornam o cygwin minimamente útil para mim:

    alternatives
    ash
    base-files
    base-passwd
    bash
    binutils
    bzip2
    coreutils
    crypt
    cygutils
    cygwin
    cygwin-doc
    editrights
    findutils
    gawk
    gcc
    gcc-mingw
    gettext
    grep
    groff
    gzip
    less
    libiconv
    login
    make
    man
    mingw-runtime
    ncurses
    netcat
    pcre
    popt
    readline
    rebase
    run
    screen
    sed
    tar
    termcap
    terminfo
    texinfo
    tzcode
    vim
    w32api
    which

    segunda-feira, 21 de abril de 2008

    segunda-feira, 14 de abril de 2008

    Net Tools

    Ferramentas de rede na web. Muito útil quando só se tem acesso a um browser e mais nada.

    http://www.all-nettools.com/toolbox

    ler

    http://www.freeproxy.ru

    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;
    }

    sábado, 8 de março de 2008

    recuperando senha do root no FreeBSD

    Essa dica foi retirada de http://under-linux.org/wiki/index.php/Dicas/FreeBSD/FreeBSD-Senha.

    Na tela de contagem regressiva para escolha do boot, basta optar pelo prompt de comando para as opções de boot. Daí é só entrar com "boot -s" que vai entrar como administrador sem pedir senha alguma. Daí é só usar o passwd para trocar a senha. Se não funcionar é porque precisa montar as partições. Um "mount -a" deve resolver isso e então é só usar o passwd.

    Essa me tirou do sufoco hoje! =D

    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.

    quinta-feira, 28 de fevereiro de 2008

    Notas sobre escrita de textos na área de Sistemas de Computação na língua de Camões

    Texto bem interessante para tradutores ou simplesmente para leitores lusófonos de textos em inglês:

    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/

    tags