python + delphi: um relacionamento que está dando certo
Post on 31-May-2015
2.634 Views
Preview:
TRANSCRIPT
1
Python + DelphiUm relacionamento que está dando certo (Python Cases)
Fernando Macedo
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
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
4
O que?
Caso da Esys na utilização de Python no Colibri 8
Integração entre Python e Delphi
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
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
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
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.
9
Por que Python?
Expressividade Legibilidade de código Codificação rápida Vasta coleção de bibliotecas Recurso X, Y, Z
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.
11
Resultados
Premissas atendidas
Plus: Extensão e customização por clientes
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 %}
13
Integração
Desktop GUI◦ http://www.python.org/about/apps/
Scripting
Extending◦ Upgrade tecnológico
14
DriverPython
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;
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;
17
O que pode ser feito?
Módulos *.pyd
Executar códigos Python;
Expor classes Delphi ao Python;
18
Problemas e riscos CTypes
◦ Manifesto
Pessoal◦ Disseminar conhecimento à equipe
Continuidade do projeto Python4Delphi◦ Suporte a futuras versões
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
20
Links
http://code.google.com/p/python4delphi/
http://code.google.com/p/pyscripter/
21
Obrigado!
Dúvidas?
Contatos
◦ fgmacedo@gmail.com◦ @fgmacedo◦ www.esys.com.br
22
top related