Ir para o conteúdo
ou

Software livre Brasil

Magnun

Nenhum artigo selecionado ainda.
Tela cheia
 Feed RSS

Blog

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

Ainda Estou Vivo

27 de Outubro de 2010, 10:55, por Software Livre Brasil - 0sem comentários ainda

Olá a todos! Já faz um bom tempo desde o meu último post. Eu acredito que tivemos um bom começo (em inglês pelo menos) e de súbto eu parei de postar. Então, eu vim justificar meu desaparecimento. Recentemente eu me casei, passei por uma grande mudança no meu trabalho (Mainframes, arg! que saudades do bash…) e "perdi" o nome do meu projeto principal. Acho que isso justifica muit não?!

Game Over!

Game Over!

Sobre o "nome do projeto", eu descobri que o nome Beholder já está em uso por outro projeto open source. Emtão eu comecei a buscar por um novo nome. Esse nome precisava ser tão legal quanto Beholder. Além disso eu queria um nome forte e significativo. Então eu finalmente achei, Tiamat. Eu irei aos poucos atualizar a página do projeto explicando sobre o nome e seus motivos.

Ainda Estou Vivo é um artigo original de Mind Bending



[Curso de Python] Tipos Built-In - Parte 3

26 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui



Na última aula vimos todos os tipos numéricos built-in do Pyhton, hoje veremos as sequências imutáveis.


Tipos Built-In - Parte 3




Retomando a lista dos tipos built-in:
  • None;
  • NotImplemented;
  • Ellipsis;
  • Numericos:
    • int;
    • long;
    • float;
    • bool;
    • complex;
  • Sequências Imutáveis:
    • str;
    • unicode;
    • tuple;
  • Sequências Mutáveis:
    • list;
    • bytearray;
  • Sets:
    • set;
    • frozenset;
  • Mapeamentos:
    • dict;
  • slice;
  • callable;
  • file;



Sequências imutáveis são sequências de dados que não podem ser alterados. Temos 3 tipos de sequências imutáveis: strings, unicode e tuplas. Vamos analisar uma por uma.



Strings

No Python as strings são referenciadas pelo identificador str. Muitos devem estar pensando que strings não são sequências, mas na verdade são, são sequências de bytes "traduzidos" pela tabela ASCII. ASCII - Wikipédia, a enciclopédia livre

As strings já foram amplamente abordadas aqui nesse curso, quem quiser rever basta visitar essas aulas: Strings - Parte 1 e Strings - Parte 2


Unicode

Como eu comentei acima, strings são sequências de códigos ASCII, dessa forma não são os tipos apropriado para "suportar" acentos. Sempre que trabalhamos com acentos devemos usar unicode ao invés de strings. Desta forma, unicode é uma sequência de códigos unicode que representam todos os tipos de caracteres existentes desde os utilizados nas escritas mais antigas até as mais modernas. O unicode foi introduzido no Python 2.0 e se tornou a "string padrão" no Python 3.0. Cada caractere unicode pode conter 16 bits ou 32 bits. Este valor pode variar dependendo do caractere representado. Para mais informações sobre a codificação unicode consulte esse link: Unicode - Wikipédia, a enciclopédia livre

Para trabalhar com Unicode em Python é simples, basta iniciar uma string com o identificador 'u':
Código python:
>>> u'teste de unicode'
u'teste de unicode'
>>> texto = u'teste de unicode'
>>> print texto
teste de unicode
>>> type(texto)
<type 'unicode'>
>>>
>>> texto = u'é ã ç'
>>> texto
u'\xe9 \xe3 \xe7'
>>> print texto
é ã ç
>>>


Tuple

Tuplas são sequências de qualquer tipo de dados no Python. As tuplas já foram abordadas anteriormente na seguinte aula: Introdução à Tuplas e Lístas


Até a próxima aula pessoal...


[Curso de Python] Tipos Built-In - Parte 2

19 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui



Na última aula começamos a analisar os tipos built-in um por um. Vimos os tipos None, NotImplemented e o Ellipsis. Hoje daremos continuidade nesse estudo. Hoje veremos rapidamente os tipos numéricos.

Tipos Built-In - Parte 2




