Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

Protheus :: Advpl :: tSocketClient e Harbour Inet Server

No post anterior, Protheus :: Advpl :: tSocketClient, demonstrei a pedido do nosso amigo Daniel, como usar a Classe tSocketClient para efetuar conexões a um serviço HTTP. Agora um exemplo mais real e de acordo com o questionamento original; provavelmente ninguém irá conectar-se a um serviço HTTP via Socket uma vez que temos os protocolos correspondentes no Protheus: Usariamos HttpGet() e HttpPost() para esse fim.

Em função disto, peguei emprestado um código do Harbour Projet (por Giancarlo Niccolai c:\hb31\tests\server.prg $Id: server.prg 16704 2011-05-01 20:22:54Z vszakats $), fiz algumas modificações, renomeei para c:\u_tSocketClient\hb_socketSrv.prg e criei o hb_socketSrv.exe.

Neste novo exemplo executaremos trocas de mensagens entre o Protheus, através da Classe tSocketClient, e o Harbour Inet server (que denonimei de hb_socketSrv). Nossa aplicação irá, primeiro, “acordar” o Harbour Inet Server e depois começarão as trocas de mensagens até que um “quit” seja enviado. Como no exemplo anterior as mensagens trocadas entre o Protheus e o Harbour serão enviadas para o Console, através da função ConOut() e, também, para Browser padrão através da classe tVarInfo. Teremos algo como:

image

Os Métodos da Classe tSocketClient são apresentados…

image

Ao executar a fução u_ptSocketC ela irá “acordar” o Harbour Inet Server de acordo com a constante:

image

que , por padrão, “escutará na porta”:

image

o Harbour Inet Server Desperta de seu sonho e , …

image

… finalmente, começarão as trocas de mensagens entre o Protheus e o Harbour Inet Server.

image

Considerando as características do exemplo, recomendo, para testes, que o Protheus Server/Client estejam na mesma máquina. O Programa de Exemplo poderá ser modificado, caso queira simular uma conexão “Client/Server”.

Se desejar alterar o programa hb_socketSrv.prg, utilize os procedimentos abaixo para compilar e gerar o executável para o seu Harbour Inet Server. Para o Download do Harbour acesse: “Harbour Project

image

image

Compacte o Executavel usando o upx.exe

image

image

O Harbour pode ser uma alternativa às limitações do Protheus no que diz respeito a criar “novas tecnologias” e/ou “integrações”. Podemos utilizá-lo como ferramenta auxíliar para “Softwares acessórios”. A Filosofia do Harbour é “write once, compile anywhere (escreva uma vez, compile em qualquer lugar)”. A integração com os Objetos COM do Harbour é muito melhor e mais intuitiva que a do protheus, então, se desejar criar um TOII customizado (HBOII), recomendo essa ferramenta.

Na realidade recomendo Harbour para quem ainda está se iniciando em C e não se sente seguro em escrever uma aplicação completa nessa linguagem (uma vez que o código final é gerado em C), para aqueles que querem que o mesmo código execute em diversas plataformas, para aqueles que queiram se sentir confortáveis ao programar (A sintaxe base do Harbour é exatamente igual à do ADVPL, dada as devidas proporçoes e particularidades) ou apenas como ferramente e/ou objeto de estudo.

Para baixar os códigos utilizados nos exemplos, clique aqui. Já para as dependências, tVarInfo, por exemplo, siga o link: Protheus :: Advpl :: Usando GetFuncArray, GetApoInfo e VarInfo.

[]s

иαldσ dj

Comentários

  1. Naldo, boa tarde.
    Sabe se ha a possibilidade de se recuperar uma classe compilada em um RPO?
    Ela foi desenvolvida por mim mesmo, porem jah nao tenho mais o fonte, mas ainda utilizo ela no RPO.

    Obrigado :)

    ResponderExcluir
  2. Valeu Naldo,

    Ajudou bastante...

    Abrass

    Daniel

    ResponderExcluir
  3. Ferne$, ter tem... mas, infelizmente, essa eu não posso divulgar... A Totvs até faria isso por você, mas a um preço bem salgado. Recomendo Reescrever.

    []s

    иαldσ dj

    ResponderExcluir
  4. aaaaaaa seria fantastico se mostrasse como, mas voce tem seus motivos, rsrs
    ja estou reescrevendo, imaginei mesmo que fosse salgado para eles fazerem isto, e como fui eu mesmo quem fez, ta facil... soh perdendo um tempinho aqui..
    Mesmo assim valeu.

    Obs.: Fiquei "curiosaço" nessa solução, voce eh foda naldo... abraços.

    ResponderExcluir
  5. bom, sei que jah falou que nao pode passar, mas como fiquei curioso... alguma dica de pesquisa e/ou leitura para chegar na solucao? :)))))

    ResponderExcluir
  6. Naldo safadao,

    cara sabe como decompilar fontes do RPO.
    Por acaso o segredo esta na classe que manipula o RPO?

    O esta no HABOUR que me da flexibilidade?

    Atualmente nao tenho tempo para me dedicar a essa pesquisa..

    'Há um caminho, nao trilhado por ninguém que leva a algum lugar e para descobrir esse lugar você mesmo deve faze-lô.'

    иαldσ, as vezes acho que sou seu fã.
    mas aí me pergunto, todos os caras que ralam/ralaram na TOTVS devem ter a moral.

    Só não leve esse conhecimento para o tumulo, deixe-o aqui mesmo onde vc o conseguiu, nem que seja com uma pessoa.

    ResponderExcluir
  7. Naldo,

    Fiz essa rotina com a sua ajuda, por acaso será que temos como melhorar ela, ou seja, passar ela inteira para o Protheus sem depender de um arquivo de lotes?

    segue link: http://danielratk.blogspot.com/2011/11/validacao-campo-de-e-mail-no-protheus.html

    Abraços

    Daniel

    ResponderExcluir

Postar um comentário

Postagens mais visitadas