Palestra sobre uso de Python em um curso de Ciência da Computação

classic Classic list List threaded Threaded
15 messages Options
Reply | Threaded
Open this post in threaded view
|

Palestra sobre uso de Python em um curso de Ciência da Computação

Marco André Lopes Mendes
Olá

Apresentei nessa sexta-feira que passou a palestra "Python em um curso de
Ciência da Computação" na semana acadêmica de computação da FURB em
Blumenau. A ajuda do pessoal aqui da lista foi fundamental pra levantar as
principais bibliotecas e ferramentas e tenho muito que agradecer.

Os slides estão disponiveis no slideshare, no seguinte link:

http://www.slideshare.net/marcoandre/python-em-um-curso-de-cincia-da-computao-calcomp-furb-2010

Como é a primeira versão, tenho certeza que existem muitos erros e muita
coisa a ser melhorada. Em escrevi algumas coisas de cabeça, não existe uma
ordem muito bem justificada e também devem ter ficado de fora bibliotecas
importantes. De qualquer forma, aprendi muito, conheci ótimas bibliotecas e
provei (ao menos pra mim mesmo) que "batteries included" não é apenas uma
frase de efeito.

Quero muito que vocês enviem sugestões de melhorias, correções, itens a
incluir e coisas do tipo.

Um abraço

--
Marco André
[hidden email]
http://www.google.com.br/profiles/marcoandre


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Bugzilla from heldercro@gmail.com
Muito obrigado por compartilhar...
*

Helder*
http://www.hccode.rg3.net/


Em 25 de setembro de 2010 23:37, Marco André Lopes Mendes <
[hidden email]> escreveu:

>
>
> Olá
>
> Apresentei nessa sexta-feira que passou a palestra "Python em um curso de
> Ciência da Computação" na semana acadêmica de computação da FURB em
> Blumenau. A ajuda do pessoal aqui da lista foi fundamental pra levantar as
> principais bibliotecas e ferramentas e tenho muito que agradecer.
>
> Os slides estão disponiveis no slideshare, no seguinte link:
>
>
> http://www.slideshare.net/marcoandre/python-em-um-curso-de-cincia-da-computao-calcomp-furb-2010
>
> Como é a primeira versão, tenho certeza que existem muitos erros e muita
> coisa a ser melhorada. Em escrevi algumas coisas de cabeça, não existe uma
> ordem muito bem justificada e também devem ter ficado de fora bibliotecas
> importantes. De qualquer forma, aprendi muito, conheci ótimas bibliotecas e
> provei (ao menos pra mim mesmo) que "batteries included" não é apenas uma
> frase de efeito.
>
> Quero muito que vocês enviem sugestões de melhorias, correções, itens a
> incluir e coisas do tipo.
>
> Um abraço
>
> --
> Marco André
> [hidden email] <marcoandre%40gmail.com>
> http://www.google.com.br/profiles/marcoandre
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Dilan Nery-2
In reply to this post by Marco André Lopes Mendes
Muito bom Marcos, parabéns!

2010/9/25 Marco André Lopes Mendes <[hidden email]>

>
>
> Olá
>
> Apresentei nessa sexta-feira que passou a palestra "Python em um curso de
> Ciência da Computação" na semana acadêmica de computação da FURB em
> Blumenau. A ajuda do pessoal aqui da lista foi fundamental pra levantar as
> principais bibliotecas e ferramentas e tenho muito que agradecer.
>
> Os slides estão disponiveis no slideshare, no seguinte link:
>
>
> http://www.slideshare.net/marcoandre/python-em-um-curso-de-cincia-da-computao-calcomp-furb-2010
>
> Como é a primeira versão, tenho certeza que existem muitos erros e muita
> coisa a ser melhorada. Em escrevi algumas coisas de cabeça, não existe uma
> ordem muito bem justificada e também devem ter ficado de fora bibliotecas
> importantes. De qualquer forma, aprendi muito, conheci ótimas bibliotecas e
> provei (ao menos pra mim mesmo) que "batteries included" não é apenas uma
> frase de efeito.
>
> Quero muito que vocês enviem sugestões de melhorias, correções, itens a
> incluir e coisas do tipo.
>
> Um abraço
>
> --
> Marco André
> [hidden email] <marcoandre%40gmail.com>
> http://www.google.com.br/profiles/marcoandre
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