Retomando a lista dos tipos built-in:
  • None;
  • NotImplemented;
  • Ellipsis;
  • Numericos:
    • int;
    • long;
    • float;
    • bool;
    • complex;
  • Sequências Imutáveis:
    • str;
    • unicode;
    • tuple;
  • Sequências Mutáveis:
    • list;
    • bytearray;
  • Sets:
    • set;
    • frozenset;
  • Mapeamentos:
    • dict;
  • slice;
  • callable;
  • file;


Os tipos numéricos já foram brevemente abordados em aulas passadas, então comentarei um pouco mais sobre eles.


Int

Inicialmente temos o tipo inteiro identificado pela palavra int. Esse tipo representa um número inteiro, positivo ou negativo, nulo ou não-nulo que esteja entre -2147483648 e 2147483647. Caso uma operação matemática gere um número que extrapola essa faixa, ele é automaticamente retornado como um inteiro Longo (em alguns casos pode ocorrer o erro OverflowError).

Código python:
>>> type(12)
<type 'int'>
>>> 12**8
429981696
>>> 12**9
5159780352L
>>> type(12**9)
<type 'long'>
>>>



Long

Os números inteiros longos não estão restritos a uma faixa (como os inteiros), estão restritos somente à disponibilidade de memória virtual. Isto quer dizer que o interpretador do Python aloca espaços de memória dinamicamente possibilitando ter números de tamanhos incríveis. Quando necessário, o resultado de uma operação é automaticamente adaptado para um inteiro longo. Em um sistema de 32 bits o número 2.147.483.647 é o menor inteiro simples disponível.

Código python:
>>> int_simples = 10**9
>>> int_simples
1000000000
>>> type(int_simples)
<type 'int'>
>>>
>>> int_longo = 10**10
>>> int_longo
10000000000L
>>> type(int_longo)
<type 'long'>
>>>

O processo inverso não ocorre naturalmente, é necessário converter manualmente o inteiro longo para inteiro simples.
Código python:
>>> resultado = 10000000000L/100
>>> resultado
100000000L
>>> type(resultado)
<type 'long'>
>>> int(resultado)
100000000
>>> type(int(resultado))
<type 'int'>
>>>



Curiosidade

Uma curiosidade sobre os números é que eles podem ser escritos de forma binário ou hexadecimal. para escrever um número no modo binário basta preceder o número por 0b. Segue alguns exemplos:
Código python:
>>> 0b101111
47
>>> 0b011
3
>>> 0b111011111000011
30659

Para escrever um número em hexadecimal, utilizamos a notação 0x antes do número. Segue alguns exemplos:
Código python:
>>> 0xff
255
>>> 0x0a
10
>>>


Outra forma de se obter números através de representações binárias/hexadecimais é utilizar o construtor int:
Código python:
>>> print int('01010101111',2)
687
>>> int('1010', 2)
10
>>>
>>> int('ff', 16)
255
>>> int('b', 16)
11
>>>

Como podemos ver basta informar o número na forma de string e informar posteriormente a base numérica (2 para binário e 16 para hexadecimal).

Também é possível criar uma representação binária de um número inteiro comum. Note que o resultado é uma string:
Código python:
>>> bin(173)
'0b10101101'


Para criar uma representação hexadecimal de um número inteiro comum utilize a função hex:
Código python:
>>> hex(111)
'0x6f'
>>> hex(255)
'0xff'
>>> hex(14)
'0xe'
>>>



Float

O tipo float, são números que se utilizam de casas decimais para representar valores reais.

Código python:
>>> 1.2
1.2
>>> 2.75
2.75
>>>

O Python utiliza o ponto como marcador de casas decimais. Algumas vezes o Python pode apresentar números "incertos". Por exemplo:

Código python:
>>> 1.2-1.0
0.199999999999999996

Isto não é um bug. Na verdade isso não é relacionado com o Python em si, mas sim com a forma que a plataforma C manipula pontos flutuantes e com a imprecisão adicionada pelo processo de convertes números para strings com um numero definido de casas decimais.

A representação interna do ponto flutuante usa um numero fixo de dígitos binários para representar o numero decimal, Alguns números decimais ão podem ser representados precisamente, resultando em pequenos erros de aproximação.

Para os matemáticos curiosos: é fácil provar que 0.99999... é igual a 1, aqui vai um link: 0.999... - Wikipedia, the free encyclopedia


