thegoodfellas/blogset-br huggingface dataset:
exemplo, se voce possui um WebPanel e precisa carregar um component, o comando Create e suficiente para enviar para este os parametros necessarios para sua construcao.Desta forma um comando Component1.Object = Comp1.Create(&p1, &p2), vai passar para o objeto Comp1, que e um WebComponent, os parametros &p1 e &p2. E assim o objeto Comp1 sera incluido na interface e apresentar seu conteudo.O problema e que o objeto Comp1 nao possui uma maneira eficaz de enviar para o WebPanel o resultado de algum evento que possa ocorrer. Por exemplo, se este tiver um Grid, ao se selecionar uma linha, nao teremos como envia-la para a pagina principal. Pode-se dizer que utilizavamos algumas tecnicas aleatorias profissionais para fazer isso.Bem, nao tinhamos, agora temos, pois com o Global Events, registramos um evento que ao acontecer disparara uma acao global no sistema, e poderemos interceptar esta acao em nosso WebPanel. Nao fique nervoso, e simples.E mais ou menos assim, registre um novo evento no Global Event, definindo os parametros que utilizara para realizar a comunicacao.Em seguida, para gerar o evento sera necessario 'chamar' este evento, num formato muito parecido com a chamada a um objeto qualquer. Entre parenteses se deve informar o valor a ser transmitido,a como, por exemplo, GlobalEvents.MeuEvent(2). Esta acao e realizada no WebComponent.Esta operacao disparara um evento global, que podera ser interceptado por um WebPanel. Para que isto ocorra sera necessario criar um Event GlobalEvents.MeuEvento, neste WebPanel.Em seguida, uma vez que o evento tenha sido interceptado com Event MeuEvento, sera possivel tomar uma decisao, como por exemplo, se trocar o Comp1 para outra interface qualquer, criando o efeito da Single Page Application. Teriamos varios componentes a serem apresentados em apenas um WebPanel.Um ExemploNo Wiki HowTo: Using Global Events in Web Objects temos um excelente exemplo apresentado pela Sabrina Juarez, inclusive com o XPZ que pode ser baixado e colocado em sua Kb. Neste a Sabrina apresenta uma lista de autores e seus livros, e quando se escolhe algum no Grid a esquerda, os componentes que apresentam os detalhes sao disparados.E um recurso muito interessante e simples de entender. No exemplo, apenas um pequeno detalhe, caso ocorra um erro na carga das imagens, no DataProvider LiteraryWork_DataProvider, mais especificamente nas linhas que carregam as capas dos livros, devem ser comentadas. // LiteraryWorkImage = Link("bodas_de_sangre")ConclusaoO Global Event do GeneXus se mostra um recurso excepcionalmente interessante e com certeza vai se adequar muito bem aos projetos mais ambiciosos de interface.Infelizmente, quanto a eleicao americana, parece que o mundo tambem tem sido influenciado globalmente pela falta de candidatos adequados para que a populacao possa escolher alguem de fato representativo. Os politicos de aqui e de acola estao adotando aquela velha estrategia suja de fechar uma lista de pessoas que infelizmente nao poderiam ser escolhidas, na qual o melhor seria nao escolher ninguem, digamos, que tal o menos pior?Se a tendencia perdurar ate 2018, pode ser que tenhamos um Trump aqui tambem.
Desculpem o trocadilho, mas a piada ja estava pronta, nao resisti, e no final das contas STOP e POST combinam perfeitamente com o assunto que eu quero abordar, e, incrivel, possuem exatamente as mesmas letras. Enfim e necessario PARAR um pouco para pensar no POST.Postando coisasExiste uma caracteristica nos sistemas Web que permite que tenhamos um excelente mecanismo de persistencia nas chamadas ao servidor que consiste no simples ato de colocar uma variavel na interface. Parece pouco, mas ao fazermos isso estamos fazendo com que diversas chamadas para a mesma interface mantenha uma informacao persistente. Por exemplo, se colocarmos o codigo de um produto em uma variavel na interface, se o usuario pressionar um botao Confirmar, por exemplo, o conteudo desta estara disponivel ao evento de usuario, Refresh e Load do nosso programa Genexus, sem que tenhamos que nos preocupar em buscar alguma coisa no banco de dados, por exemplo.Esta e uma caracteristica de um formulario Web, e toda interface Genexus e um FORM por natureza, se voce olhar no codigo fonte suas paginas encontrara uma linha que define o mesmo.<form id="MAINFORM" name="MAINFORM" method="post" ... >Alias POST e uma palavra muito bem escolhida pelo Tim Berners-Lee para representar o que acontece quando o botao Confirmar e pressionado, alias vamos abrir um parenteses aqui, porque gracas a ele temos emprego hoje, rs. Mas enfim, o Tim pensou no seguinte, vou montar uma agencia de correio no navegador do usuario e simplesmente enviar um pacote do tipo SEDEX para o servidor toda vez que ocorrer um Confirmar, e o que tem dentro deste pacote? todas as variaveis da sua interface e seus conteudos, e o tal Confirmar (para nos) e o tal Submit para o Tim. Isso e o tal POST.Neste ponto ele foi categorico ao afirmar que tudo que estiver na interface em forma de variavel devera ser incluido, humm, parece meio radical, mas no final das contas nao temos como dizer ao navegador para nao incluir alguma coisa que eventualmente nao desejamos neste pacote.Enfim, se tudo que e definido na interface em formato variavel e devolvido ao servidor no POST entao deve haver alguma diferenca no tamanho do tal pacote caso tenhamos uma unica e singela variavel ou uma duzia delas na interface nao? E este e o ponto que precisamos parar pra pensar, porque ao colocarmos uma duzia de variaveis na interface estaremos aumentando o preco do SEDEX, pois como sabemos uma carta simples de ate 60g custa apenas um selinho de R$ 1,70, mas um pacotao de 500g vai custar R$9,10, e claro, neste mundo capitalista, tudo custa alguma coisa para alguem, inclusive o passe gratuito de onibus para os estudantes do Passe Livre.Onde esta o custo das coisas?Nosso programa Genexus roda no servidor correto? na interface do usuario roda o resultado do processamento deste programa, correto? Entao temos duas fases na qual ocorrem processamentos, no servidor em primeiro lugar e em segundo lugar no navegador do usuario. Vou recorrer a um desenhinho (meio tosco) para mostrar isso.Neste esquema o usuario solicita alguma coisa ao servidor (1), neste caso temos
a latencia da internet que atrapalha um pouco e vai consumir alguns segundos para que seu pedido chegue. O servidor, quando recebe alguma tarefa, dispara o processamento da mesma (2), e eventualmente ocorrera chamadas ao banco de dados (3) para que alguma informacao adicional seja adicionada. Teremos aqui diversos elementos que contribuirao no custo, desde a capacidade do servidor (memoria, processador), como tambem a quantidade de pedidos que o mesmo responde por segundo, pois muita gente podera estar solicitando coisas simultaneamente, e todas devem ser processadas para serem devolvidas. Mais pedidos simultaneos, mais consumo de recursos do servidor e eventualmente mais problemas de desempenho desta infra-estrutura.Ao termino do processamento comeca o processo da agencia de correios, pois o servidor montara um pacote para enviar ao navegador, e claro, podera ser um pacote pequeno ou grande de acordo do que foi programado, ao termino da montagem o mesmo e enviado ao navegador (4). Se tinhamos uma latencia no item (1) teremos a mesma amplificada pelo tamanho do pacote na fase (4), portanto, se diminuirmos ao maximo esta resposta, sera melhor, pois vamos chegar proximo ao tempo minimo que e exatamente o tempo da solicitacao (1).No navegador teremos que pegar o pacote recebido pelo servidor e processa-lo para transformar numa imagem a ser apresentada para o usuario (5) e se tudo estiver certinho, a mesma sera apresentada na interface (6). Aqui os desenvolvedores normalmente nao se preocupam muito, mas se o usuario estiver rodando um Windows XP com 2Mb de memoria RAM, o desempenho da interface no navegador Nestcape vai ficar bem ruinzinho, se a coisa for muito complexa para a maquininha resolver.O segredo de um bom desempenho ate aqui e diminuir ao maximo o tamanho do pacote entre o navegador e o servidor, pois com isso poderemos melhorar todos os pontos, pois menor resposta = menor necessidade de processamento, menor tamanho do pacote, enfim, o Steve Jobs ja falou isso e alguns ouviram, a simplicidade e tudo.Bom, vamos ao problema. Acontece que se pegarmos o POST do Tim, e colocarmos na equacao teremos algo 'a mais', pois, quando retornarmos ao servidor, passo (1), quando pressionarmos Confirmar vai acontecer que ao tempo de latencia anteriormente avaliado agora teremos que colocar tambem a montagem do pacote no navegador e a transmissao do mesmo ao servidor (1), alem da necessidade de processar o pacote recebido na execucao do script (2).Pacotes do GenexusConsiderando que voce tem usado o Genexus de forma regular e normal, com seus controles Attributes, Grids e FreeStyleGrids, ..., e de vez em quando reclama do desempenho da coisa, preciso te informar uma coisa, o problema talvez nao esteja na sua logica, na logica do Genexus de criar queries para o BD, ou mesmo programar C# e Java, mas exatamente na sua interface.E sabe porque? imaginemos um Grid na interface contendo um conjunto de 10 variaveis, a respeito de seu cadastro de clientes, e ainda, a pedido do usuario, apresentemos 200 registros de clientes ao mesmo tempo. Teriamos um pacotinho formado por 10 x 200 x o tamanho em bytes de cada variavel, a
ser processada no servidor e enviada ao navegador. E.... do navegador ao servidor quando voce pressionar algum evento do tipo POST. Ou seja, a informacao em formato variavel na interface sera devolvida ao servidor no POST, e nosso grid pesadao vai tambem ser enviado ao servidor de volta, e sabe porque? somente para voce ter um for each line in GRID.Desta forma,, temos a beleza do comando for each line denegrida pela queda significativa de desempenho necessario para que a informacao da interface seja devolvida ao servidor. Fazer o que, como falei antes nao existe passe de onibus livre.TestandoSe voce tiver um programa que te apresente um timeline com o tempo de resposta do servidor, normalmente os navegadores atuais dispoem de um recurso assim, podera, construindo um webpanel com um Grid cheio de coisas, medir o tempo gasto na chamada GET e posteriormente na chamada POST.Construindo uma interface de testes e simples, escolha uma tabela que contenha muitos registros, e monte um GRID recuperando um conjunto significativo deles. Em seguida faca variacoes neste GRID para diminuir o que sera devolvido ao servidor.Caso 1) Montei um webpanel simples com um GRID utilizando atributos com 10 colunas e 500 registros e obtive os seguintes tempos de resposta.tempoenviadosrecebidos1o GET01.46766729.8822o GET01.01563129.8273o GET01.01963129.8271o POST01.086196.09828.6052o POST01.038196.85828.6053o POST01.049196.85828.605Caso 2) O mesmo conjunto de colunas, mas desta vez montando o mesmo GRID com variaveis.tempoenviadosrecebidos1o GET03.499631 46.3112o GET03.02263146.3113o GET03.06463146.3111o POST03.025136.44744.2442o POST02.942137.56444.2443o POST02.906137.56444.244Ja e possivel perceber o problema quando se olha as linhas GET e POST em ambos os testes. A coluna enviados mostra bem que no POST as informacoes que estao no navegador sao enviadas ao servidor.Um detalhe interessante e que com variaveis o Genexus produz mais codigo, aproximadamente 54% maior.O tempo tambem e influenciado, ou seja com atributos e menor, minha teoria para isso e a necessidade das alocacoes no Genexus, para se atribuir cada variavel e se executar o LOAD acaba gastando mais recursos de processamento.Normalmente nos preocupamos com a primeira carga da interface, mas se voce observar, o envio da informacao ao servidor a partir desta primeira carga e que pesa.O que fazer?Diminua sua interface, use menos variaveis, nao utilize o GRID.Nao deixe o Automatic Refresh ligado, ao inves disto prefira um botao para realizar a filtragem dos registros. Nao carregue Grids com informacoes 'default', ou seja, aguarde a pessoa definir o que deseja ver.Os dados que alcancamos sao meio estranhos, e cabe um estudo mais aprofundado para identificar porque os POSTs sao exageradamente grandes. Os tempos tambem sofreram influencia, apesar dos pacotes terem dimensoes parecidas, enfim, precisaremos abordar a questao em um outro artigo.Por enquanto, recomendamos juizo no POST.
nossa disposicao no Toolbox do objeto GeneXus. Ou ainda, na propriedade Control Type de atributos e variaveis.O objetivo fundamental sera sempre o de oferecer algum recurso visual ou funcional diferenciado na interface do usuario, e que pode ser um novo controle para ingresso de dados, novos componentes de navegacao como menus, navbar, dropdowns, ou mesmo recursos para controlar as acoes dos usuarios.Para chegarmos a isto necessitaremos conhecer novos recursos como a linguagem Javascript, CSS, HTML, XML e XSLT. Mas tambem bibliotecas externas que eventualmente nos fornecam o recurso que desejamos implementar. Alem dos proprios arquivos de configuracao.Nao e necessario ser um programador profissional destes recursos para se alcancar resultados excelentes, veja meu caso, por exemplo, rs.User Control: Construindo controles com o GeneXusComo estrategia de aprendizagem deste tema peculiar, praticamente tive que ler e interpretar o funcionamento da grande maioria dos User Controls do Genexus Marketplace, entender suas semelhancas e diferencas, e em seguida buscar uma explicacao plausivel para seu comportamento. A intensa programacao Javascript por muitas vezes ocultavam importantes segredos, assim como as classes CSS que quando em funcionamento tambem nao respondiam a contento, enfim, um cenario muito desafiador.O Genexus Wiki, uma fonte importantissima de informacao, desta vez nao contribuiu muito.Ao final foi simples chegar a uma conclusao: o tema e muito importante para ficar escondido no mato. E como resultado desta aventura, resolvi escrever um livro sobre este tema desafiador, principalmente porque o pouco material disponivel praticamente pouco me ajudou.A ideia por traz do livro foi simples: dividir os temas mais complexos em topicos e apresentar muitos exemplos praticos para reforcar todo conteudo apresentado. Com isso chegamos a onze capitulos que vao apresentar e desenvolver todos os recursos necessarios para se construir seu proprio User Control. E ao termino de cada um, uma atividade pratica com o objetivo de desenvolver um controle util com o recurso Bootstrap, ou seja, o mesmo framework utilizado pelo GeneXus para construir as interfaces responsivas.Um detalhe, nao abordo no livro User Controls para Android e iOs, nesta edicao limitei a controles para Web. Entao, se voce tambem sofrer da mesma doenca: usercontrolitis curiositis, tera a sua disposicao um material que eu acredito, ira te ajudar nesta aventura.Disponivel aqui:
os seguintes passos.Desligar o Firewall, ou adicionar a excecao que bloqueia o programa Debug.Remover protecao UAC do Windows.Desligar o GenexusAbrir Genexus em modo administradorDefinir modo DEBUG para a execucaoAbrir o programa desejado e incluir os breakpointsExecutar o programa O passo (2) e meio incognita, mas tive que fazer isso para que o Debug de fato operasse.Fiz o teste no gerador .NET e Java e em ambas as situacoes o DEBUG abriu.
conforme o exemplo apresentado a seguir.Event 'delete' do 'Host' &querystring='Empresa' + "/" + &EmpresaSDT.EmpresaId.ToString() &httpclient.Execute('DELETE', &querystring) &StatusCode=200 do 'Message'EndeventResumindoPodemos utilizar uma transacao e implementar um mecanismo de operacao remota dos registros publicando-a como REST. O proprio Genexus utiliza esta estrategia para prover informacoes e funcionalidades para as aplicacoes SD.O mecanismo torna o modelo de programacao um pouco mais cheia de codigo, porem, oferece novos cenarios de aplicacao.O que se deve levar em conta e a velha historia do desempenho x controle, pois neste modelo teremos um forte controle sobre o compartilhamento da informacao, por outro lado, teremos um novo cenario no qual nao poderemos explorar muito o desempenho do acesso direto ao banco de dados. Para compensar, o modelo vai exigir um pouco mais de infra-estrutura para compensar a pequena ineficiencia.Particularmente, acho interessante.Mais informacao em:http://wiki.genexus.com/commwiki/servlet/wiki?30704,HowTo%3A+Inserting+data+using+a+BC+exposed+as+Rest+service, http://wiki.genexus.com/commwiki/servlet/wiki?30701,HowTo%3A+Updating+data+using+a+BC+exposed+as+a+Rest+service,http://wiki.genexus.com/commwiki/servlet/wiki?30702,HowTo%3A+Deleting+data+from+a+BC+exposed+as+a+Rest+service,http://wiki.genexus.com/commwiki/servlet/wiki?30704,HowTo%3A+Inserting+data+using+a+BC+exposed+as+Rest+service, http://wiki.genexus.com/commwiki/servlet/wiki?14573,Category%3AREST+Web+Services, https://en.wikipedia.org/wiki/Representational_state_transferAcesso aos exemplos, formato XPZ:REST_Servicos: Kb fornecedora dos dados
rapido e nem lentoCrescendo e Diminuendo a cada momentoAs vezes cesura, silencioO habito faz o Maestroque rege de costas para a plateiauma orquestra de pensamentos, palavras e acoes.Indicando a dinamica de cada passagemAcidentes, escalas, harmonia,Lembre-se do tom, respira!O aplauso sera consequenciase expor a sua essenciaFlavia Correa Garcia
Vivemosem um pais com uma diversidade cultural imensa, mas que nao leva a propriacultura a serio. Pelo contrario, zomba da sua cultura, esnoba, fala mal. O bommesmo e o que vem de fora, o importado e o que toca na radio, o que faz sucessona TV. O imigrante e sempre bem vindo, mas o migrante, esse sofre xenofobia. Candoblee coisa do diabo, frevo e danca estranha, xaxado nem se fala, bumba-meu-boi ninguem conhece e o tecnobrega e brega. Dubstep e o que e legal, rock internacional, oalternativo. Nordestino e gente burra, nortista e indio, sulino e bonito,sudestino tem o poder do pais e o resto e so resto. Levi-Strauss jacomprovou que nao existe cultura superior a outra, ha apenas culturas diferentes,porem ha os que insistem em se achar melhores que os outros. Mania de pais deterceiro mundo? Nao. Mania de pais de terceiro mundo e justificar a miseria dopais com um tambem, pais de terceiro mundo. Nada e questionado. Se apareceuna midia e o que aconteceu. Hoje qualquer balela e dita como verdade quandobem divulgada na nossa comunicacao em massa. A TV nos diz o que se deve ou nao sabere nos aceitamos de cabeca baixa. Impotentes. Colocamos a culpa na sociedade eesquecemos que a sociedade somos nos. Nos portadores de cultura e linguagem. Comodisse Marcelo D2, naquela musica Desabafo: O cidadao por outro lado se dizimpotente, mas a impotencia nao e uma escolha tambem de assumir a propriaresponsabilidade, hein?. Em uma quase lavagem cerebral, assistimos dia a diaa desgraca do mundo de bracos cruzados, como se nada pudesse um dia mudar. Ecomo ja disse Bertolt Bretch, nao aceiteis o que e de habito como coisanatural, pois em tempo de desordem sangrenta, de confusao organizada, dearbitrariedade consciente, de humanidade desumanizada, nada deve parecer natural, nada deve parecer impossivel de mudar. Raissa P. Ta, ja sei o que voce esta pensando... Putz, que titulo eesse; O cara ta apelando..., Um senhor tao distinto, falando %$#@... (hehehe)Olha gente, tenho que confessar, nao sou de falar muitopalavrao mesmo, (se bem que, nem sei se %$#@, ainda e consideradopalavrao...deixemos para outro post), mas nao tem como fugir muito disso...Porque o que marca a nossa realidade sao as rotinas diarias,a responsabilidade, os compromissos, os deveres...um sem fim de DESAFIOS...diacho...numfica pesado demais?Como ja foi dito aqui, quando criancas, nao vemos a hora, defazermos 18 anos e ser dono do proprio nariz, (e nao sei quem disse isso pragente), a nossa vida vai se transformar e num passe de magica, casa, carro,viagens, casamento feliz, bom emprego, irao se materializar diante os nossosolhos.A gente passa 18 anos tentando ser adulto e o resto da vidatentando voltar a ser crianca...Ora, se um dos grandes males da sociedade moderna, que e ouso de drogas, e que a principio o seu uso, parte de uma fuga da realidade, eporque o negocio e sim, pesado demais...Grandes mestres produziram obras belissimas, fazendo uso dealucinogenos.E nao estou aqui fazendo apologia as drogas, porque afinal,sou bem careta, mas cada um no seu cada um...o que eu quero colocar aqui, que,sim, a realidade e mesmo uma...Ou nao?Acho que
e ai que entra a questao da AUTOCONFIANCAPorque a tal da Autoconfianca e um negocio muito complicado...ou voce nasce com ela ou adquire a muito custo.Porque alguem ja viu o Superman, correr de algum perigo? Claroque nao, o cara pode tudo... Voa, tem visao de raio x, e a prova de balas...assimfica facil encarar todos os perigos e problemas ...e ele so tem que correr de umapedrinha. Veja se isso e problema que se apresente...a vida do cara e sussa!!!Ou voce pode recorrer a estimulos...alguns so fazem algumacoisa, depois que tomam uma...outros se estimulam ouvindo musica...eu sou umdeles. Posso derrubar um muro, ouvindo o tema de ROCKY(...Bom, pelo menos euacredito que sim.)Imaginem...Uma obra de demolicao, varias caixas de som esolta a trilha de Rocky...Aumentaria a produtividade Mas mesmo nao tendo superpoderes ou mesmo nao recorrendo a estimulos,acho que ainda da pra sermos Super. Primeiro passo e, nos conhecermos de verdade...nao e facil,pois temos uma visao de NOS MESMOS, que nem sempre, coincide com o que somos deverdade...por isso, conhecer a pessoaque, voce ve todo dia no espelho, e imprescindivel. Pra ter autoconfianca, o autoconhecimento e fundamental.E confiantes, cremos que somos capazes de realizar coisasque sempre sonhamos... Se sonho, eu quero, se quero, corro atrasNo que desemboca na tao famigerada AMBICAO... (Musica desuspense).Por causa do nosso modelo capitalista, essa palavra tomou umteor muito pejorativo; se voce e uma pessoa ambiciosa, sempre vem na cabeca daspessoas que voce vai passar, como um trator por sobre elas...Enfim, voce se torna o antiCristo.Sonho, desafio, ambicao ou o nome que voce quiser dar, saoo que nos movem para o alto, para realizar coisas e de preferencia, coisasdiferentes...Que a ambicao, seja o estimulo que te impulsione a realizarseus sonhos e encarar as dificuldades... Ou entao compre um ipod, e deixa amusica te levarEntao nao importa quao dura a realidade seja, todos temos umpapel a cumprir e que as rotinas diarias, nao nos sufoquem.. Olha, sei tambem que,falando assim, parece bem aqueles textinhos autoajuda; que e mais facil falar, doque fazer...mas, o que lhe RESTA?Por isso, corra, corra muito, caia, se levante, aprenda,ganhe experiencia, ensine (pois isso e muito importante) e no final, se naorealizou tudo que quis, pelo menos ao olhar pra tras, voce vera que tentou...Gosto muito, daquela frase: Penso, logo, existo...Mudemos para: Sonho, logo, corro atras...Por isso, sonhem. Dan Camargo
o das consequencias... Por isso, ao nos conhecermos, saber das nossas opcoes e ao fazermosas nossas escolhas, temos que, pelo menos, estar preparados (...doce ilusao),para fazermos a escolha mais adequada.Afinal, nao tem aquele dito, Pequenas acoes podem mudar oMundo ? Entao, que seja do Avesso...(*DeLorean era um automovel que foi usado como maquina dotempo, no Filme De volta para o futuro, decada de 80) Postado por Dan Camargo