--
Warmest regards,
Dilan Nery - @dilannery


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Marco André Lopes Mendes
2010/9/26 Dilan Nery <[hidden email]>

> Muito bom Marcos, parabéns!
>

Valeu.

http://marrcandre.blogspot.com/2008/03/python-assim-que-se-escreve.html

<http://marrcandre.blogspot.com/2008/03/python-assim-que-se-escreve.html>
 :-)

Marco André


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Camila Araújo
Adorei, Marco.
Continue com esse tipo de trabalho.

Em 26 de setembro de 2010 00:09, Marco André Lopes Mendes <
[hidden email]> escreveu:

>
>
> 2010/9/26 Dilan Nery <[hidden email] <dnerylopes%40gmail.com>>
>
> > Muito bom Marcos, parabéns!
> >
>
> Valeu.
>
> http://marrcandre.blogspot.com/2008/03/python-assim-que-se-escreve.html
>
> <http://marrcandre.blogspot.com/2008/03/python-assim-que-se-escreve.html>
> :-)
>
> Marco André
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



--
==============================

Camila Maria Franco.

 [image: Google Talk:] [hidden email] [image: MSN:]
[hidden email]

 @Ca_milaMaria


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
| E se você é usuário do BOL lembre-se de cadastrar o       |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
    [hidden email]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Marco André Lopes Mendes
2010/9/26 Camila Araújo <[hidden email]>

> Adorei, Marco.
> Continue com esse tipo de trabalho.
>

Valeu. Vou fazendo o que posso. ;-)

Se tiver críticas ou sugestões, sinta-se à vontade pra passar.

Um abraço

Marco André


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

José Alexandre Nalon
In reply to this post by Marco André Lopes Mendes
Marco,

> Apresentei nessa sexta-feira que passou a palestra "Python em um curso de
> Ciência da Computação"

Parabéns pela palestra. Gostei das informações sobre as bibliotecas --- isso
permite ver o quão longe a linguagem consegue chegar. Confesso que tem
muita coisa lá que eu mesmo não conhecia, e que provavelmente me será
útil no futuro. Obrigado também pela citação ao Peach.

> Quero muito que vocês enviem sugestões de melhorias, correções, itens a
> incluir e coisas do tipo.

Quanto a sugestões, não vejo como a apresentação poderia ser melhorada.
Alguns slides apareceram "cortados", com a parte mais baixa não aparecen-
do, mas creio que isso seja algum problema no Slideshare ou na minha con-
figuração aqui.

Abraços:

---
José Alexandre Nalon
[hidden email]




Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Leonardo Santagada
In reply to this post by Marco André Lopes Mendes
Gostei muito da apresentação, mas como ninguém tinha feito um review
mais a sério eu resolvi usar o meu tempo livre pra ler ela direitinho,
espero que tu goste das criticas :)

2010/9/25 Marco André Lopes Mendes <[hidden email]>:
> Quero muito que vocês enviem sugestões de melhorias, correções, itens a
> incluir e coisas do tipo.
>

Slide 3: "assimilada" no sentido de fácil leitura eu suponho, eu
trocaria a frase por "Sintaxe de fácil leitura" ou só "Sintaxe
simples" fácil assimilada pra mim parece confuso.
- Strings são implementadas por listas encadeadas? E elas não crescem
são imutaveis. Também não são usadas para implementar pilhas ou filas.
- Tuplas e Listas tem acesso indexado O(1) até onde eu lembro, então
tb não acho que são implementadas por listas encadeadas. Tuplas não
crescem tb
- O item 3 não faz  sentido pra mim "podem ser usadas para persistir dados"
- frozenset tb não crescem
- capacidades de números aleatórios. Eu não entendi a palavra capacidades.
Slide 14: eu falaria q a pyglet usa opengl, e tem um binding completo
de opengl dentro dela.
Slide 24: importante falar da diferença de acessar o banco com  python
e de fazer strored procedures em PL/Python.
Slide 28: fosse -> fossem (eu acho)
- : multiprocessing tem comunicação não local?