Booleanos

Os valores booleanos assumem apenas 2 valores, verdadeiro e falso. Eles se comportam como 1 e 0.

Código python:
>>> True
True
>>> False
False
>>>
>>>
>>> True + True
2
>>> True + False
1
>>> False + False
0
>>>



Complex

Números complexos são muito utilizados na matemática e na engenharia. Eles são representados por dois números com ponto flutuante (ou inteiros/longos), parte real e imaginária. A parte imaginária sempre está acompanhada pelo número complexo j, dependendo do livro adotado também é utilizado o i, ambos são uma substituição para o número complexo srq(-1) (raix quadrada de um).

Em Python, semelhante ao Long, não existe uma limitação de tamanho para números complexos. Isso se deve ao fato dos números complexos serem pares de números que se comportam de forma diferente ao serem somados, subtraídos, multiplicados e divididos. Dessa forma esses pares podem ser inteiros, pontos flutuantes ou longos.

Código python:
>>> 1 + 2j
(1+2j)
>>>
>>> -5 + 4j
(-5+4j)
>>>
>>> 2j
2j
>>>

O Python suporta também é capaz de realizar operações matemáticas com números complexos:

Código python:
>>> (2 - 3j) + (1 + 5j)
(3+2j)
>>> (2 - 3j) - (1 + 5j)
(1-8j)
>>> (2 - 3j)*(-1j)
(-3-2j)
>>> (2 - 3j)/(-2+2j)
(-1.25+0.25j)
>>> (2 - 3j)**2
(-5-12j)
>>>


Outra Curiosidade

O Python é um ótima linguagem também para os matemáticos. Nela é possível representar números extremamente grandes ou extremamente pequenos utilizando a notação científica Notação científica - Wikipédia, a enciclopédia livre . Vamos a alguns exemplos:
Código python:
>>> 2e10
20000000000.0
>>> 5e-3
0.0050000000000000001
>>>

Para imprimir números em notação científica basta usar o identificador %e na formatação:
Código python:
>>> x = 100000
>>> y = 0.00001
>>> print 'Numero grande %.2e\nNumero pequeno %.2e'%(x, y)
Numero grande 1.00e+05
Numero pequeno 1.00e-05
>>>

Lembrando que o '.2', entre o '%' e 'e', define que serão utilizadas somente duas casas decimais de precisão.

Até a próxima pessoal...


[Curso de Python] Tipos Built-In - Parte 1

16 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui



Estou de volta após um curto período de recesso...

Na última aula comentei novamente sobre os tipos builtins e destaquei alguns que já foram abordados nesse curso. A partir de hoje começa uma série de posts explorando cada tipo Built-In relevante.

Tipos Built-In - Parte 1




Quando digo "tipos built-in" estou me referindo a tipos de variáveis como int, string e etc. O Python possui diversos tipos, inclusive possui tipos que não são utilizados comumente durante o desenvolvimento de programas. Abaixo segue uma listagem de todos os tipos buit-in do Python:
  • None;
  • NotImplemented;
  • Ellipsis;
  • Numericos:
    • int;
    • long;
    • float;
    • bool;
    • complex;
  • Sequências Imutáveis:
    • str;
    • unicode;
    • tuple;
  • Sequências Mutáveis:
    • list;
    • bytearray;
  • Sets:
    • set;
    • frozenset;
  • Mapeamentos:
    • dict;
  • slice;
  • callable;
  • file;

Como comentado, muitos desses tipos não são utilizados durante o desenvolvimento de programas, mas podem vir a ser úteis portanto, é bom conhece-los.


None

Começando do topo da lista temos o tipo None. O None é o vazio do Python, geralmente utilizado para inicializar variáveis. O valor booleano do None é false, dessa forma podemos testar se uma variável está vazia ou não:

Código python:
>>> x = None
>>> print x
None
>>> if x == True:
...  print 'none e true'
... else:
...  print 'none e false'
...
none e false
>>>

Para simplificar o if e tornar o código mais legível podemos simplesmente escrever da seguinte forma:
Código python:
 
>>> x = None
>>> if x:
...  print 'none e true'
... else:
...  print 'none e false'
...
none e false
>>>

O None também é retornado quando uma função não retorna nenhum valor explicitamente. Abaixo um exemplo:

