-
Posts
1,609 -
Joined
-
Last visited
-
Days Won
88
Everything posted by emotta
-
Acredito que aqui seja o local correto http://fivewin.com.br/index.php?/forum/17-off-topic/
-
Os caras da KasperskyLab fizeram um descompilador (x)Harbour Esses caras são fodas mesmo hein
-
Tem algo no seu fonte, programa inicial ou no .BC que chama INV? Se você também colocar após ter feito o que começou a dar esse erro ajuda. Pelo que estou deduzindo é algo na compilação e com relação ao nome do programa chamado, mas como nunca vi esse tipo de erro preciso de mais informações.
-
LGPD é só informação que identifica uma pessoa ou a torna identificavel. Neste caso se a informação se referir somente ao carro, sem qualquer informação que consiga identificar uma pessoa ou a tornar identificável não tem relação a LGPD. Exemplo de informação que identifica uma pessoa: CPF, RG, PIS, etc Exemplo que torna uma pessoa identificável: GERENTE FINANCEIRO DA EMPRESA XXXXXXXXXXXXXXXX Então seguindo essa lógica é só analisar a informação retornada pela API pra saber se tem ou não relação com a LGPD
-
Outro detalhe é que o seu exemplo acima é totalmente diferente da necessidade do início do post. No seu exemplo é só usar o Lock de registro da linguagem que é mais eficiente. O semáforo que me refiro serve muito bem, e sem falhas de gravação, para a situação de checagem se ainda está disponível após a confirmação e antes da gravação. Só uma observação, tenho um sistema de processamento em fila usando essa técnica de semáforo um pouco modificada para 200 clientes com acesso simultâneo e funcionando sem QQ problema, inclusive qdo o sistema cai por falha de conexão com o banco ele retoma o processo sem intervenção manual e ajuste de base. Vai por mim, funciona e bem.
-
Não vai travar nada pra consulta Na gravação é feito um por vez, pense em quanto tempo demora desde o append até o commit, vms imaginar q demora 1 décimo de segundo. Neste caso os 18 que estão consultando o farão sem problemas, lembre-se o Lock é só pra gravação, e os outros dois q estão gravando um vai esperar 1 décimo de segundo e o outro vai esperar 2 décimos de segundo ou melhor um piscar de olhos . Lembrando que o Lock a que me refiro é a técnica de semáforo que expus acima.
-
Vou tentar detalhar melhor: Continuando o exemplo do Edu o funcionando seria da seguinte forma: - Quando o cliente ligar para agendar o horário as 09:00 então se deve criar o semafaro com o seguinte nome "AGENDA.SMF". Esse seria o nome do arquivo do semafaro - Após o comando ABRESEM se faz uma nova checagem na tabela para ver se o horário está mesmo liberado. Se não tiver mais disponivel o semafaro deve ser fechado (FECHASEM) e informado que o horário foi preenchido para outro - Se o horário ainda estiver liberado o sistema prossegue com a gravação e após o commit se executa o FECHASEM liberando o semafaro - Se antes do COMMIT ocorrer algum erro e a instancia cair o semafaro é liberado automaticamente pois ao fechar a aplicação o handle do arquivo é liberado. O processo desta forma é infalivel pois vc faz um LOCK geral, ou seja, ninguem mais grava até o semafaro ser liberado, e só então checa a disponibilidade do horário. Entre o ABRESEM e o FECHASEM ninguem conseguirá gravar por isso é importante que nesse trecho de código não exista pontos de interrupção como MSGSTOP por exemplo. Esse conceito de semafaro (LOCK) é muito usado em sistemas multithreads para que a aplicação não gere GPF no acesso a variaveis, pois se duas threads tentarem gravar a mesma variavel ao mesmo tempo é gerado GPF. Quem já mexeu com threads no xHarbour sabe do que estou falando, em Harbour não existem esses GPFs pq a própria linguagem faz o lock pra vc (alem de outros controles). *OBS: os semafaros em multithreads não são em arquivos, é feito de outra forma, eu apenas quis exemplificar o conceito.
-
se a instancia cai o semáforo é liberado, não precisa ter acerto de dados nesse sentido. Então se a instancia cair após aberto o semáforo e antes de finalizar a transação que posteriormente libera normalmente, apesar do arquivo criado a outra instancia vai conseguir criar o semáforo pra ela.
-
Entendi a sua solução proposta que resolve mas gera esses efeitos colaterais que eu não gosto muito por causa dos efeitos. Na solução de semafaro o handle é liberado se a instancia cair.
-
Não aconselho a fazer isso pois a longo prazo vai fatalmente acabar resultando em registros marcados como "travados" mas que na realidade não estão pois ocorreu algum crash antes de retirar o flag de travado. O ideal é fazer o controle fora da tabela.
-
Sugiro criar um semafaro antes de checar a existencia do registro. Você checa a existencia e não existindo você grava e libera o semafaro. Se já existir vc libera o semafaro e não grava e avisa o usuário que esse horário já está reservado para outra pessoa. O semafaro você pode fazer por arquivo mesmo, segue abaixo um exemplo de funcao de semafaro que uso a muitos anos e com sucesso Function u_Teste() Local nSmf While .t. If !MsgYesNo("Deseja continuar o teste") Exit EndIf nHSmf := AbreSem() MsgStop("vou gravar") FechaSem(nHSmf) MsgStop("semafaro liberado") EndDo Return Static Function AbreSem(cFile) Local nHSem If cFile == nil cFile := "semafaro.smf" EndIf While (nHSem:=FCreate(cFile))==-1 fErase(cFile) Inkey(.1) EndDo Return nHSem Static Function FechaSem(nHSem,cFile) If cFile == nil cFile := "semafaro.smf" EndIf FClose(nHSem) FErase(cFile) Return
-
Pelo que eu vi vc identifica se é uma variavel pública, private criada na função atual, private criada em funções anteriores, local ou testar se a variável existe
-
conosco já aconteceu isso o problema era o uso de uma dll hbcomm (alguma coisa parecida) como era algo que já não estavamos utilizando removemos toda referencia a isso no sistema e passamos a não precisar mais e ai parou o problema
-
Se vc tiver a possibilidade recomendo usar o VS CODE xDev infelizmente foi descontinuado
-
SQLLIB é a do Vailton? Eu não a usei mas acredito que não tenha problema, basta usar o driver ODBC, mas digo isso na teoria. Eu uso na boa o SQLRDD com o express, inclusive as ultimas versões, normalmente.
-
Desabilitar ordenação do JSON com a hb_jsonencode()
emotta replied to alex2002's topic in Programação
Fiz essa função a alguns anos, antes de conhecer a padrão do xHarbour. Ela tem algumas limitações e não aconselho usar, a padrão da linguagem é a melhor, mas realmente se precisar que seja ordenado veja o que essa te ajuda. No exemplo abaixo o resultado é exatamente o q vc pediu #define CRLF Chr(13)+Chr(10) Function u_Teste() Local hJson := Hash() Local cJSon HSetAACompatibility(hJson,.t.) hJson['campo3'] := 'teste 3' hJson['campo1'] := 'teste 1' hJson['campo2'] := 'teste 2' cJSon := _u_HashToJson_OLD(hJson) MsgStop(cJSon) Return Static Function _u_HashToJson_OLD(hPar) Local cParam := "{"+CRLF Local nI Local nJ Local uVal2 Local uVal Local aKey Local cKey Local nRealPos aKey := hGetKeys(hPar) For nI:=1 to Len(aKey) If HGetAACompatibility(hPar) nRealPos := HaaGetRealPos( hPar, nI ) cKey := HGetKeyAt( hPar, nRealPos ) Else cKey := aKey[nI] EndIf uVal := hPar[cKey] If ValType(uVal)=="C" uVal := '"'+Alltrim(uVal)+'"' ElseIf ValType(uVal)=="N" uVal := Alltrim(Str(uVal)) ElseIf ValType(uVal)=="D" uVal := '"'+DtoC(uVal)+'"' ElseIf ValType(uVal)=="A" uVal2 := "["+CRLF For nJ := 1 to Len(uVal) uVal2 += _u_HashToJson_OLD(uVal[nJ]) If ! nJ == Len(uVal) uVal2 += "," EndIf Next uVal2+="]"+CRLF uVal := uVal2 ElseIf ValType(uVal)=="H" uVal := _u_HashToJson_OLD(uVal) ElseIf Empty(uVal) uVal := '""' EndIf cParam += '"'+cKey+'":'+uVal If ! nI == Len(aKey) cParam += "," EndIf cParam += CRLF Next cParam += '}'+CRLF Return cParam -
Desabilitar ordenação do JSON com a hb_jsonencode()
emotta replied to alex2002's topic in Programação
Alex o jeito é escrever uma HB_JSONENCODE na mão, mas não aconselho isso. Agora apenas por curiosidade, pq vc precisa que seja ordenado? Que eu não sabe o padrão JSon não exige que esteja ordenado. -
mas falando sério agora, embora de forma errada (senti uma rincha pessoal) o que o Eric falou procede mesmo, alterar classes do fivewin é buxa depois pra atualizar. O ideal é quando precisar fazer algo assim criar uma classe própria herdando a original e mesmo assim quando atualizar a versão do fivewin corrigir o método que foi customizado.
-
Curriculum com senha? A vaga era pra programador ou pra agende secreto? ahahahahha
-
Eu sei que essa não é a resposta para o seu problema mas eu recomendo mudar para VSCODE. Estude e assim que possivel faça essa migração. Falo por experiência própria, no ano passado eu fiz essa migração de xDev para VSCODE pra mim e minha equipe e foi excelente. Isso não tem nada a ver com o xDev que é um excelente editor mas foi descontinuado. Como bonus com o VSCODE vem a integração com o GIT, se não utiliza o GIT para o controle de versão de fontes fica a dica. Foi outra boa experiencia que tivemos ao migrar do Team Foundation para o GIT. Abraços
-
essa lei é totalmente relacionada com programação e todos temos que ficar atentos pq a punição é multa e multa por infração. Um orgão está sendo criado pra acompanhar isso ANPD dizer q isso não tem relação com programação ou criticar quem se dispõe a debater um assunto tão importante mostra um desconhecimento grande do que faz parte ao nosso trabalho e tem relação direta com a qualidade do serviço que entregamos ao nosso cliente. Mas vamos ao mais importante, isso que ocorreu não tem importancia... Vamos trocar sim informações aqui neste tópico a menos que o cara que de fato manda no forum, que é o Gilmer, tiver algum impedimento. Gilmer, seria até interessante se vc puder se manifestar aqui sobre o que vc sabe a respeito da LGPD e tb se considera que esse assunto vale a pena ser discutido aqui no forum ou não. Abraços
-
mas não fui eu que criei o tópico, se não concordou reclame com quem criou não comigo... é cada doido q me aparece....
-
a questão não é confiar, a Lei exige que tenha um responsável... basta ler e verá... um advogado vai te dar orientação legal mas não técnica, ele vai dizer o que vc precisa colocar me contrato mas não o que tecnicamente precisa fazer... se vc é funcionário pode ficar tranquilo, essa responsabilidade não é sua, é só seguir as ordens de quem precisa resolver isso.... agora se vc é dono é bem preocupante esse seu discurso, como falei, está completamente por fora do que está escrito na lei.
-
E qdo for restaurado e cair na mão do programador? Se ele vazar os dados vc se ferrou A poha não tem besteira, se vc acha isso é pq ainda não entendeu a lei. Vc pode até achar q a lei é exagerada, desnecessário, cheia de frescura e mais uma série de coisas que até concordo, mas falar q só colocar senha na hora do backup resolve vc está bem por fora....
-
muito legal esse link, vou ler