python + delphi: um relacionamento que está dando certo

22
Python + Delphi Um relacionamento que está dando certo (Python Cases) 1 Fernando Macedo

Upload: fernando-macedo

Post on 31-May-2015

2.634 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Python + Delphi: Um relacionamento que está dando certo

1

Python + DelphiUm relacionamento que está dando certo (Python Cases)

Fernando Macedo

Page 2: Python + Delphi: Um relacionamento que está dando certo

2

Quem? Fernando Macedo

◦ Desenvolvedor Delphi/Python◦ Bacharel em Sistemas de Informação (Faculdade

Impacta de Tecnologia)◦ Mestrando em Gestão do Conhecimento e Sistemas

Inteligentes (IPEN-USP)◦ Membro da APyB

Page 3: Python + Delphi: Um relacionamento que está dando certo

3

Onde? Esys Colibri

◦ 23 anos de experiência◦ 15.000 clientes◦ 35.000 PDVs instalados◦ 100 revendedores em todo o País◦ Suporte 24/7 em todo o Brasil◦ Atualização constante às novas leis

Page 4: Python + Delphi: Um relacionamento que está dando certo

4

O que?

Caso da Esys na utilização de Python no Colibri 8

Integração entre Python e Delphi

Page 5: Python + Delphi: Um relacionamento que está dando certo

5

Cenário Software PDV

◦ Mesa◦ Balcão◦ Ficha◦ Entrega

Contexto◦ Empresa tradicional - 23 anos◦ Aplicação comercial◦ Ambiente Windows

(MS, C# e Delphi)◦ Nova versão

Page 6: Python + Delphi: Um relacionamento que está dando certo

6

Os problemas Módulo de relatórios

◦ Formatação embutida no aplicativo◦ Manutenção difícil

Integração com terceiros

◦ Implementações específicas

Page 7: Python + Delphi: Um relacionamento que está dando certo

7

  

{ Layout da linha levando em conta qtd fracionada }

    TmpStr := '%s%-2.0f ' + Trim(strFormatDesc);

    if QtdeFracionada then

      TmpStr := '%s%3.3f ' + Trim(strFormatDesc);

 

    TmpStr := Format(TmpStr, [strTagIni, fQuantidade, strDescr]);

 

    lstMarchador.Add(TrimAcentos(Tmpstr) + strTagFim);

    sLineMarchadorAgrup:= sLineMarchadorAgrup+';'+TrimAcentos(Tmpstr) + strTagFim;

 

    if dmVenda.qryColibriBN_LUGARMESA.AsBoolean then

      TmpStr := TmpStr + FormatFloat(' #0', MyMaterial[i].LugarMesa);

 

    TmpStr := TmpStr + strTagFim;

    lstRemota.Add(TrimAcentos(TmpStr)); 

Relatórios texto: Antes

Page 8: Python + Delphi: Um relacionamento que está dando certo

8

O desafio dos relatórios Premissas

◦ Gerar a mesma configuração de arquivos;◦ Simples;◦ Suportar troca em run-time;◦ Suportar loops aninhados, do tipo mestre-detalhe;◦ Mesma origem dos dados para os relatórios visuais;◦ Ter toda a infra construída em dias, e não em

meses.

Page 9: Python + Delphi: Um relacionamento que está dando certo

9

Por que Python?

Expressividade Legibilidade de código Codificação rápida Vasta coleção de bibliotecas Recurso X, Y, Z

Page 10: Python + Delphi: Um relacionamento que está dando certo

10

A linguagem certa

E não sabendo que era impossível, Python foi lá e fez!

Solução da infra em 2 dias!

Ganhou moral.

Page 11: Python + Delphi: Um relacionamento que está dando certo

11

Resultados

Premissas atendidas

Plus: Extensão e customização por clientes

Page 12: Python + Delphi: Um relacionamento que está dando certo

12

Depois{% extends "relatorio-base.template" %}{% set pag = impressaoNumero %}{% set tot = impressaoTotal%} {%- block relatorio %}{% block cabecalho scoped -%}{% filter compexp %}Conta {{venda.codigoDoTicket}} {{'=' * 5}} {{pag}}/{{tot}}{% endfilter %}Mov.: {{dataContabil}} - Imp.: {{data}} - {{hora}}hPDV: {{maquina|semAcentos}}Caixa: {{caixa|semAcentos}}Garcom: {{garcom|semAcentos}}SEQ: {{venda.sequencia}}{%- endblock cabecalho %} %- block corpo -%}{{ render_cancelado() }}{% for item in itens -%}{{ render_item(item) }}{% endfor -%}{{ render_cancelado() }}{%- endblock corpo %}

Page 13: Python + Delphi: Um relacionamento que está dando certo

13

Integração

Desktop GUI◦ http://www.python.org/about/apps/

Scripting

Extending◦ Upgrade tecnológico

Page 14: Python + Delphi: Um relacionamento que está dando certo

14

DriverPython

Page 15: Python + Delphi: Um relacionamento que está dando certo

15

Uso do P4Dtype

  EngineDoPython = class

  private class var

    _Eng: TPythonEngine;

    _IO: TPythonInputOutput;

    _Dir: string;

  private const

    NOME_DLL = 'python27.dll';

    NOME_BIBLIOTECA = 'python27.zip';

  public

[...]

    class procedure AdicionarDiretorioAoPath(umDiretorio: string);

    class property Engine: TPythonEngine read ObterEngine;

    class property DirDoPython: string read _DirDoPython write _DirDoPython;

    class property Iniciado: Boolean read ObterIniciado;

    class property IO: TPythonInputOutput read _IO;

  end;

Page 16: Python + Delphi: Um relacionamento que está dando certo

16

Uso do P4Dclass constructor EngineDoPython.Create;

begin

  _Eng := TPythonEngine.Create(nil);

  _IO := TPythonInputOutput.Create(nil);

  _Eng.DllName := NOME_DLL;

  _Eng.PyFlags := _Eng.PyFlags + [pfIgnoreEnvironmentFlag];

  _Eng.IO := _IO;

end;

class procedure EngineDoPython.Iniciar;

begin

  _Eng.DllPath := arquivos.NormalizarPasta(DiretorioDoPython);

  arquivos.ExecutarNaPasta(DiretorioDoPython,

    procedure begin

      _Eng.LoadDll();

      SysModule.path.append(_Eng.DllPath);

      SysModule.path.append(_Eng.DllPath + NOME_BIBLIOTECA);

    end);

end;

Page 17: Python + Delphi: Um relacionamento que está dando certo

17

O que pode ser feito?

Módulos *.pyd

Executar códigos Python;

Expor classes Delphi ao Python;

Page 18: Python + Delphi: Um relacionamento que está dando certo

18

Problemas e riscos CTypes

◦ Manifesto

Pessoal◦ Disseminar conhecimento à equipe

Continuidade do projeto Python4Delphi◦ Suporte a futuras versões

Page 19: Python + Delphi: Um relacionamento que está dando certo

19

Minhas impressões A ilusão de que verificação de tipos em

tempo de compilação resolve todos os problemas

Python◦ Oferece alto nível de abstração◦ Escreve-se menos código◦ Maior produtividade◦ Python não se põe entre o desenvolvedor e o

problema

Page 20: Python + Delphi: Um relacionamento que está dando certo

20

Links

http://code.google.com/p/python4delphi/

http://code.google.com/p/pyscripter/

Page 21: Python + Delphi: Um relacionamento que está dando certo

21

Obrigado!

Dúvidas?

Contatos

[email protected]◦ @fgmacedo◦ www.esys.com.br

Page 22: Python + Delphi: Um relacionamento que está dando certo

22