Código python:
>>> def teste():
...  print 'funcao teste'
...
>>>
>>> y = teste()
funcao teste
>>> print y
None
>>>


NotImplemented

Em seguida temos o tipo NotImplemented. Esta constante é utilizado para controlar novas implementações. Quando uma nova função/método está sendo implementada mas não está terminada ela retornará o valor NotImplemented. Só por curiosidade, o valor booleano de NotImplemented é True:

Código python:
>>> NotImplemented
NotImplemented
>>> print NotImplemented
NotImplemented
>>> type(NotImplemented)
<type 'NotImplementedType'>
>>> bool(NotImplemented)
True
>>>



Ellipsis...

O Ellipsis também é uma constante, ela representa o simbolo '...' utilizado no slicing de objetos criados pelo programador. Nativamente o Ellipsis só é suportado por objetos da biblioteca NumPy, voltada para cálculos e computação científica. Esse é um dos objetos mais estranhos que eu já vi no Python:

Código python:
>>> Ellipsis
Ellipsis
>>> print Ellipsis
Ellipsis
>>> ...
  File "<stdin>", line 1
    ...
    ^
SyntaxError: invalid syntax
>>>

A Ellipsis só parece funcionar dentro do slicing. Segue um exemplo simples para demonstrar a existência do Ellipsis e possíveis aplicações:

Código python:
>>> class Teste:
...     def __getitem__(self, pedacos):
...             print 'pedaços:',pedacos
... 
>>> 
>>> 
>>> x = Teste()
>>> x[1]
pedaços: 1
>>> x[1:2]
pedaços: slice(1, 2, None)
>>> x[1, ...]
pedaços: (1, Ellipsis)
>>> x[1, ..., 4:7]
pedaços: (1, Ellipsis, slice(4, 7, None))
>>>

Este exemplo aborda vário conhecimentos avançados como orientação a objeto e métodos especiais, mas espero que tenha sido claro o suficiente. Este exemplo é bem abrangente, ele mostra também o tipo slice que será comentado futuramente.

Com o exemplo acima podemos ver que o simbolo '...' foi substituído pelo nome Ellipsis. A Ellipsis pode ter diversas implementações, tudo depende do ponto de vista do programador. Podemos, por exemplo, dizer que [1, ...] irá retornar todos os objetos de uma lista com exceção do objeto de índice 1.

Por hoje é só pessoal...


Estou de volta!

15 de Outubro de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Olá pessoal, voltei!

Clique na imagem para uma versão maior

Nome:	         rush-ticket-stage.JPG
Visualizações:	12
Tamanho: 	64,1 KB
ID:      	15134


O show começou pontualmente às 21:30. Como é padrão do Rush, este show teve a duração de incríveis 3 horas. O público foi de 40 mil pessoas, o que por um lado foi bom - pois não teve confusão - mas por outro foi ruim, pois o Rush teve um público de 62 mil pessoas nesse mesmo estádio no ano de 2002.

Pra mim o show teve um momento dramático. Próximo ao fim da música YYZ Neil Peart (o baterista) jogou a baqueta pra cima mas não conseguiu pega-la de volta... logo após a virada mais difícil da música. Claro, ele é "The Professor" (como os outros integrantes do Rush se referem a ele), sendo assim ele conseguiu continuar sem prejuízos à música. O mais curioso é que ele fez isso várias vezes no show e essa foi a única vez que ele não deu certo...

Setlist do show:
Set 1:
01. Video de introdução
02. The Spirit of Radio
03. Time Stand Still
04. Presto
05. Stick It Out
06. Workin' Them Angels
07. Leave That Thing Alone!
08. Faithless
09. BU2B
10. Freewill
11. Marathon
12. Subdivisions
Intervalo
Set 2:
13. Tom Sawyer (com introdução em vídeo)
14. Red Barchetta
15. YYZ
16. Limelight
17. The Camera Eye
18. Witch Hunt
19. Vital Signs
20. Caravan
21. Drum Solo
22. Closer to the Heart
22. 2112 Overture/Temples of Syrinx
23. Far Cry
Bis
24. La Villa Strangiato
25. Working Man
26. Video de fechamento.



Tags deste artigo: python linux arch programação desenvolvimento vim