terça-feira, 16 de outubro de 2012

PGF/Tikz

Turbinando os desenhos em LaTeX

Muita gente que precisou criar uma ilustração em LaTeX e tentou usar o ambiente 'picture', deve ter tido o mesmo sentimento de frustração que eu. O ambiente 'picture, nativo de LaTeX é bom, mas deixa muito a desejar, em especial se você precisar 'colorir' pequenas áreas, ou criar uma forma geométrica mais livre.

Para isso foi criado o PGF/Tikz, um pacote incrível, que permite desenhar qualquer coisa, quase a 'mão livre.'

O pacote disponibiliza o ambiente 'tikzpicture', que tem uma lógica muito simples:

  1. Um comando que define desenho (\draw), area (\path) ou elemento (\node).
  2. Uma coordenada do tipo (x,y) do plano cartesiano, que indica onde o objeto começa.
  3. tipo do objeto, como linha (--), circulo (circle), retângulo (rectangle) etc.
  4. Uma coordenado do tipo (x,y) do plano cartesiano, que indica o fim do objeto.
Exemplo: \draw (0,0) -- (2,0); O comando acima desenha uma linha de dois centímetros. Já o comando abaixo cria uma curva par cima: \draw (0,0) to [out=0,in=270] (1,1); O interessante o tikz é que você não precisa ficar em apenas dois 'nós', se quiser fazer uma linha angulada para cima basta fazer: \draw (0,0) -- (1,0) -- (2,1); Você pode continuar desenhando, mesclando ângulos de entrada e saída sempre que precisar, por quantos nós precisar. Uma coisa muito interessante do Tikz é a possibilidade de desenhar o gráfico de uma função, entrando apenas os pares ordenados dela, calculados em outro programa (no meu caso eu crio o script em python para calcular os pares ordenados). Veja um exemplo neste arquivo aqui. Neste outro arquivo, uma ilustração de física feita em tikz, veja aqui. Até a próxima.

Continue Lendo >

sábado, 25 de agosto de 2012

Coordenadas de uma Hiperbole

Calculando com Python

Python é mesmo uma 'calculadora' em forma de linguagem. Não atoa é usada até na ISS (International Spacial Station).

Revisando o plano cartesiano (por que? por que é legal!) enfrentei um exercício que pedia todos os resultados possíveis da equação y=12/x... Então por que não usar python para isso?

O trabalho com python é tão simples que tudo levou menos de 5 minutos. Pela primeira vez (claro que devemos considerar o código ser bem simples) eu codifiquei e rodei sem erros logo de primeira.


Veja o código aqui. Observe que ele pode ser facilmente adaptado para outras equações, já que o calculo acontece com 'x' e 'y' e a lista de resultados é gerada com 'a' e 'b', que convertem x e y (respectivamente) para ponto flutuante com uma casa decimal.


Você pode aumentar as casas decimais, alterando o numero em %.1f para o numero de casas que precisar.


Nerdices a mil, pessoal. Até a próxima.

Continue Lendo >

sábado, 11 de agosto de 2012

Dois pequenos ASM

Continuar é preciso

Dando seguimento ao 'projeto PN-IBMPC' (nome que dei ao meu plano de 'traduzir' os exercícios do livro 'Linguagem Assembly para IBM PC - Peter Norton' para Assembly NASM/Gcc/Linux) eu consegui, com a ajuda dos membros da osdevbrasil, concluir o programa do capitulo 4 - imprimindo números binários.

De quebra também criei um pequeno código que imprime todo o alfabeto na tela. Este código utiliza os mesmos conhecimentos do código 'imprimindo números binários'.

http://pastebin.com/0AcM3qSv e http://pastebin.com/YzjG31VL. Bons estudo =].

Em breve um manual em Latex/pdf com as lições bem organizadas e estruturadas como no livro.

Continue Lendo >

sábado, 4 de agosto de 2012

Engenharia de software

Bom material para iniciantes

Achei no apostilando um material muito bom para introduzir o assunto. Estava dividido em 9 partes que eu uni em um unico pdf usando LaTeX.
Pegue a apostila aqui.

Continue Lendo >

sábado, 28 de julho de 2012

Linguagem NASM e Lista de syscall linux

Como escrever uma linha de código no NASM

