thegoodfellas/blogset-br huggingface dataset:
"Nenhum projeto e viavel se nao comeca a construir-se desde ja: o futuro sera o que comecamos a fazer dele no presente". Icami Tiba Fonte: Psicologa Patricia L. Paione Grinfeld do Blog Ninguem Cresce SozinhoAlguns pais/maes encaram a questao da sua nudez diante dacrianca com muita naturalidade: se despem total ou parcialmente diante dosfilhos, tomam banho com a prole ou andam sem roupa pela casa. Outros optam porpreservar sua intimidade, nao se colocando pelados na frente dos filhos, nuncaou salvo algumas excecoes. A grande maioria, contudo, tem um percurso bastanteparecido: enquanto a crianca e bem pequena, estar vestido ou nao na frente delanao faz a menor diferenca. Porem, conforme ela cresce e comeca a se interessarpelo corpo do adulto, lancando perguntas, olhares e maos curiosas, o que eracotidiano, pode comecar a causar certo incomodo e duvidas nos pais. Na nossacultura, onde o nu e da ordem do privado, e bom que cause.Em geral, os pais se perguntam: Posso ficar nu diante dos meus filhos? Ate queidade o pai pode ficar pelado na frente da filha e mae na frente do filho? Temalgum problema a familia toda tomar banho junto?Antes de responder a estas e outras perguntas que seguem nesta direcao, eimportante que os pais percebam, individualmente, enquanto homem e enquantomulher, como se sentem nus diante dos filhos. Como sao individuos diferentes,nem sempre vao sentir a mesma coisa, o que nao e nenhum problema para acrianca.Problema para a crianca, e toda a familia, surge quando o que se sente ediferente do que se vivencia diante da nudez. Existe uma inibicao por parte dospais em expor seu corpo e ainda assim, por qualquer razao (mesmo que seja apraticidade), a nudez acontece? Existe um prazer explicito ou velado, mesmo quenao seja genital (o prazer sexual adulto), ao ficar nu diante dos filhos(prazer em ser bacana, em curtir um banho conjunto, em trocar a roupa do filhoque ja tem autonomia para se despir e vestir sozinho, etc.)?Ainda que para os pais sua propria nudez se isente de qualquer inibicao ouprazer, para a crianca, estar diante do corpo adulto descoberto provocasensacoes e sentimentos que ela nao e capaz de nomear, como excitacao ouidentificacao com o corpo do adulto. Isto lhe e bastante confuso. Por estarazao, a exposicao gratuita ao nu adulto (incluindo publicidade, novelas,filmes e afins) deve ser evitada dos 3-4 anos ate a adolescencia, fase em quese adquire um corpo igual ao do pai ou da mae.No entanto, embora devam ser evitadas, ha situacoes em que nao ha como seesquivar da nudez adulta diante da crianca, como no vestiario de um clube.Estas sao situacoes esporadicas e nao rotineiras. No dia a dia deve-sepriorizar espacos privativos para a intimidade de cada membro da familia. O banho,evento mais comum da exposicao do corpo, deve ser da crianca ou do adulto.Quando a crianca ainda precisa de cuidados para se banhar, se enxugar,despir-se ou se vestir, os pais devem exerce-los vestidos, mostrando que aquelee um momento da crianca. Pais que usam sunga ou maes que colocam biquini/maiopara dar banho dos filhos (e, pior ainda, para tomar banho com os filhos)transmitem
uma mensagem ambigua, do mostrar sem poder mostrar, donatural-artificial. Filhos aprendem que aquelas partes do corpo sao carregadasde contradicao e pudor.Na exposicao de corpos, muitas criancas incomodam-se diante da nudez, trilhandoseu proprio caminho em busca de privacidade. Por si so, evitam estar diantedo adulto nu, nao aceitam ajuda na troca de roupas ou na hora do banho,trocam-se de costas, fecham portas em situacoes em que estao despidas. Os paisprecisam acatar este desejo de privacidade, reforcando, inclusive suaimportancia. Mais do que a vergonha, o que esta em jogo e a intimidade, aprivacidade e o cuidado e respeito ao corpo. Da mesma maneira, os momentosde intimidade dos pais precisam ser demarcados e sinalizados para que tanto acrianca quanto os pais saibam quais situacoes sao coletivas e quais saoindividuais.Quando os espacos privativos para intimidade sao instalados e respeitados, acrianca aprende que tem coisas que sao so suas e outras que podem sercompartilhadas; aprende a reconhecer o que quer ou nao, o que lhe causa prazerou nao, quem pode mexer no seu corpo ou nao, para quem pode mostrar o corpo ounao. Sabendo dos seus limites, a crianca aprende a respeitar o proprio corpo e,consequentemente, o corpo do outro, evitando a confusao de sentimentos, aerotizacao precoce e situacoes de vulnerabilidade.
Nao somos apenas o que pensamos ser. Somos mais, somos tambem o que lembramos e aquilo de que nos esquecemos; somos as palavras que trocamos, os enganos que cometemos, os impulsos a que cedemos, sem querer. (Freud) PASSAGEM DE SOM BANDA BLITZ PUTA QUE PARIU !!! QUE GALERAO !!! QUE SHOWZAO BILLY BLITZ (TECLADISTA) E MARCIO MAGALHAES OLHA O MAR DE GENTE !!! DISCO BLITZ !!! BLITZ NO PIC MARCELO REIS, BRANCO, CARLAO E MARCELO FESTA NO PARAISO !!! OS SERTANEJOS ALISSON, FYLE E JHONNY TON TON, ALISSON, FYLE, MARCIO E JHONNYJHONNY, ALISSON, MARCELINHO DE LIMA, FYLE, CAMARGO E MARCIOVALADARES EM PESOPARA, PARA TUDOMARCIO, FYLE, MARTA E ELEFYLE E LEANDROQUE GALERA E ESSA A BANDASHOW CHAPARRALLGALERA DO CHAPARRALLMARQUITO GUITARRISTA CHAPARRALL E MARCIO MAGALHAESMARCIO MAGALHAES E NOLLI VOCALISTA CHAPARRALL EVANDRO MESQUITA E MARCIO MAGALHAES A DOIS PASSOS DO PARAISO BETH FRIGIDA O MESTRE EVANDRO MESQUITA MARCIO MAGALHAES MARCIO MAGALHAES E EVANDRO MESQUITA O TRIO PARADA DURA !!! PALCOO !!! BANDA BLITZO ALUNO E O MESTRE ANDREIA COUTINHO (BACKVOCAL) E JUBA (BATERISTA) BLITZ CLAUDIA NIEMEYER E JOANA CLAUDIA NIEMEYER, LUH, JOANA E ANDREIA COUTINHO CLAUDIA NIEMEYER, ROGERIO MEANDA, JUBA, ANDREIA, EVANDRO E LUH CLAUDIA NIEMEYER, ROGERIO MEANDA, JUBA, ANDREIA, EVANDRO, LUH E BILLY A VERDADEIRA BLITZ CLOSE PALCOOO !!! FESTA DO DIVINO CONTAGEM 10/07/2011 - HOMEM MAIS FEIO DO BRASIL Inicio da Festa em Contagem MG Apoio TransAmerica FM Eu e o Fyle Para Tudo Palcoooo! Fyle o Terremoto do Rodeio Para tudo Para Tudo Fyle ! Ah Galera! Onde esta o Wally? Danca do Sapinho ! Palcoooo 3 ! Que Galera e essa ! Dancarinas ! Lotado ! Gretchen e Fyle ! Gretchen e Eu Gretchen, Fyle & Equipe O VOCALISTA DA BLITZ, O MESTRE EVANDRO MESQUITA E MARCIO MAGALHAES ESCALACAO PARA MANO MENEZES NENHUM COLOCAR DEFEITO, MARCIO MAGALHAES, JUBA BLITZ (BATERISTA), EVANDRO MESQUITA BLITZ (VOCALISTA), WILLIAN BILLY BLITZ (TECLADISTA) E ROGERIO MEANDA BLITZ (GUITARRISTA). PALCO MAO PRO ALTOPRA LA E PRA CA!FLASH COM THE FLASH - OLHA O PASSARINHOPALCOO!!!PALCOOO!!!HORA DO DESCANSOUTEREREMAR DE GENTEO BRASIL PASSANDO PELA JANELAPARADA PARA O LANCHEO VERDADEIRO TRANSPORTE FYLE O PARA TUDOO BUSU DA DULPA MARCELINHO DE LIMA E CAMARGOCANTOR MARCELINHO DE LIMAPATROCINADORA DA MAIOR FESTA DE GV MG RADIO FM MUNDO MEHORJHONNY DA DUPLA JHONNY E ALISSONALAN E ALEXMUSICOS A CAMINHO DO SHOWMARICO MAGALHAES E O CANTOR CAMARGO A nostalgia dos computadores da decada de 80 e algo que nunca parei de ter. Quando crianca, tive a sorte de utilzar varios computadores de 8-bits, como ZX-81, ZX-Spectrum, Apple II e MSX, ou melhor, seus clones nacionais (TK-85, TK-90X, TK2000), uma vez que o Brasil vivia a epoca da Reserva do Mercado de Informatica.Numa epoca que nao havia Internet, nos passavamos o tempo a digitar programas. Uma serie de livros sobre programacao de jogos foi editada pela editora Lutecia no Brasil, mas os originais americanos foram liberados pela Usborne. Neste artigo, eu vou traduzir o jogo principal do Computer Battlegames, chamado de Missile, de Apple II Basic para Python com Pyglet. A listagem original esta na pagina 34 do livro em ingles (ver pdf acima).10 HOME20 HGR30 HCOLOR=340
DIM Y(3),F(3)50 N=1 : MS=560 PS=INT(RND(1)*6+4)70 P=INT(RND(1)*135+11)80 GOSUB 40090 FOR I=PS TO 265 STEP PS100 X=I-PS : Y=159-P : C=0 : GOSUB 300110 X=I : C=3: GOSUB 300120 F$="" : IF PEEK(-16384)>127 THEN GET F$130 IF F$="" OR N>3 THEN 160140 F(N)=1150 N=N+1160 FOR J=1 TO 3170 C=0 : GOSUB 350180 IF F(J)=0 OR Y(J)>145 THEN 230190 Y(J)=Y(J)+MS200 C=3 : GOSUB 350210 X=J*70-I : Y=P-Y(J)220 IF X>-1 AND X<15 AND Y>-9 AND Y<5 THEN 270230 NEXT240 NEXT250 VTAB 22 : PRINT "MISSED"260 END270 VTAB 22 : PRINT "HIT!!!"280 END300 HCOLOR=C310 HPLOT X,Y TO X,Y-8320 HPLOT TO X+3,Y-2 : HPLOT TO X+12, Y-2330 HPLOT TO X+14,Y : HPLOT TO X,Y340 RETURN350 HCOLOR=C360 HPLOT 70*J,158-Y(J) TO 70*J,154-Y(J)340 RETURN350 HCOLOR=C360 HPLOT 70*J, 158-Y(J) TO 70*J,154-Y(J)370 RETURN400 FOR J=1 TO 3410 HPLOT 70*J-5,159 TO 70*J+5,159420 NEXT430 RETURNVejamos o jogo rodando em um emulador:Versao comentada:# Limpa a tela10 HOME# Entra no modo de alta resolucao 280x19220 HGR# Seleciona a cor 3 (purpura/magenta)30 HCOLOR=3# Cria dois vetores com 3 elementos cada40 DIM Y(3),F(3)# Inicializa N igual a 1 e MS igual a 550 N=1 : MS=5# Gera um numero aleatorio entre 0 e 6 + 460 PS=INT(RND(1)*6+4)# Gera um numero aleatorio entre 0 e 135 + 1170 P=INT(RND(1)*135+11)# Desvia para subrotina80 GOSUB 400# Loop: repete I de PS ate 265, incrementando de PS90 FOR I=PS TO 265 STEP PS# Calcula os valores de X, Y e C. Desvia para subrotina em 300100 X=I-PS : Y=159-P : C=0 : GOSUB 300# Define X e C. Desvia para subrotina 300110 X=I : C=3: GOSUB 300# Verifica se uma tecla foi pressionada. Se foi, guarda em F120 F$="" : IF PEEK(-16384)>127 THEN GET F$# Se algo foi pressionado ou se N>3 desvia para 160130 IF F$="" OR N>3 THEN 160# F[N] = 1140 F(N)=1# N+=1150 N=N+1# Repete J de 1 ate 3160 FOR J=1 TO 3# Zera C e desvia para subrotina da linha 350170 C=0 : GOSUB 350# Se F[J]==0 ou Y[J]>145 desvia para 230180 IF F(J)=0 OR Y(J)>145 THEN 230# Y[J]+=MS190 Y(J)=Y(J)+MS# C=3. Desvia para subrotina da linha 350200 C=3 : GOSUB 350# Calcula X e Y210 X=J*70-I : Y=P-Y(J)# Se X>-1 e X<15 e Y>-9 e Y<5 desvia para 270220 IF X>-1 AND X<15 AND Y>-9 AND Y<5 THEN 270# Fim do loop, volta para o for da linha 160230 NEXT# Fim do loop, volta para for da linha 90240 NEXT# Posiciona o cursor na linha 22 e imprime MISSED250 VTAB 22 : PRINT "MISSED"# Termina o programa260 END# Posiciona o cursor na linha 22 e imprime HIT!!!270 VTAB 22 : PRINT "HIT!!!"# Termina o programa280 END# Troca a cor de desenho para C300 HCOLOR=C# Traca uma linha de X,Y ate X,Y-8310 HPLOT X,Y TO X,Y-8# Continua a linha320 HPLOT TO X+3,Y-2 : HPLOT TO X+12, Y-2330 HPLOT TO X+14,Y : HPLOT TO X,Y# Retorno da subrotina340 RETURN# Troca a cor de desenho para C350 HCOLOR=C# Desenha linha360 HPLOT 70*J,158-Y(J) TO 70*J,154-Y(J)# Volta da subrotina340 RETURN# Troca a cor para C350 HCOLOR=C# Desenha linha360 HPLOT 70*J, 158-Y(J) TO 70*J,154-Y(J)# Volta da subrotina370 RETURN# Repete J de 1 a
self.estado = "jogando" self.I = self.PS self.pressionado = False self.label = None def atualiza(self): if self.estado == "jogando": self.jogue() else: if self.label: glMatrixMode(gl.GL_PROJECTION) glLoadIdentity() glOrtho(0, self.window.width, 0, self.window.height, -1, 1) glMatrixMode(gl.GL_MODELVIEW) self.label.draw() if self.pressionado: pyglet.app.event_loop.exit() def jogue(self): # Desvia para subrotina # 80 GOSUB 400 self.sub_400() # Loop: repete I de PS ate 265, incrementando de PS # 90 FOR I=PS TO 265 STEP PS if self.I > 265: self.sub_250() return # Calcula os valores de X, Y e C. Desvia para subrotina em 300 # 100 X=I-PS : Y=159-P : C=0 : GOSUB 300 self.X = self.I - self.PS self.y = 159 - self.P self.C = 0 self.sub_300() # Define X e C. Desvia para subrotina 300 # 110 X=I : C=3: GOSUB 300 self.X = self.I self.C = 3 self.sub_300() # Se algo foi pressionado ou se N>3 desvia para 160 # 130 IF F$="" OR N>3 THEN 160 if self.pressionado and self.N < 3: # F[N] = 1 # 140 F(N)=1 self.F[self.N] = 1 # N+=1 # 150 N=N+1 self.N += 1 self.pressionado = False # Repete J de 1 ate 3 # 160 FOR J=1 TO 3 for self.J in range(0, 3): # Zera C e desvia para subrotina da linha 350 # 170 C=0 : GOSUB 350 self.C = 0 self.sub_350() # Se F[J]==0 ou Y[J]>145 desvia para 230 # 180 IF F(J)=0 OR Y(J)>145 THEN 230 if self.F[self.J] == 0 or self.Y[self.J] > 145: continue # Y[J]+=MS # 190 Y(J)=Y(J)+MS self.Y[self.J] += self.MS # C=3. Desvia para subrotina da linha 350 # 200 C=3 : GOSUB 350 self.C = 3 self.sub_350() # Calcula X e Y # 210 X=J*70-I : Y=P-Y(J) self.X = (self.J + 1) * 70 - self.I self.y = self.P - self.Y[self.J] # Se X>-1 e X<15 e Y>-9 e Y<5 desvia para 270 # 220 IF X>-1 AND X<15 AND Y>-9 AND Y<5 THEN 270 if self.X > -1 and self.X < 15 and self.y > -9 and self.y < 5: self.sub_270() # Fim do loop, volta para o for da linha 160 # 230 NEXT # Fim do loop, volta para for da linha 90 # 240 NEXT # 90 FOR I=PS TO 265 STEP PS self.I += self.PS def sub_250(self): # Posiciona o cursor na linha 22 e imprime MISSED # 250 VTAB 22 : PRINT "MISSED" print("MISSED") self.imprima("MISSED") # Termina o programa # 260 END self.muda_estado("fimdejogo") def sub_270(self): # Posiciona o cursor na linha 22 e imprime HIT!!! # 270 VTAB 22 : PRINT "HIT!!!" print("HIT") self.imprima("HIT!!!") # Termina o programa self.muda_estado("fimdejogo") def sub_300(self): # Troca a cor de desenho para C # 300 HCOLOR=C self.set_color(self.C) # Traca uma linha de X,Y ate X,Y-8 # 310 HPLOT X,Y TO X,Y-8 # Continua a linha # 320 HPLOT TO X+3,Y-2 : HPLOT TO X+12, Y-2 # 330 HPLOT TO X+14,Y : HPLOT TO X,Y pyglet.graphics.draw(6, pyglet.gl.GL_LINE_LOOP, ('v2i', (self.X, self.y, self.X, self.y - 8, self.X + 3, self.y - 2, self.X + 12, self.y - 2, self.X + 14, self.y, self.X, self.y))) # Retorno da subrotina # 340 RETURN def sub_350(self):
self.muda_estado("fimdejogo") def desenha_aviao(self): self.set_color(self.C) pyglet.graphics.draw(6, pyglet.gl.GL_LINE_LOOP, ('v2i', (self.X, self.y, self.X, self.y - 8, self.X + 3, self.y - 2, self.X + 12, self.y - 2, self.X + 14, self.y, self.X, self.y))) def desenha_tiro(self): self.set_color(self.C) J = self.J + 1 pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (70 * J, 158 - self.Y[self.J], 70 * J, 154 - self.Y[self.J]))) def desenha_bases(self): self.set_color(3) for J in range(1, 4): pyglet.graphics.draw(2, pyglet.gl.GL_LINES, ('v2i', (70 * J - 5, 159, 70 * J + 5, 159))) def set_color(self, color): glColor3f(*self.cor[color]) def muda_estado(self, estado): print("Mudanca de Estado: {} --> {}".format(self.estado, estado)) self.estado = estado def imprima(self, mensagem): self.label = self.window.crialabel(mensagem)class Missile(pyglet.window.Window): def __init__(self): self.scale = 4 # Escala os graficos 4x self.frames = 8 # Frames por segundo. # Define quantas vezes vamos atualizar a tela por segundo super(Missile, self).__init__(280 * self.scale, 192 * self.scale, caption="Missiles") self.set_mouse_visible(False) self.game = Game(self) self.schedule = pyglet.clock.schedule_interval( func=self.update, interval=1.0 / self.frames) def update(self, interval): pass def on_draw(self): window.clear() self.game.atualiza() def on_resize(self, width, height): # Inicializa a view glViewport(0, 0, width, height) glMatrixMode(gl.GL_PROJECTION) glLoadIdentity() # Inverte as coordenadas do eixo Y glOrtho(0, width, height, 0, -1, 1) # Aplica a escala glScalef(self.scale, self.scale, 1.0) glMatrixMode(gl.GL_MODELVIEW) def on_key_press(self, symbol, modifiers): self.game.pressionado = True def crialabel(self, mensagem, x=None, y=None, fonte='Times New Roman', tamanho=36): """Prepara uma mensagem de texto para ser exibida""" x = x or self.width // 2 y = y or self.height // 2 return pyglet.text.Label( mensagem, font_name=fonte, font_size=tamanho, x=x, y=y, anchor_x='center', anchor_y='center')window = Missile()pyglet.app.run()Em um proximo artigo, vou continuar a refatorar o codigo. Tiro e Aviao sao claramente classes. Animacao deixa a desejar. Mas e o divertido da programacao, voce sempre pode melhorar.
sendo feito por chaves inteiras (a chave surrogate e utilizada apenas para encontrar o registro em C, as ligacoes entre A e B sao feitas com chaves inteiras).E nesta imagem o resultado das operacoes de atualizacao da tabelas. No caso, atualizamos a partir de C, as tabelas A e B. Mais uma vez as chaves inteiras tiveram um melhor desempenho e a combinacao de chave inteira com uuid se apresenta como uma meio termo.Repetindo os testes, mas desta vez para 10.000 registros, as diferencas se tornam mais claras.No caso da insercao:Acesso:AtualizacaoEmbora haja diferenca entre os tempos destas operacoes, os resultados nao demonstram uma lentidao excessiva ao aumentarmos o tamanho da chave 4 vezes, de 32 para 128 bits.Considerando os tempos das operacoes com chaves inteiras como 100%, temos os seguintes resultados medios: Insercao Atualizacao Acesso integer 100.00% 100.00% 100.00% uuid 101.64% 108.77% 108.97% interger + uuid 106.15% 106.63% 111.85% Utilizar as UUIDs em URLs tambem aumenta o tamanho das strings, mas acredito ser um preco a se pagar pela comodidade.Alem de esconder a sequencia de chaves e nao possibilitar a deducao do numero de registros de seu banco de dados, UUID possuem as seguintes vantagens:a) Podem ser geradas em varias maquinas, permitindo que seu banco rode em varios servidores sincronizados.b) Evitam ataques por deducao das chavesDesvantagens de UUIDs:a) Ocupam mais espaco em disco e em memoria (128 bits)b) Sao um pouco mais lentas para gerarc) Aumentam o tamanho das URLsd) Sao dificeis de memorizar (o que pode dificultar as tarefas de depuracao)Eu decidi utilizar UUID em projetos futuros, uma vez que a seguranca das chaves e mais importante para mim que o espaco ocupado por estas e que nao ha uma degradacao importante na velocidade de acesso ao banco. O uso de UUIDs tambem facilitar a utilizacao do banco em clusters e ate mesmo a geracao de chaves offline.
varios nomes como CEPI, FEPEMM, FMM e finalmente Fundacao Nokia a partir de 2001. Com a venda da Nokia, a Fundacao Nokia passou a ser mantida pela Microsoft.Este ano, pela primeira vez em 30 anos, o processo seletivo da instituicao foi suspenso.Se esta situacao continuar, a Fundacao Nokia vai desaparecer em 3 anos.Como ex-alunos desta instituicao, pedimos que voce entre em contato com nossos representantes, enviando um e-mail explicando suas razoes para ajudar a manter a Fundacao aberta.Governo do Amazonashttp://www.amazonas.am.gov.br/fale-conosco/Vereadores de Manaus:http://www.cmm.am.gov.br/vereador/Deputados Estaduais do Amazonas:http://www.ale.am.gov.br/deputados/Deputados Federais da bancada do Amazonas:http://www.camara.gov.br/internet/deputado/Dep_Lista_foto.asp?Legislatura=55&Partido=QQ&SX=QQ&Todos=None&UF=AM&condic=QQ&forma=lista&nome=&ordem=nome&origem=NoneSenadores do Amazonas:http://www25.senado.leg.br/web/senadores/por-uf/-/uf/AMVamos tentar tambem via Twitter, eu ja enviei alguns pelo @lskbr (retuites ajudam!), mas voce tambem pode enviar diretamente ao CEO da Microsoft:Satya Nadella - CEO Microsoft@satyanadellaPara quem nao conhece a Fundacao, esta pagina tem varias novidades: http://www.fundacaonokia.org/noticiasNao podemos ficar calados e esperar que esta escola feche. Ajude a manter a Fundacao Nokia aberta, solicitando a Microsoft mais tempo para encontrar uma outra instituicao mantenedora e exigindo a presenca de nossos politicos.
o metodo on_key_press:def on_key_press(self, symbol, modifiers): if symbol == key.S: print("Placar: {}".format(self.game.pontos)) pyglet.app.event_loop.exit() elif symbol == key.R: self.game = Game(self) else: self.game.pressionado = TrueNo caso, o jogo termina quando pressionamos a tecla S e reinicia se pressionarmos a tecla R.O jogo completo ficou assim:Video:Para o proximo post:SonsImagensA pyglet nao e atualizada ha bastante tempo. Eu devo procurar outra biblioteca grafica para outros posts, mas vou terminar as melhorias deste jogo ainda com pyglet e abusando da OpenGL.
b'4': if nx > 1: nx-=1 elif key == b'6': if nx < Jogo.LARGURA*3-1: nx+=1 elif key == b'8': if ny > 0: ny -=1 elif key == b'2': if ny < Jogo.ALTURA*2: ny +=1 elif key == b"S": self.fim_do_jogo() break if self.pode_mover(nx,ny) and (nx, ny) != (self.x,self.y): self.x, self.y = nx, ny self.desenha()Criamos le_teclado como uma corotina, mas como o modulo colorconsole nao foi criado para trabalhar com corotinas, precisamos chamar self.tela.getch usando um Executor, no caso, nosso ThreadPool. Desta forma, nossa chamada bloqueante sera executada em um thread do ThreadPool e nosso loop de eventos vai continuar a executar normalmente. Quando pressionarmos uma tecla, a funcao self.tela.getch vai retornar e a partir dai, trabalharemos com o resultado no yield from. O resto do metodo verifica se a tecla e de movimento ou de saida do jogo. No final, verificamos se o jogador se mexeu ou se a nova posicao seria a de uma parede. Caso a posicao seja alterada, redesenhamos a tela, para que a nova posicao do jogador seja visivel. @asyncio.coroutine def relogio(self): while self.jogando: self.tela.print_at(10,23,datetime.datetime.now().strftime("%d/%m/%y %H:%M:%S")) yield from asyncio.sleep(1)A corotina relogio exibe a data e hora atuais a cada 1 segundo na tela. Esta execucao ocorre mesmo se nada pressionarmos no teclado, confirmado a correta execucao de nosso loop de eventos. Este programa pode ser executado para conter inimigos e move-los em outra corotina, similar a do relogio.Testado no Windows 8.1 com Python 3.4.1, colorconsole 0.7.1.
asyncio.wait_for(protocolo.feito, None)loop = asyncio.get_event_loop()coro = loop.create_connection(EchoClient, '127.0.0.1', 8888)client = loop.run_until_complete(coro)try: loop.run_until_complete(roda_varias(100))except KeyboardInterrupt: passfinally: loop.close()Voce tambem pode utilizar start_server e open_connection para receber diretamente uma tupla com StreamReader e StreamWriter, mas estes exemplos voce pode encontrar na documentacao do Python.No proximo artigo, uma nova classe comum sera usada para gerenciar os protocolos e outra forma de instanciacao sera passada para realizar uma comunicacao entre varios clientes.