Geral:

Gostei bastante da apresentação, mas tu tem que cuidar pq o beamer não
te avisa quando o texto fica cortado pra fora do slide, e eu usaria um
dos temas mais leves que esse padrão (leve no sentido de não tão
carregado visualmente).




--
Leonardo Santagada
Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Marco André Lopes Mendes
Valeu Leo, vou olhar cada ponto com carinho.

Existe alguma documentação de como as estruturas de dados nativas de Python
são implementadas internamente?

Um abraço

Marco André

2010/9/27 Leonardo Santagada <[hidden email]>

> Gostei muito da apresentação, mas como ninguém tinha feito um review
> mais a sério eu resolvi usar o meu tempo livre pra ler ela direitinho,
> espero que tu goste das criticas :)
>
> 2010/9/25 Marco André Lopes Mendes <[hidden email]>:
> > Quero muito que vocês enviem sugestões de melhorias, correções, itens a
> > incluir e coisas do tipo.
> >
>
> Slide 3: "assimilada" no sentido de fácil leitura eu suponho, eu
> trocaria a frase por "Sintaxe de fácil leitura" ou só "Sintaxe
> simples" fácil assimilada pra mim parece confuso.
> - Strings são implementadas por listas encadeadas? E elas não crescem
> são imutaveis. Também não são usadas para implementar pilhas ou filas.
> - Tuplas e Listas tem acesso indexado O(1) até onde eu lembro, então
> tb não acho que são implementadas por listas encadeadas. Tuplas não
> crescem tb
> - O item 3 não faz  sentido pra mim "podem ser usadas para persistir dados"
> - frozenset tb não crescem
> - capacidades de números aleatórios. Eu não entendi a palavra capacidades.
> Slide 14: eu falaria q a pyglet usa opengl, e tem um binding completo
> de opengl dentro dela.
> Slide 24: importante falar da diferença de acessar o banco com  python
> e de fazer strored procedures em PL/Python.
> Slide 28: fosse -> fossem (eu acho)
> - : multiprocessing tem comunicação não local?
>
> Geral:
>
> Gostei bastante da apresentação, mas tu tem que cuidar pq o beamer não
> te avisa quando o texto fica cortado pra fora do slide, e eu usaria um
> dos temas mais leves que esse padrão (leve no sentido de não tão
> carregado visualmente).
>
>
>
>
> --
> Leonardo Santagada
>
>
> ------------------------------------
>
> ,-----------------------------------------------------------.
> | Antes de enviar um e-mail para o grupo leia:              |
> | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |
> | E se você é usuário do BOL lembre-se de cadastrar o       |
> | e-mail do grupo na lista branca do seu sistema anti-spam. |
> `-----------------------------------------------------------´Links do
> Yahoo! Grupos
>
>
>


--
Marco André
[hidden email]
http://www.google.com.br/profiles/marcoandre


[As partes desta mensagem que não continham texto foram removidas]

Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Leonardo Santagada
2010/9/27 Marco André Lopes Mendes <[hidden email]>:
> Valeu Leo, vou olhar cada ponto com carinho.
>
> Existe alguma documentação de como as estruturas de dados nativas de Python
> são implementadas internamente?

Não que eu saiba mas vamos lá:

Strings são implementadas no arquivo Objects\stringobject.c:
PyObject *
PyString_FromStringAndSize(const char *str, Py_ssize_t size)
{
    register PyStringObject *op;
...
    /* Inline PyObject_NewVar */
    op = (PyStringObject *)PyObject_MALLOC(PyStringObject_SIZE + size);
...
    PyObject_INIT_VAR(op, &PyString_Type, size);
...
    if (str != NULL)
        Py_MEMCPY(op->ob_sval, str, size);

Logo, strings são um array de char.

Tuplas definidas em Object\tupleobject.c:
PyObject *
PyTuple_New(register Py_ssize_t size)
{
    register PyTupleObject *op;
    Py_ssize_t i;
...
    op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
...
    for (i=0; i < size; i++)
        op->ob_item[i] = NULL;

Logo, tuplas são guardadas num array de ponteiros para PyObject.

E listas no Objects/listobject.c:

PyObject *
PyList_New(Py_ssize_t size)
{
    PyListObject *op;
    size_t nbytes;
...
    nbytes = size * sizeof(PyObject *);
...
    op = PyObject_GC_New(PyListObject, &PyList_Type);
...
    op->ob_item = (PyObject **) PyMem_MALLOC(nbytes);
..
    Py_SIZE(op) = size;

Então, listas tb são arrays de ponteiros para PyObject.

No fim as 3 estruturas são guardadas em um array, no caso das strings
eles são arrays de char (e em unicode eu suponho de wchar (em UCS2 ou
UCS4 dependendo de como foi compilado o python)).

Mas é um detalhe, pois por exemplo embora a lista seja um array ela
não leva O(n) para inserir um novo item, pq ela overaloca cada vez q
tu insere alguma coisa o que faz com que a performance de inserção
seja de O(1) amortizado.

Já que eu to com o arquivo aberto olha como isso é feito:
static int
list_resize(PyListObject *self, Py_ssize_t newsize)
{
    PyObject **items;
    size_t new_allocated;
    Py_ssize_t allocated = self->allocated;

    /* Bypass realloc() when a previous overallocation is large enough
       to accommodate the newsize.  If the newsize falls lower than half
       the allocated size, then proceed with the realloc() to shrink the list.
    */
    if (allocated >= newsize && newsize >= (allocated >> 1)) {
        assert(self->ob_item != NULL || newsize == 0);
        Py_SIZE(self) = newsize;
        return 0;
    }

    /* This over-allocates proportional to the list size, making room
     * for additional growth.  The over-allocation is mild, but is
     * enough to give linear-time amortized behavior over a long
     * sequence of appends() in the presence of a poorly-performing
     * system realloc().
     * The growth pattern is:  0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
     */
    new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6);

    /* check for integer overflow */
    if (new_allocated > PY_SIZE_MAX - newsize) {
        PyErr_NoMemory();
        return -1;
    } else {
        new_allocated += newsize;
    }

    if (newsize == 0)
        new_allocated = 0;
    items = self->ob_item;
    if (new_allocated <= ((~(size_t)0) / sizeof(PyObject *)))
        PyMem_RESIZE(items, PyObject *, new_allocated);
    else
        items = NULL;
    if (items == NULL) {
        PyErr_NoMemory();
        return -1;
    }
    self->ob_item = items;
    Py_SIZE(self) = newsize;
    self->allocated = new_allocated;
    return 0;
}


ps: Saco que o python não está no github, senão poderia mandar links
para cada linha de código lá e não precisaria ficar colando grandes
trechos de código aqui.

--
Leonardo Santagada
Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Roger Demetrescu
2010/9/27 Leonardo Santagada <[hidden email]>:
> 2010/9/27 Marco André Lopes Mendes <[hidden email]>:

<cruel cut>

> ps: Saco que o python não está no github, senão poderia mandar links
> para cada linha de código lá e não precisaria ficar colando grandes
> trechos de código aqui.

Isso aqui não serve ?

http://hg.python.org/cpython/file/61042c81893d/Objects/stringobject.c#l51


Claro que se pudesse ter um highlight de um bloco de código seria melhor...  :)


Abs

Roger
Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Luciano Ramalho
In reply to this post by Leonardo Santagada
2010/9/27 Leonardo Santagada <[hidden email]>:

> 2010/9/27 Marco André Lopes Mendes <[hidden email]>:
>> Valeu Leo, vou olhar cada ponto com carinho.
>>
>> Existe alguma documentação de como as estruturas de dados nativas de Python
>> são implementadas internamente?
>
> Não que eu saiba mas vamos lá:
>
> Strings são implementadas no arquivo Objects\stringobject.c:
> PyObject *
> PyString_FromStringAndSize(const char *str, Py_ssize_t size)
> {
>    register PyStringObject *op;
> ...
>    /* Inline PyObject_NewVar */
>    op = (PyStringObject *)PyObject_MALLOC(PyStringObject_SIZE + size);
> ...
>    PyObject_INIT_VAR(op, &PyString_Type, size);
> ...
>    if (str != NULL)
>        Py_MEMCPY(op->ob_sval, str, size);
>
> Logo, strings são um array de char.
>
> Tuplas definidas em Object\tupleobject.c:
> PyObject *
> PyTuple_New(register Py_ssize_t size)
> {
>    register PyTupleObject *op;
>    Py_ssize_t i;
> ...
>    op = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
> ...
>    for (i=0; i < size; i++)
>        op->ob_item[i] = NULL;
>
> Logo, tuplas são guardadas num array de ponteiros para PyObject.
>
> E listas no Objects/listobject.c:
>
> PyObject *
> PyList_New(Py_ssize_t size)
> {
>    PyListObject *op;
>    size_t nbytes;
> ...
>    nbytes = size * sizeof(PyObject *);
> ...
>    op = PyObject_GC_New(PyListObject, &PyList_Type);
> ...
>    op->ob_item = (PyObject **) PyMem_MALLOC(nbytes);
> ..
>    Py_SIZE(op) = size;
>
> Então, listas tb são arrays de ponteiros para PyObject.
>
> No fim as 3 estruturas são guardadas em um array, no caso das strings
> eles são arrays de char (e em unicode eu suponho de wchar (em UCS2 ou
> UCS4 dependendo de como foi compilado o python)).
>
> Mas é um detalhe, pois por exemplo embora a lista seja um array ela
> não leva O(n) para inserir um novo item, pq ela overaloca cada vez q
> tu insere alguma coisa o que faz com que a performance de inserção
> seja de O(1) amortizado.
>
> Já que eu to com o arquivo aberto olha como isso é feito:
> static int
> list_resize(PyListObject *self, Py_ssize_t newsize)
> {
>    PyObject **items;
>    size_t new_allocated;
>    Py_ssize_t allocated = self->allocated;
>
>    /* Bypass realloc() when a previous overallocation is large enough
>       to accommodate the newsize.  If the newsize falls lower than half
>       the allocated size, then proceed with the realloc() to shrink the list.
>    */
>    if (allocated >= newsize && newsize >= (allocated >> 1)) {
>        assert(self->ob_item != NULL || newsize == 0);
>        Py_SIZE(self) = newsize;
>        return 0;
>    }
>
>    /* This over-allocates proportional to the list size, making room
>     * for additional growth.  The over-allocation is mild, but is
>     * enough to give linear-time amortized behavior over a long
>     * sequence of appends() in the presence of a poorly-performing
>     * system realloc().
>     * The growth pattern is:  0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
>     */
>    new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6);
>
>    /* check for integer overflow */
>    if (new_allocated > PY_SIZE_MAX - newsize) {
>        PyErr_NoMemory();
>        return -1;
>    } else {
>        new_allocated += newsize;
>    }
>
>    if (newsize == 0)
>        new_allocated = 0;
>    items = self->ob_item;
>    if (new_allocated <= ((~(size_t)0) / sizeof(PyObject *)))
>        PyMem_RESIZE(items, PyObject *, new_allocated);
>    else
>        items = NULL;
>    if (items == NULL) {
>        PyErr_NoMemory();
>        return -1;
>    }
>    self->ob_item = items;
>    Py_SIZE(self) = newsize;
>    self->allocated = new_allocated;
>    return 0;
> }


Valeu pelas análises, Leonardo. É interessante como a implementação é
pragmática, com uso de arrays para listas etc. A sobrealocação que o
Python faz é tão eficiente que na prática hoje em dia nem vale mais a
pena montar strings de forma incremental fazendo append em uma lista e
join no final, porque a abordagem "naive" de fazer s += parte é tão ou
mais eficiente quanto (não tenho tempo de repetir os benchmarks agora,
mas já fiz uma vez e a minha conclusão foi essa).

Esse foi um dos resultados do famoso sprint "need for speed" que
aconteceu anos atrás para implementar melhorias de desempenho no
CPython.

Só mais uma coisa: o que é O(1) amortizado é a inserção no final, por
causa da sobrealocação. Nos arrays, a inserção no meio ou no início
tem que ser O(n), né?


--
Luciano Ramalho
programador repentista || stand-up programmer
Twitter: @luciano
Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Leonardo Santagada
2010/9/28 Luciano Ramalho <[hidden email]>:
> Só mais uma coisa: o que é O(1) amortizado é a inserção no final, por
> causa da sobrealocação. Nos arrays, a inserção no meio ou no início
> tem que ser O(n), né?
>

É verdade. O código tu pode ver aqui na função insl
http://hg.python.org/cpython/file/61042c81893d/Objects/listobject.c#l220
e a parte que faz o algoritmo ficar O(n) é
http://hg.python.org/cpython/file/61042c81893d/Objects/listobject.c#l245:

for (i = n; --i >= where; )
         items[i+1] = items[i];

Onde n é o tamanho da lista, where é o ponto de inserção e items é o
array com os items da lista. Se where não for igual a n então esse
loop tem que mover os items. Logo, inserir em qualquer lugar que não
no fim da lista é uma má ideia em python e por isso que hoje em dia
tem coisas tipo collections.dequeue pra inserção no começo e no fim
serem rápidas.

Alguém lembra se existe alguma estrutura de dados que a inserção no
meio é rápida?

obs: Roger: É eu tava vendo o código no viewvc. No hg tem link mas ai
não tem syntax highlight o que atrapalha pra ler código em C numa
lista de programadores python (eu incluso). Será que tem como
consertar isso? Acho que o Trac poderia ser usado só para isso.

--
Leonardo Santagada
Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Roger Demetrescu
2010/9/28 Leonardo Santagada <[hidden email]>:
> 2010/9/28 Luciano Ramalho <[hidden email]>:
> obs: Roger: É eu tava vendo o código no viewvc. No hg tem link mas ai
> não tem syntax highlight o que atrapalha pra ler código em C numa
> lista de programadores python (eu incluso). Será que tem como
> consertar isso? Acho que o Trac poderia ser usado só para isso.

Atualmente, creio que só com o Trac mesmo....

Veja esse exemplo: a mesma linha de código de um arquivo do SQLAlchemy:


http://hg.sqlalchemy.org/sqlalchemy/file/0e6fa4924a58/lib/sqlalchemy/pool.py#l28

http://www.sqlalchemy.org/trac/browser/lib/sqlalchemy/pool.py#L28


A do track é mais "bunitinha"..  :)
Reply | Threaded
Open this post in threaded view
|

Re: Palestra sobre uso de Python em um curso de Ciência da Computação

Roger Demetrescu
2010/9/28 Roger Demetrescu <[hidden email]>:

> 2010/9/28 Leonardo Santagada <[hidden email]>:
>> 2010/9/28 Luciano Ramalho <[hidden email]>:
>> obs: Roger: É eu tava vendo o código no viewvc. No hg tem link mas ai
>> não tem syntax highlight o que atrapalha pra ler código em C numa
>> lista de programadores python (eu incluso). Será que tem como
>> consertar isso? Acho que o Trac poderia ser usado só para isso.
>
> Atualmente, creio que só com o Trac mesmo....
>
> Veja esse exemplo: a mesma linha de código de um arquivo do SQLAlchemy:
>
>
> http://hg.sqlalchemy.org/sqlalchemy/file/0e6fa4924a58/lib/sqlalchemy/pool.py#l28
>
> http://www.sqlalchemy.org/trac/browser/lib/sqlalchemy/pool.py#L28
>
>
> A do track é mais "bunitinha"..  :)


Em tempo: o mercurial vem sim com uma extensão que permite highlighing
de arquivos com extensões conhecidas:

http://mercurial.selenic.com/wiki/HighlightExtension

Fiz um teste com o "hg serve" num repositório legal e funcionou legalzinho.  :)