Dando seguimento ao meu pequeno plano de adaptar os exercícios do livro "Linguagem assembly para IBM PC" de Peter Norton (publicado na década de 1980) para serem executados no Linux com o NASM, eu traduzi o capitulo 3 do manual do NASM...
Mas também inclui no texto uma breve descrição de como usar as syscall do linux e uma lista, obtida aqui para ajudar a desenvolver programas em assembly NASM para linux. Bons estudos


Obtenha o arquivo aqui. :]

Continue Lendo >

domingo, 22 de julho de 2012

Man - dica do dia

Uma pequena função não explicada nos manuais

Essa aconteceu comigo agora mesmo. Pesquisando sobre as syscalls do linux, descobri uma entrada no man chamada syscalls (assim mesmo, no plural), que lista as syscalls. Minha busca era pela sys_write, a quarta syscall do linux.

O man exibe um conjunto de paginas 'on-line' dos programas instalados no computador. Sempre que um programa é instalado no linux, uma man page é instalada também. Alguns instalam também entrada para o info, mas isso foge do escopo deste post.

Um detalhe pouco descrito nos tutoriais e manuais do linux que encontramos pela web, é o significado do numero entre os parenteses que toda entrada do man tem, por exemplo write(2). Que nada mais é do que uma indicação da Seção do manual que pertence a pagina em questão.

O man tem no minimo 8 seções, mas cada ditribuição pode personalisar as seções, inclusive adicionando seções:
1 -- User Commands
2 -- System Calls
3 -- C Library Functions
4 -- Devices and Special Files
5 -- File Formats and Conventions
6 -- Games et. Al.
7 -- Miscellanea
8 -- System Administration tools and Deamons

Se entrarmos o comando man write, abriremos a pagina referente ao programa 'write' que permite enviar uma mensagem para outro usuário logado no sistema. Mas se quisermos obter as informações sobre a chamada de sistema write como faremos?

Basta digitar o número da seção antes do nome da pagina, da seguinte forma: man 2 write . Pronto agora abrimos a pagina do write(2), da seção das chamadas do sistema, e não a pagina do write(1), da seção de comandos do usuário. Dica tola, verdade, mas não encontrei nada a respeito disso em nenhum guia da web, só pesquisando no manual do manual :).

Continue Lendo >

terça-feira, 20 de março de 2012

DSL 210 no Slackware 13

no pinguim, velho problema

Estou usando o sclakware agora, e precisei instalar o meu velho modem DSL210 da dlink nele. O problema é que ele é USB e isso sempre foi encrenca nas outras distros, então...

De cara, lendo por aí notei que os pacotes deb e rpm são os unicos que resolveriam o problema. Usando o mesmo tutorial do ubuntu eu tentei instalar e... Para minha surpresa o slackware 13 reconhece o modem USB sem problema. Sem problema mesmo, não precisei sequer do cxacru-fw.bin (o firmware do chip Conextant), e o pppoe já está instalado.


Está tudo bem então é só criar a interface nas0, mas vamos por partes, para um modem USB funcionar precisamos: 1 - do firmeware do modem (cxacru-fw.bin) do drive rp-pppoe (no caso todo o conjunto de aplicativos pppoe) e de uma interface que redirecione o fluxo da rede da eth0 para a porta USB (a nas0). É aí que complica, pois para isso temos que instalar o br2684ctl que depende do libatm, esses pacotes existem em deb ou rpm. Fui atrás do alien, um script perl que convert os pacotes de um formato para outro, e para minha surpresa, bastou instalar e rodar o pppoe-setup.

Aqui é que fica a pulga. Depois de rodar o pppoe-setup, meu modem conectou (tanto o ADSL quanto no servidor) mas não tinha travego algum... A um grande pequeno detalhe na configuração do pppoe-setup: quando ele peguntar o IP do DNS, escreva 'server' sem as aspas, isso fará o pppoe deixar que o seu servidor ISP indique um IP dinâmico. Parece bobagem mas eu quebrei a cabeça meia tarde para descobrir esse detalhe.


Se quiser, no link abaixo tem os arquivos usados para instalar. Basta seguir o tutorial do ubuntu e instalar os pacotes txz (installpkg nome.txz):

DSL210Tutorial.tar.gz

É isso, fica a dica...

Continue Lendo >